RHEL 8 Beta ááẠdeveloper áá»á¬ážá¡á¬áž á áœááºážáá±á¬ááºáá»ááºá¡áá áºáá»á¬ážá áœá¬ááᯠáá±ážáá±á¬ááºáá¬ážááŒá®áž á á¬áá»ááºááŸá¬áá»á¬ážááᯠáá°áá±á¬ááºááá¯ááºááá·áºá á¬áááºážááœáẠáá«áááºáá±á¬áºáááºáž á¡áá áºáá»á¬ážááᯠáá±á·áá¬ááŒááºážááẠáááºááœá±á·ááœáẠá¡ááŒá²ááá¯áá±á¬ááºážáá±áááºá ááá¯á·ááŒá±á¬áá·áº Red Hat Enterprise Linux 8 Beta ááᯠá¡ááŒá±áá¶á á¡ááŸááºááááºá¡áá¯á¶ážáá»ááá¯ááºáá±á¬ á¡ááºááá®áá±ážááŸááºážá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶áááºáá®ážááŒááºážááá¯ááºáᬠá¡áá¯ááºáá¯á¶ááœá±ážááœá±ážááœá²ááᯠá¡á±á¬ááºááœáẠáá»áœááºá¯ááºááá¯á· áááºážááŸááºážáá¬ážáá«áááºá
á¡ááŒá±áá¶á¡ááŒá
áºá developer áá»á¬ážááŒá¬ážááœáẠáá±áááºážá
á¬ážáá±á¬ áááá¯ááááºážáááºážáá¬áá¬á
áá¬ážááŒá
áºáá±á¬ Pythoná Django ááŸáá·áº PostgreSQL áá±á«ááºážá
ááºááŸá¯á á¡ááá®áá±ážááŸááºážáá»á¬ážáááºáá®ážáááºá¡ááœáẠá¡ááœááºá¡áá¯á¶ážáá»á¬ážáá±á¬ áá±á«ááºážá
ááºááŸá¯ááŒá
áºááŒá®áž áááºážááá¯á·ááŸáá·áºá¡áá¯ááºáá¯ááºááẠRHEL 8 Beta ááᯠá
á®á
ááºáááºááŸááºááŒáá«á
áá¯á·á ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºááẠ(á¡áá»áá¯ážá¡á
á¬ážáááœá²ááŒá¬ážáá¬ážáá±á¬) áá«áááºáá
á¹á
ááºážáá»á¬ážááᯠáááºááá·áºáá«áááºá
ááœááºááááºáá¬áá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºááŒááºážááŸáá·áº áá¬áá¬áá»á¬ážá
áœá¬ááŒáá·áº ááŒáá¯ážá
á¬ážáá±ááá·áº áááºáááºážáá»ááºáá»á¬ážááœáẠá¡ááá¯á¡áá»á±á¬ááºá
áá
áºá ááŒá
áºááá¯ááºááŒá±áá»á¬ážááᯠá
á°ážá
ááºážáá±á·áá¬ááẠá
áááºáááºá
á¬ážááœááºááŒá
áºáá±á¬ááŒá±á¬áá·áº á
ááºážáááºááŸá¯áááºáááºážáá»ááºááẠááŒá±á¬ááºážáá²ááœá¬ážáááºááŒá
áºáááºá ááá±á¬áá»ááºá¡áá
áºáá
áºáᯠá
áááºáááºá áá±ážáááºááŒá®áž ááá¯ážááŸááºážáá±á¬ ááŸá±á·ááŒá±ážáá¯á¶á
á¶ááᯠáááºááŒáá·áº á
áááºááá¯ááºáááºá ááá¯á·ááŸáᬠááŒá
áºáá»ááºáááºááá¯á¡ááºáááºáá»á¬ážááᯠá¡ááá¡áá»ááááŸáááá¯ááºááŒá®áž áááºážááẠáááºááá¯á·á¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŒá±á¬ááºážááᯠááááŸáááá¯ááºáᬠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºáááºááŸáá·áº ááá¯ááá¯ááŸá¯ááºááœá±ážáá±á¬áá¯á¶á
á¶áá»á¬ážááᯠáááºáá®ážááá¯ááºáááºááŒá
áºáááºá ááá±á·áá»áœááºá¯ááºááá¯á·áááºááá¯áá²á·ááá¯á·áá±á¬ááŸá±á·ááŒá±ážáá¯á¶á
á¶áááºáá®ážááŸá¯á¡ááŒá±á¬ááºážááá¯ááŒá±á¬áá±áá¬ááŒá
áºáá«áááºá
RHEL 8 Beta VM áá¯ááºáá¯á¶ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº á áááºááŒáá«á áá¯á·á áááºááẠvirtual machine ááᯠá¡á á០áááºáááºááá¯ááºáááºá ááá¯á·ááá¯áẠáááºá Beta á á¬áááºážááœááºážááŸá¯ááŒáá·áº áááŸáááá¯ááºáá±á¬ KVM á§áá·áºáááºáá¯á¶ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá á§áá·áºáááºáá¯á¶áá áºáá¯á¶ááᯠá¡áá¯á¶ážááŒá¯ááá·áºá¡áá«á cloud á¡á ááŒá¯ááŒááºáž (cloud-init) á¡ááœáẠáááºáá¬áá±áá¬ááŸáá·áº á¡áá¯á¶ážááŒá¯áá°áá±áá¬áá»á¬ážáá«ááŸááá±á¬ virtual CD ááᯠconfigure ááŒá¯áá¯ááºááẠááá¯á¡ááºáá«áááºá áá áºááºááœá²á·á ááºážáá¯á¶ ááá¯á·ááá¯áẠáááŸáááá¯ááºáá±á¬ áááºáá±á·ááºá»áá»á¬ážááŒáá·áº á¡áá°ážáá¬áá»áŸáá¯ááºááẠáááá¯á¡ááºáá«á áááºááá·áºááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááááᯠáá¯ááºáá±á¬ááºáá«áááá·áºáááºá
áá¯ááºáááºážá ááºáá áºáá¯áá¯á¶ážááᯠá¡áá®ážáááºáá±á·áá¬ááŒáá·áºáá¡á±á¬ááºá
Django ááᯠááá·áºááœááºážááŒááºážá
Django ááá±á¬ááºáá¯á¶ážááœááºáá¬ážááŸááºážááŒáá·áºá áááºááẠPython 3.5 ááá¯á·ááá¯áẠááá¯á·áááºáá±á¬ááºááá¯ááºážááœáẠvirtual environment (virtualenv) ááá¯á¡ááºáááºááŒá áºáááºá Beta ááŸááºá á¯áá»á¬ážááœáẠPython 3.6 áááŸáááá¯ááºáááºááᯠáááºááœá±á·ááá¯ááºáááºá áááºážááẠá¡ááŸááºáááẠáá¯ááºááá¯áẠá á áºáá±ážááŒáá·áºááŒáá«á áá¯á·á
[cloud-user@8beta1 ~]$ python
-bash: python: command not found
[cloud-user@8beta1 ~]$ python3
-bash: python3: command not found
Red Hat ááẠRHEL ááœáẠá áá áºáááááá¬á¡á á¯á¶á¡áááºá¡ááŒá ẠPython ááá¯áááºááŒáœá áœá¬á¡áá¯á¶ážááŒá¯áááºá ááá¯á·ááŒá±á¬áá·áº áááºážááẠá¡áááºááŒá±á¬áá·áºááááºááŒá áºááááºážá
á¡ááŸááºááŸá¬ Python developer á¡áá»á¬ážá¡ááŒá¬ážááẠPython 2 á០Python 2 ááá¯á· áá°ážááŒá±á¬ááºážááŒááºážááᯠááœá±ážáá±á¬áá±ááŒáá²ááŒá
áºááŒá®áž Python 3 ááá¯ááºááá¯ááºá áááºááŒáœá
áœá¬ ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ááŒá®áž áá¬ážááŸááºážá¡áá
áºáá»á¬áž á¡áááºáááŒááºááœááºáá±á«áºáá¬áá±áá«áááºá ááá¯á·ááŒá±á¬áá·áºá áá¯á¶ážá
áœá²áá°áá»á¬ážá¡á¬áž Python á áá¬ážááŸááºážá¡áá
áºá¡áá»áá¯ážáá»áá¯ážááá¯á· áááºáá±á¬ááºááœáá·áºáá±ážá
ááºááœáẠáááºááŒáááºáá±á¬ á
áá
áºáááááá¬áá»á¬áž ááá¯á¡ááºááŸá¯ááᯠááŒáá·áºáááºážáááºá á
áá
ẠPython ááᯠáááºáá±á·ááºá»á¡áá
áºááá¯á· ááŒá±á¬ááºážááœáŸá±á·áá²á·ááŒá®áž Python 2.7 ááŸáá·áº 3.6 ááŸá
áºáá¯á
áá¯á¶ážááᯠááá·áºááœááºážááá¯ááºá
á±áá²á·áááºá á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááŸáá·áº á¡áááºááŒá±á¬áá·áº áááºážááá¯á·ááᯠááŒá¯áá¯ááºáá¬ážááááºáž ááŸáá·áº áááºáááºá ááá¯ááá¯ááááŸáááá¯áá«á áá¯ááºáá±ááŸá¯ááœáẠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
ááá¯á·ááŒá±á¬áá·áº Python á¡áá¯ááºáá¯ááºáá±á¬ááºáááºá ááŸá®ááá¯ááŸá¯á¡ááŒá Ạpython3-pip áá«áááºáá±á¬ áááºáá±á·ááºá»ááŸá áºáá¯áᬠááá·áºááœááºážááẠááá¯á¡ááºáá«áááºá
sudo yum install python36 python3-virtualenv
Langdon á á¡ááŒá¶ááŒá¯ááŒá®áž pip3 ááᯠááá·áºááœááºážááá·áºá¡ááá¯ááºáž ááá¯ááºááá¯áẠmodule áá±á«áºááá¯ááŸá¯áá»á¬ážááᯠá¡áááºááŒá±á¬áá·áº á¡áá¯á¶ážáááŒá¯áááááºážá áá¬ááá·áºá¡ááá¯á¡áá»á±á¬ááºá áá áºá¡á¬áž áááááá«á á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº pip module ááẠá áááºááŒáá¯áẠpip executable ááŒáá·áº virtualenvs ááá¯ááá¶á·ááá¯ážááá¯ááºáá±á¬ááŒá±á¬áá·áº Ansible ááẠpip áááºáááºáá¬ážáááºááá¯á¡ááºááŒá±á¬ááºáž ááááŸáááá«áááºá
ááá·áºá¡áá±ááŒáá·áº áá¯ááºáá±á¬ááºáá±áá±á¬ python3 á áá¬ážááŒááºááŒáá·áºá áááºááẠDjango áááºáááºááŒááºážáá¯ááºáááºážá ááºááᯠáááºáááºáá¯ááºáá±á¬ááºááá¯ááºááŒá®áž áá»áœááºá¯ááºááá¯á·á á¡ááŒá¬ážá¡á áááºá¡ááá¯ááºážáá»á¬ážááŸáá·áºá¡áá° á¡áá¯ááºáá¯ááºááá¯ááºáá±á¬ á áá áºáá áºáá¯ááŸááááºá á¡ááºáá¬áááºáá±á«áºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááœá±ážáá»ááºá áá¬áá»á¬ážá áœá¬ááŸááááºá á€áá±áá¬ááœááºáááºááŒáá¬ážáá±á¬ áá¬ážááŸááºážáá áºáá¯ááŸááá±á¬áºáááºáž áá¯á¶ážá áœá²áá°áá»á¬ážááẠáááºážááá¯á·áááá¯ááºááá¯ááºáá¯ááºáááºážá ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
Yum ááᯠá¡áá¯á¶ážááŒá¯á áá°áááºážá¡ááá¯ááºáž RHEL 8 ááœáẠáááŸáááá¯ááºáá±á¬ PostgreSQL ááŸáá·áº Nginx áá¬ážááŸááºážáá»á¬ážááᯠáááºáááºáá«áááºá
sudo yum install nginx postgresql-server
PostgreSQL ááẠpsycopg2 ááá¯á¡ááºáááá·áºáááºá ááá¯á·áá±á¬áº áááºážááᯠvirtualenv áááºážáá»ááºááœááºáᬠáááá¯ááºáááºááŒá áºááŒá®ážá ááá¯á·ááŒá±á¬áá·áº áááºážááᯠpip3 ááŸáá·áº Django ááŸáá·áº Gunicorn ááá¯á·ááŸáá·áºá¡áá° ááá·áºááœááºážáááºááŒá áºáááºá áá«áá±ááá·áº á¡áááºáá¯á¶áž virtualenv ááᯠset up áá¯ááºááá¯á·ááá¯áá«áááºá
Django ááá±á¬áá»ááºáá»á¬ážááᯠááá·áºááœááºážááẠáá±áá¬ááœá±ážáá»ááºááŒááºážááá¯ááºáᬠáá±á«ááºážá ááºááŸáá·áº áááºáááºá á¡ááŒá²ááŒááºážáá¯á¶á áá¬áá»á¬ážá áœá¬ááŸááá±á¬áºáááºáž áá¶ááááŸááá«áá áááºááẠLinux Filesystem Hierarchy Standard ááá¯á· á¡ááŒá²ááŒá±á¬ááºážáá²ááá¯ááºáááºá á¡áá°ážáááŒáá·áºá FHS ááẠ/srv ááá¯á¡áá¯á¶ážááŒá¯áááº- "áááºáá¬áá¬áá±áá¬ááŸáá·áº Scripts áá»á¬ážáá²á·ááá¯á·áá±á¬ áááºáá¬áá¬áá±áá¬ááŸáá·áº Scripts áá»á¬ážáá²á·ááá¯á·áá±á¬ á áá áºááŸáá¯ááºáá¯ááºááá·áº áá±áá¬áá»á¬ážááᯠááá¯ááŸá±á¬ááºáááºá FTP áá¬áá¬áá»á¬ážááœáẠááááºážáááºážáá¬ážááá·áº áá±áá¬ááŸáá·áº á áá áºááá¯ááŸá±á¬ááºáá¬áá»á¬ážááᯠááááºážáá»á¯ááºáááº" áá¬ážááŸááºážáá»á¬áž (FHS ááœáẠáá±á«áºáá±áá«áááºá áááá áá¯ááŸá áºááœáẠá.á)"
á€áááºááŸá¬ áá»áœááºá¯ááºááá¯á·áááá á¹á ááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·á á¡ááá®áá±ážááŸááºážá¡áá¯á¶ážááŒá¯áá° (cloud-user) á០ááá¯ááºááá¯ááºáá±á¬ /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-server package ááŒáá·áºááá·áºááœááºážáá¬ážáá±á¬ postgresql-setup script ááŒá áºáááºá á€áá¬ááºááœáŸááºážááẠá¡á á¯á¡áá±ážá áááºááŒááºáž ááá¯á·ááá¯áẠá¡ááá·áºááŒáŸáá·áºáááºááŒááºážáá¯ááºáááºážá ááºáá²á·ááá¯á·áá±á¬ áá±áá¬áá±á·á áºá¡á á¯á¡áá±ážá á®áá¶ááá·áºááœá²ááŸá¯ááŸáá·áº áááºá ááºáá±áá±á¬ á¡ááŒá±áá¶áá¬áááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠáá°áá®áá±ážáááºá RHEL á áá áºááœáẠPostgreSQL instance á¡áá áºááᯠconfigure áá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠcommand ááᯠrun ááẠááá¯á¡ááºáááº-
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? áá±?
ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážáá¬áá¬ááẠá ááºážáááºáááºá¡ááœáẠá¡áá¯á¶ážáááºáá±á¬áºáááºáž á¡ááá®áá±ážááŸááºážááᯠrun áááºá¡ááœáẠWeb Server Gateway Interface (WSGI) á¡ááœáẠááá·áºáá»á±á¬áºáá±á¬ áá¬áá¬ááŸáá·áº ááá±á¬ááºá á®ááᯠáááºááŸááºááá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá Apache HTTPD ááŸáá·áº uWSGI ááá¯á·ááá¯áẠGunicorn ááŸáá·áº Nginx áá±á«ááºážá ááºááŸá¯áá»á¬ážááŸááááºá
Web Server Gateway Interface áá¡áá¯ááºááŸá¬ áááºáá¬áá¬á០áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠPython áááºáá±á¬ááºááá¯á· áá±ážááá¯á·áááºááŒá áºáááºá WSGI ááẠCGI á¡ááºáá»ááºáá»á¬ážáááºáááºážáá»ááºááœááºááŸááá±á áẠááŒá±á¬ááºáááºááœááºá¡ááááºáá áºáá¯ááŒá áºááŒá®áž ááá±á·ááœáẠWSGI ááẠáááºáá¬áᬠááá¯á·ááá¯áẠPython framework ááá¯á¡áá¯á¶ážááŒá¯áááºááŒá áºá á± á á¶áááºááŸááºáá»ááºáá áºáá¯ááŒá áºáááºá ááá¯á·áá±á¬áº áááºážááᯠááœááºááœááºáá»ááºáá»áẠá¡áá¯á¶ážááŒá¯áá±áá±á¬áºáááºážá á€áá±á¬ááºáá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºáá±á¬á¡áá«ááœáẠááœá²ááŒá¬ážááŸá¯áá»á¬ážááŸáá·áº ááœá±ážáá»ááºá áá¬áá»á¬ážá áœá¬ ááŸááá«áá±ážáááºá á€ááá á¹á ááœááºá áá»áœááºá¯ááºááá¯á·ááẠsocket áá áºáá¯ááŸáá áºááá·áº Gunicorn ááŸáá·áº Nginx á¡ááŒá¬áž á¡ááŒááºá¡ááŸááºáááºááœááºááŸá¯ááᯠáááºáá±á¬ááºááẠááŒáá¯ážá á¬ážáá«áááºá
á€á¡á áááºá¡ááá¯ááºážááŸá áºáá¯áá¯á¶ážááᯠáá°áá®áá±á¬áá¬áá¬ááœáẠááá·áºááœááºážáá¬ážáá±á¬ááŒá±á¬áá·áºá ááœááºáááºáá±á«ááºáá±á«ááºá¡á á¬áž UNIX socket ááᯠá¡áá¯á¶ážááŒá¯ááŒáá·áºááŒáá«á áá¯á·á áááºááœááºáá±ážááẠáááºááá·áºááá á¹á ááœááºáááᯠsocket áá áºáá¯ááá¯á¡ááºáá±á¬ááŒá±á¬áá·áºá áá±á¬ááºáááºáá áºááá·áºáááºááŒá®áž Gunicorn á¡ááœáẠsocket activation ááᯠsystemd ááŸáá áºááá·áº á á®á ááºááŒáá·áºááŒáá«á áá¯á·á
socket activated áááºáá±á¬ááºááŸá¯áá»á¬ážááá¯áááºáá®ážááŒááºážáá¯ááºáááºážá ááºáááºá¡áá±á¬áºáá±ážááá¯ážááŸááºážáááºá ááááŠážá áœá¬á UNIX socket ááá¯áááºáá®ážááá·áºáá±áá¬ááᯠááœáŸááºááŒááá·áº ListenStream ááœáŸááºááŒá¬ážáá»ááºáá áºáá¯áá«ááŸááá±á¬ áá°áá áºááá¯ááºááᯠáááºáá®ážááŒá®ážá ááá¯á·áá±á¬áẠááá¯á¡ááºááẠááœáŸááºááŒá¬ážáá»ááºááẠsocket áá°áá áºááá¯ááºááá¯á· ááœáŸááºááŒááá·áº áááºáá±á¬ááºááŸá¯á¡ááœáẠáá°áá áºááá¯ááºáá áºáᯠáááºáá®ážáááºá ááá¯á·áá±á¬ááºá áááºáá±á¬ááºááŸá¯áá°áá áºááá¯ááºááœáẠáá»ááºááŸáááá·áºá¡áá¬á¡á¬ážáá¯á¶ážááẠá¡áá¯á¡áá±á¬ááºáááºáááºážáá»ááºá០Gunicorn ááá¯áá±á«áºááá¯ááŒá®áž UNIX socket ááŸáá·áº Django á¡ááá®áá±ážááŸááºážá¡ááœáẠWSGI binding áá áºáá¯áááºáá®ážáááºááŒá áºáááºá
á€áááºááŸá¬ áááºá¡ááŒá±áá¶á¡ááŒá Ạá¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬ áá°áá áºááá¯ááºáá»á¬ážá ááá°áá¬á¡áá»áá¯á·ááŒá áºáááºá á¡áááºáá¯á¶áž socket ááᯠset up áá¯ááºáá«á
[Unit]
Description=Gunicorn WSGI socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
ááá¯áááºááẠGunicorn daemon ááᯠconfigure áá¯ááºáááºááá¯á¡ááºáááºá
[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 á¡ááœááºá áááºážááẠproxy configuration ááá¯ááºáá»á¬ážááá¯áááºáá®ážáááºááŸáá·áº áááºá¡áá¯á¶ážááŒá¯áá±áá«á static content áá»á¬ážááá¯ááááºážáááºážááẠdirectory áá áºáá¯áááºáá±á¬ááºááŒááºážáááá¯ážááŸááºážáá±á¬ááá á¹á ááŒá áºáááºá 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;
}
}
Gunicorn socket ááŸáá·áº Nginx ááᯠsystemd ááᯠá¡áá¯á¶ážááŒá¯á á áááºááŒá®áž á ááºážáááºááẠá¡áááºááá·áºááŒá áºáá«ááŒá®á
ááá±á¬ááºážáá±á¬ ááááºá á¡ááŸá¬ážáá¬ážá
ááá·áºááá±á¬ááºáá¬áá²ááá¯á· ááááºá á¬ááá¯ááá·áºáá«áá áááºááẠ502 Bad Gateway error ááᯠáááºáá¶áááŸáááá¯ááºáá«áááºá áááºážááẠááŸá¬ážááœááºážá áœá¬ááŒááºáááºáá¬ážáá±á¬ UNIX socket ááœáá·áºááŒá¯áá»ááºáá»á¬ážááŒá±á¬áá·áºááŒá áºááá¯ááºáááºá ááá¯á·ááá¯áẠ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 ááŸáá·áº áááºá ááºáá±ááŒá±á¬ááºáž áááºááœá±á·ááá¯ááºáááºááŒá áºáááºá áá°áá«áááááºáá®ážááá±ážááá·áº daemon áá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á· áá¯ááºáá±á¬ááºáá±áá±á¬ááŒá±á¬áá·áº áááºážááᯠinit_t á¡ááŒá Ạá¡ááŸááºá¡áá¬ážááŒá¯áá¬ážáááºá áá®áá®á¡áá¯áá®ááᯠáááºááœá±á·á ááºážáááºááŒáá·áºáá¡á±á¬ááºá
sudo setenforce 0
á€á¡áá¬á¡á¬ážáá¯á¶ážááẠáá±áááºááŸá¯áá»á¬ážááŸáá·áº áá»ááºáááºáá»á á±ááá¯ááºáá±á¬áºáááºáž áááºážááẠááá°áá¬áá¯á¶á á¶ááᯠá¡ááŸá¬ážááŸá¬ááŒááºážáá¬ááŒá áºáááºá á€áááºááŸá¬ ááŒá¿áá¬ááŒá áºááŒá±á¬ááºáž áá±áá»á¬á á±ááẠá á áºáá±ážááŸá¯ááᯠááááºááá¯ááºáá¡á±á¬ááºá ááá¯á·áá±á¬áẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºážááá±áá¬ááá¯á· ááŒááºááá¯á·áá±ážáá«áááºá
ááá±á¬ááºáá¬ááœáẠá á¬áá»ááºááŸá¬ááᯠááŒááºáááºáááºážáá áºááŒááºáž ááá¯á·ááá¯áẠáá»áœááºá¯ááºááá¯á·á curl á¡áááá·áºááᯠááŒááºáááºáá¯ááºáá±á¬ááºááŒááºážááŒáá·áºá áááºááẠDjango á ááºážáááºááŸá¯á á¬áá»ááºááŸá¬ááᯠááŒááºááœá±á·ááá¯ááºáááºá
ááá¯á·ááŒá±á¬áá·áºá á¡á¬ážáá¯á¶ážá¡áááºááŒá±ááŒá®áž ááœáá·áºááŒá¯áá»ááºááŒá¿áá¬áá»á¬ážáááŸááá±á¬á·ááŒá±á¬ááºáž áá±áá»á¬á á±ááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠSELinux ááᯠáááºáá¶ááœáá·áºáá«á
sudo setenforce 1
áá±á¬áá±á¬áááºááœáẠá¡ááŸááºáááẠDjango á¡ááá®áá±ážááŸááºážáááŸááááŒáá·áº á€áá±áá¬ááœáẠaudit2allow ááá¯á·ááá¯áẠááááá±ážáá»ááºá¡ááŒá±áá¶áá°áá«ááá»á¬ážáááºáá®ážááŒááºáž ááá¯á·ááá¯áẠáááºáá®ážááŒááºážá¡ááŒá±á¬ááºáž áááŒá±á¬áá«ááŸáá·áºá ááá¯á·ááŒá±á¬áá·áº Gunicorn ááŸáááºáá±á¬ááºááá¯ááá·áºá¡áá¬ááŸáá·áº áááºááœáá·áºááᯠááŒááºážáááºááá·áºáá±á¬ ááŒá±áá¯á¶á¡ááŒáá·áºá¡á á¯á¶áááŸááá«á ááá¯á·ááŒá±á¬áá·áºá á áá áºá¡á¬áž áá¬ááœááºáááºá¡ááœáẠSELinux ááᯠáááºáááºáááºáááºáá±ááẠááá¯á¡ááºááŒá®áž áá áºáá»áááºáááºážááŸá¬ááẠá¡ááá®áá±ážááŸááºážá¡á¬áž á á¬áááºážá á áºááŸááºáááºážááœáẠáááºáá±á·áá»áºáá»á¬ážááᯠáááºáááºá á±ááŒá®áž áááºážááá¯á·áá¶á០á¡ááŸááºááááºáá±á«áºáá á®ááᯠáááºáá®ážááá¯ááºá á±ááẠááœáá·áºááŒá¯áá±ážáá¬ážáááºá
ááœáá·áºááŒá¯áá¬ážáá±á¬ ááá¯ááááºážáá»á¬ážááᯠáááºááŸááºááŒááºážá
SELinux ááœáẠááœáá·áºááŒá¯áá¬ážáá±á¬ ááá¯ááááºážáá»á¬ážááᯠáá°ááá¯ááºážááŒá¬ážáá°ážááŒáááºááá¯ááºáá±á¬áºáááºáž áááºážááá¯á·ááẠá¡áá áºá¡áááºážááá¯ááºáá±á áá±á¬áºáá±á¬áºáá»á¬ážáá»á¬ážá á¡á²áá«ááᯠááááá±á¬ááºááá¬ážáááá² áá°ááá¯á·áá²á· ááœá²áá¯ááºáá²á·ááŒáááºá á á¬áááºážá á áºáááºáá±á·áá»áºáá»á¬ážá¡áá±á«áº á¡ááŒá±áá¶á áá°áá«ááá áºáá¯ááᯠáááºáá®ážáá±á¬á¡áá«á áááºáá®ážáá¬ážáá±á¬áá°áá«áááẠááŒá±ááŸááºážááŒá®ážáá¬ážááá¯ááááºážááᯠááá¯ááºá á¬ážááŒá¯áááºá ááá¯ážááŸááºážáá±á¬ ááœáá·áºááŒá¯ááŸá¯áá°áá«áááᯠáááºáá®ážááŒáá«á áá¯á·á
Gunicorn á¡ááœáẠáá®ážááŒá¬ážááœáá·áºááŒá¯áá¬ážáá±á¬ ááá¯ááááºážáá áºáá¯ááᯠáááºáá®ážáááºá áááºááẠáá°áá«ááá áºáá»áá¯ážáá»áá¯áž ááá¯á¡ááºááŒá®áž ááá·áºáá»á±á¬áºáá±á¬ááá¯ááºáá»á¬ážááᯠááŸááºáá¬ážáá¬ážááẠááá¯á¡ááºáá«áááºá ááá¯á·á¡ááŒáẠáá°áá«áá¡áá áºáá»á¬ážááᯠá á¯á ááºážáááºá¡ááœáẠáááááá¬áá»á¬áž ááá¯á¡ááºáá«áááºá
sudo yum install selinux-policy-devel
ááœáá·áºááŒá¯áá¬ážáá±á¬ ááá¯ááááºážááá¹ááá¬ážááẠá¡áá°ážáááŒáá·áº áááºáá®ážáá¬ážááŒá®ážáá±á¬ áá°áá«ááá»á¬ážááá«áá² á áááºááŒáá¯ááºá¡ááºááºáá®áá±ážááŸááºážáá áºáᯠááá¯á·ááá¯áẠá¡ááºááºáá®áá±ážááŸááºážáá áºáá¯ááá¯á· áá±á¬ááºááŸááá¬ááá·áºá¡áá« ááŒá¿áá¬áá»á¬ážááᯠáá±á¬áºáá¯ááºáááºá¡ááœáẠáá±á¬ááºážááœááºáá±á¬áááááá¬áá áºáá¯ááŒá áºáááºá á€ááá á¹á ááœááºá Gunicorn á¡ááœáẠááœáá·áºááŒá¯áá¬ážáá±á¬ ááá¯ááááºážáá°áá«áááẠá¡áááºááá¯ááºáá¯á¶áž ááá¯ážááŸááºážáá«ááẠ- áááºáá¡áá»áá¯ážá¡á á¬áž (gunicorn_t) ááá¯ááŒá±ááŒá¬áá«á á¡áá»á¬ážá¡ááŒá¬ážáá¯ááºáá±á¬ááºááá¯ááºáá±á¬ executables (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 ááẠáá»áœááºá¯ááºááá¯á·áá¡áááºááá daemon áááºáá±á¬ááºáá±ááá·áºá¡áá¬ááŸááœá²á á¡ááŒá¬ážá¡áá¬áá»á¬ážááᯠááááºááá¯á·áá¬ážááŒááºážááŸááááŸá á á áºáá±ážááŒáá·áºááŒáá«á áá¯á·á
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 ááẠGunicorn á¡áá¯á¶ážááŒá¯áá±á¬ UNIX socket ááá¯á· Nginx áá±áá¬áá±ážáá¬ážááŒááºážá០áá¬ážáá®ážáááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá ááá¯ááá¯á·áá±á¬ á¡ááŒá±á¡áá±áá»á¬ážááœáẠáá°áá«ááá»á¬áž á áááºááŒá±á¬ááºážáá²áá±á¬áºáááºáž á¡ááŒá¬ážá áááºáá±á«áºááŸá¯áá»á¬ážáááºáž ááŸááá±áá«áááºá áááºááẠááá¯ááááºážáááºáááºáá»á¬ážááᯠááá·áºáááºááá¯ááááºážáá áºáá¯á០ááœáá·áºááŒá¯áá»ááºááá¯ááááºážááá¯á·áááºáž ááŒá±á¬ááºážáá²ááá¯ááºáááºá ááᯠhttpd_t ááᯠááœáá·áºááŒá¯áá»ááºááá¯ááááºážááá¯á· ááœáŸá±á·ááŒáá«á áá¯á·á áááºážááẠNginx ááᯠááá¯á¡ááºáá±á¬áááºáá±á¬ááºááœáá·áºááá¯áá±ážáááºááŒá áºááŒá®áž áá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºáááºá¡ááŸá¬ážááŸá¬ááŒááºááŒááºážáá¯ááºáááºážááᯠáááºáááºáá¯ááºáá±á¬ááºááá¯ááºáá«áááºá
sudo semanage permissive -a httpd_t
ááá¯á·ááŒá±á¬áá·áºá áááºááẠSELinux ááᯠáá¬ááœááºáá¬ážááẠá á®áá¶ááŒá®ážáááºááŸáá·áº (áááºá¡ááŸááºáááẠSELinux ááá±á¬áá»ááºááᯠááá·áºáááºáá¯ááºááœáẠááá¬ážááá·áºáá«) ááŸáá·áº ááœáá·áºááŒá¯áá»ááºááá¯ááááºážáá»á¬ážááᯠáááºááŒá®ážáááºááŸáá·áºá á¡áá¬á¡á¬ážáá¯á¶áž áá±á¬ááºážááœááºá áœá¬ á¡áá¯ááºáá¯ááºááá¯ááºááẠgunicorn_exec_t á¡ááŒá Ạá¡ááá¡áá» á¡ááŸááºá¡áá¬ážááŒá¯ááẠááá¯á¡ááºáááºáá»á¬ážááᯠá¡ááŒá±ááŸá¬ááẠááá¯á¡ááºáá«áááºá ááááºá áááºáá¯á¶ážááœáá·áºááá·áºáááºáá»ááºáá»á¬ážá¡ááŒá±á¬ááºáž áááºáá±á·áá»áºá¡áá áºáá»á¬ážááᯠááŒáá·áºááŸá¯ááẠáááºááá¯ááºááá¯á· áááºáá±á¬ááºááŒáá·áºááŸá¯ááŒáá«á áá¯á·á
sudo ausearch -m AVC -c gunicorn
/srv/djangoapp ááŸá ááá¯ááºáá»á¬ážáá±á«áºááœáẠá¡áá»áá¯ážáá»áá¯ážáá±á¬ á¡áá¬áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá·áº 'comm="gunicorn"' áá«ááŸááá±á¬ áááºáá±á·áá»áºá¡áá»á¬ážá¡ááŒá¬ážááᯠáááºááœá±á·ááŒááºááááºááŒá áºááŒá®ážá ááá¯á·ááŒá±á¬áá·áº áááºážááẠá¡áá¶áááºááẠááá¯ááºáááºáá±á¬ ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážáá²á០áá áºáá¯ááŒá áºáááºá
ááá¯á·á¡ááŒááºá á€áá²á·ááá¯á·áá±á¬áááºáá±á·ááºá»áá áºáá¯áá±á«áºáá¬áááº-
type=AVC msg=audit(1545320700.070:1542): avc: denied { execute } for pid=20704 comm="(gunicorn)" name="python3.6" dev="vda3" ino=8515706 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file permissive=0
gunicorn service á á¡ááŒá±á¡áá±ááᯠááŒáá·áºáá« ááá¯á·ááá¯áẠps command ááᯠrun áá«áá áááºááá·áº áá¯ááºáá±á¬ááºááŒááºáž áá¯ááºáááºážá ááºááá¯áá»áŸ ááœá±á·ááááá·áºááẠááá¯ááºáá«á áá±áááºááá¬ážááẠáá»áœááºá¯ááºááá¯á·á virtualenv áááºáááºážáá»ááºááœáẠPython á áá¬ážááŒááºááᯠáááºáá±á¬ááºááẠááŒáá¯ážá á¬ážáá±áá¯á¶áááŒá®áž á¡áá¯ááºááá¬áž Script áá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠááŒáá¯ážáááºážáá±áá¯á¶ááááºá áá«ááŒá±á¬áá·áº á¡áᯠáá® executable file ááŸá áºáá¯ááᯠá¡ááŸááºá¡áá¬ážáá¯ááºááŒá®áž Django test page ááá¯ááœáá·áºááá¯ááºááá¬ážá
chcon -t gunicorn_exec_t /srv/djangoapp/django/bin/gunicorn /srv/djangoapp/django/bin/python3.6
áááºá¡áá áºááᯠáááœá±ážáá»ááºáá® áá±áááºáááºáá±á¬ááºááŸá¯ááᯠááŒááºáááºá áááºááẠááá¯á¡ááºáá«áááºá áááºážááᯠáááºáá»ááºáá»ááºážááŒááºáááºá áááºááá¯ááºááẠááá¯á·ááá¯áẠáááºáá±á¬ááºááŸá¯ááá¯áááºááá·áºááá¯ááºááŒá®áž ááá¯ááºááá¯ááá±á¬ááºáá¬ááœááºááœáá·áºáá±á¬á¡áá« socket ááá¯á áááºááœáá·áºááŒá¯áá«á áá¯ááºáááºážá ááºáá»á¬ážááẠps ááᯠá¡áá¯á¶ážááŒá¯á ááŸááºáááºáá±á¬ á¡ááœáŸááºážáá»á¬ážááᯠáááºáá¶áááŸáááŒá±á¬ááºáž á¡áááºááŒá¯áá«á
ps -efZ | grep gunicorn
áá¯á¶ááŸáẠSELinux áá°áá«áááᯠáá±á¬ááºá០áááºáá®ážááẠááá±á·áá«ááŸáá·áºá
ááᯠAVC áááºáá±á·áá»áºáá»á¬ážááᯠáááºááŒáá·áºáá«áá áá±á¬ááºáá¯á¶ážáááºáá±á·áá»áºááœáẠá¡ááá®áá±ážááŸááºážááŸáá·áº áááºáááºááá·áº á¡áá¬á¡á¬ážáá¯á¶ážá¡ááœáẠpermissive=1 ááŸáá·áº áá»ááºá áá áºá¡ááœáẠpermissive=0 áá«ááŸááááºá á¡ááŸááºáááẠá¡ááá®áá±ážááŸááºážáá áºáá¯á áááºáá²á·ááá¯á· áááºáá±á¬ááºááœáá·áº ááá¯á¡ááºáááºááᯠáááºáá¬ážáááºáá«áá ááá¯áá²á·ááá¯á·áá±á¬ ááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážááẠá¡áá±á¬ááºážáá¯á¶ážáááºážáááºážááᯠááẠá¡ááŒááºááŸá¬ááœá±ááá¯ááºáááºá ááá¯á·áá±á¬áº ááá¯á¡áá»áááºá¡ááá á áá áºááᯠáá¯á¶ááŒá¯á¶á¡á±á¬ááºáá¬ážááŒá®áž Django ááá±á¬áá»ááºá ááŸááºážáááºážááŒá®áž á¡áá¯á¶ážááŒá¯ááá¯ááºáá±á¬ á á¬áááºážá á áºááᯠááá°ááẠá¡áá±á¬ááºážáá¯á¶ážááŒá áºáááºá
sudo ausearch -m AVC
ááŒá áºááœá¬ážááŒá®!
á¡áá¯ááºáá¯ááºáá±á¬ Django ááá±á¬áá»ááºááẠNginx ááŸáá·áº Gunicorn WSGI á¡áá±á«áºá¡ááŒá±áá¶ááá·áº ááŸá±á·áááºážáá
áºáá¯ááŸáá·áºá¡áá° áá±á«áºáá¬áááºá RHEL 3 Beta repositories á០Python 10 ááŸáá·áº PostgreSQL 8 ááᯠáá»áœááºá¯ááºááá¯á· ááŒááºáááºáááºááŸááºáá¬ážáá«áááºá ááᯠáááºááẠááŸá±á·áááºá áááºáá®ážááá¯ááºááẠ(ááá¯á·ááá¯áẠááá¯ážááá¯ážááŸááºážááŸááºáž) Django á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠááŒáá·áºáá»ááºááá¯ááºááẠááá¯á·ááá¯áẠRHEL 8 Beta ááœáẠá¡ááŒá¬ážáááŸáááá¯ááºááá·áºáááááá¬áá»á¬ážááᯠá
á°ážá
ááºážáá±á·áá¬ááá¯ááºááŒá®áž ááœá²á·á
ááºážááŸá¯áá¯ááºáááºážá
ááºááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºáááºá á
áœááºážáá±á¬ááºáááºááá¯ááŒáŸáá·áºáááºááẠááá¯á·ááá¯áẠá€ááœá²á·á
ááºážáá¯á¶ááᯠááááºážááŸááá±ážááá¯ááºáááºá
source: www.habr.com