1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Nginx+uwsgi+celery+supervisor部署Django前后端分离项目

Nginx+uwsgi+celery+supervisor部署Django前后端分离项目

时间:2022-12-15 17:59:18

相关推荐

Nginx+uwsgi+celery+supervisor部署Django前后端分离项目

转载

Nginx+uwsgi+celery+supervisor部署Django前后端分离项目

ljmict 0人评论 3887人阅读 -08-08 01:29:45

本实验实现了负载均衡、反向代理、动静分离,还实现了根据客户端设备user-agent进行转发,也就是移动端和PC端访问的页面不一样。

1. 项目部署逻辑图

2. 环境准备

服务器:6台VM

操作系统:CentOS7

LB、www、wap:安装Nginx

uwsgi1、uwsgi2:安装nfs-utils、Python3解释器、virtualenv

NFS:安装NFS

MRCS:安装MySQL、Redis、virtualenv

注意:这里不介绍软件的安装

Nginx安装参考:/ljmict/2150752

NFS安装参考:/ljmict/1919738

3. 负载均衡和反向代理服务器配置

在LB服务器上面配置

cat nginx.conf# 配置文件内容worker_processes 1;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;upstream static_pools {# 静态请求服务器池server 172.16.1.13:80 weight=1;}upstream meiduo {# 动态请求服务器池server 172.16.1.11:8001 weight=1;server 172.16.1.12:8001 weight=1;}upstream iphone_pools {# 移动端服务器池server 172.16.1.16:80 weight=1;}server {# 后端api服务器listen 8000;server_name api.meiduo.site;location / {include uwsgi_params;uwsgi_pass meiduo;}access_log off;}server {# 提供前端页面访问listen 80;server_name www.meiduo.site;location /xadmin {# 如果访问url为:http://www.meiduo.site/xadmin就交给meiduo池include uwsgi_params;uwsgi_pass meiduo;}location /cheditor {# 如果请求url为:http://www.meiduo.site/cheditor就交给meiduo池include uwsgi_params;uwsgi_pass meiduo;}location / {# 请求uri以/开头就交给这个location区块进行处理,例如:/staticif ($http_user_agent ~* "iphone")# 如果客户端设备user_agent为iphone,就交给iphone_pools池{proxy_pass http://iphone_pools;}#PC端访问就交给static_pools池proxy_pass http://static_pools;}access_log off;}}

启动nginx服务

/application/nginx/sbin/nginx

4. NFS服务器配置

mkdir project# 配置挂载目录cat /etc/exports# 配置内容/project 172.16.1.*(rw,sync)# 重启NFS服务systemctl restart rpcbindsystemctl restart nfs

配置完成之后把项目上传到/project目录里面

4. 配置uwsgi1和uwsgi2服务器

在uwsgi1和uwsig2服务器上操作:

# 创建虚拟环境mkvirtualenv -p python3 meiduo# 切换到meiduo虚拟环境workon mediuo# 安装uwsgi包pip install uwsgimkdir /project# 挂载NFS服务器/project目录到uwsgi服务器的/projectmount -t nfs 172.16.1.14:/project /project# 查看当前服务器挂载情况df -h# 输出文件系统 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root 36G 2.4G 33G 7% /devtmpfs 226M0 226M 0% /devtmpfs237M0 237M 0% /dev/shmtmpfs237M 8.8M 228M 4% /runtmpfs237M0 237M 0% /sys/fs/cgroup/dev/sda11014M 143M 872M 15% /boottmpfs 48M0 48M 0% /run/user/0172.16.1.14:/project17G 1.8G 16G 11% /project# 安装项目中用到的pip包cd /project/meiduo/meiduo_mallpip install -r requirements.txt # 这个文件是在开发环境中通过pip freeze >requirements.txt生成的cd /root# 创建uwsgi.ini文件touch uwsgi.ini

uwsgi1配置

[uwsgi]#使用nginx连接时使用,Django程序所在服务器地址socket=172.16.1.11:8001#直接做web服务器使用,Django程序所在服务器地址#http=172.16.1.11:8000#项目目录chdir=/project/meiduo/meiduo_mall#项目中wsgi.py文件的目录,相对于项目目录wsgi-file=meiduo_mall/wsgi.py# 进程数processes=4# 线程数threads=2# uwsgi服务器的角色master=True# 存放进程编号的文件pidfile=uwsgi.pid# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的daemonize=uwsgi.log# 指定依赖的虚拟环境virtualenv=/root/.virtualenvs/meiduo

uwsgi2配置

[uwsgi]#使用nginx连接时使用,Django程序所在服务器地址socket=172.16.1.12:8001#直接做web服务器使用,Django程序所在服务器地址#http=172.16.1.12:8000#项目目录chdir=/project/meiduo/meiduo_mall#项目中wsgi.py文件的目录,相对于项目目录wsgi-file=meiduo_mall/wsgi.py# 进程数processes=4# 线程数threads=2# uwsgi服务器的角色master=True# 存放进程编号的文件pidfile=uwsgi.pid# 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的daemonize=uwsgi.log# 指定依赖的虚拟环境virtualenv=/root/.virtualenvs/meiduo

uwsgi启动命令

