使用python3+supervisor+nginx部署tornado

1 安装supervisor

本人使用的操作系统是Ubuntu-16.04,可使用如下命令安装:

sudo apt-get install supervisor

也可使用pip3安装:

pip3 install supervisor

但这种方式安装不会自动生成配置文件,需要你手动创建配置文件夹和配置文件:

mkdir -p /etc/supervisor/conf.d   # conf.d文件夹,用于存放子配置文件,然后可由主配置文件包含,当然你不需要可以不创建
echo_supervisord_conf > /etc/supervisor/supervisord.conf  # 生成主配置文件

2 配置supervisor

对于16.04版本的Ubuntu系统,使用apt-get方式安装成功supervisor后会自动在/etc/下生成一个文件夹supervisor/,所以不需要再手动创建这个文件夹,下面是这个/etc/supervisor/
这里写图片描述
注:conf.d文件夹和配置文件supervisor.conf都是安装成功后自动生成的。然后修改surpervisord.conf文件。部署tornado基本不用怎么修改,通常只需要将最后一行改为下面的形式就可以了:
[include]
files = /etc/supervisor/conf.d/.conf
默认好像是以“/
.ini”结尾的配置文件

3 配置tornado.conf文件

创建一个tornado.conf文件,并写下如下内容:

[group:tornadoes]
programs=tornado-8080,tornado-8081

[program:tornado-8080]
command=/home/python/venv/bin/python3 /home/python/wechat/server.py --port=8080
directory=/home/python/wechat/
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/wechat/tornado.log
loglevel=info

[program:tornado-8081]
command=/home/python/venv/bin/python3 /home/python/wechat/server.py --port=8081
directory=/home/python/wechat
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/home/python/tornado.log
loglevel=info

主要解释以下几点:

  1. [group:tornadoes]分配组tornadoes,注意这个tornadoes字符串在使用supervisorctl工具时会用到。
  2. command=/home/python/venv/bin/python3 /home/python/wechat/server.py --port=8080
    前面加黑的是你的python解释器的绝对路径,后面斜体是你的应用程序文件的绝对路径,要使用参数–port指明端口,所以你的程序中要使用tornado.options来添加参数运行程序
  3. directory——是应用程序文件所在的文件夹的绝对路径
    user——是你的用户名
    stdout_logfile——配置你的log输出文件的位置
    loglevel——log等级

配置完成后,将该文件放在/etc/supervisor/conf.d/文件夹下,这就是刚才配置supervisord.conf的路径。

4 启动supervisor

supervisord -c /etc/supervisor/supervisord.conf

如果没有报错,在输入命令

supervisorctl

成功运行的结果:
这里写图片描述
当你修改了你的程序时,你可以通过这个工具来停止,启动或重启你的应用程序

supervisor> status    # 查看程序状态
supervisor> stop tornadoes:*   # 关闭 tornadoes组 程序
supervisor> start tornadoes:*  # 启动 tornadoes组 程序
supervisor> restart tornadoes:*    # 重启 tornadoes组 程序
supervisor> update    # 重启配置文件修改过的程序

这里的tornadoes就是你配置的组名。
到这里,一切顺利的话,你可以通过浏览器访问你的tornado服务器了,但是要在url地址后面加上你相应的端口,因为这里还没有使用Nginx来监听80端口。
在这里插入图片描述

5 配置Nginx

创建一个以 .conf 结尾的配置文件:

upstream tornadoes {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

server {
    listen 80;
    server_name IP;  # IP填上你的服务器IP地址或域名,如果是本地,就是127.0.0.1
	
    # 将Nginx作为代理服务器
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;  # 协议 http https
        proxy_pass http://tornadoes;
    }
}

配置完之后将该文件放在/etc/nginx/conf.d/的目录下(可能有些旧版本的Nginx的配置文件不是放在这个目录下,你可以参考我的另外一篇文章来安装最新的Nginx服务器点击查看),然后将该目录下的默认配置文件(default.conf)移走,最好不要直接删掉。启动Nginx服务sudo /etc/init.d/nginx start
下面是我的tornado代码:

