Automatizojmë instalimin e WordPress me NGINX Unit dhe Ubuntu

Automatizojmë instalimin e WordPress me NGINX Unit dhe Ubuntu

Ka shumë materiale për instalimin e WordPress, një kërkim në Google me fjalët kyçe "WordPress install" do të japë rreth gjysmë milioni rezultate. Megjithatë, mes tyre ka shumë pak udhëzues praktikë për të instaluar dhe konfiguruar WordPress dhe sistemin operativ përkatës në mënyrë që ato të jenë të qëndrueshme për një periudhë të gjatë. Mund të jetë se konfigurimet e duhura varen shumë nga nevojat specifike, ose se një shpjegim i detajuar e bën artikullin të vështirë për t'u lexuar.

NĂ« kĂ«tĂ« artikull ne do tĂ« pĂ«rpiqemi tĂ« mbledhim mĂ« tĂ« mirĂ«n nga tĂ« dy qasjet, duke ofruar njĂ« skript nĂ« bash pĂ«r instalimin automatik tĂ« WordPress nĂ« Ubuntu, si dhe do ta kalojmĂ« atĂ« pĂ«rmes njĂ« pĂ«rshkrimi tĂ« çdo pjese, duke shpjeguar çfarĂ« bĂ«n secila pjesĂ« dhe cilat kompromise kemi bĂ«rĂ« gjatĂ« zhvillimit tĂ« tij. NĂ«se jeni njĂ« pĂ«rdorues i avancuar — mund tĂ« injoroni tekstin e artikullit dhe thjesht merrni skriptin pĂ«r ta modifikuar dhe pĂ«rdorur nĂ« ambientet tuaja. Rezultati i skriptit Ă«shtĂ« njĂ« instalim i konfigurueshĂ«m i WordPress me mbĂ«shtetje pĂ«r Lets Encrypt, qĂ« funksionon nĂ« NGINX Unit dhe Ă«shtĂ« i aplikueshĂ«m pĂ«r pĂ«rdorim industrial.

Arkitektura e zhvilluar për shpërndarjen e WordPress duke përdorur NGINX Unit është përshkruar në një artikull më të vjetër, tani ne gjithashtu do të konfigurojmë gjëra që atje nuk janë mbuluar (siç është në shumë udhëzues të tjerë):

  • WordPress CLI
  • Let’s Encrypt dhe certifikatat TLSSSL
  • Automatizimi i rinovimeve tĂ« certifikatat
  • Keshimi NGINX
  • Shtypja e NGINX
  • MbĂ«shtetje pĂ«r HTTPS dhe HTTP/2
  • Automatizimi i procesit

Artikulli do tĂ« pĂ«rshkruajĂ« instalimin nĂ« njĂ« server tĂ« vetĂ«m, ku do tĂ« vendosen ndĂ«rlidhĂ«si i skedarĂ«ve statikĂ«, serveri i PHP dhe baza e tĂ« dhĂ«nave. NjĂ« instalim qĂ« mbĂ«shtet shumĂ« hoste virtualĂ« dhe shĂ«rbime — do tĂ« jetĂ« njĂ« temĂ« potenciale pĂ«r tĂ« ardhmen. DĂ«shironi qĂ« tĂ« shkruajmĂ« pĂ«r diçka qĂ« nuk Ă«shtĂ« nĂ« kĂ«to artikuj — shkruani nĂ« komentet.

Kërkesat

  • Kontejner dhe server (LXC ose LXD), makinĂ« virtuale, apo serveri i zakonshĂ«m fizik, me tĂ« paktĂ«n 512 MB memorie RAM dhe Ubuntu 18.04 ose mĂ« tĂ« ri tĂ« instaluar.
  • Portat 80 dhe 443 tĂ« aksesueshme nga interneti
  • Emri i domenit tĂ« lidhur me adresĂ«n publike IP tĂ« kĂ«tij serveri
  • Akses me tĂ« drejtat e root (sudo).

