详细拆分如何在ubuntu 上使用 nginx + uwsgi socket方式部署 Django 项目

简介: 详细拆分如何在ubuntu 上使用 nginx + uwsgi socket方式部署 Django 项目

前言
相比较学习Django来说,部署应该是在整个环节中比较难的一项,特别是一些自学者,对从来没有接触过服务器,这一块我相信劝退了很多人!当初我学习的时候也是如此!
今天辣条君给你们详细拆解分析,让你们少走弯路少填坑~

目录
前言
1 在开发服务器上测试
2 安装 nginx 和 需要的包
3 使用 uwsgi 部署
4 使用supervisor来管理进程
5 配置 Nginx
1 在开发服务器上测试
运行开发服务器测试,确保开发服务器下能正常打开网站。

cd 项目目录
python manage.py runserver
1
2
2 安装 nginx 和 需要的包
sudo apt-get install python-dev nginx
1
3 使用 uwsgi 部署
安装 uwsgi

sudo pip install uwsgi --upgrade
1
使用 uwsgi 运行项目

uwsgi --http :8001 --chdir /path/to/project --home=/path/to/env --module project.wsgi
1
这样就可以运行了,–home 指定virtualenv 路径,如果没有可以去掉。project.wsgi 指的是 project/wsgi.py 文件

注意:如果提示端口被占用了,我们可以先查出端口对应的进程号,然后杀掉进程

lsof -i :8001 # 根据端口后进行查询 查询结果中的PID就是进程号,如果相关进程有多个,那就杀多个
1
sudo kill -9 进程号 #根据进程号杀死进程
1
4 使用supervisor来管理进程
安装 supervisor 软件包

(sudo) pip install supervisor
1
生成 supervisor 默认配置文件,比如我们放在 /etc/supervisord.conf 路径中:

(sudo) echo_supervisord_conf > /etc/supervisord.conf
1
打开 supervisor.conf 在最底部添加(每一行前面不要有空格,防止报错):

[program:fmxm]
command=/path/to/uwsgi --http :8003 --chdir /path/to/fuxm --module fmxm.wsgi
directory=/path/to/fmxm
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true
1
2
3
4
5
6
7
command 中写上对应的命令,这样,就可以用 supervisor 来管理了。

启动 supervisor

(sudo) supervisord -c /etc/supervisord.conf
1
重启项目:

(sudo) supervisorctl -c /etc/supervisord.conf restart fmxm
1
启动,停止,或重启 supervisor 管理的某个程序 或 所有程序:

(sudo) supervisorctl -c /etc/supervisord.conf [start|stop|restart] [program-name|all]
1
以 uwsgi 为例,上面这样使用一行命令太长了,我们使用 ini 配置文件来搞定,比如项目在 /home/tu/fmxm 这个位置,

在其中新建一个 uwsgi.ini 全路径为 /home/tu/fmxm/uwsgi.ini

[uwsgi]
socket = /home/tu/fmxm/fmxm.sock
chdir = /home/tu/fmxm
wsgi-file = fmxm/wsgi.py
touch-reload = /home/tu/fmxm/reload

processes = 2
threads = 4

chmod-socket = 664
chown-socket = tu:www-data

vacuum = true
1
2
3
4
5
6
7
8
9
10
11
12
13
注意上面的 /home/tu/fmxm/fmxm.sock ,一会儿我们把它和 nginx 关联起来。

在项目上新建一个空白的 reload 文件,只要 touch 一下这个文件(touch reload) 项目就会重启。

注意:不建议把 sock 文件放在 /tmp 下,比如 /tmp/xxx.sock (不建议)!有
些系统的临时文件是 namespaced 的,进程只能看到自己的临时文件,导致 nginx 找不到 uwsgi 的 socket 文件,访问时显示502,nginx 的 access log 中显示 unix: /tmp/xxx.sock failed (2: No such file or directory),所以部署的时候建议用其它目录来放 socket 文件,比如放在运行nginx用户目录中,也可以专门弄一个目录来存放 sock 文件,比如 /tmp2/

sudo mkdir -p /tmp2/ && sudo chmod 777 /tmp2/ #然后可以用 /tmp2/fmxm.sock 这样的路径了
1
修改 supervisor 配置文件中的 command 一行:

[program:fmxm]
command=/path/to/uwsgi --ini /home/tu/fmxm/uwsgi.ini
directory=/path/to/fmxm
startsecs=0
1
2
3
4
然后重启一下 supervisor:

(sudo) supervisorctl -c /etc/supervisord.conf restart fmxm
或者
(sudo) supervisorctl -c /etc/supervisord.conf restart all
1
2
3
5 配置 Nginx
新建一个配置文件

sudo vim /etc/nginx/sites-available/fmxm.conf
1
写入以下内容

server {

listen      80;
server_name www.ziqiangxuetang.com;
charset     utf-8;

client_max_body_size 75M;

location /media  {
    alias /path/to/project/media;
}

location /static {
    alias /path/to/project/static;
}

location / {
    uwsgi_pass  unix:///home/tu/fmxm/fmxm.sock;
    include     /etc/nginx/uwsgi_params;
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
激活网站

sudo ln -s /etc/nginx/sites-available/fmxm.conf /etc/nginx/sites-enabled/fmxm.conf
1
测试配置语法

sudo service nginx configtest 或 /path/to/nginx -t
1
重启 nginx 服务器:

sudo service nginx reload 或 sudo service nginx restart 或 /path/to/nginx -s reload

目录
相关文章
|
2月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
1045 4
|
2月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
148 5
|
3月前
|
存储 Ubuntu 自动驾驶
运行Udacity的MPC控制项目指南(project_10)在Ubuntu 18.04环境下
以上步骤应该能够帮助您成功设置并运行Udacity MPC控制项目,在此过程中您将学习如何应用模型预测控制理论去指导车辆沿着轨迹自主驾驶,在模拟环境下测试其效果。这个过程不但涵盖了理论知识也有实践操作,对于学习自动驾驶车辆控制系统非常有帮助。
162 15
|
10月前
|
应用服务中间件 PHP nginx
今日小结通过aliyun的本地容器镜像部署我的nginx和php环境
简介: 本教程介绍如何基于 Dragonwell 的 Ubuntu 镜像创建一个运行 Nginx 的 Docker 容器。首先从阿里云容器镜像服务拉取基础镜像,然后编写 Dockerfile 确保 Nginx 作为主进程运行,并暴露 80 端口。最后,在包含 Dockerfile 的目录下构建自定义镜像并启动容器,确保 Nginx 在前台运行,避免容器启动后立即退出。通过 `docker build` 和 `docker run` 命令完成整个流程。
395 25
今日小结通过aliyun的本地容器镜像部署我的nginx和php环境
|
7月前
|
应用服务中间件 Linux 网络安全
技术指南:如何把docsify项目部署到基于CentOS系统的Nginx中。
总结 与其他部署方法相比,将docsify项目部署到基于CentOS系统的Nginx中比较简单。以上步骤应当帮助你在不花费太多时间的情况下,将你的项目顺利部署到Nginx中。迈出第一步,开始部署你的docsify项目吧!
324 14
|
网络协议 测试技术 网络安全
Python编程-Socket网络编程
Python编程-Socket网络编程
167 0
|
网络协议 开发者 Python
深度探索Python Socket编程:从理论到实践,进阶篇带你领略网络编程的魅力!
【7月更文挑战第25天】在网络编程中, Python Socket编程因灵活性强而广受青睐。本文采用问答形式深入探讨其进阶技巧。**问题一**: Socket编程基于TCP/IP,通过创建Socket对象实现通信,支持客户端和服务器间的数据交换。**问题二**: 提升并发处理能力的方法包括多线程(适用于I/O密集型任务)、多进程(绕过GIL限制)和异步IO(asyncio)。**问题三**: 提供了一个使用asyncio库实现的异步Socket服务器示例,展示如何接收及响应客户端消息。通过这些内容,希望能激发读者对网络编程的兴趣并引导进一步探索。
221 4
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
【7月更文挑战第25天】在网络应用蓬勃发展的数字时代,Python凭借其简洁的语法和强大的库支持成为开发高效应用的首选。本文通过实时聊天室案例,介绍了Python Socket编程的基础与进阶技巧,包括服务器与客户端的建立、数据交换等基础篇内容,以及使用多线程和异步IO提升性能的进阶篇。基础示例展示了服务器端监听连接请求、接收转发消息,客户端连接服务器并收发消息的过程。进阶部分讨论了如何利用Python的`threading`模块和`asyncio`库来处理多客户端连接,提高应用的并发处理能力和响应速度。掌握这些技能,能使开发者在网络编程领域更加游刃有余,构建出高性能的应用程序。
154 3
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
【7月更文挑战第26天】在网络的数字宇宙中,Python Socket编程是开启网络世界大门的钥匙。本指南将引领你从基础到实战,成为网络世界的建筑师。
224 2