我使用以下脚本在我的环境中执行以下操作:
- 创建 Nginx 站点配置。
- 创建相应的 Let'sEncrypt SSL 证书。
sites-default
在我的目录和站点配置之间创建符号链接。- 重新启动服务器。
我的代码:
#!/bin/sh
for domain; do
> "/etc/nginx/sites-available/${domain}.conf" cat <<EOF
server {
root /var/www/html/${DOMAIN};
server_name ${DOMAIN} www.${DOMAIN};
location ~ /\.ht {
deny all;
}
location / {
index index.php index.html index.htm fastcgi_index;
try_files $uri $uri =404 $uri/ /index.php?$args;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff|pdf)$ {
expires 365d;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
EOF
sudo ln -s /etc/nginx/sites-available/${domain} /etc/nginx/sites-enabled/
#########################################################################
certbot --nginx -d ${DOMAIN} -d www.${DOMAIN}
done
systemctl restart nginx.service # Create Webapp Substrate.
我想如何以及为什么改进这段代码:
在长排井号的地方,我想插入以下命令:
echo 'create database ${DOMAIN}; create user "${DOMAIN}"@"localhost" identified by "mypassword"; grant all privileges on ${DOMAIN}.* to ${DOMAIN};' | mysql -u root -p
添加此命令会将脚本更改为执行 5 个步骤,而不是 4 个:
- 创建 Nginx 站点配置。
- 创建相应的 Let'sEncrypt SSL 证书。
sites-default
在我的目录和站点配置之间创建符号链接。- 添加仅适用于本地主机的所有特权且经过身份验证的数据库用户,并具有相同名称的数据库。
- 重新启动服务器。
我的问题:
正如你所看到的,我${DOMAIN}
在里面使用了我的参数echo
.我这样做是因为我必须在那里也传递相同的参数,否则,数据库用户名及其关联的数据库都不适合我的站点配置,并且我的基于 Wordpress 的站点将无法启动。
这个操作在 Bash 中合乎逻辑吗?或者您会采取另一种方法?
为了澄清这一点,我要求了解当参数位于echo
.
答案1
您无需执行以下操作即可做到这一点echo
:
mysql -u root -ppass <<EOF
create database ${DOMAIN};
create user "${DOMAIN}"@"localhost" identified by "mypassword";
grant all privileges on ${DOMAIN}.* to ${DOMAIN};
EOF