Автоматикунонии насби WordPress бо NGINX Unit ва Ubuntu

Автоматикунонии насби WordPress бо NGINX Unit ва Ubuntu

Дар он ҷо дар бораи насб кардани WordPress маводи зиёде мавҷуданд; ҷустуҷӯи Google барои "WordPress насб" тақрибан ним миллион натиҷаҳоро бармегардонад. Аммо, дар он ҷо воқеан хеле кам дастурҳои муфид мавҷуданд, ки метавонанд ба шумо дар насб ва танзим кардани WordPress ва системаи оператсионии асосӣ кӯмак расонанд, то онҳо дар тӯли муддати тӯлонӣ дастгирӣ карда шаванд. Шояд танзимоти дуруст аз эҳтиёҷоти мушаххаси шумо вобаста бошад ё ин метавонад сабаби он бошад, ки шарҳи муфассал хондани мақоларо душвор мегардонад.

Дар ин мақола, мо кӯшиш мекунем, ки беҳтарини ҳарду ҷаҳонро бо пешниҳоди скрипти bash барои ба таври худкор насб кардани WordPress дар Ubuntu ҷамъ оварем ва мо онро меомӯзем ва шарҳ медиҳем, ки ҳар як порча чӣ кор мекунад ва фоидаҳое, ки мо дар тарҳрезӣ кардем. он. Агар шумо корбари ботаҷриба бошед, шумо метавонед матни мақоларо гузаред ва танҳо скриптро гиред барои тағир додан ва истифода дар муҳити шумо. Натиҷаи скрипт як насби фармоишии WordPress бо дастгирии Lets Encrypt мебошад, ки дар Unit NGINX кор мекунад ва барои истифодаи саноатӣ мувофиқ аст.

Меъмории таҳияшуда барои ҷойгиркунии WordPress бо истифода аз NGINX Unit дар мақолаи кӯҳна, мо ҳоло инчунин чизҳоеро, ки дар он ҷо фаро гирифта нашуда буданд, танзим хоҳем кард (чун дар бисёр дарсҳои дигар):

  • WordPress CLI
  • Биёед сертификатҳоро рамзгузорӣ кунем ва TLSSSL
  • Навсозии автоматии сертификат
  • Кэшкунии NGINX
  • Фишурдани NGINX
  • Дастгирии HTTPS ва HTTP/2
  • Автоматикунонии равандҳо

Дар мақола насбкунӣ дар як сервер тавсиф карда мешавад, ки дар як вақт сервери коркарди статикӣ, сервери коркарди PHP ва пойгоҳи додаҳоро ҷойгир мекунад. Насбкунӣ бо дастгирии ҳостҳо ва хидматҳои сершумори виртуалӣ як мавзӯи эҳтимолӣ барои оянда аст. Агар шумо хоҳед, ки мо дар бораи чизе нависем, ки дар ин мақолаҳо нест, дар шарҳҳо нависед.

талаботи

  • Контейнери сервер (LXC ё LXD), як мошини виртуалӣ ё сервери сахтафзори муқаррарӣ, ки ҳадди аққал 512 МБ RAM ва Ubuntu 18.04 ё навтар насб карда шудааст.
  • Портҳои дастраси Интернет 80 ва 443
  • Номи домене, ки бо суроғаи IP-и ҷамъиятии ин сервер алоқаманд аст
  • Дастрасӣ бо ҳуқуқи реша (sudo).

Баррасии меъморӣ

Меъморӣ ҳамон тавре ки тасвир шудааст пештар, як веб-барномаи сеқабата. Он аз скриптҳои PHP, ки дар муҳаррики PHP иҷро мешаванд ва файлҳои статикӣ, ки аз ҷониби веб-сервер коркард мешаванд, иборат аст.

Автоматикунонии насби WordPress бо NGINX Unit ва Ubuntu

Принсипҳои умумӣ

  • Бисёре аз фармонҳои конфигуратсия дар скрипт печонида мешаванд, агар шароити номутаносибӣ вуҷуд дошта бошад: скриптро метавон чанд маротиба бидуни хатари тағир додани танзимоти аллакай омода иҷро кард.
  • Скрипт кӯшиш мекунад, ки нармафзорро аз анборҳо насб кунад, то шумо метавонед навсозиҳои системаро дар як фармон татбиқ кунед (apt upgrade барои Ubuntu).
  • Дастаҳо кӯшиш мекунанд, ки муайян кунанд, ки онҳо дар як контейнер кор мекунанд, то онҳо тавонанд танзимоти худро мувофиқан тағйир диҳанд.
  • Барои муқаррар кардани шумораи равандҳои ришта, ки дар танзимот оғоз мешаванд, скрипт кӯшиш мекунад, ки танзимоти автоматии кор дар контейнерҳо, мошинҳои виртуалӣ ва серверҳои сахтафзорро тахмин кунад.
  • Ҳангоми тавсифи танзимот, мо ҳамеша аввал дар бораи автоматизатсия фикр мекунем, ки умедворем, ки он барои эҷоди инфрасохтори шахсии шумо ҳамчун код асос хоҳад ёфт.
  • Ҳама фармонҳо аз ҷониби корбар иҷро карда мешаванд реша, зеро онҳо танзимоти асосии системаро тағир медиҳанд, аммо худи WordPress ҳамчун корбари муқаррарӣ кор мекунад.

