Docker布署Django框架外贸网站实操(二配置uWSGI + nginx)

上线布署是一件比较复杂的事,要做安全高速不浪费资源不比写一个APP式网站简单,本例在编程阶段采用的是Django 和SQLite数据库,SQLite在编程测试时应用是很方便的,但在正式项目中往往不会采用。对于较大项目往往有多个环境,编写时的本机环境,上线前的测试环境,以及正式应用环境。需要在Django代码的settings中做相应配置。所以Docker的优势就出来了,我们只需要让测试环境和正式环境一样就方便多了。这里省略了settings的配置过程(正式项目代码就不贴了)。

原创文章,版权所有。未经许可,严禁转载。

项目简单布署

pull下来的系统已带Python3.6,就不用安装了。start容器(如图)后,在DOCKER内无需sudo ,国外源慢就换源vim /etc/apt/sources.list

deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe

1.apt update
2.apt upgrade

在这里插入图片描述

3.上传项目文件到容器内:
docker cp abc {容器ID}:/home/

4.批量安装django等依赖库,可以在本地项目内用pip3 freeze > plist.txt导出,也可以找到requirements.txt文件来安装。这个版本Python自带pip3(编译版本好像都自带)。

pip3 install -r plist.txt

5.进入上传文件目录测试一下:

python3 manage.py runserver 0:8880

6.现在可以启动浏览器输入docker容器的IP测试一下,浏览器可能会提示出错。因为没有配置Django的接受IP。不过只要有反应就表示正常了。如图:

在这里插入图片描述

7.修改上传项目内的settings文件,ALLOWED_HOSTS = ['*']。现在就可以正常访问了,不过还是使用了Django做服务器。

8.安装uwsgi,本映像自带一个,好像有点问题,用uwsgi --plugins-list竟然找不到插件,所以我删除重装了pip3 install uwsgi,如果没有编译器就装一下apt install build-essential

9.可以通过命令来试一下 uwsgi工作是否正常,浏览器能正常显示网站。

uwsgi --http :8000 --wsgi-file abc/wsgi.py

测试是否正常,发现有些依赖没装(写代码时直接复制进项目环境内的),补上后一切正常。

apt install rabbitmq-server
rabbitmq-server    #  启动rabbitmq-server
celery -A abc worker -l info    # 启动celery

10.这种运行方式显然不科学,给uwsgi写个配置文件,就写在abc根目录下vim uwsgi.ini,配置成 sock方式:

[uwsgi]
# configuration
master = true    # 主进程
chdir = /home/abc    # 工作目录
module = abc.wsgi:application    # 模型APP
wsgi-file = /home/abc/wsgi.py    # Django的wsgi
# plugin = python    # 已有
socket = /home/abc/abc.sock    # sock 文件
processes = 4    
threads = 2    
buffer-size = 65535
pidfile = /tmp/abc-master.pid    # 使用uwsgi  --stop(reload) /tmp/abc-master.pid
uid = 1000
chmod-socket = 666    # 改变权限,可能664也行
daemonize = /home/abc/uwsgi.log    

11.如上配置是不能直接使用的。需要Nginx代理才行:

apt install nginx    # 安装
# nginx.conf     # 编辑配置
# the upstream component nginx needs to connect to
upstream abc {    # 建立abc的upstream,指定uwsgi名称,与上面配置同名sock
        server unix:///home/abc/abc.sock;
        # server 127.0.0.1:8880;    # 测试
        }
# configuration of the server
server {    # 服务器配置
        listen 80;
        server_name www.abc.com abc.com;
        charset utf-8;
        # max upload size
        client_max_body_size 75M;
        # django media
        location /media {     # 媒体文件,注意路径
          #       /home/abc/media;
               alias /home/abc/media;
        }
        location /static {    #  静态文件
               alias /home/abc/static;
        }
        location / {    # 注意uwsgi_params文件路径,将/下的URL转发给upstream即uwsgi的sock
                include /home/abc/uwsgi_params;    
                uwsgi_pass abc;
        }

}

建立一个链接ln -s /home/abc/nginx.conf /etc/nginx/sites-enabled/abc.conf

11.如上配置应该就能通过域名打开网站了,本地测试注意域名服务,可配置HOSTS来做类似DNS。静态文件可能不加载,需要收集一下。编辑 settings文件,添加
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
顺便更改下:
DEBUG = False
ALLOW_HOST = ['abc.com', 'www.abc.com']
python3 manage.py collectstatic

12.停止docker重新启动后运行rabbitmq、celery、uwsgi、nginx如下:
在这里插入图片描述

13.测试后session 存取有问题,要改SESSION_ENGINE的配置,完成后如图:
在这里插入图片描述
在这里插入图片描述
14.下一步还要将数据库换成mysql或postgresql,自带的SQLite效率太低,访问量不大倒也可以,还省资源。还可以再单独做一个nginx代理服务,以便为多个站服务。节约IP资源。现在很多浏览器对http不友好,上线还应该改成https…待续

原创文章,版权所有。未经许可,严禁转载。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无证的攻城狮

如本文对您有用,大爷给打个赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值