Bootcamp: 帮助设置生产。

创建于 2019-10-17  ·  12评论  ·  资料来源: vitorfs/bootcamp

嗨,我正在尝试将 Bootcamp 作为我大学研究人员的社交网络。 但是,由于一些限制,我目前无法使用 caddy 作为部署的反向代理。 相反,我使用 nginx。 如果可能的话,你能给我一些关于我需要为生产环境指定哪些参数的指导。 我看到了 env.example 文件,但由于这个项目对我来说是新的,我不知道所有东西是如何相互连接的。 我遇到以下错误

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

任何帮助表示赞赏。

Support discussion help wanted

最有用的评论

就我而言,IM 在 Ubuntu 服务器机器上使用 python 3.7.1

可选设置 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/

创建环境
virtualenv bootcampenv
激活您的环境
source bootcampenv/bin/activate

安装 gunicorn
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 守护进程
需要=gunicorn.socket
之后=网络.目标

[服务]
用户=页面
组=www-数据
WorkingDirectory=/home/pages/bootcampprojectdir/bootcampenv/bin/gunicorn
--访问日志文件-
--工人 3
--bind 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

服务器 {
听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条评论

你好,
我不使用球童。 我在我所有的 Django 项目中都使用了 gunicorn。

您是否安装了所有要求?
频道>=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 表示系统中不存在模块

频道已安装。 我现在遇到另一个问题。 这是我的 docker 文件和 .env。 我遇到了工作人员服务的问题。 不确定它的作用。 真的很感谢你的帮助,你的项目很有趣,如果这个项目投入生产,可以帮助我大学里的很多人。

环境文件

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 文件,请分享。 谢谢

获取 iOS 版 Outlook https://aka.ms/o0ukef


来源:samazaphikel [email protected]
发送时间:2019 年 10 月 17 日星期四下午 5:03:30
至:vitorfs/bootcamp [email protected]
抄送:Tri Minh Pham [email protected] ; 作者[email protected]
主题:回复:[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-身份验证/ADEK4ADBCG24WLWIT3IM6OLQPDOLFANCNFSM4JB4YOCA

就我而言,IM 在 Ubuntu 服务器机器上使用 python 3.7.1

可选设置 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/

创建环境
virtualenv bootcampenv
激活您的环境
source bootcampenv/bin/activate

安装 gunicorn
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 守护进程
需要=gunicorn.socket
之后=网络.目标

[服务]
用户=页面
组=www-数据
WorkingDirectory=/home/pages/bootcampprojectdir/bootcampenv/bin/gunicorn
--访问日志文件-
--工人 3
--bind 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

服务器 {
听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 作为唯一服务器就足够了吗? 我看到一些功能需要像 daphne 这样的 ASGI 应用服务器来服务 Web 套接字流量。 如果我错了,请纠正我。 谢谢你的帮助。 真的很感激。

Nginx 是来自互联网的请求首先到达的地方。 它可以非常快速地处理它们,并且通常配置为只让那些真正需要到达您的 Web 应用程序的请求通过。

Gunicorn 将从 Nginx 获取的请求转换为您的 Web 应用程序可以处理的格式,并确保在需要时执行您的代码。

每个人都可以做一些其他人不能做的事情。
Nginx 是一个 Web 服务器和反向代理。 它针对 Web 服务器需要做的所有事情进行了高度优化。

处理域名路由(决定请求应该去哪里,或者错误响应是否有序)
提供静态文件
一次处理大量请求
处理慢客户端
将需要动态的请求转发给 Gunicorn
终止 SSL(https 发生在这里)
与 Python 代码相比,节省计算资源(CPU 和内存)
还有更多,如果您将其配置为这样做(负载平衡、缓存等)

独角兽
一旦 Nginx 决定,应该将特定请求传递给 Gunicorn(由于您配置的规则)。

Gunicorn 高度优化,有很多方便的功能。

运行一个工作进程/线程池(执行你的代码!)
将来自 Nginx 的请求转换为与 WSGI 兼容
将您的应用程序的 WSGI 响应转换为正确的 http 响应
当请求进来时实际调用你的 Python 代码
Gunicorn 可以与许多不同的 Web 服务器通信
Gunicorn 只是许多有效的 WSGI 服务器之一。 你的应用并不关心你使用的是哪一个,Nginx 也不关心。

以上我明白。 但是,该项目在协议方面非常特殊。 它通过 websocket 提供通知,据我所知,我们需要的不仅仅是普通的 gunicorn 和 nginx 来驱动应用程序? 当我运行本地 docker compose 时,我注意到 /notifications 似乎不起作用。 我知道我提出了很多要求,但非常感谢您花时间和精力来帮助我 @samazaphikel。 将尝试本地配置(没有 docker-compose,docker)只是裸 ubuntu,看看是否有效。 谢谢大家

非常有帮助的指南。 关闭。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Shekharnunia picture Shekharnunia  ·  10评论

sebastian-code picture sebastian-code  ·  11评论

mwanjajoel picture mwanjajoel  ·  5评论

ssahilsahil798 picture ssahilsahil798  ·  5评论

Allan-Nava picture Allan-Nava  ·  9评论