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

рдЖрдЗрдП, рдкрд╛рдЗрдерди, Django рдФрд░ PostgreSQL рдХреЗ рд╕рдВрдпреЛрдЬрди, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдмрдВрдбрд▓ рд▓реЗрдВ, рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RHEL 8 рдмреАрдЯрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдлрд┐рд░ рдХреБрдЫ рдФрд░ (рдЕрд╡рд░реНрдЧреАрдХреГрдд) рдЕрд╡рдпрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВред
рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рди рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛, рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдФрд░ рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рд░рд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдмрд╛рддрдЪреАрдд рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реНрд╡рдЪрд╛рд▓рди рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдВред рдЖрдЬ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдиреЗ рдХреА рдХрд╣рд╛рдиреА рд╣реИред
рдЖрд░рдПрдЪрдИрдПрд▓ 8 рдмреАрдЯрд╛ рд╡реАрдПрдо рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдЫрд╡рд┐ рдХреЛ рддреИрдирд╛рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдЖрдк рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдмреАрдЯрд╛ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз 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
рд░реЗрдб рд╣реИрдЯ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЖрд░рдПрдЪрдИрдПрд▓ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдЯреВрд▓рдХрд┐рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдХреНрдпреЛрдВ рдорд┐рд▓рддрд╛ рд╣реИ?
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрднреА рднреА рдкрд╛рдпрдерди 2 рд╕реЗ рдкрд╛рдпрдерди 3 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдкрд╛рдпрдерди 3 рдЦреБрдж рд╕рдХреНрд░рд┐рдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рд▓рдЧрд╛рддрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╕реНрдерд┐рд░ рд╕рд┐рд╕реНрдЯрдо рдЯреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд╛рдпрдерди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд╕рд┐рд╕реНрдЯрдо рдкрд╛рдпрдерди рдХреЛ рдПрдХ рдирдП рдкреИрдХреЗрдЬ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдкрд╛рдпрдерди 2.7 рдФрд░ 3.6 рджреЛрдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИред рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдпрд╣
рд▓реИрдВрдЧрдбрди рд╡реНрд╣рд╛рдЗрдЯ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдкрд╛рдпрдерди рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреЛ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкрд╛рдпрдерди 3-рдкрд╛рдЗрдк рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреАрдВрдЪ рд▓реЗрдВрдЧреЗред
sudo yum install python36 python3-virtualenv
рд▓реИрдВрдЧрдбрди рдХрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ, рдФрд░ pip3 рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреНрдпрдХреНрд╖ рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ? рдЖрдЧрд╛рдореА рд╕реНрд╡рдЪрд╛рд▓рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ Ansible рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдкрд╛рдЗрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдЗрдк рдореЙрдбреНрдпреВрд▓ рдПрдХ рдХрд╕реНрдЯрдо рдкрд╛рдЗрдк рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЗ рд╕рд╛рде рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг (virtualenvs) рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдПрдХ рдХрд╛рдо python3 рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд╕рд╛рде, рдЖрдк Django рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
RHEL 8 рдореЗрдВ рдЙрдкрд▓рдмреНрдз PostgreSQL рдФрд░ Nginx рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
sudo yum install nginx postgresql-server
PostgreSQL рдХреЛ psycopg2 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ virtualenv рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ Django рдФрд░ Gunicorn рдХреЗ рд╕рд╛рде pip3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╣рдореЗрдВ virtualenv рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
Django рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рдЪреБрдирдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдмрд╣реБрдд рдмрд╣рд╕ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕рдВрджреЗрд╣ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдкрджрд╛рдиреБрдХреНрд░рдо рдорд╛рдирдХ рдХреА рдУрд░ рдореБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, FHS рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ / srv рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: "рд╣реЛрд╕реНрдЯ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ - рдбреЗрдЯрд╛ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдПрдлрд╝рдЯреАрдкреА рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛, рд╕рд╛рде рд╣реА рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рднреАред рд╕рдВрд╕реНрдХрд░рдг (2004 рдореЗрдВ FHS-2.3 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдП рдЧрдП)ред тАЭ
рдпрд╣ рд╕рд┐рд░реНрдл рд╣рдорд╛рд░рд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ / 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 рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЗ рд╕рдордп рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдВрджреБ рд╣реИ - рдкреЛрд╕реНрдЯрдЧреНрд░реИрд╕реНрдХрд▓-рд╕реЗрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЬреЛ рдкреЛрд╕реНрдЯрдЧреНрд░реИрдХреНрд╕реНрд▓-рд╕рд░реНрд╡рд░ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ред RHEL рд╕рд┐рд╕реНрдЯрдо рдкрд░ PostgreSQL рдХреЗ рдПрдХ рдирдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
sudo /usr/bin/postgresql-setup -initdb
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 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 }}', } }
рдЬрдм рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред
./manage.py runserver 0.0.0.0:8000 ./manage.py createsuperuser
WSGI? рд╡рд╛рдИ?
рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЧреЗрдЯрд╡реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (WSGI) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕рд░реНрд╡рд░ рдФрд░ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрдИ рд╕рд╛рдорд╛рдиреНрдп рдмрдВрдбрд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреВрдбрдмреНрд▓реНрдпреВрдПрд╕рдЬреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЕрдкрд╛рдЪреЗ рдПрдЪрдЯреАрдбреА рдФрд░ рдЧреБрдирд┐рдХреЙрд░реНрди рдХреЗ рд╕рд╛рде рдиреЗрдЧреНрдиреЗрдХреНрд╕ред
рд╡реЗрдм рд╕рд░реНрд╡рд░ рдЧреЗрдЯрд╡реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдкрд╛рдпрдерди рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред WSGI рдПрдХ рднрдпрд╛рдирдХ рдЕрддреАрдд рдХреА рд╡рд┐рд░рд╛рд╕рдд рд╣реИ рдЬрдм CGI рддрдВрддреНрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдереЗ, рдФрд░ рдЖрдЬ WSGI рдорд╛рдирдХ рд╣реИ, рдЪрд╛рд╣реЗ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдпрд╛ Python рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡реНрдпрд╛рдкрдХ рд╡рд┐рддрд░рдг рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЗрди рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдФрд░ рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЕрднреА рднреА рдХрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдирд┐рдХреЙрд░реНрди рдФрд░ рдиреЗрдЧреНрдиреЗрдХреНрд╕ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
рдЪреВрдВрдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдШрдЯрдХ рдПрдХ рд╣реА рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рд╕реЙрдХреЗрдЯ рдХреЗ рдмрдЬрд╛рдп UNIX рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдЪреВрдБрдХрд┐ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡реИрд╕реЗ рднреА рд╕реЙрдХреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЖрдЗрдП рдПрдХ рдФрд░ рдЪрд░рдг рдЖрдЬрд╝рдорд╛рдПрдБ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Gunicorn рдХреЗ рд▓рд┐рдП рд╕реЙрдХреЗрдЯ рд╕рдХреНрд░рд┐рдпрдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред
рд╕реЙрдХреЗрдЯ рд╕рдХреНрд░рд┐рдп рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЗрдХрд╛рдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реБрдиреЗрд╕реНрдЯреНрд░реАрдо рдирд┐рд░реНрджреЗрд╢ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдмрд┐рдВрджреБ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ UNIX рд╕реЙрдХреЗрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлрд┐рд░ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдХрд╛рдИ рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧреА, рдЬрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд┐рд░реНрджреЗрд╢ рд╕реЙрдХреЗрдЯ рдЗрдХрд╛рдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред рдлрд┐рд░, рд╕реЗрд╡рд╛ рдХреА рдпреВрдирд┐рдЯ-рдлрд╛рдЗрд▓ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рд╡рд░реНрдЪреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ Gunicorn рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ 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_name рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред
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 рдЦрд░рд╛рдм рдЧреЗрдЯрд╡реЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред рдпрд╣ UNIX рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг, рдпрд╛ SELinux рдореЗрдВ рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдирдЧреАрди рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдореЗрдВ, рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд▓рд╛рдЗрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
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
рдпрд╣ рд╕рдм рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдЦреВрдиреА рдЖрдБрд╕реВ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдбрд┐рдмрдЧрд┐рдВрдЧ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рд╕рдм рдХреБрдЫ рд╡рд╛рдкрд╕ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗред
рдмреНрд░рд╛рдЙрдЬрд░ рдореЗрдВ рдкреЗрдЬ рдХреЛ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░рдХреЗ рдпрд╛ рд╣рдорд╛рд░реЗ рдХрд░реНрд▓ рдХрдорд╛рдВрдб рдХреЛ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдХреЗ рдЖрдк Django рдЯреЗрд╕реНрдЯ рдкреЗрдЬ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо SELinux рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВред
sudo setenforce 1
рдСрдбрд┐рдЯ 2 рдХреНрд▓реЙрдХ рдФрд░ рд╕реАрдкреЛрд▓рдЧрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд▓рд░реНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдиреАрддрд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ 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 рдХреЛ рдЕрдиреБрдорддрд┐ рдбреЛрдореЗрди рдкрд░ рд▓реЗ рдЬрд╛рдПрдБред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдирдЧреНрдиреЗрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рдФрд░ рд╣рдо рдбрд┐рдмрдЧрд┐рдВрдЧ рдкрд░ рдЖрдЧреЗ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
sudo semanage permissive -a httpd_t
рдЗрд╕рд▓рд┐рдП, рдЬрдм SELinux рд╕реБрд░рдХреНрд╖рд╛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╕рдВрднрд╡ рдерд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдмрдВрдз рдореЛрдб рдореЗрдВ SELinux рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП) рдФрд░ рдЕрдиреБрдорддрд┐ рдбреЛрдореЗрди рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ gunicorn_exit_t рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗред рдЖрдЗрдП рдПрдХреНрд╕реЗрд╕ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирдП рд╕рдВрджреЗрд╢ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдмрд╕рд╛рдЗрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
sudo ausearch -m AVC -c gunicorn
рдЖрдк рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрджреЗрд╢ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ 'рдХреЙрдо =' '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 рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рднреА рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧреАред рдЧреБрдирд┐рдХреЛрд░реНрди рд╣рдорд╛рд░реЗ рд╡рд░реНрдЪреБрдЕрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпрд╛ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╕рдВрднрд╡рддрдГ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдХрд╛рд░реНрдпрдХрд░реНрддрд╛) рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рддреЛ рдЕрдм рд╣рдо рдЗрди рджреЛ рдирд┐рд╖реНрдкрд╛рджрдиреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЕрдкрдирд╛ 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 рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП permissive = 1 рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдХреА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП permissive = 0 рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕ рддрд░рд╣ рдХреА рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рддрдм рддрдХ, рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдФрд░ Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЙрдкрдпреЛрдЧреА рдСрдбрд┐рдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
sudo ausearch -m AVC
рдпрд╣ рдирд┐рдХрд▓рд╛!
Nginx рдФрд░ Gunicorn WSGI рдкрд░ рдПрдХ рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рдордХрд╛рдЬреА Django рдкрд░рд┐рдпреЛрдЬрдирд╛ рджрд┐рдЦрд╛рдИ рджреАред рд╣рдордиреЗ RHEL 8 рдмреАрдЯрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ Python 3 рдФрд░ PostgreSQL 10 рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИред рдЕрдм рдЖрдк рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЯреНрдпреВрдирд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХрдВрдЯреЗрдиреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рдПрдЪрдИрдПрд▓ 8 рдмреАрдЯрд╛ рдореЗрдВ Django рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдХреЗрд╡рд▓ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред