Привет, я пытаюсь развернуть Bootcamp как социальную сеть для исследователей в моем университете. Однако из-за некоторых ограничений я в настоящее время не могу использовать caddy в качестве обратного прокси-сервера для развертывания. Вместо этого я использую nginx. Если возможно, не могли бы вы подсказать, какие параметры мне нужно указать для производственной среды. Я видел файл env.example, но поскольку проект для меня новый, я не знаю, как все связано друг с другом. Я застрял со следующей ошибкой
manage.py runworker: error: the following arguments are required: channels
Любая помощь приветствуется.
Привет,
Я не использую Кэдди. Я использую 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. Не уверен, что он делает. Очень признателен за вашу помощь, ваш проект очень интересен и может помочь многим людям в моем университете, если он будет запущен в производство.
Вот журнал ошибок.
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.99location = /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 и посмотрю, работает ли это. Спасибо всем
Очень полезное руководство. Закрытие.
Самый полезный комментарий
В моем случае 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
создать услугу
sudo nano /etc/systemd/system/gunicorn.service
включить все
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
сохраните и скопируйте этот файл на сайты с поддержкой
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'