ΠΠ²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° WordPress со Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ‚Π° NGINX ΠΈ Ubuntu

ΠΠ²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° WordPress со Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ‚Π° NGINX ΠΈ Ubuntu

Има ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π» Π·Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° WordPress; ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Google Π·Π° β€žWordPress installβ€œ ќС Π²Ρ€Π°Ρ‚ΠΈ ΠΎΠΊΠΎΠ»Ρƒ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΌΠΈΠ»ΠΈΠΎΠ½ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ. Π‘Π΅ΠΏΠ°ΠΊ, Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΠ°Π»ΠΊΡƒ корисни Π²ΠΎΠ΄ΠΈΡ‡ΠΈ Ρ‚Π°ΠΌΡƒ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ Π΄Π° Π³ΠΎ инсталиратС ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ WordPress ΠΈ основниот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ систСм, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Ρ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½ΠΈ Π²ΠΎ ΠΏΠΎΠ΄ΠΎΠ»Π³ врСмСнски ΠΏΠ΅Ρ€ΠΈΠΎΠ΄. МоТСби Ρ‚ΠΎΡ‡Π½ΠΈΡ‚Π΅ поставки Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΌΠ΅Ρ€Π° зависат ΠΎΠ΄ Π²Π°ΡˆΠΈΡ‚Π΅ спСцифични ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈ, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π·Π°Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π΄Π΅Ρ‚Π°Π»Π½ΠΎΡ‚ΠΎ ΠΎΠ±Ρ˜Π°ΡΠ½ΡƒΠ²Π°ΡšΠ΅ Π³ΠΎ ΠΎΡ‚Π΅ΠΆΠ½ΡƒΠ²Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π°.

Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°, ќС сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ собСрСмС Π½Π°Ρ˜Π΄ΠΎΠ±Ρ€ΠΎΡ‚ΠΎ ΠΎΠ΄ Π΄Π²Π°Ρ‚Π° свСта со ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° баш скрипта Π·Π° автоматско ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ WordPress Π½Π° Ubuntu, ΠΈ ќС ΠΏΠΎΠΌΠΈΠ½Π΅ΠΌΠ΅ Π½ΠΈΠ· Π½Π΅Π³ΠΎ, ΠΎΠ±Ρ˜Π°ΡΠ½ΡƒΠ²Π°Ρ˜ΡœΠΈ ΡˆΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ сСкоС ΠΏΠ°Ρ€Ρ‡Π΅ ΠΈ компромиситС ΡˆΡ‚ΠΎ Π³ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ²ΠΌΠ΅ ΠΏΡ€ΠΈ Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Ρ‚ΠΎΠ°. Ако стС искусСн корисник, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ прСскокнСтС тСкстот Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° ΠΈ само Π·Π΅ΠΌΠ΅Ρ‚Π΅ Π³ΠΎ сцСнариото Π·Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π²ΠΎ Π²Π°ΡˆΠΈΡ‚Π΅ срСдини. Π˜Π·Π»Π΅Π·ΠΎΡ‚ Π½Π° скриптата Π΅ ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° Π½Π° WordPress со ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° Lets Encrypt, која Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ‚Π° NGINX ΠΈ Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° индустриска ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°.

Π Π°Π·Π²ΠΈΠ΅Π½Π°Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π·Π° Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° WordPress со помош Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ‚Π° NGINX Π΅ опишана Π²ΠΎ постара ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°, сСга Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ ќС Π³ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π½Π΅ Π±Π΅Π° ΠΎΠΏΡ„Π°Ρ‚Π΅Π½ΠΈ Ρ‚Π°ΠΌΡƒ (ΠΊΠ°ΠΊΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³Ρƒ Π΄Ρ€ΡƒΠ³ΠΈ упатства):

  • WordPress CLI
  • АјдС Π΄Π° Π³ΠΈ ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΈ TLSSSL сСртификатитС
  • Автоматско ΠΎΠ±Π½ΠΎΠ²ΡƒΠ²Π°ΡšΠ΅ Π½Π° сСртификатот
  • NGINX ΠšΠ΅ΡˆΠΈΡ€Π°ΡšΠ΅
  • NGINX ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜Π°
  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° HTTPS ΠΈ HTTP/2
  • ΠΠ²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° процСситС

