Π Π₯ΠΠ 8 ΠΠ΅ΡΠ° Π½ΡΠ΄ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Π΅ Π½ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅, ΡΠΈΡΠ° Π»ΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΡΠ·ΠΌΠ΅ ΡΡΡΠ°Π½ΠΈΡΠ΅, ΠΌΠ΅ΡΡΡΠΈΠΌ, ΡΡΠ΅ΡΠ΅ Π½ΠΎΠ²ΠΈΡ ΡΡΠ²Π°ΡΠΈ ΡΠ΅ ΡΠ²Π΅ΠΊ Π±ΠΎΡΠ΅ Ρ ΠΏΡΠ°ΠΊΡΠΈ, ΠΏΠ° Ρ Π½Π°ΡΡΠ°Π²ΠΊΡ Π½ΡΠ΄ΠΈΠΌΠΎ ΡΠ°Π΄ΠΈΠΎΠ½ΠΈΡΡ ΠΎ ΡΡΠ²Π°ΡΠ½ΠΎΠΌ ΠΊΡΠ΅ΠΈΡΠ°ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Π·Π°ΡΠ½ΠΎΠ²Π°Π½Π΅ Π½Π° Π Π΅Π΄ Π₯Π°Ρ ΠΠ½ΡΠ΅ΡΠΏΡΠΈΡΠ΅ ΠΠΈΠ½ΡΠΊ 8 ΠΠ΅ΡΠ°.
Π£Π·ΠΌΠΈΠΌΠΎ Π·Π° ΠΎΡΠ½ΠΎΠ²Ρ ΠΠΈΡΡ
ΠΎΠ½, ΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ΅Π·ΠΈΠΊ ΠΌΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΠΌΠ°, ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΡ ΠΡΠ°Π½Π³ΠΎ ΠΈ ΠΠΎΡΡΠ³ΡΠ΅Π‘ΠΠ, ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅Π½Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΡ Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΈΡΠ΅ Π Π₯ΠΠ 8 ΠΠ΅ΡΠ° Π΄Π° ΡΠ°Π΄ΠΈ ΡΠ° ΡΠΈΠΌΠ°. ΠΠ°ΡΠΈΠΌ ΡΠ΅ΠΌΠΎ Π΄ΠΎΠ΄Π°ΡΠΈ ΡΠΎΡ ΠΏΠ°Ρ (Π½Π΅ΠΊΠ»Π°ΡΠΈΡΠΈΠΊΠΎΠ²Π°Π½ΠΈΡ
) ΡΠ°ΡΡΠΎΡΠ°ΠΊΠ°.
Π’Π΅ΡΡΠ½ΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠΈ, ΡΠ΅Ρ ΡΠ΅ Π·Π°Π½ΠΈΠΌΡΠΈΠ²ΠΎ ΠΈΡΡΡΠ°ΠΆΠΈΡΠΈ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡΠΈ Π°ΡΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΠ΅, ΡΠ°Π΄Π° ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠΌΠ° ΠΈ ΠΈΡΠΏΡΠΎΠ±Π°Π²Π°ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅ΡΠ° ΡΠ° Π²ΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ° Π±ΠΈΡΡΠ΅ Π·Π°ΠΏΠΎΡΠ΅Π»ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΠΊΡΠΎΠΌ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΠΎΡΠ΅ΡΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ΠΌ ΠΌΠ°Π»ΠΎΠ³, ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎΠ³ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ° ΡΡΡΠ½ΠΎ ΠΊΠ°ΠΊΠΎ Π±ΠΈΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ ΡΠ°ΡΠ½ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠ° ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π΄Π΅ΡΠΈ ΠΈ ΠΊΠ°ΠΊΠΎ ΡΠΎ Π΄Π΅Π»ΡΡΠ΅, Π° Π·Π°ΡΠΈΠΌ ΠΏΡΠ΅ΡΠΈΡΠ΅ Π½Π° Π°ΡΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΡ ΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΈΡ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°. ΠΠ°Π½Π°Ρ Π³ΠΎΠ²ΠΎΡΠΈΠΌΠΎ ΠΎ ΡΡΠ²Π°ΡΠ°ΡΡ ΡΠ°ΠΊΠ²ΠΎΠ³ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ°.
ΠΠΎΡΠ½ΠΈΠΌΠΎ ΡΠ° ΠΏΠΎΡΡΠ°Π²ΡΠ°ΡΠ΅ΠΌ Π Π₯ΠΠ 8 ΠΠ΅ΡΠ° ΠΠ ΡΠ»ΠΈΠΊΠ΅. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π²ΠΈΡΡΡΠ΅Π»Π½Ρ ΠΌΠ°ΡΠΈΠ½Ρ ΠΎΠ΄ Π½ΡΠ»Π΅ ΠΈΠ»ΠΈ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΠΠ ΡΠ»ΠΈΠΊΡ Π³ΠΎΡΡΠ° ΠΊΠΎΡΠ° ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠ· Π²Π°ΡΡ ΠΠ΅ΡΠ° ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΡ. ΠΠ°Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ»ΠΈΠΊΡ Π³ΠΎΡΡΠ°, ΠΌΠΎΡΠ°ΡΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ΅ΡΠ΅ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈ Π¦Π ΠΊΠΎΡΠΈ ΡΠ΅ ΡΠ°Π΄ΡΠΆΠ°ΡΠΈ ΠΌΠ΅ΡΠ°ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠ΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ Π·Π° ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡ ΠΎΠ±Π»Π°ΠΊΠ° (ΡΠ»ΠΎΡΠ΄-ΠΈΠ½ΠΈΡ). ΠΠ΅ ΠΌΠΎΡΠ°ΡΠ΅ Π½ΠΈΡΡΠ° ΠΏΠΎΡΠ΅Π±Π½ΠΎ Π΄Π° ΡΠ°Π΄ΠΈΡΠ΅ ΡΠ° ΡΡΡΡΠΊΡΡΡΠΎΠΌ Π΄ΠΈΡΠΊΠ° ΠΈΠ»ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΈΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΈΠΌΠ°.
Π₯Π°ΡΠ΄Π΅ Π΄Π° Π΄Π΅ΡΠ°ΡΠ½ΠΈΡΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π°ΠΌΠΎ ΡΠ΅ΠΎ ΠΏΡΠΎΡΠ΅Ρ.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΡΠ°Π½Π³Π°
Π‘Π° Π½Π°ΡΠ½ΠΎΠ²ΠΈΡΠΎΠΌ Π²Π΅ΡΠ·ΠΈΡΠΎΠΌ ΠΡΠ°Π½Π³Π°, Π±ΠΈΡΠ΅ Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ (Π²ΠΈΡΡΡΠ°Π»Π΅Π½Π²) ΡΠ° ΠΠΈΡΡ ΠΎΠ½-ΠΎΠΌ 3.5 ΠΈΠ»ΠΈ Π½ΠΎΠ²ΠΈΡΠΈΠΌ. Π£ Π±Π΅ΡΠ° Π±Π΅Π»Π΅ΡΠΊΠ°ΠΌΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ Π΄Π° ΡΠ΅ ΠΠΈΡΡ ΠΎΠ½ 3.6 Π΄ΠΎΡΡΡΠΏΠ°Π½, Ρ Π°ΡΠ΄Π΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌΠΎ Π΄Π° Π»ΠΈ ΡΠ΅ ΡΠΎ Π·Π°ΠΈΡΡΠ° ΡΠ»ΡΡΠ°Ρ:
[cloud-user@8beta1 ~]$ python
-bash: python: command not found
[cloud-user@8beta1 ~]$ python3
-bash: python3: command not found
Π Π΅Π΄ Π₯Π°Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΊΠΎΡΠΈΡΡΠΈ ΠΠΈΡΡ ΠΎΠ½ ΠΊΠ°ΠΎ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ Π°Π»Π°ΡΠ° Ρ Π Π₯ΠΠ-Ρ, ΠΏΠ° Π·Π°ΡΡΠΎ ΡΠ΅ ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ?
Π§ΠΈΡΠ΅Π½ΠΈΡΠ° ΡΠ΅ Π΄Π° ΠΌΠ½ΠΎΠ³ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ ΠΠΈΡΡ
ΠΎΠ½-Π° ΡΠΎΡ ΡΠ²Π΅ΠΊ ΡΠ°Π·ΠΌΠΈΡΡΠ°ΡΡ ΠΎ ΠΏΡΠ΅Π»Π°ΡΠΊΡ ΡΠ° ΠΠΈΡΡ
ΠΎΠ½-Π° 2 Π½Π° ΠΠΈΡΡ
ΠΎΠ½ 2, Π΄ΠΎΠΊ ΡΠ΅ ΡΠ°ΠΌ ΠΠΈΡΡ
ΠΎΠ½ 3 Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠ°Π·Π²ΠΎΡΡ, Π° ΡΠ²Π΅ Π²ΠΈΡΠ΅ ΠΈ Π²ΠΈΡΠ΅ Π½ΠΎΠ²ΠΈΡ
Π²Π΅ΡΠ·ΠΈΡΠ° ΡΠ΅ ΡΡΠ°Π»Π½ΠΎ ΠΏΠΎΡΠ°Π²ΡΡΡΠ΅. ΠΠ±ΠΎΠ³ ΡΠΎΠ³Π°, Π΄Π° Π±ΠΈ ΡΠ΅ Π·Π°Π΄ΠΎΠ²ΠΎΡΠΈΠ»Π° ΠΏΠΎΡΡΠ΅Π±Π° Π·Π° ΡΡΠ°Π±ΠΈΠ»Π½ΠΈΠΌ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΠΌ Π°Π»Π°ΡΠΈΠΌΠ° Π΄ΠΎΠΊ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΠΌΠ° Π½ΡΠ΄ΠΈ ΠΏΡΠΈΡΡΡΠΏ ΡΠ°Π·Π½ΠΈΠΌ Π½ΠΎΠ²ΠΈΠΌ Π²Π΅ΡΠ·ΠΈΡΠ°ΠΌΠ° ΠΠΈΡΡ
ΠΎΠ½-Π°, ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ ΠΠΈΡΡ
ΠΎΠ½ ΡΠ΅ ΠΏΡΠ΅Π±Π°ΡΠ΅Π½ Ρ Π½ΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΠΈ ΠΏΡΡΠΆΠ° ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ° ΠΈ ΠΠΈΡΡ
ΠΎΠ½-Π° 2.7 ΠΈ 3.6. ΠΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π°ΠΌΠ° ΠΈ Π·Π°ΡΡΠΎ ΡΡ ΠΎΠ½Π΅ Π½Π°ΠΏΡΠ°Π²ΡΠ΅Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ½Π°ΡΠΈ Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΠΈ Ρ
ΠΠ°ΠΊΠ»Π΅, Π΄Π° Π±ΠΈ ΠΠΈΡΡ ΠΎΠ½ ΠΏΠΎΡΠ΅ΠΎ Π΄Π° ΡΠ°Π΄ΠΈ, ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ Π΄Π²Π° ΠΏΠ°ΠΊΠ΅ΡΠ°, ΡΠ° ΡΠΊΡΡΡΠ΅Π½ΠΈΠΌ ΠΏΠΈΡΡ ΠΎΠ½3-ΠΏΠΈΠΏ ΠΊΠ°ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΡ.
sudo yum install python36 python3-virtualenv
ΠΠ°ΡΡΠΎ Π½Π΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½Π΅ ΠΏΠΎΠ·ΠΈΠ²Π΅ ΠΌΠΎΠ΄ΡΠ»Π° ΠΊΠ°ΠΎ ΡΡΠΎ ΠΠ°Π½Π³Π΄ΠΎΠ½ ΠΏΡΠ΅Π΄Π»Π°ΠΆΠ΅ ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΏΠΈΠΏ3? ΠΠΌΠ°ΡΡΡΠΈ Ρ Π²ΠΈΠ΄Ρ ΠΏΡΠ΅Π΄ΡΡΠΎΡΠ΅ΡΡ Π°ΡΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΡ, ΠΏΠΎΠ·Π½Π°ΡΠΎ ΡΠ΅ Π΄Π° ΡΠ΅ ΠΠ½ΡΠΈΠ±Π»Π΅ Π·Π°Ρ ΡΠ΅Π²Π°ΡΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ ΠΏΠΈΠΏ Π·Π° ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅, ΠΏΠΎΡΡΠΎ ΠΏΠΈΠΏ ΠΌΠΎΠ΄ΡΠ» Π½Π΅ ΠΏΠΎΠ΄ΡΠΆΠ°Π²Π° Π²ΠΈΡΡΡΠ°Π»Π΅Π½Π²Ρ ΡΠ° ΠΏΡΠΈΠ»Π°Π³ΠΎΡΠ΅Π½ΠΈΠΌ ΠΈΠ·Π²ΡΡΠ½ΠΈΠΌ ΠΏΠΈΠΏ-ΠΎΠΌ.
Π‘Π° ΠΈΡΠΏΡΠ°Π²Π½ΠΈΠΌ ΠΏΠΈΡΡ ΠΎΠ½3 ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΊΠΎΡΠΈ Π²Π°ΠΌ ΡΠ΅ Π½Π° ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΠ°Π²ΠΈΡΠΈ ΡΠ° ΠΏΡΠΎΡΠ΅ΡΠΎΠΌ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ΅ ΠΡΠ°Π½Π³Π° ΠΈ ΠΈΠΌΠ°ΡΠΈ ΡΠ°Π΄Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌ Π·Π°ΡΠ΅Π΄Π½ΠΎ ΡΠ° Π½Π°ΡΠΈΠΌ ΠΎΡΡΠ°Π»ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠ°. ΠΠΎΡΡΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡΠΈΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠ΅ ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π΅ Π½Π° ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΡ. ΠΠ²Π΄Π΅ ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ΅Π½Π° ΡΠ΅Π΄Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ°, Π°Π»ΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ ΠΌΠΎΠ³Ρ Π΄Π° ΠΊΠΎΡΠΈΡΡΠ΅ ΡΠΎΠΏΡΡΠ²Π΅Π½Π΅ ΠΏΡΠΎΡΠ΅ΡΠ΅.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ΠΌΠΎ ΠΠΎΡΡΠ³ΡΠ΅Π‘ΠΠ ΠΈ ΠΠ³ΠΈΠ½ΠΊ Π²Π΅ΡΠ·ΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π΅ Ρ Π Π₯ΠΠ 8 ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΡΠΌ.
sudo yum install nginx postgresql-server
ΠΠΎΡΡΠ³ΡΠ΅Π‘ΠΠ ΡΠ΅ Π·Π°Ρ ΡΠ΅Π²Π°ΡΠΈ ΠΏΡΠΈΡΠΎΠΏΠ³2, Π°Π»ΠΈ ΠΌΠΎΡΠ° Π±ΠΈΡΠΈ Π΄ΠΎΡΡΡΠΏΠ°Π½ ΡΠ°ΠΌΠΎ Ρ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅ΡΡ, ΡΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ΠΌΠΎ Π³Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΏΠΈΠΏ3 Π·Π°ΡΠ΅Π΄Π½ΠΎ ΡΠ° ΠΡΠ°Π½Π³ΠΎΠΌ ΠΈ ΠΡΠ½ΠΈΡΠΎΡΠ½-ΠΎΠΌ. ΠΠ»ΠΈ ΠΏΡΠ²ΠΎ ΠΌΠΎΡΠ°ΠΌΠΎ Π΄Π° ΠΏΠΎΠ΄Π΅ΡΠΈΠΌΠΎ Π²ΠΈΡΡΡΠ°Π»Π΅Π½Π².
Π£Π²Π΅ΠΊ ΠΏΠΎΡΡΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅Π±Π°ΡΠ° Π½Π° ΡΠ΅ΠΌΡ ΠΈΠ·Π±ΠΎΡΠ° ΠΏΡΠ°Π²ΠΎΠ³ ΠΌΠ΅ΡΡΠ° Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡ ΠΡΠ°Π½Π³ΠΎ ΠΏΡΠΎΡΠ΅ΠΊΠ°ΡΠ°, Π°Π»ΠΈ ΠΊΠ°Π΄Π° ΡΡΠ΅ Ρ Π½Π΅Π΄ΠΎΡΠΌΠΈΡΠΈ, ΡΠ²Π΅ΠΊ ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΡΠΈ ΠΠΈΠ½ΡΠΊ ΡΡΠ°Π½Π΄Π°ΡΠ΄Ρ Ρ ΠΈΡΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°. ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ, Π€Π₯Π‘ ΠΊΠ°ΠΆΠ΅ Π΄Π° ΡΠ΅ /ΡΡΠ² ΠΊΠΎΡΠΈΡΡΠΈ Π·Π°: βΡΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈΡ Π·Π° Ρ ΠΎΡΡ β ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΊΠΎΡΠ΅ ΡΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ, ΠΊΠ°ΠΎ ΡΡΠΎ ΡΡ ΠΏΠΎΠ΄Π°ΡΠΈ Π²Π΅Π± ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΡΠΊΡΠΈΠΏΡΠ΅, ΠΏΠΎΠ΄Π°ΡΠΈ ΠΊΠΎΡΠΈ ΡΠ΅ ΡΡΠ²Π°ΡΡ Π½Π° Π€Π’Π ΡΠ΅ΡΠ²Π΅ΡΠΈΠΌΠ° ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π΅ Π²Π΅ΡΠ·ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ° (ΠΊΠΎΡΠΈ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΡΡΡ Ρ Π€Π₯Π‘-Ρ). -2.3 Ρ 2004).β
ΠΠ²ΠΎ ΡΠ΅ ΡΠΏΡΠ°Π²ΠΎ Π½Π°Ρ ΡΠ»ΡΡΠ°Ρ, ΡΠ°ΠΊΠΎ Π΄Π° ΡΠΌΠΎ ΡΠ²Π΅ ΡΡΠΎ Π½Π°ΠΌ ΡΡΠ΅Π±Π° ΡΡΠ°Π²ΠΈΠ»ΠΈ Ρ /ΡΡΠ², ΠΊΠΎΡΠΈ ΡΠ΅ Ρ Π²Π»Π°ΡΠ½ΠΈΡΡΠ²Ρ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ° Π½Π°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ (ΡΠ»ΠΎΡΠ΄-ΡΡΠ΅Ρ).
sudo mkdir /srv/djangoapp
sudo chown cloud-user:cloud-user /srv/djangoapp
cd /srv/djangoapp
virtualenv django
source django/bin/activate
pip3 install django gunicorn psycopg2
./django-admin startproject djangoapp /srv/djangoapp
ΠΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ΅ ΠΠΎΡΡΠ³ΡΠ΅Π‘ΠΠ-Π° ΠΈ ΠΡΠ°Π½Π³ΠΎ-Π° ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ: ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ Π±Π°Π·Ρ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ°, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΈΡΠ΅ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅. ΠΠ΅Π΄Π½Π° ΡΡΠ²Π°Ρ ΠΊΠΎΡΡ ΡΡΠ΅Π±Π° ΠΈΠΌΠ°ΡΠΈ Π½Π° ΡΠΌΡ ΠΊΠ°Π΄Π° ΠΏΠΎΡΠ΅ΡΠ½ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΠΎΡΡΠ³ΡΠ΅Π‘ΠΠ ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠ° ΠΏΠΎΡΡΠ³ΡΠ΅ΡΠΊΠ»-ΡΠ΅ΡΡΠΏ ΠΊΠΎΡΠ° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ ΠΏΠΎΡΡΠ³ΡΠ΅ΡΠΊΠ»-ΡΠ΅ΡΠ²Π΅Ρ. ΠΠ²Π° ΡΠΊΡΠΈΠΏΡΠ° Π²Π°ΠΌ ΠΏΠΎΠΌΠ°ΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½Π΅ Π·Π°Π΄Π°ΡΠΊΠ΅ ΠΏΠΎΠ²Π΅Π·Π°Π½Π΅ ΡΠ° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ° ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅Ρ Π½Π°Π΄ΠΎΠ³ΡΠ°Π΄ΡΠ΅. ΠΠ° Π±ΠΈΡΠΌΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π»ΠΈ Π½ΠΎΠ²Ρ ΠΠΎΡΡΠ³ΡΠ΅Π‘ΠΠ ΠΈΠ½ΡΡΠ°Π½ΡΡ Π½Π° Π Π₯ΠΠ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΌΠΎΡΠ°ΠΌΠΎ Π΄Π° ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ Π½Π°ΡΠ΅Π΄Π±Ρ:
sudo /usr/bin/postgresql-setup -initdb
ΠΠ°ΡΠΈΠΌ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΠΠΎΡΡΠ³ΡΠ΅Π‘ΠΠ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΡΠΈΡΡΠ΅ΠΌΠ΄, ΠΊΡΠ΅ΠΈΡΠ°ΡΠΈ Π±Π°Π·Ρ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΈ ΠΏΠΎΠ΄Π΅ΡΠΈΡΠΈ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ Ρ ΠΡΠ°Π½Π³Ρ. ΠΠ΅ Π·Π°Π±ΠΎΡΠ°Π²ΠΈΡΠ΅ Π΄Π° ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΡΠ΅ ΠΠΎΡΡΠ³ΡΠ΅Π‘ΠΠ Π½Π°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠ½Π΅ΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΈ ΡΠ°ΡΠ» Π·Π° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ ΠΊΠ»ΠΈΡΠ΅Π½ΡΠ° (ΠΎΠ±ΠΈΡΠ½ΠΎ ΠΏΠ³_Ρ Π±Π°.ΡΠΎΠ½Ρ) Π΄Π° Π±ΠΈΡΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π»ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ΅ Π·Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠΊΠΎ Π½Π°ΠΈΡΠ΅ΡΠ΅ Π½Π° Π΄ΡΡΠ³Π΅ ΠΏΠΎΡΠ΅ΡΠΊΠΎΡΠ΅, ΠΎΠ±Π°Π²Π΅Π·Π½ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΠΠ²4 ΠΈ ΠΠΠ²6 ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° Ρ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ ΠΏΠ³_Ρ Π±Π°.ΡΠΎΠ½Ρ.
systemctl enable -now postgresql
sudo -u postgres psql
postgres=# create database djangoapp;
postgres=# create user djangouser with password 'qwer4321';
postgres=# alter role djangouser set client_encoding to 'utf8';
postgres=# alter role djangouser set default_transaction_isolation to 'read committed';
postgres=# alter role djangouser set timezone to 'utc';
postgres=# grant all on DATABASE djangoapp to djangouser;
postgres=# q
Π£ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ /Π²Π°Ρ/Π»ΠΈΠ±/ΠΏΠ³ΡΠΊΠ»/Π΄Π°ΡΠ°/ΠΏΠ³_Ρ Π±Π°.ΡΠΎΠ½Ρ:
# IPv4 local connections:
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 md5
Π£ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ /ΡΡΠ²/Π΄ΡΠ°Π½Π³ΠΎΠ°ΠΏΠΏ/ΡΠ΅ΡΡΠΈΠ½Π³Ρ.ΠΏΠΈ:
# Database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '{{ db_name }}',
'USER': '{{ db_user }}',
'PASSWORD': '{{ db_password }}',
'HOST': '{{ db_host }}',
}
}
ΠΠ°ΠΊΠΎΠ½ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ ΡΠ΅ΡΡΠΈΠ½Π³Ρ.ΠΏΠΈ Ρ ΠΏΡΠΎΡΠ΅ΠΊΡΡ ΠΈ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΡΠ°Π·Π²ΠΎΡΠ½ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π΄Π° Π±ΠΈΡΡΠ΅ Π±ΠΈΠ»ΠΈ ΡΠΈΠ³ΡΡΠ½ΠΈ Π΄Π° ΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ΅. ΠΠ°ΠΊΠΎΠ½ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ° ΡΠ°Π·Π²ΠΎΡΠ½ΠΎΠ³ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π΄ΠΎΠ±ΡΠ° ΡΠ΅ ΠΈΠ΄Π΅ΡΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠΎΠ³ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ° ΠΊΠ°ΠΊΠΎ Π±ΠΈΡΡΠ΅ ΡΠ΅ΡΡΠΈΡΠ°Π»ΠΈ Π²Π΅Π·Ρ ΡΠ° Π±Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
./manage.py runserver 0.0.0.0:8000
./manage.py createsuperuser
ΠΠ‘ΠΠ? ΠΠ°ΠΈ?
Π Π°Π·Π²ΠΎΡΠ½ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Π½ Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅, Π°Π»ΠΈ Π΄Π° Π±ΠΈΡΡΠ΅ ΠΏΠΎΠΊΡΠ΅Π½ΡΠ»ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ΅ΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡΡΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΠΏΡΠΎΠΊΡΠΈ Π·Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ ΠΌΡΠ΅ΠΆΠ½ΠΎΠ³ ΠΏΡΠΎΠ»Π°Π·Π° Π²Π΅Π± ΡΠ΅ΡΠ²Π΅ΡΠ° (ΠΠ‘ΠΠ). ΠΠΎΡΡΠΎΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠ°, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΠΏΠ°ΡΡ Π΅ Π₯Π’Π’ΠΠ ΡΠ° ΡΠΠ‘ΠΠ ΠΈΠ»ΠΈ ΠΠ³ΠΈΠ½ΠΊ ΡΠ° ΠΡΠ½ΠΈΡΠΎΡΠ½.
ΠΠΎΡΠ°ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠ° ΠΌΡΠ΅ΠΆΠ½ΠΎΠ³ ΠΏΡΠΎΠ»Π°Π·Π° Π²Π΅Π± ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈ Π·Π°Ρ ΡΠ΅Π²Π΅ ΡΠ° Π²Π΅Π± ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° ΠΠΈΡΡ ΠΎΠ½ Π²Π΅Π± ΠΎΠΊΠ²ΠΈΡ. ΠΠ‘ΠΠ ΡΠ΅ ΡΠ΅Π»ΠΈΠΊΡ ΡΠΆΠ°ΡΠ½Π΅ ΠΏΡΠΎΡΠ»ΠΎΡΡΠΈ ΠΊΠ°Π΄Π° ΡΡ Π¦ΠΠ ΠΌΠΎΡΠΎΡΠΈ ΠΏΠΎΡΡΠΎΡΠ°Π»ΠΈ, Π° Π΄Π°Π½Π°Ρ ΡΠ΅ ΠΠ‘ΠΠ Π΄Π΅ ΡΠ°ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄, Π±Π΅Π· ΠΎΠ±Π·ΠΈΡΠ° Π½Π° ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈ Π²Π΅Π± ΡΠ΅ΡΠ²Π΅Ρ ΠΈΠ»ΠΈ ΠΠΈΡΡ ΠΎΠ½ ΡΡΠ°ΠΌΠ΅Π²ΠΎΡΠΊ. ΠΠ»ΠΈ ΡΠΏΡΠΊΠΎΡ ΡΠΈΡΠΎΠΊΠΎΡ ΡΠΏΠΎΡΡΠ΅Π±ΠΈ, ΡΠΎΡ ΡΠ²Π΅ΠΊ ΠΏΠΎΡΡΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΡΠ°Π½ΡΠΈ ΠΊΠ°Π΄Π° ΡΠ°Π΄ΠΈΡΠ΅ ΡΠ° ΠΎΠ²ΠΈΠΌ ΠΎΠΊΠ²ΠΈΡΠΈΠΌΠ° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·Π±ΠΎΡΠ°. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ, ΠΏΠΎΠΊΡΡΠ°ΡΠ΅ΠΌΠΎ Π΄Π° ΡΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠΎ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΡ ΠΡΠ½ΠΈΡΠΎΡΠ½-Π° ΠΈ ΠΠ³ΠΈΠ½ΠΊ-Π° ΠΏΡΠ΅ΠΊΠΎ ΡΠΎΡΠΊΠ΅ΡΠ°.
ΠΠΎΡΡΠΎ ΡΡ ΠΎΠ±Π΅ ΠΎΠ²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΡΡΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΡ, ΠΏΠΎΠΊΡΡΠ°ΡΠΌΠΎ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ Π£ΠΠΠΠ‘ ΡΡΠΈΡΠ½ΠΈΡΡ ΡΠΌΠ΅ΡΡΠΎ ΠΌΡΠ΅ΠΆΠ½Π΅ ΡΡΠΈΡΠ½ΠΈΡΠ΅. ΠΠΎΡΡΠΎ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΠ° Ρ ΡΠ²Π°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ Π·Π°Ρ ΡΠ΅Π²Π° ΡΠΎΠΊΠ΅Ρ, Ρ Π°ΡΠ΄Π΅ Π΄Π° ΠΏΠΎΠΊΡΡΠ°ΠΌΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠΎ ΡΠΎΡ ΡΠ΅Π΄Π°Π½ ΠΊΠΎΡΠ°ΠΊ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ΅ΠΌΠΎ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΡΡ ΡΡΠΈΡΠ½ΠΈΡΠ΅ Π·Π° ΠΡΠ½ΠΈΡΠΎΡΠ½ ΠΏΡΠ΅ΠΊΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΄-Π°.
ΠΡΠΎΡΠ΅Ρ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠΎΠΌ ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π°Π½. ΠΡΠ²ΠΎ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ° ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΡΠ° ΡΠ°Π΄ΡΠΆΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΠΈΡΡΠ΅Π½Π‘ΡΡΠ΅Π°ΠΌ ΠΊΠΎΡΠ° ΡΠΊΠ°Π·ΡΡΠ΅ Π½Π° ΡΠ°ΡΠΊΡ Ρ ΠΊΠΎΡΠΎΡ ΡΠ΅ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΠΈ Π£ΠΠΠΠ‘ ΡΠΎΠΊΠ΅Ρ, Π·Π°ΡΠΈΠΌ ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΡΠ»ΡΠ³Ρ Ρ ΠΊΠΎΡΠΎΡ ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° Π Π΅ΠΊΡΠΈΡΠ΅Ρ ΡΠΊΠ°Π·ΠΈΠ²Π°ΡΠΈ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΡ ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΡΡΠΈΡΠ½ΠΈΡΠ΅. ΠΠ°ΡΠΈΠΌ, Ρ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ½Π΅ ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅, ΠΎΡΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ Π΄Π° ΠΏΠΎΠ·ΠΎΠ²Π΅ΡΠ΅ ΠΡΠ½ΠΈΡΠΎΡΠ½ ΠΈΠ· Π²ΠΈΡΡΡΠ΅Π»Π½ΠΎΠ³ ΠΎΠΊΡΡΠΆΠ΅ΡΠ° ΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΠ‘ΠΠ Π²Π΅Π·Ρ Π·Π° Π£ΠΠΠΠ‘ ΡΠΎΠΊΠ΅Ρ ΠΈ ΠΡΠ°Π½Π³ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ.
ΠΠ²ΠΎ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΈΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΊΠ°ΠΎ ΠΎΡΠ½ΠΎΠ²Ρ. ΠΡΠ²ΠΎ ΡΠΌΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΡΡΠΈΡΠ½ΠΈΡΡ.
[Unit]
Description=Gunicorn WSGI socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
Π‘Π°Π΄Π° ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ΅ΡΠ΅ ΠΡΠ½ΠΈΡΠΎΡΠ½ Π΄Π΅ΠΌΠΎΠ½Π°.
[Unit]
Description=Gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=cloud-user
Group=cloud-user
WorkingDirectory=/srv/djangoapp
ExecStart=/srv/djangoapp/django/bin/gunicorn
βaccess-logfile -
βworkers 3
βbind unix:gunicorn.sock djangoapp.wsgi
[Install]
WantedBy=multi-user.target
ΠΠ° ΠΠ³ΠΈΠ½ΠΊ ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½ΠΈΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΠΊΡΠΈΡΠ° ΠΈ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠΌΠ° Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠ΅ ΡΡΠ°ΡΠΈΡΠΊΠΎΠ³ ΡΠ°Π΄ΡΠΆΠ°ΡΠ° Π°ΠΊΠΎ Π³Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅. Π£ Π Π₯ΠΠ-Ρ, ΠΠ³ΠΈΠ½ΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ ΡΠ΅ Π½Π°Π»Π°Π·Π΅ Ρ /Π΅ΡΡ/Π½Π³ΠΈΠ½ΠΊ/ΡΠΎΠ½Ρ.Π΄. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ°ΡΠΈ ΡΠ»Π΅Π΄Π΅ΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ /Π΅ΡΡ/Π½Π³ΠΈΠ½ΠΊ/ΡΠΎΠ½Ρ.Π΄/Π΄Π΅ΡΠ°ΡΠ»Ρ.ΡΠΎΠ½Ρ ΠΈ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΡΡΠ»ΡΠ³Ρ. ΠΠ±Π°Π²Π΅Π·Π½ΠΎ ΠΏΠΎΠ΄Π΅ΡΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ_Π½Π°ΠΌΠ΅ ΡΠ°ΠΊΠΎ Π΄Π° ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π²Π°ΡΠ΅ΠΌ ΠΈΠΌΠ΅Π½Ρ Ρ ΠΎΡΡΠ°.
server {
listen 80;
server_name 8beta1.example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /srv/djangoapp;
}
location / {
proxy_set_header Host $http_host;
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_pass http://unix:/run/gunicorn.sock;
}
}
ΠΠΎΠΊΡΠ΅Π½ΠΈΡΠ΅ ΠΡΠ½ΠΈΡΠΎΡΠ½ ΡΠΎΡΠΊΠ΅Ρ ΠΈ ΠΠ³ΠΈΠ½ΠΊ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΡΠΈΡΡΠ΅ΠΌΠ΄ ΠΈ ΡΠΏΡΠ΅ΠΌΠ½ΠΈ ΡΡΠ΅ Π·Π° ΠΏΠΎΡΠ΅ΡΠ°ΠΊ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ°.
ΠΡΠ΅ΡΠΊΠ° Π»ΠΎΡΠ΅Π³ ΠΌΡΠ΅ΠΆΠ½ΠΎΠ³ ΠΏΡΠΎΠ»Π°Π·Π°?
ΠΠΊΠΎ ΡΠ½Π΅ΡΠ΅ΡΠ΅ Π°Π΄ΡΠ΅ΡΡ Ρ ΡΠ²ΠΎΡ ΠΏΡΠ΅ΡΡΠ°ΠΆΠΈΠ²Π°Ρ, Π½Π°ΡΠ²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΈΡΠ΅ ΡΠ΅ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠΈ Π³ΡΠ΅ΡΠΊΡ 502 ΠΠ°Π΄ ΠΠ°ΡΠ΅Π²Π°ΠΈ. Π’ΠΎ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ ΡΠ·ΡΠΎΠΊΠΎΠ²Π°Π½ΠΎ ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈΠΌ Π΄ΠΎΠ·Π²ΠΎΠ»Π°ΠΌΠ° Π£ΠΠΠΠ‘ ΡΠΎΠΊΠ΅ΡΠ°, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ Π·Π±ΠΎΠ³ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²Π΅Π·Π°Π½ΠΈΡ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΏΡΠΈΡΡΡΠΏΠ° Ρ Π‘ΠΠΠΈΠ½ΡΠΊ-Ρ.
Π£ Π½Π³ΠΈΠ½ΠΊ Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈ Π³ΡΠ΅ΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ ΠΎΠ²Ρ Π»ΠΈΠ½ΠΈΡΡ:
2018/12/18 15:38:03 [crit] 12734#0: *3 connect() to unix:/run/gunicorn.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.122.1, server: 8beta1.example.com, request: "GET / HTTP/1.1", upstream: "http://unix:/run/gunicorn.sock:/", host: "8beta1.example.com"
ΠΠΊΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΠΌΠΎ ΠΡΠ½ΠΈΡΠΎΡΠ½, Π΄ΠΎΠ±ΠΈΡΠ΅ΠΌΠΎ ΠΏΡΠ°Π·Π°Π½ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ.
curl βunix-socket /run/gunicorn.sock 8beta1.example.com
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΡΡ Π²Π°ΡΠΈΠΌΠΎ Π·Π°ΡΡΠΎ ΡΠ΅ ΡΠΎ Π΄Π΅ΡΠ°Π²Π°. ΠΠΊΠΎ ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΠΊ, Π½Π°ΡΠ²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΈΡΠ΅ ΡΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΠΎΠ²Π΅Π·Π°Π½ ΡΠ° Π‘ΠΠΠΈΠ½ΡΠΊ-ΠΎΠΌ. ΠΠΎΡΡΠΎ ΠΏΠΎΠΊΡΠ΅ΡΠ΅ΠΌΠΎ Π΄Π΅ΠΌΠΎΠ½ Π·Π° ΠΊΠΎΡΠΈ Π½ΠΈΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°, ΠΎΠ½ ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ΅Π½ ΠΊΠ°ΠΎ ΠΈΠ½ΠΈΡ_Ρ. Π₯Π°ΡΠ΄Π΅ Π΄Π° ΡΠ΅ΡΡΠΈΡΠ°ΠΌΠΎ ΠΎΠ²Ρ ΡΠ΅ΠΎΡΠΈΡΡ Ρ ΠΏΡΠ°ΠΊΡΠΈ.
sudo setenforce 0
Π‘Π²Π΅ ΠΎΠ²ΠΎ ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π°Π·Π²Π°ΡΠΈ ΠΊΡΠΈΡΠΈΠΊΠ΅ ΠΈ ΠΊΡΠ²Π½Π΅ ΡΡΠ·Π΅, Π°Π»ΠΈ ΠΎΠ²ΠΎ ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΎΡΠΊΠ»Π°ΡΠ°ΡΠ΅ Π³ΡΠ΅ΡΠ°ΠΊΠ° ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ°. Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΎΠ½Π΅ΠΌΠΎΠ³ΡΡΠΈΠΌΠΎ ΠΏΡΠΎΠ²Π΅ΡΡ ΡΠ°ΠΌΠΎ Π΄Π° Π±ΠΈΡΠΌΠΎ ΡΠ΅ ΡΠ²Π΅ΡΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π½Π°ΠΊΠΎΠ½ ΡΠ΅Π³Π° ΡΠ΅ΠΌΠΎ ΡΠ²Π΅ Π²ΡΠ°ΡΠΈΡΠΈ Π½Π° ΡΠ²ΠΎΡΠ΅ ΠΌΠ΅ΡΡΠΎ.
ΠΡΠ²Π΅ΠΆΠ°Π²Π°ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΈΡΠ΅ Ρ ΠΏΡΠ΅ΡΡΠ°ΠΆΠΈΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ½ΠΎΠ²Π½ΠΈΠΌ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ΠΌ Π½Π°ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΡΡΠ», ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ ΠΡΠ°Π½Π³ΠΎ ΡΠ΅ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ.
ΠΠ°ΠΊΠ»Π΅, Π½Π°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠΌΠΎ ΡΠ΅ ΡΠ²Π΅ΡΠΈΠ»ΠΈ Π΄Π° ΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ΅ ΠΈ Π΄Π° Π²ΠΈΡΠ΅ Π½Π΅ΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ° Π΄ΠΎΠ·Π²ΠΎΠ»Π°ΠΌΠ°, ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π°ΠΌΠΎ Π‘ΠΠΠΈΠ½ΡΠΊ.
sudo setenforce 1
ΠΠ΅ΡΡ ΠΎΠ²Π΄Π΅ Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π°ΡΠ΄ΠΈΡ2Π°Π»Π»ΠΎΠ² ΠΈΠ»ΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΡΡ ΡΠΌΠ΅ΡΠ½ΠΈΡΠ° Π·Π°ΡΠ½ΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΡΠΏΠΎΠ·ΠΎΡΠ΅ΡΠΈΠΌΠ° ΡΠ° ΡΠ΅ΠΏΠΎΠ»Π³Π΅Π½ΠΎΠΌ, ΠΏΠΎΡΡΠΎ ΡΡΠ΅Π½ΡΡΠ½ΠΎ Π½Π΅ ΠΏΠΎΡΡΠΎΡΠΈ ΡΡΠ²Π°ΡΠ½Π° ΠΡΠ°Π½Π³ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, ΡΠ°ΠΊΠΎ Π΄Π° Π½Π΅ ΠΏΠΎΡΡΠΎΡΠΈ ΠΏΠΎΡΠΏΡΠ½Π° ΠΌΠ°ΠΏΠ° ΡΠ΅ΠΌΡ Π±ΠΈ ΠΡΠ½ΠΈΡΠΎΡΠ½ ΠΌΠΎΠ³Π°ΠΎ Π΄Π° ΠΏΡΠΈΡΡΡΠΏΠΈ ΠΈ ΡΠ΅ΠΌΡ Π±ΠΈ ΡΡΠ΅Π±Π°Π»ΠΎ Π΄Π° Π·Π°Π±ΡΠ°Π½ΠΈ ΠΏΡΠΈΡΡΡΠΏ. ΠΠ±ΠΎΠ³ ΡΠΎΠ³Π° ΡΠ΅ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ Π‘ΠΠΠΈΠ½ΡΠΊ Π½Π°ΡΡΠ°Π²ΠΈ Π΄Π° ΡΠ°Π΄ΠΈ Π΄Π° Π±ΠΈ ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌ Π·Π°ΡΡΠΈΡΠΈΠΎ, Π΄ΠΎΠΊ ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ Π΄ΠΎΠ·Π²ΠΎΡΠ°Π²Π°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ Π΄Π° ΡΠ΅ ΠΏΠΎΠΊΡΠ΅Π½Π΅ ΠΈ ΠΎΡΡΠ°Π²ΡΠ° ΠΏΠΎΡΡΠΊΠ΅ Ρ Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈ ΡΠ΅Π²ΠΈΠ·ΠΈΡΠ΅ ΡΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΡΡΠ²Π°ΡΠ½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΠΈ ΠΎΠ΄ ΡΠΈΡ .
ΠΠ΄ΡΠ΅ΡΠΈΠ²Π°ΡΠ΅ Π΄ΠΎΠ·Π²ΠΎΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΌΠ΅Π½Π°
ΠΠΈΡΡ ΡΠ²ΠΈ ΡΡΠ»ΠΈ Π·Π° Π΄ΠΎΠ·Π²ΠΎΡΠ΅Π½Π΅ Π΄ΠΎΠΌΠ΅Π½Π΅ Ρ Π‘ΠΠΠΈΠ½ΡΠΊΡ, Π°Π»ΠΈ ΠΎΠ½ΠΈ Π½ΠΈΡΡ Π½ΠΈΡΡΠ° Π½ΠΎΠ²ΠΎ. ΠΠ½ΠΎΠ³ΠΈ ΡΡ ΡΠ°ΠΊ ΠΈ ΡΠ°Π΄ΠΈΠ»ΠΈ ΡΠ° ΡΠΈΠΌΠ° Π° Π΄Π° ΡΠΎΠ³Π° Π½ΠΈΡΡ Π½ΠΈ ΡΠ²Π΅ΡΠ½ΠΈ. ΠΠ°Π΄Π° ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΊΡΠ΅ΠΈΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Ρ ΠΏΠΎΡΡΠΊΠ° ΡΠ΅Π²ΠΈΠ·ΠΈΡΠ΅, ΠΊΡΠ΅ΠΈΡΠ°Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈ Π΄ΠΎΠΌΠ΅Π½. Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΠΎΠΊΡΡΠ°ΠΌΠΎ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ ΠΈΠ·Π΄Π°Π²Π°ΡΠ° Π΄ΠΎΠ·Π²ΠΎΠ»Π°.
ΠΠ° Π±ΠΈΡΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π»ΠΈ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈ Π΄ΠΎΠ·Π²ΠΎΡΠ΅Π½ΠΈ Π΄ΠΎΠΌΠ΅Π½ Π·Π° ΠΡΠ½ΠΈΡΠΎΡΠ½, ΠΏΠΎΡΡΠ΅Π±Π½Π° Π²Π°ΠΌ ΡΠ΅ Π½Π΅ΠΊΠ° Π²ΡΡΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ΅, Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ ΠΈ Π΄Π° ΠΎΠ·Π½Π°ΡΠΈΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅. ΠΠΎΡΠ΅Π΄ ΡΠΎΠ³Π°, ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΡΡ Π°Π»Π°ΡΠΈ Π·Π° ΡΠ°ΡΡΠ°Π²ΡΠ°ΡΠ΅ Π½ΠΎΠ²ΠΈΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°.
sudo yum install selinux-policy-devel
ΠΠ΅Ρ Π°Π½ΠΈΠ·Π°ΠΌ Π΄ΠΎΠ·Π²ΠΎΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΌΠ΅Π½Π° ΡΠ΅ ΠΎΠ΄Π»ΠΈΡΠ°Π½ Π°Π»Π°Ρ Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡΠ΅Π±Π½ΠΎ ΠΊΠ°Π΄Π° ΡΠ΅ Ρ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΈΠ»Π°Π³ΠΎΡΠ΅Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΈΠ»ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠ΅ ΡΠ΅ ΠΈΡΠΏΠΎΡΡΡΡΡΡ Π±Π΅Π· Π²Π΅Ρ ΠΊΡΠ΅ΠΈΡΠ°Π½ΠΈΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ, Π΄ΠΎΠ·Π²ΠΎΡΠ΅Π½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π΄ΠΎΠΌΠ΅Π½Π° Π·Π° ΠΡΠ½ΠΈΡΠΎΡΠ½ ΡΠ΅ Π±ΠΈΡΠΈ ΡΡΠΎ ΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΡΠ° - ΠΏΡΠΎΠ³Π»Π°ΡΠΈΡΠ΅ Π³Π»Π°Π²Π½ΠΈ ΡΠΈΠΏ (Π³ΡΠ½ΠΈΡΠΎΡΠ½_Ρ), ΠΏΡΠΎΠ³Π»Π°ΡΠΈΡΠ΅ ΡΠΈΠΏ ΠΊΠΎΡΠΈ ΡΠ΅ΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π΄Π° ΠΎΠ·Π½Π°ΡΠΈΠΌΠΎ Π²ΠΈΡΠ΅ ΠΈΠ·Π²ΡΡΠ½ΠΈΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° (Π³ΡΠ½ΠΈΡΠΎΡΠ½_Π΅ΠΊΠ΅Ρ_Ρ), Π° Π·Π°ΡΠΈΠΌ ΠΏΠΎΠ΄Π΅ΡΠΈΡΠ΅ ΠΏΡΠ΅Π»Π°Π· Π΄Π° ΡΠΈΡΡΠ΅ΠΌ ΠΈΡΠΏΡΠ°Π²Π½ΠΎ ΠΎΠ·Π½Π°ΡΠΈ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ. ΠΠΎΡΠ»Π΅Π΄ΡΠΈ ΡΠ΅Π΄ ΠΏΠΎΡΡΠ°Π²ΡΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ ΠΊΠ°ΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½ΠΎ ΠΎΠΌΠΎΠ³ΡΡΠ΅Π½Ρ Ρ ΡΡΠ΅Π½ΡΡΠΊΡ ΠΊΠ°Π΄Π° ΡΠ΅ ΡΡΠΈΡΠ°.
Π³ΡΠ½ΠΈΡΠΎΡΠ½.ΡΠ΅:
policy_module(gunicorn, 1.0)
type gunicorn_t;
type gunicorn_exec_t;
init_daemon_domain(gunicorn_t, gunicorn_exec_t)
permissive gunicorn_t;
ΠΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΡΡΠ°Π²ΠΈΡΠΈ ΠΎΠ²Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ΅ ΠΈ Π΄ΠΎΠ΄Π°ΡΠΈ ΡΠ΅ ΡΠ²ΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ.
make -f /usr/share/selinux/devel/Makefile
sudo semodule -i gunicorn.pp
sudo semanage permissive -a gunicorn_t
sudo semodule -l | grep permissive
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌΠΎ Π΄Π° Π»ΠΈ Π‘ΠΠΠΈΠ½ΡΠΊ Π±Π»ΠΎΠΊΠΈΡΠ° Π½Π΅ΡΡΠΎ Π΄ΡΡΠ³ΠΎ ΠΎΡΠΈΠΌ ΠΎΠ½ΠΎΠΌΠ΅ ΡΠ΅ΠΌΡ ΠΏΡΠΈΡΡΡΠΏΠ° Π½Π°Ρ Π½Π΅ΠΏΠΎΠ·Π½Π°ΡΠΈ Π΄Π΅ΠΌΠΎΠ½.
sudo ausearch -m AVC
type=AVC msg=audit(1545315977.237:1273): avc: denied { write } for pid=19400 comm="nginx" name="gunicorn.sock" dev="tmpfs" ino=52977 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_run_t:s0 tclass=sock_file permissive=0
Π‘ΠΠΠΈΠ½ΡΠΊ ΡΠΏΡΠ΅ΡΠ°Π²Π° ΠΠ³ΠΈΠ½ΠΊ Π΄Π° ΡΠΏΠΈΡΡΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ Ρ Π£ΠΠΠΠ‘ ΡΠΎΠΊΠ΅Ρ ΠΊΠΎΡΠΈ ΠΊΠΎΡΠΈΡΡΠΈ ΠΡΠ½ΠΈΡΠΎΡΠ½. ΠΠ±ΠΈΡΠ½ΠΎ Ρ ΡΠ°ΠΊΠ²ΠΈΠΌ ΡΠ»ΡΡΠ°ΡΠ΅Π²ΠΈΠΌΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ΅ ΠΏΠΎΡΠΈΡΡ Π΄Π° ΡΠ΅ ΠΌΠ΅ΡΠ°ΡΡ, Π°Π»ΠΈ ΠΏΡΠ΅Π΄ Π½Π°ΠΌΠ° ΡΡ Π΄ΡΡΠ³ΠΈ ΠΈΠ·Π°Π·ΠΎΠ²ΠΈ. Π’Π°ΠΊΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° Π΄ΠΎΠΌΠ΅Π½Π° ΡΠ° Π΄ΠΎΠΌΠ΅Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ° Π½Π° Π΄ΠΎΠΌΠ΅Π½ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅. Π‘Π°Π΄Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌΠΎ Ρ ΡΡΠΏΠ΄_Ρ Π½Π° Π΄ΠΎΠΌΠ΅Π½ Π΄ΠΎΠ·Π²ΠΎΠ»Π°. ΠΠ²ΠΎ ΡΠ΅ Π΄Π°ΡΠΈ ΠΠ³ΠΈΠ½ΠΊ-Ρ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π°Π½ ΠΏΡΠΈΡΡΡΠΏ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π½Π°ΡΡΠ°Π²ΠΈΡΠΈ ΡΠ° Π΄Π°ΡΠΈΠΌ ΡΠ°Π΄ΠΎΠΌ Π½Π° ΠΎΡΠΊΠ»Π°ΡΠ°ΡΡ Π³ΡΠ΅ΡΠ°ΠΊΠ°.
sudo semanage permissive -a httpd_t
ΠΠ°ΠΊΠ»Π΅, ΠΊΠ°Π΄Π° ΡΡΠ΅ ΡΡΠΏΠ΅Π»ΠΈ Π΄Π° ΡΠ°ΡΡΠ²Π°ΡΠ΅ Π‘ΠΠΠΈΠ½ΡΠΊ Π·Π°ΡΡΠΈΡΠ΅Π½ (Π·Π°ΠΈΡΡΠ° Π½Π΅ Π±ΠΈ ΡΡΠ΅Π±Π°Π»ΠΎ Π΄Π° ΠΎΡΡΠ°Π²ΡΠ°ΡΠ΅ Π‘ΠΠΠΈΠ½ΡΠΊ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΡ) ΠΈ ΠΊΠ°Π΄Π° ΡΠ΅ Π΄ΠΎΠΌΠ΅Π½ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»Π° ΡΡΠΈΡΠ°ΡΡ, ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΡΡ Π²Π°ΡΠΈΡΠ΅ ΡΡΠ° ΡΠ°ΡΠ½ΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΎ ΠΊΠ°ΠΎ Π³ΡΠ½ΠΈΡΠΎΡΠ½_Π΅ΠΊΠ΅Ρ_Ρ Π΄Π° Π±ΠΈ ΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π»ΠΎ ΠΊΠ°ΠΊΠΎ ΡΡΠ΅Π±Π° ΠΎΠΏΠ΅Ρ. ΠΠΎΠΊΡΡΠ°ΡΠΌΠΎ Π΄Π° ΠΏΠΎΡΠ΅ΡΠΈΠΌΠΎ Π²Π΅Π± Π»ΠΎΠΊΠ°ΡΠΈΡΡ Π΄Π° Π±ΠΈΡΠΌΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ Π½ΠΎΠ²Π΅ ΠΏΠΎΡΡΠΊΠ΅ ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠΈΠΌΠ° ΠΏΡΠΈΡΡΡΠΏΠ°.
sudo ausearch -m AVC -c gunicorn
ΠΠΈΠ΄Π΅ΡΠ΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠΊΠ° ΠΊΠΎΡΠ΅ ΡΠ°Π΄ΡΠΆΠ΅ 'ΡΠΎΠΌΠΌ="Π³ΡΠ½ΠΈΡΠΎΡΠ½"' ΠΊΠΎΡΠ΅ ΡΠ°Π΄Π΅ ΡΠ°Π·Π½Π΅ ΡΡΠ²Π°ΡΠΈ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΠΌΠ° Ρ /ΡΡΠ²/Π΄ΡΠ°Π½Π³ΠΎΠ°ΠΏΠΏ, ΡΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΎΠ²ΠΎ ΠΎΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ ΡΠ΅Π΄Π½Π° ΠΎΠ΄ Π½Π°ΡΠ΅Π΄Π±ΠΈ ΠΊΠΎΡΠ΅ Π²ΡΠ΅Π΄ΠΈ ΠΎΠ·Π½Π°ΡΠΈΡΠΈ.
ΠΠ»ΠΈ ΠΏΠΎΡΠ΅Π΄ ΡΠΎΠ³Π°, ΠΏΠΎΡΠ°Π²ΡΡΡΠ΅ ΡΠ΅ ΠΏΠΎΡΡΠΊΠ° ΠΏΠΎΠΏΡΡ ΠΎΠ²Π΅:
type=AVC msg=audit(1545320700.070:1542): avc: denied { execute } for pid=20704 comm="(gunicorn)" name="python3.6" dev="vda3" ino=8515706 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file permissive=0
ΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΠ΅ ΡΡΠ°ΡΡΡ ΡΡΠ»ΡΠ³Π΅ Π³ΡΠ½ΠΈΡΠΎΡΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡ, Π½Π΅ΡΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ΅. ΠΠ·Π³Π»Π΅Π΄Π° Π΄Π° Π³ΡΠ½ΠΈΡΠΎΡΠ½ ΠΏΠΎΠΊΡΡΠ°Π²Π° Π΄Π° ΠΏΡΠΈΡΡΡΠΏΠΈ ΠΠΈΡΡ ΠΎΠ½ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ΅ΡΡ Ρ Π½Π°ΡΠ΅ΠΌ Π²ΠΈΡΡΡΠ°Π»Π΅Π½Π² ΠΎΠΊΡΡΠΆΠ΅ΡΡ, Π²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΎ Π΄Π° Π±ΠΈ ΠΏΠΎΠΊΡΠ΅Π½ΡΠΎ ΡΠ°Π΄Π½Π΅ ΡΠΊΡΠΈΠΏΡΠ΅. ΠΠ°ΠΊΠ»Π΅, Ρ Π°ΡΠ΄Π΅ Π΄Π° ΡΠ°Π΄Π° ΠΎΠ·Π½Π°ΡΠΈΠΌΠΎ ΠΎΠ²Π΅ Π΄Π²Π΅ ΠΈΠ·Π²ΡΡΠ½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌΠΎ Π΄Π° Π»ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΠΌΠΎ Π½Π°ΡΡ ΠΡΠ°Π½Π³ΠΎ ΡΠ΅ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ.
chcon -t gunicorn_exec_t /srv/djangoapp/django/bin/gunicorn /srv/djangoapp/django/bin/python3.6
ΠΡΠ½ΠΈΡΠΎΡΠ½ ΡΡΠ»ΡΠ³Ρ ΡΠ΅ ΠΌΠΎΡΠ°ΡΠΈ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΠΏΡΠ΅ Π½Π΅Π³ΠΎ ΡΡΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π°Π±ΡΠ°ΡΠΈ Π½ΠΎΠ²Π° ΠΎΠ·Π½Π°ΠΊΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π³Π° ΠΎΠ΄ΠΌΠ°Ρ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΠΈΠ»ΠΈ Π·Π°ΡΡΡΠ°Π²ΠΈΡΠΈ ΡΡΠ»ΡΠ³Ρ ΠΈ ΠΏΡΡΡΠΈΡΠΈ ΡΠΎΠΊΠ΅ΡΡ Π΄Π° Π³Π° ΠΏΠΎΠΊΡΠ΅Π½Π΅ ΠΊΠ°Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ Π»ΠΎΠΊΠ°ΡΠΈΡΡ Ρ ΠΏΡΠ΅ΡΡΠ°ΠΆΠΈΠ²Π°ΡΡ. ΠΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π΄Π° Π»ΠΈ ΡΡ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΏΡΠΈΠΌΠΈΠ»ΠΈ ΠΈΡΠΏΡΠ°Π²Π½Π΅ ΠΎΠ·Π½Π°ΠΊΠ΅ ΠΏΠΎΠΌΠΎΡΡ ΠΏΡ.
ps -efZ | grep gunicorn
ΠΠ΅ Π·Π°Π±ΠΎΡΠ°Π²ΠΈΡΠ΅ Π΄Π° ΠΊΠ°ΡΠ½ΠΈΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½ΠΎΡΠΌΠ°Π»Π½Ρ Π‘ΠΠΠΈΠ½ΡΠΊ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ!
ΠΠΊΠΎ ΡΠ°Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΠ΅ ΠΠΠ¦ ΠΏΠΎΡΡΠΊΠ΅, ΠΏΠΎΡΠ»Π΅Π΄ΡΠ° ΠΏΠΎΡΡΠΊΠ° ΡΠ°Π΄ΡΠΆΠΈ ΠΏΠ΅ΡΠΌΠΈΡΡΠΈΠ²Π΅=1 Π·Π° ΡΠ²Π΅ ΡΡΠΎ ΡΠ΅ ΠΎΠ΄Π½ΠΎΡΠΈ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ ΠΈ ΠΏΠ΅ΡΠΌΠΈΡΡΠΈΠ²Π΅=0 Π·Π° ΠΎΡΡΠ°ΡΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΠΊΠΎ ΡΠ°Π·ΡΠΌΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠ°Π² ΠΏΡΠΈΡΡΡΠΏ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π°Π½ ΡΡΠ²Π°ΡΠ½ΠΎΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΡΠ·ΠΎ ΠΏΡΠΎΠ½Π°ΡΠΈ Π½Π°ΡΠ±ΠΎΡΠΈ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ΡΠΈΡΠ΅ ΡΠ°ΠΊΠ²Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅. ΠΠ»ΠΈ Π΄ΠΎ ΡΠ°Π΄Π°, Π½Π°ΡΠ±ΠΎΡΠ΅ ΡΠ΅ Π΄Π° ΡΠΈΡΡΠ΅ΠΌ Π±ΡΠ΄Π΅ ΡΠΈΠ³ΡΡΠ°Π½ ΠΈ Π΄Π° Π΄ΠΎΠ±ΠΈΡΠ΅ΡΠ΅ ΡΠ°ΡΠ½Ρ, ΡΠΏΠΎΡΡΠ΅Π±ΡΠΈΠ²Ρ ΡΠ΅Π²ΠΈΠ·ΠΈΡΡ ΠΡΠ°Π½Π³ΠΎ ΠΏΡΠΎΡΠ΅ΠΊΡΠ°.
sudo ausearch -m AVC
ΠΠ΅ΡΠΈΠ»ΠΎ!
ΠΠΎΡΠ°Π²ΠΈΠΎ ΡΠ΅ ΡΠ°Π΄Π½ΠΈ ΠΡΠ°Π½Π³ΠΎ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΡΠ° ΡΡΠΎΠ½ΡΠ΅Π½Π΄ΠΎΠΌ Π·Π°ΡΠ½ΠΎΠ²Π°Π½ΠΈΠΌ Π½Π° ΠΠ³ΠΈΠ½ΠΊ-Ρ ΠΈ ΠΡΠ½ΠΈΡΠΎΡΠ½ ΠΠ‘ΠΠ. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π»ΠΈ ΡΠΌΠΎ ΠΠΈΡΡ
ΠΎΠ½ 3 ΠΈ ΠΠΎΡΡΠ³ΡΠ΅Π‘ΠΠ 10 ΠΈΠ· Π Π₯ΠΠ 8 ΠΠ΅ΡΠ° ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ°. Π‘Π°Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΡΡΠ°Π²ΠΈΡΠ΅ Π΄Π°ΡΠ΅ ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ (ΠΈΠ»ΠΈ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅) ΠΡΠ°Π½Π³ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΈΠ»ΠΈ ΠΈΡΡΡΠ°ΠΆΠΈΡΠ΅ Π΄ΡΡΠ³Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π΅ Π°Π»Π°ΡΠ΅ Ρ Π Π₯ΠΠ 8 ΠΠ΅ΡΠ° Π΄Π° Π±ΠΈΡΡΠ΅ Π°ΡΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΠΏΡΠΎΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅, ΠΏΠΎΠ±ΠΎΡΡΠ°Π»ΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°ΠΊ ΡΠΏΡΠ΅ΠΌΠΈΠ»ΠΈ ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ.
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ
Π°Π±Ρ.ΡΠΎΠΌ