博客项目(三):配置开发环境、celery、Nginx配置

一、配置开发环境

1.1 新配置文件

  1. 准备配置文件目录

    • 新建包,包名为settings,作为配置文件目录。
  2. 准备开发和生产环境配置

    • 在配置包 settings, 新建开发和生产环境配置文件。
  3. 准备开发环境配置内容。

    • 讲默认的配置文件settings.py 中内容拷贝至dev.py

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RC49TxkK-1634208334988)(F:\桌面\包.jpg)]

1.2 指定开发环境配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-emQbRMIu-1634208334991)(F:\桌面\配置文件.jpg)]

1.3 工程日志

1.3.1 配置工程日志

# settings/dev.py
# 日志:将运行出错时,记录在日志中,方便后续修改
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,  # 是否禁用logger,建议设置为False
    'formatters': {  # 日志格式,提供给handler使用,非必须,如果不设置格式,默认只会打印消息体
        'verbose': {  # 格式名称
            # INFO 2018-04-25 15:43:27,586 views 8756 123145350217728 这是一个日志
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            # INFO  这是一个日志
            'format': '%(levelname)s %(message)s'
        },
        'standard': {
            # 2018-04-25 16:40:00,195 [Thread-7:123145575223296] [myapp.log:282] [views:user_query_json_get] [INFO]-
            # 这是一个日志
            'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'
        },
    },
    'filters': {  # 过滤器,提供给handler使用,非必须
        'require_debug_true': {  # 要求DEBUG=True时才打印日志
            '()': 'django.utils.log.RequireDebugTrue',
        },

    },
    'handlers': {  # 处理器,设置日志记录方式,必须
        'console': {  # 处理器名称
            'level': 'INFO',  # 设置级别
            'filters': ['require_debug_true'],  # 设置过滤器,多个用逗号分割
            'class': 'logging.StreamHandler',  # 处理器,这里是控制台打印
            'formatter': 'verbose'  # 设置日志格式
        },
        'file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',  # 记录到文件
            'filename': os.path.join(os.path.dirname(BASE_DIR), 'logs/dadablog.log'),
            'formatter': 'verbose'
        },
    },
    'loggers': {  # 日志记录器
        'dadablog': {
            'handlers': ['console',"file"],
            'propagate': True,
            'level': "INFO",  # 只有设置DEBUG = True时,该配置才会打印sql信息
        }
    },
}

1.3.2 准备日志文件目录

创建 logs文件夹

1.3.3 日志记录器的使用

# views.py

import logging # python 自带的

# 创建日志记录器
logger = logging.getLogger('dadablog') # settings.py 中最后的日志器
# 输出日志
logger.debug('测试logging模块debug')
logger.info('测试logging模块info')
logger.error('测试logging模块error')

1.3.4 Git记录工程日志

提示:

  • 开发过程中,产生的日志信息不需要代码仓库进行管理和记录。

配置完成后:运行程序,测试结果。

1.3.5 知识要点

  1. 本项目最低日志等级设置为:INFO

  2. 创建日志记录器的方式:

    logger = logging.getLogger('django')
    
  3. 日志记录器的使用:

    logger.info('测试logging模块info')
    
  4. 在日志loggers选项中可以指定多个日志记录器

1.4 创建虚拟环境

  • 创建项目的虚拟环境

1.5 数据库配置

# 1. 创建数据库

# 2. 新建mysql 用户

# 3. 授权 新用户 访问 dadablog 数据库

# 4. 授权结束后刷新权限

# 5. 更改项目 mysql 配置

二、Celery

2.1 定义

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统
它是一个专注于实时处理的任务队列,同时也支持任务调度

中文官网:http://docs.jinkan.org/docs/celery/

在线安装 sudo pip3 install -U Celery
离线安装

tar xvfz celery-0.0.0.tar.gz
cd celery-0.0.0
python3 setup.py build
python3 setup.py install

名词解释:
broker 消息传输的中间件,生产者一旦有消息发送,将发至broker;【RQ,redis】
backend 用于存储消息/任务结果,如果需要跟踪和查询任务状态,则需添加要配置相关
worker - 工作者 - 消费/执行broker中消息/任务的进程

请添加图片描述

2.2 使用Celery

2.2.1 创建worker(消费者)

#创建 tasks.py 文件

from celery import Celery
#初始化celery, 指定broker
app = Celery('guoxiaonao', broker='redis://:password@127.0.0.1:6379/1')

#若redis无密码,password可省略
#app = Celery('guoxiaonao', broker='redis://:@127.0.0.1:6379/1')

# 创建任务函数
@app.task
def task_test():
    print("task is running....") 
    
#Ubuntu 终端中, tasks.py文件同级目录下 执行
celery -A tasks worker --loglevel=info
#执行后终端显示如下,证明成功!

请添加图片描述

2.2.2 创建生产者 - 推送任务

​ 在tasks.py文件的同级目录进入 ipython3 执行 如下代码

from tasks import task_test
task_test.delay()
#执行后,worker终端中现如如下

请添加图片描述

2.2.3 存储执行结果

​ Celery提供存储任务执行结果的方案,需借助 redis 或 mysql 或Memcached 等

​ 详情可见 http://docs.celeryproject.org/en/latest/reference/celery.result.html#module-celery.result

#创建 tasks_result.py
from celery import Celery
app = Celery('demo',
             broker='redis://@127.0.0.1:6379/1',
             backend='redis://@127.0.0.1:6379/2',
             )

# 创建任务函数
@app.task
def task_test(a, b):
    print("task is running")
    return a + b

tasks_result.py 同级目录终端中-启动celery worker

celery -A tasks_result worker --loglevel=info

请添加图片描述

在相同目录下 打开终端创建生产者 - 同【上步】;执行成功后,可调用如下方法取得执行结果

from tasks_result import task_test
s = task_test.delay(10,100)
s.result

2.3 Django + Celery

1,创建项目+应用

#常规命令
django-admin startproject test_celery
python manage.py startapp user

2,创建celery.py

在settings.py同级目录下 创建 celery.py文件

文件内容如下:

from celery import Celery
from django.conf import settings
import os

# 为celery设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'test_celery.settings')

# 创建应用
app = Celery("test_celery")
# 配置应用
app.conf.update(BROKER_URL='redis://:@127.0.0.1:6379/1',)# 配置broker   
app.autodiscover_tasks(settings.INSTALLED_APPS) # 设置app自动加载任务

3, 在应用模块【user目录下】创建tasks.py文件

文件内容如下:

from test_celery.celery import app
import time

@app.task
def task_test():    
	print("task begin....")    
	time.sleep(10)    
	print("task over....")

4, 应用视图编写;内容如下:

from django.http import HttpResponse
from .tasks import task_test
import datetime

def test_celery(request):    
	task_test.delay()	
	now = datetime.datetime.now()    
	html = "return at %s"%(now.strftime('%H:%M:%S'))    
	return HttpResponse(html)

5, 分布式路由下添加 test_celery函数对应路由,此过程略

6, 启动django python3 manage.py runserver

7, 创建 celery worker

​ 在项目路径下,即test_celery 下 执行如下

celery -A test_celery worker -l info

8,浏览器中执行对应url

请添加图片描述

worker终端中显示
请添加图片描述

2.4 生产环境 启动

1,并发模式切换

​ 默认并发采用 - prefork

​ 推荐采用 - gevent 模式 - 协程模式

celery -A proj worker -P gevent -c 1000
# P POOL Pool implementation: 支持 perfork or eventlet or gevent
# C CONCURRENCY 并发数  
2,后台启动命令
nohup celery -A proj worker -P gevent -c 1000 > celery.log 2>&1 &

1,nohup: 忽略所有挂断(SIGHUP)信号
2,标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
	标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。
	标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。
3&符号:代表将命令在后台执行

华为云-ubuntu18.04 部署指南

购买地址

https://www.huaweicloud.com/pricing.html?shareListId=Tv8u38og8Dv8NQaBO8#/ecs

SSH-工具-FinalShell下载

http://www.hostbuf.com/t/988.html

apt更换国内源

mv /etc/apt/sources.list /etc/apt/sourses.list.bak
cd /etc/apt/
vim sources.list

#输入如下内容后保存退出

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse


最后执行 apt-get update 更新最新源

系统组件安装

nginx 1.14.0

sudo apt-get install nginx
安装完毕后 执行 nginx -v 

mysql-server 5.7 安装

apt-cache madison mysql-server - 查看mysql在线安装版本
sudo apt-get install mysql-server
安装完毕后 查看 cat /etc/mysql/debian.cnf 
根据文件中的用户名和密码进入mysql

修改root用户密码
1)更新密码和验证方式
   update mysql.user set authentication_string=password('123456'),plugin="mysql_native_password"  where user='root' and Host ='localhost';
2)刷新权限 
   flush privileges;

redis 4.0.9 安装

1,下载安装包
wget http://download.redis.io/releases/redis-4.0.9.tar.gz

2,解压
tar zxvf redis-4.0.9.tar.gz

3,安装
cd redis-4.0.9
make
make install

4,修改配置文件
cd redis-4.0.9
vim redis.conf
配置1 - 后台启动
	daemonize  yes
配置2 - 日志
	logfile "/var/log/redis/redis.log"
注意:日志路径需要提前创建 终端 mkdir /var/log/redis

5,复制配置文件
mkdir /etc/redis
cp redis.conf /etc/redis/redis.conf
	
6,配置启动脚本
cp redis-4.0.9/utils/redis_init_script   /etc/init.d/redis-server

Python环境相关

pip3安装

sudo apt-get install python3-pip

mkdir ~/.pip
vim ~/.pip/pip.conf
# 然后将下面这两行复制进去
[global]
index-url = https://mirrors.aliyun.com/pypi/simple

国内其他pip源

    清华:https://pypi.tuna.tsinghua.edu.cn/simple
    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
    华中理工大学:http://pypi.hustunique.com/
    山东理工大学:http://pypi.sdutlinux.org/
    豆瓣:http://pypi.douban.com/simple/

第三方py库安装

pip3 install django==2.2.12
pip3 install django-cors-headers==3.0.2
pip3 install django-redis==4.10.0
pip3 install PyMySQL==0.9.3
pip3 install celery==4.3.0
pip3 install PyJWT==1.7.1
pip3 install uWSGI==2.0.18
pip3 install python-alipay-sdk==2.0.1
pip3 install Pillow
pip3 install gevent
pip3 install psutil

#mysqlclient安装
sudo apt-get install default-libmysqlclient-dev
pip3 install mysqlclient

前端部署

前端html和静态文件直接交由 nginx 处理

1)修改nginx启动 用户

vim /etc/nginx/nginx.conf

user root;  #修改nginx启动用户

2)修改nginx 80的默认配置
vim /etc/nginx/sites-enabled/default

root /root/blog_client/templates;   # 指定全局静态路径地址

location /static {
        root /root/blog_client;
}

location / {  # 路由设定
		rewrite ^/(\w+)$  /$1.html break;
 		rewrite ^/(\w+)/info$  /about.html break;
 		rewrite ^/(\w+)/change_info$  /change_info.html break;
 		rewrite ^/(\w+)/topic/release$  /release.html break;
 		rewrite ^/(\w+)/topics$  /list.html break;
 		rewrite ^/(\w+)/topics/detail/(\d+)$  /detail.html break;
 		try_files $uri $uri/ =404;
}

注意:前端页面里的ajax 的url需要改为公网地址

后端部署

​ 1) 可先以python3 manage.py runserver 0.0.0.0:8000 进行测试,保证前端没问题后,配置后端服务
​ 注意:settings.py中 跨域白名单需开启,allowed_host需要开启,debug模式关闭
​ 2)uwsgi配置添加

[uwsgi]
#http=0.0.0.0:8002
socket=127.0.0.1:8000

# 项目当前工作目录
chdir=/root/ddblog

# 项目中wsgi.py文件的目录,相对于当前工作目录
wsgi-file=ddblog/wsgi.py

# 进程个数process=1# 每个进程的线程个数
threads=2

#服务的pid记录文件
pidfile=uwsgi.pid

#服务的日志文件位置
daemonize=uwsgi.log

​ 启动uwsgi

进入到项目settings.py所在目录执行如下命令

命令: uwsgi --ini uwsgi.ini

​ 3)nginx配置添加

​ 新建nginx日志目录 ddblog

​ mkdir -p /var/log/ddblog/

​ cd /etc/nginx/conf.d

​ touch ddblog.conf


server { 
       listen   8001;        
       server_name _;        
       access_log /var/log/ddblog/access.log;       
       error_log /var/log/ddblog/error.log;     
          
	  location / { 
		   	include        uwsgi_params;                
		  	uwsgi_pass     127.0.0.1:8002;        
	 }     
		       		
	  location /static {               
	  		root /root/blog_static;       
	  }    	
	  		 
	location /media {    		 
			 root /root/ddblog;   		
	}
}

修改前端ajax中的url - 如下命令慎用

sed -i "s/http:\/\/127.0.0.1:8000/http:\/\/122.9.35.178:8001/g" `grep http://127.0.0.1 -rl templates`

三、nginx

3.1 nginx配置

在这里插入图片描述
在这里插入图片描述

3.2 校验nginx配置

在这里插入图片描述

3.3 重启nginx服务

在这里插入图片描述

四、创建目录

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值