from tornado.web import Application, RequestHandler
from tornado.httpserver import HTTPServer
import tornado.ioloop
import tornado.options

# 下面这行不能少
tornado.options.define("port", type=int, default=8080, help="服务器端口")

class IndexHandler(RequestHandler):
    def get(self, *args, **kwargs):
        # write表示将数据写入缓冲区,后面可继续添加,最终一起返回
        self.write("hello world!")

if __name__ == '__main__':
    # 下面这行不能少
    tornado.options.parse_command_line()
    route = [
        ('/', IndexHandler),
    ]
    server = HTTPServer(Application(route))
    server.listen(tornado.options.options.port)
    tornado.ioloop.IOLoop.current().start()

然后查看浏览器,如下,可以用80端口访问了:
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是将最简单的 Flask 应用程序部署到 Docker 容器中的步骤: 1. 准备 Flask 应用程序代码 在本地创建一个 Python 虚拟环境,安装 Flask 库,并编写一个最简单的 Flask 应用程序。例如,创建一个名为 `app.py` 的文件,包含以下代码: ```python from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello, World!" if __name__ == "__main__": app.run(host='0.0.0.0', port=5000, debug=True) ``` 这个应用程序会在本地启动一个 Flask 服务器,监听在本地的 5000 端口上,并返回一个 "Hello, World!" 的响应。 2. 编写 Dockerfile 在本地项目根目录下创建一个名为 `Dockerfile` 的文件,并编写以下代码: ```Dockerfile FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04 # 安装系统依赖 RUN apt-get update && apt-get install -y nginx supervisor # 安装 Python 和 pip RUN apt-get install -y python3 python3-pip # 安装 Flask 库 RUN pip3 install Flask uwsgi # 拷贝应用程序代码到容器中 COPY app.py /app/ # 配置 Nginx RUN rm /etc/nginx/sites-enabled/default COPY nginx.conf /etc/nginx/sites-enabled/ # 配置 Supervisor COPY supervisor.conf /etc/supervisor/conf.d/ # 设置工作目录 WORKDIR /app # 启动 NginxSupervisor CMD ["supervisord", "-n"] ``` 这个 Dockerfile 使用了 nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04 作为基础镜像,并安装了系统依赖、Python 和 Flask 库。然后,将应用程序代码拷贝到容器中,并配置了 NginxSupervisor。 3. 编写 Nginx 配置文件 在本地项目根目录下创建一个名为 `nginx.conf` 的文件,并编写以下代码: ```nginx server { listen 80; server_name localhost; location / { uwsgi_pass unix:///tmp/uwsgi.sock; include uwsgi_params; } } ``` 这个 Nginx 配置文件会监听容器的 80 端口,并将请求转发给 uWSGI。 4. 编写 Supervisor 配置文件 在本地项目根目录下创建一个名为 `supervisor.conf` 的文件,并编写以下代码: ```ini [supervisord] nodaemon=true [program:nginx] command=/usr/sbin/nginx -g "daemon off;" autostart=true autorestart=true [program:uwsgi] command=uwsgi --socket /tmp/uwsgi.sock --chmod-socket=666 --module app:app --callable app --master --processes 4 --threads 2 autostart=true autorestart=true ``` 这个 Supervisor 配置文件会启动 Nginx 和 uWSGI,并自动重启它们。 5. 构建 Docker 镜像 在终端中进入项目根目录,执行以下命令构建 Docker 镜像: ```bash docker build -t myflaskapp . ``` 其中,`myflaskapp` 是你给容器命名的名称。 6. 运行 Docker 容器 执行以下命令启动 Docker 容器: ```bash docker run -d --name myflaskapp -p 80:80 myflaskapp ``` 其中,`myflaskapp` 是容器的名称,`-p 80:80` 表示将容器的 80 端口映射到主机的 80 端口。 7. 测试 Flask 应用程序 在浏览器中访问 `http://localhost`,应该可以看到 "Hello, World!" 的响应。 这样就完成了将最简单的 Flask 应用程序部署到 Docker 容器中的过程。同时,使用了 uWSGI + Nginx + Supervisor 将其部署到生产环境中,实现了更好的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值