RHEL 8 Beta เบชเบฐเปเบซเบเบตเปเบซเปเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบกเบตเบเบธเบเบชเบปเบกเบเบฑเบเปเบซเบกเปเบซเบผเบฒเบ, เบฅเบฒเบเบเบทเปเบเบตเปเบชเบฒเบกเบฒเบเปเบญเบปเบฒเบซเบเปเบฒ, เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเบฒเบเบฎเบฝเบเบฎเบนเปเบชเบดเปเบเปเบซเบกเปเปเบกเปเบเบชเบฐเปเบซเบกเบตเปเบเบเบตเปเบเบตเบเบงเปเบฒเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เบเบฑเปเบเบเบฑเปเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเบชเบฐเปเบซเบเบตเบเบญเบเบเบฐเบเบธเบกเบเปเบฝเบงเบเบฑเบเบเบฒเบเบชเปเบฒเบเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบเบญเบตเบเปเบชเป Red Hat Enterprise Linux 8 Beta.
เปเบซเปเปเบญเบปเบฒ Python, เบเบฒเบชเบฒเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบตเปเบเบดเบเบปเบกเปเบเบเบฑเบเบเบฒเบเบฑเบเบเบฑเบเบเบฐเบเบฒ, เปเบเบฑเบเบเบทเปเบเบเบฒเบ, เบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบญเบ Django เปเบฅเบฐ PostgreSQL, เบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบตเปเบเปเบญเบเบเปเบฒเบเบเบปเปเบงเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเปเบฒเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ, เปเบฅเบฐ configure RHEL 8 Beta เปเบเบทเปเบญเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบงเบเปเบเบปเบฒ. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบตเปเบกเบชเปเบงเบเบเบฐเบเบญเบ (เบเปเปเปเบเปเบเบฑเบเบเบฐเปเบเบ) เบเบทเปเบกเบญเบตเบ.
เบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฒเบเบเบปเบเบชเบญเบเบเบฐเบเปเบฝเบเปเบเบ, เปเบเบฒเบฐเบงเปเบฒเบกเบฑเบเบซเบเปเบฒเบชเบปเบเปเบเบเบตเปเบเบฐเบเบปเปเบเบซเบฒเบเบงเบฒเบกเปเบเบฑเบเปเบเปเบเปเบเบญเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ, เบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเปเบเบทเปเบญเบเบเบฑเบเบเบธเปเบฅเบฐเบเบฐเบเบฒเบเบฒเบกเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบตเปเบกเบตเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบซเบผเบฒเบ. เปเบเบทเปเบญเปเบฅเบตเปเบกเบเบปเปเบเปเบเบเบเบฒเบเปเบซเบกเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบเบเบฒเบเบชเปเบฒเบเบเบปเปเบเปเบเบเบเบฐเบซเบเบฒเบเบเปเบญเบ, เบเปเบฒเบเบเบฒเบเบเปเบงเบเบกเบทเปเบเบทเปเบญเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเปเบเบฑเบเปเบเบเบงเปเบฒเบชเบดเปเบเบเบตเปเบเปเบญเบเปเบเบตเบเบเบถเปเบเปเบฅเบฐเบกเบฑเบเปเบเปเบเบญเบเปเบเบงเปเบ, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเปเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบฅเบฐเบชเปเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบตเปเบชเบฑเบเบชเบปเบเบซเบผเบฒเบ. เบกเบทเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเปเบงเบปเปเบฒเปเบเบดเบเบเบฒเบเบชเปเบฒเบเปเบเบเบเบปเปเบเปเบเบเบเบฑเปเบเบเปเบฒเบง.
เบกเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบเบเบฒเบเบเบณเปเบเปเบฎเบนเบ RHEL 8 Beta VM. เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบดเบเบเบฑเปเบเปเบเบทเปเบญเบ virtual เบเบฑเปเบเปเบเปเปเบฅเบตเปเบกเบเบปเปเบ, เบซเบผเบทเปเบเปเบฎเบนเบเบเบฒเบเปเบเบ KVM เบเบตเปเบกเบตเบขเบนเปเบเบฑเบเบเบฒเบเบชเบฐเบซเบกเบฑเบเปเบเบเปเบฒเบเบญเบเบเปเบฒเบ. เปเบกเบทเปเบญเปเบเปเบฎเบนเบเบเบฒเบเปเบเบ, เบเปเบฒเบเบเบฐเบเปเบญเบเบเบฑเปเบเบเปเบฒ CD virtual เบเบตเปเบเบฐเบเบฐเบเบญเบเบเปเบงเบ metadata เปเบฅเบฐเบเปเปเบกเบนเบเบเบนเปเปเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฅเบฒเบง (cloud-init). เบเปเบฒเบเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฎเบฑเบเบซเบเบฑเบเบเบดเปเบชเบเบเบฑเบเปเบเบเบชเปเบฒเบเบเบญเบเปเบเปเบเบซเบผเบทเบเบธเบเบเบตเปเบกเบตเบขเบนเป;
เบเปเปเบซเปเบเบดเบเบฒเบฅเบฐเบเบฒเบขเปเบฒเบเบฅเบฐเบญเบฝเบเบเปเบฝเบงเบเบฑเบเบเบฐเบเบงเบเบเบฒเบเบเบฑเบเบซเบกเบปเบ.
เบเบฒเบเบเบดเบเบเบฑเปเบ Django
เบเปเบงเบ Django เบฎเบธเปเบเปเบซเบกเปเบเบตเปเบชเบธเบ, เบเปเบฒเบเบเบฐเบเปเบญเบเบกเบตเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก virtual (virtualenv) เบเบฑเบ Python 3.5 เบซเบผเบทเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ. เปเบเบเบฑเบเบเบถเบ Beta เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเปเบงเปเบฒ Python 3.6 เปเบกเปเบเบกเบตเบขเบนเป, เปเบซเปเบเบงเบเปเบเบดเปเบเบงเปเบฒเบเบตเปเปเบกเปเบเบเปเบฅเบฐเบเบตเบเบตเปเปเบเปเบเบดเบ:
[cloud-user@8beta1 ~]$ python
-bash: python: command not found
[cloud-user@8beta1 ~]$ python3
-bash: python3: command not found
Red Hat เปเบเป Python เบขเปเบฒเบเบเบดเบเบเบฑเบเปเบเบฑเบเบเบธเบเปเบเบทเปเบญเบเบกเบทเบฅเบฐเบเบปเบเปเบ RHEL, เบเบฑเปเบเบเบฑเปเบเบเบปเบเปเบเปเบฎเบฑเบเบเบตเปเปเบเบฑเบเบซเบเบฑเบ?
เบเบงเบฒเบกเบเบดเบเปเบฅเปเบงเปเบกเปเบเบงเปเบฒเบเบฑเบเบเบฑเบเบเบฐเบเบฒ Python เบซเบผเบฒเบเบเบปเบเบเบฑเบเบเบดเบเปเบเบดเบเบเบฒเบเบซเบฑเบเบเปเบฝเบเบเบฒเบ Python 2 เปเบ Python 2, เปเบเบเบฐเบเบฐเบเบตเป Python 3 เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเปเบกเปเบเบขเบนเปเบเบฒเบเปเบเปเบเบฒเบเบเบฑเบเบเบฐเบเบฒเบขเปเบฒเบเบซเปเบฒเบงเบซเบฑเบ, เปเบฅเบฐเบชเบฐเบเบฑเบเปเบซเบกเปเปเปเบเบตเปเบกเบเบถเปเบเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบ. เบเบฑเปเบเบเบฑเปเบ, เปเบเบทเปเบญเบเบญเบเบชเบฐเบซเบเบญเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเปเบเบทเปเบญเบเบกเบทเบฅเบฐเบเบปเบเบเบตเปเบซเบกเบฑเปเบเบเบปเบเปเบเบเบฐเบเบฐเบเบตเปเบชเบฐเปเบซเบเบตเปเบซเปเบเบนเปเปเบเปเปเบเบปเปเบฒเปเบเบดเบ Python เบฎเบธเปเบเปเบซเบกเปเบเปเบฒเบเป, เบฅเบฐเบเบปเบ Python เปเบเปเบเบทเบเบเปเบฒเบเปเบเบขเบนเปเปเบเบเบธเบเปเบซเบกเปเปเบฅเบฐเบชเบฐเบซเบเบญเบเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเบเบดเบเบเบฑเปเบเบเบฑเบ Python 2.7 เปเบฅเบฐ 3.6. เบเปเปเบกเบนเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบฅเบฐเปเบเบฑเบเบซเบเบฑเบเบเบงเบเบกเบฑเบเบเบทเบเบชเปเบฒเบเบเบทเปเบเบชเบฒเบกเบฒเบเบเบปเบเปเบเปเปเบเบเบฒเบเบเบดเบกเปเบ
เบเบฑเปเบเบเบฑเปเบ, เปเบเบทเปเบญเปเบซเปเปเบเป Python เปเบฎเบฑเบเบงเบฝเบ, เบเปเบฒเบเบเบฝเบเปเบเปเบเปเบญเบเบเบฒเบเบเบดเบเบเบฑเปเบเบชเบญเบเปเบเบฑเบเปเบเบฑเบ, เปเบเบเบกเบต python3-pip เบฅเบงเบกเปเบเบฑเบ dependency.
sudo yum install python36 python3-virtualenv
เปเบเบฑเบเบซเบเบฑเบเบเบถเปเบเบเปเปเปเบเปเบเบฒเบเปเบเปเบกเบเบนเบเปเบเบเบเบปเบเบเบฒเบกเบเบตเป Langdon เปเบเบฐเบเปเบฒเปเบฅเบฐเบเบดเบเบเบฑเปเบ pip3? เบเบฒเบเบฎเบฑเบเบชเบฒเบขเบนเปเปเบเปเบเบเบญเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบตเปเบเบฐเบกเบฒเปเบเบดเบ, เบกเบฑเบเปเบเบฑเบเบเบตเปเบฎเบนเปเบเบฑเบเบงเปเบฒ Ansible เบเบฐเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเบเบดเบเบเบฑเปเบ pip เปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบ, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเปเบกเบเบนเบ pip เบเปเปเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ virtualenvs เบเบตเปเบกเบต pip เบเปเบฒเบเบปเบเปเบญเบเบเบตเปเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเป.
เบเปเบงเบเบเบฒเบเบเบฒเบชเบฒ python3 เบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบเบฒเบเบเปเบฒเบเบฑเบเบเบญเบเบเปเบฒเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเบทเบเบเปเปเบเบฐเบเบงเบเบเบฒเบเบเบดเบเบเบฑเปเบ Django เปเบฅเบฐเบกเบตเบฅเบฐเบเบปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเปเบญเบกเบเบฑเบเบญเบปเบเบเบฐเบเบญเบเบญเบทเปเบเปเบเบญเบเบเบงเบเปเบฎเบปเบฒ. เบกเบตเบซเบผเบฒเบเบเบฒเบเปเบฅเบทเบญเบเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบกเบตเบขเบนเปเปเบเบญเบดเบเปเบเบตเปเบเบฑเบ. เบกเบตเบชเบฐเบเบฑเบเบซเบเบถเปเบเบเบตเปเบเปเบฒเบชเบฐเปเบซเบเบตเบขเบนเปเบเบตเปเบเบตเป, เปเบเปเบเบนเปเปเบเปเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเบฐเบเบงเบเบเบฒเบเบเบญเบเบเบปเบเปเบญเบ.
เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบดเบเบเบฑเปเบเปเบงเบตเบเบฑเบ PostgreSQL เปเบฅเบฐ Nginx เบเบตเปเบกเบตเบขเบนเปเปเบ RHEL 8 เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเปเบเบเปเบเป Yum.
sudo yum install nginx postgresql-server
PostgreSQL เบเบฐเบเปเบญเบเบเบฒเบ psycopg2, เปเบเปเบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบกเบตเบขเบนเปเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก virtualenv เปเบเบปเปเบฒเบเบฑเปเบ, เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบดเบเบเบฑเปเบเบกเบฑเบเปเบเบเปเบเป pip3 เบเปเบญเบกเบเบฑเบ Django เปเบฅเบฐ Gunicorn. เปเบเปเบเปเบฒเบญเบดเบเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบฑเปเบเบเปเบฒ virtualenv.
เบกเบตเบเบฒเบเปเบเปเบงเบฒเบเบตเปเบฅเบทเปเบญเบเปเบเปเบฝเบงเบเบฑเบเบซเบปเบงเบเปเปเบเบญเบเบเบฒเบเปเบฅเบทเบญเบเบชเบฐเบเบฒเบเบเบตเปเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเปเบเบเบฒเบเบเบดเบเบเบฑเปเบเปเบเบเบเบฒเบ Django, เปเบเปเปเบกเบทเปเบญเบชเบปเบเปเบช, เบเปเบฒเบเบชเบฒเบกเบฒเบเบซเบฑเบเปเบเบซเบฒ Linux Filesystem Hierarchy Standard. เปเบเบเบชเบฐเปเบเบฒเบฐ, FHS เบเปเบฒเบงเบงเปเบฒ / srv เบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญ: "เปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบกเบนเบเบชเบฐเปเบเบฒเบฐเบเบญเบเปเบเบปเปเบฒเบเบฒเบ - เบเปเปเบกเบนเบเบเบตเปเบฅเบฐเบเบปเบเบเบฐเบฅเบดเบ, เปเบเบฑเปเบเบเปเปเบกเบนเบเปเบเบตเบเปเบงเบตเปเบงเบฑเบเปเบฅเบฐเบชเบฐเบเบดเบ, เบเปเปเบกเบนเบเบเบตเปเปเบเบฑเบเปเบงเปเปเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ FTP, เปเบฅเบฐเบฅเบฐเบเบปเบเบเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒ (เบเบฐเบเบปเบเบขเบนเปเปเบ FHS -2.3 เปเบเบเบต 2004).
เบเบตเปเปเบกเปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเปเป, เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบเบปเปเบฒเปเบเปเบ / srv, เปเบเบดเปเบเปเบเบฑเบเปเบเบปเปเบฒเบเบญเบเปเบเบเบเบนเปเปเบเปเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ (cloud-user).
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 เปเบกเปเบ script postgresql-setup เบเบตเปเบเบทเบเบเบดเบเบเบฑเปเบเบเบฑเบเบเบธเบ postgresql-server. เบชเบฐเบเบฃเบดเบเบเบตเปเบเปเบงเบเปเบซเปเบเปเบฒเบเบเบฐเบเบดเบเบฑเบเบงเบฝเบเบเบฒเบเบเบทเปเบเบเบฒเบเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบฒเบเบเบธเปเบกเบเบญเบเบเบธเปเบกเบเบฒเบเบเปเปเบกเบนเบ, เปเบเบฑเปเบ: เบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบญเบเบเบธเปเบกเบซเบผเบทเบเบฐเบเบงเบเบเบฒเบเบเบปเบเบฅเบฐเบเบฑเบ. เปเบเบทเปเบญเบเบฑเปเบเบเปเบฒเบเบปเบงเบขเปเบฒเบ PostgreSQL เปเบซเบกเปเปเบเบฅเบฐเบเบปเบ RHEL, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบฒเบชเบฑเปเบ:
sudo /usr/bin/postgresql-setup -initdb
เบเบฒเบเบเบฑเปเบเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฅเบตเปเบก PostgreSQL เปเบเบเปเบเป systemd, เบชเปเบฒเบเบเบฒเบเบเปเปเบกเบนเบ, เปเบฅเบฐเบเบฑเปเบเปเบเบเบเบฒเบเปเบ Django. เบเบทเปเปเบงเปเบงเปเบฒเบเบฐเบเบดเบเปเบเบตเบ PostgreSQL เบเบทเบเปเปเปเบซเบผเบฑเบเบเบฒเบเปเบฎเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบเบดเบชเบนเบเบขเบทเบเบขเบฑเบเบฅเบนเบเบเปเบฒเบ (เปเบเบเบเบปเบเบเบฐเบเบดเปเบฅเปเบง pg_hba.conf) เปเบเบทเปเบญเบเบฑเปเบเบเปเบฒเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบเบเปเบฒเบเบชเปเบฒเบฅเบฑเบเบเบนเปเปเบเปเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ. เบเปเบฒเบเปเบฒเบเบเบปเบเบเบงเบฒเบกเบซเบเบธเปเบเบเบฒเบเบญเบทเปเบเป, เปเบซเปเปเบเปเปเบเบงเปเบฒเบเปเบฝเบเบเบฒเบเบเบฑเปเบเบเปเบฒ IPv4 เปเบฅเบฐ IPv6 เปเบเปเบเบฅเป pg_hba.conf.
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 เปเบเปเบเบเบเบฒเบเปเบฅเบฐเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบเบเปเปเบกเบนเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบญเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒเปเบเบทเปเบญเปเบซเปเปเบเปเปเบเบงเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบฎเบฑเบเบงเบฝเบ. เบซเบผเบฑเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบฒเบเบเบฑเบเบเบฐเบเบฒ, เบกเบฑเบเปเบเบฑเบเบเบงเบฒเบกเบเบดเบเบเบตเปเบเบตเบเบตเปเบเบฐเบชเปเบฒเบเบเบนเปเปเบเป admin เปเบเบทเปเบญเบเบปเบเบชเบญเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบ.
./manage.py runserver 0.0.0.0:8000
./manage.py createsuperuser
WSGI? เบซเบงเบฒเบ?
เปเบเบตเบเปเบงเบตเบเบฑเบเบเบฐเบเบฒเปเบกเปเบเปเบเบฑเบเบเบฐเปเบซเบเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบชเบญเบ, เปเบเปเปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเปเบฒเบเบเปเบญเบเบเปเบฒเบซเบเบปเบเบเปเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบกเปเบฅเบฐเบเบปเบงเปเบเบเบชเปเบฒเบฅเบฑเบ Web Server Gateway Interface (WSGI). เบกเบตเบซเบผเบฒเบเบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบปเปเบงเปเบ, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, Apache HTTPD เบเบฑเบ uWSGI เบซเบผเบท Nginx เบเบฑเบ Gunicorn.
เบงเบฝเบเบเบญเบ Web Server Gateway Interface เปเบกเปเบเปเบเบทเปเบญเบชเบปเปเบเบเปเปเบเปเบฒเบฎเปเบญเบเบเปเบเบฒเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเปเบงเบฑเบเปเบเบเปเปเบเบซเบฒเบเบญเบเปเบงเบฑเบ Python. WSGI เปเบเบฑเบเบเบตเปเบฅเบถเบเบฅเบฑเบเบเบญเบเบญเบฐเบเบตเบเบเบตเปเบเบตเปเบฎเปเบฒเบเปเบเปเบงเบฅเบฒเบเบตเปเปเบเบทเปเบญเบเบเบฑเบ CGI เบเบฐเบกเบฒเบ, เปเบฅเบฐเบกเบทเปเบเบตเป WSGI เปเบกเปเบเบกเบฒเบเบเบฐเบเบฒเบ de facto, เบเปเปเบงเปเบฒเบเบฐเปเบเบฑเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเปเบงเบฑเบเปเบเบเปเบซเบผเบทเบเบญเบ Python เบเบทเบเบเปเบฒเปเบเป. เปเบเปเปเบเบดเบเบงเปเบฒเบเบฐเบกเบตเบเบฒเบเบเปเบฒเปเบเปเบขเปเบฒเบเบเบงเปเบฒเบเบเบงเบฒเบ, เบเบฑเบเบกเบตเบซเบผเบฒเบ nuances เปเบเปเบงเบฅเบฒเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบญเบเปเบซเบผเบปเปเบฒเบเบตเป, เปเบฅเบฐเบเบฒเบเปเบฅเบทเบญเบเบซเบผเบฒเบ. เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฐเบเบฒเบเบฒเบกเบชเปเบฒเบเบเบฒเบเปเบเปเบเบญเบเบฅเบฐเบซเบงเปเบฒเบ Gunicorn เปเบฅเบฐ Nginx เบเปเบฒเบเปเบเบปเปเบฒเบฎเบฑเบ.
เปเบเบทเปเบญเบเบเบฒเบเบเบฑเบเบชเบญเบเบญเบปเบเบเบฐเบเบญเบเปเบซเบผเบปเปเบฒเบเบตเปเบเบทเบเบเบดเบเบเบฑเปเบเบขเบนเปเปเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบเบฝเบงเบเบฑเบ, เปเบซเปเบฅเบญเบเปเบเปเบเบฑเบญเบเปเบเบฑเบ UNIX เปเบเบเบเบฑเบญเบเปเบเบฑเบเปเบเบทเบญเบเปเบฒเบ. เปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเบชเบทเปเบชเบฒเบเบเปเบญเบเบเบฒเบเปเบเบปเปเบฒเบฎเบฑเบเปเบเบเปเบฅเบฐเบเบตเปเบเบเปเปเบเบฒเบก, เปเบซเปเบเบฐเบเบฒเบเบฒเบกเบเปเบฒเปเบเบตเบเบเบฑเปเบเบเบญเบเบซเบเบถเปเบเปเบฅเบฐเบเปเบฒเบเบปเบเบเบฒเบเปเบเบตเบเปเบเป socket เบชเปเบฒเบฅเบฑเบ Gunicorn เบเปเบฒเบ systemd.
เบเบฐเบเบงเบเบเบฒเบเบชเปเบฒเบ socket activated services เปเบกเปเบเบเปเบญเบเบเปเบฒเบเบเปเบฒเบเบเบฒเบ. เบเปเบฒเบญเบดเบ, เปเบเบฅเปเบซเบเปเบงเบเบเบทเบเบชเปเบฒเบเบเบทเปเบเบเบตเปเบเบฐเบเบญเบเบเปเบงเบเบเปเบฒเบชเบฑเปเบ ListenStream เบเบตเปเปเบเบซเบฒเบเบธเบเบเบตเปเปเบเบปเปเบฒเบฎเบฑเบ UNIX เบเบฐเบเบทเบเบชเปเบฒเบเบเบทเปเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเปเบเบฅเปเบซเบเปเบงเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบตเปเบเปเบฒเบชเบฑเปเบ Requires เบเบฐเบเบตเปเปเบเบซเบฒเปเบเบฅเปเบซเบเปเบงเบเปเบเบปเปเบฒเบฎเบฑเบ. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เปเบเปเบเบฅเปเบซเบเปเบงเบเบเปเบฅเบดเบเบฒเบ, เบเบฑเบเบซเบกเบปเบเบเบตเปเบเบฑเบเปเบซเบผเบทเบญเปเบกเปเบเปเบเบซเบฒ Gunicorn เบเบฒเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก virtual เปเบฅเบฐเบชเปเบฒเบเบเบฒเบเบเบนเบเบกเบฑเบ WSGI เบชเปเบฒเบฅเบฑเบเบเบฑเบญเบเปเบเบฑเบ UNIX เปเบฅเบฐเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ Django.
เบเบตเปเปเบกเปเบเบเบฒเบเบเบปเบงเบขเปเบฒเบเบเบญเบเปเบเบฅเปเบซเบเปเบงเบเบเบฒเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเปเบเบฑเบเบเบทเปเบเบเบฒเบ. เบเปเบฒเบญเบดเบเบเบงเบเปเบฎเบปเบฒเบเบฑเปเบเบเปเบฒเปเบเบปเปเบฒเบฎเบฑเบ.
[Unit]
Description=Gunicorn WSGI socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
เบเบญเบเบเบตเปเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบฑเปเบเบเปเบฒ Gunicorn daemon.
[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;
}
}
เปเบฅเบตเปเบกเบเบปเปเบเบเบฑเบญเบเปเบเบฑเบ Gunicorn เปเบฅเบฐ Nginx เปเบเบเปเบเป systemd เปเบฅเบฐเบเปเบฒเบเบเปเบญเบกเบเบตเปเบเบฐเปเบฅเบตเปเบกเบเบฒเบเบเบปเบเบชเบญเบ.
เบเบงเบฒเบกเบเบดเบเบเบฒเบ Gateway เบเปเปเบเบต?
เบเปเบฒเบเปเบฒเบเปเบชเปเบเบตเปเบขเบนเปเปเบเบปเปเบฒเปเบเปเบเบเบปเบงเบเปเบญเบเปเบงเบฑเบเบเบญเบเบเปเบฒเบ, เบเปเบฒเบเบเบฐเปเบเปเบฎเบฑเบเบเบงเบฒเบกเบเบดเบเบเบฒเบ 502 Bad Gateway. เบกเบฑเบเบญเบฒเบเบเบฐเปเบเบฑเบเบชเบฒเปเบซเบเบกเบฒเบเบฒเบเบเบฒเบเบญเบฐเบเบธเบเบฒเบเบเบฑเบญเบเปเบเบฑเบ 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. เปเบเบทเปเบญเบเบเบฒเบเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเปเบเป daemon เบเบตเปเบเปเปเบกเบตเบเบฐเปเบเบเบฒเบเบเบทเบเบชเปเบฒเบเบเบถเปเบ, เบกเบฑเบเบเบฐเบเบทเบเบซเบกเบฒเบเปเบเบฑเบ init_t. เปเบซเปเบเบปเบเบชเบญเบเบเบดเบเบชเบฐเบเบตเบเบตเปเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ.
sudo setenforce 0
เบเบฑเบเบซเบกเบปเบเบเบตเปเบญเบฒเบเบเบฐเปเบฎเบฑเบเปเบซเปเปเบเบตเบเบเบฒเบเบงเบดเบเบฒเบเบงเบดเบเบฒเบเปเบฅเบฐเบเปเปเบฒเบเบฒเบเบญเบเปเบฅเบทเบญเบ, เปเบเปเบเบตเปเปเบกเปเบเบเบฝเบเปเบเป debugging เบเบปเปเบเปเบเบ. เปเบซเปเบเบดเบเบเบฒเบเบเบงเบเบชเบญเบเบเบฝเบเปเบเปเปเบเบทเปเบญเปเบซเปเปเบเปเปเบเบงเปเบฒเบเบตเปเปเบกเปเบเบเบฑเบเบซเบฒ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเบเบฐเบชเบปเปเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบฑเบเบเบทเบเบชเบนเปเบชเบฐเบเบฒเบเบเบตเปเบเบญเบเบกเบฑเบ.
เปเบเบเบเบฒเบเปเบซเบผเบเบซเบเปเบฒเบเปเบเบทเบเบซเบเปเบฒเปเบเบเบปเบงเบเปเบญเบเปเบงเบฑเบเบซเบผเบทเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบฒเบชเบฑเปเบ curl เบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบทเบเปเบซเบกเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบซเบเปเบฒเบเบฒเบเบเบปเบเบชเบญเบ Django.
เบเบฑเปเบเบเบฑเปเบ, เปเบซเปเปเบเปเปเบเบงเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบฎเบฑเบเบงเบฝเบเปเบฅเบฐเบเปเปเบกเบตเบเบฑเบเบซเบฒเบเบฒเบเบญเบฐเบเบธเบเบฒเบ, เบเบงเบเปเบฎเบปเบฒเปเบเบตเบเปเบเป SELinux เบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบ.
sudo setenforce 1
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบเปเปเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบ audit2allow เบซเบผเบทเบเบฒเบเบชเปเบฒเบเบเบฐเปเบเบเบฒเบเปเบเบทเบญเบเบเบตเปเบกเบต sepolgen เบขเบนเปเบเบตเปเบเบตเป, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเปเปเบกเบตเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ 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 เบเปเบฒเบฅเบฑเบเบเบฑเบเบเบงเบฒเบเบชเบดเปเบเบญเบทเปเบเบเบญเบเปเบซเบเบทเบญเบเบฒเบเบชเบดเปเบเบเบตเป 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 เบเปเบญเบเบเบฑเบเบเปเปเปเบซเป Nginx เบเบฝเบเบเปเปเบกเบนเบเปเบชเปเปเบเบปเปเบฒเบฎเบฑเบ UNIX เบเบตเปเปเบเปเปเบเบ Gunicorn. เปเบเบเบเบปเบเบเบฐเบเบด, เปเบเบเปเบฅเบฐเบเบตเบเบฑเปเบเบเปเบฒเบง, เบเบฐเปเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบ, เปเบเปเบเบฑเบเบกเบตเบชเบดเปเบเบเปเบฒเบเบฒเบเบญเบทเปเบเปเบขเบนเปเบเปเบฒเบเบซเบเปเบฒ. เบเบญเบเบเบฑเปเบเบเปเบฒเบเบเบฑเบเบชเบฒเบกเบฒเบเบเปเบฝเบเบเบฒเบเบเบฑเปเบเบเปเบฒเปเบเปเบกเบเบเบฒเบเปเบเปเบกเบเบเปเบฒเบเบฑเบเปเบเบซเบฒเปเบเปเบกเบเบเบตเปเบญเบฐเบเบธเบเบฒเบ. เบเบญเบเบเบตเปเปเบซเปเบเปเบฒเบ 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 เบเปเบฒเบฅเบฑเบเบเบฐเบเบฒเบเบฒเบกเปเบเบปเปเบฒเปเบเบดเบเบเบปเบงเปเบเบเบฒเบชเบฒ Python เปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบก virtualenv เบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบญเบฒเบเบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบชเบฐเบเบดเบเบเบญเบเบเบฐเบเบฑเบเบเบฒเบ. เบชเบฐเบเบฑเปเบเบเบญเบเบเบตเปเปเบซเปเบเบงเบเปเบฎเบปเบฒเปเบฎเบฑเบเปเบเบทเปเบญเบเบซเบกเบฒเบเบเบฑเบเบชเบญเบเปเบเบฅเปเบเบตเปเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเปเปเบฅเบฐเบเบงเบเปเบเบดเปเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเบตเบเบซเบเปเบฒเบเบปเบเบชเบญเบ Django เบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบเป.
chcon -t gunicorn_exec_t /srv/djangoapp/django/bin/gunicorn /srv/djangoapp/django/bin/python3.6
เบเบฒเบเบเปเบฅเบดเบเบฒเบ gunicorn เบเบฐเบเปเบญเบเบเบทเบเปเบฅเบตเปเบกเบเบปเปเบเปเบซเบกเปเบเปเบญเบเบเบตเปเบเบฐเบชเบฒเบกเบฒเบเปเบฅเบทเบญเบเปเบเบฑเบเปเบซเบกเปเปเบเป. เบเปเบฒเบเบชเบฒเบกเบฒเบ restart เบกเบฑเบเบเบฑเบเบเบตเบซเบผเบทเบขเบธเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเปเบฅเบฐเปเบซเป socket เปเบฅเบตเปเบกเบเบปเปเบเบกเบฑเบเปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเบเปเบเบตเบเปเบงเบฑเบเปเบเบเปเปเบเบเบปเบงเบเปเบญเบเปเบงเบฑเบ. เบเบงเบเบชเบญเบเบงเปเบฒเบเบฐเบเบงเบเบเบฒเบเปเบเปเบฎเบฑเบเบเปเบฒเบเบเบตเปเบเบทเบเบเปเบญเบเปเบเบเปเบเป ps.
ps -efZ | grep gunicorn
เบขเปเบฒเบฅเบทเบกเบชเปเบฒเบเบเบฐเปเบเบเบฒเบ SELinux เบเบปเบเบเบฐเบเบดเปเบเบเบฒเบเบซเบผเบฑเบ!
เบเปเบฒเบเปเบฒเบเปเบเบดเปเบเบเปเปเบเบงเบฒเบก AVC เปเบเบเบฑเบเบเบธเบเบฑเบ, เบเปเปเบเบงเบฒเบกเบชเบธเบเบเปเบฒเบเบเบฐเบเบญเบเบเปเบงเบ permissive=1 เบชเปเบฒเบฅเบฑเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ, เปเบฅเบฐ permissive=0 เบชเปเบฒเบฅเบฑเบเบชเปเบงเบเบเบตเปเปเบซเบผเบทเบญเบเบญเบเบฅเบฐเบเบปเบ. เบเปเบฒเบเปเบฒเบเปเบเบปเปเบฒเปเบเบงเปเบฒเบเบฐเปเบเบเบเบญเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเปเบเปเบเบดเบเบเปเบญเบเบเบฒเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเบญเบเบซเบฒเบงเบดเบเบตเบเบตเปเบเบตเบเบตเปเบชเบธเบเปเบเบทเปเบญเปเบเปเปเบเบเบฑเบเบซเบฒเบเบฑเปเบเบเปเบฒเบงเบขเปเบฒเบเปเบงเบงเบฒ. เปเบเปเบเบปเบเบเปเบงเบฒเบเบฑเปเบ, เบกเบฑเบเบเบตเบเบตเปเบชเบธเบเบเบตเปเบเบฐเบฎเบฑเบเบชเบฒเบฅเบฐเบเบปเบเปเบซเปเบเบญเบเปเบเปเบฅเบฐเปเบเปเบฎเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเบเบตเปเบเบฑเบเปเบเบเปเบฅเบฐเบชเบฒเบกเบฒเบเปเบเปเปเบเปเบเบญเบเปเบเบเบเบฒเบ Django.
sudo ausearch -m AVC
เปเบเบตเบเบเบถเปเบ!
เปเบเบเบเบฒเบ Django เบเบตเปเปเบฎเบฑเบเบงเบฝเบเปเบเปเบเบฒเบเบปเบเบขเบนเปเบเบฑเบเบซเบเปเบฒเบเปเบฒเบเบซเบเปเบฒเปเบเบเบญเบตเบเปเบชเป Nginx เปเบฅเบฐ Gunicorn WSGI. เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฑเปเบเบเปเบฒ Python 3 เปเบฅเบฐ PostgreSQL 10 เบเบฒเบ RHEL 8 Beta repositories. เปเบเบเบฑเบเบเบธเบเบฑเบเบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเบงเปเบเบเปเบฒเบเบซเบเปเบฒเปเบฅเบฐเบชเปเบฒเบ (เบซเบผเบทเบเบฝเบเปเบเปเบเปเบฒเปเบเป) เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ Django เบซเบผเบทเบเบปเปเบเบซเบฒเปเบเบทเปเบญเบเบกเบทเบญเบทเปเบเปเบเบตเปเบกเบตเบขเบนเปเปเบ RHEL 8 Beta เปเบเบทเปเบญเปเบฎเบฑเบเปเบซเปเบเบฐเบเบงเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบญเบฑเบเบเบฐเปเบเบกเบฑเบ, เบเบฑเบเบเบธเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เบซเบผเบทเปเบกเปเบเบฐเบเบฑเปเบเบเบฑเบเบเบธเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบตเป.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com