АвтоматизиранС Π½Π° инсталацията Π½Π° WordPress с NGINX Unit ΠΈ Ubuntu

АвтоматизиранС Π½Π° инсталацията Π½Π° WordPress с NGINX Unit ΠΈ Ubuntu

Има мноТСство ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ Π·Π° инсталиранС Π½Π° WordPress, Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π² Google с ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡ‚Π΅ Π΄ΡƒΠΌΠΈ "инсталирай WordPress" Ρ‰Π΅ ΠΈΠ·Π²Π°Π΄ΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ ΠΌΠΈΠ»ΠΈΠΎΠ½ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ срСд тях ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²Π°, ΠΏΠΎ ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° инсталиратС ΠΈ настроитС WordPress ΠΈ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰Π°Ρ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° са Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Π΄ΡŠΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½ΠΎ. МоТС Π±ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈΡ‚Π΅ настройки зависят ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈΡ‚Π΅ Π½ΡƒΠΆΠ΄ΠΈ, ΠΈΠ»ΠΈ пък Ρ‚ΠΎΠ²Π° Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡ‚ΠΎ обяснСниС ΠΏΡ€Π°Π²ΠΈ статията Ρ‚Ρ€ΡƒΠ΄Π½Π° Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅.

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΡΡŠΠ±Π΅Ρ€Π΅ΠΌ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΎΡ‚ΠΎ ΠΎΡ‚ Π΄Π²Π°Ρ‚Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, прСдоставяйки bash скрипт Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π° инсталация Π½Π° WordPress Π½Π° Ubuntu, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ ΠΏΡ€Π΅Π· Π½Π΅Π³ΠΎ, обяснявайки ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈ всСки Π½Π΅Π³ΠΎΠ² ΡƒΡ‡Π°ΡΡ‚ΡŠΠΊ ΠΈ ΠΊΠ°ΠΊΠ²ΠΈ компромиси Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ ΠΏΡ€ΠΈ Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅. Ако стС ΠΎΠΏΠΈΡ‚Π΅Π½ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» β€” ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° пропуснСтС тСкста Π½Π° статията ΠΈ просто Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ скрипта Π·Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² Π²Π°ΡˆΠΈΡ‚Π΅ срСди. Π˜Π·Ρ…ΠΎΠ΄ΡŠΡ‚ ΠΎΡ‚ скрипта Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΠ΅ΠΌΠ° инсталация Π½Π° WordPress с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Lets Encrypt, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° Π½Π° NGINX Unit ΠΈ подходяща Π·Π° индустриални прилоТСния.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π°Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π·Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° WordPress с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° NGINX Unit Π΅ описана Π² ΠΏΠΎ-стара статия, сСга ΡΡŠΡ‰ΠΎ Ρ‰Π΅ настроим Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ бяха ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈ Ρ‚Π°ΠΌ (ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²Π°):

  • WordPress CLI
  • Let’s Encrypt ΠΈ TLS сСртификатиSSL
  • Автоматично ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° сСртификатитС
  • NGINX ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅
  • NGINX компрСсия
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° HTTPS ΠΈ HTTP/2
  • Автоматизация Π½Π° процСса

Π’ статията Ρ‰Π΅ бъдС описано инсталиранСто Π½Π° Π΅Π΄ΠΈΠ½ ΡΡŠΡ€Π²ΡŠΡ€, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° статичСн ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚, ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° PHP ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° мноТСство Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ хостовС ΠΈ услуги β€” ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½Π° Ρ‚Π΅ΠΌΠ° Π·Π° Π±ΡŠΠ΄Π΅Ρ‰Π΅. Π˜ΡΠΊΠ°Ρ‚Π΅ Π»ΠΈ Π΄Π° напишСм Π·Π° Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ няма Π² Ρ‚Π΅Π·ΠΈ статии β€” ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅.

Изисквания

  • Π‘ΡŠΡ€Π²ΡŠΡ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (LXC ΠΈΠ»ΠΈ LXD), Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΈΠ»ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ физичСски ΡΡŠΡ€Π²ΡŠΡ€, с Π½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ 512MB ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ инсталиран Ubuntu 18.04 ΠΈΠ»ΠΈ ΠΏΠΎ-Π½ΠΎΠ².
  • Π”ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅ 80 ΠΈ 443
  • Π”ΠΎΠΌΠ΅Π½ ΠΈΠΌΠ΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с публичния IP адрСс Π½Π° Ρ‚ΠΎΠ·ΠΈ ΡΡŠΡ€Π²ΡŠΡ€
  • Π”ΠΎΡΡ‚ΡŠΠΏ с root ΠΏΡ€Π°Π²Π° (sudo).