Π‘Ρ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° ќС опишС ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° Π½Π° Π΅Π΄Π΅Π½ сСрвСр, кој истоврСмСно ќС Π±ΠΈΠ΄Π΅ домаќин Π½Π° сСрвСр Π·Π° статичка ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, сСрвСр Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° PHP ΠΈ Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ со ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° повСќС Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½ΠΈ хостови ΠΈ услуги Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π°Π»Π½Π° Ρ‚Π΅ΠΌΠ° Π·Π° ΠΈΠ΄Π½ΠΈΠ½Π°Ρ‚Π°. Ако сакатС Π΄Π° ΠΏΠΈΡˆΡƒΠ²Π°ΠΌΠ΅ Π·Π° Π½Π΅ΡˆΡ‚ΠΎ ΡˆΡ‚ΠΎ Π³ΠΎ Π½Π΅ΠΌΠ° Π²ΠΎ ΠΎΠ²ΠΈΠ΅ написи, ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π²ΠΎ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅.

Π‘Π°Ρ€Π°ΡšΠ°

  • ΠšΠΎΠ½Ρ‚Π΅Ρ˜Π½Π΅Ρ€ Π·Π° сСрвСр (LXC ΠΈΠ»ΠΈ LXD), Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина ΠΈΠ»ΠΈ ΠΎΠ±ΠΈΡ‡Π΅Π½ хардвСрски сСрвСр, со Π½Π°Ρ˜ΠΌΠ°Π»ΠΊΡƒ 512 MB RAM ΠΈ инсталиран Ubuntu 18.04 ΠΈΠ»ΠΈ ΠΏΠΎΠ½ΠΎΠ²Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°.
  • ΠŸΡ€ΠΈΡΡ‚Π°Π½ΠΈΡˆΡ‚Π° 80 ΠΈ 443 достапни Π½Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚
  • Π˜ΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΌΠ΅Π½ΠΎΡ‚ ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΎ со Ρ˜Π°Π²Π½Π°Ρ‚Π° IP адрСса Π½Π° овој сСрвСр
  • ΠŸΡ€ΠΈΡΡ‚Π°ΠΏ со ΠΏΡ€Π°Π²Π° Π½Π° root (sudo).

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π°

АрхитСктурата Π΅ иста ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ опишано ΠΏΠΎΡ€Π°Π½ΠΎ, Π²Π΅Π±-Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° со Ρ‚Ρ€ΠΈ Π½ΠΈΠ²ΠΎΠ°. Π‘Π΅ состои ΠΎΠ΄ PHP скрипти ΠΈΠ·Π²Ρ€ΡˆΠ΅Π½ΠΈ Π½Π° PHP ΠΌΠΎΡ‚ΠΎΡ€ΠΎΡ‚ ΠΈ статични Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ ΠΎΠ΄ Π²Π΅Π±-сСрвСрот.

ΠΠ²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° WordPress со Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ‚Π° NGINX ΠΈ 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 ја користи ΠΎΠ²Π°Π° врСдност Π·Π° Π΄Π° ΠΏΠΎΡ‚Π²Ρ€Π΄ΠΈ Π΄Π΅ΠΊΠ° Π΅ ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Π½Π° Ρ‚ΠΎΡ‡Π½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° CLI Π½Π° WordPress.
  • 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}" β€” ΠΏΠ°Ρ‚Π΅ΠΊΠ° Π΄ΠΎ Let's Encrypt сСртификати Π·Π° страницата Π½Π° WordPress, Π΄ΠΎΠ±ΠΈΠ΅Π½Π° ΠΎΠ΄ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° TLS_HOSTNAME.

Π”ΠΎΠ΄Π΅Π»ΡƒΠ²Π°ΡšΠ΅ ΠΈΠΌΠ΅ Π½Π° домаќин Π½Π° сСрвСрот WordPress

Π‘ΠΊΡ€ΠΈΠΏΡ‚Π°Ρ‚Π° Π³ΠΎ поставува ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΎΡ‚ Π½Π° сСрвСрот Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ врСдноста сС совпаѓа со ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΌΠ΅Π½ΠΎΡ‚ Π½Π° страницата. Ова Π½Π΅ Π΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ, Π½ΠΎ ΠΏΠΎΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π΅ Π΄Π° сС ΠΈΡΠΏΡ€Π°ΡœΠ° појдовна ΠΏΠΎΡˆΡ‚Π° ΠΏΡ€Π΅ΠΊΡƒ SMTP ΠΊΠΎΠ³Π° сС поставува Π΅Π΄Π΅Π½ сСрвСр, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΎ ΠΎΠ΄ скриптата.

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

# Change the hostname to be the same as the WordPress hostname
if [ ! "$(hostname)" == "${TLS_HOSTNAME}" ]; then
  echo " Changing hostname to ${TLS_HOSTNAME}"
  hostnamectl set-hostname "${TLS_HOSTNAME}"
fi

