рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ RHEL 8 рдмрд┐рдЯрд╛: рдХрд╛рдо рдЧрд░реНрдиреЗ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ

RHEL 8 Beta рд▓реЗ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдзреЗрд░реИ рдирдпрд╛рдБ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рдЬрд╕рдХреЛ рд╕реВрдЪреАрд▓реЗ рдкреГрд╖реНрдард╣рд░реВ рд▓рд┐рди рд╕рдХреНрдЫ, рддрдерд╛рдкрд┐, рдирдпрд╛рдБ рдХреБрд░рд╛рд╣рд░реВ рд╕рд┐рдХреНрдиреБ рдЕрднреНрдпрд╛рд╕рдорд╛ рд╕рдзреИрдВ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рддрд▓ рд╣рд╛рдореА Red Hat Enterprise Linux 8 Beta рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реНрджрдЫреМрдВред

рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ RHEL 8 рдмрд┐рдЯрд╛: рдХрд╛рдо рдЧрд░реНрдиреЗ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИ

рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВ рдмреАрдЪрдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛ рдкрд╛рдЗрдердирд▓рд╛рдИ рдЖрдзрд╛рд░рдХреЛ рд░реВрдкрдорд╛, Django рд░ PostgreSQL рдХреЛ рд╕рдВрдпреЛрдЬрди, рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХрджрдо рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдпреЛрдЬрди, рд░ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди RHEL 8 Beta рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реМрдВред рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рдХреЗрд╣реА рдердк (рдЕрд╡рд░реНрдЧреАрдХреГрдд) рдЕрд╡рдпрд╡рд╣рд░реВ рдердкреНрдиреЗрдЫреМрдВред

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

RHEL 8 Beta 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 рдорд╛ рдкреНрд░рдгрд╛рд▓реА рдЯреБрд▓рдХрд┐рдЯрдХреЛ рд░реВрдкрдорд╛ рдкрд╛рдЗрдерди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рддреНрдпрд╕реЛрднрдП рдпреЛ рдкрд░рд┐рдгрд╛рдо рдХрд┐рди рдЖрдЙрдБрдЫ?

рддрдереНрдп рдпреЛ рд╣реЛ рдХрд┐ рдзреЗрд░реИ рдкрд╛рдЗрдерди рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдЕрдЭреИ рдкрдирд┐ рдкрд╛рдЗрдерди 2 рдмрд╛рдЯ рдкрд╛рдЗрдерди 2 рдорд╛ рд╕рдВрдХреНрд░рдордгрдХреЛ рдмрд╛рд░реЗрдорд╛ рд╡рд┐рдЪрд╛рд░ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреН, рдЬрдмрдХрд┐ рдкрд╛рдЗрдерди 3 рдЖрдлреИ рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдЕрдиреНрддрд░реНрдЧрдд рдЫ, рд░ рдЕрдзрд┐рдХ рд░ рдЕрдзрд┐рдХ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рд▓рдЧрд╛рддрд╛рд░ рджреЗрдЦрд╛ рдкрд░рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреНред рддрд╕рд░реНрде, рдкрд╛рдЗрдердирдХрд╛ рд╡рд┐рднрд┐рдиреНрди рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдЧрд░реНрджрд╛ рд╕реНрдерд┐рд░ рдкреНрд░рдгрд╛рд▓реА рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреВрд░рд╛ рдЧрд░реНрди, рдкреНрд░рдгрд╛рд▓реА рдкрд╛рдЗрдердирд▓рд╛рдИ рдирдпрд╛рдБ рдкреНрдпрд╛рдХреЗрдЬрдорд╛ рд╕рд╛рд░рд┐рдпреЛ рд░ рдкрд╛рдЗрдерди реи.рен рд░ рей.рем рджреБрд╡реИ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдпреЛред рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВ рдХрд┐рди рдЧрд░рд┐рдпреЛ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдердк рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдХрд╛рд╢рдирдорд╛ рдкрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ Langdon White рдХреЛ рдмреНрд▓рдЧ (Langdon White)ред

рддреНрдпрд╕реЛрднрдП, рдХрд╛рдо рдЧрд░реНрдиреЗ рдкрд╛рдЗрдерди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдХреЗрд╡рд▓ рджреБрдИ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, python3-pip рдирд┐рд░реНрднрд░рддрд╛рдХреЛ рд░реВрдкрдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реАред

sudo yum install python36 python3-virtualenv