ΠžΠ±Π·ΠΎΡ€ Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π°

АрхитСктурата Π΅ ΡΡŠΡ‰Π°Ρ‚Π°, ΠΊΠ°ΠΊΡ‚ΠΎ бСшС описана ΠΏΠΎ-Ρ€Π°Π½ΠΎ, тристСпСнно web ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΎ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ PHP скриптовС, изпълнявани Π½Π° PHP ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‡, ΠΈ статични Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½ΠΈ ΠΎΡ‚ ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€Π°.

АвтоматизиранС Π½Π° инсталацията Π½Π° WordPress с NGINX Unit ΠΈ Ubuntu

ΠžΠ±Ρ‰ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ

  • Много ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π² скрипта са ΠΎΠ±Π²ΠΈΡ‚ΠΈ Π² условия (if) Π·Π° идСмпотСнтност: скрипта ΠΌΠΎΠΆΠ΅ Π΄Π° сС изпълнява няколко ΠΏΡŠΡ‚ΠΈ Π±Π΅Π· риск ΠΎΡ‚ промяна Π½Π° настройкитС, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ са Π³ΠΎΡ‚ΠΎΠ²ΠΈ.
  • Π‘ΠΊΡ€ΠΈΠΏΡ‚Π° сС ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° инсталира софтуСр ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° систСмата с Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° (apt upgrade Π·Π° Ubuntu).
  • ΠšΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚ Π΄Π° опрСдСлят, Ρ‡Π΅ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π·Π° Π΄Π° промСнят ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ своитС настройки.
  • Π—Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ броя Π½Π° стартиранитС процСси/нишки Π² настройкитС, скрипта ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° ΠΏΠΎΠ·Π½Π°Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини ΠΈ 'ΠΆΠ΅Π»Π΅Π·Π½ΠΈ' ΡΡŠΡ€Π²ΡŠΡ€ΠΈ.
  • ΠŸΡ€ΠΈ описванС Π½Π° настройкитС Π²ΠΈΠ½Π°Π³ΠΈ мислим ΠΏΡŠΡ€Π²ΠΎ Π·Π° автоматизацията, която, надявамС сС, Ρ‰Π΅ станС основа Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° собствСна инфраструктура ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄.
  • Всички ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΎΡ‚ потрСбитСля root, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ промСнят основнитС систСмни настройки, Π½ΠΎ самият WordPress Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΎΡ‚ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π».

Настройка Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата

НастройтС слСднитС ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° стартиратС скрипта:

  • WORDPRESS_DB_PASSWORD β€” ΠΏΠ°Ρ€ΠΎΠ»Π° Π·Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π½Π° WordPress
  • WORDPRESS_ADMIN_USER β€” ΠΈΠΌΠ΅ Π½Π° администратор Π½Π° WordPress
  • WORDPRESS_ADMIN_PASSWORD β€” ΠΏΠ°Ρ€ΠΎΠ»Π° Π½Π° администратора Π½Π° WordPress
  • WORDPRESS_ADMIN_EMAIL β€” email Π½Π° администратора Π½Π° WordPress
  • WORDPRESS_URL β€” пълСн URL Π½Π° сайта Π½Π° WordPress, Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‰ с https://.
  • LETS_ENCRYPT_STAGING β€” ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ ΠΏΡ€Π°Π·Π½ΠΎ, Π½ΠΎ Π·Π°Π΄Π°Π²Π°ΠΉΠΊΠΈ стойност 1, Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ staging ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Π½Π° 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)" β€” hostname Π½Π° систСмата, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ ΠΎΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° WORDPRESS_URL. Използва сС Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ΠΈ TLS/SSL сСртификати ΠΎΡ‚ Let's Encrypt, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈ Π·Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° WordPress.
  • NGINX_CONF_DIR="\/etc\/nginx" β€” ΠΏΡŠΡ‚ΡΡ‚ към дирСкторията с настройкитС Π½Π° NGINX, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ основния Ρ„Π°ΠΉΠ» nginx.conf.
  • CERT_DIR="\/etc\/letsencrypt\/live\/${TLS_HOSTNAME}" β€” ΠΏΡŠΡ‚ΡΡ‚ към сСртификатитС Let's Encrypt Π·Π° сайта Π½Π° WordPress, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° TLS_HOSTNAME.