Përmbledhje e arkitekturës

Arkitektura është e njëjtë siç është përshkruar më parë, një aplikacion web me tre nivele. Ai përbëhet nga skriptet PHP që ekzekutohen në procesorin PHP, dhe skedarët statikë që trajtohen nga serveri web.

Automatizojmë instalimin e WordPress me NGINX Unit dhe Ubuntu

Parimet e përgjithshme

  • ShumĂ« komanda pĂ«r konfigurimin nĂ« skript janĂ« tĂ« mbĂ«shtjella nĂ« kushte (if) pĂ«r idempotencĂ«: skripti mund tĂ« ekzekutohet disa herĂ« pa rrezik pĂ«r tĂ« ndryshuar konfigurimet qĂ« janĂ« tashmĂ« nĂ« rregull.
  • Skripti pĂ«rpiqet tĂ« instaloje softuer nga depot, nĂ« mĂ«nyrĂ« qĂ« tĂ« mund tĂ« aplikoni azhurnimet e sistemit me njĂ« komandĂ« (apt upgrade pĂ«r Ubuntu).
  • Komandat pĂ«rpiqen tĂ« pĂ«rcaktojnĂ« nĂ«se ato ekzekutohen nĂ« njĂ« kontejner, pĂ«r tĂ« ndĂ«rruar pĂ«rkatĂ«sisht konfigurimet e tyre.
  • PĂ«r tĂ« caktuar numrin e proceseve/rrjedhave qĂ« do tĂ« ekzekutohen nĂ« konfigurim, skripti pĂ«rpiqet tĂ« parashikojĂ« parametrat automatike tĂ« konfigurimit pĂ«r punĂ« nĂ« konteinerĂ«, makina virtuale, dhe servera fizikĂ«.
  • Kur pĂ«rshkruajmĂ« konfigurimet, gjithmonĂ« mendojmĂ« pĂ«r automatizimin, qĂ« shpresojmĂ« se do tĂ« bĂ«het baza pĂ«r krijimin e infrastrukturĂ«s tuaj si kod.
  • TĂ« gjitha komandat ekzekutohen nga pĂ«rdoruesi root, pasi ato ndryshojnĂ« konfigurimet kryesore tĂ« sistemit, por WordPress funksionon nĂ«n njĂ« pĂ«rdorues tĂ« zakonshĂ«m.

Instalimi i variablave të ambientit

Vendosni variablat e mëposhtëm të mjedisit, para se të ekzekutoni skriptin:

  • WORDPRESS_DB_PASSWORD — fjalĂ«kalimi pĂ«r bazĂ«n e tĂ« dhĂ«nave WordPress
  • WORDPRESS_ADMIN_USER — emri i administratorit tĂ« WordPress
  • WORDPRESS_ADMIN_PASSWORD — fjalĂ«kalimi i administratorit tĂ« WordPress
  • WORDPRESS_ADMIN_EMAIL — emaili i administratorit tĂ« WordPress
  • WORDPRESS_URL — URL e plotĂ« e faqes WordPress, duke filluar nga https://.
  • LETS_ENCRYPT_STAGING — e lĂ«nĂ« bosh si parazgjedhje, por duke vendosur vlerĂ«n nĂ« 1, do tĂ« pĂ«rdorni serverĂ«t staging tĂ« Let’s Encrypt, tĂ« nevojshĂ«m pĂ«r kĂ«rkesa tĂ« shpeshta pĂ«r certifikata gjatĂ« testimit tĂ« konfigurimeve tuaja, pĂ«rndryshe Let’s Encrypt mund t'ju bllokojĂ« pĂ«rkohĂ«sisht adresĂ«n IP pĂ«r shkak tĂ« numrit tĂ« madh tĂ« kĂ«rkesave.

Skripti kontrollon nëse variablat e lidhur me WordPress janë vendosur, dhe përfundon punën nëse jo.
Linjat e skriptit 572-576 kontrollojnë vlerën LETS_ENCRYPT_STAGING.

