Linux服务器,使用uWSGI + Nginx运行python3虚拟环境venv下的Django5.0项目。

前提 Python3.12.0,Django5.0(5.0最好使用python3.12版本,老版本不支持),Centos 7.9。

一、Python3环境配置

1、pyenv安装

pyenv是一个python的多版本切换的工具

1、首选通过pyenv_installer来安装。命令如下:

curl https://pyenv.run | bash

2、如果上述shell安装失败,可以选择手动安装:(我就失败了,总是提示443失败)

安装依赖:

yum install gcc zlib-devel bzip2 bzip2 -devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel

下载源代码:

git clone https://github.com/pyenv/pyenv.git ~/.pyenv
# 可选的编译步骤
cd ~/.pyenv && src/configure && make -C src

配置环境变量,

方法1:(~/.bashrc文件追加如下内容)

export PYENV_ROOT="$HOME/.pyenv" 
export PATH="$PYENV_ROOT/bin:$PATH"
#配置生效
source ~/.bashrc

方法2:

vi /etc/profile
#在最后面追加两个环境变量
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
#配置完成后执行
source /etc/profile

3、检查是否按照完成

pyenv --version 

4、安装配置

# 查看可安装的python发行版本
pyenv install -l
# 安装指定python版本
pyenv install 3.12.0
# 查看当前已安装的python版本(标*的为当前环境python)
pyenv versions
# 切换python版本
pyenv global 3.12.0

2、项目依赖准备

  1. 进入项目更目录
# 创建项目虚拟环境,此时使用的就是python3.12.0版本
python3 -m venv venv

# linux激活虚拟环境
source ./venv/bin/activate

# 安装项目所需依赖,包括Django5.0
pip install -r ./requirements.txt

二、uWSGI安装配置

  1. 首先在项目虚拟环境中手动安装uWSGI
pip install uwsgi
  1. 创建uwsgi配置文件
vim uwsgi.ini

[uwsgi]
#套接字方式--使用nginx连接时使用
socket=127.0.0.1:8000

#http通信方式--直接做web服务器使用
#http=127.0.0.1:8000

#配置项目目录 linux的绝对路径
chdir=/data/django-web

#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=django-web/wsgi.py

# 进程数
processes=4

# 线程数
threads=2

# uwsgi做主进程
master=True

# 存放进程编号的文件。也可以配置一个绝对路径,固定存放。否则会在当前执行命令的目录
pidfile=/data/django-web/logs/uwsgi.pid

# 后台运行,并输出日志。也可以配置一个绝对路径,固定存放。否则会在当前执行命令的目录
# daemonize=/data/django-web/logs/uwsgi.log
# uwsgi服务以守护进程运行
logto=/data/django-web/logs/uwsgi.log

如果uwsgi配置文件中配置了 daemonize=/path/uwsgi.log (uwsgi服务以守护进程运行)
会导致sytemctl启动时多次重启而导致启动失败
需改为 logto=/path/uwsgi.log
  1. uwsgi常用调试命令。小技巧: 加命令参数 & 可以将其放到后台运行
启动项目:uwsgi --ini uwsgi.ini

重启项目:uwsgi --reload uwsgi.pid

停止项目:uwsgi --stop uwsgi.pid
  1. 使用systemctl来管理服务的启动/开机启动/状态观察
#获取uwsgi的目录
whereis uwsgi
>>/root/.pyenv/versions/3.12.0/bin/uwsgi /root/.pyenv/shims/uwsgi

vim /usr/lib/systemd/system/uwsgi.service

[Unit]
Description=uwsgi-uwsgi-support
After=network.target
Before=nginx.service
 
[Service]
ExecStartPre=/bin/sleep 3
ExecStart=/data/django-web/venv/bin/uwsgi --ini /data/django-web/config/uwsgi.ini
ExecStop=/data/django-web/venv/bin/uwsgi --stop /data/django-web/logs/uwsgi.pid
ExecReload=/data/django-web/venv/bin/uwsgi --reload /data/django-web/logs/uwsgi.pid
Type=forking
Restart=always
 
[Install]
WantedBy=multi-user.target
#重新加载systemd配置
systemctl daemon-reload

#一定要在虚拟环境激活的情况下使用
systemctl enable uwsgi
systemctl start uwsgi

三、Nginx配置

nginx_uwsgi.conf

server {
        listen       443 ssl;
        listen       [::]:443 ssl;
        server_name  你的域名;

        ssl_certificate "/www/ssl/fullchain.pem";
        ssl_certificate_key "/www/ssl/privkey.pem";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
                # 监听 8000 端口,与 uwsgi.ini 里的 socket 设置成同一个端口
                uwsgi_pass 127.0.0.1:8000;
                include uwsgi_params;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
        }

        location /static {
                # 静态文件目录,STATIC_ROOT 指定的目录
                alias /data/django-web/static;
    }

}

server {
   server_name 你的域名;
   listen 80;
   rewrite ^(.*)$ https://${server_name}$1 permanent;
}

nginx -s relaod 重新记载配置

四、遇到的问题

1、mysqlcilent安装失败

直接使用pymysql代替

pip install pymysql

在项目默认生成的app目录下的__init_.py文件中使用pymysql,代码如下

(比如项目名为django-web,默认app目录也是django-web)

import pymysql
pymysql.install_as_MySQLdb()

2、openssl不兼容

直接手动安装openssl1.1.1(1.1.1可用)

使用 wget 下载源代码压缩包

cd /usr/local/
wget https://www.openssl.org/source/openssl-1.1.1.tar.gz

这条命令会从 OpenSSL 官网下载 OpenSSL 1.1.1 的源代码压缩包 (openssl-1.1.1.tar.gz) 到当前目录。

解压源代码

解压刚刚下载的源代码压缩包。你可以使用 tar 命令来完成解压操作:

tar -xzvf openssl-1.1.1.tar.gz

这将会在当前目录解压出一个名为 openssl-1.1.1 的目录,里面包含了 OpenSSL 1.1.1 的源代码。

编译和安装 OpenSSL

进入解压后的 OpenSSL 目录,并按照之前提到的步骤进行编译和安装:

cd openssl-1.1.1
./config --prefix=/usr/local/openssl-1.1.1
make
sudo make install

这些命令将会配置、编译和安装 OpenSSL 到 /usr/local/openssl-1.1.1 目录中。

验证安装

最后,使用以下命令验证 OpenSSL 是否成功安装:

/usr/local/openssl-1.1.1/bin/openssl version

如果成功安装,会显示 OpenSSL 的版本信息。

配置openssl为全局可用命令
ln -s /usr/local/openssl/bin/openssl /url/bin/openssl

如果报错删掉原有的
rm -rf /url/bin/openssl

之后再
ln -s /usr/local/openssl/bin/openssl /url/bin/openssl
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值