优化:更新运行部署方式为 gunicorn

pull/84/head
李强 2023-01-12 22:29:18 +08:00
parent 4123236854
commit 51a6c569a2
6 changed files with 61 additions and 5 deletions

View File

@ -85,7 +85,10 @@ class DvadminWebSocket(AsyncJsonWebsocketConsumer):
# Leave room group
await self.channel_layer.group_discard(self.chat_group_name, self.channel_name)
print("连接关闭")
await self.close(close_code)
try:
await self.close(close_code)
except Exception:
pass
class MegCenter(DvadminWebSocket):

View File

@ -2,4 +2,4 @@
# python manage.py makemigrations
# python manage.py migrate
# python manage.py init -y
daphne -b 0.0.0.0 -p 8000 application.asgi:application
gunicorn -c gunicorn.py application.asgi:application

48
backend/gunicorn.py Normal file
View File

@ -0,0 +1,48 @@
# gunicorn.conf
# coding:utf-8
# 启动命令gunicorn -c gunicorn.py application.asgi:application
import multiprocessing
# 并行工作进程数, intcpu数量*2+1 推荐进程数
workers = multiprocessing.cpu_count() * 2 + 1
# 指定每个进程开启的线程数
threads = 3
# 绑定的ip与端口
bind = '0.0.0.0:8000'
# 设置守护进程,将进程交给第三方管理
daemon = 'false'
# 工作模式协程默认的是sync模式,推荐使用 gevent此处使用与uvicorn配合使用 uvicorn.workers.UvicornWorker
worker_class = 'uvicorn.workers.UvicornWorker'
# 设置最大并发量每个worker处理请求的工作线程数正整数默认为1
worker_connections = 10000
# 最大客户端并发数量默认情况下这个值为1000。此设置将影响gevent和eventlet工作模式
# 每个工作进程将在处理max_requests请求后自动重新启动该进程
max_requests = 10000
max_requests_jitter = 200
# 设置进程文件目录
pidfile = './gunicorn.pid'
# 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
loglevel = 'info'
# 设置gunicorn访问日志格式错误日志无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
# 监听队列
backlog = 512
#进程名
proc_name = 'gunicorn_process'
# 设置超时时间120s默认为30s。按自己的需求进行设置timeout = 120
timeout = 120
# 超时重启
graceful_timeout = 300
# 在keep-alive连接上等待请求的秒数默认情况下值为2。一般设定在1~5秒之间。
keepalive = 3
# HTTP请求行的最大大小此参数用于限制HTTP请求行的允许大小默认情况下这个值为4094。
# 值是0~8190的数字。此参数可以防止任何DDOS攻击
limit_request_line = 5120
# 限制HTTP请求中请求头字段的数量。
# 此字段用于限制请求头字段的数量以防止DDOS攻击与limit-request-field-size一起使用可以提高安全性。
# 默认情况下这个值为100这个值不能超过32768
limit_request_fields = 101
# 限制HTTP请求中请求头的大小默认情况下这个值为8190。
# 值是一个整数或者0当该值为0时表示将对请求头大小不做限制
limit_request_field_size = 0
# 记录到标准输出
accesslog = '-'

View File

@ -43,3 +43,7 @@ whitenoise==5.3.0
openpyxl==3.0.9
channels==3.0.5
channels-redis==3.4.1
uvicorn==0.20.0
gunicorn==20.1.0
gevent==22.10.2
websockets==10.4

View File

@ -2,7 +2,7 @@ FROM python:3.8-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update && apk add bash bash-doc bash-completion git freetds-dev jpeg-dev linux-headers mysql-client mariadb-dev build-base libffi-dev openssl-dev zlib-dev bzip2-dev pcre-dev ncurses-dev readline-dev tk-dev postgresql-dev
WORKDIR /backend
COPY ./backend/requirements.txt /
COPY ./docker_env/requirements-all.txt /
COPY ./backend/requirements.txt .
COPY ./docker_env/requirements-all.txt .
RUN python3 -m pip install -i https://mirrors.aliyun.com/pypi/simple/ -r /requirements.txt
RUN python3 -m pip install -i https://mirrors.aliyun.com/pypi/simple/ -r /requirements-all.txt

View File

@ -1,3 +1,4 @@
FROM node:14-alpine
COPY ./web/package.json /
WORKDIR /web/
COPY ./web/package.json .
RUN npm install --registry=https://registry.npm.taobao.org