隐藏页面特效

nginx+uwsgi+django+virtualenv+supervisor发布web服务器

1|01.uWSGI命令学习与使用


1|11.1使用uWSGI启动图书管理系统项目,支持多进程


1|21.2使用pip安装uwsgi模块


pip3 install uwsgi

1|31.3uwsgi的hello world测试


1.3.1创建文件vim /opt/testuwsgi.py 写入以下内容

cd /opt/ vim wsgitest.py # 写入下面内容 def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"]

1.3.2使用uwsgi命令启动此文件

uwsgi --http :9000 --file testuwsgi.py

在浏览器通过IP加端口进行访问

http://你自己服务器的ip:9000/ 即可看到浏览器上打印的内容

2|01.4配置uwsgi.ini文件


在django项目根目录下(manage.py同级目录)创建这个文件

[uwsgi] #使用nginx连接时使用,Django程序所在服务器地址 # socket=0.0.0.0:9000 #直接做web服务器使用,Django程序所在服务器地址 http=0.0.0.0:9000 #项目目录 chdir=/opt/django_zuoye2 #项目中wsgi.py文件的目录,相对路径,相对于上面的项目目录 wsgi-file=django_zuoye2/wsgi.py # 进程数 processes=1 # 线程数 threads=2 # uwsgi服务器的角色 master=True # 存放进程编号的文件 pidfile=uwsgi.pid # 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的 # 如果启用了supervisor工具,就将此行注释 daemonize=uwsgi.log # 指定依赖的虚拟环境 virtualenv=/root/Envs/book_manage_env

注意: 目前暂时先用http,如果使用nginx的话,就需要注释掉http,启用socket

3|01.5使用uwsgi命令启动django程序


uwsgi --ini /opt/django_zuoye2/uwsgi.ini

前端访问:http://你自己服务器的ip:9000/book_list/

会发现没有样式,因为uwsgi不能处理静态文件,下面我们就需要用到nginx

4|01.6 uwsgi启动后无法访问的问题解决


修改项目里面的wsgi.py文件,将settings的配置指向dev.py

vim /opt/django_zuoye2/django_zuoye2/wsgi.py

修改配置文件

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_zuoye2.settings')

5|01.7uwsgi不能处理静态文件


wsgi本身是支持高并发,多进程的功能,这是它的优点 缺点: 不能处理静态文件

6|01.8收集django的静态文件


由于uwsgi对静态文件的处理很差,然而nginx处理静态文件是一把手,所以我们的项目部署还需要结合nginx来使用

6|11.8.1设置django的静态文件目录并收集, 打开mysite/settings.py, 加入这一项配置


STATIC_ROOT='/opt/django_zuoye2/static' # 在STATIC_URL = '/static/'配置上面加这一行 STATIC_URL = '/static/' STATICFILES_DIRS=[ os.path.join(BASE_DIR,"static"), ]

那么,上述的参数STATIC_ROOT用在哪?看下面

6|21.8.2通过python3 manage.py collectstatic 收集所有你使用的静态文件保存到STATIC_ROOT


python manage.py collectstatic # STATIC_ROOT 文件夹 是用来将所有STATICFILES_DIRS中所有文件夹中的文件,以及各app中static中的文件都复制过来 # 把这些文件放到一起是为了用nginx等部署的时候更方便

6|31.8.3查看django的静态文件收集目录


ls /opt/django_zuoye2/static

7|01.9完成nginx的安装并配置nginx


1.安装nginx需要的依赖库yum install -y gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 1.下载源码包 wget -c https://nginx.org/download/nginx-1.16.0.tar.gz 2.解压缩源码 tar -zxvf nginx-1.16.0.tar.gz 3.配置,编译安装 开启nginx状态监测功能 cd /opt/nginx-1.16.0/ ./configure --prefix=/opt/nginx116/ --with-http_ssl_module --with-http_stub_status_module make && make install

7|11.9.1nginx.conf配置文件详情


配置之前,需要将项目目录下的uwsgi.ini中的文件socket注释释放出来,同时将http注释掉

socket=0.0.0.0:9000 #http=0.0.0.0:9000

启动

uwsgi uwsgi.ini

修改 /opt/nginx116/conf/nginx.conf文件

server { listen 80; server_name 192.168.222.127; #目前在本地,后续有域名直接换成你自己的域名即可 #charset koi8-r; #access_log logs/host.access.log main; location / { include uwsgi_params; uwsgi_pass 0.0.0.0:9000; } location /static { root /opt/django_zuoye2; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }

虚拟主机: 用于接受用户发起的80端口的请求,反向代理转发给9000的uwsgi应用, 同时处理后端的静态文件static

8|02测试uwsgi与nginx


测试手动启动uwsgi与nginx,能够保证正常访问即可

8|12.1


cd /opt/django_zuoye2/ uwsgi uwsgi.ini

8|22.2平滑重启nginx


/opt/nginx116/sbin/nginx -s reload

8|32.2项目访问不了的解决思路


1 先关闭nginx, 再关闭uwsgi,直接使用python manage.py runserver命令启动django项目 2 关闭刚才启动的django,使用uwsgi将项目跑起来, 使用9000端口访问,确认是否正常 3 注释掉uwsgi配置文件中的http,启用socket,再启动uwsgi,再启动nginx,再进行访问

9|03.supervisor工具的安装与使用


9|13.1supervisor的概念


官网文档http://supervisord.org/installing.html

supervisor 是基于 python 的任务管理工具,用来自动运行各种后台任务,当然你也能直接利用 nohup 命令使任务自动后台运行,但如果要重启任务,每次都自己手动 kill 掉任务进程,这样很繁琐,而且一旦程序错误导致进程退出的话,系统也无法自动重载任务。

9|23.2安装


easy_install supervisor # 这个是python2下面的安装模块命令 pip install Supervisor #python3安装 如果easy_install命令无法使用的话,就安装一下python-setuptools工具即可 yum install python-setuptools

9|33.3使用命令生成supervisor配置文件


echo_supervisord_conf > /etc/supervisord.conf

9|43.4修改配置文件/etc/supervisord.conf


在文件末尾添加如下配置:

[program:book_manage] # 名字随便起 command=/root/Envs/book_manage_env/bin/uwsgi /opt/django_zuoye2/uwsgi.ini stopasgroup=true killasgroup=true # 如果发现关闭supervisor进程后,结束uwsgi进程无效,就需要加上这两个参数

9|53.5启动supervisor工具


supervisord -c /etc/supervisord.conf

9|63.6查看supervisor的状态


supervisorctl 如果是FATAL说明没有启动 需要输入命令 start django_zuoye2 # 当前只有一个,指定名称就行


启动后报错,原因是uwsgi是后台启动,所以我们需要把后台配置的启动关掉

cd /opt/django_zuoye2/ vim uwsgi.ini #daemonize=uwsgi.log 将这行代码注释掉

此时我们再查看下uwsgi的状态,确定了没有启动,我们再来启动supervisor

ps -ef | grep uwsgi supervisorctl #进入supervisor start all # 启动 当然也可以直接不进入在外面直接使用命令 supervisorctl stop all #停止 supervisorctl start all #开启 # 此时再查看下uwsgi的进程,确定是运行起来了 ps -ef | grep uwsgi # 测试一下,杀死uwsgi的进程,kill -9 pid,无论你杀多少次,都仍然还会自动在后台启动,说明就是没有问题啦 # 再去浏览器访问,发现仍然是可以访问的,说明就没有问题了。

supervisor交互模式中基本操作命令

start 进程名 # 启动进程 stop 进程名 # 停止进程 start all # 启动所有进程 stop all # 启动所有进程

9|73.7 supervisor启动命令参数


# 任务管理命令如下:有两种,一个是参数形式, 一个是交互式 # 方式1参数形式 supervisord -c /etc/supervisor.conf stop/start/restart all supervisord -c /etc/supervisor.conf start qishi8 # 方式2交互式形式 supervisord -c /etc/supervisor.conf #进入后启动 start all

9|83.8重新加载supervisor(了解即可)


一、添加好配置文件后 二、更新新的配置到supervisord supervisorctl update 三、重新启动配置中的所有程序 supervisorctl reload 四、启动某个进程(program_name=你配置中写的程序名称) supervisorctl start program_name 五、查看正在守候的进程 supervisorctl 六、停止某一进程 (program_name=你配置中写的程序名称) supervisorctl stop program_name 七、重启某一进程 (program_name=你配置中写的程序名称) supervisorctl restart program_name 八、停止全部进程 supervisorctl stop all 注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。

__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/13912473.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(112)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示