НазначаванС Π½Π° hostname Π½Π° WordPress ΡΡŠΡ€Π²ΡŠΡ€Π°

Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ Π·Π°Π΄Π°Π²Π° hostname Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ стойността Π΄Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° сайта. Π’ΠΎΠ²Π° Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ, Π½ΠΎ Π΅ ΠΏΠΎ-ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° изходяща ΠΏΠΎΡ‰Π° Ρ‡Ρ€Π΅Π· 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

ДобавянС Π½Π° hostname Π² \/etc\/hosts

Π”ΠΎΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅ WP‑Cron сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° стартиранС Π½Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ, изисква 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-release

ДобавянС Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° Π½Π° NGINX Unit ΠΈ NGINX

Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ инсталира NGINX Unit ΠΈ NGINX с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΈΡ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π½Π° NGINX, Π·Π° Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈ, Ρ‡Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ вСрсии с послСднитС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π° сигурност ΠΈ ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ.

Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ добавя Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° NGINX Unit, Π° слСд Ρ‚ΠΎΠ²Π° β€” Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° NGINX, добавяйки ΠΊΠ»ΡŽΡ‡Π° Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ с настройки apt, Π·Π°Π΄Π°Π²Π°Ρ‰ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° ΠΏΡ€Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.

Π Π΅Π°Π»Π½Π°Ρ‚Π° инсталация Π½Π° NGINX Unit ΠΈ 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 " ОбновяванС Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ"
apt-get -qq update

# Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° PHP с зависимости ΠΈ NGINX Unit
echo " Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° PHP, NGINX Unit, NGINX, Certbot ΠΈ 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

Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ създава Ρ„Π°ΠΉΠ» с настройки Π² дирСктория conf.d. Π’ΡƒΠΊ сС Π·Π°Π΄Π°Π²Π° максималният Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΊΠ°Ρ‡Π²Π°Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° PHP, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° Π½Π° PHP Π³Ρ€Π΅ΡˆΠΊΠΈ Π² STDERR, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚Π΅ Π΄Π° сС записват Π² Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° NGINX Unit, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° сС рСстартира NGINX Unit.

ΠΊΠΎΠ΄ Π½Π° скрипта

# 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 Ρ‡Ρ€Π΅Π· 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

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ ΡΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ инсталира ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° WP-CLI. Π‘ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° инсталиратС ΠΈ управляватС настройкитС Π½Π° WordPress Π±Π΅Π· нСобходимост ΠΎΡ‚ Ρ€ΡŠΡ‡Π½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, обновяванС Π½Π° Π±Π°Π·Π°Ρ‚Π° ΠΈΠ»ΠΈ Π²Π»ΠΈΠ·Π°Π½Π΅ Π² административния ΠΏΠ°Π½Π΅Π». Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° инсталиратС Ρ‚Π΅ΠΌΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΊΠΈ ΠΈ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° WordPress.

ΠΊΠΎΠ΄ Π½Π° скрипта

if [ ! -f /usr/local/bin/wp ]; then
  # Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° WordPress CLI
  echo " Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° инструмСнта 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

Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ ΠΈ настройка Π½Π° WordPress

Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ инсталира послСдната вСрсия Π½Π° WordPress Π² дирСктория /var/www/wordpress, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° промСня настройкитС:

  • Π‘ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ с Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‡Ρ€Π΅Π· Unix Π΄ΠΎΠΌΠ΅ΠΉΠ½ сокСт вмСсто TCP Π½Π° loopback, Π·Π° Π΄Π° сС Π½Π°ΠΌΠ°Π»ΠΈ TCP Ρ‚Ρ€Π°Ρ„ΠΈΠΊΡŠΡ‚.
  • WordPress добавя прСфикс https:// ΠΊ URL, Π°ΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚ с NGINX ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» HTTPS, ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ hostname (ΠΊΠ°ΠΊΡ‚ΠΎ Π³ΠΎ прСдоставя NGINX) Π² PHP. НиС ΠΏΡ€ΠΈΠ»Π°Π³Π°ΠΌΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚ ΠΊΠΎΠ΄ Π·Π° Π΄Π° Π³ΠΎ настроим.
  • WordPress изисква HTTPS Π·Π° Π²Ρ…ΠΎΠ΄
  • Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° URL ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ сС основава Π½Π° рСсурситС
  • Настройват сС ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма Π·Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π½Π° WordPress.

