前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker-compose部署django+nginx+mysql项目

docker-compose部署django+nginx+mysql项目

作者头像
菲宇
发布2019-06-12 12:18:51
2.2K0
发布2019-06-12 12:18:51
举报
文章被收录于专栏:菲宇菲宇

一、项目结构 [root@mail 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 [root@mail nginx]# vi Dockerfile

代码语言:javascript
复制
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配置文件 [root@mail nginx]# vi nginx.conf

代码语言:javascript
复制
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 [root@mail User]# vi Dockerfile

代码语言:javascript
复制
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文件

代码语言:javascript
复制
Django==1.18
Pillow
PyMySQL

3、修改项目settings.py文件配置 修改地方有两个,

代码语言:javascript
复制
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

代码语言:javascript
复制
#!/bin/bash
python manage.py collectstatic --noinput &&
python manage.py migrate &&
gunicorn User.wsgi:application -c gunicorn.conf

5此外,django应用选择gunicorn做web服务器,gunicorn的配置文件如下:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年07月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档