通过nginx请求uwsgi+django项目的方式部署,能显著提高算法的并发性。其中uwsgi+django项目镜像可部署在多台业务服务器上,对应的nginx镜像部署在一台反向代理服务器上,可实现负载均衡。
1、docker制作uwsgi+django镜像
见https://blog.csdn.net/Mugo_Moon/article/details/115301545
2、docker制作nginx镜像
(1)新建personal_nginx文件夹(位置随意),其下nginx.conf配置文件内容如下
user root;
events {
worker_connections 1024;
}
http {
client_max_body_size 50M;
server {
listen 8000;
server_name 172.19.200.12;
access_log /usr/src/personaleval_nginx/logs/access.log;
error_log /usr/src/personaleval_nginx/logs/error.log;
location / {
include /usr/local/nginx/conf/uwsgi_params;
uwsgi_pass 172.19.100.20:8000;
}
}
}
备注:
a.每增加一个业务服务器转发可增加一个server配置,此仅放一个(敲黑板:通过此方法+多个uwsgi+django算法服务器的架构可达到集群的目的)。
b. server_name为http/https请求服务器,uwsgi_pass为对应的业务服务器IP:port(敲黑板:一般情况下uwsgi_pass与uwsgi.ini文件中的socket应相同;但当uwsgi使用docker进行容器化后,docker run命令将映射uwsgi的服务器IP(172.19.100.20)到容器内,此时uwsgi_pass与socket不同,uwsgi_pass为uwsgi服务器IP,而socket的IP为0.0.0.0)。
c. client_max_body_size限制最大数据量。
d. 若存在静态文件可添加location项。
e. uwsgi_params在nginx安装程序文件夹中自带。
(2)docker生成镜像文件时执行的文本文件dockerfile(位于personeval_nginx根目录之下)
FROM centos:centos7
RUN yum -y install gcc make pcre-devel zlib-devel wget
RUN wget http://nginx.org/download/nginx-1.15.2.tar.gz
RUN mkdir /usr/local/nginx
RUN set -ex \
&& tar -zxvf nginx-1.15.2.tar.gz\
&& cd nginx-1.15.2\
&& ./configure --prefix=/usr/local/nginx && make && make install\
&& ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
RUN mkdir -p /usr/src/personaleval_nginx
WORKDIR /usr/src/personaleval_nginx
COPY . /usr/src/personaleval_nginx
CMD ["nginx", "-c", "/usr/src/personaleval_nginx/nginx.conf"]
(3)镜像
# 建立镜像
[root@200-12-gpuserver personeval_nginx]# docker build -t personeval_nginx:v0.3 .
# 查看镜像
[root@200-12-gpuserver personeval_nginx]# docker images
# 运行镜像
[root@200-12-gpuserver personeval_nginx]# docker run -d -it -p 8000:8000 personaleval_nginx:v0.3
# 若dockerfile中没有CMD命令,可通过以下方式启动
## 查看container ID
##[root@200-12-gpuserver personeval_nginx]# docker ps
##[root@200-12-gpuserver personeval_nginx]# docker exec -i -t container的ID号 /bin/bash
## 通过uwsgi命令启动django项目
##[root@200-12-gpuserver personeval_nginx]# nginx -c /usr/src/personeval_nginx/nginx.conf
3、镜像移植
#保存镜像
[root@200-12-gpuserver personeval_nginx]# docker save container的ID -o ./personaleval_nginx-save-0331.zip
#加载镜像
[root@65-035-GPU ~]# docker load < personaleval_nginx-save-0331.zip