Xshell+Ubuntu+Docker部署Python3.5+Django2.1

这里就是很基本的运行django框架,没有用到其他的附加服务,参考文章里很全,其实看他的就行了,只是记录下我自己的部署流程
参考博客:https://blog.csdn.net/hbnn111/article/details/77176629

  1. Xshell连接到Ubuntu服务器
  2. 在文件夹下git clone Django项目(我的项目名是weixin_test,用于写一些封装微信接口方法)
  3. 目录结构:
    ├── weixin_test    
    │   ├──weixin_test
    │   ├── mydecoration
    │   ├── utils
    │   ├── venv
    │   └── static
    │   ├── weixin
    │   ├── manage.py
    │   ├── Dockerfile
    │   ├── gunicorn.conf
    │   ├── requirements.txt
    │   ├── start.sh
    ├── docker-compose.yml
    └── nginx
        ├── Dockerfile

4.weixin_test下的 Dockerfile(用于放项目需要引用的镜像环境,运行需要的安装包,环境变量,工作路径设置;需要的python包则放在requirements.txt里):

    FROM ubuntu:16.04
    RUN apt-get -y update
    
    RUN apt-get install -y python3.5
    RUN apt-get install -y build-essential libssl-dev libffi-dev python3-dev
    RUN apt-get -y update
    RUN apt-get install -y python3-pip
    
    ENV TIME_ZONE=Asia/Shanghai CODE_DIR=/code
    ENV SPIDER=/weixin_test
    
    RUN mkdir /weixin_test
    WORKDIR /weixin_test
    ADD . /weixin_test
    RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone
    RUN pip3 install -r requirements.txt
    
    COPY requirements.txt /tmp/requirements.txt
    
    VOLUME $CODE_DIR
    EXPOSE 80 8080 8000 5000
      

5.weixin_test下的 gunicorn.conf :

workers=4
bind=['0.0.0.0:8080']
proc_name='weixin_test'
pidfile='/tmp/weixin_test.pid'
worker_class='gevent'
max_requests=6000

6.weixin_test下的 requirements.txt :

asn1crypto==0.24.0
bcrypt==3.1.4
Cerberus==1.2
cffi==1.11.5
cryptography==2.2.2
Cython==0.28.4
falcon==1.4.1
gevent==1.3.5
greenlet==0.4.13
gunicorn==19.9.0
idna==2.7
itsdangerous==0.24
pycparser==2.18
PyMySQL==0.9.2
python-mimeparse==1.6.0
shortuuid==0.5.0
six==1.11.0
SQLAlchemy==1.2.10
ujson==1.35
oss2==2.6.1
Django==2.1

7.weixin_test下的 start.sh

#!/bin/bash

#命令只执行最后一个,所以用 &&

python3 manage.py collectstatic --noinput &&
python3 manage.py migrate &&
gunicorn weixin_test.wsgi:application -c gunicorn.conf

8.weixin_test下,weixin_test/settings.py设置 :

ALLOWED_HOSTS = ['*']
STATIC_ROOT = os.path.join(BASE_DIR,'static')

如果数据库有另外使用的,就配置数据库
9 . 根目录下的docker-compose.yml (参考链接里很全,这里我只需要用到web):

version: "3"
services:
  web:
    build: ./weixin_test
    ports:
    - "8524:8080"
    volumes:
    - ./weixin_test:/weixin_test
    - /tmp/logs:/tmp
    command: bash start.sh
    restart: always   
  • build 根据Dockerfile重新build一个镜像;
  • ports 格式为 在主机映射时设定的端口:容器内项目运行对外暴露的端口。相当于一个nat转换,设置内部的端口向外转发的端口;
  • volumes 同样是设置数据文件备份,也可以说成是同步,web容器的工作目录/weixin_test备份到主机上的目录;
  • command 启动容器时执行的文件;
  • links(我没用到redis等,就没写) 创建和其他容器中的service的链接,指定服务名字即可。有了这个连接,服务之间就可以通过service名字通信了,在前面nginx配置中的proxy_pass就用了web服务;
  • depends_on(我没用到db,就没写) 它有两层含义,一是在启动服务的时候,会先启动db,然后再启动web;二是如果执行ocker-compose up web也会创建和启动db

10 nginx目录下的Dockerfile :

FROM nginx
#对外暴露端口
EXPOSE 80 8000 8080

11 nginx配置
我这里用的是安装在ubuntu的nginx,参考文里用的是nginx镜像
nginx配置具体看上一篇文章 https://blog.csdn.net/qq_35567179/article/details/91040820
切到nginx/conf/vhost/下的project_nginx.conf(自己命名的)

server {
	listen 80;
	server_name 域名;

	location / {
		#rewrite是实现URL重定向的重要指令,他根据regex(正则表达式)来匹配内容跳转到replacement,结尾是flag标记
		#这样就可以多个项目共用1个域名,只需要用不同的端口号区分项目进行访问
		rewrite ^ https://$server_name$request_uri? permanent;
	}
}
server {
    server_name 域名;
    charset utf-8;

	#默认访问该域名时直接跳转到的html
    location = / {
        rewrite ^/(.*) /test/index.html redirect;
    }

	#weixin test
    location /weixin_test{
        rewrite /weixin_test/(.*) /$1 break;
        proxy_pass  http://127.0.0.1:8524;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header X-Real-Port $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

访问

www.域名.com/weixin_test/ ,跳转到项目的默认页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值