阶段三-08 django项目生产环境部署

关于environment

开发、测试、生产环境不同配置,可以使用 django-environ 参考官方文档进行配置更改

首先在项目根目录下创建  .env文件 后settings中更改

import environ
from pathlib import Path

# 找到当前执行的脚本文件的父级目录的上两级目录,并返回一个 Path 对象。其中,file 变量是指当前模块(也就是包含该代码的 Python 文件)的路径。resolve() 方法将解析符号链接并规范化路径。parent 属性返回路径的父级目录,这里将其连续使用两次相当于调用了两次 parent。
BASE_DIR = Path(__file__).resolve().parent.parent

# django-environ环境配置
env = environ.Env(
    # set casting, default value
    DEBUG=(bool, False)
)
# 从.env文件中获取环境变量
env.read_env(BASE_DIR / '.env')

DATABASES = {
    'default': env.db()
}

TEST_PLT_API_TIMEOUT = env.tuple('TEST_PLT_API_TIMEOUT', default=(3.1, 30))  # 接口默认超时时间
LIST_PER_PAGE = env.int('LIST_PER_PAG', default=10)  # 默认页面展示条数

env文件中灵活配置可变参数

DEBUG=True
DATABASE_URL=mysql://root:pass@ip:3306/db
TEST_PLT_API_TIMEOUT=(3.1, 30)
LIST_PER_PAG=10
LOG_DIR=../logs
ERROR_LOG_FILE=error.log
INFO_LOG_FILE=info.log
LOG_TEST_PLT_LEVEL=WARNING
CELERY_BROKER_URL=amqp://user:pass@ip:5672/db
CELERY_RESULT_EXPIRES=259200
CELERY_TASK_TIME_LIMIT=600
DINGTALK_WEB_TOKEN=e6c4a6d89046a813858721b1c3dd9f3e9d2beb3ae09de74db5532fb4e99216e1
DINGTALK_WEB_HOOK_SING=SEC9a7b1ce0fd371c80897cab6e6257a978d45045076e8c6db63d94e07eb290c60a

获取所需要的库  pip freeze --all > requirements.txt  仅留下我们主动安装的库

celery==5.3.0b1
DingtalkChatbot==1.5.7
Django==4.1.7
django-celery-beat==2.4.0
django-celery-results==2.3.1
django-environ
django-nested-admin
django-simpleui
flower
jsonschema
mysqlclient
redis
requests
gunicorn
pymysql

在腾讯云部署

已安装好gitdocker-ce和docker-compose

Docker学习(3)-CentOS安装Docker及Docker-Compose_centos安装docker以及docker-compose-CSDN博客

指定docker项目专用目录

mkdir /opt/vhosts
# 在此文件夹下创建 portainer-ce 的 docker-compose.yml
mkdir /opt/vhosts/portainer

本次使用 portainer-ceDocker管理UI 

version: '3'

services:
  portainer:
    image: portainer/portainer-ce
    container_name: portainer
    restart: always
    ports:
      - "9001:9000"
    command: -H unix:///var/run/docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data

volumes:
  portainer_data:

 创建好docker-compose.yml 后在当前目录执行  docker-compose up -d 

浏览器访问 服务器ip地址+9001,如果提示权限错误重启即可: sudo docker restart portainer

使用测试平台Dockerfile文件构建镜像

先在目录/opt/vhosts/auto-test-plt-project 下拉取代码 git clone https://XXXXX.git

将以下内容的 Dockerfile加入工程目录: /opt/vhosts/auto-test-plt-project/Dockerfile  用于构建自己的镜像文件
FROM python:3.12.1
ENV PYTHONUNBUFFERED=1
ADD ./requirements.txt /app/requirements.txt

RUN sh -c "echo 'Asia/Shanghai' > /etc/timezone" \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/ \
    && cd /app \
    && mkdir static \
    && pip install -r ./requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

 #是否将源代码打包到镜像内?取决于什么因素?
#ADD . /app

EXPOSE 8000
ENTRYPOINT cd /app; python manage.py collectstatic -c --no-input; gunicorn -b
 0.0.0.0:8000 djangoProject1.wsgi;
#是否加入python manage.py migrate?
在项目文件中编辑.env文件,设置环境变量;生产环境auto_test_platform:v1.0.0
执行镜像构建:
docker build -t auto_test_platform:v1.0.0 .  # 注意最后的 .代表当前路径的dockerfile

 之后返回上一级创建需要的文件夹,路径是/opt/vhosts

mkdir -p ./mysql-data
mkdir -p ./rabbitmq-data
mkdir -p ./logs/rabbitmq
mkdir -p ./logs/django
mkdir -p ./logs/worker
mkdir -p ./logs/beat
mkdir -p ./logs/flower
mkdir -p ./logs/nginx
mkdir -p ./nginx/

创建完成后需要注意文件的用户和组是否是root,不是的话需要改为root

chown -R 用户名:用户组 文件夹路径

nginx配置

在./nginx/  目录下创建 nginx.conf文件,proxy_pass 需要注意和我们的python项目容器名字必须一致

#user nobody;
worker_processes 1;
error_log /var/log/nginx/error.log;

events {
	worker_connections 1024;
}

