
แแแกแขแแแแชแแแกแแแแก แฃแแแ แแแ แแแกแแแแ แฎแแแแแกแแฌแแแแแ. WordPress, Google-แจแ แกแแแแแแซแ แกแแขแงแแแแแก แซแแแแ "WordPress installโ แแแแฎแแแแแแ แแแฎแแแแ แแแแแแ แจแแแแแก แแแแแ แฃแแแแก. แแฃแแชแ, แแแ แจแแ แแก, แกแแแแแแแแแแจแ แซแแแแแ แชแแขแ แกแแกแแ แแแแแ แกแแฎแแแแซแฆแแแแแแแ แแแกแขแแแแชแแแกแ แแ แแแแคแแแฃแ แแชแแแกแแแแก. WordPress แแ แแแแ แแชแแฃแแ แกแแกแขแแแ, แ แแแ แแแ แแแแ แฎแแแก แแแแแแแแแแแจแ แฐแฅแแแแแ แแฎแแ แแแญแแ แ. แจแแกแแซแแแ, แกแฌแแ แ แแแ แแแแขแ แแแ แแแแแ แแงแแก แแแแแแแแแแฃแแ แแแแแ แแขแฃแ แกแแญแแ แแแแแแแ, แแ แจแแกแแซแแแ แแก แแแแขแแ แฎแแแแ, แ แแ แแแขแแแฃแ แ แแฎแกแแ แกแขแแขแแแก แฌแแแแแฎแแแก แแ แแฃแแแแก.
แแ แกแขแแขแแแจแ แฉแแแ แจแแแแชแแแแแ แแแแแแ แแแแแแ แแ แแแ แแแแแแแแก แกแแฃแแแแแกแ แแฎแแ แแแแ แแแขแแแแขแฃแ แ แแแกแขแแแแชแแแกแแแแก bash แกแแ แแแขแแก แแแฌแแแแแแ. WordPress on Ubuntuแแกแแแ แแแแแแฎแแแแแ แแแก, แแแฎแกแแแ, แแฃ แ แแก แแแแแแแก แแแแแแฃแแ แแแฌแแแ แแ แ แ แแแแแ แแแแกแแแแ แแแแฃแจแแแ แแแกแ แจแแแฃแจแแแแแแกแแก. แแฃ แแแแแชแแแแ แแแแฎแแแ แแแแแ แฎแแ แ, แจแแแแซแแแแ แแแแแขแแแแ แขแแฅแกแขแ แแ แฃแแ แแแแ แแฅแแแแก แแแ แแแแจแ แแแแแคแแแแชแแแกแ แแ แแแแแงแแแแแแกแแแแก. แกแแ แแแขแแก แแแแแแแแแแ แแ แแก แแแ แแแแฃแแ แแแกแขแแแแชแแ. WordPress Let's Encrypt-แแก แแฎแแ แแแญแแ แแ, แแฃแจแแแแก NGINX Unit-แแ แแ แแแแแแแแแ แกแแฌแแ แแแ แแแแแงแแแแแแกแแแแก.
แแแแแแแแแแกแแแแก แจแแแฃแจแแแแแฃแแ แแ แฅแแขแแฅแขแฃแ แ WordPress NGINX แแ แแแฃแแแก แแแแแงแแแแแ แแฆแฌแแ แแแแ , แแฎแแ แฉแแแ แแกแแแ แแแแแแแแคแแแฃแ แแ แแแ แกแแแแแแก, แ แแแแแแแช แแ แแงแ แแแคแแ แฃแแ (แ แแแแ แช แแแแ แกแฎแแ แกแแฎแแแแซแฆแแแแแแแจแ):
- WordPress CLI
- แแแแแ แแแแจแแคแ แแ แแ TLSSSL แกแแ แแแคแแแแขแแแ
- แกแแ แแแคแแแแขแแแแก แแแขแแแแขแฃแ แ แแแแแฎแแแแ
- NGINX แฅแแจแแ แแแ
- NGINX แจแแแฃแแจแแ
- HTTPS แแ HTTP/2 แแฎแแ แแแญแแ แ
- แแ แแชแแกแแก แแแขแแแแขแแแแชแแ
แกแขแแขแแแจแ แแฆแฌแแ แแแ แแฅแแแแ แแแกแขแแแแชแแ แแ แ แกแแ แแแ แแ, แ แแแแแแช แแ แแแ แแฃแแแ แฃแแแกแแแแซแแแแก แกแขแแขแแแฃแ แ แแแแฃแจแแแแแแก แกแแ แแแ แก, PHP แแแแฃแจแแแแแแก แกแแ แแแ แก แแ แแแแแชแแแแ แแแแแก. แแแกแขแแแแชแแ, แ แแแแแแช แแฎแแ แก แฃแญแแ แก แแ แแแแ แแแ แขแฃแแแฃแ แฐแแกแขแก แแ แกแแ แแแกแก, แแแแแแแแก แแแขแแแชแแฃแ แ แแแแแ. แแฃ แแแแแแ แแแแฌแแ แแ แ แแแแแแ, แ แแช แแ แกแขแแขแแแแจแ แแ แแ แแก, แแแฌแแ แแ แแแแแแขแแ แแแจแ.
แแแแฎแแแแแแ
- แแแแขแแแแแ แแก แกแแ แแแ แ ( แแ ), แแแ แขแฃแแแฃแ แ แแแแฅแแแ แแ แฉแแแฃแแแแ แแแ แแแแ แแขแฃแ แแก แกแแ แแแ แ, แแแแแแฃแ 512 แแ แแแแ แแขแแฃแแ แแแฎแกแแแ แแแแ แแ แแแแแกแขแแแแ แแแฃแแ Ubuntu 18.04 แแ แฃแคแ แ แแแแแแแแแ.
- แแแขแแ แแแขแแ แฎแแแแแกแแฌแแแแแ แแแ แขแแแ 80 แแ 443
- แแแแแแแก แกแแฎแแแ แแแแแแจแแ แแแฃแแแ แแ แกแแ แแแ แแก แกแแฏแแ แ ip แแแกแแแแ แแแแ
- Root แฌแแแแแ (sudo).
แแ แฅแแขแแฅแขแฃแ แแก แแแแแฎแแแแ
แแ แฅแแขแแฅแขแฃแ แ แแแแแแ, แ แแช แแฆแฌแแ แแแแ , แกแแแกแแคแแฎแฃแ แแแแ แแแ แแแแแแแชแแ. แแแ แจแแแแแแ PHP แกแแ แแแขแแแแกแแแแ, แ แแแแแแแช แแฃแจแแแแก PHP แซแ แแแแ แแ แกแขแแขแแแฃแ แ แคแแแแแแแกแแแ, แ แแแแแแแช แแฃแจแแแแแแ แแแ แกแแ แแแ แแก แแแแ .

แแแแแแ แแ แแแชแแแแแ
- แแแแคแแแฃแ แแชแแแก แแ แแแแแ แแ แซแแแแแ แกแแ แแแขแจแ แจแแคแฃแแฃแแแ แแ แจแแแแฎแแแแแจแ, แแฃ แแแ แแแแแ แฃแซแแฃแ แแ: แกแแ แแแขแแก แแแจแแแแ แจแแแซแแแแ แ แแแแแแฏแแ แแ, แฃแแแ แแ แกแแแฃแแ แแแ แแแแขแ แแแแก แจแแชแแแแก แ แแกแแแก แแแ แแจแ.
- แกแแ แแแขแ แชแแแแแแก แแแแแแกแขแแแแ แแก แแ แแแ แแแฃแแ แฃแแ แฃแแแแแงแแคแ แกแแชแแแแแแแแ, แแกแ แ แแ แแฅแแแ แจแแแแซแแแแ แแแแแแงแแแแ แกแแกแขแแแแก แแแแแฎแแแแแแ แแ แแ แแ แซแแแแแแ (
apt upgradeแแแแกแแแแก Ubuntu). - แแ แซแแแแแแแ แชแแแแแแแ แแแแแแแแแ, แ แแ แแกแแแ แแฃแจแแแแแ แแแแขแแแแแ แจแ, แ แแแ แแแ แจแแกแแแแแแกแแ แจแแชแแแแแ แแแ แแแแขแ แแแ.
- แแแ แแแแขแ แแแจแ แแแกแแฌแงแแแแ แซแแคแแแแก แแ แแชแแกแแแแก แ แแแแแแแแแก แแแกแแงแแแแแแแ, แกแแ แแแขแ แชแแแแแแก แแแแแแชแแแก แแแแขแแแแแ แแแจแ, แแแ แขแฃแแแฃแ แแแแฅแแแแแกแ แแ แแแแ แแขแฃแ แฃแ แกแแ แแแ แแแจแ แแฃแจแแแแแก แแแขแแแแขแฃแ แ แแแ แแแแขแ แแแ.
- แแแ แแแแขแ แแแแก แแฆแฌแแ แแกแแก, แฉแแแ แงแแแแแแแแก แแแ แแแ แ แแแจแ แแคแแฅแ แแแ แแแขแแแแขแแแแชแแแแ, แ แแแแแแช, แแแแแแแแแแแ, แแแฎแแแแ แแฅแแแแ แกแแแฃแแแ แ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแแแก แจแแฅแแแแก แกแแคแฃแซแแแแ.
- แงแแแแ แแ แซแแแแแ แแฃแจแแแแก แแแแฎแแแ แแแแแก แกแแฎแแ root, แ แแแแแ แแกแแแ แชแแแแแ แกแแกแขแแแแก แซแแ แแแแ แแแ แแแแขแ แแแก, แแแแ แแ แแแ แแแแแ WordPress แแฃแจแแแแก แฉแแแฃแแแแ แแแ แแแแฎแแแ แแแแแกแแแ.
แแแ แแแแก แชแแแแแแแแก แแแงแแแแแ
แแแแงแแแแ แจแแแแแแ แแแ แแแแก แชแแแแแแแ แกแแ แแแขแแก แแแจแแแแแแแ:
WORDPRESS_DB_PASSWORDโ แแแ แแแ แแแแแชแแแแ แแแแแจแ WordPressWORDPRESS_ADMIN_USERโ แแแแแแแกแขแ แแขแแ แแก แกแแฎแแแ WordPressWORDPRESS_ADMIN_PASSWORDโ แแแแแแแกแขแ แแขแแ แแก แแแ แแแ WordPressWORDPRESS_ADMIN_EMAILโ แแแแแแแกแขแ แแขแแ แแก แแ. แคแแกแขแ WordPressWORDPRESS_URLโ แแแแกแแแขแแก แกแ แฃแแ URL WordPressแแแฌแงแแแฃแแhttps://.LETS_ENCRYPT_STAGING- แแแแฃแแแกแฎแแแแแ แชแแ แแแแแ, แแแแ แแ แแแแจแแแแแแแแก 1-แแ แแแงแแแแแแ, แแฅแแแ แแแแแแงแแแแแ Let's Encrypt แแแแแแแก แกแแ แแแ แแแก, แ แแแแแแแช แแฃแชแแแแแแแแ แแฅแแแแ แแแ แแแแขแ แแแแก แขแแกแขแแ แแแแกแแก แกแแ แแแคแแแแขแแแแก แฎแจแแ แแ แแแแฎแแแแแกแแแแก, แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ Let's Encrypt แจแแแซแแแแ แแ แแแแแ แแแแแแแแก แแฅแแแแ ip แแแกแแแแ แแ แแแแฎแแแแแก แแแแ แ แแแแแแแแแก แแแแ. .
แกแแ แแแขแ แแแแฌแแแแก, แ แแ แแก แแแแแแจแแ แแแฃแแแ WordPress แชแแแแแแแ แแแงแแแแแฃแแแ แแ แแฃ แแ แ, แแแแแแแก.
แกแแ แแแขแแก แฎแแแแแ 572-576 แจแแแแแฌแแแ แแแแจแแแแแแแ LETS_ENCRYPT_STAGING.
แแแฆแแแฃแแ แแแ แแแแก แชแแแแแแแแก แแแงแแแแแ
แกแแ แแแขแ 55-61 แกแขแ แแฅแแแแแแ แแแแแแก แจแแแแแ แแแ แแแแก แชแแแแแแแก, แแ แแแ แแแแฃแ แแแแแ แแแฃแ แแแแจแแแแแแแแก, แแ แฌแแแ แแแแงแแคแแแแแแจแ แแแแแแแแฃแแ แชแแแแแแแแกแแแแ แแแฆแแแฃแแ แแแแจแแแแแแแแก แแแแแงแแแแแแ:
DEBIAN_FRONTEND="noninteractive"- แแฃแแแแแ แแแแแแแชแแแแก, แ แแ แแกแแแ แแฃแจแแแแแ แกแแ แแแขแจแ แแ แ แแ แแ แแ แกแแแแแก แแแแฎแแแ แแแแแก แฃแ แแแแ แแฅแแแแแแแก แจแแกแแซแแแแแแแ.WORDPRESS_CLI_VERSION="2.4.0"- แแแแแแแชแแแก แแแ แกแแ WordPress CLI.WORDPRESS_CLI_MD5= "dedd5a662b80cda66e9e25d44c23b25c"โ แจแแกแ แฃแแแแแแ แคแแแแแก แฉแแแกแฃแแ WordPress CLI 2.4.0 (แแแ แกแแ แแแแแแแแฃแแแ แชแแแแแจแ)WORDPRESS_CLI_VERSION). 162-แ แกแขแ แแฅแแแแ แแแชแแแฃแแ แกแแ แแแขแ แแ แแแแจแแแแแแแแก แแงแแแแแก แแแแก แจแแกแแแแฌแแแแแแ, แฉแแแแแขแแแ แแ แแฃ แแ แ แกแฌแแ แ แคแแแแ. WordPress CLI.UPLOAD_MAX_FILESIZE="16M"โ แคแแแแแก แแแฅแกแแแแแฃแ แ แแแแ, แ แแแแแก แแขแแแ แแแแช แจแแกแแซแแแแแแแ WordPressแแก แแแ แแแแขแ แ แ แแแแแแแแ แแแแแแแก แแแแแแงแแแแแ, แแแแขแแ แแแกแ แแ แ แแแแแแแก แแแงแแแแแ แฃแคแ แ แแแแแแแ.TLS_HOSTNAME= "$(echo ${WORDPRESS_URL} | cut -d'/' -f3)"โ แกแแกแขแแแแก แฐแแกแขแแก แกแแฎแแแ, แแฆแแแฃแแ WORDPRESS_URL แชแแแแแแแแ. แแแแแแงแแแแแ Let's Encrypt-แแแ แจแแกแแแแแแกแ TLS/SSL แกแแ แขแแคแแแแขแแแแก แแแกแแฆแแแแ, แแกแแแ แจแแแ แแแ แแคแแแแชแแแกแแแแก. WordPress.NGINX_CONF_DIR="/etc/nginx"- แแแ แแแ แแฅแขแแ แแแจแ NGINX แแแ แแแแขแ แแแแ, แซแแ แแแแแ แคแแแแแก แฉแแแแแแnginx.conf.CERT_DIR="/etc/letsencrypt/live/${TLS_HOSTNAME}"โ แกแแแขแแกแแแแก Let's Encrypt แกแแ แขแแคแแแแขแแแแกแแแ แแแแแแแแ แแแ WordPress, แแแฆแแแฃแแ แชแแแแแแแแTLS_HOSTNAME.
แฐแแกแขแแก แกแแฎแแแแก แแแแแญแแแ WordPress แกแแ แแแ แ
แกแแ แแแขแ แแแแแแก แกแแ แแแ แแก แฐแแกแขแแก แกแแฎแแแก, แ แแแ แจแแแกแแแแแแแแแแก แกแแแขแแก แแแแแแแก แกแแฎแแแก. แแก แแ แแ แแก แกแแญแแ แ, แแแแ แแ แฃแคแ แ แแแกแแฎแแ แฎแแแแแแ แแแแแแแแ แคแแกแขแแก แแแแแแแแ SMTP-แแ แแ แแ แกแแ แแแ แแก แแแงแแแแแแกแแก, แ แแแแ แช แแก แแ แแก แแแแคแแแฃแ แแ แแแฃแแ แกแแ แแแขแแ.
แกแแ แแแขแแก แแแแ
# Change the hostname to be the same as the WordPress hostname
if [ ! "$(hostname)" == "${TLS_HOSTNAME}" ]; then
echo " Changing hostname to ${TLS_HOSTNAME}"
hostnamectl set-hostname "${TLS_HOSTNAME}"
fiแฐแแกแขแแก แกแแฎแแแแก แแแแแขแแแ /etc/hosts-แจแ
แแแ แแ แแแแกแ แแแแแแงแแแแแ แแแ แแแแฃแแ แแแแแแแแแแแก แจแแกแแกแ แฃแแแแแแ, แแแแแฎแแแก, แ แแ WordPress แจแแแซแแ แกแแแฃแแแ แแแแแ แฌแแแแแ HTTP-แแก แกแแจแฃแแแแแแ. แแแแกแแแแแก, แ แแ WP-Cron-แแ แกแฌแแ แแ แแแฃแจแแแก แงแแแแ แแแ แแแแจแ, แกแแ แแแขแ แคแแแแก แฎแแแก แฃแแแขแแแก. / Etc / hosts, แแกแ WordPress แจแแฃแซแแแ แกแแแฃแแแ แแแแแ แฌแแแแแ loopback แแแขแแ แคแแแกแแก แกแแจแฃแแแแแแ:
แกแแ แแแขแแก แแแแ
# Add the hostname to /etc/hosts
if [ "$(grep -m1 "${TLS_HOSTNAME}" /etc/hosts)" = "" ]; then
echo " Adding hostname ${TLS_HOSTNAME} to /etc/hosts so that WordPress can ping itself"
printf "::1 %sn127.0.0.1 %sn" "${TLS_HOSTNAME}" "${TLS_HOSTNAME}" >> /etc/hosts
fiแจแแแแแแ แแแแแฏแแแแกแแแแก แกแแญแแ แ แฎแแแกแแฌแงแแแแแก แแแงแแแแแ
แกแแ แแแขแแก แแแแแ แฉแแ แแแฌแแแก แแแ แแแแฃแแ แแ แแแ แแแแแ แกแญแแ แแแแ แแ แแแ แแฃแแแแก, แ แแ แกแแชแแแ แแแแแฎแแแแฃแแแ. แฉแแแ แแแแฎแแแแ แกแแชแแแแแแก แฉแแแแแแแแแแก, แ แแก แจแแแแแแแช แแแแแกแขแแแแ แแแ แกแแญแแ แ แแแกแขแ แฃแแแแขแแแก:
แกแแ แแแขแแก แแแแ
# Make sure tools needed for install are present
echo " Installing prerequisite tools"
apt-get -qq update
apt-get -qq install -y
bc
ca-certificates
coreutils
curl
gnupg2
lsb-releaseNGINX แแ แแแฃแแแก แแ NGINX แกแแชแแแแแแก แแแแแขแแแ
แกแแ แแแขแ แแแแกแขแแแแ แแแก NGINX Unit-แก แแ แฆแแ แแแแแก NGINX-แก แแคแแชแแแแฃแ แ NGINX แกแแชแแแแแแแแ, แ แแแ แแแ แฌแแฃแแแแก, แ แแ แแแแแงแแแแแฃแแแ แแแ แกแแแแ แฃแกแแคแ แแฎแแแแแก แฃแแฎแแแกแ แแแขแฉแแแแ แแ แจแแชแแแแแแแก แแแแแกแฌแแ แแแแ.
แกแแ แแแขแ แแแแขแแแก NGINX Unit แกแแชแแแก แแ แจแแแแแ NGINX แกแแชแแแก, แแแแขแแแก แกแแชแแแแแแก แแแแแแจแก แแ แแแแคแแแฃแ แแชแแแก แคแแแแแแก apt, แแแขแแ แแแขแแก แกแแจแฃแแแแแแ แกแแชแแแแแแ แฌแแแแแแก แแแแกแแแฆแแ แ.
NGINX แแ แแแฃแแแกแ แแ NGINX-แแก แ แแแแฃแ แ แแแกแขแแแแชแแ แฎแแแแ แจแแแแแ แแแแงแแคแแแแแแจแ. แฉแแแ แฌแแแแกแฌแแ แแแแแขแแแ แกแแชแแแแแก, แ แแแ แแ แแแแแแฌแแแก แแแขแแแแแแชแแแแแแก แแ แแแแแฏแแ แแแแแฎแแแแ, แ แแช แแฉแฅแแ แแแก แแแกแขแแแแชแแแก.
แกแแ แแแขแแก แแแแ
# Install the NGINX Unit repository
if [ ! -f /etc/apt/sources.list.d/unit.list ]; then
echo " Installing NGINX Unit repository"
curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
echo "deb https://packages.nginx.org/unit/ubuntu/ $(lsb_release -cs) unit" > /etc/apt/sources.list.d/unit.list
fi
# Install the NGINX repository
if [ ! -f /etc/apt/sources.list.d/nginx.list ]; then
echo " Installing NGINX repository"
curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
echo "deb https://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" > /etc/apt/sources.list.d/nginx.list
fiNGINX, NGINX Unit, PHP MariaDB, Certbot (แแแแแ แแแแจแแคแ แแ) แแ แแแแ แแแแแแแแแแฃแแแแแก แแแกแขแแแแชแแ
แงแแแแ แกแแชแแแแก แแแแแขแแแแก แจแแแแแ, แฉแแแ แแแแฎแแแแ แแแขแแแแแแชแแแแแก แแ แแแแแกแขแแแแ แแแ แแแแแแแชแแแแก. แกแแ แแแขแแก แแแแ แแแแแกแขแแแแ แแแฃแแ แแแแแขแแแ แแกแแแ แแแแชแแแก แแแจแแแแแกแแก แ แแแแแแแแแแฃแ PHP แแแคแแ แแแแแแแก. WordPress. แแ แแแแแแแชแแ
แกแแ แแแขแแก แแแแ
echo " Updating repository metadata"
apt-get -qq update
# Install PHP with dependencies and NGINX Unit
echo " Installing PHP, NGINX Unit, NGINX, Certbot, and MariaDB"
apt-get -qq install -y --no-install-recommends
certbot
python3-certbot-nginx
php-cli
php-common
php-bcmath
php-curl
php-gd
php-imagick
php-mbstring
php-mysql
php-opcache
php-xml
php-zip
ghostscript
nginx
unit
unit-php
mariadb-serverPHP-แแก แแแแคแแแฃแ แแชแแ NGINX Unit-แแแ แแแแแกแแงแแแแแแแ แแ WordPress
แกแแ แแแขแ แฅแแแแก แแแ แแแแขแ แแแแก แคแแแแก แแแ แแฅแขแแ แแแจแ แแแแค. แ. แแก แแแแแแก แคแแแแแก แแแฅแกแแแแแฃแ แแแแแก PHP แแขแแแ แแแแกแแแแก, แฉแแ แแแแก PHP แจแแชแแแแแก แแแแแขแแแแก STDERR-แแ, แ แแแ แแกแแแ แฉแแแฌแแ แแก NGINX แแ แแแฃแแแก แแฃแ แแแแจแ แแ แแแแแแขแแแ แแแก NGINX แแ แแแฃแแ.
แกแแ แแแขแแก แแแแ
# Find the major and minor PHP version so that we can write to its conf.d directory
PHP_MAJOR_MINOR_VERSION="$(php -v | head -n1 | cut -d' ' -f2 | cut -d'.' -f1,2)"
if [ ! -f "/etc/php/${PHP_MAJOR_MINOR_VERSION}/embed/conf.d/30-wordpress-overrides.ini" ]; then
echo " Configuring PHP for use with NGINX Unit and WordPress"
# Add PHP configuration overrides
cat > "/etc/php/${PHP_MAJOR_MINOR_VERSION}/embed/conf.d/30-wordpress-overrides.ini" << EOM
; Set a larger maximum upload size so that WordPress can handle
; bigger media files.
upload_max_filesize=${UPLOAD_MAX_FILESIZE}
post_max_size=${UPLOAD_MAX_FILESIZE}
; Write error log to STDERR so that error messages show up in the NGINX Unit log
error_log=/dev/stderr
EOM
fi
# Restart NGINX Unit because we have reconfigured PHP
echo " Restarting NGINX Unit"
service unit restartMariaDB แแแแแชแแแแ แแแแแก แแแ แแแแขแ แแแแก แแแงแแแแแ WordPress
แฉแแแ แแแแ แฉแแแ MariaDB MySQL-แแก แแแชแแแแ, แ แแแแแ แแแก แแฅแแก แแแขแ แกแแแแแ แแฅแขแแแแแ แแ แแกแแแ แกแแแแ แแฃแแแ (แแแแแ, แแฅ แงแแแแแคแแ แ แฃแคแ แ แแแ แขแแแแ: MySQL-แแก แแแกแขแแแแชแแแกแแแแก แกแแญแแ แแ แกแฎแแ แกแแชแแแ แแแแแแขแแ, แแแแฎแ. แแแแ แแแแแแ).
แกแแ แแแขแ แฅแแแแก แแฎแแ แแแแแชแแแแ แแแแแก แแ แฌแแแแแแก แกแแ แแแคแแแแขแแแก. WordPress loopback แแแขแแ แคแแแกแแก แแแจแแแแแแ:
แกแแ แแแขแแก แแแแ
# Set up the WordPress database
echo " Configuring MariaDB for WordPress"
mysqladmin create wordpress || echo "Ignoring above error because database may already exist"
mysql -e "GRANT ALL PRIVILEGES ON wordpress.* TO "wordpress"@"localhost" IDENTIFIED BY "$WORDPRESS_DB_PASSWORD"; FLUSH PRIVILEGES;"แแ แแแ แแแแก แแแกแขแแแแชแแ WordPress CLI
แแ แแขแแแแ แกแแ แแแขแ แแงแแแแแก แแ แแแ แแแแก แแแกแ แแแฎแแแ แแแแ แจแแแแซแแแแ แแแแงแแแแ แแ แแแ แแแ แแแ แแแแขแ แแแ WordPress แคแแแแแแแก แฎแแแแ แ แแแแฅแขแแ แแแแก, แแแแแชแแแแ แแแแแก แแแแแฎแแแแแก แแ แกแแแแแขแ แแแ แแแแแแจแ แจแแกแแแแก แแแ แแจแ. แแแกแ แแแแแงแแแแแ แแกแแแ แจแแกแแซแแแแแแแ แแแแแแแกแ แแ แแแแแขแแแแแแก แแแกแขแแแแชแแแกแ แแ แแแแแฎแแแแแแแก แจแแกแแกแ แฃแแแแแแ. WordPress.
แกแแ แแแขแแก แแแแ
if [ ! -f /usr/local/bin/wp ]; then
# Install the WordPress CLI
echo " Installing the WordPress CLI tool"
curl --retry 6 -Ls "https://github.com/wp-cli/wp-cli/releases/download/v${WORDPRESS_CLI_VERSION}/wp-cli-${WORDPRESS_CLI_VERSION}.phar" > /usr/local/bin/wp
echo "$WORDPRESS_CLI_MD5 /usr/local/bin/wp" | md5sum -c -
chmod +x /usr/local/bin/wp
fiแแแกแขแแแแชแแ แแ แแแแคแแแฃแ แแชแแ WordPress
แกแแ แแแขแ แแแแกแขแแแแ แแแก แฃแแฎแแแก แแแ แกแแแก WordPress แแแขแแแแแจแ /var/www/wordpressแแ แแกแแแ แชแแแแก แแแ แแแแขแ แแแก:
- แแแแแชแแแแ แแแแแก แแแแจแแ แ แแฃแจแแแแก unix แแแแแแแก แกแแแแขแแ TCP-แแก แแแชแแแแ loopback-แแ, แ แแแ แจแแแแชแแ แแก TCP แขแ แแคแแแ.
- WordPress แแ แแคแแฅแกแก แแแแขแแแก https:// URL-แแ, แแฃ แแแแแแขแแแ แฃแแแแจแแ แแแแแแ NGINX-แก HTTPS-แแ แแ แแกแแแ แแแแแแแแก แแแกแขแแแชแแฃแ แ แฐแแกแขแแก แกแแฎแแแก (แ แแแแ แช แแแฌแแแแแฃแแแ NGINX) PHP-แแ. แฉแแแ แแแงแแแแแ แแแแแก แแแฌแแแก แแแแก แแแกแแงแแแแแแแ.
- WordPress แจแแกแแกแแแแแแ แกแแญแแ แแ HTTPS
- URL-แแก แแแแฃแแแกแฎแแแแ แกแขแ แฃแฅแขแฃแ แ แแแคแฃแซแแแแฃแแแ แ แแกแฃแ แกแแแแ
- แแแ แแฅแขแแ แแแกแแแแก แแแงแแแแแฃแแแ แคแแแแฃแ แ แกแแกแขแแแแก แกแฌแแ แ แแแแแ แแแแแ. WordPress.
แกแแ แแแขแแก แแแแ
if [ ! -d /var/www/wordpress ]; then
# Create WordPress directories
mkdir -p /var/www/wordpress
chown -R www-data:www-data /var/www
# Download WordPress using the WordPress CLI
echo " Installing WordPress"
su -s /bin/sh -c 'wp --path=/var/www/wordpress core download' www-data
WP_CONFIG_CREATE_CMD="wp --path=/var/www/wordpress config create --extra-php --dbname=wordpress --dbuser=wordpress --dbhost="localhost:/var/run/mysqld/mysqld.sock" --dbpass="${WORDPRESS_DB_PASSWORD}""
# This snippet is injected into the wp-config.php file when it is created;
# it informs WordPress that we are behind a reverse proxy and as such
# allows it to generate links using HTTPS
cat > /tmp/wp_forwarded_for.php << 'EOM'
/* Turn HTTPS 'on' if HTTP_X_FORWARDED_PROTO matches 'https' */
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
$_SERVER['HTTPS'] = 'on';
}
if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}
EOM
# Create WordPress configuration
su -s /bin/sh -p -c "cat /tmp/wp_forwarded_for.php | ${WP_CONFIG_CREATE_CMD}" www-data
rm /tmp/wp_forwarded_for.php
su -s /bin/sh -p -c "wp --path=/var/www/wordpress config set 'FORCE_SSL_ADMIN' 'true'" www-data
# Install WordPress
WP_SITE_INSTALL_CMD="wp --path=/var/www/wordpress core install --url="${WORDPRESS_URL}" --data-gt-translate-attributes='["title"]' title="${WORDPRESS_SITE_TITLE}" --admin_user="${WORDPRESS_ADMIN_USER}" --admin_password="${WORDPRESS_ADMIN_PASSWORD}" --admin_email="${WORDPRESS_ADMIN_EMAIL}" --skip-email"
su -s /bin/sh -p -c "${WP_SITE_INSTALL_CMD}" www-data
# Set permalink structure to a sensible default that isn't in the UI
su -s /bin/sh -p -c "wp --path=/var/www/wordpress option update permalink_structure '/%year%/%monthnum%/%postname%/'" www-data
# Remove sample file because it is cruft and could be a security problem
rm /var/www/wordpress/wp-config-sample.php
# Ensure that WordPress permissions are correct
find /var/www/wordpress -type d -exec chmod g+s {} ;
chmod g+w /var/www/wordpress/wp-content
chmod -R g+w /var/www/wordpress/wp-content/themes
chmod -R g+w /var/www/wordpress/wp-content/plugins
fiNGINX แแแแงแแคแแแแแแก แแแงแแแแแ
แกแแ แแแขแ แแฎแแแแก NGINX แแ แแแฃแแแก แแแแคแแแฃแ แแชแแแก PHP-แแก แแแกแแจแแแแแ แแ แแแแแแแแแก แแแกแแแฃแจแแแแแแแ. WordPress, PHP แแ แแชแแกแแก แกแแฎแแแแ แกแแแ แชแแก แแแแแแ แแแ แแ แจแแกแ แฃแแแแแก แแแ แแแแขแ แแแแก แแแขแแแแแแชแแ. แแฆแกแแแแจแแแแแ แกแแแ แแแฎแแกแแแแแแแแ:
- แกแแฎแแแแ แกแแแ แชแแก แแฎแแ แแแญแแ แ แแแแแกแแแฆแแ แแแ แแแ แแแแ, แแแแก แจแแแแฌแแแแแก แกแแคแฃแซแแแแแ, แ แแ แกแแ แแแขแ แแฃแจแแแแก แแแแขแแแแแ แจแ. แแก แแฃแชแแแแแแแแ, แ แแแแแ แแแแขแแแแแ แแแแก แฃแแแขแแกแแแ แแ แฃแญแแ แก แแฎแแ แก แแแแขแแแแแ แแแแก แฌแงแแแแ แแแจแแแแแก.
- แแฃ แแ แกแแแแแก แกแแฎแแแแ แกแแแ แชแแก แแฎแแ แแแญแแ แ, แแแแแ แแแ แกแแฎแแแแ แกแแแ แชแ แฅแกแแแแกแแก แแฃแชแแแแแแแแ แแแแกแแแแแก, แ แแ แแแฃแจแแแก WordPress แแ แแแ แแฃแแแ แแแฃแแแแจแแ แแแก แกแแแแแแ แฌแแ แขแแแแแก แแ แแงแแก แฎแแแแแกแแฌแแแแแ แแแขแแ แแแขแจแ.
- แแ แแชแแกแแแแก แแแฅแกแแแแแฃแ แ แ แแแแแแแแ แแแแแกแแแฆแแ แแแ แจแแแแแแแแแ แแ: (แฎแแแแแกแแฌแแแแแแ แแแฎแกแแแ แแแ MariaDB-แแกแ แแ NGINX Uniy-แแก แแแกแแจแแแแแ)/(RAM แแแแแขแ PHP-แจแ + 5)
แแก แแแแจแแแแแแแ แแแงแแแแแฃแแแ NGINX แแ แแแฃแแแก แแแ แแแแขแ แแแจแ.
แแก แแแแจแแแแแแแ แแกแแแ แแฃแแแกแฎแแแแก, แ แแ แงแแแแแแแแก แแฃแจแแแแก แแแแแแฃแ แแ แ PHP แแ แแชแแกแ, แ แแช แแแแจแแแแแแแแแแ, แ แแแแแ WordPress แกแแแฃแแแ แแแแก แฃแแแ แแ แแกแแแฅแ แแแฃแ แแแแฎแแแแแก แฃแแแแแแแก แแ แแแแแขแแแแแ แแ แแชแแกแแแแก แแแ แแจแ, แแแแแแแแแ, WP-Cron-แแก แแแจแแแแ แแแ แแแฎแแ แฎแแแแ. แจแแแแซแแแแ แแแแแ แแแ แแ แจแแแแชแแ แแ แแก แแแแแขแแแ แแฅแแแแ แแแแแแฃแ แ แแแ แแแแขแ แแแแก แแแฎแแแแแ, แ แแแแแ แแฅ แจแแฅแแแแแ แแแ แแแแขแ แแแ แแแแกแแ แแแขแแฃแแแ. แกแแฌแแ แแแ แกแแกแขแแแแแแก แฃแแแขแแกแแแแแ แแแ แแแแขแ แแแ 10-แแแ 100-แแแแ.
แกแแ แแแขแแก แแแแ
if [ "${container:-unknown}" != "lxc" ] && [ "$(grep -m1 -a container=lxc /proc/1/environ | tr -d ' ')" == "" ]; then
NAMESPACES='"namespaces": {
"cgroup": true,
"credential": true,
"mount": true,
"network": false,
"pid": true,
"uname": true
}'
else
NAMESPACES='"namespaces": {}'
fi
PHP_MEM_LIMIT="$(grep 'memory_limit' /etc/php/7.4/embed/php.ini | tr -d ' ' | cut -f2 -d= | numfmt --from=iec)"
AVAIL_MEM="$(grep MemAvailable /proc/meminfo | tr -d ' kB' | cut -f2 -d: | numfmt --from-unit=K)"
MAX_PHP_PROCESSES="$(echo "${AVAIL_MEM}/${PHP_MEM_LIMIT}+5" | bc)"
echo " Calculated the maximum number of PHP processes as ${MAX_PHP_PROCESSES}. You may want to tune this value due to variations in your configuration. It is not unusual to see values between 10-100 in production configurations."
echo " Configuring NGINX Unit to use PHP and WordPress"
cat > /tmp/wordpress.json << EOM
{
"settings": {
"http": {
"header_read_timeout": 30,
"body_read_timeout": 30,
"send_timeout": 30,
"idle_timeout": 180,
"max_body_size": $(numfmt --from=iec ${UPLOAD_MAX_FILESIZE})
}
},
"listeners": {
"127.0.0.1:8080": {
"pass": "routes/wordpress"
}
},
"routes": {
"wordpress": [
{
"match": {
"uri": [
"*.php",
"*.php/*",
"/wp-admin/"
]
},
"action": {
"pass": "applications/wordpress/direct"
}
},
{
"action": {
"share": "/var/www/wordpress",
"fallback": {
"pass": "applications/wordpress/index"
}
}
}
]
},
"applications": {
"wordpress": {
"type": "php",
"user": "www-data",
"group": "www-data",
"processes": {
"max": ${MAX_PHP_PROCESSES},
"spare": 1
},
"isolation": {
${NAMESPACES}
},
"targets": {
"direct": {
"root": "/var/www/wordpress/"
},
"index": {
"root": "/var/www/wordpress/",
"script": "index.php"
}
}
}
}
}
EOM
curl -X PUT --data-binary @/tmp/wordpress.json --unix-socket /run/control.unit.sock http://localhost/configNGINX-แแก แแแงแแแแแ
แซแแ แแแแแ NGINX แแแ แแแแขแ แแแแก แแแแคแแแฃแ แแชแแ
แกแแ แแแขแ แฅแแแแก แแแ แแฅแขแแ แแแก NGINX แฅแแจแแกแแแแก แแ แจแแแแแ แฅแแแแก แแแแแแ แแแแคแแแฃแ แแชแแแก แคแแแแก nginx.conf. แงแฃแ แแแฆแแแ แแแแฅแชแแแ แแแแแฃแจแแแแแแแก แแ แแชแแกแแแแก แ แแแแแแแแแก แแ แคแแแแแก แแแฅแกแแแแแฃแ แ แแแแแก แแแงแแแแแแก แแขแแแ แแแแกแแแแก. แแกแแแ แแ แแก แฎแแแ, แ แแแแแแช แแแแชแแแก แจแแแแแ แแแแงแแคแแแแแแจแ แแแแกแแแฆแแ แฃแ แจแแแฃแแจแแแก แแแ แแแแขแ แแแแก แคแแแแก, แ แแกแแช แแแฐแงแแแแ แฅแแจแแ แแแแก แแแ แแแแขแ แแแ.
แกแแ แแแขแแก แแแแ
# Make directory for NGINX cache
mkdir -p /var/cache/nginx/proxy
echo " Configuring NGINX"
cat > ${NGINX_CONF_DIR}/nginx.conf << EOM
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include ${NGINX_CONF_DIR}/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
client_max_body_size ${UPLOAD_MAX_FILESIZE};
keepalive_timeout 65;
# gzip settings
include ${NGINX_CONF_DIR}/gzip_compression.conf;
# Cache settings
proxy_cache_path /var/cache/nginx/proxy
levels=1:2
keys_zone=wp_cache:10m
max_size=10g
inactive=60m
use_temp_path=off;
include ${NGINX_CONF_DIR}/conf.d/*.conf;
}
EOMNGINX แจแแแฃแแจแแแก แแแงแแแแแ
แแแแขแแแขแแก แจแแแฃแแจแแ แแแแแแขแแแแกแแแแก แแแแแแแแแแแ แจแแกแแแแจแแแแ แแแแ แกแแแขแแก แแฃแจแแแแแก แแแกแแฃแแฏแแแแกแแแแแ, แแแแ แแ แแฎแแแแ แแ แจแแแแฎแแแแแจแ, แแฃ แจแแแฃแแจแแ แกแฌแแ แแ แแ แแก แแแแคแแแฃแ แแ แแแฃแแ. แกแแ แแแขแแก แแก แแแแงแแคแแแแแ แแแคแฃแซแแแแฃแแแ แแแ แแแแขแ แแแแ .
แกแแ แแแขแแก แแแแ
cat > ${NGINX_CONF_DIR}/gzip_compression.conf << 'EOM'
# Credit: https://github.com/h5bp/server-configs-nginx/
# ----------------------------------------------------------------------
# | Compression |
# ----------------------------------------------------------------------
# https://nginx.org/en/docs/http/ngx_http_gzip_module.html
# Enable gzip compression.
# Default: off
gzip on;
# Compression level (1-9).
# 5 is a perfect compromise between size and CPU usage, offering about 75%
# reduction for most ASCII files (almost identical to level 9).
# Default: 1
gzip_comp_level 6;
# Don't compress anything that's already small and unlikely to shrink much if at
# all (the default is 20 bytes, which is bad as that usually leads to larger
# files after gzipping).
# Default: 20
gzip_min_length 256;
# Compress data even for clients that are connecting to us via proxies,
# identified by the "Via" header (required for CloudFront).
# Default: off
gzip_proxied any;
# Tell proxies to cache both the gzipped and regular version of a resource
# whenever the client's Accept-Encoding capabilities header varies;
# Avoids the issue where a non-gzip capable client (which is extremely rare
# today) would display gibberish if their proxy gave them the gzipped version.
# Default: off
gzip_vary on;
# Compress all output labeled with one of the following MIME-types.
# `text/html` is always compressed by gzip module.
# Default: text/html
gzip_types
application/atom+xml
application/geo+json
application/javascript
application/x-javascript
application/json
application/ld+json
application/manifest+json
application/rdf+xml
application/rss+xml
application/vnd.ms-fontobject
application/wasm
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/eot
font/otf
font/ttf
image/bmp
image/svg+xml
text/cache-manifest
text/calendar
text/css
text/javascript
text/markdown
text/plain
text/xml
text/vcard
text/vnd.rim.location.xloc
text/vtt
text/x-component
text/x-cross-domain-policy;
EOMNGINX-แแก แแแงแแแแแ WordPress
แจแแแแแ, แกแแ แแแขแ แฅแแแแก แแแแคแแแฃแ แแชแแแก แคแแแแก WordPress แแแแฃแแแกแฎแแแแ.conf แแแขแแแแแจแ แแแแค. แ. แแก แแฅ แแ แแก แแแแคแแแฃแ แแ แแแฃแแ:
- Let's Encrypt-แแกแแแ แแแฆแแแฃแแ TLS แกแแ แแแคแแแแขแแแแก แแแแฅแขแแฃแ แแแ Certbot-แแก แแแจแแแแแแ (แแแกแ แแแงแแแแแ แแฅแแแแ แจแแแแแ แแแแงแแคแแแแแแจแ)
- TLS แฃแกแแคแ แแฎแแแแแก แแแ แแแแขแ แแแแก แแแแคแแแฃแ แแชแแ Let's Encrypt-แแก แ แแแแแแแแแชแแแแแ แแแงแ แแแแแแ
- แแแแฃแแแกแฎแแแแแ แฉแแ แแแ แฅแแจแแ แแแแก แแแแแขแแแแแแก แแแแฎแแแแแแ 1 แกแแแแแก แแแแแแแแแแแจแ
- แแแแแ แแแ แฌแแแแแแก แแฆแ แแชแฎแแ, แแกแแแ แจแแชแแแแแก แแฆแ แแชแฎแแ, แแฃ แคแแแแ แแแ แแแแซแแแแ, แแ แ แกแแแ แแ แแแแฎแแแแแแ แคแแแแแกแแแแก: favicon.ico แแ robots.txt
- แคแแ แฃแ แคแแแแแแแ แแ แแแแแแ แ แคแแแแแ แฌแแแแแแก แแฆแแแแแ .phpแฃแแแแแแ แฌแแแแแแก แแ แแแฃแแแแแแกแฌแแแแแแแ แแแฌแงแแแแก แแแแแแแ แแกแแชแแแแแแแ
- แแแแแ แแแ แฌแแแแแแก แแฆแ แแชแฎแแ แกแขแแขแแแฃแ แ แแ แจแ แแคแขแแก แคแแแแแแแกแแแแก
- แกแแแแฃแ แแก แแแ แแแแขแ แ แจแ แแคแขแแก แคแแแแแแแกแแแแก
- index.php แแ แกแฎแแ แกแขแแขแแแแแแกแแแแก แแแ แจแ แฃแขแแแแชแแแก แแแแแขแแแ.
แกแแ แแแขแแก แแแแ
cat > ${NGINX_CONF_DIR}/conf.d/default.conf << EOM
upstream unit_php_upstream {
server 127.0.0.1:8080;
keepalive 32;
}
server {
listen 80;
listen [::]:80;
# ACME-challenge used by Certbot for Let's Encrypt
location ^~ /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://${TLS_HOSTNAME}$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ${TLS_HOSTNAME};
root /var/www/wordpress/;
# Let's Encrypt configuration
ssl_certificate ${CERT_DIR}/fullchain.pem;
ssl_certificate_key ${CERT_DIR}/privkey.pem;
ssl_trusted_certificate ${CERT_DIR}/chain.pem;
include ${NGINX_CONF_DIR}/options-ssl-nginx.conf;
ssl_dhparam ${NGINX_CONF_DIR}/ssl-dhparams.pem;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
# Proxy caching
proxy_cache wp_cache;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 404 1m;
proxy_cache_revalidate on;
proxy_cache_background_update on;
proxy_cache_lock on;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Deny all attempts to access hidden files such as .htaccess, .htpasswd,
# .DS_Store (Mac)
# Keep logging the requests to parse later (or to pass to firewall utilities
# such as fail2ban)
location ~ /. {
deny all;
}
# Deny access to any files with a .php extension in the uploads directory;
# works in subdirectory installs and also in multi-site network.
# Keep logging the requests to parse later (or to pass to firewall utilities
# such as fail2ban).
location ~* /(?:uploads|files)/.*.php$ {
deny all;
}
# WordPress: deny access to wp-content, wp-includes PHP files
location ~* ^/(?:wp-content|wp-includes)/.*.php$ {
deny all;
}
# Deny public access to wp-config.php
location ~* wp-config.php {
deny all;
}
# Do not log access for static assets, media
location ~* .(?:css(.map)?|js(.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
access_log off;
}
location ~* .(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
access_log off;
}
location / {
try_files $uri @index_php;
}
location @index_php {
proxy_socket_keepalive on;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://unit_php_upstream;
}
location ~* .php$ {
proxy_socket_keepalive on;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
try_files $uri =404;
proxy_pass http://unit_php_upstream;
}
}
EOMCertbot-แแก แแแงแแแแแ Let's Encrypt-แแก แกแแ แแแคแแแแขแแแแกแแแแก แแ แแแแ แแแขแแแแขแฃแ แ แแแแแฎแแแแ
แแ แแก แฃแคแแกแ แแแกแขแ แฃแแแแขแ Electronic Frontier Foundation (EFF), แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแฆแแ แแ แแแขแแแแขแฃแ แแ แแแแแแฎแแแ TLS แกแแ แแแคแแแแขแแแ Let's Encrypt-แแกแแแ. แกแแ แแแขแ แแแแแแแก แจแแแแแแก Certbot-แแก แแแแคแแแฃแ แแชแแแกแแแแก, แ แแแ แแแแแฃแจแแแแก แกแแ แแแคแแแแขแแแ Let's Encrypt-แแแแ NGINX-แจแ:
- แแฉแแ แแแก NGINX-แก
- แฉแแแแขแแแ แแแแก แ แแแแแแแแแแฃแแ TLS แแแ แแแแขแ แแแ
- แแฌแแ แแแแแก Certbot-แก แกแแแขแแกแแแแก แกแแ แแแคแแแแขแแแแก แแแกแแฆแแแแ
- แแแแแขแแแ แแแแก NGINX-แก แกแแ แแแคแแแแขแแแแก แแแแแกแแงแแแแแแแ
- แแแแแคแแแฃแ แแ แแแก Certbot-แก แงแแแแแแฆแแฃแ แแ แแแแแก 3:24 แกแแแแแ, แ แแแ แจแแแแแฌแแแก, แกแแญแแ แแ แแฃ แแ แ แกแแ แแแคแแแแขแแแแก แแแแแฎแแแแ แแ แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ, แฉแแแแขแแแ แแแ แแฎแแแ แกแแ แแแคแแแแขแแแ แแ แแแแแขแแแ แแแ NGINX.
แกแแ แแแขแแก แแแแ
echo " Stopping NGINX in order to set up Let's Encrypt"
service nginx stop
mkdir -p /var/www/certbot
chown www-data:www-data /var/www/certbot
chmod g+s /var/www/certbot
if [ ! -f ${NGINX_CONF_DIR}/options-ssl-nginx.conf ]; then
echo " Downloading recommended TLS parameters"
curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:36:07 GMT"
-o "${NGINX_CONF_DIR}/options-ssl-nginx.conf"
"https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf"
|| echo "Couldn't download latest options-ssl-nginx.conf"
fi
if [ ! -f ${NGINX_CONF_DIR}/ssl-dhparams.pem ]; then
echo " Downloading recommended TLS DH parameters"
curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:49:18 GMT"
-o "${NGINX_CONF_DIR}/ssl-dhparams.pem"
"https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem"
|| echo "Couldn't download latest ssl-dhparams.pem"
fi
# If tls_certs_init.sh hasn't been run before, remove the self-signed certs
if [ ! -d "/etc/letsencrypt/accounts" ]; then
echo " Removing self-signed certificates"
rm -rf "${CERT_DIR}"
fi
if [ "" = "${LETS_ENCRYPT_STAGING:-}" ] || [ "0" = "${LETS_ENCRYPT_STAGING}" ]; then
CERTBOT_STAGING_FLAG=""
else
CERTBOT_STAGING_FLAG="--staging"
fi
if [ ! -f "${CERT_DIR}/fullchain.pem" ]; then
echo " Generating certificates with Let's Encrypt"
certbot certonly --standalone
-m "${WORDPRESS_ADMIN_EMAIL}"
${CERTBOT_STAGING_FLAG}
--agree-tos --force-renewal --non-interactive
-d "${TLS_HOSTNAME}"
fi
echo " Starting NGINX in order to use new configuration"
service nginx start
# Write crontab for periodic Let's Encrypt cert renewal
if [ "$(crontab -l | grep -m1 'certbot renew')" == "" ]; then
echo " Adding certbot to crontab for automatic Let's Encrypt renewal"
(crontab -l 2>/dev/null; echo "24 3 * * * certbot renew --nginx --post-hook 'service nginx reload'") | crontab -
fiแแฅแแแแ แกแแแขแแก แแแแแขแแแแแ แแแ แกแแแแแแแแชแแ
แฉแแแ แแแแแ แแแกแแฃแแ แแ แแแแแ, แแฃ แ แแแแ แแแแแคแแแฃแ แแ แแแก แฉแแแแ แกแแ แแแขแ NGINX แแ NGINX แแ แแแฃแแ, แ แแแ แแแแแกแแฎแฃแ แแก แฌแแ แแแแแแกแแแแก แแแ แกแแแขแก แฉแแ แแฃแแ TLSSSL-แแ. แแฅแแแ แแกแแแ แจแแแแซแแแแ, แแฅแแแแ แกแแญแแ แแแแแแแ แแแแแแแแแแ แ, แแแแแแแแจแ แแแแแแขแแ:
- แแฎแแ แแแญแแ แ , แแแฃแแฏแแแแกแแ แจแแแฃแแจแแ แคแ แแแแก แแ แแก HTTPS-แแ
- ั แแฅแแแแก แกแแแขแแ แแแขแแแแขแฃแ แ แจแแขแแแแแแก แแแแแแแ แแกแแชแแแแแแแ
- แแแแกแแแแก WordPress, แแฅแแแแแแแก แจแแกแแคแแ แแกแ
- via (แฉแแ แแฃแแแ Ubuntu)
- Postfix แแ msmtp WordPress แจแแแซแแ แคแแกแขแแก แแแแแแแแ
- แจแแแแแฌแแแ แแฅแแแแ แกแแแขแ, แ แแแ แแแแแแ, แ แแแแแ แขแ แแคแแแก แจแแฃแซแแแ แแแก แแแฃแแแแแแแแก
แกแแแขแแก แแแแแ แฃแคแ แ แฃแแแแแกแ แแฃแจแแแแแกแแแแก, แฉแแแ แแแ แฉแแแ แแแแแฎแแแแแก , แฉแแแแ แแแแแ แชแแฃแแ, แกแแฌแแ แแแก แฎแแ แแกแฎแแก แแ แแแฃแฅแขแ, แ แแแแแแช แแแคแฃแซแแแแฃแแแ แฆแแ แแแแแก NGINX-แแ. แแแกแ แแแแแแแขแแแ แแแแฆแแแแ แแแแแแแฃแ แแ แแแขแแแ แแฃแ Brotli แแแแฃแแก, แแกแแแ (แแแแแขแแแแแ แกแแคแแกแฃแ แแ) . แฉแแแ แแกแแแ แแแแแแแแแ , WAF แแแแฃแแ NGINX Plus-แแกแแแแก, แ แแแแแแช แแแคแฃแซแแแแฃแแแ แแแแฃแกแขแ แแแก แฌแแแงแแแ แฃแกแแคแ แแฎแแแแแก แขแแฅแแแแแแแแแ F5-แแแ.
NB แซแแแแแ แแแขแแแ แแฃแแ แกแแแขแแก แแฎแแ แแแญแแ แแกแแแแก แจแแแแซแแแแ แแแฃแแแแจแแ แแแ แแฅแกแแแ แขแแแก . แฉแแแ แฃแแ แฃแแแแแแงแแคแ แแฅแแแแ แแแแกแแแขแแก แแ แกแแ แแแกแแก แกแฌแ แแค แแ แกแแแแแแ แแฃแจแแแแแก แแแแแกแแแแ แ แแแขแแแ แแแแก แแแ แแแแแจแ.
แฌแงแแ แ: www.habr.com
