Nginx+UWSGI+Django 整合安装
1、Nginx+openssl安装:
一、下载依赖文件pcrenginx 1、pcre: PCRE库是一组函数,它们使用与Perl 5相同的语法和语义实现正则表达式模式匹配.PCRE具有自己的本机API,以及一组与POSIX正则表达式API对应的包装函数。 PCRE库是免费的,即使是用于构建专有软件。官网最新版本下载地址:https://sourceforge.net/projects/pcre/files/pcre/ 2、上面依赖关系软件下载存放目录(/usr/local/src)和下载链接地址 wget https://sourceforge.net/projects/pcre/files/pcre/8.42/pcre-8.42.tar.gz 3、nginx: nginx[engine x]是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP / UDP代理服务器。 官网最新下载地址:http://nginx.org/en/download.htm wget http://nginx.org/download/nginx-1.16.1.tar.gz 二、软件进行安装 需要安装的软件都下载到了/usr/local/src/目录 1、安装编译环境 yum install -y gcc gcc-c++ pcre-devel zlib zlib-devel openssl openssl-devel 2、pcre安装 cd /usr/local/src/ tar zxf pcre-8.42.tar.gz cd pcre-8.42 ./configure --prefix=/usr/local/pcre make make install 可以无视下面的warning libtool: warning: relinking 'libpcreposix.la' libtool: warning: relinking 'libpcrecpp.la' 3、nginx安装,软件存放在 /usr/local/src目录下面 1、cd /usr/local/src/ tar zxf nginx-1.16.1.tar.gz groupadd nginx useradd -g nginx nginx -s /bin/false mkdir /usr/local/nginx cd nginx-1.16.1 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_sub_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre=/usr/local/src/pcre-8.42 make make install 2、编译参数说明: 1)查看nginx 启动配置文件缺少动态文件命令 ldd $(which /usr/local/nginx/sbin/nginx) 2)如果缺少利用下面查找缺号的.so动态文件 ln -sv解决 find / -type f -name "libprofiler.so*" 查找文件是否存在 ln -sv /usr/local/lib/libprofiler.so.0.4.8 /lib64/libprofiler.so.0 ln -sv /usr/local/lib/libunwind.so.8.0.1 /lib64/libunwind.so.8 3)查看编辑了哪些nginx模块 /usr/local/nginx/sbin/nginx -V 这里利用的全路径命令/usr/local/nginx/sbin/nginx 4)nginx编辑安装参数说明 1)--prefix=/usr/local/nginx 定义安装目录,默认是/usr/local/nginx 2)--user=nginx 设置非特权用户的名称,其凭据将由工作进程使用。安装后,可以在配置文件 nginx.conf 中使用user指令更改名称 。默认用户名是nobody。 3)--group=nginx 设置其凭据将由工作进程使用的组的名称。安装后,可以在配置文件 nginx.conf 中使用user指令更改名称 。默认情况下,组名称设置为非特权用户的名称。 4)--with-http_realip_module 启用HTTP_Realip模块,用于修改客户端请求头中客户端IP地址值,一般用于反向代理中,将真实的客户端IP传送给后端的应用服务器。默认情况下不构建此模块 5)--with-http_stub_status_module 启用HTTP_Stub_Status模块,状态信息统计模块,用于返回一个Nginx状态信息统计信息页面,管理员访问这个页面可以获取Nginx的请求处理、当前连接、 等待连接等统计信息,一般用于监控Nginx的运行状态。默认情况下不构建此模块。 6)--with-http_sub_module 启用http_sub模块,这个模块是一个过滤器,用于修改响应的内容,可以将一个指定的字符串替换成另一个字符串。默认情况下不构建此模块。 7)--with-http_ssl_module 允许构建一个模块,将HTTPS协议支持添加到HTTP服务器。默认情况下不构建此模块。需要OpenSSL库来构建和运行此模块。 8)--with-http_gzip_static_module 启用http_gzip_static模块,用于将静态内容压缩成".gz"为文件扩展名的预压缩文件,并缓存在本地,在响应时会将此文件发送以替代普通文件。 运用此模块的好处就是不需要(Gzip)每次传输时都需要对文件进行处理压缩。在用于Squid+Nginx环境下,当Nginx启用(Gzip)内容传输压缩功能时, 在使用Squid3.0以前版本搭建环境时会发现,Squid返回给客户端的并不是压缩状态,这就是由于没有启用此模块导致的。默认情况下不构建此模块。 9)--with-pcre=/usr/local/src/pcre-8.38 启用PCRE库的使用。PCRE库是一个Perl库,包含Perl兼容的正则表达式。若你是源码安装的PCRE库,则需要通过此项设置PCRE库的所在目录路径。 10)--with-openssl=/usr/local/src/openssl-1.1.1d 若你是源码安装的OpenSSL库,则需要通过此项设置OpenSSL库的所在目录路径。 1、openssl: OpenSSL是一种功能强大的商用级全功能工具包,适用于传输层安全性(TLS)和安全套接字层(SSL)协议。它也是一个通用的加密库。 官方最新版本下载地址:https://www.openssl.org/source/ 2、openssl下载 wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz 3、openssl安装 cd /usr/local/src/ tar zxf openssl-1.1.1d.tar.gz cd openssl-1.1.1d ./config make make install 11)--with-zlib=/usr/local/src/zlib-1.2.11 若你是源码安装的Zlib库,则需要通过此项设置Zlib库的所在目录路径。当启用HTTP_Gzip模块的时候需要此库的支持。 1、zlib: 一个大型漂亮但又精美不引人注目的压缩库(也是免费的,不提及不受专利限制) 官网最新下载地址:https://zlib.net/ 2)zlib下载 wget https://zlib.net/zlib-1.2.11.tar.gz 3、zlib 安装 cd /usr/local/src/ tar zxf zlib-1.2.11.tar.gz cd zlib-1.2.11 ./configure make make install
2、编辑nginx启动脚本
2-1、利用/etc/init.d/nginx启动脚本
vi /etc/init.d/nginx
#!/bin/bash # nginx Startup script for the Nginx HTTP Server # chkconfig: - 85 15 # description: Nginx is a high-performance web and proxy server. # It has a lot of features, but it's not for everyone. # processname: nginx # pidfile: /var/run/nginx.pid # config: /usr/local/nginx/conf/nginx.conf nginxd=/usr/local/nginx/sbin/nginx nginx_config=/usr/local/nginx/conf/nginx.conf nginx_pid=/usr/local/nginx/logs/nginx.pid RETVAL=0 prog="nginx" # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -x $nginxd ] || exit 0 # Start nginx daemons functions. start() { if [ -e $nginx_pid ];then echo "nginx already running...." exit 1 fi echo -n $"Starting $prog: " daemon $nginxd -c ${nginx_config} RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx return $RETVAL } # Stop nginx daemons functions. stop() { echo -n $"Stopping $prog: " killproc $nginxd RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid } reload() { echo -n $"Reloading $prog: " #kill -HUP `cat ${nginx_pid}` killproc $nginxd -HUP RETVAL=$? echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) stop start ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|reload|status|help}" exit 1 esac exit $RETVAL
nginx 启动脚本添加权限
chmod 755 /etc/init.d/nginx
nginx 设置开机启动
chkconfig nginx on
2-2、systemctl 启动nginx脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | vim /lib/systemd/system/nginx .service [Unit] Description=nginx After=network.target [Service] Type=forking ExecStart= /usr/local/nginx/sbin/nginx ExecReload= /usr/local/nginx/sbin/nginx -s reload ExecStop= /usr/local/nginx/sbin/nginx -s quit PrivateTmp= true [Install] WantedBy=multi-user.target |
配置文件注释如下:
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]:服务运行参数的设置
Type=forking :后台运行的形式
ExecStart :服务的具体运行命令,“start”为启动
ExecReload :“reload”为重启
ExecStop :“stop”为停止
PrivateTmp :“True”表示给服务分配独立的临时空间
2-3、设置开机启动nginx,相关其它命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #设置开机启动 systemctl enable nginx.service #启动Nginx: systemctl start nginx.service #重新启动Nginx: systemctl restart nginx.service #停止Nginx: systemctl stop nginx.service #查看Nginx当前状态: systemctl status nginx.service |
3、Python3安装
1)Python3 下载地址:
wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tar.xz
2)环境编译
yum -y install gcc gcc-c++ 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 expat-devel
3)python 安装
解压tar.xz 首先需要进行xz 命令安装yum install -y xz
解压:xz -d Python-3.6.10.tar.xz
再次解压:tar -xf Python-3.6.10.tar
mkdir /usr/local/python3.6/
cd Python-3.6.10
./configure --prefix=/usr/local/python3.6/ --enable-optimizatio --with-openssl=/usr/bin/openssl
make -j4
make install
4)建立软件连接生成python3和pip3
ln -s /usr/local/python3.6/bin/python3.6 /usr/bin/python3
ln -s /usr/local/python3.6/bin/pip3.6 /usr/bin/pip3
5)设置 python3 环境变量
export PATH=$PATH:/usr/local/python3.6/bin/
source /etc/profile
4、ipython安装
ipython
是一个python
的交互式shell
,比默认的python shell
好用得多,支持变量自动补全,自动缩进,
支持bash shell
命令,内置了许多很有用的功能和函数。学习ipython
将会让我们以一种更高的效率来使用python
。
同时它也是利用Python进行科学计算和交互可视化的一个最佳的平台。
pip3 install ipython
注:如出现下面图片问题
解决方法:在pip命令后面手动设置源(-i - url),这里手动指定的是豆瓣源
pip3 install ipython -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
更改pip源
采用国内pip源,下载模块会快
常用pip源有:
豆瓣: https://pypi.douban.com/simple
阿里云:https://mirrors.aliyun.com/pypi/simple
加速安装命令:
pip install 模块名称 –i https://pypi.douban.com/simple
使pip源永久生效:
Linux系统:
1、在用户根目录下面创建.pip隐藏目录文件
mkdir ~/.pip
2、进入 .pip隐藏目录创建pip.conf配置文件
cd ~/.pip && touch pip.conf
3、对pip.conf配置文件内容添加
[global]
index-url = http://pypi.douban.com/simple
[install]
use-mirrors =true
mirrors =http://pypi.douban.com/simple/
trusted-host =pypi.douban.com
5、安装虚拟环境,安装虚拟环境在使用django的时候可以创建不同的应用开发,使用自己需要的python模块
1)安装虚拟环境命令
pip3 install virtualenv
2)使用虚拟环境命令
cd /usr/local
/usr/local/python3.6/bin/virtualenv -p python3 web
3)生效创建的虚拟环境,并进入虚拟环境web中
source web/bin/activate
4)退出虚拟环境命令
deactivate
注:虚拟环境可以把pyhton虚拟成多个环境,一个项目使用一个环境。
6、安装Django
1)这里进入到了python虚拟环境 source /usr/local/web/bin/activate 2)安装django, pip3 install django==2.1.7 注:diango==2.1.7 这里代表的是安装django哪个版本。diango==可以修改成自己想安装的django版本 3)创建一个django project, django-admin.py startproject myweb
注:django project创建到了/usr/local/nginx/html/目录下面 4)在myweb目录下创建应用目录 python manage.py startapp blog 5)启动django项目 1)python manage.py runserver 8000 2)python manage.py runserver IP:8000 注: 1)当前访问路径是http://127.0.0.1:8000 2)当前访问路径是http://IP:8000 runserver 后面可以添加访问的IP:8000 和修改端口
7、UWSGI安装
1)uwsgi 安装
pip3 install uwsgi
2)uwsgi 配置文件参数编写
mkdir /etc/uwsgi
vim /etc/uwsgi/uwsgi.ini
[uwsgi] #启动uwsgi的用户名和用户组 uid = root gid = root #python 虚拟环境所在目录 home=/usr/local/web/ #指定wsgi所在路径 wsgi-file=/usr/local/nginx/html/myweb/myweb/wsgi.py #项目目录 chdir=/usr/local/nginx/html/myweb #指定项目的application,指的就是myweb module=myweb.wsgi:application #设置日志目录 daemonize=/var/log/uwsgi.log #指定启动时的pid文件路径 pidfile = /var/run/uwsgi.pid #指定sock的文件路径(nginx使用) socket=/tmp/uwsgi.sock #启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程 master = true #进程数 同 processes 官网给出的优化建议是CPU核数+1 workers=3 #启用线程 enable-threads=true #线程数 threads = 4 #设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长秒数 #这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束) reload-mercy = 8 #自动移除unix Socket和pid文件当服务停止的时候 vacuum=true #序列化接受的内容,如果可能的话 thunder-lock=true #设置自中断时间 harakiri=30 #设置缓冲 post-buffering=4096
注:如果django代码里面设置了多线程,如果uwsgi配置文件里面没有开启多线程参数配置是不支持。
3)uwsgi启动参数命令
uwsgi --ini /etc/uwsgi/uwsgi.ini
4)编辑uwsgi 启动脚本
vim /etc/init.d/uwsgi
#!/bin/bash # chkconfig: 2345 75 10 DESC="uwsgi daemon" NAME=uwsgi DAEMON=/usr/local/python3.6/bin/uwsgi #python3下面的uwsgi路径 CONFIGFILE=/etc/uwsgi/$NAME.ini #指定的配置uwsgi配置文件 PIDFILE=/var/run/$NAME.pid #配置文件里面的pid路径 SCRIPTNAME=/etc/init.d/$NAME #启动脚本所在路径 FILEOFILE=/tmp/uwsgififo #set -e #[ -x $"DAEMON" ] || exit 0 do_start(){ if [ ! -f $PIDFILE ];then $DAEMON $CONFIGFILE || echo -n "uwsgi runing" else echo "The PID is exist..." fi } do_stop(){ if [ -f $PIDFILE ];then $DAEMON --stop $PIDFILE || echo -n "uwsgi not running" rm -fr $PIDFILE echo "$DAEMON STOPED." else echo "The $PIDFILE doesn't found" fi } do_reload(){ if [ -p $FILEOFILE ];then echo w > $FILEOFILE else $DAEMON --touch-workers-reload $PIDFILE || "uwsgi can't reload" fi } do_status(){ ps aux |grep $NAME|grep -v "/bin/bash" } case "$1" in status) echo -en "Status $NAME:\n" do_status ;; start) echo -en "Starting $NAME:\n" do_start ;; stop) echo -en "Stopping $NAME:\n" do_stop ;; restart) echo -en "Restarting $NAME:\n" do_stop do_start ;; reload|graceful) echo -en "Reloading $NAME:\n" do_reload ;; *) echo "Usage $SCRIPTNAME {start|stop|reload|status}" exit 3 esac exit 0
8、设置nginx+uwsgi整合,使nginx能访问django应用
修改nginx.conf配置文件,在server下面添加
location / { #root html; index index.html index.htm; # 导入一个Nginx模块他是用来和uWSGI进行通讯的 include uwsgi_params; #uwsgi_pass 127.0.0.1:9090; #uwsgi_param UWSGI_SCRIPT myweb.wsgi; #uwsgi_param UWSGI_CHDIR /usr/local/nginx/html/myweb; client_max_body_size 35m; uwsgi_cache_valid 1m; uwsgi_temp_file_write_size 64k; uwsgi_busy_buffers_size 64k; uwsgi_buffers 8 64k; uwsgi_buffer_size 64k; uwsgi_read_timeout 300; uwsgi_send_timeout 300; # 设置连接uWSGI超时时间 uwsgi_connect_timeout 60; # 指定uwsgi的sock文件所有动态请求就会直接丢给他 uwsgi_pass unix:/tmp/uwsgi.sock; }
注:这里可以直接把nginx server里的location 原配置基础上修改或者添加
1)uwsgi_pass 127.0.0.1:9090;
这里设置uwsgi 代理连接地址
2)uwsgi_param UWSGI_SCRIPT myweb.wsgi;
module指向项目下的wsgi.py文件。
3)uwsgi_param UWSGI_CHDIR /website/myweb;
django项目所在位置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具