1、uwsgi上线django项目
见uwsgi上线django项目_月半弯、沐戈的博客-CSDN博客
项目目录结构如下:
[root@100-020-gpuserver PersonEval]# ll
total 56
drwxr-x--- 2 zhangge zhangge 103 Mar 25 16:31 configfiles
drwxr-x--- 6 zhangge zhangge 180 Mar 23 17:23 configSetAPP
-rw-r----- 1 zhangge zhangge 0 Mar 15 10:26 db.sqlite3
-rw-r----- 1 zhangge zhangge 1162 Mar 29 14:49 dockerfile
drwxr-x--- 6 zhangge zhangge 180 Mar 15 15:29 evalScoreAPP
-rwxr-x--x 1 zhangge zhangge 630 Mar 12 14:08 manage.py
drwxr-x--- 3 zhangge zhangge 108 Mar 15 10:22 PersonEval
drwxr-x--- 3 zhangge zhangge 35 Mar 26 16:45 uwsgi
2、docker生成镜像文件时执行的文本文件dockerfile(位于项目根目录之下)
FROM centos:centos7
# 安装python3.7.2
RUN yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel libffi-devel
#安装make编译所需的gcc,g++编译器
RUN yum -y install gcc automake autoconf libtool make wget
# 删除centos7自带的旧版python
RUN set -ex \
&& cd /usr/bin \
&& mv python python.bak
RUN mkdir -p /usr/local/python3
RUN wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
RUN set -ex \
&& tar -zxvf Python-3.7.2.tgz \
&& cd Python-3.7.2 \
&& ./configure prefix=/usr/local/python3 \
&& make && make install \
&& ln -s /usr/local/python3/bin/python3.7 /usr/local/bin/python3 \
&& ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3
RUN set -ex \
&& cd /usr/local/python3 \
&& python3 -V
RUN mkdir -p /usr/src/PersonEval
WORKDIR /usr/src/PersonEval
COPY pip.conf ~/.pip/pip.conf
#可以通过requirements.txt文件安装,方法见https://blog.csdn.net/Mugo_Moon/article/details/114981204
#建议安装低版本django,以免系统带的SQLite版本无法使用
RUN pip3 install --default-timeout=1000 django==2.1.8
RUN pip3 install --default-timeout=1000 uwsgi
RUN ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
COPY . /usr/src/PersonEval
#也可通过进入docker交互终端运行uwsgi命令
CMD ["uwsgi", "--ini", "/usr/src/PersonEval/uwsgi/uwsgi.ini"]
3、uwsgi.ini文件配置(位于uwsgi文件夹之下)
# uwsig使用配置文件启动
[uwsgi]
master = true
# 设置进程 processes/workers
# processes = 2
workers = 2
# 项目所在的根目录
chdir=/usr/src/PersonEval/
# 指定项目的application,区别于启动命令--wsgi-filemysite/wsgi.py
module=PersonEval.wsgi:application
#the local unix socket file than commnuincate to Nginx
# 指定sock的文件路径,这个sock文件会在nginx的uwsgi_pass配置,用来nginx与uwsgi通信
# 支持ip+port模式以及socket file模式
#socket=%(chdir)/uwsgi_conf/uwsgi.sock
http = 0.0.0.0:8000
# 存放进程编号的文件
pidfile=/usr/src/PersonEval/uwsgi/uwsgi.pid
# 重启的时候使用的 pid 号
touch-reload = /usr/src/PersonEval/uwsgi/uwsgi.pid
# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。以前的runserver是依赖终端的
# daemonize和logto的区别是,前者会使uwsgi作为守护进程运行。如果你的uwsgi进程由systemd或supervisor等管理工具管理,那么使用logto,否则使用daemonize。
# docker时使用systemd日志文件,因此使用logto,若使用daemonize将无法通过CMD启动主程序
daemonize = /usr/src/PersonEval/uwsgi/logs/uwsgi.log
#logto = /usr/src/PersonEval/uwsgi/logs/uwsgi.log
#自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
autostart = true
startsecs = 5
autorestart = true
startretries = 3
#evil-reload-on-as = 16000
#evil-reload-on-rss = 16000
# post 请求超过 字节 就缓存值磁盘
post-buffering = 8192
# 缓冲区大小
buffer-size = 32768
4、镜像
# 建立镜像
[root@100-020-gpuserver PersonEval]# docker build -t personaleval:v0.3 .
# 查看镜像
[root@100-020-gpuserver PersonEval]# docker images
# 运行镜像
[root@100-020-gpuserver PersonEval]# docker run -d -it -p 8000:8000 personaleval:v0.3
# 若dockerfile中没有CMD命令,可通过以下方式启动
## 查看container ID
##[root@100-020-gpuserver PersonEval]# docker ps
##[root@100-020-gpuserver PersonEval]# docker exec -i -t container的ID号 /bin/bash
## 通过uwsgi命令启动django项目
##[root@9f10753d1e8b PersonEval]# uwsgi --ini uwsgi/uwsgi.ini
5、镜像移植
#保存镜像
[root@100-020-gpuserver Djgango_example]# docker save container的ID -o ./personaleval-save-0322.zip personeval:v0.3
#加载镜像
[root@65-035-GPU ~]# docker load < personaleval-save-0322.zip