Π”ΠΎΠ΄Π°Π²Π°ΡšΠ΅ ΠΈΠΌΠ΅ Π½Π° домаќин Π²ΠΎ /etc/hosts

ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ° Π’ΠŸ-ΠšΡ€ΠΎΠ½ сС користи Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ, Π±Π°Ρ€Π° WordPress Π΄Π° ΠΌΠΎΠΆΠ΅ самиот Π΄Π° пристапи ΠΏΡ€Π΅ΠΊΡƒ HTTP. Π—Π° Π΄Π° Π±ΠΈΠ΄Π΅Ρ‚Π΅ сигурни Π΄Π΅ΠΊΠ° WP-Cron Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π²ΠΎ ситС срСдини, скриптата Π΄ΠΎΠ΄Π°Π²Π° линија Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° / Etc / Π‘ΠΈΠ»ΠΈΡ‚Π΅Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ 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 ΠΈ 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 (АјдС Π΄Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°ΠΌΠ΅) ΠΈ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ зависности

ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС сС Π΄ΠΎΠ΄Π°Π΄Π°Ρ‚ ситС ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π°, Π³ΠΈ Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΈ Π³ΠΈ инсталирамС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅. ΠŸΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ инсталирани ΠΎΠ΄ скриптата исто Ρ‚Π°ΠΊΠ° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ 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 ΠΈ 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 стандардно.conf Π²ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΡ‚ ΠΊΠΎΠ½Ρ„.Π΄.. Π’ΡƒΠΊΠ° Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½:

  • ΠΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΡšΠ΅ Π½Π° 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 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 сСртификати ΠΈ Π½ΠΈΠ²Π½ΠΎ автоматско ΠΎΠ±Π½ΠΎΠ²ΡƒΠ²Π°ΡšΠ΅

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

  • Π“ΠΎ Π·Π°ΠΏΠΈΡ€Π° NGINX
  • ΠŸΡ€Π΅Π·Π΅ΠΌΠ° ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡Π°Π½ΠΈΡ‚Π΅ поставки Π·Π° TLS
  • Π“ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Certbot Π·Π° Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ сСртификати Π·Π° страницата
  • Π“ΠΎ рСстартира NGINX Π·Π° Π΄Π° користи сСртификати
  • Π“ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° Certbot Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ сСкојднСвно Π²ΠΎ 3:24 часот Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π΄Π°Π»ΠΈ ΠΈΠΌΠ° ΠΎΠ±Π½ΠΎΠ²ΡƒΠ²Π°ΡšΠ΅ Π½Π° сСртификатитС ΠΈ, Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ, Π΄Π° ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅ Π½ΠΎΠ²ΠΈ сСртификати ΠΈ Π΄Π° Π³ΠΎ рСстартира NGINX.

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

echo " Stopping NGINX in order to set up Let's Encrypt"
service nginx stop

mkdir -p /var/www/certbot
chown www-data:www-data /var/www/certbot
chmod g+s /var/www/certbot

if [ ! -f ${NGINX_CONF_DIR}/options-ssl-nginx.conf ]; then
  echo " Downloading recommended TLS parameters"
  curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:36:07 GMT" 
    -o "${NGINX_CONF_DIR}/options-ssl-nginx.conf" 
    "https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf" 
    || echo "Couldn't download latest options-ssl-nginx.conf"
fi

if [ ! -f ${NGINX_CONF_DIR}/ssl-dhparams.pem ]; then
  echo " Downloading recommended TLS DH parameters"
  curl --retry 6 -Ls -z "Tue, 14 Apr 2020 16:49:18 GMT" 
    -o "${NGINX_CONF_DIR}/ssl-dhparams.pem" 
    "https://raw.githubusercontent.com/certbot/certbot/master/certbot/certbot/ssl-dhparams.pem" 
    || echo "Couldn't download latest ssl-dhparams.pem"
fi

# If tls_certs_init.sh hasn't been run before, remove the self-signed certs
if [ ! -d "/etc/letsencrypt/accounts" ]; then
  echo " Removing self-signed certificates"
  rm -rf "${CERT_DIR}"
fi

if [ "" = "${LETS_ENCRYPT_STAGING:-}" ] || [ "0" = "${LETS_ENCRYPT_STAGING}" ]; then
  CERTBOT_STAGING_FLAG=""
else
  CERTBOT_STAGING_FLAG="--staging"
fi

if [ ! -f "${CERT_DIR}/fullchain.pem" ]; then
  echo " Generating certificates with Let's Encrypt"
  certbot certonly --standalone 
         -m "${WORDPRESS_ADMIN_EMAIL}" 
         ${CERTBOT_STAGING_FLAG} 
         --agree-tos --force-renewal --non-interactive 
         -d "${TLS_HOSTNAME}"