http {
	include mime.types;
	default_type application/octet-stream;
	access_log /var/log/nginx/access.log;
	sendfile on;
	keepalive_timeout 65;
	
	server {
		listen 80;
		server_name auto_test_platform;
		
		location /static/ {
			expires 30d;
			autoindex on;
			add_header Cache-Control private;
			alias /static/;
		}
		location / {
			proxy_pass http://auto_test_platform-web:8000;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header Host $host;
			proxy_redirect off;
		}
	}
}

准备主docker-compose配置文件

该文件放在 /opt/vhosts/auto-test-plt-project  和项目包、logs等文件夹同级

version: '3'
services:
  db:   
    # ★注意:该镜像默认已经包含CONVERT_TZ所需的时区数据,不需要再从官网下载导入
    image: mysql
    container_name: mysql-8
    command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --innodb_buffer_pool_size=512M
    restart: always
    ports:
    - 3307:3306
    volumes:
    - ./mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 
      MYSQL_DATABASE: auto_test_plt
      MYSQL_USER: auto_test_plt
      MYSQL_PASSWORD: 
      # ★注意:小心在docker-compose yml中$字面量必须用$$代替,尽量避免在密码中使用$
    networks:
    - default

  phpmyadmin:
    image: phpmyadmin
    container_name: phpmyadmin
    depends_on:
      - db
    restart: always
    ports:
      - 8080:80
    environment:
      - PMA_HOST=mysql-8
      - PMA_PORT=3307
      - UPLOAD_LIMIT=20M
    networks:
      - default

  rabbitmq:
    image: rabbitmq:management
    container_name: rabbitmq-common
    user: root:root
    # ★注意:先建立目录
    volumes:
      - ./rabbitmq-data/:/var/lib/rabbitmq/
      - ./logs/rabbitmq/:/var/log/rabbitmq/
    restart: always
    ports:
      - 5672:5672
      - 15672:15672
    environment:
      - RABBITMQ_DEFAULT_USER=rabbit
      - RABBITMQ_DEFAULT_PASS=
    networks:
      - default
    command: /bin/sh -c "mkdir -p ./rabbitmq-data && chmod 777 ./rabbitmq-data && mkdir -p ./logs/rabbitmq && chmod 777 ./logs/rabbitmq && rabbitmq-server"

  auto_test_plt:
    # ★注意:先git clone源码然后构建镜像 docker build -t auto_test_platform:v1.0.0 .
    image: auto_test_platform:v1.0.0
    container_name: auto_test_platform-web
    depends_on:
      - db
    working_dir: /app
    # ★注意:先建立目录
    volumes:
      - ./django-automatic-test-platform:/app
      - ./logs/django:/var/log/django
    expose:
      - 8000
    networks:
      - default

  # 注意worker和beat的日志级别,稳定投产之后就不要用info了
  celery_worker:
    image: auto_test_platform:v1.0.0
    container_name: auto_test_platform-celery_worker
    depends_on:
      - auto_test_plt
      - rabbitmq
    working_dir: /app
    # ★注意:先建立目录
    volumes:
      - ./django-automatic-test-platform:/app
      - ./logs/worker:/var/log/worker
    entrypoint: celery -A djangoProject1 worker -l info -f /var/log/worker/celery-worker.log
    networks:
      - default

  celery_beat:
    image: auto_test_platform:v1.0.0
    container_name: auto_test_platform-celery_beat
    depends_on:
    - auto_test_plt
    - rabbitmq
    working_dir: /app
    # ★注意:先建立目录
    volumes:
      - ./django-automatic-test-platform:/app
      - ./logs/beat:/var/log/beat
    entrypoint: celery -A djangoProject1 beat -l info -f /var/log/beat/celery-beat.log
    networks:
      - default

  celery_flower:
    image: auto_test_platform:v1.0.0
    container_name: auto_test_platform-celery_flower
    depends_on:
      - auto_test_plt
      - rabbitmq
    working_dir: /app
    ports:
      - 5555:5555
    volumes:
      - ./django-automatic-test-platform:/app
      - ./logs/flower:/var/log/flower
    entrypoint: celery -A djangoProject1 flower --port=5555 --broker_api=http://rabbit:password@ip地址:15672/api/
    networks:
      - default

  nginx:
    image: nginx:latest
    container_name: auto_test_platform-nginx
    depends_on:
      - auto_test_plt
    # ★注意:先建立目录,复制nginx.conf
    volumes:
      - ./django-automatic-test-platform/static:/static
      - ../nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./logs/nginx:/var/log/nginx
    ports:
      - 80:80
    networks:
     - default 

networks:
  default:
    driver: bridge

启动docker-compose stack

docker-compose up -d

验证各项服务是否正常

检查各个容器的日志输出,有无明显警告和错误。
验证 MySQL phpmyadmin :在 phpmyadmin Web 页面使用预定的用户名密码登录 MySQL
验证 RabbitMQ
验证 auto_test_platform Web celery worker celery beat flower nginx

 RabbitMQ创建vhost  

登录RabbitMQ管理端,创建vhost并授权给rabbit用户

 

beam.smp频繁占用过多系统硬件资源(2c4g:cpu:90%~30%波动,内存:有时占满);可以在rabbitmq.conf中减少硬件资源的分配,或者直接停掉rabbitmq服务,需要时在启动

执行迁移创建数据库表

进入 auto_test_plt 容器 console ,执行以下命令:
python manage.py migrate
python managy.py createsuperuser    # 创建管理员

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值