Last active
March 18, 2024 17:53
-
-
Save svpernova09/1d313ccba4f5352504b5c8021d1bc441 to your computer and use it in GitHub Desktop.
WSL PHP Development
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 <<EOL | |
[mysqld] | |
character-set-server=utf8mb4 | |
collation-server=utf8mb4_bin | |
EOL | |
# Add Timezone Support To MySQL | |
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql --user=root --password=secret mysql | |
service mysql restart | |
# Install Redis, Memcached, & Beanstalk | |
apt-get install -y redis-server memcached beanstalkd | |
systemctl enable redis-server | |
service redis-server start | |
# Install wp-cli | |
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar | |
chmod +x wp-cli.phar | |
mv wp-cli.phar /usr/local/bin/wp | |
mkdir -p /run/php/ | |
touch /run/php/php7.4-fpm.sock | |
# Add Composer Global Bin To Path | |
printf "\nPATH=\"$(sudo su - halo -c 'composer config -g home 2>/dev/null')/vendor/bin:\$PATH\"\n" | tee -a /home/halo/.profile |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
server { | |
listen 80; | |
server_name laravel.test; | |
root "/home/halo/Code/blog/public"; | |
index index.html index.htm index.php; | |
charset utf-8; | |
location / { | |
try_files $uri $uri/ /index.php?$query_string; | |
} | |
location = /favicon.ico { access_log off; log_not_found off; } | |
location = /robots.txt { access_log off; log_not_found off; } | |
access_log off; | |
error_log /home/halo/Code/blog/storage/logs/laravel.test-error.log error; | |
sendfile off; | |
location ~ \.php$ { | |
fastcgi_split_path_info ^(.+\.php)(/.+)$; | |
fastcgi_pass unix:/run/php/php7.4-fpm.sock; | |
fastcgi_index index.php; | |
include fastcgi_params; | |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
fastcgi_intercept_errors off; | |
fastcgi_buffer_size 16k; | |
fastcgi_buffers 4 16k; | |
fastcgi_connect_timeout 300; | |
fastcgi_send_timeout 300; | |
fastcgi_read_timeout 300; | |
} | |
location ~ /\.ht { | |
deny all; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment