рдХрд╛рд░реНрдпрд╢рд╛рд│рд╛ RHEL 8 рдмреАрдЯрд╛: рдХрд╛рд░реНрдпрд░рдд рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХрд░рдгреЗ

RHEL 8 рдмреАрдЯрд╛ рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдирд╛ рдЕрдиреЗрдХ рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдСрдлрд░ рдХрд░рддреЛ, рдЬреНрдпрд╛рдЪреА рд╕реВрдЪреА рдкреГрд╖реНрдареЗ рдШреЗрдК рд╢рдХрддреЗ, рддрдерд╛рдкрд┐, рдирд╡реАрди рдЧреЛрд╖реНрдЯреА рд╢рд┐рдХрдгреЗ рдиреЗрд╣рдореАрдЪ рдЪрд╛рдВрдЧрд▓реЗ рдЕрд╕рддреЗ, рдореНрд╣рдгреВрди рдЦрд╛рд▓реА рдЖрдореНрд╣реА Red Hat Enterprise Linux 8 Beta рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╡рд░ рдХрд╛рд░реНрдпрд╢рд╛рд│рд╛ рджреЗрдК рдХрд░рддреЛ.

рдХрд╛рд░реНрдпрд╢рд╛рд│рд╛ RHEL 8 рдмреАрдЯрд╛: рдХрд╛рд░реНрдпрд░рдд рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХрд░рдгреЗ

Django рдЖрдгрд┐ PostgreSQL рдЪреЗ рд╕рдВрдпреЛрдЬрди, рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдореНрдмрд┐рдиреЗрд╢рди, рдЖрдгрд┐ RHEL 8 рдмреАрдЯрд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рдпрд╛, рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдордзреНрдпреЗ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдкрд╛рдпрдереЙрди рдШреЗрдК. рдордЧ рдЖрдореНрд╣реА рдЖрдгрдЦреА рдХрд╛рд╣реА (рдЕрд╡рд░реНрдЧреАрдХреГрдд) рдШрдЯрдХ рдЬреЛрдбреВ.

рдЪрд╛рдЪрдгреА рд╡рд╛рддрд╛рд╡рд░рдг рдмрджрд▓реЗрд▓, рдХрд╛рд░рдг рдСрдЯреЛрдореЗрд╢рдирдЪреНрдпрд╛ рд╢рдХреНрдпрддрд╛рдВрдЪрд╛ рд╢реЛрдз рдШреЗрдгреЗ, рдХрдВрдЯреЗрдирд░рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЖрдгрд┐ рдПрдХрд╛рдзрд┐рдХ рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреЗ рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ. рдирд╡реАрди рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рд╣рд╛рддрд╛рдиреЗ рдПрдХ рд▓рд╣рд╛рди, рд╕рд╛рдзрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рддрдпрд╛рд░ рдХрд░реВрди рдкреНрд░рд╛рд░рдВрдн рдХрд░реВ рд╢рдХрддрд╛ рдЬреЗрдгреЗрдХрд░реБрди рдЖрдкрдг рдиреЗрдордХреЗ рдХрд╛рдп рдШрдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рдХрд╕реЗ рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрддреЗ рддреЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдирдВрддрд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЖрдгрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреБрдвреЗ рдЬрд╛. рдЖрдЬ рдЖрдкрдг рдЕрд╢рд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрдЪреНрдпрд╛ рдирд┐рд░реНрдорд┐рддреАрдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд.

рдЪрд▓рд╛ RHEL 8 рдмреАрдЯрд╛ VM рдкреНрд░рддрд┐рдорд╛ рддреИрдирд╛рдд рдХрд░реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛. рддреБрдореНрд╣реА рд╕реБрд░рд╡рд╛рддреАрдкрд╛рд╕реВрди рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ рд╢рдХрддрд╛, рдХрд┐рдВрд╡рд╛ рддреБрдордЪреНрдпрд╛ рдмреАрдЯрд╛ рд╕рдмрд╕реНрдХреНрд░рд┐рдкреНрд╢рдирд╕рд╣ рдЙрдкрд▓рдмреНрдз KVM рдЕрддрд┐рдереА рдкреНрд░рддрд┐рдорд╛ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛. рдЕрддрд┐рдереА рдкреНрд░рддрд┐рдорд╛ рд╡рд╛рдкрд░рддрд╛рдирд╛, рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рд╕реАрдбреА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓ рдЬреНрдпрд╛рдордзреНрдпреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЖрдгрд┐ рдХреНрд▓рд╛рдЙрдб рдЗрдирд┐рдЯрд▓рд╛рдпрдЭреЗрд╢рди (рдХреНрд▓рд╛рдЙрдб-рдЗрдирд┐рдЯ) рд╕рд╛рдареА рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдЕрд╕реЗрд▓. рддреБрдореНрд╣рд╛рд▓рд╛ рдбрд┐рд╕реНрдХ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд┐рдВрд╡рд╛ рдЙрдкрд▓рдмреНрдз рдкреЕрдХреЗрдЬреЗрд╕рд╕рд╣ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд╣реА рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА; рдХреЛрдгрддреАрд╣реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрд░реЗрд▓.

рдЪрд▓рд╛ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХреНрд░рд┐рдпреЗрд╡рд░ рдмрд╛рд░рдХрд╛рдИрдиреЗ рдирдЬрд░ рдЯрд╛рдХреВрдпрд╛.

Django рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдд рдЖрд╣реЗ

Django рдЪреНрдпрд╛ рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреАрд╕рд╣, рддреБрдореНрд╣рд╛рд▓рд╛ Python 3.5 рдХрд┐рдВрд╡рд╛ рдирдВрддрд░рдЪреЗ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг (virtualenv) рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓. рдмреАрдЯрд╛ рдиреЛрдЯреНрд╕рдордзреНрдпреЗ рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдХреА рдкрд╛рдпрдерди 3.6 рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ, рд╣реЗ рдЦрд░рдВрдЪ рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕реВрдпрд╛:

[cloud-user@8beta1 ~]$ python
-bash: python: command not found
[cloud-user@8beta1 ~]$ python3
-bash: python3: command not found

Red Hat рд╕рдХреНрд░рд┐рдпрдкрдгреЗ RHEL рдордзреНрдпреЗ Python рд▓рд╛ рд╕рд┐рд╕реНрдЯреАрдо рдЯреВрд▓рдХрд┐рдЯ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рддреЗ, рдордЧ рдпрд╛рдЪрд╛ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╣реЛрддреЛ?

рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдЕрдиреЗрдХ рдкрд╛рдпрдерди рд╡рд┐рдХрд╕рдХ рдЕрдЬреВрдирд╣реА рдкрд╛рдпрдерди 2 рд╡рд░реВрди рдкрд╛рдпрдерди 2 рдордзреНрдпреЗ рд╕рдВрдХреНрд░рдордгрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдд рдЖрд╣реЗрдд, рддрд░ рдкрд╛рдпрдерди 3 рд╕реНрд╡рддрдГ рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕рд╛рдзреАрди рдЖрд╣реЗ рдЖрдгрд┐ рдЕрдзрд┐рдХрд╛рдзрд┐рдХ рдирд╡реАрди рдЖрд╡реГрддреНрддреНрдпрд╛ рд╕рддрдд рджрд┐рд╕рдд рдЖрд╣реЗрдд. рдореНрд╣рдгреВрди, рдкрд╛рдпрдердирдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рдирд╡реАрди рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рддрд╛рдирд╛ рд╕реНрдерд┐рд░ рдкреНрд░рдгрд╛рд▓реА рд╕рд╛рдзрдирд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╕рд┐рд╕реНрдЯрдо рдкрд╛рдпрдердирд▓рд╛ рдирд╡реАрди рдкреЕрдХреЗрдЬрдордзреНрдпреЗ рд╣рд▓рд╡рд┐рдгреНрдпрд╛рдд рдЖрд▓реЗ рдЖрдгрд┐ Python 2.7 рдЖрдгрд┐ 3.6 рджреЛрдиреНрд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХреЗрд▓реА. рдмрджрд▓ рдЖрдгрд┐ рддреЗ рдХрд╛ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреА рдордзреАрд▓ рдкреНрд░рдХрд╛рд╢рдирд╛рдд рдЖрдврд│реВ рд╢рдХрддреЗ рд▓рдБрдЧрдбрди рд╡реНрд╣рд╛рдИрдЯрдЪрд╛ рдмреНрд▓реЙрдЧ (рд▓реЕрдВрдЧрдбрди рд╡реНрд╣рд╛рдЗрдЯ).

рддрд░, рдкрд╛рдпрдердирд╡рд░ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рджреЛрди рдкреЕрдХреЗрдЬреЗрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ python3-pip рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдореНрд╣рдгреВрди рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ.

sudo yum install python36 python3-virtualenv

рд▓реЕрдВрдЧрдбрдирдЪреНрдпрд╛ рд╕реВрдЪрдиреЗрдиреБрд╕рд╛рд░ рдбрд╛рдпрд░реЗрдХреНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓реНрд╕ рдХрд╛ рд╡рд╛рдкрд░реВ рдирдпреЗрдд рдЖрдгрд┐ pip3 рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд╛ рдХрд░реВ рдирдпреЗ? рдЖрдЧрд╛рдореА рдСрдЯреЛрдореЗрд╢рди рд▓рдХреНрд╖рд╛рдд рдШреЗрдКрди, рд╣реЗ рдЬреНрдЮрд╛рдд рдЖрд╣реЗ рдХреА Ansible рд▓рд╛ рдЪрд╛рд▓рдгреНрдпрд╛рд╕рд╛рдареА pip рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдХрд╛рд░рдг pip рдореЙрдбреНрдпреВрд▓ рдХрд╕реНрдЯрдо pip рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓рд╕рд╣ virtualenvs рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА.

рддреБрдордЪреНрдпрд╛ рд╡рд┐рд▓реНрд╣реЗрд╡рд╛рдЯреАрд╡рд░ рдХрд╛рд░реНрдпрд░рдд python3 рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░рд╕рд╣, рддреБрдореНрд╣реА Django рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдареЗрд╡реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ рдЗрддрд░ рдШрдЯрдХрд╛рдВрд╕рд╣ рдПрдХ рдХрд╛рд░реНрдпрд░рдд рдкреНрд░рдгрд╛рд▓реА рджреЗрдЦреАрд▓ рдареЗрд╡реВ рд╢рдХрддрд╛. рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рдЕрдиреЗрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдкрд░реНрдпрд╛рдп рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд. рдпреЗрдереЗ рдПрдХ рдЖрд╡реГрддреНрддреА рд╕рд╛рджрд░ рдХреЗрд▓реА рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╡рд╛рдкрд░рдХрд░реНрддреЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛рдд.

рдЖрдореНрд╣реА Yum рд╡рд╛рдкрд░реВрди RHEL 8 рдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз PostgreSQL рдЖрдгрд┐ Nginx рдЖрд╡реГрддреНрддреНрдпрд╛ рдмрд╛рдп рдбреАрдлреЙрд▓реНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ.

sudo yum install nginx postgresql-server

PostgreSQL рд▓рд╛ psycopg2 рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓, рдкрд░рдВрддреБ рддреЗ рдлрдХреНрдд virtualenv рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдЙрдкрд▓рдмреНрдз рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рддреЗ Django рдЖрдгрд┐ Gunicorn рд╕реЛрдмрдд pip3 рд╡рд╛рдкрд░реВрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ. рдкрд░рдВрддреБ рдкреНрд░рдердо рдЖрдкрд▓реНрдпрд╛рд▓рд╛ virtualenv рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдЬреЕрдВрдЧреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдЬрд╛рдЧрд╛ рдирд┐рд╡рдбрдгреНрдпрд╛рдЪреНрдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдиреЗрд╣рдореАрдЪ рдмрд░реЗрдЪ рд╡рд╛рджрд╡рд┐рд╡рд╛рдж рд╣реЛрддрд╛рдд, рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ рд╢рдВрдХрд╛ рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдиреЗрд╣рдореА рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рд╣рд╛рдпрд░рд╛рд░реНрдХреА рд╕реНрдЯрдБрдбрд░реНрдбрдХрдбреЗ рд╡рд│реВ рд╢рдХрддрд╛. рд╡рд┐рд╢реЗрд╖рдд:, FHS рдореНрд╣рдгрддреЗ рдХреА /srv рдЪрд╛ рд╡рд╛рдкрд░ рдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рддреЛ: "рд╣реЛрд╕реНрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреЗтАФрд╕рд┐рд╕реНрдЯрдо рддрдпрд╛рд░ рдХрд░рдд рдЕрд╕рд▓реЗрд▓рд╛ рдбреЗрдЯрд╛, рдЬрд╕реЗ рдХреА рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рдбреЗрдЯрд╛ рдЖрдгрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕, FTP рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдбреЗрдЯрд╛ рдЖрдгрд┐ рд╕рд┐рд╕реНрдЯрдо рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреЗ." рдЖрд╡реГрддреНрддреНрдпрд╛ (FHS рдордзреНрдпреЗ рджрд┐рд╕рддрд╛рдд. -2.3 2004)."

рд╣реЗ рдЖрдордЪреЗ рдкреНрд░рдХрд░рдг рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯ /srv рдордзреНрдпреЗ рдареЗрд╡рддреЛ, рдЬреА рдЖрдордЪреНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдорд╛рд▓рдХреАрдЪреА рдЖрд╣реЗ (рдХреНрд▓рд╛рдЙрдб-рд╡рд╛рдкрд░рдХрд░реНрддрд╛).

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

PostgreSQL рдЖрдгрд┐ Django рд╕реЗрдЯ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ: рдбреЗрдЯрд╛рдмреЗрд╕ рддрдпрд╛рд░ рдХрд░рд╛, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддрдпрд╛рд░ рдХрд░рд╛, рдкрд░рд╡рд╛рдирдЧреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛. рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ PostgreSQL рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛рдирд╛ рдПрдХ рдЧреЛрд╖реНрдЯ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд▓реА рдкрд╛рд╣рд┐рдЬреЗ рддреА рдореНрд╣рдгрдЬреЗ postgresql-setup рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреА postgresql-server рдкреЕрдХреЗрдЬрд╕рд╣ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ. рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреБрдореНрд╣рд╛рд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдЕреЕрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрд╢рдирд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдореВрд▓рднреВрдд рдХрд╛рд░реНрдпреЗ рдХрд░рдгреНрдпрд╛рд╕ рдорджрдд рдХрд░рддреЗ, рдЬрд╕реЗ рдХреА рдХреНрд▓рд╕реНрдЯрд░ рдЗрдирд┐рд╢рд┐рдПрд▓рд╛рдпрдЭреЗрд╢рди рдХрд┐рдВрд╡рд╛ рдЕрдкрдЧреНрд░реЗрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛. RHEL рдкреНрд░рдгрд╛рд▓реАрд╡рд░ рдирд╡реАрди PostgreSQL рдЙрджрд╛рд╣рд░рдг рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд╛рд╡реА рд▓рд╛рдЧреЗрд▓:

sudo /usr/bin/postgresql-setup -initdb

рддреНрдпрд╛рдирдВрддрд░ рддреБрдореНрд╣реА systemd рд╡рд╛рдкрд░реВрди PostgreSQL рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддрд╛, рдбреЗрдЯрд╛рдмреЗрд╕ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ Django рдордзреНрдпреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛. рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕рд╛рдареА рдкрд╛рд╕рд╡рд░реНрдб рд╕реНрдЯреЛрд░реЗрдЬ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреНрд▓рд╛рдпрдВрдЯ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓рдордзреНрдпреЗ (рд╕рд╛рдорд╛рдиреНрдпрдд: pg_hba.conf) рдмрджрд▓ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ PostgreSQL рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдгреНрдпрд╛рдЪреЗ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛. рддреБрдореНрд╣рд╛рд▓рд╛ рдЗрддрд░ рдЕрдбрдЪрдгреА рдЖрд▓реНрдпрд╛рд╕, pg_hba.conf рдлрд╛рдЗрд▓рдордзреАрд▓ IPv4 рдЖрдгрд┐ IPv6 рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдмрджрд▓рдгреНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛.

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

рдлрд╛рдЗрд▓ /var/lib/pgsql/data/pg_hba.conf рдордзреНрдпреЗ:

# IPv4 local connections:
host    all        all 0.0.0.0/0                md5
# IPv6 local connections:
host    all        all ::1/128                 md5

рдлрд╛рдЗрд▓ /srv/djangoapp/settings.py рдордзреНрдпреЗ:

# Database
DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.postgresql_psycopg2',
       'NAME': '{{ db_name }}',
       'USER': '{{ db_user }}',
       'PASSWORD': '{{ db_password }}',
       'HOST': '{{ db_host }}',
   }
}

рдкреНрд░рдХрд▓реНрдкрд╛рддреАрд▓ settings.py рдлрд╛рдЗрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡реНрд╣рд░ рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддрд╛. рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡реНрд╣рд░ рд╕реБрд░реВ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдбреЗрдЯрд╛рдмреЗрд╕рд╢реА рдХрдиреЗрдХреНрд╢рди рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╢рд╛рд╕рдХ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЪрд╛рдВрдЧрд▓реА рдХрд▓реНрдкрдирд╛ рдЖрд╣реЗ.

./manage.py runserver 0.0.0.0:8000
./manage.py createsuperuser

WSGI? рд╡рд╛рдИ?

рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рд╕рд░реНрд╡реНрд╣рд░ рдЪрд╛рдЪрдгреАрд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рдЧреЗрдЯрд╡реЗ рдЗрдВрдЯрд░рдлреЗрд╕ (WSGI) рд╕рд╛рдареА рдпреЛрдЧреНрдп рд╕рд░реНрд╡реНрд╣рд░ рдЖрдгрд┐ рдкреНрд░реЙрдХреНрд╕реА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЕрдиреЗрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдпреЛрдЬрдиреЗ рдЖрд╣реЗрдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, uWSGI рд╕рд╣ Apache HTTPD рдХрд┐рдВрд╡рд╛ Gunicorn рд╕рд╣ Nginx.

рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рдЧреЗрдЯрд╡реЗ рдЗрдВрдЯрд░рдлреЗрд╕рдЪреЗ рдХрд╛рдо рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░рдХрдбреВрди рдкрд╛рдпрдерди рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХрд╡рд░ рд╡рд┐рдирдВрддреНрдпрд╛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдгреЗ рдЖрд╣реЗ. рдбрдмреНрд▓реНрдпреВрдПрд╕рдЬреАрдЖрдп рд╣реЗ рднрдпрдВрдХрд░ рднреВрддрдХрд╛рд│рд╛рддреАрд▓ рдПрдХ рдЕрд╡рд╢реЗрд╖ рдЖрд╣реЗ рдЬреЗрд╡реНрд╣рд╛ рд╕реАрдЬреАрдЖрдп рдЗрдВрдЬрд┐рди рдЖрдЬреВрдмрд╛рдЬреВрд▓рд╛ рд╣реЛрддреЗ рдЖрдгрд┐ рдЖрдЬ рдбрдмреНрд▓реНрдпреВрдПрд╕рдЬреАрдЖрдп рд╣реЗ рдбреА рдлреЕрдХреНрдЯреЛ рдорд╛рдирдХ рдЖрд╣реЗ, рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рдХрд┐рдВрд╡рд╛ рдкрд╛рдпрдерди рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд╛рдкрд░рд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп. рдкрд░рдВрддреБ рддреНрдпрд╛рдЪрд╛ рд╡реНрдпрд╛рдкрдХ рд╡рд╛рдкрд░ рдЕрд╕реВрдирд╣реА, рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдирд╛ рдЕрдЬреВрдирд╣реА рдЕрдиреЗрдХ рдмрд╛рд░рдХрд╛рд╡реЗ рдЖрдгрд┐ рдЕрдиреЗрдХ рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдореНрд╣реА рд╕реЙрдХреЗрдЯрджреНрд╡рд╛рд░реЗ рдЧреБрдирд┐рдХреЙрд░реНрди рдЖрдгрд┐ рдПрдирдЬреАрдирдХреНрд╕ рдпрд╛рдВрдЪреНрдпрд╛рдд рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ.

рд╣реЗ рджреЛрдиреНрд╣реА рдШрдЯрдХ рдПрдХрд╛рдЪ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдиреЗрдЯрд╡рд░реНрдХ рд╕реЙрдХреЗрдЯрдРрд╡рдЬреА UNIX рд╕реЙрдХреЗрдЯ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛. рд╕рдВрдкреНрд░реЗрд╖рдгрд╛рд╕рд╛рдареА рдХреЛрдгрддреНрдпрд╛рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рд╕реЙрдХреЗрдЯрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЪрд▓рд╛ рдЖрдгрдЦреА рдПрдХ рдкрд╛рдКрд▓ рдЯрд╛рдХрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛ рдЖрдгрд┐ рд╕рд┐рд╕реНрдЯрдордб рджреНрд╡рд╛рд░реЗ рдЧреБрдирд┐рдХреЙрд░реНрдирд╕рд╛рдареА рд╕реЙрдХреЗрдЯ рд╕рдХреНрд░рд┐рдпрдХрд░рдг рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВрдпрд╛.

рд╕реЙрдХреЗрдЯ рд╕рдХреНрд░рд┐рдп рд╕реЗрд╡рд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдЧрджреА рд╕реЛрдкреА рдЖрд╣реЗ. рдкреНрд░рдердо, рдПрдХ рдпреБрдирд┐рдЯ рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддреЗ рдЬреНрдпрд╛рдордзреНрдпреЗ UNIX рд╕реЙрдХреЗрдЯ рдЬреНрдпрд╛ рдмрд┐рдВрджреВрд╡рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ рддреНрдпрд╛ рдмрд┐рдВрджреВрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рдгрд╛рд░реЗ ListenStream рдирд┐рд░реНрджреЗрд╢ рдЕрд╕рддрд╛рдд, рддреНрдпрд╛рдирдВрддрд░ рд╕реЗрд╡реЗрд╕рд╛рдареА рдПрдХ рдпреБрдирд┐рдЯ рдлрд╛рдЗрд▓ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрджреЗрд╢ рд╕реЙрдХреЗрдЯ рдпреБрдирд┐рдЯ рдлрд╛рдЗрд▓рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрд▓. рддреНрдпрд╛рдирдВрддрд░, рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдпреБрдирд┐рдЯ рдлрд╛рдЗрд▓рдордзреНрдпреЗ, рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рддреВрди рдЧреБрдирд┐рдХреЙрд░реНрдирд▓рд╛ рдХреЙрд▓ рдХрд░рдгреЗ рдЖрдгрд┐ UNIX рд╕реЙрдХреЗрдЯ рдЖрдгрд┐ рдЬреЕрдВрдЧреЛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА WSGI рдмрдВрдзрдирдХрд╛рд░рдХ рддрдпрд╛рд░ рдХрд░рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ.

рдпреЗрдереЗ рдпреБрдирд┐рдЯ рдлрд╛рдЗрд▓реНрд╕рдЪреА рдХрд╛рд╣реА рдЙрджрд╛рд╣рд░рдгреЗ рдЖрд╣реЗрдд рдЬреА рддреБрдореНрд╣реА рдЖрдзрд╛рд░ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛. рдкреНрд░рдердо рдЖрдореНрд╣реА рд╕реЙрдХреЗрдЯ рд╕реЗрдЯ рдХрд░рддреЛ.

[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

Nginx рд╕рд╛рдареА, рдкреНрд░реЙрдХреНрд╕реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдпрд▓реА рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рдЖрдкрдг рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕ рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗрдЯ рдХрд░рдгреЗ рд╣реА рдПрдХ рд╕рд╛рдзреА рдмрд╛рдм рдЖрд╣реЗ. RHEL рдордзреНрдпреЗ, Nginx рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕ /etc/nginx/conf.d рдордзреНрдпреЗ рд╕реНрдерд┐рдд рдЖрд╣реЗрдд. рддреБрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдЙрджрд╛рд╣рд░рдг /etc/nginx/conf.d/default.conf рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдХреЙрдкреА рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рд╕реЗрд╡рд╛ рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддрд╛. рддреБрдордЪреНрдпрд╛ рд╣реЛрд╕реНрдЯ рдирд╛рд╡рд╛рд╢реА рдЬреБрд│рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡реНрд╣рд░_рдирд╛рд╡ рд╕реЗрдЯ рдХреЗрд▓реНрдпрд╛рдЪреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рд╛.

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;
   }
}

Systemd рд╡рд╛рдкрд░реВрди Gunicorn рд╕реЙрдХреЗрдЯ рдЖрдгрд┐ Nginx рд╕реБрд░реВ рдХрд░рд╛ рдЖрдгрд┐ рддреБрдореНрд╣реА рдЪрд╛рдЪрдгреА рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдЖрд╣рд╛рдд.

рдЦрд░рд╛рдм рдЧреЗрдЯрд╡реЗ рддреНрд░реБрдЯреА?

рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдкрддреНрддрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реНрдпрд╛рд╕, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдмрд╣реБрдзрд╛ 502 рдЦрд░рд╛рдм рдЧреЗрдЯрд╡реЗ рддреНрд░реБрдЯреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдИрд▓. рд╣реЗ рдЪреБрдХреАрдЪреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ UNIX рд╕реЙрдХреЗрдЯ рдкрд░рд╡рд╛рдирдЧреНрдпрд╛рдВрдореБрд│реЗ рд╣реЛрдК рд╢рдХрддреЗ, рдХрд┐рдВрд╡рд╛ рддреЗ SELinux рдордзреАрд▓ рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдгрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛рдВрдореБрд│реЗ рдЕрд╕реВ рд╢рдХрддреЗ.

nginx рддреНрд░реБрдЯреА рд▓реЙрдЧрдордзреНрдпреЗ рдЖрдкрдг рдпрд╛рд╕рд╛рд░рдЦреА рдПрдХ рдУрд│ рдкрд╛рд╣реВ рд╢рдХрддрд╛:

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

рд╣реЗ рдХрд╛ рдШрдбрддреЗ рддреЗ рд╢реЛрдзреВрдпрд╛. рддреБрдореНрд╣реА рд▓реЙрдЧ рдЙрдШрдбрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдмрд╣реБрдзрд╛ рд╕рдорд╕реНрдпрд╛ SELinux рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реЗрд▓. рдЖрдореНрд╣реА рдПрдХ рдбрд┐рдорди рдЪрд╛рд▓рд╡рдд рдЖрд╣реЛрдд рдЬреНрдпрд╛рд╕рд╛рдареА рдХреЛрдгрддреЗрд╣реА рдзреЛрд░рдг рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА, рддреЗ init_t рдореНрд╣рдгреВрди рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. рдЪрд▓рд╛ рдпрд╛ рд╕рд┐рджреНрдзрд╛рдВрддрд╛рдЪреА рдкреНрд░рддреНрдпрдХреНрд╖ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдЪрд╛рдЪрдгреА рдХрд░реВрдпрд╛.

sudo setenforce 0

рдпрд╛ рд╕рд░реНрд╡рд╛рдВрдореБрд│реЗ рдЯреАрдХрд╛ рдЖрдгрд┐ рд░рдХреНрддрд╛рдЪреЗ рдЕрд╢реНрд░реВ рд╣реЛрдК рд╢рдХрддрд╛рдд, рдкрд░рдВрддреБ рд╣реЗ рдлрдХреНрдд рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдбреАрдмрдЧ рдХрд░рдд рдЖрд╣реЗ. рд╣реА рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЪреЗрдХ рдЕрдХреНрд╖рдо рдХрд░реВрдпрд╛, рддреНрдпрд╛рдирдВрддрд░ рдЖрдореНрд╣реА рд╕рд░реНрд╡рдХрд╛рд╣реА рддреНрдпрд╛рдЪреНрдпрд╛ рдЬрд╛рдЧреА рдкрд░рдд рдХрд░реВ.

рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рдкреГрд╖реНрда рд░реАрдлреНрд░реЗрд╢ рдХрд░реВрди рдХрд┐рдВрд╡рд╛ рдЖрдордЪреА рдХрд░реНрд▓ рдХрдорд╛рдВрдб рдкреБрдиреНрд╣рд╛ рдЪрд╛рд▓рд╡реВрди, рддреБрдореНрд╣реА рдЬреЕрдВрдЧреЛ рдЪрд╛рдЪрдгреА рдкреГрд╖реНрда рдкрд╛рд╣реВ рд╢рдХрддрд╛.

рдореНрд╣рдгреВрди, рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдХрд░рддреЗ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░реВрди рдШреЗрддрд▓реНрдпрд╛рдирдВрддрд░ рдЖрдгрд┐ рдкрд░рд╡рд╛рдирдЧреАрдЪреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдирд╛рд╣реАрдд, рдЖрдореНрд╣реА SELinux рдкреБрдиреНрд╣рд╛ рд╕рдХреНрд╖рдо рдХрд░рддреЛ.

sudo setenforce 1

рдореА рдпреЗрдереЗ sepolgen рд╕рд╣ audit2allow рдХрд┐рдВрд╡рд╛ рдЕрд▓рд░реНрдЯ-рдЖрдзрд╛рд░рд┐рдд рдзреЛрд░рдгреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓рдгрд╛рд░ рдирд╛рд╣реА, рдХрд╛рд░рдг рдпрд╛рдХреНрд╖рдгреА рдХреЛрдгрддреЗрд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ Django рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд╛рд╣реА, рддреНрдпрд╛рдореБрд│реЗ Gunicorn рд▓рд╛ рдХрд╛рдп рдНрдХреНрд╕реЗрд╕ рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рдХрд╛рдп рдНрдХреНрд╕реЗрд╕ рдирд╛рдХрд╛рд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ рдпрд╛рдЪрд╛ рдкреВрд░реНрдг рдирдХрд╛рд╢рд╛ рдирд╛рд╣реА. рдореНрд╣рдгреВрди, рд╕рд┐рд╕реНрдЯреАрдордЪреЗ рд╕рдВрд░рдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА SELinux рдЪрд╛рд▓реВ рдареЗрд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рддреНрдпрд╛рдЪрд╡реЗрд│реА рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд▓рд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕ рдЖрдгрд┐ рдСрдбрд┐рдЯ рд▓реЙрдЧрдордзреНрдпреЗ рд╕рдВрджреЗрд╢ рд╕реЛрдбрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗрдгреЗрдХрд░реБрди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдзреЛрд░рдг рддреНрдпрд╛рдВрдЪреНрдпрд╛рдкрд╛рд╕реВрди рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХреЗрд▓.

рдкрд░рд╡рд╛рдирдЧреА рджреЗрдгрд╛рд░реА рдбреЛрдореЗрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдд рдЖрд╣реЗ

рдкреНрд░рддреНрдпреЗрдХрд╛рдиреЗ SELinux рдордзреАрд▓ рдЕрдиреБрдордд рдбреЛрдореЗрдирдмрджреНрджрд▓ рдРрдХрд▓реЗ рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреЗ рдХрд╛рд╣реА рдирд╡реАрди рдирд╛рд╣реАрдд. рдЕрдиреЗрдХрд╛рдВрдиреА рдирдХрд│рддрд╣реА рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕реЛрдмрдд рдХрд╛рдо рдХреЗрд▓реЗ. рдСрдбрд┐рдЯ рдореЗрд╕реЗрдЬрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдкреЙрд▓рд┐рд╕реА рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реА рдкреЙрд▓рд┐рд╕реА рдирд┐рд░рд╛рдХрд░рдг рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЛрдореЗрдирдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ. рдЪрд▓рд╛ рдПрдХ рд╕рд╛рдзреА рдкрд░рд╡рд╛рдирдЧреА рдзреЛрд░рдг рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛.

Gunicorn рд╕рд╛рдареА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдордд рдбреЛрдореЗрди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреЗ рдзреЛрд░рдг рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдпреЛрдЧреНрдп рдлрд╛рдпрд▓реА рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХрд░рдгреЗ рджреЗрдЦреАрд▓ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдирд╡реАрди рдзреЛрд░рдгреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рдзрдиреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд.

sudo yum install selinux-policy-devel

рдЕрдиреБрдордд рдбреЛрдореЗрди рдпрдВрддреНрд░рдгрд╛ рд╕рдорд╕реНрдпрд╛ рдУрд│рдЦрдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЙрддреНрддрдо рд╕рд╛рдзрди рдЖрд╣реЗ, рд╡рд┐рд╢реЗрд╖рдд: рдЬреЗрд╡реНрд╣рд╛ рд╕рд╛рдиреБрдХреВрд▓ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рдВрд╡рд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдЬреЗ рдЖрдзреАрдкрд╛рд╕реВрди рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдзреЛрд░рдгрд╛рдВрд╢рд┐рд╡рд╛рдп рдкрд╛рдард╡рд▓реЗ рдЬрд╛рддрд╛рдд рддреЗрд╡реНрд╣рд╛. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, Gunicorn рд╕рд╛рдареА рдЕрдиреБрдордд рдбреЛрдореЗрди рдзреЛрд░рдг рд╢рдХреНрдп рддрд┐рддрдХреЗ рд╕реЛрдкреЗ рдЕрд╕реЗрд▓ - рдПрдХ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд░рд╛ (gunicorn_t), рдПрдХ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд░рд╛ рдЬреЛ рдЖрдореНрд╣реА рдПрдХрд╛рдзрд┐рдХ рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓реНрд╕ (gunicorn_exec_t) рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд, рдЖрдгрд┐ рдирдВрддрд░ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА рд╕рдВрдХреНрд░рдордг рд╕реЗрдЯ рдХрд░рд╛. рдЪрд╛рд▓реВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реЗрд╡рдЯрдЪреА рдУрд│ рдкреЙрд▓рд┐рд╕реА рд▓реЛрдб рдХрд░рддреЗрд╡реЗрд│реА рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╕рдХреНрд╖рдо рдХреЗрд▓реЗрд▓реА рд╕реЗрдЯ рдХрд░рддреЗ.

gunicorn.te:

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

SELinux рдЖрдкрд▓рд╛ рдЕрдЬреНрдЮрд╛рдд рдбрд┐рдорди рдЬреЗ рдНрдХреНрд╕реЗрд╕ рдХрд░рдд рдЖрд╣реЗ рддреНрдпрд╛ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд╣реАрддрд░реА рдмреНрд▓реЙрдХ рдХрд░рдд рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕реВрдпрд╛.

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

SELinux Nginx рд▓рд╛ Gunicorn рджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ UNIX рд╕реЙрдХреЗрдЯрд╡рд░ рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдкрд╛рд╕реВрди рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ. рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдЕрд╢рд╛ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рдзреЛрд░рдгреЗ рдмрджрд▓реВ рд▓рд╛рдЧрддрд╛рдд, рдкрд░рдВрддреБ рдкреБрдвреЗ рдЗрддрд░ рдЖрд╡реНрд╣рд╛рдиреЗ рдЕрд╕рддрд╛рдд. рддреБрдореНрд╣реА рдбреЛрдореЗрди рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдирд┐рд░реНрдмрдВрдз рдбреЛрдореЗрдирд╡рд░реВрди рдкрд░рд╡рд╛рдирдЧреА рдбреЛрдореЗрдирдордзреНрдпреЗ рдмрджрд▓реВ рд╢рдХрддрд╛. рдЖрддрд╛ httpd_t рдкрд░рд╡рд╛рдирдЧреА рдбреЛрдореЗрдирд╡рд░ рд╣рд▓рд╡реВ. рд╣реЗ Nginx рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╡реЗрд╢ рджреЗрдИрд▓ рдЖрдгрд┐ рдЖрдореНрд╣реА рдкреБрдвреАрд▓ рдбреАрдмрдЧрд┐рдВрдЧ рдХрд╛рд░реНрдп рд╕реБрд░реВ рдареЗрд╡реВ рд╢рдХрддреЛ.

sudo semanage permissive -a httpd_t

рддреНрдпрд╛рдореБрд│реЗ, рдПрдХрджрд╛ рддреБрдореНрд╣реА SELinux рд╕рдВрд░рдХреНрд╖рд┐рдд рдареЗрд╡рдгреНрдпрд╛рдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ (рддреБрдореНрд╣реА рдЦрд░реЛрдЦрд░ SELinux рдкреНрд░рдХрд▓реНрдк рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдореЛрдбрдордзреНрдпреЗ рд╕реЛрдбреВ рдирдпреЗ) рдЖрдгрд┐ рдкрд░рд╡рд╛рдирдЧреА рдбреЛрдореЗрди рд▓реЛрдб рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рд╕рд░реНрд╡рдХрд╛рд╣реА рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА gunicorn_exec_t рдореНрд╣рдгреВрди рдиреЗрдордХреЗ рдХрд╛рдп рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рд╣реЗ рд╢реЛрдзрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкреБрдиреНрд╣рд╛ рдкреНрд░рд╡реЗрд╢ рдирд┐рд░реНрдмрдВрдзрд╛рдВрдмрджреНрджрд▓ рдирд╡реАрди рд╕рдВрджреЗрд╢ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрдмрд╕рд╛рдЗрдЯрд▓рд╛ рднреЗрдЯ рджреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛.

sudo ausearch -m AVC -c gunicorn

рддреБрдореНрд╣рд╛рд▓рд╛ 'comm="gunicorn"' рдЕрд╕рд▓реЗрд▓реЗ рдмрд░реЗрдЪ рд╕рдВрджреЗрд╢ рджрд┐рд╕рддреАрд▓ рдЬреЗ /srv/djangoapp рдордзреАрд▓ рдлрд╛рдЗрд▓реНрд╕рд╡рд░ рд╡рд┐рд╡рд┐рдз рдЧреЛрд╖реНрдЯреА рдХрд░рддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ рд╣реЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдЖрджреЗрд╢рд╛рдВрдкреИрдХреА рдПрдХ рдЖрд╣реЗ.

рдкрд░рдВрддреБ рдпрд╛ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдпрд╛рд╕рд╛рд░рдЦрд╛ рд╕рдВрджреЗрд╢ рджрд┐рд╕реЗрд▓:

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

рддреБрдореНрд╣реА рдЧрдирд┐рдХреЙрд░реНрди рд╕реЗрд╡реЗрдЪреА рд╕реНрдерд┐рддреА рдкрд╛рд╣рд┐рд▓реНрдпрд╛рд╕ рдХрд┐рдВрд╡рд╛ ps рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдгрддреАрд╣реА рдЪрд╛рд▓реВ рдЕрд╕рд▓реЗрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджрд┐рд╕рдгрд╛рд░ рдирд╛рд╣реА. рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА gunicorn рдЖрдордЪреНрдпрд╛ virtualenv рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд Python рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЖрд╣реЗ, рд╢рдХреНрдпрддреЛ рд╡рд░реНрдХрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА. рддрд░ рдЖрддрд╛ рдпрд╛ рджреЛрди рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдлрд╛рдИрд▓реНрд╕ рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХрд░реВ рдЖрдгрд┐ рдЖрдкрдг рдЖрдордЪреЗ Django рдЪрд╛рдЪрдгреА рдкреГрд╖реНрда рдЙрдШрдбреВ рд╢рдХрддреЛ рдХрд╛ рддреЗ рддрдкрд╛рд╕реВ.

chcon -t gunicorn_exec_t /srv/djangoapp/django/bin/gunicorn /srv/djangoapp/django/bin/python3.6

рдирд╡реАрди рдЯреЕрдЧ рдирд┐рд╡рдбрдгреНрдпрд╛рдкреВрд░реНрд╡реА рдЧрдиреАрдХреЙрд░реНрди рд╕реЗрд╡рд╛ рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреБрдореНрд╣реА рддреЗ рддрд╛рдмрдбрддреЛрдм рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реВ рд╢рдХрддрд╛ рдХрд┐рдВрд╡рд╛ рд╕реЗрд╡рд╛ рдерд╛рдВрдмрд╡реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдмреНрд░рд╛рдЙрдЭрд░рдордзреНрдпреЗ рд╕рд╛рдЗрдЯ рдЙрдШрдбрддрд╛ рддреЗрд╡реНрд╣рд╛ рд╕реЙрдХреЗрдЯ рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддрд╛. ps рд╡рд╛рдкрд░реВрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдирд╛ рдпреЛрдЧреНрдп рд▓реЗрдмрд▓реЗ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реА рдЖрд╣реЗрдд рдпрд╛рдЪреА рдкрдбрддрд╛рд│рдгреА рдХрд░рд╛.

ps -efZ | grep gunicorn

рдирдВрддрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп SELinux рдкреЙрд▓рд┐рд╕реА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рд╡рд┐рд╕рд░реВ рдирдХрд╛!

рддреБрдореНрд╣реА рдЖрддрд╛ AVC рдореЗрд╕реЗрдЬ рдкрд╛рд╣рд┐рд▓реНрдпрд╛рд╕, рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдореЗрд╕реЗрдЬрдордзреНрдпреЗ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯреАрд╕рд╛рдареА permissive=1 рдЖрдгрд┐ рдЙрд░реНрд╡рд░рд┐рдд рд╕рд┐рд╕реНрдЯреАрдорд╕рд╛рдареА permissive=0 рдЖрд╣реЗ. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рд╕ рдХреЛрдгрддреНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдкреНрд░рд╡реЗрд╢рд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рдордЬрд▓реНрдпрд╛рд╕, рдЖрдкрдг рдЕрд╢рд╛ рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдорд╛рд░реНрдЧ рдкрдЯрдХрди рд╢реЛрдзреВ рд╢рдХрддрд╛. рдкрд░рдВрддреБ рддреЛрдкрд░реНрдпрдВрдд, рд╕рд┐рд╕реНрдЯрдо рд╕реБрд░рдХреНрд╖рд┐рдд рдареЗрд╡рдгреЗ рдЖрдгрд┐ Django рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рд╕реНрдкрд╖реНрдЯ, рд╡рд╛рдкрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдСрдбрд┐рдЯ рдХрд░рдгреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдЖрд╣реЗ.

sudo ausearch -m AVC

рдЭрд╛рд▓реЗ!

Nginx рдЖрдгрд┐ Gunicorn WSGI рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдлреНрд░рдВрдЯрдПрдВрдбрд╕рд╣ рдХрд╛рд░реНрдпрд░рдд Django рдкреНрд░рдХрд▓реНрдк рджрд┐рд╕рд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА RHEL 3 рдмреАрдЯрд╛ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬрдордзреВрди Python 10 рдЖрдгрд┐ PostgreSQL 8 рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ. рдЖрддрд╛ рддреБрдореНрд╣реА рдкреБрдвреЗ рдЬрд╛рдК рд╢рдХрддрд╛ рдЖрдгрд┐ Django рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ (рдХрд┐рдВрд╡рд╛ рдлрдХреНрдд рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░реВ рд╢рдХрддрд╛) рдХрд┐рдВрд╡рд╛ RHEL 8 рдмреАрдЯрд╛рдордзреНрдпреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рд╣реЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХрдВрдЯреЗрдирд░реАрдХреГрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЗрддрд░ рдЙрдкрд▓рдмреНрдз рд╕рд╛рдзрдиреЗ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░реВ рд╢рдХрддрд╛.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