docker-compose部署django+nginx+mysql项目
一、项目结构
[[email protected] docker-feiyu]# tree
`-- dokcer-feiyu
|-- docker-compose.yml
|-- nginx
| |-- Dockerfile
| `-- nginx.conf
|-- User
|-- Dockerfile
|-- manage.py
|-- requirements.txt
|-- static
|-- users
|-- db.sqlite3
|-- gunicorn.conf
|-- media
|-- start.sh
|-- templates
`-- User
二、nginx部分
1、先编写Dockerfile
[[email protected] nginx]# vi Dockerfile
FROM nginx
#对外暴露端口
EXPOSE 80 8000
#RUN rm /etc/nginx/conf.d/default.conf
ADD nginx.conf /etc/nginx/conf.d/
RUN mkdir -p /usr/share/nginx/html/static
RUN mkdir -p /usr/share/nginx/html/media
2、准备nginx配置文件
[[email protected] nginx]# vi nginx.conf
server {
listen 80;
server_name localhost;
charset utf-8;
error_log /tmp/nginx_error.log;
access_log /tmp/nginx_access.log;
location /media {
alias /usr/share/nginx/html/media;
}
location /static {
alias /usr/share/nginx/html/static;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://web:8000;
}
}
关于nginx配置,要注意以下两点,是非常重要的:
location
静态文件配置,nginx指定的静态文件原目录是在/usr/share/nginx/html/,而该目录下的静态文件是从web容器中通过volumes同步的。所以,等下docker-compose是非常非常重要的。
proxy_pass
这和你直接在主机上配置是不一样的,host不能写成具体的IP,要写服务名,这里要写web service的name,web是在docker-compose中定义的web应用的service名称。后面要写docker-compose的配置。
三、django部分
1、编写Dockerfile
[[email protected] User]# vi Dockerfile
FROM python:3.5
#MySQL-Python必须得先安装这个库
RUN mkdir /User
#设置工作目录
WORKDIR /User
#将当前目录加入到工作目录中
ADD . /User
#install any needed pacakges in requirements.txt,你要把所有需要安装的Python模块加到这文
件中。
RUN pip install -r requirements.txt
#对外暴露端口
EXPOSE 80 8000
#设置环境变量
ENV SPIDER=/User
2、添加requirements.txt文件
Django==1.18
Pillow
PyMySQL
3、修改项目settings.py文件配置
修改地方有两个,
ALLOWED_HOSTS = ['*', ]
。。。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dataname',
'USER': 'root',
'PASSWORD': '123456',
'HOST': 'db',
}
}
这里的NAME就是docker-compose.yml文件中的MYSQL_DATABASE,PASSWORD为docker-compose.yml文件中的MYSQL_ROOT_PASSWORD,HOST为docker-compose.yml 的db
4.启动脚本start.py
#!/bin/bash
python manage.py collectstatic --noinput &&
python manage.py migrate &&
gunicorn User.wsgi:application -c gunicorn.conf
5此外,django应用选择gunicorn做web服务器,gunicorn的配置文件如下:
workers=4
bind=['0.0.0.0:8000']
proc_name='blog'
pidfile='/tmp/blog.pid'
worker_class='gevent'
max_requests=6000
四、编写docker-compose文件
vi Docker-compose.yml
version: "3"
services:
db:
image: mysql
environment:
MYSQL_DATABASE: dataname
MYSQL_ROOT_PASSWORD: 123456
volumes:
- /srv/db:/var/lib/mysql
restart: always
web:
build: ./User
ports:
- "8001:8001"
volumes:
- ./User:/User
- /tmp/logs:/tmp
command: python3 manage.py runserver 0.0.0.0:8001
nginx:
build: ./nginx
ports:
- "81:80"
volumes:
- ./User/static:/usr/share/nginx/html/static
- ./User/media:/usr/share/nginx/html/media
links:
- web
depends_on:
- web
restart: always
五、编译和启动
a、编译
docker-compose build
b、启动
docker-compose up
或
docker-compose up -d(后台运行)
在浏览器中输入localhost就可以成功访问项目了
参考文章
https://blog.csdn.net/hbnn111/article/details/77176629
推荐阅读
-
docker-compose部署django+nginx+mysql项目
-
项目在本机上可以运行,部署到Linux上显示连接不到数据库
-
Java的Spring框架中AOP项目的一般配置和部署教程
-
企业项目实战k8s篇(十八)Helm部署metrics-server
-
IntelliJ IDEA 配置 Tomcat 7,部署,发布项目 博客分类: JavaEEapp ideatomcat配置部署发布
-
浅谈Android开发中项目的文件结构及规范化部署建议
-
浅谈Android开发中项目的文件结构及规范化部署建议
-
两种Eclipse部署动态web项目方法
-
myeclipse无法部署项目问题及解决方法
-
两种Eclipse部署动态web项目方法