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).

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."


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.


1 Answer 1



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.

  • \$\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\$ Feb 10, 2018 at 8:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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