# 启动uwsgi服务器uwsgi --ini uwsgi.ini# 停止uwsgi服务器uwsgi stop uwsgi.ini

5. www服务器

处理PC端静态文件请求

cat nginx.conf# 配置文件worker_processes 1;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';sendfile on;keepalive_timeout 65;server {listen 80;server_name www.meiduo.site;location / {root html/front_end_pc; # 相对路径,把前端文件夹放到Nginx安装路径下html目录下,我这里的路径是/application/nginx/htmlindex index.html index.htm;}access_log logs/access_www.log main;}}

启动nginx服务

/application/nginx/sbin/nginx

6. wap服务器

处理移动端静态文件请求

cd /application/nginx/html# 因为没有移动端前端页面,所以这里简单创建了一个测试页面mkdir wapecho "mobile_page" > wap/index.html

Nginx配置

cat nginx.confworker_processes 1;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';sendfile on;keepalive_timeout 65;server {listen 80;server_name www.meiduo.site;location / {root html/wap;# 相对路径,把前端文件夹放到Nginx安装路径下html目录下,我这里的路径是/application/nginx/htmlindex index.html index.htm;}access_log logs/access_www.log main;}}

启动nginx服务

/application/nginx/sbin/nginx

7. MRCS服务器(资源有限,所以把这些东西安装在一台服务器上面)

mkdir /project# 挂载NFS服务器/project目录到uwsgi服务器的/projectmount -t nfs 172.16.1.14:/project /project# 查看当前服务器挂载情况df -h# 输出文件系统 容量 已用 可用 已用% 挂载点/dev/mapper/centos-root 36G 2.4G 33G 7% /devtmpfs 226M0 226M 0% /devtmpfs237M0 237M 0% /dev/shmtmpfs237M 8.8M 228M 4% /runtmpfs237M0 237M 0% /sys/fs/cgroup/dev/sda11014M 143M 872M 15% /boottmpfs 48M0 48M 0% /run/user/0172.16.1.14:/project17G 1.8G 16G 11% /project# 创建虚拟环境mkvirtualenv -p python3 meiduo# 切换到meiduo虚拟环境workon mediuo# 安装项目中用到的pip包cd /project/meiduo/meiduo_mallpip install -r requirements.txt # 这个文件是在开发环境中通过pip freeze >requirements.txt生成的

配置supervisor

mkvirtualenv -p python2 supervisor# 这里创建python2的虚拟环境,因为supervisor不支持python3workon supervisorpip install supervisor# 生成supervisor配置文件echo_supervisord_conf > /etc/supervisord.conf# 创建日志目录mkdir /var/log/celery

创建celery.ini文件

cat /etc/celery.ini# 配置内容[program:celery]# celery命令的绝对路径command=/root/.virtualenvs/meiduo/bin/celery -A celery_tasks.main worker -l info# 项目路径directory=/project/meiduo/meiduo_mall# 日志文件路径stdout_logfile=/var/log/celery/celery.log# 自动重启autorestart=true# 如果设置为true,进程则会把标准错误输出到supervisord后台的标准输出文件描述符redirect_stderr=true

修改/etc/supervisord.conf文件

[include]files = celery.ini

supervisor命令

# 以守护进程的形式运行一组应用程序。supervisord# 更新新的配置到supervisord supervisorctl update# 查看正在守护的进程supervisorctl

8. 访问测试

在hosts文件里面添加本地解析

windows系统hosts文件路径:系统盘\windows\system32\drivers\etc

Linux系统和MAC系统hosts文件路径:/etc/hosts

172.16.1.10 www.meiduo.site api.meiduo.site

PC端访问效果

移动端访问效果

这里其他功能测试就不演示了。

©著作权归作者所有:来自51CTO博客作者ljmict的原创作品,如需转载,请注明出处,否则将追究法律责任 Linux Django NginxPython

2

分享

微博 QQ 微信

收藏

上一篇:Docker安装和基本操作 下一篇:Go语言入门到放弃-变量 ljmict

16篇文章,5W+人气,0粉丝

Ctrl+Enter发布

发布

取消

推荐专栏

最近更新 网工2.0晋级攻略 ——零基础入门Python/Ansible

网络工程师2.0进阶指南

共30章|姜汁啤酒

¥51.00 919人订阅
订阅最近更新 全局视角看大型园区网

路由交换+安全+无线+优化+运维

共40章|永恒2222

¥51.00 471人订阅
订阅 带你玩转高可用

前百度高级工程师的架构高可用实战

共15章|曹林华

¥51.00 319人订阅
订阅最近更新 基于Python的DevOps实战

自动化运维开发新概念

共20章|抚琴煮酒

¥51.00 173人订阅
订阅 负载均衡高手炼成记

高并发架构之路

共15章|sery

¥51.00 292人订阅
订阅

猜你喜欢

Go语言入门到放弃-变量 Docker安装和基本操作 MySQL5.7一键安装脚本 centos6 httpd2.2详细剖析 记一次800多万XML文本文件预处理经历 Web集群之SSH批量管理 MySQL的高可用——MHA Web集群之NFS

扫一扫,领取大礼包

2

1

分享 ljmict

</div></div>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。