ΠΊΠΎΠ΄ Π½Π° скрипта

if [ ! -d /var/www/wordpress ]; then
  # БъздаванС Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π·Π° WordPress
  mkdir -p /var/www/wordpress
  chown -R www-data:www-data /var/www

  # Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° WordPress с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° WordPress CLI
  echo " Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° 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}""

  # Π’ΠΎΠ·ΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ сС ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ€Π° във Ρ„Π°ΠΉΠ»Π° wp-config.php, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС създава;
  # Ρ‚ΠΎΠΉ увСдомява WordPress, Ρ‡Π΅ смС Π·Π°Π΄ ΠΎΠ±Ρ€Π°Ρ‚Π΅Π½ прокси ΠΈ Ρ‚Π°ΠΊΠ°
  # позволява Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠΈ с HTTPS
  cat > /tmp/wp_forwarded_for.php << 'EOM'
/* Π’ΠΊΠ»ΡŽΡ‡ΠΈ HTTPS, Π°ΠΊΠΎ HTTP_X_FORWARDED_PROTO съвпада с '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

  # БъздаванС Π½Π° конфигурацията Π½Π° 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

  # Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° 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

  # НастройванС Π½Π° структура Π½Π° постоянни Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ Π½Π° Ρ€Π°Π·ΡƒΠΌΠ΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ Π΅ Π² интСрфСйса
  su -s /bin/sh -p -c "wp --path=/var/www/wordpress option update permalink_structure '/%year%/%monthnum%/%postname%/'" www-data

  # ΠŸΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° примСрния Ρ„Π°ΠΉΠ», Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ Π½Π΅Π½ΡƒΠΆΠ΅Π½ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π·Π° сигурността
  rm /var/www/wordpress/wp-config-sample.php

  # ΠžΡΠΈΠ³ΡƒΡ€ΡΠ²Π°Π½Π΅, Ρ‡Π΅ ΠΏΡ€Π°Π²Π°Ρ‚Π° Π½Π° WordPress са ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ
  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 Unit

Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ настройва NGINX Unit Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с PHP ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΡŠΡ‚ΠΈΡ‰Π° Π½Π° WordPress, ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°ΠΉΠΊΠΈ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° процСситС Π½Π° PHP ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΉΠΊΠΈ настройкитС Π·Π° производитСлност. Π’ΡƒΠΊ ΠΈΠΌΠ° Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:

  • ΠŸΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ°Ρ‚Π° Π½Π° пространствата Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° сС опрСдСля ΠΏΠΎ условиС, основано Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π΄Π°Π»ΠΈ ΡΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ настройки Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Π²Π»ΠΎΠΆΠ΅Π½ΠΎ стартиранС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ.
  • Ако ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° пространства Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π°, пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° сС Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° ΠΌΡ€Π΅ΠΆΠ°. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° WordPress Π΄Π° сС ΡΠ²ΡŠΡ€Π·Π²Π° Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ с ΠΊΡ€Π°ΠΉΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Π΄Π° бъдС Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.
  • ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΈΡΡ‚ Π±Ρ€ΠΎΠΉ процСси сС опрСдСля ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½: (Π”ΠΎΡΡ‚ΡŠΠΏΠ½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π·Π° стартирани MariaDB ΠΈ NGINX Uniy) / (Π»ΠΈΠΌΠΈΡ‚ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π² PHP + 5)
    Π’Π°Π·ΠΈ стойност сС Π·Π°Π΄Π°Π²Π° Π² настройкитС Π½Π° NGINX Unit.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Ρ‚Π°Π·ΠΈ стойност ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°, Ρ‡Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ Π΄Π²Π° стартирани 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 " Π˜Π·Ρ‡ΠΈΡΠ»Π΅Π½ максималСн Π±Ρ€ΠΎΠΉ PHP процСси: ${MAX_PHP_PROCESSES}. МоТС Π΄Π° искатС Π΄Π° настроитС Ρ‚Π°Π·ΠΈ стойност ΠΏΠΎΡ€Π°Π΄ΠΈ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ Π² конфигурацията си. НС Π΅ Π½Π΅ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ стойности ΠΌΠ΅ΠΆΠ΄Ρƒ 10-100 Π² производствСни ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ."

echo " ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° NGINX Unit Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° PHP ΠΈ 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'
# ΠšΡ€Π΅Π΄ΠΈΡ‚: https://github.com/h5bp/server-configs-nginx/
# ----------------------------------------------------------------------
# | ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ                                                       |
# ----------------------------------------------------------------------
# https://nginx.org/en/docs/http/ngx_http_gzip_module.html
# Π’ΠΊΠ»ΡŽΡ‡Π΅Ρ‚Π΅ gzip компрСсия.
# По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½Π°
gzip on;
# Ниво Π½Π° компрСсия (1-9).
# 5 Π΅ ΠΏΠ΅Ρ€Ρ„Π΅ΠΊΡ‚Π΅Π½ компромис ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° CPU, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‰ ΠΎΠΊΠΎΠ»ΠΎ 75%
# Π½Π°ΠΌΠ°Π»Π΅Π½ΠΈΠ΅ Π·Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ASCII Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ (ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ Π½Π° Π½ΠΈΠ²ΠΎ 9).
# По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: 1
gzip_comp_level 6;
# НС компрСсирайтС Π½ΠΈΡ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΈ ΠΌΠ°Π»ΠΊΠΎ вСроятно Π΄Π° сС свиС ΠΌΠ½ΠΎΠ³ΠΎ,
# Π°ΠΊΠΎ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ 20 Π±Π°ΠΉΡ‚Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ лошо, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ
# Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ слСд gzip).
# По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: 20
gzip_min_length 256;
# ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΠΉΡ‚Π΅ Π΄Π°Π½Π½ΠΈ Π΄ΠΎΡ€ΠΈ Π·Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚ с нас Ρ‡Ρ€Π΅Π· прокси,
# ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΈ ΠΏΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ "Via" (изисква сС Π·Π° CloudFront).
# По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½Π°
gzip_proxied any;
# ΠšΠ°ΠΆΠ΅Ρ‚Π΅ Π½Π° прокситата Π΄Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Ρ‚ ΠΊΠ°ΠΊΡ‚ΠΎ gzip вСрсията, Ρ‚Π°ΠΊΠ° ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π½Π°Ρ‚Π° вСрсия Π½Π° рСсурса
# всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Accept-Encoding Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²Π°Ρ€ΠΈΡ€Π°;
# Избягва ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΡ€ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ΠΊΠΎΠΏΠΈΡ€Π°Ρ‰Π° gzip ΠΊΠ»ΠΈΠ΅Π½Ρ‚ (ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ рядко
# днСс) Π±ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π»Π° Π½Π΅Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎ, Π°ΠΊΠΎ тСхният прокси ΠΈΠΌ Π΄Π°Π΄Π΅ gzip вСрсията.
# По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½Π°
gzip_vary on;
# ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°ΠΉΡ‚Π΅ всички ΠΈΠ·Ρ…ΠΎΠ΄ΠΈ, обявСни с Π΅Π΄ΠΈΠ½ ΠΎΡ‚ слСднитС MIME-Ρ‚ΠΈΠΏΠΎΠ²Π΅.
# `text/html` Π²ΠΈΠ½Π°Π³ΠΈ сС компрСсира ΠΎΡ‚ gzip ΠΌΠΎΠ΄ΡƒΠ»Π°.
# По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅: 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 Π² дирСкторията conf.d. Π’ΡƒΠΊ сС настройва:

  • АктивиранС Π½Π° TLS сСртификати, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ ΠΎΡ‚ Let’s Encrypt Ρ‡Ρ€Π΅Π· Certbot (настройката ΠΌΡƒ Ρ‰Π΅ бъдС Π² слСдващия Ρ€Π°Π·Π΄Π΅Π»)
  • Настройка Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π·Π° сигурност Π½Π° TLS, основана Π½Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠΈΡ‚Π΅ ΠΎΡ‚ Let’s Encrypt
  • Π’ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° пропусканитС заявки Π·Π° 1 час ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅
  • Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Турнализацията Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° ΠΈ Турнализацията Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ„Π°ΠΉΠ»ΡŠΡ‚ Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½, Π·Π° Π΄Π²Π° ΠΎΠ±Ρ‰ΠΈ поисквани Ρ„Π°ΠΉΠ»Π°: favicon.ico ΠΈ robots.txt
  • Π—Π°Π±Ρ€Π°Π½Π° Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ скрити Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ някои Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ .php, Π·Π° Π΄Π° ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ»Π½ΠΎ стартиранС
  • Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π·Π° статични рСсурси ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²Π΅
  • Π—Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Access-Control-Allow-Origin Π·Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²Π΅
  • ДобавянС Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π·Π° 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, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΎΡ‚ Certbot Π·Π° 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
    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 стаплинг
    ssl_stapling on;
    ssl_stapling_verify on;
    # ΠŸΡ€ΠΎΠΊΡΠΈΡ‚ΠΎ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅
    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;
    }

    # ЗабраняванС Π½Π° всички ΠΎΠΏΠΈΡ‚ΠΈ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ скрити Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΠ°Ρ‚ΠΎ .htaccess, .htpasswd,
    # .DS_Store (Mac)
    # Π—Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° записитС Π½Π° заявкитС Π·Π° ΠΏΠΎ-късно Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ (ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈ срСдства
    # ΠΊΠ°Ρ‚ΠΎ fail2ban)
    location ~ /\. {
        deny all;
    }
    # ЗабраняванС Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .php Π² дирСкторията uploads;
    # Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ Π² инсталации ΠΏΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈ ΠΈ Π² ΠΌΡ€Π΅ΠΆΠΈ с ΠΌΠ½ΠΎΠ³ΠΎ сайтовС.
    # Π—Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° записитС Π½Π° заявкитС Π·Π° ΠΏΠΎ-късно Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ (ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π½ΠΈ срСдства
    # ΠΊΠ°Ρ‚ΠΎ fail2ban).
    location ~* /(?:uploads|files)/.*.php$ {
        deny all;
    }
    # WordPress: Π·Π°Π±Ρ€Π°Π½Π° Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с PHP Π² wp-content, wp-includes
    location ~* ^/(?:wp-content|wp-includes)/.*.php$ {
        deny all;
    }
    # Π—Π°Π±Ρ€Π°Π½Π° Π·Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ wp-config.php
    location ~* wp-config.php {
        deny all;
    }
    # НС записвайтС Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ статични Π°ΠΊΡ‚ΠΈΠ²ΠΈ, ΠΌΠ΅Π΄ΠΈΠΈ
    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 ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ обновяванС Π½Π° Ρ‚Π΅Π·ΠΈ сСртификати

Certbot Π΅ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π΅Π½ инструмСнт ΠΎΡ‚ Electronic Frontier Foundation (EFF), с ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ обновяватС TLS сСртификати ΠΎΡ‚ Let's Encrypt. Π‘ΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° слСднитС дСйствия, ΠΊΠΎΠΈΡ‚ΠΎ водят Π΄ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Certbot Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° сСртификати ΠΎΡ‚ Let's Encrypt Π² NGINX:

  • Π‘ΠΏΠΈΡ€Π° NGINX
  • Π˜Π·Ρ‚Π΅Π³Π»Ρ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ TLS ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ
  • Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π° Certbot, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ сСртификати Π·Π° сайта
  • РСстартира NGINX, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сСртификатитС
  • Настройва Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π΅Π½ стартиращ скрипт Π½Π° Certbot Π² 3:24 ΠΏΡ€Π΅Π· Π½ΠΎΡ‰Ρ‚Π° Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° сСртификатитС, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π·Π° изтСглянС Π½Π° Π½ΠΎΠ²ΠΈ сСртификати ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° NGINX, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

ΠΊΠΎΠ΄ Π½Π° скрипта

echo " Π‘ΠΏΠΈΡ€Π°ΠΌ NGINX, Π·Π° Π΄Π° настроя 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 " Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ 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 "ΠΠ΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ изтСглянС Π½Π° послСдния options-ssl-nginx.conf"
fi

if [ ! -f ${NGINX_CONF_DIR}/ssl-dhparams.pem ]; then
  echo " Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ 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 "ΠΠ΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ изтСглянС Π½Π° послСдния ssl-dhparams.pem"
fi

# Ако tls_certs_init.sh Π½Π΅ Π΅ стартиран ΠΏΡ€Π΅Π΄ΠΈ, ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ самоподписанитС сСртификати
if [ ! -d "/etc/letsencrypt/accounts" ]; then
  echo " ΠŸΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° самоподписанитС сСртификати"
  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 " Π“Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° сСртификати с Let's Encrypt"
  certbot certonly --standalone 
         -m "${WORDPRESS_ADMIN_EMAIL}" 
         ${CERTBOT_STAGING_FLAG} 
         --agree-tos --force-renewal --non-interactive 
         -d "${TLS_HOSTNAME}"
fi

echo " Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° NGINX, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½ΠΎΠ²Π°Ρ‚Π° конфигурация"
service nginx start

# ЗаписванС Π½Π° crontab Π·Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° сСртификатитС Π½Π° Let's Encrypt
if [ "$(crontab -l | grep -m1 'certbot renew')" == "" ]; then
  echo " ДобавянС Π½Π° certbot Π² crontab Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° Let's Encrypt"
  (crontab -l 2>/dev/null; echo "24 3 * * * certbot renew --nginx --post-hook 'service nginx reload'") | crontab -
fi

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° конфигурация Π½Π° вашия сайт

По-Π³ΠΎΡ€Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ ΠΊΠ°ΠΊ Π½Π°ΡˆΠΈΡΡ‚ скрипт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° NGINX ΠΈ NGINX Unit Π·Π° обслуТванС Π½Π° сайт, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π³ΠΎΡ‚ΠΎΠ² Π·Π° производствСни условия с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ TLS. Π’ зависимост ΠΎΡ‚ Π²Π°ΡˆΠΈΡ‚Π΅ Π½ΡƒΠΆΠ΄ΠΈ, Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Brotli, ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ компрСсиранС Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΏΠΎ HTTPS
  • ModSecurity с с ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° WordPress, Π·Π° Π΄Π° ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΈ Π°Ρ‚Π°ΠΊΠΈ Π½Π° вашия сайт
  • Π Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π·Π° WordPress, подходящо Π·Π° вас
  • Π—Π°Ρ‰ΠΈΡ‚Π° Ρ‡Ρ€Π΅Π· AppArmor (Π² Ubuntu)
  • Postfix ΠΈΠ»ΠΈ msmtp, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ WordPress Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΈΠΌΠ΅ΠΉΠ»ΠΈ
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° сайта Π²ΠΈ, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠΎΠ»ΠΊΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π΄ΡŠΡ€ΠΆΠΈ

Π—Π° ΠΎΡ‰Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π° производитСлност Π½Π° сайта, ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌΠ΅ Π΄Π° сС ΡŠΠΏΠ³Ρ€Π΅ΠΉΠ΄Π½Π΅Ρ‚Π΅ Π΄ΠΎ NGINX Plus, Π½Π°ΡˆΠΈΡΡ‚ Ρ‚ΡŠΡ€Π³ΠΎΠ²ΡΠΊΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π½Π° ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎ Π½ΠΈΠ²ΠΎ, основан Π½Π° NGINX с ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ ΠΊΠΎΠ΄. ΠŸΠΎΠ΄ΠΏΠΈΡΡ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΌΡƒ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ зарСТдащия ΠΌΠΎΠ΄ΡƒΠ» Brotli, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ (с Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° такса) NGINX ModSecurity WAF. НиС ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌΠ΅ ΡΡŠΡ‰ΠΎ NGINX App Protect, ΠΌΠΎΠ΄ΡƒΠ» WAF Π·Π° NGINX Plus, основан Π½Π° Π²ΠΎΠ΄Π΅Ρ‰Π° Π² индустрията тСхнология Π·Π° сигурност ΠΎΡ‚ F5.

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°. Π—Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° сайт с висока натоварСност, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ с СкспСрти Southbridge. ΠžΡΠΈΠ³ΡƒΡ€ΡΠ²Π°ΠΌΠ΅ Π±ΡŠΡ€Π·Π° ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° сайта ΠΈΠ»ΠΈ услугата Π²ΠΈ ΠΏΠΎΠ΄ всякакво Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster