Workshop RHEL 8 Beta: แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ•แƒ”แƒ‘ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ

RHEL 8 Beta แƒกแƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒก แƒ‘แƒ”แƒ•แƒ  แƒแƒฎแƒแƒš แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜, แƒ—แƒฃแƒ›แƒชแƒ แƒแƒฎแƒšแƒ˜แƒก แƒกแƒฌแƒแƒ•แƒšแƒ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ˜แƒ แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒแƒจแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— แƒกแƒ”แƒ›แƒ˜แƒœแƒแƒ แƒก Red Hat Enterprise Linux 8 Beta-แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ˜แƒœแƒคแƒ แƒแƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘.

Workshop RHEL 8 Beta: แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ•แƒ”แƒ‘ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ

แƒ›แƒแƒ“แƒ˜แƒ— แƒแƒ•แƒ˜แƒฆแƒแƒ— Python, แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒœแƒ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ˜, Django-แƒกแƒ แƒ“แƒ PostgreSQL-แƒ˜แƒก แƒ™แƒแƒ›แƒ‘แƒ˜แƒœแƒแƒชแƒ˜แƒ, แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ’แƒแƒ•แƒ แƒชแƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒ›แƒ‘แƒ˜แƒœแƒแƒชแƒ˜แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“, แƒ“แƒ แƒ“แƒแƒ•แƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— RHEL 8 Beta แƒ›แƒแƒ—แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” (แƒแƒ แƒแƒ™แƒšแƒแƒกแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš) แƒ˜แƒœแƒ’แƒ แƒ”แƒ“แƒ˜แƒ”แƒœแƒขแƒก.

แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒ’แƒแƒ แƒ”แƒ›แƒ แƒจแƒ”แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒแƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ, แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ“แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒแƒฎแƒแƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ”แƒ‘แƒแƒ“, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒ˜แƒฌแƒงแƒแƒ— แƒžแƒแƒขแƒแƒ แƒ, แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒžแƒ แƒแƒขแƒแƒขแƒ˜แƒžแƒ˜แƒก แƒฎแƒ”แƒšแƒ˜แƒ— แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒ—, แƒ แƒแƒ—แƒ แƒœแƒแƒฎแƒแƒ— แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒก แƒ˜แƒก, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒ’แƒแƒ“แƒแƒฎแƒ•แƒ˜แƒ“แƒ”แƒ— แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒแƒ–แƒ” แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜. แƒ“แƒฆแƒ”แƒก แƒฉแƒ•แƒ”แƒœ แƒ•แƒกแƒแƒฃแƒ‘แƒ แƒแƒ‘แƒ— แƒแƒกแƒ”แƒ—แƒ˜ แƒžแƒ แƒแƒขแƒแƒขแƒ˜แƒžแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ–แƒ”.

แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒแƒ— RHEL 8 Beta VM แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒ—. แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒแƒ— แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒฅแƒแƒœแƒ แƒœแƒฃแƒšแƒ˜แƒ“แƒแƒœ, แƒแƒœ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— KVM แƒกแƒขแƒฃแƒ›แƒ แƒ˜แƒก แƒกแƒฃแƒ แƒแƒ—แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ Beta แƒ’แƒแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒ—. แƒกแƒขแƒฃแƒ›แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ CD, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ›แƒ”แƒขแƒแƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒ“แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒฆแƒ แƒฃแƒ‘แƒšแƒ˜แƒก แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (cloud-init). แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ  แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒ แƒแƒ˜แƒ›แƒ” แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒ“แƒ˜แƒกแƒ™แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒกแƒ—แƒแƒœ แƒแƒœ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ› แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ—แƒแƒœ; แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒแƒกแƒ” แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ.

แƒ›แƒแƒ“แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒแƒฎแƒšแƒแƒก แƒ›แƒ˜แƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒ›แƒ—แƒ”แƒš แƒžแƒ แƒแƒชแƒ”แƒกแƒก.

แƒฏแƒแƒœแƒ’แƒแƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ

Django-แƒก แƒฃแƒแƒฎแƒšแƒ”แƒกแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒ—, แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ แƒ”แƒ›แƒ (virtualenv) Python 3.5 แƒแƒœ แƒฃแƒคแƒ แƒ แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒ—. แƒ‘แƒ”แƒขแƒ แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒ‘แƒจแƒ˜ แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ แƒแƒ› 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 แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒ“แƒ แƒแƒฎแƒแƒš แƒžแƒแƒ™แƒ”แƒขแƒจแƒ˜ แƒ“แƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒ แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก 2.7 แƒ“แƒ 3.6 แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ. แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒแƒ—แƒ˜ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒžแƒฃแƒ‘แƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒจแƒ˜ แƒšแƒ”แƒœแƒ’แƒ“แƒแƒœ แƒฃแƒแƒ˜แƒขแƒ˜แƒก แƒ‘แƒšแƒแƒ’แƒ˜ (แƒšแƒ”แƒœแƒ’แƒ“แƒแƒœ แƒฃแƒแƒ˜แƒขแƒ˜).

แƒแƒกแƒ” แƒ แƒแƒ›, แƒกแƒแƒ›แƒฃแƒจแƒแƒ Python-แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ แƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ, python3-pip-แƒ˜แƒ— แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ—.

sudo yum install python36 python3-virtualenv

แƒ แƒแƒขแƒแƒ› แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒ–แƒแƒ แƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒšแƒ”แƒœแƒ’แƒ“แƒแƒœแƒ˜ แƒ’แƒ•แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒก แƒ“แƒ แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒแƒ— pip3? แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜แƒ, แƒ แƒแƒ› Ansible-แƒก แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒžแƒ˜แƒžแƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ’แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒแƒ“, แƒ แƒแƒ“แƒ’แƒแƒœ แƒžแƒ˜แƒž แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒแƒ  แƒฃแƒญแƒ”แƒ แƒก แƒ›แƒฎแƒแƒ แƒก virtualenv-แƒ”แƒ‘แƒก แƒžแƒ”แƒ แƒกแƒแƒœแƒแƒšแƒฃแƒ แƒ˜ แƒžแƒ˜แƒž-แƒจแƒ”แƒ›แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜แƒ—.

แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒ’แƒแƒœแƒ™แƒแƒ แƒ’แƒฃแƒšแƒ”แƒ‘แƒแƒจแƒ˜ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ˜ python3 แƒ—แƒแƒ แƒฏแƒ˜แƒ›แƒแƒœแƒ˜แƒ—, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒแƒ’แƒ แƒซแƒ”แƒšแƒแƒ— Django-แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒ“แƒ แƒ’แƒฅแƒแƒœแƒ“แƒ”แƒ— แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒฉแƒ•แƒ”แƒœแƒก แƒกแƒฎแƒ•แƒ แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“. แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜. แƒแƒฅ แƒแƒ แƒ˜แƒก แƒ”แƒ แƒ—แƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ˜แƒšแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒœ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜.

แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ— PostgreSQL แƒ“แƒ Nginx แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ RHEL 8-แƒจแƒ˜ แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ Yum-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.

sudo yum install nginx postgresql-server

PostgreSQL แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ psycopg2, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ›แƒฎแƒแƒšแƒแƒ“ virtualenv แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒ— pip3-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— Django-แƒกแƒ แƒ“แƒ Gunicorn-แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“. แƒ›แƒแƒ’แƒ แƒแƒ› แƒฏแƒ”แƒ  แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒแƒ— virtualenv.

แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒ˜แƒก แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ™แƒแƒ›แƒแƒ—แƒ˜ Django แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜ แƒแƒ“แƒ’แƒ˜แƒšแƒ˜แƒก แƒแƒ แƒฉแƒ”แƒ•แƒ˜แƒก แƒ—แƒ”แƒ›แƒแƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ”แƒญแƒ•แƒ˜ แƒ’แƒ”แƒžแƒแƒ แƒ”แƒ‘แƒแƒ—, แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒแƒ— Linux แƒคแƒแƒ˜แƒšแƒฃแƒ แƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒ˜แƒ”แƒ แƒแƒ แƒฅแƒ˜แƒ˜แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒก. แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒแƒ“, 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-แƒ˜แƒก แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒกแƒแƒก แƒแƒ แƒ˜แƒก postgresql-setup แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ postgresql-แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“. แƒ”แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜ แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒแƒ— แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜แƒก แƒ˜แƒœแƒ˜แƒชแƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒแƒœ แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜. แƒแƒฎแƒแƒšแƒ˜ 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 แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒฃแƒจแƒ•แƒแƒ— แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜, แƒ แƒแƒ—แƒ แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก. แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ™แƒแƒ แƒ’แƒ˜ แƒ˜แƒ“แƒ”แƒแƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒกแƒ—แƒแƒœ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“.

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

WSGI? แƒ•แƒแƒ˜?

แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒแƒ“ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒ“แƒ แƒžแƒ แƒแƒฅแƒกแƒ˜ แƒ•แƒ”แƒ‘ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (WSGI). แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒกแƒแƒ”แƒ แƒ—แƒ แƒ™แƒแƒ›แƒ‘แƒ˜แƒœแƒแƒชแƒ˜แƒ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, Apache HTTPD uWSGI-แƒ˜แƒ— แƒแƒœ Nginx Gunicorn-แƒ˜แƒ—.

แƒ•แƒ”แƒ‘ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒก แƒแƒ›แƒแƒชแƒแƒœแƒแƒ แƒ•แƒ”แƒ‘ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒ“แƒแƒœ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ’แƒ–แƒแƒ•แƒœแƒ Python แƒ•แƒ”แƒ‘ แƒฉแƒแƒ แƒฉแƒแƒจแƒ˜. WSGI แƒแƒ แƒ˜แƒก แƒกแƒแƒจแƒ˜แƒœแƒ”แƒšแƒ˜ แƒฌแƒแƒ แƒกแƒฃแƒšแƒ˜แƒก แƒ แƒ”แƒšแƒ˜แƒฅแƒ•แƒ˜แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช CGI แƒซแƒ แƒแƒ•แƒ”แƒ‘แƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ แƒ“แƒ แƒ“แƒฆแƒ”แƒก WSGI แƒแƒ แƒ˜แƒก แƒ“แƒ” แƒคแƒแƒฅแƒขแƒ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜, แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒ”แƒ‘ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒกแƒ แƒ—แƒฃ Python แƒฉแƒแƒ แƒฉแƒแƒกแƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ›แƒ˜แƒกแƒ˜ แƒคแƒแƒ แƒ—แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ, แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒœแƒ˜แƒฃแƒแƒœแƒกแƒ˜แƒ แƒแƒ› แƒฉแƒแƒ แƒฉแƒแƒ”แƒ‘แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒแƒก แƒ“แƒ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒ”แƒชแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒ•แƒแƒ›แƒงแƒแƒ แƒแƒ— แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ Gunicorn-แƒกแƒ แƒ“แƒ Nginx-แƒก แƒจแƒแƒ แƒ˜แƒก แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—.

แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒแƒ แƒ˜แƒ•แƒ” แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜ แƒ“แƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ”แƒ แƒ— แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”, แƒ›แƒแƒ“แƒ˜แƒ— แƒ•แƒชแƒแƒ“แƒแƒ— UNIX แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“. แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒกแƒแƒ™แƒ”แƒขแƒก, แƒ›แƒแƒ“แƒ˜แƒ— แƒ•แƒชแƒแƒ“แƒแƒ— แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜แƒก แƒ’แƒแƒ“แƒแƒ“แƒ’แƒ›แƒ แƒ“แƒ Gunicorn-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒแƒฅแƒขแƒ˜แƒ•แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ systemd-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—.

แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ’แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜แƒ. แƒฏแƒ”แƒ  แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก ListenStream แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒ˜แƒ•แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒ˜แƒ› แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ–แƒ”, แƒกแƒแƒ“แƒแƒช แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ UNIX แƒกแƒแƒ™แƒ”แƒขแƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช Requires แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒ˜แƒ•แƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ–แƒ”. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒจแƒ˜, แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ Gunicorn-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ แƒ”แƒ›แƒแƒ“แƒแƒœ แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— WSGI แƒกแƒแƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ UNIX แƒกแƒแƒ™แƒ”แƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ Django แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒแƒฅ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ แƒแƒ’แƒแƒ แƒช แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ˜. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ”แƒ— แƒกแƒแƒ™แƒ”แƒขแƒ˜.

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

แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— Gunicorn แƒกแƒแƒ™แƒ”แƒขแƒ˜ แƒ“แƒ Nginx systemd-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒ›แƒ–แƒแƒ“ แƒฎแƒแƒ แƒ— แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ”แƒ‘แƒแƒ“.

แƒชแƒฃแƒ“แƒ˜ แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ?

แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ˜แƒงแƒ•แƒแƒœแƒ— แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒก แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜, แƒ“แƒ˜แƒ“แƒ˜ แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ— 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-แƒ—แƒแƒœ. แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ“แƒ”แƒ›แƒแƒœแƒก, แƒ แƒแƒ›แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช แƒžแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜, แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ˜แƒ แƒ แƒแƒ’แƒแƒ แƒช init_t. แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒ”แƒก แƒ—แƒ”แƒแƒ แƒ˜แƒ แƒžแƒ แƒแƒฅแƒขแƒ˜แƒ™แƒแƒจแƒ˜.

sudo setenforce 0

แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ˜แƒแƒก แƒ™แƒ แƒ˜แƒขแƒ˜แƒ™แƒ แƒ“แƒ แƒกแƒ˜แƒกแƒฎแƒšแƒ˜แƒก แƒชแƒ แƒ”แƒ›แƒšแƒ”แƒ‘แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒžแƒ แƒแƒขแƒแƒขแƒ˜แƒžแƒ˜แƒก แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒแƒ. แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒ แƒ—แƒแƒ— แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ“แƒแƒ•แƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒ”แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒ, แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒ—แƒแƒ•แƒ˜แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒ–แƒ” แƒ“แƒแƒ•แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ—.

แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜ แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒ— แƒแƒœ แƒฉแƒ•แƒ”แƒœแƒ˜ 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 แƒกแƒฎแƒ•แƒ แƒ แƒแƒ›แƒ”แƒก, แƒ’แƒแƒ แƒ“แƒ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒกแƒแƒช แƒฉแƒ•แƒ”แƒœแƒ˜ แƒฃแƒชแƒœแƒแƒ‘แƒ˜ แƒ“แƒ”แƒ›แƒแƒœแƒ˜ แƒฌแƒ•แƒ“แƒ”แƒ‘แƒ.

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 แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ, แƒ•แƒ”แƒ  แƒœแƒแƒฎแƒแƒ•แƒ— แƒ แƒแƒ˜แƒ›แƒ” แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒš แƒžแƒ แƒแƒชแƒ”แƒกแƒก. แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒ’แƒฃแƒœแƒ˜แƒ™แƒแƒ แƒœแƒ˜ แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒก แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒ—แƒแƒ แƒฏแƒ˜แƒ›แƒแƒœแƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒแƒก แƒฉแƒ•แƒ”แƒœแƒก 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 แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒก, แƒ‘แƒแƒšแƒ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก permissive=1 แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒกแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ permissive=0 แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ—แƒฃ แƒ’แƒ”แƒกแƒ›แƒ˜แƒ—, แƒ แƒ แƒกแƒแƒฎแƒ˜แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ แƒ”แƒแƒšแƒฃแƒ  แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒกแƒฌแƒ แƒแƒคแƒแƒ“ แƒ˜แƒžแƒแƒ•แƒแƒ— แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒ’แƒ–แƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒญแƒ แƒ”แƒšแƒแƒ“. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒœแƒแƒ›แƒ“แƒ” แƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ˜แƒ แƒจแƒ”แƒ˜แƒœแƒแƒ แƒฉแƒฃแƒœแƒแƒ— แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ“ แƒ“แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— Django แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ›แƒ™แƒแƒคแƒ˜แƒ, แƒ’แƒแƒ›แƒแƒกแƒแƒ“แƒ”แƒ’แƒ˜ แƒแƒฃแƒ“แƒ˜แƒขแƒ˜.

sudo ausearch -m AVC

แƒ›แƒแƒฎแƒ“แƒ!

แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ แƒกแƒแƒ›แƒฃแƒจแƒแƒ Django แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒคแƒ แƒแƒœแƒขแƒ”แƒœแƒขแƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ Nginx-แƒกแƒ แƒ“แƒ Gunicorn WSGI-แƒ–แƒ”. แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ— Python 3 แƒ“แƒ PostgreSQL 10 RHEL 8 แƒ‘แƒ”แƒขแƒ แƒกแƒแƒชแƒแƒ•แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ. แƒแƒฎแƒšแƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒฌแƒ˜แƒœ แƒฌแƒแƒฎแƒ•แƒ˜แƒ“แƒ”แƒ— แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— (แƒแƒœ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒœแƒแƒ—แƒแƒ•แƒกแƒแƒ—) Django แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒแƒœ แƒจแƒ”แƒ˜แƒกแƒฌแƒแƒ•แƒšแƒแƒ— แƒกแƒฎแƒ•แƒ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ RHEL 8 Beta-แƒจแƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒšแƒแƒ“ แƒแƒœ แƒ—แƒฃแƒœแƒ“แƒแƒช แƒแƒ› แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ–แƒ”.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