Муқаррар кардани тағирёбандаҳои муҳити зист

Пеш аз иҷро кардани скрипт тағирёбандаҳои муҳити зеринро таъин кунед:

  • WORDPRESS_DB_PASSWORD — Пароли базаи WordPress
  • WORDPRESS_ADMIN_USER - Номи корбари WordPress
  • WORDPRESS_ADMIN_PASSWORD - Пароли администратори WordPress
  • WORDPRESS_ADMIN_EMAIL — Почтаи электронии администратори WordPress
  • WORDPRESS_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 гирифта шудааст. Барои гирифтани сертификатҳои TLS/SSL мувофиқ аз Let's Encrypt ва инчунин барои тафтиши дохилии WordPress истифода мешавад.
  • NGINX_CONF_DIR="/etc/nginx" — роҳ ба директория бо танзимоти NGINX, аз ҷумла файли асосӣ nginx.conf.
  • CERT_DIR="/etc/letsencrypt/live/${TLS_HOSTNAME}" — роҳ ба Бигзор сертификатҳо барои сайти 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

Иловагӣ WP‑Cron Барои иҷрои вазифаҳои даврӣ истифода мешавад, аз WordPress талаб мекунад, ки тавассути HTTP ба худ дастрасӣ дошта бошад. Барои боварӣ ҳосил кардан, ки WP-Cron дар ҳама муҳитҳо дуруст кор мекунад, скрипт ба файл сатр илова мекунад / etc / hostто WordPress тавонад тавассути интерфейси бозгашт ба худ дастрасӣ пайдо кунад:

рамзи скрипт

# 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-release

Илова кардани воҳиди NGINX ва анбори 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
fi

Насб кардани NGINX, NGINX Unit, PHP MariaDB, Certbot (Let's Encrypt) ва вобастагии онҳо

Пас аз илова кардани ҳама анборҳо, мо метамаълумотҳоро навсозӣ мекунем ва барномаҳоро насб мекунем. Бастаҳои аз ҷониби скрипт насбшуда инчунин васеъшавии PHP-ро дар бар мегиранд, ки ҳангоми кор дар WordPress.org тавсия дода мешаванд

рамзи скрипт

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-server

Танзими PHP барои истифода бо 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 restart

Танзимоти пойгоҳи додаҳои MariaDB барои WordPress

Мо MariaDB-ро бар MySQL интихоб кардем, зеро он фаъолияти бештари ҷомеа дорад ва инчунин метавонад бо нобаёнӣ иҷрои беҳтар таъмин менамояд (Эҳтимол, дар ин ҷо ҳама чиз соддатар аст: барои насб кардани MySQL ба шумо лозим аст, ки анбори дигар илова кунед, тахминан. тарҷумон).

Скрипт махзани нав эҷод мекунад ва тавассути интерфейси бозгашт маълумотҳои дастрасии WordPress эҷод мекунад:

рамзи скрипт

# 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

Дар ин қадам скрипт барномаро насб мекунад WP-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 дар бозгашт барои кам кардани трафики 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}" --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
fi

Насб кардани воҳиди NGINX

Скрипт воҳиди 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/config

Танзими NGINX

Танзими Танзимоти асосии 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;
}
EOM

Танзими фишурдани NGINX

Фишурдани мундариҷа дар парвоз пеш аз фиристодани он ба мизоҷон як роҳи олии беҳтар кардани кори сайт аст, аммо танҳо агар фишурдасозӣ дуруст танзим карда шавад. Ин фасли скрипт ба танзимот асос ёфтааст аз ин ҷо.

рамзи скрипт

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;
EOM

Танзими NGINX барои WordPress

Баъдан, скрипт файли конфигуратсияро барои WordPress эҷод мекунад default.conf дар каталог конф. д. Дар ин ҷо он танзим карда шудааст:

  • Фаъолсозии сертификатҳои TLS, ки аз Let's Encrypt тавассути 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;
    }
}
EOM

Танзими Certbot барои сертификатҳои Let's Encrypt ва ба таври худкор нав кардани онҳо

Сербот воситаи ройгони Бунёди Frontier Electronic (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барои пешгирии ҳамлаҳои автоматӣ дар сайти шумо
  • кадани барои WordPress, барои шумо мувофиқ аст
  • Муҳофизат бо кӯмаки AppArmor (дар Ubuntu)
  • Postfix ё msmtp, то WordPress тавонад почта фиристад
  • Сайти худро тафтиш кунед, то шумо фаҳмед, ки он чӣ қадар трафикро идора карда метавонад

Барои боз ҳам беҳтар иҷрои сайт, тавсия медиҳем, ки навсозӣ кунед NGINX Plus, маҳсулоти тиҷоратии дараҷаи корхонаи мо дар асоси манбаи кушодаи NGINX. Муштариёни он модули ба таври динамикӣ боркардаи Brotli, инчунин (барои пардохти иловагӣ) мегиранд. NGINX ModSecurity WAF. Мо низ пешниҳод мекунем NGINX App Protect, модули WAF барои NGINX Plus дар асоси технологияи пешбари соҳаи амният аз F5.

БМТ Барои дастгирии вебсайти пурбор, шумо метавонед бо мутахассисон тамос гиред Саутбридж. Мо кори зуд ва боэътимоди вебсайт ё хидмати шуморо дар ҳама гуна сарборӣ таъмин хоҳем кард.

Манбаъ: will.com