#!/bin/bash export DEBIAN_FRONTEND=noninteractive export NEEDRESTART_MODE=a export V_USERNAME=vito export V_PASSWORD=$(openssl rand -base64 12) export V_IP_ADDRESS=$(curl https://freeipapi.com --silent) export V_IS_DOMAIN=1 echo "Enter the domain you want to install Vito? (your-domain.com)" echo "Hit enter to use your IP address (${V_IP_ADDRESS}):" read V_DOMAIN if [[ -z "${V_DOMAIN}" ]]; then export V_DOMAIN=${V_IP_ADDRESS} export V_IS_DOMAIN=0 fi echo "Enter your email address:" read V_ADMIN_EMAIL echo "Enter your password:" read V_ADMIN_PASSWORD if [[ -z "${V_DOMAIN}" ]]; then echo "Error: V_DOMAIN environment variable is not set." exit 1 fi if [[ -z "${V_ADMIN_EMAIL}" ]]; then echo "Error: V_ADMIN_EMAIL environment variable is not set." exit 1 fi if [[ -z "${V_ADMIN_PASSWORD}" ]]; then echo "Error: V_ADMIN_PASSWORD environment variable is not set." exit 1 fi apt remove needrestart -y useradd -p $(openssl passwd -1 ${V_PASSWORD}) ${V_USERNAME} usermod -aG ${V_USERNAME} echo "${V_USERNAME} ALL=(ALL) NOPASSWD:ALL" | tee -a /etc/sudoers mkdir /home/${V_USERNAME} mkdir /home/${V_USERNAME}/.ssh chown -R ${V_USERNAME}:${V_USERNAME} /home/${V_USERNAME} chsh -s /bin/bash "${V_USERNAME}" su - "${V_USERNAME}" -c "ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa" << /home/${V_USERNAME}/${V_DOMAIN}/storage/ssh-public.key chown -R ${V_USERNAME}:${V_USERNAME} /home/${V_USERNAME}/${V_DOMAIN}/storage/ssh-private.pem chown -R ${V_USERNAME}:${V_USERNAME} /home/${V_USERNAME}/${V_DOMAIN}/storage/ssh-public.key # setup supervisor export V_WORKER_CONFIG=" [program:worker] process_name=%(program_name)s_%(process_num)02d command=php /home/${V_USERNAME}/${V_DOMAIN}/artisan queue:work --sleep=3 --backoff=0 --queue=default,ssh,ssh-long --timeout=3600 --tries=1 autostart=1 autorestart=1 user=vito redirect_stderr=true stdout_logfile=/home/${V_USERNAME}/.logs/workers/worker.log stopwaitsecs=3600 " apt-get install supervisor -y service supervisor enable service supervisor start mkdir -p /home/${V_USERNAME}/.logs mkdir -p /home/${V_USERNAME}/.logs/workers touch /home/${V_USERNAME}/.logs/workers/worker.log echo "${V_WORKER_CONFIG}" | tee /etc/supervisor/conf.d/worker.conf supervisorctl reread supervisorctl update supervisorctl start worker:* # setup cronjobs echo "* * * * * cd /home/${V_USERNAME}/${V_DOMAIN} && php artisan schedule:run >> /dev/null 2>&1" | sudo -u ${V_USERNAME} crontab - # make the update file executable chmod +x /home/${V_USERNAME}/${V_DOMAIN}/update.sh # cleanup chown -R ${V_USERNAME}:${V_USERNAME} /home/${V_USERNAME} # cache php artisan config:cache php artisan icons:cache # print info echo "🎉 Congratulations!" echo "✅ SSH User: ${V_USERNAME}" echo "✅ SSH Password: ${V_PASSWORD}" echo "✅ DB Name: ${V_DB_NAME}" echo "✅ DB Username: ${V_DB_USER}" echo "✅ DB Password: ${V_DB_PASS}" echo "✅ Admin Email: ${V_ADMIN_EMAIL}" echo "✅ Admin Password: ${V_ADMIN_PASSWORD}" echo "✅ URL: http://${V_DOMAIN}"