Vendosja e variablave të mjedisit të nxjerrë

Skripti në linjat 55-61 vendos variablat e mjedisit të mëposhtëm, ose në një vlerë të caktuar, ose duke përdorur vlerat e marra nga variablat e vendosur në seksionin e mëparshëm:

  • DEBIAN_FRONTEND="noninteractive" — informon aplikacionet se ato po ekzekutohen nĂ« skript dhe nuk ka mundĂ«si pĂ«r ndĂ«rveprim me pĂ«rdoruesin.
  • WORDPRESS_CLI_VERSION="2.4.0" — versioni i aplikacionit WordPress CLI.
  • WORDPRESS_CLI_MD5= "dedd5a662b80cda66e9e25d44c23b25c" — kontrola e shumĂ«s sĂ« skedarit ekzekutiv WordPress CLI 2.4.0 (versioni jepet nĂ« variablĂ«n WORDPRESS_CLI_VERSION). Skripti nĂ« rreshtin 162 pĂ«rdor kĂ«tĂ« vlerĂ« pĂ«r tĂ« kontrolluar qĂ« skedari WordPress CLI Ă«shtĂ« shkarkuar siç duhet.
  • UPLOAD_MAX_FILESIZE="16M" — madhĂ«sia maksimale e skedarit qĂ« mund tĂ« ngarkohet nĂ« WordPress. Ky parametĂ«r pĂ«rdoret nĂ« disa vende, kĂ«shtu qĂ« Ă«shtĂ« mĂ« e lehtĂ« ta pĂ«rcaktojmĂ« nĂ« njĂ« vend.
  • TLS_HOSTNAME= "$(echo ${WORDPRESS_URL} | cut -d'/' -f3)" — emri i hostit tĂ« sistemit, i nxjerrĂ« nga variabli WORDPRESS_URL. PĂ«rdoret pĂ«r tĂ« marrĂ« certifikatat pĂ«rkatĂ«se TLS/SSL nga Let’s Encrypt, si dhe pĂ«r verifikimin e brendshĂ«m tĂ« WordPress.
  • NGINX_CONF_DIR="/etc/nginx" — rruga pĂ«r katalogun me konfigurimet NGINX, duke pĂ«rfshirĂ« skedarin kryesor nginx.conf.
  • CERT_DIR="/etc/letsencrypt/live/${TLS_HOSTNAME}" — rruga pĂ«r certifikatat Let’s Encrypt pĂ«r faqen WordPress, e nxjerrĂ« nga variabli TLS_HOSTNAME.

Caktohet emri i hostit për serverin WordPress

Skripti cakton emrin e hostit për serverin, në mënyrë që vlera të përputhet me emrin e domain-it të faqes. Kjo nuk është e detyrueshme, por është më e lehtë për të dërguar email-e dalëse përmes SMTP kur konfigurohet një server i vetëm, siç është konfiguruar nga skripti.

kodi i skriptit

# 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

Shtimi i emrit të hostit në /etc/hosts

ShtesĂ« WP‑Cron pĂ«rdoret pĂ«r tĂ« ekzekutuar detyra tĂ« periodike, kĂ«rkon qĂ« WordPress tĂ« ketĂ« qasje nĂ« veten e tij pĂ«rmes HTTP. PĂ«r t'u siguruar qĂ« WP-Cron punon siç duhet nĂ« tĂ« gjitha mjediset, skripti shton njĂ« rresht nĂ« skedarin /etc/hosts, nĂ« mĂ«nyrĂ« qĂ« WordPress tĂ« ketĂ« qasje nĂ« veten e tij pĂ«rmes ndĂ«rlidhĂ«sit loopback:

kodi i skriptit

# 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

Instalimi i mjeteve të nevojshme për hapat e ardhshëm

