-
-
Notifications
You must be signed in to change notification settings - Fork 129
测试部署
配置环境后进行的测试与部署。
python manage.py runserver 0.0.0.0:8080
即为监听了任意IP发送到8080端口的web(测试)服务
参考coolq-http-api的对应文档,下载酷Q机器人与对应插件,修改插件配置如下:
{
"host": "0.0.0.0",
"port": 5700,
"use_http": false,
"ws_host": "0.0.0.0",
"ws_port": 6700,
"use_ws": false,
"ws_reverse_url": "ws://服务器IP:8080/ws/",
"ws_reverse_use_universal_client": true,
"enable_heartbeat": true,
"use_ws_reverse": "yes",
"ws_reverse_reconnect_interval": 5000,
"ws_reverse_reconnect_on_code_1000": "yes",
"post_url": "",
"access_token": "SECRET",
"secret": "",
"post_message_format": "string",
"serve_data_files": false,
"update_source": "github",
"update_channel": "stable",
"auto_check_update": false,
"auto_perform_update": false,
"thread_pool_size": 4,
"server_thread_pool_size": 1,
"show_log_console": false,
"enable_backward_compatibility": true
}
对应参数的含义参考coolq-http-api的文档
请注意,Web和机器人都启动后,正常的话应该是还不能正确处理消息,因为在大规模机器人接入的情况下,有必要对机器人发送来的消息使用消息队列管理,本项目推荐RabbitMQ实现的消息队列,以及Python的RabbitMQ客户端Pika
Pika的publisher对应代码在ffxivbot/consumers.py
中实现(此处的consumers.py指django-channels的consumer),而Pika的consumer需要单独运行,脚本名为pika_rabbit.py
:
python pika_rabbit.py
如果web服务和rabbitmq服务均没有问题,会在处理消息后返回如下消息:
INFO:__main__:pid:11018 Acknowledging message 1
INFO:__main__:pid:11018 Acknowledging message 2
则应该能够正常的返回消息了。
生产环境坑也比较多,主要包含了下面几个部分:
用来管理一些静态资源与请求转发,配置的例子如下:
server
{
listen 80;
server_name your.domain_or_ip.com;
charset UTF-8;
access_log /var/log/nginx/uWSGI_access.log;
error_log /var/log/nginx/uWSGI_error.log;
client_max_body_size 75M;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_redirect off;
proxy_http_version 1.1;
proxy_buffering off;
proxy_connect_timeout 30s;
proxy_read_timeout 600s;
proxy_send_timeout 30s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /home/ubuntu/FFXIVBOT/static;
}
}
该配置将对于/
的请求转发到了http://127.0.0.1:8001
处理,也就意味着我们需要在8001端口通过channels的asgi服务器监听nginx的转发请求。
ASGI服务器有很多种:
我使用的是官方维护的daphne,大家可以多多折腾其他的服务器。
使用supervisor进行进程控制,配置如下:
[fcgi-program:daphne]
socket=tcp://localhost:8001
command=/home/ubuntu/.pyenv/shims/daphne -u /tmp/daphne%(process_num)d.sock --fd 0 --access-log - --proxy-headers FFXIV.asgi:application
numprocs=2
process_name=daphne-%(process_num)d
directory=/home/ubuntu/FFXIVBOT/
user = ubuntu
autostart = true
autorestart = true
stdout_logfile=/var/log/supervisor/daphne.out
stderr_logfile=/var/log/supervisor/daphne.err
对应目录请自行修改。
也通过supervisor管理:
[program:pika]
command=/home/ubuntu/.pyenv/shims/python3.6 /home/ubuntu/FFXIVBOT/ffxivbot/pika_rabbit.py
numprocs=8
process_name=pika-rabbit-%(process_num)d
directory=/home/ubuntu/FFXIVBOT/
user = ubuntu
autostart = true
autorestart = true
stdout_logfile=/var/log/supervisor/pika-rabbit.out
stderr_logfile=/var/log/supervisor/pika-rabbit.err
请注意指定python所在路径,并根据服务器牛逼程度负载能力调整numprocs
的大小。
然后通过sudo supervisorctl reload
重载supervisor的配置即可。
请注意,生产环境监听80/443端口,需要在插件对应配置中修改端口(默认就是80/443)。
- Nginx的连接可能会超时,因此如果ws连接一段时间没有通信会被自动断掉,建议如果机器人的群不活跃通过配置coolq-http-api插件的客户端心跳来进行保持连接。
- Pika Consumer长时间运行可能会阻塞,初步怀疑是没有设置pika connection的heartbeat造成的,建议定时查看或重启。
- 开启了SSL的话要将HTTPAPI插件的
ws://
改为wss://