docker部署django

2020-08-17  本文已影响0人  aq_wzj

急着部署, 不一定好用, 反正能用

Ubuntu 16.04

1. 项目数据库, mq, redis等配置

在docker里面访问宿主机的服务

通过ifconfig查看docker0的inet addr, 一般为172.17.0.1, 则在项目里面的数据库地址就写172.17.0.1

2. 宿主机目录树

root@localhost:~/opt/mydockerimage# tree
.
├── proj.zip  # 项目根目录打包文件
├── dockerfile  # dockerfile
├── pip.conf   # pip源
├── Shanghai # 时区文件, 来自/usr/share/zoneinfo/Asia/Shanghai
└── sources.list # 

proj.zip解压后大概如下
proj
├── proj  #
├── app01  # app
         └── apps.py
├── requirements.txt   # pip模块列表
├── uwsgi.ini
└── manage.py

uwsgi.ini

[uwsgi]
http  = 0.0.0.0:7001
chdir      = /proj
module     = proj.wsgi
master     = true
processes  = 4
vacuum     = false

pip.conf

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com

3. dockerfile

FROM ubuntu:16.04
# 支持中文
ENV LANG C.UTF-8
#创建项目文件夹, 设项目名为proj
RUN mkdir /root/proj-back/
RUN mkdir /root/.pip/
#时区配置
RUN mkdir -p /usr/share/zoneinfo/Asia
COPY Shanghai /usr/share/zoneinfo/Asia/Shanghai
RUN rm /etc/localtime
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 换源
COPY sources.list /etc/apt/sources.list
COPY pip.conf /root/.pip/pip.conf
# 项目复制进去
COPY proj.zip /root/proj-back/proj.zip
# 软件安装
RUN apt update
RUN apt install unzip -y
RUN apt install software-properties-common -y
RUN add-apt-repository ppa:deadsnakes/ppa -y
RUN apt update
RUN apt install python3.6 -y
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2
RUN update-alternatives --config python3
RUN apt-get install python3-pip -y
RUN pip3 install --upgrade pip
RUN apt-get install build-essential python3.6-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev -y
# 解压项目
RUN unzip /root/proj-back/proj.zip
# 安装pip模块
RUN pip3 install -r proj/requirements.txt
# 如果有celery,执行这一个, 没有注释
RUN echo "nohup python3 /proj/manage.py celery worker & >/dev/null 2>&1 &" >> /root/run.sh
RUN echo "uwsgi --ini  /proj/uwsgi.ini" >> /root/run.sh
EXPOSE 7001
ENTRYPOINT  ["bash", "/root/run.sh"]

4. 生成镜像

root@localhost:~/opt/mydockerimage# docker build -t "xxxx/xxxxxxx:v2" .

5. 本地镜像传到阿里云

1. 登录阿里云Docker Registry
sudo docker login --username=xxxxx registry.cn-hangzhou.aliyuncs.com
2. 将镜像推送到Registry
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/命名空间/仓库名称:[镜像版本号]

6. 拉取镜像

如果是阿里云ECS, 走内网或者vpc
    docker login --username=xxxxx registry-vpc.cn-hangzhou.aliyuncs.com
    docker pull registry-vpc.cn-hangzhou.aliyuncs.com/命名空间/仓库名称:[镜像版本号]
如果是非阿里云ECS
    docker login --username=xxxxx registry.cn-hangzhou.aliyuncs.com
    docker pull registry.cn-hangzhou.aliyuncs.com/命名空间/仓库名称:[镜像版本号]

7. 启动镜像

限制只能通过127.0.0.1访问, 然后再通过nginx代理

docker run \
-d \
--restart=always \
-p 127.0.0.1:7001:7001 \
-v /opt/proj:/proj \
--name proj \
registry-vpc.cn-hangzhou.aliyuncs.com/命名空间/仓库名称:[镜像版本号]

vim /etc/nginx/conf.d/api.conf

server {
   listen   80;
   server_name api.example.com;
   client_max_body_size 100M;
   # 开启ssl认证
   ssl on;
   ssl_certificate   cert/api/a.pem;  #.pey文件相对路径
   ssl_certificate_key  cert/api/a.key; # .key文件相对路径
   ssl_session_timeout 10m;
   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;
   # 请求转发
   location /proj1/ {
               proxy_pass http://127.0.0.1:7001/;
   }
   location /proj2/ {
               proxy_pass http://127.0.0.1:7002/;
   }

}
上一篇下一篇

猜你喜欢

热点阅读