Pjesa e mbetur e skriptit kërkon disa programe dhe supozon që depozitat janë të azhurnuara. Ne azhurnojmë listën e depozitave dhe pastaj instalojmë mjetet e nevojshme:

kodi i skriptit

# 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

Shtimi i depozitave NGINX Unit dhe NGINX

Skripti instalon NGINX Unit dhe NGINX me burim të hapur nga depozitat zyrtare të NGINX, për t'u siguruar që përdoren versionet me përditësimet më të fundit të sigurisë dhe përmirësimeve të gabimeve.

Skripti shton depozitën NGINX Unit dhe më pas depozitën NGINX, duke shtuar çelësin e depozitave dhe skedarët e konfigurimeve apt, të cilat caktuan qasje në depozitat përmes internetit.

Instalimi aktual i NGINX Unit dhe NGINX ndodh në seksionin e ardhshëm. Ne i kemi shtuar paraprakisht depozitat për të mos azhurnuar metadata disa herë, gjë që e bën instalimin më të shpejtë.

kodi i skriptit

# 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

Instalimi i NGINX, NGINX Unit, PHP MariaDB, Certbot (Let’s Encrypt) dhe varĂ«sive tĂ« tyre

Sapo të gjitha depozat të jenë shtuar, ne azhurnojmë metadatat dhe instalojmë aplikacionet. Paketat që instalohen nga skripti gjithashtu përfshijnë zgjerimet PHP, të rekomanduara gjatë ekzekutimit në WordPress.org

kodi i skriptit

echo " Azhurnimi i metadata e depozitave"
apt-get -qq update

# Instaloni PHP me varësitë dhe NGINX Unit
echo " Instalimi i PHP, NGINX Unit, NGINX, Certbot, dhe 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

Konfigurimi i PHP për t'u përdorur me NGINX Unit dhe WordPress

Skripti krijon një skedar konfigurimi në katalogun conf.d. Këtu caktohet madhësia maksimale e skedarëve të ngarkuar për PHP, aktivizohet nxjerrja e gabimeve PHP në STDERR, në mënyrë që ato të shkruhen në regjistrin e NGINX Unit, si dhe ri-nis NGINX Unit.

kodi i skriptit

# 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

Caktimi i konfigurimeve të bazës së të dhënave MariaDB për WordPress

Ne kemi zgjedhur MariaDB në vend të MySQL, sepse ka më shumë aktivitet të komunitetit, për më tepër, ajo ndoshta ofron performancë më të lartë si standard (ndoshta këtu është më e thjeshtë: për të instaluar MySQL, duhet të shtohet një depo tjetër, shënim i përkthyesit).

Skripti krijon një bazë të re të të dhënave dhe krijon kredencialet për qasje në WordPress përmes ndërlidhësit loopback:

kodi i skriptit

# 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;"

Instalimi i programit WordPress CLI

Në këtë hap skripti instalon programin WP-CLI. Me të mund të instaloni dhe menaxhoni konfigurimet e WordPress pa pasur nevojë për redaktimin manual të skedareve, azhurnimin e bazës së të dhënave ose hyrjen në panelin e administratës. Po ashtu, me të mund të instaloni temat dhe shtesat dhe të kryeni azhurnimin e WordPress.

kodi i skriptit

if [ ! -f /usr/local/bin/wp ]; then
  # Instaloni mjetin WordPress CLI
  echo " Instalimi i mjetit WordPress CLI"
  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

Instalimi dhe konfigurimi i WordPress

