在docker上部署Django,添加簡單的負載均衡,利用Mysql數據庫,爲數據庫配置備份。
git clone .......
cd ..
docker-compose build
docker-compose up -d
部署文件docker-compose.yml
version: '3'
services:
web_mysql:
build: ./conf/mysql
container_name: web_mysql
command: --default-authentication-plugin=mysql_native_password
environment:
- MYSQL_DATABASE=test
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_ROOT_HOST=%
- MYSQL_HOST=localhost
ports:
- "3302:3306"
volumes:
- /test/test/conf/mysql/logs:/home/log
networks:
# 指定網橋
ipv4_address: 172.16.238.10
restart: always
web1:
build: ""
container_name: web1
command: python manage.py runserver 0.0.0.0:6001
depends_on:
- web_mysql
ports:
- "6001:6001"
volumes:
- .:/test
networks:
- webnet
web2:
build: ""
container_name: web2
command: python manage.py runserver 0.0.0.0:6002
depends_on:
- web_mysql
ports:
- "6002:6002"
volumes:
- .:/test
networks:
- webnet
web3:
build: ""
container_name: web3
command: python manage.py runserver 0.0.0.0:6003
depends_on:
- web_mysql
ports:
- "6003:6003"
volumes:
- .:/test
networks:
- webnet
nginx:
build: ./conf/nginx
volumes:
- /test/the_van/conf/nginx/nginx.conf:/etc/nginx/nginx.conf
- /test/the_van/conf/nginx/logs:/var/log/nginx
- /test/the_van/the_van/static:/data/static
ports:
- "8000:8000"
networks:
- webnet
backup:
# mysql docker備份鏡像
image: databack/mysql-backup
restart: always
volumes:
- /test/the_van/conf/mysql_db/backup:/db
- /test/the_van/conf/mysql_db/pre:/post.d/pre-backup
- /test/the_van/conf/mysql_db/post:/post.d/post-backup
depends_on:
- web_mysql
environment:
- DB_DUMP_TARGET=/db
- DB_USER=root
- DB_PASS=123456
# 每天晚上十一點備份數據庫
- DB_DUMP_CRON=1 0 * * *
# 生成詳細日誌
- DB_DUMP_DEBUG=true
# 不保留目標文件的權限
- DB_DUMP_KEEP_PERMISSIONS=false
- DB_SERVER=web_mysql
networks:
- webnet
adminer:
# PHP寫的mysql客戶端
# 瀏覽器直接本地打開
image: adminer
restart: always
ports:
- 8080:8080
networks:
- webnet
networks:
webnet:
ipam:
driver: bridge
config:
- subnet: "172.16.238.0/24"
- subnet: "2001:3984:3989::/64"
Dockerfile(主)
FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /test
WORKDIR /test
# 安裝依賴包
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY /test /test
# 更改docker時區
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
nginx Dockerfile
FROM nginx
RUN mkdir /data
WORKDIR /data
COPY uwsgi.ini uwsgi.ini
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
nginx核心配置文件
# 負載均衡
upstream test {
server 192.17.215.183:6001;
server 192.17.215.183:6002;
server 192.17.215.183:6003;
}
server {
listen 8000;
server_name test;
charset utf-8;
location / {
root html;
proxy_pass http://test;
include uwsgi_params;
uwsgi_connect_timeout 30;
}
location /static {
alias /data/static;
}
}