рдХрд┐рди Langdon рд╕реБрдЭрд╛рд╡ рд░ pip3 рд╕реНрдерд╛рдкрдирд╛ рд░реВрдкрдорд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдореЛрдбреНрдпреБрд▓ рдХрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдирдЧрд░реНрдиреЗ? рдЖрдЧрд╛рдореА рд╕реНрд╡рдЪрд╛рд▓рдирд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИ, рдпреЛ рдЬреНрдЮрд╛рдд рдЫ рдХрд┐ Ansible рд▓рд╛рдИ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ pip рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдХрд┐рдирдХрд┐ pip рдореЛрдбреНрдпреБрд▓рд▓реЗ рдЕрдиреБрдХреВрд▓рди рдкрд╛рдЗрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдпрд╕рдБрдЧ virtualenvs рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджреИрдиред

рддрдкрд╛рдЗрдБрдХреЛ рдбрд┐рд╕реНрдкреЛрдЬрд▓рдорд╛ рдХрд╛рд░реНрдпрд░рдд рдкрд╛рдЗрдердирей рджреЛрднрд╛рд╖реЗ рд╕рдВрдЧ, рддрдкрд╛рдЗрдБ Django рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЧ рдЬрд╛рд░реА рд░рд╛рдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рд╣рд╛рдореНрд░реЛ рдЕрдиреНрдп рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реБ рд╕рдВрдЧ рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдЫред рдЗрдиреНрдЯрд░рдиреЗрдЯрдорд╛ рдзреЗрд░реИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЙрдкрд▓рдмреНрдз рдЫрдиреНред рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддреБрдд рдЧрд░рд┐рдПрдХреЛ рдПрдЙрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЫ, рддрд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдЖрдлреНрдиреИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред

рд╣рд╛рдореА Yum рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ RHEL 8 рдорд╛ рдЙрдкрд▓рдмреНрдз PostgreSQL рд░ Nginx рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВред

sudo yum install nginx postgresql-server

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

Django рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рд╕рд╣реА рдард╛рдЙрдБ рдЫрдиреМрдЯ рдЧрд░реНрдиреЗ рд╡рд┐рд╖рдпрдорд╛ рд╕рдзреИрдВ рдзреЗрд░реИ рдмрд╣рд╕ рд╣реБрдиреНрдЫ, рддрд░ рдЬрдм рд╢рдЩреНрдХрд╛рдорд╛, рддрдкрд╛рдИрдВ рд╕рдзреИрдВ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдкрджрд╛рдиреБрдХреНрд░рдо рдорд╛рдирдХрдорд╛ рдЬрд╛рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд╡рд┐рд╢реЗрд╖ рд░реВрдкрдорд╛, FHS рд▓реЗ рднрдиреНрдЫ рдХрд┐ /srv рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ: "рдкреНрд░рдгрд╛рд▓реАрд▓реЗ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдиреЗ рд╣реЛрд╕реНрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди, рдЬрд╕реНрддреИ рд╡реЗрдм рд╕рд░реНрднрд░ рдбрд╛рдЯрд╛ рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ, FTP рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛, рд░ рдкреНрд░рдгрд╛рд▓реА рднрдгреНрдбрд╛рд░рд╣рд░реВ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрдиред" рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ (FHS рдорд╛ рджреЗрдЦрд╛ рдкрд░реНрджрдЫред -реи.рей рд╕рдиреН реирежрежрек рдорд╛)ред"

рдпреЛ рдареНрдпрд╛рдХреНрдХреИ рд╣рд╛рдореНрд░реЛ рдорд╛рдорд▓рд╛ рд╣реЛ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╣рд┐рдиреЗ рд╕рдмреИ рдХреБрд░рд╛ /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ред

рд╡реЗрдм рд╕рд░реНрднрд░ рдЧреЗрдЯрд╡реЗ рдЗрдиреНрдЯрд░рдлреЗрд╕рдХреЛ рдХрд╛рдо рд╡реЗрдм рд╕рд░реНрднрд░рдмрд╛рдЯ рдкрд╛рдЗрдерди рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХрдорд╛ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдлрд░реНрд╡рд╛рд░реНрдб рдЧрд░реНрдиреБ рд╣реЛред WSGI рдбрд░рд▓рд╛рдЧреНрджреЛ рд╡рд┐рдЧрддрдХреЛ рдЕрд╡рд╢реЗрд╖ рд╣реЛ рдЬрдм CGI рдЗрдиреНрдЬрд┐рдирд╣рд░реВ рд╡рд░рдкрд░ рдерд┐рдП, рд░ рдЖрдЬ WSGI рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рд╣реЛ, рд╡реЗрдм рд╕рд░реНрднрд░ рд╡рд╛ рдкрд╛рдЗрдерди рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рдпреЛрдЧ рдирдЧрд░реАред рддрд░ рдпрд╕рдХреЛ рд╡реНрдпрд╛рдкрдХ рдкреНрд░рдпреЛрдЧрдХреЛ рдмрд╛рд╡рдЬреБрдж, рдпреА рдврд╛рдБрдЪрд╛рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛, рд░ рдзреЗрд░реИ рдЫрдиреМрдЯрд╣рд░реВ рдЕрдЭреИ рдкрдирд┐ рдзреЗрд░реИ рдиреНрдпреБрдирдиреНрд╕рд╣рд░реВ рдЫрдиреНред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореА рд╕рдХреЗрдЯ рдорд╛рд░реНрдлрдд Gunicorn рд░ Nginx рдмреАрдЪ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдерд╛рдкрд┐рдд рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВред

рдпреА рджреБрдмреИ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдПрдЙрдЯреИ рд╕рд░реНрднрд░рдорд╛ рд╕реНрдерд╛рдкрд┐рдд рднрдПрдХрд╛рд▓реЗ, рдиреЗрдЯрд╡рд░реНрдХ рд╕рдХреЗрдЯрдХреЛ рд╕рдЯреНрдЯрд╛ UNIX рд╕рдХреЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВред рд╕рдЮреНрдЪрд╛рд░рд▓рд╛рдИ рдХреБрдиреИ рдкрдирд┐ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╕рдХреЗрдЯ рдЪрд╛рд╣рд┐рдиреЗ рд╣реБрдирд╛рд▓реЗ, рдПрдЙрдЯрд╛ рдердк рдХрджрдо рдЪрд╛рд▓реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВ рд░ Systemd рдорд╛рд░реНрдлрдд Gunicorn рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдХреЗрдЯ рд╕рдХреНрд░рд┐рдпрддрд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реМрдВред

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

рдпрд╣рд╛рдБ рдПрдХрд╛рдЗ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдХреЗрд╣реА рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдЫрдиреН рдЬреБрди рддрдкрд╛рдИрдВрд▓реЗ рдЖрдзрд╛рд░рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдкрд╣рд┐рд▓реЗ рд╣рд╛рдореАрд▓реЗ рд╕рдХреЗрдЯ рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдпреМрдВред

[Unit]
Description=Gunicorn WSGI socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

рдЕрдм рддрдкрд╛рдИрдВрд▓реЗ Gunicorn рдбреЗрдорди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

[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"

рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ Gunicorn рд▓рд╛рдИ рд╕рд┐рдзреИ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдпреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рдЦрд╛рд▓реА рдЬрд╡рд╛рдл рдкрд╛рдЙрдиреЗрдЫреМрдВред

curl тАФunix-socket /run/gunicorn.sock 8beta1.example.com

рдпреЛ рдХрд┐рди рд╣реБрдиреНрдЫ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреБрд╣реЛрд╕реНред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рд▓рдЧ рдЦреЛрд▓реНрдиреБрднрдпреЛ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рд╛рдпрдГ рд╕рдорд╕реНрдпрд╛ SELinux рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рднрдПрдХреЛ рджреЗрдЦреНрдиреБрд╣реБрдиреЗрдЫред рд╣рд╛рдореА рдПрдЙрдЯрд╛ рдбреЗрдорди рдЪрд▓рд╛рдЙрдБрджреИрдЫреМрдВ рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдиреИ рдиреАрддрд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди, рдпрд╕рд▓рд╛рдИ init_t рдХреЛ рд░реВрдкрдорд╛ рдЪрд┐рдиреНрд╣ рд▓рдЧрд╛рдЗрдПрдХреЛ рдЫред рдпреЛ рд╕рд┐рджреНрдзрд╛рдиреНрддрд▓рд╛рдИ рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛ рдкрд░рд┐рдХреНрд╖рдг рдЧрд░реМрдВред

sudo setenforce 0

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

рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдкреГрд╖реНрда рд░рд┐рдлреНрд░реЗрд╕ рдЧрд░реЗрд░ рд╡рд╛ рд╣рд╛рдореНрд░реЛ рдХрд░реНрд▓ рдЖрджреЗрд╢ рдкреБрди: рдЪрд▓рд╛рдПрд░, рддрдкрд╛рдИрдВрд▓реЗ Django рдкрд░реАрдХреНрд╖рдг рдкреГрд╖реНрда рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рддреНрдпрд╕реЛрднрдП, рд╕рдмреИ рдХреБрд░рд╛рд▓реЗ рдХрд╛рдо рдЧрд░реНрдЫ рд░ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдердк рдЕрдиреБрдорддрд┐ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЫреИрдирдиреН рднрдиреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ SELinux рд▓рд╛рдИ рдлреЗрд░рд┐ рд╕рдХреНрд╖рдо рдкрд╛рд░реНрдЫреМрдВред

sudo setenforce 1

рдо рдпрд╣рд╛рдБ рд╕реЗрдкреЛрд▓реНрдЬреЗрдирд╕рдБрдЧ 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

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ gunicorn рд╕реЗрд╡рд╛рдХреЛ рд╕реНрдерд┐рддрд┐ рд╣реЗрд░реНрдиреБрднрдпреЛ рд╡рд╛ ps рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдиреБ рднрдпреЛ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдХреБрдиреИ рдкрдирд┐ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рджреЗрдЦреНрдиреБрд╣реБрдиреЗ рдЫреИрдиред рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ gunicorn рд╣рд╛рдореНрд░реЛ virtualenv рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдкрд╛рдЗрдерди рдЕрдиреБрд╡рд╛рджрдХ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рдХреЛрд╢рд┐рд╕ рдЧрд░реНрджреИрдЫ, рд╕рдореНрднрд╡рддрдГ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ред рддреНрдпрд╕реЛрднрдП рдЕрдм рдпреА рджреБрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдлрд╛рдЗрд▓рд╣рд░реВ рдЪрд┐рдиреНрд╣ рд▓рдЧрд╛рдЙрдиреБрд╣реЛрд╕реН рд░ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ Django рдкрд░реАрдХреНрд╖рдг рдкреГрд╖реНрда рдЦреЛрд▓реНрди рд╕рдХреНрдЫреМрдВред

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

рдирдпрд╛рдБ рдЯреНрдпрд╛рдЧ рдЪрдпрди рдЧрд░реНрдиреБ рдЕрдШрд┐ gunicorn рд╕реЗрд╡рд╛ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫред рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рддреБрд░реБрдиреНрддреИ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд╡рд╛ рд╕реЗрд╡рд╛ рд░реЛрдХреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рд╕рдХреЗрдЯрд▓рд╛рдИ рд╕реБрд░реБ рдЧрд░реНрди рджрд┐рдиреБрд╣реЛрд╕реН рдЬрдм рддрдкрд╛рдЗрдБ рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рд╕рд╛рдЗрдЯ рдЦреЛрд▓реНрдиреБрд╣реБрдиреНрдЫред рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрд▓реЗ ps рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рд╣реА рд▓реЗрдмрд▓рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реЗрдХреЛ рдЫред

ps -efZ | grep gunicorn

рдкрдЫрд┐ рд╕рд╛рдорд╛рдиреНрдп SELinux рдиреАрддрд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдирдмрд┐рд░реНрд╕рдиреБрд╣реЛрд╕реН!

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЕрд╣рд┐рд▓реЗ AVC рд╕рдиреНрджреЗрд╢рд╣рд░реВ рд╣реЗрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдЕрдиреНрддрд┐рдо рд╕рдиреНрджреЗрд╢рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╕рдмреИ рдЪреАрдЬрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдорддрд┐ = 1 рд░ рдмрд╛рдБрдХреА рдкреНрд░рдгрд╛рд▓реАрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдорддрд┐ = 0 рд╕рдорд╛рд╡реЗрд╢ рдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рдХрд╕реНрддреЛ рдкреНрд░рдХрд╛рд░рдХреЛ рдкрд╣реБрдБрдЪ рдЪрд╛рд╣рд┐рдиреНрдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛ рдмреБрдЭреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдЪрд╛рдБрдбреИ рддреНрдпрд╕реНрддрд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗ рдЙрддреНрддрдо рддрд░рд┐рдХрд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддрд░ рддреНрдпрддрд┐рдиреНрдЬреЗрд▓, рдкреНрд░рдгрд╛рд▓реАрд▓рд╛рдИ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╛рдЦреНрдиреБ рд░ Django рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд╕реНрдкрд╖реНрдЯ, рдкреНрд░рдпреЛрдЧрдпреЛрдЧреНрдп рд▓реЗрдЦрд╛рдкрд░реАрдХреНрд╖рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБ рдЙрддреНрддрдо рд╣реБрдиреНрдЫред

sudo ausearch -m AVC

рднрдпреЛ!

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди