Bootcamp: Помощь в налаживании производства.

Созданный на 17 окт. 2019  ·  12Комментарии  ·  Источник: vitorfs/bootcamp

Привет, я пытаюсь развернуть Bootcamp как социальную сеть для исследователей в моем университете. Однако из-за некоторых ограничений я в настоящее время не могу использовать caddy в качестве обратного прокси-сервера для развертывания. Вместо этого я использую nginx. Если возможно, не могли бы вы подсказать, какие параметры мне нужно указать для производственной среды. Я видел файл env.example, но поскольку проект для меня новый, я не знаю, как все связано друг с другом. Я застрял со следующей ошибкой

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

Любая помощь приветствуется.

Support discussion help wanted

Самый полезный комментарий

В моем случае IM с использованием python 3.7.1 на сервере Ubuntu

Необязательная установка версии Python
sudo update alternatives --install /usr/bin/python/ python /usr/bin/python3.7.1

С помощью этой команды python 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 ..
и создайте папку для проекта bootcamp

django-admin startproject bootcampprojectdir

cd bootcampprojectdir

И установите требования
pip install -U -r requirements/production.txt

Если вы используете разные базы данных или что-то в этом роде, начните миграцию и соберите статические

Обновите брандмауэр, чтобы разрешить порт 8000
sudo ufw allow 8000

создать Gunicorn WSGI
gunicorn --bind 0.0.0.0:8000 settings.wsgi

создать системный сокет
sudo nano /etc/systemd/system/gunicorn.socket

[Ед. изм]
Описание = gunicorn.sock

[Разъем]
ListenStream = / run / gunicorn.sock

[Установить]
WantedBy = sockets.target

создать услугу
sudo nano /etc/systemd/system/gunicorn.service

[Ед. изм]
Описание = демон-пулеметчик
Требуется = gunicorn.socket
После = network.target

[Услуга]
Пользователь = страницы
Группа = www-data
Рабочий каталог = / главная / страницы / bootcampprojectdir / bootcampenv / bin / gunicorn
--access-logfile -
- рабочие 3
- привязать unix: run / gunicorn.sock
settings.wsgi.application

[Установить]
WantedBy = multi-user.target

включить все
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

