Docker中部署Django项目记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013205877/article/details/80074091

有很多构建方式,记录下本次使用docker部署的过程,日后参考

1.构建docker环境

安装docker,略
端口映射外部82到80

docker pull python
run -itd -p 82:80 --name YYST 6bf7a4fa2d45
docker exec -it YYST bash

2.装服务,装git,拉代码

https://github.com/584807419/YYST拉取代码,绿色按钮处复制url
这里写图片描述

apt-get update
apt-get install git
apt-get install vim
apt-get install nginx
pip install uwsgi
cd /var/
mkdir www
cd www
git clone https://github.com/584807419/YYST.git

3.安装依赖,文件迁移

用pip安装依赖包时默认访问https://pypi.Python.org/simple/,国内厂商提供的pipy镜像目前可用的有:

http://pypi.douban.com/ 豆瓣
http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学

配置指定的镜像源,在当前用户目录下创建.pip文件夹

mkdir ~/.pip

然后在该目录下创建pip.conf文件填写:

[global]
trusted-host=mirrors.aliyun.com
index-url=http://mirrors.aliyun.com/pypi/simple/
cd YYST
pip install -r packages.txt
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic

4.配置 nginx uwsgi 配置文件,运行

vi /etc/nginx/sites-available/YYSY_nginx.conf

server {
    listen      80;
    server_name 127.0.0.1;
    charset     utf-8;

    client_max_body_size 75M;

    location / {
        include uwsgi_params;
    uwsgi_pass  unix:///var/www/YYST.sock;
    }
}
创建软连接
sudo ln -s /etc/nginx/sites-available/YYSY_nginx.conf /etc/nginx/sites-enabled/YYSY_nginx.conf
把sites-enabled里面原有的default干掉

测试配置语法问题

sudo service nginx configtest 或 /path/to/nginx -t
重启 nginx 服务器:

sudo service nginx reload 或 sudo service nginx restart 或 /path/to/nginx -s reload

vi /var/www/YYST_uwsgi.ini

# Django-related settings
[uwsgi]
# http =:80
socket = /var/www/YYST.sock

# the base directory (full path)
chdir           = /var/www/YYST
# Django s wsgi file
module          = YYST/YYST.wsgi

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
chmod-socket    = 664
# clear environment on exit
vacuum          = true

cd /var/www/
uwsgi –ini YYST_uwsgi.ini
访问:http://116.196.98.152:83/job/pyjob/
这里写图片描述

5.其他运行方式

有多重方式,开发环境的话不用uwsgi,也可以直接debug方式python manage.py runserver 86演示和运行代码
也可用nginx反向代理转发80请求到86端口
反向代理适用于很多场合,负载均衡是最普遍的用法。
当在一台主机上部署了多个不同的web服务器,并且需要能在80端口同时访问这些web服务器时,可以使用 nginx 的反向代理功能: 用 nginx 在80端口监听所有请求,并依据转发规则(比较常见的是以 URI 来转发)转发到对应的web服务器上。

例如有 webmail , webcom 以及 webdefault 三个服务器分别运行在 portmail , portcom , portdefault 端口,要实现从80端口同时访问这三个web服务器,则可以在80端口运行 nginx, 然后将 /mail 下的请求转发到 webmail 服务器, 将 /com下的请求转发到 webcom 服务器, 将其他所有请求转发到 webdefault 服务器。

假设服务器域名为example.com,则对应的 nginx http配置如下:

http {
    server {
            server_name example.com;

            location /mail/ {
                    proxy_pass http://example.com:protmail/;
            }

            location /com/ {
                    proxy_pass http://example.com:portcom/main/;
            }

            location / {
                    proxy_pass http://example.com:portdefault;
            }
    }
}

以上的配置会按以下规则转发请求( GET 和 POST 请求都会转发):

http://example.com/mail/ 下的请求转发到 http://example.com:portmail/
http://example.com/com/ 下的请求转发到 http://example.com:portcom/main/
将其它所有请求转发到 http://example.com:portdefault/
需要注意的是,在以上的配置中,webdefault 的代理服务器设置是没有指定URI的,而 webmail 和 webcom 的代理服务器设置是指定了URI的(分别为 / 和 /main/)。
如果代理服务器地址中是带有URI的,此URI会替换掉 location 所匹配的URI部分。
而如果代理服务器地址中是不带有URI的,则会用完整的请求URL来转发到代理服务器。
以上配置的转发示例:

http://example.com/mail/index.html -> http://example.com:portmail/index.html
http://example.com/com/index.html -> http://example.com:portcom/main/index.html
http://example.com/mail/static/a.jpg -> http://example.com:portmail/static/a.jpg
http://example.com/com/static/b.css -> http://example.com:portcom/main/static/b.css
http://example.com/other/index.htm -> http://example.com:portdefault/other/index.htm

上面代码YYST项目此种方式所使用配置

server {
    listen      80;
    server_name 127.0.0.1;
    charset     utf-8;

    client_max_body_size 75M;

    location / {
        include uwsgi_params;
    uwsgi_pass  unix:///var/www/YYST.sock;
    proxy_pass  http://127.0.0.1:85;
    }
}

容器使用相关知识:
http://www.runoob.com/docker/docker-run-command.html
https://yeasy.gitbooks.io/docker_practice/content/network/port_mapping.html

nginx服务器安装及配置文件详解:
https://segmentfault.com/a/1190000002797601

猜你喜欢

转载自blog.csdn.net/u013205877/article/details/80074091