当前位置:   article > 正文

docker部署Django_docker 部署django

docker 部署django

置顶:云耀云服务器配置修改

安全组中要配置端口,之后才能访问

一、vue打包

1、修改host

src/api下的api.js中host根据需要修改

let host = 'http://127.0.0.1:8000';
  • 1

2、配置vue.config.js

检查确保vue.config.js文件存在,且配置正确

module.exports = {
    lintOnSave: process.env.NODE_ENV !== 'production',
    configureWebpack: {
        devtool: 'source-map',
    },
    publicPath: '/',
    assetsDir: 'static',
    productionSourceMap: false,
    devServer: {
        historyApiFallback: true
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3、执行命令

执行以下命令生成已dist命名的打包文件

npm run build
  • 1

二、mysql部署

1、创建网络

创建网络后,在同一网络下可以直接只用docker容器名进行调用

docker network create django_net
  • 1

可以使用命令查看创建的网络列表和详情

# 查看网络列表
docker network ls
# 查看网络详情
docker inspect django_net
  • 1
  • 2
  • 3
  • 4

2、拉取mysql镜像

使用mysql的5.7版本

docker pull mysql:5.7
  • 1

3、生成容器

注意:指定相关参数需与django的settings配置数据库的信息保持一致(host/password/database),网络选择之前创建的网络

sudo docker run -p 3306:3306 --name db_mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql  --restart=always --privileged=true -e MYSQL_ROOT_PASSWORD=123456789 -e MYSQL_DATABASE=django_test -d --network django_net mysql:5.7
  • 1

检验容器是否成功

# 查看容器状态,应该为up状态
docker ps
# 查看容器日志
docker logs db_mysql
# 进入容器
docker exec -it db_mysql bash
# 使用以下命令输入密码后能登录成功
mysql -uroot -p
# 查看数据库是否有django_test
show databases;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

三、django部署

1、打包镜像

编写Dockerfile文件

FROM python:3.7-alpine
LABEL maintainer='ydli'
LABEL description='Deploying Django project'

# cd /usr/src/app
WORKDIR /usr/src/app
# /usr/src/app/dev07/
COPY ./django_test ./django_test/
# /usr/src/app/configs/
COPY ./gunicorn_config.py ./configs/

# cd /usr/src/app/dev07/
WORKDIR django_test/
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \
    apk upgrade && \
    apk add --allow-untrusted build-base mariadb-connector-c-dev curl iputils && \
    apk update && apk upgrade && \
    pip install --no-cache-dir -i https://pypi.douban.com/simple -r requirements.txt && \
    pip install -i https://pypi.douban.com/simple gunicorn && \
    apk add ca-certificates bash && \
        rm -rf /var/cache/apk/*

VOLUME /usr/src/app/logs/
VOLUME /usr/src/app/django_test/

EXPOSE 8000
CMD ["/usr/local/bin/gunicorn", "-c", "/usr/src/app/configs/gunicorn_config.py", "django_test.wsgi"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

gunicorn_config.py

bind = '0.0.0.0:8000'
reload = True
pidfile = '/usr/src/app/logs/gunicorn.pid'
accesslog = '/usr/src/app/logs/gunicorn_acess.log'
errorlog = '/usr/src/app/logs/gunicorn_error.log'
  • 1
  • 2
  • 3
  • 4
  • 5

将django项目文件夹放在当前目录下
在这里插入图片描述
最后执行命令

docker build -t django_app:v1 .
  • 1

2、生成容器

–name的名字要与nginx中的配置一致,-v时的logs,不是绝对路径,而是dockerfile时要指定VOLUME,然后-v时指定的logs为docker路径下(/var/lib/docker/volumes)

docker run --name django_app -v logs:/usr/src/app/logs/ -v django_code:/usr/src/app/django_test/ -p 8000:8000 --restart=always -d --network django_net django_app:v1
  • 1

3、初始化库表

进入容器,在项目目录(/usr/src/app/django_test/)下执行以下命令:

# 建表
python manage.py makemigrations
python manage.py migrate
# 新建用户
echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('test', 'test00@qq.com', '1234')" | python manage.py shell &> /dev/null
  • 1
  • 2
  • 3
  • 4
  • 5

四、nginx部署

1、打包镜像

基础镜像地址:https://download.csdn.net/download/qq_45499910/85751587
Dockerfile文件

FROM alpine_base:v1
LABEL maintainer='ydli'

ARG SERVER_ADDR='ip地址'
ENV SERVER_ADDR=${SERVERADDR}

COPY docker-entrypoint.sh /

RUN apk add --update supervisor nginx tzdata && \
        cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
        echo "Asia/Shanghai" > /etc/timezone && \
        apk del tzdata && \
        rm -rf /var/cache/apk/* && \
        mkdir /tmp/nginx && \
        mkdir -p /var/www/html && \
        chown -R nginx:nginx /var/www/html && \
        chmod u+x /docker-entrypoint.sh

COPY dist/ /var/www/html/
COPY configs/default.conf /etc/nginx/conf.d
COPY configs/nginx.conf /etc/nginx/nginx.conf
COPY configs/supervisord.conf /etc/supervisord.conf

VOLUME /var/log/nginx/
VOLUME /var/www/html/
EXPOSE 80 8000 443
ENTRYPOINT ["/docker-entrypoint.sh"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

docker-entrypoint.sh
替换ip地址

#!/bin/sh
sed -i 's/\[SERVER_ADDR\]/${SERVER_ADDR}/gi' /etc/nginx/conf.d/default.conf
supervisord
  • 1
  • 2
  • 3

default.conf

upstream app_server {
    server django_app:8000;
}

server {
         listen  8800;
         server_name [SERVER_ADDR];
    	 access_log  /var/log/nginx/access.log  main;
         error_log  off;
         autoindex_localtime on;
         
         location /static {
            alias /var/www/html/static;
        }

         location / {
            try_files $uri @proxy_to_app;
        }

        location @proxy_to_app {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://app_server;
        }
}

server {
    listen       80;
    server_name [SERVER_ADDR];
    root   /var/www/html;
    access_log  /var/log/nginx/access.log  main;
    error_log  off;

    location / {
        try_files $uri $uri/ /index.html;
    }

    error_page  404 /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ /\.ht {
        deny  all;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

nginx.conf

user  nginx;
worker_processes  1;

error_log  off;
pid        /run/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    autoindex_localtime on;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    index   index.html index.htm;
    include /etc/nginx/conf.d/*.conf;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

supervisord.conf

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)

[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=5MB        ; (max main logfile bytes b4 rotation;default 50MB)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
user=root
nodaemon=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0

[rpcinterface:supervisor]
supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock

[program:nginx]
command=/usr/sbin/nginx
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stdout_events_enabled=true
stderr_events_enabled=true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

生成镜像

 docker build -t nginx_test:v1 .
  • 1

2、生成容器

docker run --name nginx_test -p 8866:80 -p 8800:8000 --restart=always -d --network django_net nginx_test:v1
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/553595
推荐阅读
相关标签
  

闽ICP备14008679号