server {
слушать 80;
имя_сервера 99.99.99.99

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

место нахождения / {
включить proxy_params;
proxy_pass 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 Комментарий

Привет,
Я не использую Кэдди. Я использую Gunicorn для всех своих проектов django.

Вы установили все требования?
каналы> = 2.1.1 # https://github.com/django/channels
каналы-redis> = 2.2.1 # https://github.com/django/channels_redis

Вы можете проверить через консоль

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

0 означает, что существует
1 означает, что модуль не существует в системе

каналы установлены. Я столкнулся с другой проблемой. Вот мой файл докеров и .env. У меня проблема с сервисом worker. Не уверен, что он делает. Очень признателен за вашу помощь, ваш проект очень интересен и может помочь многим людям в моем университете, если он будет запущен в производство.

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

Во-вторых, ваш проект работает над локальным?

Сконфигурировать проект без всех файлов невозможно. И я не лучший способ его настроить. Я могу проверить свою конфигурацию и поделиться ею, но это НЕ проверено и не одобрено для буткемпа. Может понадобятся дополнительные настройки.

Я раскручиваю сервис с помощью docker compose. Локальное развертывание работает нормально, но production.yml - совсем другое дело. Привлекаю redis, daphne, postgres. Если у вас есть где-нибудь под рукой файл docker-compose, поделитесь, пожалуйста. Спасибо

Загрузите Outlook для iOS https://aka.ms/o0ukef


От: samazaphikel [email protected]
Отправлено: четверг, 17 октября 2019 г., 17:03:30
To: vitorfs / Bootcamp [email protected]
Копия: Три Мин Фам [email protected] ; Автор [email protected]
Тема: Re: [vitorfs / bootcamp] Помогите с настройкой продакшена. (# 193)

эээ, это много. Это не делается за несколько минут ...

Прежде всего, проверьте, все ли требования установлены в вашей серверной среде.

pip install -U -r требования / production.txt

Во-вторых, ваш проект работает над локальным?

Сконфигурировать проект без всех файлов невозможно. И я не лучший способ его настроить. Я могу проверить свою конфигурацию и поделиться ею, но это НЕ проверено и не одобрено для буткемпа. Может понадобятся дополнительные настройки.

-
Вы получаете это, потому что вы являетесь автором темы.
Ответить на это сообщение непосредственно, просматривать его на GitHub https://github.com/vitorfs/bootcamp/issues/193?email_source=notifications&email_token=ADEK4AB5JEUP5LQ4APTJ6ITQPDOLFA5CNFSM4JB4YOCKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBRVI2A#issuecomment-543380584 или отписки https://github.com/notifications/unsubscribe- auth / ADEK4ADBCG24WLWIT3IM6OLQPDOLFANCNFSM4JB4YOCA .

В моем случае IM с использованием python 3.7.1 на сервере Ubuntu

Необязательная установка версии Python
sudo update alternatives --install /usr/bin/python/ python /usr/bin/python3.7.1

С помощью этой команды python 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 ..
и создайте папку для проекта bootcamp

django-admin startproject bootcampprojectdir

cd bootcampprojectdir

И установите требования
pip install -U -r requirements/production.txt

Если вы используете разные базы данных или что-то в этом роде, начните миграцию и соберите статические

Обновите брандмауэр, чтобы разрешить порт 8000
sudo ufw allow 8000

создать Gunicorn WSGI
gunicorn --bind 0.0.0.0:8000 settings.wsgi

создать системный сокет
sudo nano /etc/systemd/system/gunicorn.socket

[Ед. изм]
Описание = gunicorn.sock

[Разъем]
ListenStream = / run / gunicorn.sock

[Установить]
WantedBy = sockets.target

создать услугу
sudo nano /etc/systemd/system/gunicorn.service

[Ед. изм]
Описание = демон-пулеметчик
Требуется = gunicorn.socket
После = network.target

[Услуга]
Пользователь = страницы
Группа = www-data
Рабочий каталог = / главная / страницы / bootcampprojectdir / bootcampenv / bin / gunicorn
--access-logfile -
- рабочие 3
- привязать unix: run / gunicorn.sock
settings.wsgi.application

[Установить]
WantedBy = multi-user.target

включить все
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

server {
слушать 80;
имя_сервера 99.99.99.99

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

место нахождения / {
включить proxy_params;
proxy_pass 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, но у него есть свои оговорки, и, очевидно, он требует изрядного знакомства с Docker и docker-compose . Я далеко не специалист и поэтому использую его только для разработки, но, возможно, вы найдете здесь что-нибудь полезное .

Другой способ - реализовать проект как есть, что «проще» (или, по крайней мере, вы можете найти больше ресурсов и руководств для его развертывания), просто не забудьте загрузить файл .env с необходимыми переменными, вы можете использовать включенный пример версии, чтобы понять, как их объявлять.

Достаточно ли просто использовать Gunicorn как единственный сервер? Я видел, что для некоторых функций требовался сервер приложений ASGI, например, daphne, для обслуживания трафика веб-сокетов. Пожалуйста, поправьте меня, если я ошибаюсь. Спасибо за любезную помощь. Действительно ценю это.

Nginx - это то, куда сначала поступают запросы из Интернета. Он может обрабатывать их очень быстро и обычно настроен так, чтобы пропускать только те запросы, которые действительно должны поступать в ваше веб-приложение.

Gunicorn переводит запросы, которые он получает от Nginx, в формат, который может обрабатывать ваше веб-приложение, и обеспечивает выполнение вашего кода, когда это необходимо.

Каждый может что-то сделать, а другой - нет.
Nginx - это веб-сервер и обратный прокси. Он оптимизирован для всего, что нужно делать веб-серверу.

Позаботьтесь о маршрутизации доменного имени (решает, куда должны идти запросы, или в порядке ли ответа об ошибке)
Обслуживать статические файлы
Обработка большого количества поступающих запросов одновременно
Обработка медленных клиентов
Перенаправляет запросы, которые должны быть динамическими, в Gunicorn
Прервать SSL (здесь происходит https)
Экономьте вычислительные ресурсы (ЦП и память) по сравнению с кодом Python
И многое другое, если вы настроите его для этого (балансировка нагрузки, кеширование,…)

Gunicorn
Как только Nginx решит, что конкретный запрос должен быть передан Gunicorn (из-за правил, с которыми вы его настроили).

Gunicorn сильно оптимизирован и имеет множество удобных функций.

Запуск пула рабочих процессов / потоков (выполнение вашего кода!)
Переводит запросы, поступающие от Nginx, на WSGI-совместимые
Преобразуйте ответы WSGI вашего приложения в правильные ответы http
Фактически вызывает ваш код Python при поступлении запроса
Gunicorn может общаться со многими разными веб-серверами
Gunicorn - лишь один из многих допустимых серверов WSGI. Ваше приложение не заботится о том, какое из них вы используете, и Nginx тоже.

Я понимаю сказанное выше. Однако с точки зрения протокола этот проект весьма особенный. Он отправляет уведомление через веб-сокет, и, насколько я понимаю, нам понадобится больше, чем обычный пулемет и nginx, чтобы управлять приложением? Когда я запускаю локальную докерную компоновку, я замечаю, что / notifications не работает. Я знаю, что прошу многого, но очень ценю ваше время и усилия, чтобы помочь мне @samazaphikel. Попробую локальную конфигурацию (без docker-compose, docker) просто голый ubuntu и посмотрю, работает ли это. Спасибо всем

Очень полезное руководство. Закрытие.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

mwanjajoel picture mwanjajoel  ·  5Комментарии

sebastian-code picture sebastian-code  ·  11Комментарии

yashLadha picture yashLadha  ·  21Комментарии

norouzzadeh picture norouzzadeh  ·  3Комментарии

sebastian-code picture sebastian-code  ·  11Комментарии