Skripti instalon versionin më të fundit të WordPress në katalogun /var/www/wordpress, si dhe ndryshon konfigurimet:

  • Lidhja me bazĂ«n e tĂ« dhĂ«nave funksionon pĂ«rmes socket-eve dhezaksion unix nĂ« vend tĂ« TCP nĂ« loopback, pĂ«r tĂ« reduktuar trafikun TCP.
  • WordPress shton njĂ« prefix https:// nĂ« URL, nĂ«se klientĂ«t lidhen me NGINX pĂ«rmes protokollit HTTPS, dhe gjithashtu dĂ«rgon emrin e hostit tĂ« largĂ«t (siç e ofron NGINX) nĂ« PHP. Ne aplikojmĂ« njĂ« pjesĂ« kodi pĂ«r ta konfiguruar kĂ«tĂ«.
  • WordPress ka nevojĂ« pĂ«r HTTPS pĂ«r tĂ« hyrĂ«
  • Struktura e URL sipas parazgjedhjes bazohet nĂ« burimet
  • Caktohen tĂ« drejtat e duhura nĂ« sistemin e skedarĂ«ve pĂ«r katalogun WordPress.

kodi i skriptit

nëse [ ! -d /var/www/wordpress ]; atëherë
  # Krijoni katalogët WordPress
  mkdir -p /var/www/wordpress
  chown -R www-data:www-data /var/www

  # Shkarkoni WordPress duke përdorur WordPress CLI
  echo " Duke instaluar 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}""

  # Ky fragment futet në skedarin wp-config.php kur krijohet;
  # informon WordPress që ne jemi pas një proxy të kthyer dhe si i tillë
  # lejon që të gjenerojë lidhje duke përdorur HTTPS
  cat > /tmp/wp_forwarded_for.php << 'EOM'
