ΠΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π» Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π½Π° WordPress; ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Google Π·Π° βWordPress installβ ΡΠ΅ Π²ΡΠ°ΡΠΈ ΠΎΠΊΠΎΠ»Ρ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΌΠΈΠ»ΠΈΠΎΠ½ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ. Π‘Π΅ΠΏΠ°ΠΊ, Π²ΡΡΡΠ½ΠΎΡΡ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ°Π»ΠΊΡ ΠΊΠΎΡΠΈΡΠ½ΠΈ Π²ΠΎΠ΄ΠΈΡΠΈ ΡΠ°ΠΌΡ ΡΡΠΎ ΠΌΠΎΠΆΠ°Ρ Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ WordPress ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΡΠΈΡΡΠ΅ΠΌ, ΡΠ°ΠΊΠ° ΡΡΠΎ ΡΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½ΠΈ Π²ΠΎ ΠΏΠΎΠ΄ΠΎΠ»Π³ Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄. ΠΠΎΠΆΠ΅Π±ΠΈ ΡΠΎΡΠ½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΌΠ΅ΡΠ° Π·Π°Π²ΠΈΡΠ°Ρ ΠΎΠ΄ Π²Π°ΡΠΈΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈ, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π·Π°ΡΠΎΠ° ΡΡΠΎ Π΄Π΅ΡΠ°Π»Π½ΠΎΡΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ²Π°ΡΠ΅ Π³ΠΎ ΠΎΡΠ΅ΠΆΠ½ΡΠ²Π° ΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΡΠ°ΡΠ°.
ΠΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°, ΡΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° Π³ΠΎ ΡΠΎΠ±Π΅ΡΠ΅ΠΌΠ΅ Π½Π°ΡΠ΄ΠΎΠ±ΡΠΎΡΠΎ ΠΎΠ΄ Π΄Π²Π°ΡΠ° ΡΠ²Π΅ΡΠ° ΡΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Π±Π°Ρ ΡΠΊΡΠΈΠΏΡΠ° Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ WordPress Π½Π° Ubuntu, ΠΈ ΡΠ΅ ΠΏΠΎΠΌΠΈΠ½Π΅ΠΌΠ΅ Π½ΠΈΠ· Π½Π΅Π³ΠΎ, ΠΎΠ±ΡΠ°ΡΠ½ΡΠ²Π°ΡΡΠΈ ΡΡΠΎ ΠΏΡΠ°Π²ΠΈ ΡΠ΅ΠΊΠΎΠ΅ ΠΏΠ°ΡΡΠ΅ ΠΈ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΈΡΠ΅ ΡΡΠΎ Π³ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΈΠ²ΠΌΠ΅ ΠΏΡΠΈ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°ΡΠ΅ΡΠΎ ΡΠΎΠ°. ΠΠΊΠΎ ΡΡΠ΅ ΠΈΡΠΊΡΡΠ΅Π½ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠ΅ΡΠΊΠΎΠΊΠ½Π΅ΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΠΈ ΡΠ°ΠΌΠΎ
Π Π°Π·Π²ΠΈΠ΅Π½Π°ΡΠ° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° Π·Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° WordPress ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΡΠ° NGINX Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° Π²ΠΎ
- WordPress CLI
- ΠΡΠ΄Π΅ Π΄Π° Π³ΠΈ ΠΊΡΠΈΠΏΡΠΈΡΠ°ΠΌΠ΅ ΠΈ TLSSSL ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ΅
- ΠΠ²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ
- NGINX ΠΠ΅ΡΠΈΡΠ°ΡΠ΅
- NGINX ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°
- ΠΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° HTTPS ΠΈ HTTP/2
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅
Π‘ΡΠ°ΡΠΈΡΠ°ΡΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ΅ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° Π½Π° Π΅Π΄Π΅Π½ ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΠΎΡ ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Π·Π° ΡΡΠ°ΡΠΈΡΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠ΅ΡΠ²Π΅Ρ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° PHP ΠΈ Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ΡΠΎ ΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈ Ρ ΠΎΡΡΠΎΠ²ΠΈ ΠΈ ΡΡΠ»ΡΠ³ΠΈ Π΅ ΠΏΠΎΡΠ΅Π½ΡΠΈΡΠ°Π»Π½Π° ΡΠ΅ΠΌΠ° Π·Π° ΠΈΠ΄Π½ΠΈΠ½Π°ΡΠ°. ΠΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ Π·Π° Π½Π΅ΡΡΠΎ ΡΡΠΎ Π³ΠΎ Π½Π΅ΠΌΠ° Π²ΠΎ ΠΎΠ²ΠΈΠ΅ Π½Π°ΠΏΠΈΡΠΈ, ΠΏΠΈΡΠ΅ΡΠ΅ Π²ΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅.
ΠΠ°ΡΠ°ΡΠ°
- ΠΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ Π·Π° ΡΠ΅ΡΠ²Π΅Ρ (
LXC ΠΈΠ»ΠΈLXD ), Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΈΠ»ΠΈ ΠΎΠ±ΠΈΡΠ΅Π½ Ρ Π°ΡΠ΄Π²Π΅ΡΡΠΊΠΈ ΡΠ΅ΡΠ²Π΅Ρ, ΡΠΎ Π½Π°ΡΠΌΠ°Π»ΠΊΡ 512 MB RAM ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Ubuntu 18.04 ΠΈΠ»ΠΈ ΠΏΠΎΠ½ΠΎΠ²Π° Π²Π΅ΡΠ·ΠΈΡΠ°. - ΠΡΠΈΡΡΠ°Π½ΠΈΡΡΠ° 80 ΠΈ 443 Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π½Π° ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ
- ΠΠΌΠ΅ΡΠΎ Π½Π° Π΄ΠΎΠΌΠ΅Π½ΠΎΡ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΎ ΡΠΎ ΡΠ°Π²Π½Π°ΡΠ° IP Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΠΎΠ²ΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ
- ΠΡΠΈΡΡΠ°ΠΏ ΡΠΎ ΠΏΡΠ°Π²Π° Π½Π° root (sudo).
ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ°
ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π΅ ΠΈΡΡΠ° ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ
ΠΠΏΡΡΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈ
- ΠΠ½ΠΎΠ³Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π²ΠΎ ΡΠΊΡΠΈΠΏΡΠ° ΡΠ΅ Π·Π°Π²ΠΈΡΠΊΠ°Π½ΠΈ Π²ΠΎ ΡΡΠ»ΠΎΠ²ΠΈ Π·Π° Π½Π΅ΠΌΠΎΡ: ΡΠΊΡΠΈΠΏΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠ°ΡΠΈ Π±Π΅Π· ΡΠΈΠ·ΠΈΠΊ ΠΎΠ΄ ΠΏΡΠΎΠΌΠ΅Π½Π° Π½Π° ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅ ΠΊΠΎΠΈ ΡΠ΅ Π²Π΅ΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ.
- Π‘ΠΊΡΠΈΠΏΡΠ°ΡΠ° ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΡΠΎΡΡΠ²Π΅Ρ ΠΎΠ΄ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ Π°ΠΆΡΡΠΈΡΠ°ΡΠ° Π²ΠΎ Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° (
apt upgrade
Π·Π° Ubuntu). - Π’ΠΈΠΌΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°Π°Ρ Π΄Π° ΠΎΡΠΊΡΠΈΡΠ°Ρ Π΄Π΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Ρ Π²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ°Ρ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π°Ρ ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ.
- ΠΠ° Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π±ΡΠΎΡΠΎΡ Π½Π° Π½ΠΈΡΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΡΠ²Π°Π°Ρ Π²ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅, ΡΠΊΡΠΈΠΏΡΠ°ΡΠ° ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π° Π΄Π° Π³ΠΈ ΠΏΠΎΠ³ΠΎΠ΄ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ, Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈ Ρ Π°ΡΠ΄Π²Π΅ΡΡΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΈ.
- ΠΠΎΠ³Π° Π³ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈΡΠ΅, ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΏΡΠ²ΠΎ ΡΠ°Π·ΠΌΠΈΡΠ»ΡΠ²Π°ΠΌΠ΅ Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΠ°ΡΠ°, ΠΊΠΎΡΠ° ΡΠ΅ Π½Π°Π΄Π΅Π²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠ΅ ΡΡΠ°Π½Π΅ ΠΎΡΠ½ΠΎΠ²Π° Π·Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ Π½Π° ΡΠΎΠΏΡΡΠ²Π΅Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΠΊΠΎ ΠΊΠΎΠ΄.
- Π‘ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ ΠΎΠ΄ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΠΊΠΎΡΠ΅Π½, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π³ΠΈ ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ, Π½ΠΎ ΡΠ°ΠΌΠΈΠΎΡ WordPress ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΠΊΠΎ ΡΠ΅Π΄ΠΎΠ²Π΅Π½ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ.
ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ°
ΠΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° ΠΏΡΠ΅Π΄ Π΄Π° ΡΠ° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ°ΡΠ°:
WORDPRESS_DB_PASSWORD
β ΠΠΎΠ·ΠΈΠ½ΠΊΠ° Π·Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π½Π° WordPressWORDPRESS_ADMIN_USER
- ΠΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΎ ΠΈΠΌΠ΅ Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π° WordPressWORDPRESS_ADMIN_PASSWORD
- ΠΠΎΠ·ΠΈΠ½ΠΊΠ° Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π° WordPressWORDPRESS_ADMIN_EMAIL
β Π-ΠΏΠΎΡΡΠ° Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π° WordPressWORDPRESS_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
ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°
ΠΊΠΎΠ΄ Π·Π° ΡΠΊΡΠΈΠΏΡΠ°
# 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 Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΈΠΌΠ° ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ Π²ΠΎ Π·Π°Π΅Π΄Π½ΠΈΡΠ°ΡΠ° ΠΈ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅
Π‘ΠΊΡΠΈΠΏΡΠ°ΡΠ° ΡΠΎΠ·Π΄Π°Π²Π° Π½ΠΎΠ²Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π° Π°ΠΊΡΠ΅Π΄ΠΈΡΠΈΠ²ΠΈ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ 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
ΠΠ° ΠΎΠ²ΠΎΡ ΡΠ΅ΠΊΠΎΡ ΡΠΊΡΠΈΠΏΡΠ°ΡΠ° ΡΠ° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°
ΠΊΠΎΠ΄ Π·Π° ΡΠΊΡΠΈΠΏΡΠ°
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 ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ ΠΈ Π½ΠΈΠ²Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°ΡΠ΅
- ΠΠΎ Π·Π°ΠΏΠΈΡΠ° 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 Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΡΠΏΡΠ°ΡΠ° ΠΏΠΎΡΡΠ°
- ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π²Π°ΡΠ°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΡ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ΄Π½Π΅ΡΠ΅
ΠΠ° ΡΡΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°, ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°ΠΌΠ΅ Π½Π°Π΄Π³ΡΠ°Π΄Π±Π° Π½Π°
NB ΠΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π½Π° Π²Π΅Π±-Π»ΠΎΠΊΠ°ΡΠΈΡΠ° ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ΅ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠ°Π»ΠΈΡΡΠΈ
Π‘Π°ΡΡΠ±ΡΠΈΡ . ΠΠΈΠ΅ ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠ΅ Π±ΡΠ·ΠΎ ΠΈ ΡΠΈΠ³ΡΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° Π²Π°ΡΠ°ΡΠ° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ° ΠΈΠ»ΠΈ ΡΡΠ»ΡΠ³Π° ΠΏΠΎΠ΄ ΠΊΠ°ΠΊΠ²ΠΎ Π±ΠΈΠ»ΠΎ ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅.
ΠΠ·Π²ΠΎΡ: www.habr.com