基础环境的准备
# 更新所有的软件包
yum update -y
# 安装Python源文件的编译环境
yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel libffi-devel libxml* libssl-dev
yum install openssl11 openssl11-devel
下载Python的源文件、编译和安装
# 在centos当前用户目录中新建目录
mkdir -p ~/soft/python
# 进入目录
cd ~/soft/python
# 使用wget下载Python
wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz
# 解压缩
tar -zxvf Python-3.12.3.tgz
# 进入目录
cd Python-3.12.3
# 新建一个安装目录
mkdir /usr/local/python3
# 编译前的configure设置 -- 指定路径
./configure --prefix=/usr/local/python3
# 编译
make
# 安装
make install
# 可能会遇到的坑: ModuleNotFoundError: No module named '_ctypes'
# sudo yum install libffi-devel -y
# make install
# 确认安装是否成功!
cd /usr/local/python3/bin
# 测试python3是否能运行
./python3
# 测试pip3是否能运行
./pip3
# 为Python3和pip3创建软连接
ln -s /usr/local/python3/bin/python3.12 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.12 /usr/bin/pip3
pip的完善
# 更改pip3的下载源
cd ~
# 新建一个.pip目录
mkdir .pip
# 进入.pip目录
cd .pip
# 新建一个pip配置文件
# touch pip.conf
vim pip.conf
# 添加配置文件的内容
[global]
index-url=http://pypi.douban.com/simple
trusted-host = pypi.douban.com
# 升级pip3
pip3 install -upgrade pip
准备虚拟环境
mkdir -p /opt/pysite/
cd /opt/pysite/
# =========== 步骤01:安装virtualenv包========
# 安装
pip3 install virtualenv
# 创建virtualenv的软链接
ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
# =========== 步骤02:准备虚拟环境的目录 ========
# 新建目录
mkdir -p /opt/pysite/env
# 进入目录
cd /opt/pysite/env
# =========== 步骤03:创建虚拟环境 ========
# 创建python的虚拟环境,名称为:pyweb
virtualenv --python=/usr/bin/python3 pyweb
# ===========步骤04:进入并激活虚拟环境 ========
# 进入
cd pyweb/bin
# 激活虚拟环境
source activate
# 退出虚拟环境
deactivate
打包代码并上传
# 1. 在开发的环境中导出当前项目的依赖包到requirements.txt
pip freeze > requirements.txt
准备项目的运行环境
# 先进入虚拟环境 -- pyweb
cd /opt/pysite/env/pyweb/bin
source activate
# 进入项目的目录-- 示例的项目名称为:detectionproject
cd /opt/pysite/detectionproject
# 按照requirements.txt准备运行环境
pip install -r requirements.txt
# 安装uwsgi
pip3 install uwsgi
# 为uwsgi建立软链接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
# python manage.py runserver 阿里云内网ip:80
# 浏览器 公网ip:80/user/login
创建uwsgi的配置文件
xxx_uwsgi.ini
[uwsgi]
#http=127.0.0.1:10001 #如果是http,通过proxy_pass http链接
socket=127.0.0.1:10001 #如果是socket,通过nginx配置uwsgi_pass socket链接
wsgi-file=/opt/pysite/xxx/app.py
callable=app
touch-reload=/opt/pysite/xxx/
#最大请求数,最多请求5000次就重启进程,以防止内存泄漏
max-requests=5000
#请求超时时间,超过60秒关闭请求
harakiri=60
#进程的数量
processes=1
#线程数
threads = 2
#记录pid的文件
pidfile=/opt/pysite/sock/xxx.pid
buffer-size = 32768
#日志最大50M
log-maxsize=50000000
#配置虚拟环境路径,如果是在虚拟环境下启动,这个一定要配,不配会有些包找不到,应用会报错。可以在uwsgi.log文件中看报错信息
virtualenv =/opt/pysite/env/xxx
#uwsgi日志文件,如果是通过supervisor托管,daemonize配置需要屏蔽
#daemonize=/home/flask_web/uwsgi.log
#项目更新后,自动加载
python-autoreload=1
#状态检测地址
#stats = 127.0.0.1:9191
配置Nginx
#=========== 配置Nginx =============
....
server {
listen 80; # 对外的80端口
server_name xxxx; # 服务器的地址
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9999;
uwsgi_param UWSGI_SCRIPT detectionproject.wsgi;
uwsgi_param UWSGI_CHDIR /opt/pysite/detectionproject;#项目路径
}
location /static/ {
alias /opt/pysite/detectionproject/apps/static/;
}
.....
}