/* Rrotulloni HTTPS 'on' nëse HTTP_X_FORWARDED_PROTO përputhet me '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

  # Krijoni konfigurimin e WordPress
  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

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

  # Caktoni strukturën e permalink që është një standard të arsyeshëm që nuk është në UI
  su -s /bin/sh -p -c "wp --path=/var/www/wordpress option update permalink_structure '/%year%/%monthnum%/%postname%/'" www-data

  # Hiqni skedarin e shembullit sepse është mbeturinë dhe mund të jetë një problem në sigurinë
  rm /var/www/wordpress/wp-config-sample.php

  # Sigurohuni që lejet e WordPress të jenë të sakta
  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

Konfigurimi i NGINX Unit

Skema konfigurimit përcakton NGINX Unit për të ekzekutuar PHP dhe për të trajtuar rrugët e WordPress, duke izoluar hapësirën emërore të proceseve PHP dhe optimizuar cilësimet e performancës. Këtu ka tre funksione që meritojnë vëmendje:

  • MbĂ«shtetjes sĂ« hapĂ«sirave emĂ«rore i jepet pĂ«rparĂ«si nĂ« bazĂ« tĂ« kushtit mbi verifikimin e ekzekutimit tĂ« skriptit nĂ« konteiner. Kjo Ă«shtĂ« e nevojshme pasi shumica e cilĂ«simeve tĂ« konteinerĂ«ve nuk mbĂ«shtesin ekzekutimin e konteinerĂ«ve tĂ« brendshĂ«m.
  • NĂ«se ka mbĂ«shtetje pĂ«r hapĂ«sira emĂ«rore, atĂ«herĂ« ndalon hapĂ«sirĂ«n emĂ«rore network. Kjo Ă«shtĂ« e nevojshme qĂ« tĂ« lejojĂ« WordPress tĂ« lidhet njĂ«kohĂ«sisht me endpoints dhe tĂ« jetĂ« e disponueshme nĂ« internet.
  • Numri maksimal i proceseve pĂ«rcaktohet si mĂ« poshtĂ«: (Memoria e disponueshme pĂ«r MariaDB dhe NGINX Unit tĂ« ekzekutuar)/(kufiri i memories nĂ« PHP + 5)
    Ky vlerë vendoset në cilësimet e NGINX Unit.

Kjo vlerë gjithashtu nënkupton se gjithmonë ka të paktën dy procese PHP në ekzekutim, që është e rëndësishme, pasi WordPress bën shumë kërkesa asinkrone ndaj vetes, dhe pa procese të tjera, ekzekutimi, për shembull, i WP-Cron, do të jetë i thyer. Mund të dëshironi të rritni ose ulni këto kufij bazuar në cilësimet tuaja lokale, sepse cilësimet e krijuara këtu janë konservatore. Në shumicën e sistemeve prodhuese, cilësimet janë midis 10 dhe 100.

kodi i skriptit

nëse [ "${container:-unknown}" != "lxc" ] && [ "$(grep -m1 -a container=lxc /proc/1/environ | tr -d ' ')" == "" ]; atëherë
  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 " Llogaritur numri maksimal i proceseve PHP si ${MAX_PHP_PROCESSES}. Mund të dëshironi ta rregulloni këtë vlerë për shkak të variacioneve në konfigurimin tuaj. Nuk është e pazakontë të shihni vlera midis 10-100 në konfigurimet prodhuese."

echo " Konfigurimi i NGINX Unit për të përdorur PHP dhe 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

Konfigurimi i NGINX

Konfigurimi i parametrave kryesorë të NGINX

Skema krijon një katalog për caching-in e NGINX, dhe pastaj krijon skedarin kryesor të konfigurimit nginx.conf. Vëreni numrin e proceseve përpunuese dhe caktimin e madhësisë maksimale të skedarit për ngarkesë. Gjithashtu ka një rresht që lidhet me skedarin e konfigurimit të kompresimit që përcaktohet në seksionin në vazhdim, duke përfunduar me cilësimet e caching.

kodi i skriptit

# 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

Konfigurimi i kompresionit NGINX

Kompresimi i përmbajtjes në flukso përpara se ta dërgoni atë klientëve është një mënyrë e shkëlqyer për të përmirësuar performancën e faqes, por vetëm nëse kompresimi është i konfiguruar siç duhet. Ky seksion i skemës është i bazuar në cilësime. këtu.

kodi i skriptit

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
# Aktivoni kompresimin gzip.
# Default: off
gzip on;
# Niveli i kompresimit (1-9).
# 5 është një kompromis i përsosur ndërmjet madhësisë dhe përdorimit të CPU, duke ofruar rreth 75%
# reduktim për shumicën e skedarëve ASCII (gati identike me nivelin 9).
# Default: 1
gzip_comp_level 6;
# Mos kompresoni asgjë që është tashmë e vogël dhe e pamundur të zvogëlohet shumë nëse
# ndonjëherë (default është 20 bytes, që është e keqe pasi zakonisht çon në skedarë më të mëdhenj pas gzipping).
# Default: 20
gzip_min_length 256;
# Kompresoni të dhënat edhe për klientët që lidhen me ne përmes proxy-eve,
# identifikuar nga header-i "Via" (kërkohet për CloudFront).
# Default: off
gzip_proxied any;
# Informoni proxy-t të ruajnë si versionin gzipped ashtu edhe versionin e zakonshëm të një burimi
# sa herë që header-i i mundësive Accept-Encoding të klientit ndryshon;
# Shmangni çështjen ku një klient që nuk ka kapacitet gzip (i cili është jashtëzakonisht i rrallë
# sot) do të shfaqë gjëra të paqarta nëse proxy-i i jep atij versionin gzipped.
# Default: off
gzip_vary on;
# Kompresoni të gjitha daljet etiketuar me një nga MIME-të e mëposhtme.
# `text/html` gjithmonë kompresohet nga moduli gzip.
# 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

Konfigurimi i NGINX për WordPress

Më pas skripti krijon një skedar konfigurimi për WordPress default.conf në katalog conf.d. Këtu konfiguroni:

  • Aktivizimi i certifikatave TLS, tĂ« marra nga Let’s Encrypt pĂ«rmes Certbot (konfigurimi i tij do tĂ« jetĂ« nĂ« seksionin tjetĂ«r)
  • Konfigurimi i parametrave tĂ« sigurisĂ« TLS, i bazuar nĂ« rekomandimet nga Let’s Encrypt
  • Aktivizimi i caching pĂ«r kĂ«rkesat e kaluara pĂ«r 1 orĂ« si parazgjedhje
  • Çaktivizimi i regjistrimit tĂ« qasjes, si dhe regjistrimit tĂ« gabimeve, nĂ«se skedari nuk gjendet, pĂ«r dy skedarĂ« tĂ« zakonshĂ«m tĂ« kĂ«rkuar: favicon.ico dhe robots.txt
  • Ndalo qasjen nĂ« skedarĂ« tĂ« fshehur dhe disa skedarĂ« .php, pĂ«r tĂ« parandaluar qasjen e paligjshme ose aktivizimin e paqĂ«llimshĂ«m
  • Çaktivizimi i regjistrimit tĂ« qasjes pĂ«r statikĂ«n dhe skedarĂ«t e fontit
  • Caktoni header-in Access-Control-Allow-Origin pĂ«r skedarĂ«t e fontit
  • Shtimi i routing pĂ«r index.php dhe statikĂ«n tjetĂ«r.

kodi i skriptit

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 pĂ«rdorur nga Certbot pĂ«r 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/;
    # Konfigurimi i Let’s Encrypt
    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;
    }

    # Ndaloni të gjitha përpjekjet për të aksesuar skedarë të fshehur si .htaccess, .htpasswd,
    # .DS_Store (Mac)
    # Ruani regjistrimin e kërkesave për t'i analizuar më vonë (ose për t'i kaluar në utilitetet e firewall-it
    # si fail2ban)
    location ~ /.{
        deny all;
    }
    # Ndaloni qasjen në çdo skedar me një zgjedhje .php në direktorinë e ngarkimeve;
    # punon në instalimet në nën-direktori dhe gjithashtu në rrjetin me shumë vende.
    # Ruani regjistrimin e kërkesave për t'i analizuar më vonë (ose për t'i kaluar në utilitetet e firewall-it
    # si fail2ban).
    location ~* /(?:uploads|files)/.*.php$ {
        deny all;
    }
    # WordPress: ndaloni qasjen në skedarët PHP të wp-content, wp-includes
    location ~* ^/(?:wp-content|wp-includes)/.*.php$ {
        deny all;
    }
    # Ndaloni qasjen publike në wp-config.php
    location ~* wp-config.php {
        deny all;
    }
    # Mos regjistroni qasjen për asetet statike, 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

Konfigurimi i Certbot pĂ«r certifikat nga Let’s Encrypt dhe automatizimi i rinovimit tĂ« tyre

Certbot — njĂ« mjet falas nga Electronic Frontier Foundation (EFF), me ndihmĂ«n e tĂ« cilit mund tĂ« merrni dhe automatizoni rinovimin e certifikatave TLS nga Let’s Encrypt. Skripti kryen veprimet e mĂ«poshtme, qĂ« çojnĂ« nĂ« konfigurimin e Certbot pĂ«r tĂ« trajtuar certifikatat nga Let’s Encrypt nĂ« NGINX:

  • Ndalon NGINX
  • Shkarkon parametrat e rekomanduar TLS
  • Ruan Certbot pĂ«r tĂ« marrĂ« certifikatat pĂ«r sitin
  • Rinis NGINX pĂ«r tĂ« pĂ«rdorur certifikatat
  • Konfiguroni fillimin e pĂ«rditshĂ«m tĂ« Certbot nĂ« 3:24 tĂ« mĂ«ngjesit pĂ«r tĂ« kontrolluar nevojĂ«n pĂ«r rinovimin e certifikatave, si dhe, nĂ« rast nevoje, shkarkimin e certifikatave tĂ« reja dhe ridĂ«shkimin e NGINX.

kodi i skriptit

echo " Ndaluar NGINX për të vendosur 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 " Shkarkimi i parametrave të rekomanduar TLS"
  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 "Nuk mund të shkarkoni opsionet e fundit-ssl-nginx.conf"
fi

if [ ! -f ${NGINX_CONF_DIR}/ssl-dhparams.pem ]; then
  echo " Shkarkimi i parametrave të rekomanduar TLS DH"
  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 "Nuk mund të shkarkoni ssl-dhparams.pem të fundit"
fi

# Nëse tls_certs_init.sh nuk është ekzekutuar më parë, hiqni certifikatat e vetë-shkruara
if [ ! -d "/etc/letsencrypt/accounts" ]; then
  echo " Heqja e certifikatave të vetë-shkruara"
  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 " Gjenerimi i certifikatave me Let's Encrypt"
  certbot certonly --standalone 
         -m "${WORDPRESS_ADMIN_EMAIL}" 
         ${CERTBOT_STAGING_FLAG} 
         --agree-tos --force-renewal --non-interactive 
         -d "${TLS_HOSTNAME}"
fi

echo " Duke nisur NGINX për të përdorur konfigurimin e ri"
service nginx start

# Shkruani crontab për rinovimin periodik të certifikatave Let's Encrypt
if [ "$(crontab -l | grep -m1 'certbot renew')" == "" ]; then
  echo " Shtimi i certbot në crontab për rinovimin automatik të Let's Encrypt"
  (crontab -l 2>/dev/null; echo "24 3 * * * certbot renew --nginx --post-hook 'service nginx reload'") | crontab -
fi

Konfigurimi shtesë i faqes suaj

Më lart, ne diskutuam se si skripti ynë konfiguron NGINX dhe NGINX Unit për të shërbyer një faqe që është gati për përdorim industrial me TLS SSL të aktivizuar. Ju gjithashtu mund të shtoni në të ardhmen, varësisht nga nevojat tuaja:

  • PĂ«rkrahje Brotli, kompresim mĂ« tĂ« avancuar nĂ« real-time pĂ«r HTTPS
  • ModSecurity me rregulla pĂ«r WordPress, pĂ«r tĂ« parandaluar sulmet automatike nĂ« faqen tuaj
  • Kopjimi pĂ«r WordPress, qĂ« ju pĂ«rshtatet
  • Mbrojtje me anĂ« tĂ« AppArmor Postfix ose msmtp, nĂ« mĂ«nyrĂ« qĂ« WordPress tĂ« mund tĂ« dĂ«rgojĂ« email
  • Kontrollime tĂ« faqes tuaj, nĂ« mĂ«nyrĂ« qĂ« tĂ« kuptoni sa trafik mund tĂ« pĂ«rballojĂ«
  • PĂ«r njĂ« performancĂ« edhe mĂ« tĂ« mirĂ« tĂ« faqes, ne rekomandojmĂ« tĂ« kaloni nĂ«

, produktin tonë komercial të nivelit të korporatave, të bazuar në NGINX me kod të hapur. Abonentët e tij do të marrin një modull të ngarkuar dinamikisht Brotli, si dhe (për një pagesë shtesë) NGINX PlusNGINX ModSecurity WAF . Ne gjithashtu ofrojmëNGINX App Protect , një modull WAF për NGINX Plus, i cili bazohet në teknologjinë kryesore të sigurisë nga F5.Për mbështetje të një faqeje me ngarkesë të lartë, ju mund të kontaktoni specialistët

Shën. . Do të sigurojmë funksionimin e shpejtë dhe të besueshëm të faqes ose shërbimit tuaj nën çdo ngarkesë. SouthbridgeKa shumë materiale për instalimin e WordPress, një kërkim në Google me fjalë kyçe "WordPress install" do të japë rreth gjysmë milioni rezultate. Megjithatë, mes tyre ka shumë pak udhëzime të vlefshme, sipas të cilave mund të instaloni dhe konfiguroni WordPress dhe sistemin operativ në nëntokë në mënyrë që të jenë të aftë për mbështetje të gjatë. Ndoshta, konfigurimet e duhura

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster