Bootcamp: рдЙрддреНрдкрд╛рджрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдЕрдХреНрддреВре░ 2019  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vitorfs/bootcamp

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

manage.py runworker: error: the following arguments are required: channels

рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред

Support discussion help wanted

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдИрдПрдо рдЙрдмрдВрдЯреВ рд╕рд░реНрд╡рд░ рдорд╢реАрди рдкрд░ рдЕрдЬрдЧрд░ 3.7.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯ-рдЕрдк рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг
sudo update alternatives --install /usr/bin/python/ python /usr/bin/python3.7.1

рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде, рдЕрдЬрдЧрд░ 3.7.1 рдореЗрд░реА рдкрд╣рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдорд╢реАрди рдкрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
sudo -H pip3 install virtualenv

cd /home/pages рд╕рд╣реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП

mkdir bootcamp рдкреНрд░реЛрдЬреЗрдХреНрдЯрдлреЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП

cd bootcamp/

env . рдмрдирд╛рдПрдБ
virtualenv bootcampenv
рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ
source bootcampenv/bin/activate

рдЗрдВрд╕реНрдЯреЙрд▓рд▓ рдЧрдирд┐рдХреЛрд░реНрди
pip3 install gunicorn

рдкреГрд╖реНрда рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ
cd ..
рдФрд░ рдмреВрдЯрдХреИрдВрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ

django-admin startproject bootcampprojectdir

cd bootcampprojectdir

рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
pip install -U -r requirements/production.txt

рдпрджрд┐ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдХреБрдЫ рдФрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдФрд░ рд╕реНрдерд┐рд░ рд╕рдВрдЧреНрд░рд╣ рдХрд░реЗрдВ

рдкреЛрд░реНрдЯ 8000 . рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
sudo ufw allow 8000

рдЧрдирд┐рдХреЛрд░реНрди рдмрдирд╛рдПрдВ wsgi
gunicorn --bind 0.0.0.0:8000 settings.wsgi

рдПрдХ рд╕рд┐рд╕реНрдЯрдо рд╕реЙрдХреЗрдЯ рдмрдирд╛рдПрдВ
sudo nano /etc/systemd/system/gunicorn.socket

[рдЗрдХрд╛рдИ]
рд╡рд┐рд╡рд░рдг=рдЧрдиреАрдХреЙрд░реНрди.рд╕реЙрдХ

[рд╕реЙрдХреЗрдЯ]
рд▓рд┐рд╕рдирд╕реНрдЯреНрд░реАрдо=/рд░рди/рдЧрдирд┐рдХреЛрд░реНрди.рд╕реЙрдХ

[рдЗрдВрд╕реНрдЯреЙрд▓]
рд╡рд╛рдВрдЯреЗрдбрдмрд╛рдп=рд╕реЙрдХреЗрдЯреНрд╕.рдЯрд╛рд░рдЧреЗрдЯ

рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдБ
sudo nano /etc/systemd/system/gunicorn.service

[рдЗрдХрд╛рдИ]
рд╡рд┐рд╡рд░рдг = рдЧрдирд┐рдХреЛрд░реНрди рдбреЗрдореЙрди
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ=gunicorn.socket
рдмрд╛рдж=рдиреЗрдЯрд╡рд░реНрдХ.рд▓рдХреНрд╖реНрдп

[рд╕реЗрд╡рд╛]
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ = рдкреГрд╖реНрда
рд╕рдореВрд╣ = www-рдбреЗрдЯрд╛
рд╡рд░реНрдХрд┐рдВрдЧрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА =/рд╣реЛрдо/рдкреЗрдЬ/рдмреВрдЯрдХреИрдВрдкрдкреНрд░реЛрдЬреЗрдХреНрдЯрдбрд┐рд░/рдмреВрдЯрдХреИрдВрдкреЗрдирд╡/рдмрд┐рди/рдЧрдирд┐рдХреЛрд░реНрди
--рдПрдХреНрд╕реЗрд╕-рд▓реЙрдЧрдлрд╛рдЗрд▓ -
-- рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ 3
--рдмрд╛рдЗрдВрдб рдпреВрдирд┐рдХреНрд╕:рд░рди/рдЧрдирд┐рдХреЛрд░реНрди.рд╕реЙрдХ
рд╕реЗрдЯрд┐рдВрдЧреНрд╕.wsgi.application

