Docker + tornado + nginx + supervisord 部署多进程服务

该博客介绍了如何利用Tornado Web服务器、Nginx反向代理和Supervisor进程管理工具搭建一个高可用的服务。通过在Docker容器中运行多个Tornado实例,并配置Nginx进行负载均衡,实现了服务的水平扩展。同时,Supervisor确保了进程的稳定性和自动重启。Dockerfile和docker命令展示了如何打包和运行这个服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 tornado   main.py

import json
import tornado.ioloop
import tornado.web
import tornado.httpserver
from tornado.options import define, options


define('port', default=8000, help='default port', type=int)


class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")


def make_app():
    return tornado.web.Application([
        (r"/", IndexHandler),
    ])


if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = make_app()
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

 nginx.conf

upstream compression {
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
}
server {
    listen      80;

    location / {
        proxy_pass http://compression;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

supervisord.conf

[supervisord]
nodaemon=true

[program:nginx]
command=/usr/sbin/nginx

[group:tornadoes]
programs=tornado-8000,tornado-8001,tornado-8002,tornado-8003

[program:tornado-8000]
command=python /root/compression/main.py --port=8000
# 执行目录
directory=/root/compression
# 自动重启
autorestart=true
# 启动supervisor时,程序自启动
autostart=true
# 日志
stdout=/var/log/tornado-8000.log
redirect_stderr=true
loglevel=info

[program:tornado-8001]
command=python /root/compression/main.py --port=8001
# 执行目录
directory=/root/compression
# 自动重启
autorestart=true
# 启动supervisor时,程序自启动
autostart=true
# 日志
stdout=/var/log/tornado-8001.log
redirect_stderr=true
loglevel=info

[program:tornado-8002]
command=python /root/compression/main.py --port=8002
# 执行目录
directory=/root/compression
# 自动重启
autorestart=true
# 启动supervisor时,程序自启动
autostart=true
# 日志
stdout=/var/log/tornado-8002.log
redirect_stderr=true
loglevel=info

[program:tornado-8003]
command=python /root/compression/main.py --port=8003
# 执行目录
directory=/root/compression
# 自动重启
autorestart=true
# 启动supervisor时,程序自启动
autostart=true
# 日志
stdout=/var/log/tornado-8003.log
redirect_stderr=true
loglevel=info

Dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/hzmodi/python3.8:v2

RUN sed -i "s@/archive.ubuntu.com/@/mirrors.163.com/@g" /etc/apt/sources.list \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get update --fix-missing -o Acquire::http::No-Cache=True
RUN apt install -y nginx supervisor pngquant

# application
RUN mkdir /root/compression
WORKDIR /root/compression
COPY  main.py /root/compression/
COPY  requirements.txt /root/compression/
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

# nginx
RUN rm /etc/nginx/sites-enabled/default
COPY tornado4.conf /etc/nginx/sites-available/
RUN ln -s /etc/nginx/sites-available/tornado4.conf /etc/nginx/sites-enabled/tornado4.conf
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

# supervisord
RUN mkdir -p /var/log/supervisor
COPY supervisord4.conf /etc/supervisor/conf.d/supervisord.conf

# run
CMD ["/usr/bin/supervisord"]


docker命令

# build
docker build -f Dockerfile -t registry.cn-hangzhou.aliyuncs.com/hzmodi/compression:4-20211020 .
# run
docker run -d --name compression -p 4396:80 registry.cn-hangzhou.aliyuncs.com/hzmodi/compression:4-20211020

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什固吴彦祖

有钱的捧个钱场,没钱的捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值