#!/usr/bin/env bash export DEBIAN_FRONTEND=noninteractive # Update Package List apt-get update # Update System Packages apt-get upgrade -y # Force Locale echo "LC_ALL=en_US.UTF-8" >> /etc/default/locale locale-gen en_US.UTF-8 apt-get install -y software-properties-common curl # Install Some PPAs apt-add-repository ppa:ondrej/php -y add-apt-repository ppa:chris-lea/redis-server -y # NodeJS curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - ## Update Package Lists apt-get update # Install Some Basic Packages apt-get install -y build-essential dos2unix gcc git git-lfs libmcrypt4 libpcre3-dev libpng-dev chrony unzip make \ python3-pip re2c unattended-upgrades whois vim libnotify-bin pv mcrypt bash-completion # Set My Timezone ln -sf /usr/share/zoneinfo/UTC /etc/localtime # Install Generic PHP packages apt-get install -y --allow-change-held-packages \ php-imagick php-memcached php-redis php-xdebug php-dev # PHP 7.4 apt-get install -y --allow-change-held-packages \ php7.4 php7.4-bcmath php7.4-bz2 php7.4-cgi php7.4-cli php7.4-common php7.4-curl php7.4-dba php7.4-dev \ php7.4-enchant php7.4-fpm php7.4-gd php7.4-gmp php7.4-imap php7.4-interbase php7.4-intl php7.4-json php7.4-ldap \ php7.4-mbstring php7.4-mysql php7.4-odbc php7.4-opcache php7.4-pgsql php7.4-phpdbg php7.4-pspell php7.4-readline \ php7.4-snmp php7.4-soap php7.4-sqlite3 php7.4-sybase php7.4-tidy php7.4-xml php7.4-xmlrpc php7.4-xsl php7.4-zip update-alternatives --set php /usr/bin/php7.4 update-alternatives --set php-config /usr/bin/php-config7.4 update-alternatives --set phpize /usr/bin/phpize7.4 # Install Composer curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer # Set Some PHP CLI Settings sed -i "s/error_reporting = .*/error_reporting = E_ALL/" /etc/php/7.4/cli/php.ini sed -i "s/display_errors = .*/display_errors = On/" /etc/php/7.4/cli/php.ini sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.4/cli/php.ini sed -i "s/;date.timezone.*/date.timezone = UTC/" /etc/php/7.4/cli/php.ini # Install Nginx apt-get install -y --allow-downgrades --allow-remove-essential --allow-change-held-packages nginx rm /etc/nginx/sites-enabled/default rm /etc/nginx/sites-available/default # Setup Some PHP-FPM Options echo "xdebug.remote_enable = 1" >> /etc/php/7.4/mods-available/xdebug.ini echo "xdebug.remote_connect_back = 1" >> /etc/php/7.4/mods-available/xdebug.ini echo "xdebug.remote_port = 9000" >> /etc/php/7.4/mods-available/xdebug.ini echo "xdebug.max_nesting_level = 512" >> /etc/php/7.4/mods-available/xdebug.ini echo "opcache.revalidate_freq = 0" >> /etc/php/7.4/mods-available/opcache.ini sed -i "s/error_reporting = .*/error_reporting = E_ALL/" /etc/php/7.4/fpm/php.ini sed -i "s/display_errors = .*/display_errors = On/" /etc/php/7.4/fpm/php.ini sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php/7.4/fpm/php.ini sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.4/fpm/php.ini sed -i "s/upload_max_filesize = .*/upload_max_filesize = 100M/" /etc/php/7.4/fpm/php.ini sed -i "s/post_max_size = .*/post_max_size = 100M/" /etc/php/7.4/fpm/php.ini sed -i "s/;date.timezone.*/date.timezone = UTC/" /etc/php/7.4/fpm/php.ini printf "[openssl]\n" | tee -a /etc/php/7.4/fpm/php.ini printf "openssl.cainfo = /etc/ssl/certs/ca-certificates.crt\n" | tee -a /etc/php/7.4/fpm/php.ini printf "[curl]\n" | tee -a /etc/php/7.4/fpm/php.ini printf "curl.cainfo = /etc/ssl/certs/ca-certificates.crt\n" | tee -a /etc/php/7.4/fpm/php.ini # Disable XDebug On The CLI sudo phpdismod -s cli xdebug # Set The Nginx & PHP-FPM User sed -i "s/user www-data;/user halo;/" /etc/nginx/nginx.conf sed -i "s/# server_names_hash_bucket_size.*/server_names_hash_bucket_size 64;/" /etc/nginx/nginx.conf sed -i "s/user = www-data/user = halo/" /etc/php/7.4/fpm/pool.d/www.conf sed -i "s/group = www-data/group = halo/" /etc/php/7.4/fpm/pool.d/www.conf sed -i "s/listen\.owner.*/listen.owner = halo/" /etc/php/7.4/fpm/pool.d/www.conf sed -i "s/listen\.group.*/listen.group = halo/" /etc/php/7.4/fpm/pool.d/www.conf sed -i "s/;listen\.mode.*/listen.mode = 0666/" /etc/php/7.4/fpm/pool.d/www.conf service nginx restart service php7.4-fpm restart usermod -a -G www-data halo id halo groups halo # Install Node apt-get install -y nodejs /usr/bin/npm install -g npm /usr/bin/npm install -g yarn # Install SQLite apt-get install -y sqlite3 libsqlite3-dev # Install MySQL echo "mysql-server mysql-server/root_password password secret" | debconf-set-selections echo "mysql-server mysql-server/root_password_again password secret" | debconf-set-selections apt-get install -y mysql-server # Configure MySQL 8 Remote Access and Native Pluggable Authentication cat > /etc/mysql/conf.d/mysqld.cnf << EOF [mysqld] bind-address = 0.0.0.0 default_authentication_plugin = mysql_native_password EOF # Configure MySQL Password Lifetime echo "default_password_lifetime = 0" >> /etc/mysql/mysql.conf.d/mysqld.cnf # Configure MySQL Remote Access sed -i '/^bind-address/s/bind-address.*=.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf service mysql restart export MYSQL_PWD=secret mysql --user="root" -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'secret';" mysql --user="root" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" mysql --user="root" -e "CREATE USER 'halo'@'0.0.0.0' IDENTIFIED BY 'secret';" mysql --user="root" -e "CREATE USER 'halo'@'%' IDENTIFIED BY 'secret';" mysql --user="root" -e "GRANT ALL PRIVILEGES ON *.* TO 'halo'@'0.0.0.0' WITH GRANT OPTION;" mysql --user="root" -e "GRANT ALL PRIVILEGES ON *.* TO 'halo'@'%' WITH GRANT OPTION;" mysql --user="root" -e "FLUSH PRIVILEGES;" mysql --user="root" -e "CREATE DATABASE halo character set UTF8mb4 collate utf8mb4_bin;" sudo tee /home/halo/.my.cnf </dev/null')/vendor/bin:\$PATH\"\n" | tee -a /home/halo/.profile