3
\$\begingroup\$

The following script is aimed for Ubuntu >=16.04 LEMP environments with PHP-FPM >=7.0, MySQL, WP-CLI, Certbot, and WordPress apps.

The script get's one domain as an argument and creates the following aspects based on that argument (drt=document-root):

  1. WP_app directory in drt.
  2. WP_installation in drt/domain.
  3. WP_conf in drt/domain.
  4. NX_app conf in /etc/nginx/sites-available/
  5. NX_symlink in /etc/nginx/sites-enabled/
  6. NX_certbot configuration.

${drt} = document root.


One could then add a database stack via MySQL, accordingly (and also edit the website files, accordingly).

#!/bin/bash
domain="$1" && test -z ${domain} && return
read -sp "DB user password:" dbuserp

wp core download --path=${drt}/${domain}/ --allow-root # REDUNDANTS MKDIR
wp config create --path=${drt}/${domain}/ --dbname=${domain} --dbuser=${domain} --dbpass=${dbuserp} --dbhost="localhost" --allow-root

cat ~/myAddons/nginx_app > ${sava}/${domain}.conf
sed -i "s/\${domain}/${1}/g" /${sava}/${domain}.conf

ln -sf ${sava}/${domain}.conf ${sena}
certbot --nginx -d ${domain} -d www.${domain}

chown -R www-data:www-data ${drt}/
chmod -R a-x,a=rX,u+w ${drt}/
/etc/init.d/php*-fpm restart && systemctl restart nginx.service

echo "Please configure DBstack in phpmyadmin."
echo "Please change permissions as you prefer and restart the Nginx server."

Clarification

The conf template I redirect from ~/nginx_app, for the Nginx app conf, is this one:

server {
    root ${drt}/${domain}/;
    server_name ${domain} www.${domain};
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff|pdf)$ { expires 365d; }
}

Please share your opinion on the above script and adjacent conf file.

\$\endgroup\$
2
\$\begingroup\$

Shellcheck.net

I strongly recommend to start using https://shellcheck.net/. Simply copy-paste your script, and it will tell you many issues with this code.

Don't use return outside of functions

The return statement only works within functions. You probably meant exit instead:

domain="$1" && test -z "${domain}" && exit

Variables in command arguments

Always double-quote variables in command arguments to prevent glob expansion and word splitting, for example:

cat ~/myAddons/nginx_app > "${sava}/${domain}.conf"

Inconsistent paths

Here, the last argument of the second command starts with a /, but not the last argument of the first command:

cat ~/myAddons/nginx_app > ${sava}/${domain}.conf
sed -i "s/\${domain}/${1}/g" /${sava}/${domain}.conf

I suspect the last arguments are intended to be the same in both of these commands. This is confusing.

\$\endgroup\$
  • \$\begingroup\$ Oh thanks! sorry for not editing the question. About the inconsistent path. You meant that it's /${sava}/${domain}.conf instead ${sava}/${domain}.conf? Yes, that's a mistake. About the chmod, interesting, I just counted on this example by Stephen Kitt. See this and also this, please. \$\endgroup\$ – user9303970 Feb 10 '18 at 8:26
  • \$\begingroup\$ Yeah it’s subtle but the a-x isn’t redundant, it ensures the X only sees directories. \$\endgroup\$ – Stephen Kitt Feb 10 '18 at 16:15
  • \$\begingroup\$ @StephenKitt I see, I read the linked posts. As you mention in one of them, on Mac OS X the X is only applied in + operations. That's why I didn't notice in my tests with the a-x example here. Thanks! \$\endgroup\$ – janos Feb 10 '18 at 17:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.