[рдЗрдВрд╕реНрдЯреЙрд▓]
рд╡рд╛рдВрдЯреЗрдбрдмрд╛рдп=рдорд▓реНрдЯреА-рдпреВрдЬрд░.рдЯрд╛рд░рдЧреЗрдЯ

рд╕рдм рдХреБрдЫ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket

рдпрд╣ рдЬрд╛рдБрдЪреЗрдВ
file /run/gunicorn.sock
рдЬрдм рдЖрдк рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдареАрдХ рд╣реИ

рдЕрд╡рд╕реНрдерд╛ рдЬрд╛рдВрдЪ
sudo systemctl status gunicorn.socket

рдЪреЗрдХ рд╕реЗрд╡рд╛
curl --unix-socket /run/gunicorn.sock localhost

рдЬрдм рдЖрдк htnl рдХреЛрдб рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ gunicorn.service рдХреЗ рд╕рд╛рде рдХреБрдЫ

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕реЗрд╡рд╛ рдЪрд▓ рд░рд╣реА рд╣реИ
sudo systemctl status gunicorn

рдХрдм рд╕рдм рдареАрдХ рд╣реИ, рдЕрдЧрд▓рд╛ рдХрджрдо NGinx Gunicorn рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ
nginx . рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
sudo apt install nginx

nginx . рдореЗрдВ рдПрдХ рд╕рд╛рдЗрдЯ рдмрдирд╛рдПрдВ
рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдБ
sudo nano /etc/nginx/sites-available/bootcampproject

рд╕рд░реНрд╡рд░ {
80 рд╕реБрдиреЛ;
рд╕рд░реНрд╡рд░_рдирд╛рдо 99.99.99.99

  location = /favicon.ico { access_log off; log_not_found off; }
  location /static/ {
        root /home/pages/bootcampprojectdir;
  }

рд╕реНрдерд╛рди / {
рдкреНрд░реЙрдХреНрд╕реА_рдкрд░рдореНрд╕ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ;
рдкреНрд░реЙрдХреНрд╕реА_рдкрд╛рд╕ http://unix :/run/gunicorn.sock;
}
}

рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╛рдЗрдЯреНрд╕-рд╕рдХреНрд╖рдо рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдХреЙрдкреА рдХрд░реЗрдВ
sudo ln -s /etc/nginx/sites-available/bootcampproject /etc/nginx/sites/enabled

рдФрд░ nginx рд╕реЗрдЯрдЕрдк рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ

sudo nginx -t

рдХреЛрдИ рддреНрд░реБрдЯрд┐ рди рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, nginx рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ
sudo systemctl restart nginx

nginx рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝реЗрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдкреЛрд░реНрдЯ 8000 рдХреЛ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ

sudo ufw delete allow 8000

nginx рдЬреЛрдбрд╝реЗрдВ
sudo ufw allow 'Nginx Full'

рд╕рднреА 12 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдирдорд╕реНрддреЗ,
рдореИрдВ рдХреИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ рдЕрдкрдиреЗ рд╕рднреА django рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдерд╛?
рдЪреИрдирд▓>=2.1.1 # https://github.com/django/channels
channel-redis>=2.2.1 # https://github.com/django/channels_redis

рдЖрдк рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ

$ python -c "import channels"
$ echo $?

0 рдХрд╛ рдЕрд░реНрде рд╣реИ, рдореМрдЬреВрдж
1 рдХрд╛ рдЕрд░реНрде рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ

рдЪреИрдирд▓ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВред рдореБрдЭреЗ рдЕрдм рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдореЗрд░реА docker рдлрд╝рд╛рдЗрд▓ рдФрд░ .env рд╣реИрдВред рдореИрдВ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдБред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдФрд░ рдЕрдЧрд░ рдпрд╣ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЖрддреА рд╣реИ рддреЛ рдореЗрд░реЗ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред

env.txt

docker-compose.txt

рдпрд╣рд╛рдБ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рд╣реИред

worker_1    | /usr/local/lib/python3.6/site-packages/daphne/server.py:13: UserWarning: Something has already installed a non-asyncio Twisted reactor. Attempting to uninstall it; you can fix this warning by importing daphne.server early in your codebase or finding the package that imports Twisted and importing it later on.
worker_1    |   UserWarning,
django_1    | DEBUG 2019-10-17 21:28:37,751 base 1 140450066271560 Configuring Raven for host: https://sentry.io
worker_1    | DEBUG 2019-10-17 21:28:35,663 base 1 140638836505928 Configuring Raven for host: https://sentry.io
worker_1    | Running worker for channels ['channels', 'notifications']
worker_1    | DEBUG 2019-10-17 21:28:36,297 base 1 140638836505928 Sending message of length 5534 to https://sentry.io/api/1782977/store/
worker_1    | Traceback (most recent call last):
worker_1    |   File "manage.py", line 30, in <module>
worker_1    |     execute_from_command_line(sys.argv)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
worker_1    |     utility.execute()
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
worker_1    |     self.fetch_command(subcommand).run_from_argv(self.argv)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
worker_1    |     self.execute(*args, **cmd_options)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
worker_1    |     output = self.handle(*args, **options)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/management/commands/runworker.py", line 46, in handle
worker_1    |     worker.run()
worker_1    |   File "/usr/local/lib/python3.6/site-packages/asgiref/server.py", line 60, in run
worker_1    |     event_loop.run_until_complete(self.handle())
worker_1    |   File "/usr/local/lib/python3.6/asyncio/base_events.py", line 484, in run_until_complete
worker_1    |     return future.result()
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 30, in handle
worker_1    |     [listener.result() for listener in listeners]
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 30, in <listcomp>
worker_1    |     [listener.result() for listener in listeners]
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 37, in listener
worker_1    |     message = await self.channel_layer.receive(channel)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels_redis/core.py", line 461, in receive
worker_1    |     return (await self.receive_single(channel))[1]

рдЕрдкрдиреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди
REDIS_URL=redis://127.0.0.1:6379

рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдФрд░ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдЗрд╕рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрд╣рд╛рдВ рджреЗрдЦрдирд╛ рд╣реИ

рдЙрд╣, рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдпрд╣ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ...

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреГрдкрдпрд╛ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ

pip install -U -r requirements/production.txt

рджреВрд╕рд░рд╛, рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЛрдХрд▓ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?

рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реВрдВред рдореИрдВ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреВрдЯрдХреИрдВрдк рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕реНрд╡реАрдХреГрдд рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдореИрдВ рдбреЛрдХрд░ рд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реЗрд╡рд╛ рдХреЛ рдХрддрд╛рдИ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди Production.yml рдмрд┐рд▓реНрдХреБрд▓ рдЕрд▓рдЧ рдЪреАрдЬрд╝ рд╣реИред рдореИрдВ рд░реЗрдбрд┐рд╕, рдбрд╛рдлреНрдиреЗ, рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд╣реАрдВ рдбреЙрдХрд░-рдХрдВрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред рдзрдиреНрдпрд╡рд╛рдж

рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрд▓реБрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ https://aka.ms/o0ukef


рд╕реЗ: samazaphikel [email protected]
рднреЗрдЬрд╛ рдЧрдпрд╛: рдЧреБрд░реБрд╡рд╛рд░, 17 рдЕрдХреНрдЯреВрдмрд░, 2019 5:03:30 рдЕрдкрд░рд╛рд╣реНрди
рдкреНрд░рддрд┐: vitorfs/bootcamp [email protected]
рд╕реАрд╕реА: рддреНрд░рд┐ рдорд┐рдиреНрд╣ рдлрд╛рдо [email protected] ; рд▓реЗрдЦрдХ рд▓реЗрдЦрдХ @noreply.github.com
рд╡рд┐рд╖рдп: рдкреБрди: [vitorfs/bootcamp] рдЙрддреНрдкрд╛рджрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ред (#193)

рдЙрд╣, рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдпрд╣ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ...

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреГрдкрдпрд╛ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ

рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯрд╛рд▓ -рдпреВ -рдЖрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛/рдЙрддреНрдкрд╛рджрди.txt

рджреВрд╕рд░рд╛, рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЛрдХрд▓ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?

рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реВрдВред рдореИрдВ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреВрдЯрдХреИрдВрдк рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╕реНрд╡реАрдХреГрдд рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рд╕реВрддреНрд░ рдХреЛ рд▓рд┐рдЦрд╛ рд╣реИред
GitHub рдкрд░ рдЗрд╕ рдИрдореЗрд▓ рд╕реАрдзреЗ рдЬрд╡рд╛рдм рджреЗрдВ, рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ https://github.com/vitorfs/bootcamp/issues/193?email_source=notifications&email_token=ADEK4AB5JEUP5LQ4APTJ6ITQPDOLFA5CNFSM4JB4YOCKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBRVI2A#issuecomment-543380584 , рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд https://github.com/notifications/unsubscribe- рдкреНрд░рдорд╛рдгреАрдХрд░рдг/ADEK4ADBCG24WLWIT3IM6OLQPDOLFANCNFSM4JB4YOCA ред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдИрдПрдо рдЙрдмрдВрдЯреВ рд╕рд░реНрд╡рд░ рдорд╢реАрди рдкрд░ рдЕрдЬрдЧрд░ 3.7.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯ-рдЕрдк рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг
sudo update alternatives --install /usr/bin/python/ python /usr/bin/python3.7.1

рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде, рдЕрдЬрдЧрд░ 3.7.1 рдореЗрд░реА рдкрд╣рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдорд╢реАрди рдкрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
sudo -H pip3 install virtualenv

cd /home/pages рд╕рд╣реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП

mkdir bootcamp рдкреНрд░реЛрдЬреЗрдХреНрдЯрдлреЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП

cd bootcamp/

env . рдмрдирд╛рдПрдБ
virtualenv bootcampenv
рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ
source bootcampenv/bin/activate

рдЗрдВрд╕реНрдЯреЙрд▓рд▓ рдЧрдирд┐рдХреЛрд░реНрди
pip3 install gunicorn

рдкреГрд╖реНрда рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ
cd ..
рдФрд░ рдмреВрдЯрдХреИрдВрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ

django-admin startproject bootcampprojectdir

cd bootcampprojectdir

рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
pip install -U -r requirements/production.txt

рдпрджрд┐ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдХреБрдЫ рдФрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдФрд░ рд╕реНрдерд┐рд░ рд╕рдВрдЧреНрд░рд╣ рдХрд░реЗрдВ

рдкреЛрд░реНрдЯ 8000 . рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
sudo ufw allow 8000

рдЧрдирд┐рдХреЛрд░реНрди рдмрдирд╛рдПрдВ wsgi
gunicorn --bind 0.0.0.0:8000 settings.wsgi

рдПрдХ рд╕рд┐рд╕реНрдЯрдо рд╕реЙрдХреЗрдЯ рдмрдирд╛рдПрдВ
sudo nano /etc/systemd/system/gunicorn.socket

[рдЗрдХрд╛рдИ]
рд╡рд┐рд╡рд░рдг=рдЧрдиреАрдХреЙрд░реНрди.рд╕реЙрдХ

[рд╕реЙрдХреЗрдЯ]
рд▓рд┐рд╕рдирд╕реНрдЯреНрд░реАрдо=/рд░рди/рдЧрдирд┐рдХреЛрд░реНрди.рд╕реЙрдХ

[рдЗрдВрд╕реНрдЯреЙрд▓]
рд╡рд╛рдВрдЯреЗрдбрдмрд╛рдп=рд╕реЙрдХреЗрдЯреНрд╕.рдЯрд╛рд░рдЧреЗрдЯ

рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдБ
sudo nano /etc/systemd/system/gunicorn.service

[рдЗрдХрд╛рдИ]
рд╡рд┐рд╡рд░рдг = рдЧрдирд┐рдХреЛрд░реНрди рдбреЗрдореЙрди
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ=gunicorn.socket
рдмрд╛рдж=рдиреЗрдЯрд╡рд░реНрдХ.рд▓рдХреНрд╖реНрдп

[рд╕реЗрд╡рд╛]
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ = рдкреГрд╖реНрда
рд╕рдореВрд╣ = www-рдбреЗрдЯрд╛
рд╡рд░реНрдХрд┐рдВрдЧрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА =/рд╣реЛрдо/рдкреЗрдЬ/рдмреВрдЯрдХреИрдВрдкрдкреНрд░реЛрдЬреЗрдХреНрдЯрдбрд┐рд░/рдмреВрдЯрдХреИрдВрдкреЗрдирд╡/рдмрд┐рди/рдЧрдирд┐рдХреЛрд░реНрди
--рдПрдХреНрд╕реЗрд╕-рд▓реЙрдЧрдлрд╛рдЗрд▓ -
-- рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ 3
--рдмрд╛рдЗрдВрдб рдпреВрдирд┐рдХреНрд╕:рд░рди/рдЧрдирд┐рдХреЛрд░реНрди.рд╕реЙрдХ
рд╕реЗрдЯрд┐рдВрдЧреНрд╕.wsgi.application

[рдЗрдВрд╕реНрдЯреЙрд▓]
рд╡рд╛рдВрдЯреЗрдбрдмрд╛рдп=рдорд▓реНрдЯреА-рдпреВрдЬрд░.рдЯрд╛рд░рдЧреЗрдЯ

рд╕рдм рдХреБрдЫ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket

рдпрд╣ рдЬрд╛рдБрдЪреЗрдВ
file /run/gunicorn.sock
рдЬрдм рдЖрдк рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдареАрдХ рд╣реИ

рдЕрд╡рд╕реНрдерд╛ рдЬрд╛рдВрдЪ
sudo systemctl status gunicorn.socket

рдЪреЗрдХ рд╕реЗрд╡рд╛
curl --unix-socket /run/gunicorn.sock localhost

рдЬрдм рдЖрдк htnl рдХреЛрдб рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ gunicorn.service рдХреЗ рд╕рд╛рде рдХреБрдЫ

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕реЗрд╡рд╛ рдЪрд▓ рд░рд╣реА рд╣реИ
sudo systemctl status gunicorn

рдХрдм рд╕рдм рдареАрдХ рд╣реИ, рдЕрдЧрд▓рд╛ рдХрджрдо NGinx Gunicorn рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ
nginx . рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
sudo apt install nginx

nginx . рдореЗрдВ рдПрдХ рд╕рд╛рдЗрдЯ рдмрдирд╛рдПрдВ
рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдБ
sudo nano /etc/nginx/sites-available/bootcampproject

рд╕рд░реНрд╡рд░ {
80 рд╕реБрдиреЛ;
рд╕рд░реНрд╡рд░_рдирд╛рдо 99.99.99.99

  location = /favicon.ico { access_log off; log_not_found off; }
  location /static/ {
        root /home/pages/bootcampprojectdir;
  }

рд╕реНрдерд╛рди / {
рдкреНрд░реЙрдХреНрд╕реА_рдкрд░рдореНрд╕ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ;
рдкреНрд░реЙрдХреНрд╕реА_рдкрд╛рд╕ http://unix :/run/gunicorn.sock;
}
}

рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╛рдЗрдЯреНрд╕-рд╕рдХреНрд╖рдо рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдХреЙрдкреА рдХрд░реЗрдВ
sudo ln -s /etc/nginx/sites-available/bootcampproject /etc/nginx/sites/enabled

рдФрд░ nginx рд╕реЗрдЯрдЕрдк рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ

sudo nginx -t

рдХреЛрдИ рддреНрд░реБрдЯрд┐ рди рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, nginx рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ
sudo systemctl restart nginx

nginx рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝реЗрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдкреЛрд░реНрдЯ 8000 рдХреЛ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ

sudo ufw delete allow 8000

nginx рдЬреЛрдбрд╝реЗрдВ
sudo ufw allow 'Nginx Full'

рд╣рд╛рдп @phamminhtris рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдЙрдкрдпреЛрдЧреА рдкрд╛рддреЗ рд╣реИрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рджреЛ рдореБрдЦреНрдп рддрд░реАрдХреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЕрдкрдиреА рдЪреЗрддрд╛рд╡рдиреА рд╣реИ, рдФрд░ рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдФрд░ docker-compose рд╕рд╛рде рдЙрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдореИрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реВрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЖрдк рдпрд╣рд╛рдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдпрдерд╛рд╡рдд рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдХрд┐ "рдЖрд╕рд╛рди" рд╣реИ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЖрдк рдЗрд╕реЗ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди рдФрд░ рдЧрд╛рдЗрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ), рдмрд╕ рдЕрдкрдиреА .env рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЪрд░реЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдорд┐рд▓ рдЙрджрд╛рд╣рд░рдг рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ? рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдпрд╛рддрд╛рдпрд╛рдд рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдбреИрдлрдиреЗ рдЬреИрд╕реЗ рдПрдПрд╕рдЬреАрдЖрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдХреА рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕рд╣реАред рдЖрдкрдХреА рддрд░рд╣ рдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВред

Nginx рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдз рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

Gunicorn рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ Nginx рд╕реЗ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХрд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЖрдкрдХрд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рджреВрд╕рд░рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
Nginx рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рд╣реИред рдпрд╣ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ рдЬреЛ рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

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

рдЧрдирд┐рдХреЛрд░реНрди
рдПрдХ рдмрд╛рд░ рдЬрдм Nginx рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ, рдХрд┐ Gunicorn рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрд░реЛрдз рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдирд┐рдпрдореЛрдВ рдХреЗ рдХрд╛рд░рдг)ред

Gunicorn рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред

рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ/рдзрд╛рдЧреЗ рдХрд╛ рдПрдХ рдкреВрд▓ рдЪрд▓рд╛рдирд╛ (рдЕрдкрдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛!)
Nginx рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ WSGI рд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ
рдЕрдкрдиреЗ рдРрдк рдХреЗ WSGI рдкреНрд░рддрд┐рд╕рд╛рджреЛрдВ рдХрд╛ рдЙрдЪрд┐рдд http рдкреНрд░рддрд┐рд╕рд╛рджреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ
рдЕрдиреБрд░реЛрдз рдЖрдиреЗ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рдпрдерди рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ
Gunicorn рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реЗрдм рд╕рд░реНрд╡рд░реЛрдВ рд╕реЗ рдмрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ
Gunicorn рдХрдИ рдорд╛рдиреНрдп WSGI рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЖрдкрдХрд╛ рдРрдк рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдЖрдк рдХрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ Nginx рдХреЛ рднреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рд╣рд╛рдЬ рд╕реЗ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛рдлреА рдЦрд╛рд╕ рд╣реИред рдпрд╣ websocket рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореЗрд░реА рд╕рдордЭ рд╕реЗ рд╣рдореЗрдВ рдРрдк рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд рдЧрдирд┐рдХреЛрд░реНрди рдФрд░ nginx рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА? рдЬрдм рдореИрдВ рд╕реНрдерд╛рдиреАрдп рдбреЙрдХрдЯрд░ рд░рдЪрдирд╛ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐/рд╕реВрдЪрдирд╛рдПрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдмрд╣реБрдд рдХреБрдЫ рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ @samazaphikel рдореЗрд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рд╕реНрдерд╛рдиреАрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдХреЛрдИ рдбреЙрдХрд░-рдХрдВрдкреЛрдЬрд╝, рдбреЙрдХрд░) рдХреЛ рдХреЗрд╡рд▓ рдирдВрдЧреЗ рдЙрдмрдВрдЯреВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдзрдиреНрдпрд╡рд╛рдж рдЖрдк рд╕рдм

рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рдЧрд╛рдЗрдбред рд╕рдорд╛рдкрдиред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Allan-Nava picture Allan-Nava  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Shekharnunia picture Shekharnunia  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sebastian-code picture sebastian-code  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mwanjajoel picture mwanjajoel  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Shekharnunia picture Shekharnunia  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