#!/bin/bash #################################################################################################### #### author: SlickStack ############################################################################ #### link: https://slickstack.io ################################################################### #### mirror: http://mirrors.slickstack.io/bash/ss-worker.txt ####################################### #### path: /var/www/ss-worker ###################################################################### #### destination: n/a (not a boilerplate) ########################################################## #### purpose: Performs SlickStack maintenance tasks and retrieves the latest ss-check file ######### #### module version: Ubuntu 20.04 LTS ############################################################## #### sourced by: ss core cron jobs, ss-install, ss-update ########################################## #### bash aliases: ss worker ####################################################################### #################################################################################################### ## include SlickStack configuration ## source /var/www/ss-config ## include SlickStack functions ## source /var/www/ss-functions #################################################################################################### #### SS-Worker: Message (Begin Script) ############################################################# #################################################################################################### ## this is a simple message that announces to the shell the purpose of this bash script ## ## it will only be noticed by sudo users who manually call ss core bash scripts ## ## echo message ## echo -e "${PURPLE}Running ss-worker: Performs SlickStack maintenance tasks and retrieves the latest ss-check file... ${NOCOLOR}" sleep "$SLEEP_MESSAGE_BEGIN" #################################################################################################### #### SS-Worker: Cleanup Temporary Files ############################################################ #################################################################################################### ## delete tmp files ## rm /tmp/ss* rm /tmp/*cron* rm /tmp/blacklist* #################################################################################################### #### SS-Update: Backup Current SS-Config File ###################################################### #################################################################################################### ## SNIPPET: ss-worker, ss-update ## this snippet will duplicate your live ss-config file to the /var/www/meta/ folder ## ## the timestamped .bak files will be cleaned up periodically by ss-clean ## ## backup ss-config ## current_time=$(date "+%Y.%b.%d-%H:%M:%S") cp /var/www/ss-config /var/www/meta/ss-config.bak.$current_time #################################################################################################### #### SS-Worker: Retrieve Latest SS-Check File (SS Core Bash Script) ################################ #################################################################################################### ## here we retrieve the latest ss-check core bash script to improve overall redundancy ## ## thus ss-check avoids installing itself and no single point of failure (SPOF) ## ## retrieve latest ss-check (ss core bash script) ## wget -O /tmp/ss-check http://mirrors.slickstack.io/bash/ss-check.txt ## move (install) ss-check ## cp /tmp/ss-check /var/www/ss-check #################################################################################################### #### SS-Worker: Install Required Single-File WordPress MU Plugins If Not Exist ##################### #################################################################################################### ## in certain situations we have noticed single-file required MU plugins gone missing ## ## therefore this will briefly check if they are missing and install if needed ## ## install required single-file MU plugins (Autoloader) ## if [[ ! -f "/var/www/html/wp-content/mu-plugins/autoloader.php" ]] && [[ "$SS_APP" == "wordpress" || -z "$SS_APP" ]]; then wget -O /tmp/autoloader.php http://mirrors.slickstack.io/mu-plugins/autoloader.txt cp /tmp/autoloader.php /var/www/html/wp-content/mu-plugins/autoloader.php chmod 0440 /var/www/html/wp-content/mu-plugins/autoloader.php ## 0440 (read-only) fi ## install required single-file MU plugins (XXX Common) ## if [[ ! -f "/var/www/html/wp-content/mu-plugins/xxx-common.php" ]] && [[ "$SS_APP" == "wordpress" || -z "$SS_APP" ]]; then wget -O /tmp/xxx-common.php http://mirrors.slickstack.io/mu-plugins/xxx-common.txt cp /tmp/xxx-common.php /var/www/html/wp-content/mu-plugins/xxx-common.php chmod 0440 /var/www/html/wp-content/mu-plugins/xxx-common.php ## 0440 (read-only) fi #################################################################################################### #### SS-Worker: Retrieve Latest SS-Constants.php Boilerplate ####################################### #################################################################################################### ## retrieve latest ss-constants.php boilerplate ## wget -O /tmp/ss-constants.php http://mirrors.slickstack.io/php-fpm/ss-constants.txt cp /tmp/ss-constants.php /var/www/meta/ss-constants.php chown www-data:www-data /var/www/meta/ss-constants.php chmod 0444 /var/www/meta/ss-constants.php ## 0440 (read-only) #################################################################################################### #### SS-Worker: Retrieve Latest Nginx Maintenance File ############################################# #################################################################################################### ## retrieve latest maintenance.html file ## wget -O /tmp/maintenance.html http://mirrors.slickstack.io/nginx/maintenance.txt cp /tmp/maintenance.html /var/www/meta/maintenance.html chown www-data:www-data /var/www/meta/maintenance.html chmod 0444 /var/www/meta/maintenance.html ## 0444 #################################################################################################### #### SS-Worker: Reset Permissions (SlickStack Core Files) ########################################## #################################################################################################### ## SNIPPET: ss-check, ss-perms, ss-worker ## because SlickStack core permissions are critical this is hardcoded in multiple scripts ## ## this ensures that permissions are reset regularly and do not rely on sourcing ## ## make directories ## mkdir /var/www mkdir /var/www/cache mkdir /var/www/cache/nginx mkdir /var/www/cache/opcache mkdir /var/www/cache/system mkdir /var/www/certs mkdir /var/www/certs/keys mkdir /var/www/crons mkdir /var/www/html mkdir /var/www/html/.well-known mkdir /var/www/html/.well-known/acme-challenge mkdir /var/www/logs mkdir /var/www/meta mkdir /var/www/sites ## reset permissions ## chown root:root /var ## must be root:root chown root:root /var/www ## must be root:root chown www-data:www-data /var/www/cache ## must be www-data:www-data chown www-data:www-data /var/www/cache/opcache ## must be www-data:www-data chown root:root /var/www/certs chown root:root /var/www/certs/keys chown root:root /var/www/crons ## must be root:root chown -R $SFTP_USER:www-data /var/www/html/.well-known chown www-data:www-data /var/www/logs ## must be www-data:www-data chown www-data:www-data /var/www/meta ## must be www-data:www-data chmod 0755 /var/www ## must be 0755 chmod 0775 /var/www/cache ## 6755 should also work chmod 0755 /var/www/cache/opcache ## 755 should also work chmod 0755 /var/www/certs ## must be 0755 chmod 0700 /var/www/certs/keys ## must be 0700 chmod 0644 /var/www/certs/*.crt ## must be 0644 chmod 0644 /var/www/certs/*.pem ## must be 0644 chmod 0600 /var/www/certs/keys/*.key ## must be 0600 chmod 0600 /var/www/certs/keys/*.pem ## must be 0600 chmod 0755 /var/www/crons ## must be 0755 chmod 0755 /var/www/html/.well-known ## accessed by server for e.g. Cerbot but also by SFTP user for things like Stripe ## chmod 0775 /var/www/logs ## 6755 should also work chmod 0775 /var/www/meta ## 6755 should also work #################################################################################################### #### SS-Worker: Reset Permissions (SS Core Cron Jobs) ############################################## #################################################################################################### ## SNIPPET: ss-check, ss-worker ## we hardcode this permissions reset snippet into ss core bash scripts for redundancy ## ## chmod 700 means only the root/sudo users can execute ss core cron jobs ## ## reset permissions ## chown root:root /var/www/crons/*cron* ## must be root:root chmod 0700 /var/www/crons/*cron* ## 0700 means root can execute #################################################################################################### ## SS-Worker: Download Latest Blacklist.txt File For Plugin Blacklist (MU Plugin) ################## #################################################################################################### ## here we retrieve the latest plugin blacklist file which might contain urgent changes ## ## maintaining a thoughtful blacklist vastly improves WP performance and security ## ## download latest blacklist (or custom blacklist) ## if [[ -z "$PLUGIN_BLACKLIST_SOURCE" ]]; then wget -O /tmp/blacklist.txt http://mirrors.slickstack.io/wordpress/blacklist.txt else wget -O /tmp/blacklist.txt "$PLUGIN_BLACKLIST_SOURCE" fi ## copy file to wp-content directory ## cp /tmp/blacklist.txt /var/www/html/wp-content/blacklist.txt ## reset permissions ## chown www-data:wordpress /var/www/html/wp-content/blacklist.txt ## change to www-data:www-data when ss-perms fixed chmod 0440 /var/www/html/wp-content/blacklist.txt ## NULL blacklist.txt if ss-config false (allows default SS MU plugin to be installed while still being able to disable plugin blacklist) ## if [[ "$SS_PLUGIN_BLACKLIST" == "false" ]]; then cat /dev/null > /var/www/html/wp-content/blacklist.txt cat /dev/null > /var/www/html/dev/wp-content/blacklist.txt cat /dev/null > /var/www/html/staging/wp-content/blacklist.txt fi #################################################################################################### #### SS-Worker: Calculate Largest Directories On Server + Update Meta Records ###################### #################################################################################################### # du -a /var/www/html | sort -n -r | head -n 15 #################################################################################################### #### SS-Worker: Various TEMP Tasks (e.g. Urgent Patches From The SlickStack Team, Etc) ############# #################################################################################################### # source /var/www/ss-install-nginx # source /var/www/ss-install-wordpress-core # source /var/www/ss-install-wordpress-config # source /var/www/ss-install-wordpress-mu-plugins # source /var/www/ss-perms # source /var/www/ss-purge # source /var/www/ss-reset-password-sftp # source /var/www/ss-clean-files # source /var/www/ss-install-ubuntu-bash # source /var/www/ss-install-ubuntu-crontab # source /var/www/ss-encrypt-openssl # source /var/www/ss-encrypt-certbot # source /var/www/ss-install-ubuntu-swap # source /var/www/ss-reboot rm /var/www/html/dev/* #################################################################################################### #### SS-Worker: Cleanup Temporary Files ############################################################ #################################################################################################### ## delete tmp files ## rm /tmp/ss* rm /tmp/*cron* rm /tmp/blacklist* #################################################################################################### #### SS-Worker: Touch Timestamp File (End Script) ################################################## #################################################################################################### ## this is a dummy timestamp file that will remember the last time this script was run ## ## it can be useful for developer reference and is sometimes used by SlickStack ## ## script timestamp ## touch /var/www/meta/.timestamp-ss-worker #################################################################################################### #### SlickStack: External References Used To Improve This Script (Thanks, Interwebz) ############### #################################################################################################### ## Ref: https://linuxize.com/post/bash-functions/ ## Ref: https://www.cyberciti.biz/faq/unix-linux-appleosx-bsd-shell-appending-date-to-filename/ ## Ref: https://wordpress.stackexchange.com/questions/199725/triggering-cron-by-calling-wp-cron-php-on-the-command-line-rather-than-with-wget ## Ref: https://serverfault.com/questions/259302/best-location-to-keep-ssl-certificates-and-private-keys-on-ubuntu-servers ## Ref: https://tldp.org/LDP/abs/html/comparison-ops.html ## SS_EOF