fi

echo " Starting NGINX in order to use new configuration"
service nginx start

# Write crontab for periodic Let's Encrypt cert renewal
if [ "$(crontab -l | grep -m1 'certbot renew')" == "" ]; then
  echo " Adding certbot to crontab for automatic Let's Encrypt renewal"
  (crontab -l 2>/dev/null; echo "24 3 * * * certbot renew --nginx --post-hook 'service nginx reload'") | crontab -
fi

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ ΡΠ°Ρ˜Ρ‚

Π—Π±ΠΎΡ€ΡƒΠ²Π°Π²ΠΌΠ΅ ΠΏΠΎΠ³ΠΎΡ€Π΅ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Π½Π°ΡˆΠ°Ρ‚Π° скрипта Π³ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° NGINX ΠΈ NGINX Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ‚Π° Π·Π° Π΄Π° опслуТува Π²Π΅Π±-Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½Π° Π·Π° производство со ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ TLSSSL. ΠœΠΎΠΆΠ΅Ρ‚Π΅ исто Ρ‚Π°ΠΊΠ°, Π²ΠΎ зависност ΠΎΠ΄ Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈ, Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π²ΠΎ ΠΈΠ΄Π½ΠΈΠ½Π°:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Brotli, ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° ΠΊΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ˜Π° ΠΏΡ€ΠΈ Π»Π΅Ρ‚ΠΎΡ‚ ΠΏΡ€Π΅ΠΊΡƒ HTTPS
  • Mod Security с ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° WordPressΠ·Π° Π΄Π° спрСчитС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π½Π°ΠΏΠ°Π΄ΠΈ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° страница
  • Π Π΅Π·Π΅Ρ€Π²Π½Π° копија Π·Π° WordPress, ΠΏΠΎΠ³ΠΎΠ΄Π΅Π½ Π·Π° вас
  • Π—Π°ΡˆΡ‚ΠΈΡ‚Π° со помош Π½Π° AppArmor (Π½Π° Ubuntu)
  • Postfix ΠΈΠ»ΠΈ msmtp Π·Π° WordPress Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΡΠΏΡ€Π°ΡœΠ° ΠΏΠΎΡˆΡ‚Π°
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° страница Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠΎΠ»ΠΊΡƒ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ ΠΌΠΎΠΆΠ΅ Π΄Π° поднСсС

Π—Π° ΡƒΡˆΡ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ пСрформанси Π½Π° страницата, ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°ΠΌΠ΅ Π½Π°Π΄Π³Ρ€Π°Π΄Π±Π° Π½Π° NGINX Plus, Π½Π°ΡˆΠΈΠΎΡ‚ ΠΊΠΎΠΌΠ΅Ρ€Ρ†ΠΈΡ˜Π°Π»Π΅Π½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ Π·Π° ΠΏΡ€Π΅Ρ‚ΠΏΡ€ΠΈΡ˜Π°Ρ‚ΠΈΠ΅ заснован Π½Π° NGINX со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄. НСговитС ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΡ†ΠΈ ќС Π΄ΠΎΠ±ΠΈΡ˜Π°Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΠΈ Π²Ρ‡ΠΈΡ‚Π°Π½ Brotli ΠΌΠΎΠ΄ΡƒΠ», ΠΊΠ°ΠΊΠΎ ΠΈ (Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ надомСст) NGINX ModSecurity WAF. НиС исто Ρ‚Π°ΠΊΠ° Π½ΡƒΠ΄ΠΈΠΌΠ΅ Π—Π°ΡˆΡ‚ΠΈΡ‚Π° Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° NGINX, WAF ΠΌΠΎΠ΄ΡƒΠ» Π·Π° NGINX Plus Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Π²ΠΎΠ΄Π΅Ρ‡ΠΊΠ° бСзбСдносна Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π° Π²ΠΎ ΠΈΠ½Π΄ΡƒΡΡ‚Ρ€ΠΈΡ˜Π°Ρ‚Π° ΠΎΠ΄ F5.

NB Π—Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π½Π° Π²Π΅Π±-Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π° со Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅ со ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»ΠΈΡΡ‚ΠΈ Π‘Π°ΡƒΡ‚Π±Ρ€ΠΈΡŸ. НиС ќС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠ΅ Π±Ρ€Π·ΠΎ ΠΈ сигурно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Π²Π΅Π±-страница ΠΈΠ»ΠΈ услуга ΠΏΠΎΠ΄ ΠΊΠ°ΠΊΠ²ΠΎ Π±ΠΈΠ»ΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅.

Π˜Π·Π²ΠΎΡ€: www.habr.com