
ΠΠΌΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° 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 ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. ΠΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅ ΠΈ ΡΡΠ»ΡΠ³ΠΈ β ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½Π° ΡΠ΅ΠΌΠ° Π·Π° Π±ΡΠ΄Π΅ΡΠ΅. ΠΡΠΊΠ°ΡΠ΅ Π»ΠΈ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π·Π° Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π½ΡΠΌΠ° Π² ΡΠ΅Π·ΠΈ ΡΡΠ°ΡΠΈΠΈ β ΠΏΠΈΡΠ΅ΡΠ΅ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅.
ΠΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ
- Π‘ΡΡΠ²ΡΡ-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ( ΠΈΠ»ΠΈ ), Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΈΠ»ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ²ΡΡ, Ρ Π½Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ 512MB ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Ubuntu 18.04 ΠΈΠ»ΠΈ ΠΏΠΎ-Π½ΠΎΠ².
- ΠΠΎΡΡΡΠΏΠ½ΠΈ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΏΠΎΡΡΠΎΠ²Π΅ 80 ΠΈ 443
- ΠΠΎΠΌΠ΅Π½ ΠΈΠΌΠ΅, ΡΠ²ΡΡΠ·Π°Π½ΠΎ Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈΡ IP Π°Π΄ΡΠ΅Ρ Π½Π° ΡΠΎΠ·ΠΈ ΡΡΡΠ²ΡΡ
- ΠΠΎΡΡΡΠΏ Ρ root ΠΏΡΠ°Π²Π° (sudo).
ΠΠ±Π·ΠΎΡ Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ°
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π΅ ΡΡΡΠ°ΡΠ°, ΠΊΠ°ΠΊΡΠΎ Π±Π΅ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π° , ΡΡΠΈΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ web ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ PHP ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈ Π½Π° PHP ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ, ΠΈ ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Π½ΠΈ ΠΎΡ ΡΠ΅Π± ΡΡΡΠ²ΡΡΠ°.

ΠΠ±ΡΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈ
- ΠΠ½ΠΎΠ³ΠΎ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π² ΡΠΊΡΠΈΠΏΡΠ° ΡΠ° ΠΎΠ±Π²ΠΈΡΠΈ Π² ΡΡΠ»ΠΎΠ²ΠΈΡ (if) Π·Π° ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡ: ΡΠΊΡΠΈΠΏΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΡΠΈ Π±Π΅Π· ΡΠΈΡΠΊ ΠΎΡ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ ΡΠ° Π³ΠΎΡΠΎΠ²ΠΈ.
- Π‘ΠΊΡΠΈΠΏΡΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΡΠΎΡΡΡΠ΅Ρ ΠΎΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΈΠ»Π°Π³Π°ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Ρ Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° (
apt upgradeΠ·Π° Ubuntu). - ΠΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ, ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π·Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ ΡΠ²ΠΎΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ.
- ΠΠ° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π±ΡΠΎΡ Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ/Π½ΠΈΡΠΊΠΈ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅, ΡΠΊΡΠΈΠΏΡΠ° ΠΎΠΏΠΈΡΠ²Π° Π΄Π° ΠΏΠΎΠ·Π½Π°Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈ 'ΠΆΠ΅Π»Π΅Π·Π½ΠΈ' ΡΡΡΠ²ΡΡΠΈ.
- ΠΡΠΈ ΠΎΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΈΡΠ»ΠΈΠΌ ΠΏΡΡΠ²ΠΎ Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ, Π½Π°Π΄ΡΠ²Π°ΠΌΠ΅ ΡΠ΅, ΡΠ΅ ΡΡΠ°Π½Π΅ ΠΎΡΠ½ΠΎΠ²Π° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄.
- ΠΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ root, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, Π½ΠΎ ΡΠ°ΠΌΠΈΡΡ WordPress ΡΠ°Π±ΠΎΡΠΈ ΠΎΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π».
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°
ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ°:
WORDPRESS_DB_PASSWORDβ ΠΏΠ°ΡΠΎΠ»Π° Π·Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π½Π° WordPressWORDPRESS_ADMIN_USERβ ΠΈΠΌΠ΅ Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π° WordPressWORDPRESS_ADMIN_PASSWORDβ ΠΏΠ°ΡΠΎΠ»Π° Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Π½Π° WordPressWORDPRESS_ADMIN_EMAILβ email Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Π½Π° WordPressWORDPRESS_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
ΠΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ, ΠΈΠ·ΠΈΡΠΊΠ²Π° 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
ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ ΡΠΊΡΠΈΠΏΡΡΡ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° . Π‘ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° 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, Π·Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΠ΅ Π½Π΅ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ ΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ»Π½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅
- ΠΠ΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΡΡΠΈΡΡΠΎΠ²Π΅
- ΠΠ°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π·Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΡΡΠΈΡΡΠΎΠ²Π΅
- ΠΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π·Π° 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 ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ
Π΅ Π±Π΅Π·ΠΏΠ»Π°ΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΎΡ 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. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π²Π°ΡΠΈΡΠ΅ Π½ΡΠΆΠ΄ΠΈ, Π² Π±ΡΠ΄Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅:
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° , ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π² ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΏΠΎ HTTPS
- Ρ , Π·Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΈ Π°ΡΠ°ΠΊΠΈ Π½Π° Π²Π°ΡΠΈΡ ΡΠ°ΠΉΡ
- Π·Π° WordPress, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΎ Π·Π° Π²Π°Ρ
- ΡΡΠ΅Π· (Π² Ubuntu)
- Postfix ΠΈΠ»ΠΈ msmtp, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ WordPress Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΈΠΌΠ΅ΠΉΠ»ΠΈ
- ΠΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΡΠ°ΠΉΡΠ° Π²ΠΈ, Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ°ΡΠΈΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π΄ΡΡΠΆΠΈ
ΠΠ° ΠΎΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° ΡΠ°ΠΉΡΠ°, ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌΠ΅ Π΄Π° ΡΠ΅ ΡΠΏΠ³ΡΠ΅ΠΉΠ΄Π½Π΅ΡΠ΅ Π΄ΠΎ , Π½Π°ΡΠΈΡΡ ΡΡΡΠ³ΠΎΠ²ΡΠΊΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡ Π½Π° ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎ Π½ΠΈΠ²ΠΎ, ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° NGINX Ρ ΠΎΡΠΊΡΠΈΡ ΠΊΠΎΠ΄. ΠΠΎΠ΄ΠΏΠΈΡΡΠΈΡΠΈΡΠ΅ ΠΌΡ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ» Brotli, ΠΊΠ°ΠΊΡΠΎ ΠΈ (Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΡΠ°ΠΊΡΠ°) . ΠΠΈΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌΠ΅ ΡΡΡΠΎ , ΠΌΠΎΠ΄ΡΠ» WAF Π·Π° NGINX Plus, ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° Π²ΠΎΠ΄Π΅ΡΠ° Π² ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΠΎΡ F5.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°. ΠΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ°ΠΉΡ Ρ Π²ΠΈΡΠΎΠΊΠ° Π½Π°ΡΠΎΠ²Π°ΡΠ΅Π½ΠΎΡΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ Ρ Π΅ΠΊΡΠΏΠ΅ΡΡΠΈ . ΠΡΠΈΠ³ΡΡΡΠ²Π°ΠΌΠ΅ Π±ΡΡΠ·Π° ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΡΠ°ΠΉΡΠ° ΠΈΠ»ΠΈ ΡΡΠ»ΡΠ³Π°ΡΠ° Π²ΠΈ ΠΏΠΎΠ΄ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
