目录
安装相关软件包
安装python3.9
安装依赖包
shell
yum install libffi-devel -y
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
安装openssl
这里安装的是1.1.1w的版本
shell
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
然后再编译make 安装
shell
tar -zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/usr/local/openssl #如果此步骤报错,需要安装perl以及gcc包
make && make install
mv /usr/bin/openssl /usr/bin/openssl.bak
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v # 设置生效
查看系统的当前openssl版本
openssl version -a
卸载默认的python3.6
shell
rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps 卸载pyhton3
whereis python3 |xargs rm -frv 删除所有残余文件
shell
或者下载到本地,再上传更快一些。
wget https://www.python.org/ftp/python/3.9.16/Python-3.9.16.tgz
tar -zxvf Python-3.9.16.tgz
cd Python-3.9.16
./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl
编译安装
make
make install
ln -sf /usr/local/python3/bin/python3.9 /usr/bin/python3
python3
分别检查:
which python
which python3
whereis python 或者whereis python3
也可以检查
同时检查 pip3 和pip
which pip3
which pip
默认没有pip命令,所以还要建立连接一下,yum install pip就有
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
ln -s /usr/local/python3/bin/pip /usr/bin/pip
来源这个小伙伴 linux安装python3.9
Nginx安装
Nginx安装可以看我之前写的博客 Nginx的安装启动和停止
环境准备
1、导出python安装包
python
pip freeze > requirements.txt
2、关闭生产环境,在settings文件夹设置(后面uwsgi部署的时候关闭)
python
DEBUG = False
ALLOWED_HOSTS = ['*'] # 设置访问白名单
3、收集静态文件
python
# settings.py文件配置
STATIC_ROOT = os.path.join(BASE_DIR,"bosszhipin_static")
python
# 收集静态文件,但媒体文件没有被收集
(myvenv) PS D:\PycharmProjects\code\BossZhiPin> python manage.py collectstatic
2757 static files copied to 'D:\PycharmProjects\code\BossZhiPin\bosszhipin_static'.
4.服务器拉取git项目代码
python
[root@server bosszhipin]# git clone XX.git
5.创建虚拟环境
shell
# 安装虚拟环境
pip3 install virtualenv
或
pip3 install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
# 链接一下虚拟环境,不然找不到路径
rm /usr/local/bin/virtualenv
ln -s /usr/local/python3/bin/virtualenv /usr/local/bin/virtualenv
# 创建虚拟环境
[root@server bosszhipin]# virtualenv myvenv 或python3 -m venv myenv
# 激活虚拟环境
[root@server bosszhipin]# source myvenv/bin/activate
(myvenv) [root@server bosszhipin]#
# 退出虚拟环境
(my_venv) [root@server bosszhipin]# deactivate
6.导入三方模块,使用aliyun镜像源加载
shell
(myvenv) [root@server bosszhipin]# pip3 install -i https://mirrors.aliyun.com/pypi/simple -r requirements.txt
# 安装mysqllient需要安装mysql开发库
yum install mysql-devel
7.数据库导入
禁用mysql8.0
shell
[root@server BossZhiPin]# yum-config-manager --disable mysql80-community
启用mysal5.7
shell
[root@server BossZhiPin]# yum-config-manager --enable mysql57-community
mysql
mysql> create database bosszhipin;
Query OK, 1 row affected (0.01 sec)
# 关闭InnoDB严格模式
mysql> set global innodb_strict_mode = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> use bosszhipin;
Database changed
mysql> source bosszhipin.sql;
Query OK, 0 rows affected (0.00 sec)
8、跳过密码检查
bash
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
9、启动就可以访问成功
bash
(myvenv) [root@server bosszhipin]# python manage.py runserver 192.168.40.150:9995
部署uwsgi
WSGI是什么?
WSGI(Web Server Gateway Interface)服务器是一种 Web 服务器,它实现了 WSGI 规范,允许 Python Web 应用程序与服务器进行通信。WSGI 规范定义了一种标准的接口,用于连接 Python Web 应用程序和 Web 服务器之间的通信,使得不同的 Web 框架和 Web 服务器能够互相配合运行
。
WSGI 服务器负责接收来自客户端的 HTTP 请求,并将这些请求传递给绑定的 Python Web 应用程序进行处理,然后将处理结果返回给客户端。
步骤
1、安装 uWSGI:
bash
(myvenv) [root@server bosszhipin]# pip3 install uwsgi
2、创建 uWSGI 配置文件
在 Django 项目目录
下,创建一个 uWSGI 配置文件。需要指定 Django 应用程序的位置、监听的端口、工作进程数量等信息。
bash
(myvenv) [root@server bosszhipin]# cat uwsgi.ini
[uwsgi]
# 开启主进程
master = true
# 指定工作进程数
processes = 2
# 指定线程数
threads = 2
# 指定项目目录
dir = /root/tools/boss/bosszhipin
# wsgi.py文件位置
wsgi-file = %(dir)/BossZhiPin/wsgi.py
# socket 任意IP地址
socket = 0.0.0.0:8000
# 测试访问
#http = 0:9995
# 日志
log = %(dir)/logs/error.log
chmod-socket = 660
# 退出后清理程序
vaccum = true
max-requests = 1000
# uwsgi的运行状态
status = %(dir)/uwsgi.status
# uwsgi的进程
pidfile = %(dir)/uwsgi.pid
3、启动 uWSGI 服务器 :
使用创建的 uWSGI 配置文件来启动 uWSGI 服务器。
bash
(myvenv) [root@server bosszhipin]# uwsgi --ini uwsgi.ini
停止
uwsgi --stop uwsgi.pid
4、配置 Web 服务器
配置一个 Web 服务器来充当反向代理,将请求从 Web 服务器传递到 uWSGI 服务器,以Nginx为例。
nginx中配置一个server块
nginx
# 需要以root用户启用,不然收集的静态文件访问不了
server {
listen 80;
server_name 192.168.40.150;
location / {
uwsgi_pass 127.0.0.1:8000; # uwsgi运行端口一样
include uwsgi_params;
}
# 静态文件路径
location /static/ {
alias /root/tools/boss/bosszhipin/bosszhipin_static/; # 收集静态文件的位置
}
# 媒体资源路径 该路径的资源是不会收集的,需要映射到资源的真实路径
location /bossApp/media/ {
alias /root/tools/boss/bosszhipin/media/;
}
}
windows配置域名解析(C:\Windows\System32\drivers\etc
)
bash
192.168.40.150 bosszhipin.dataanalysis.com
可以访问,部署成功
遇到的问题
1、sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user 'root'@'localhost' (using password: YES)") (Background on this error at: https://sqlalche.me/e/20/e3q8)
这个问题提示数据库密码错误,第一台本地服务器的MySQL版本是8,按道理我可以直接用mysql -uroot -p密码直接登录,应该是没有问题的。看了很多网上很多答案是说密码、权限、django配置其它的,这些操作也都做了,但还是没有解决。
于是换一台安装MySQL5.7版本的服务器,因为我的django配置的数据库也是5.7。但还是出现同样的问题,可能大概率是配置的问题,只能用下面这种方法先执行一下,跳过数据库检查,可以连接成功。
bash
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
2、配置Nginx和UWSGI时要注意细节,要保证它们通信的端口一致,服务是否启动
3、访问Nginx出现403Forbidden错误
这种情况就是权限不够导致的,解决方法为将配置文件的用户更改为root,然后重启nginx即可解决:
nginx
user root
bash
nginx -s reload
4、保证本地的python环境和服务器的python环境一致,也避免踩坑