CentOS-8.5环境下Python项目部署流程(Python、Nginx、MySQL、uwsgi)

一、CentOS-8.5环境安装Python3.6.7

1.下载Python安装包

cd /opt/package/
yum install -y gcc*
yum install -y zlib
yum install -y zlib-devel

tips:编译时要提前装好gcc*编译器和zlib zlib-devel

wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tgz

2.解压

cd ../software
tar -zxvf /opt/package/Python-3.6.7.tgz

3.编译安装包

cd Python-3.6.7
./configure --prefix=/usr/local/python
make && make install

这里有坑,可能会找不到ssl模块,导致无法导入ssl和无法pip安装模块

1.下载安装最新openssl
cd /opt/package
wegt https://www.openssl.org/source/openssl-1.1.1n.tar.gz
cd ../software
tar -zxvf /opt/package/openssl-1.1.1n.tar.gz
cd openssl-1.1.1n
./config --prefix=/usr/local/openssl
make && make install

2.然后修改Setup文件
cd /opt/software/Python-3.6.7/Modules
vim Setup

进行下图修改:
解开注释,将"SSL="后面修改为新下载的openssl的安装的位置
SSL修改示例

3.重新编译并安装

cd ..
./configure --prefix=/usr/local/python
make && make install

4.添加环境变量

echo PATH='/usr/local/python/bin/:$PATH' >> /etc/profile
source /etc/profile

5.检查是否成功,执行下面代码

python3.6

Python 3.6.0 (default, Jun 1 2017, 14:01:43)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>print('hello word')
hello word

6.更换国内pip源

临时更改:
pip install pyinstaller -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
永久更改:
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

运行永久更改命令后可以去编辑文件

cd /root/.config/pip
vim pip.conf

添加以下内容

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com

国内常用镜像源

清华:[https://pypi.tuna.tsinghua.edu.cn/simple]
阿里云:[http://mirrors.aliyun.com/pypi/simple/]
中国科技大学 [https://pypi.mirrors.ustc.edu.cn/simple/]
华中理工大学:[http://pypi.hustunique.com/]
山东理工大学:[http://pypi.sdutlinux.org/]
豆瓣:[http://pypi.douban.com/simple/]

7.卸载Python(如果需要的话)

第一种办法:

安装多个版本Python,删除指定版本
whereis python # 查看所有Python路径

# 只删除Python3.7相关的文件
rm -rf /usr/local/python3.7m
rm -rf /usr/local/python3.7
rm -rf /usr/lib/python3.7
rm -rf /usr/lib64/python3.7
rm -rf /usr/include/python3.7m

whereis python # 再次查看所有Python路径

# 修改pip配置文件
vim /usr/bin/pip
# 将第一行#!/usr/bin/python3.x改为 #!/usr/bin/python3.x (即改为/usr/bin/目录下你使用的python版本执行文件)

第二种办法(慎用):

!!!rpm会卸载所有python及其依赖:yum是依赖于python2.x运行的,会导致yum不可用等等!!!
彻底删除Python(!!!注意:会将各版本Python和依赖的包都删除掉!!!)
rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps # 强制删除已安装程序及其依赖
 
whereis python |xargs rm -frv  # 删除所有残余文件, xargs允许你对输出执行其他某些命令
 
whereis python # 验证删除是否成功,返回无结果

8.创建虚拟环境

pip3 install virtualenv # 安装virtualenv模块

virtualenv env-dir --python=python3.6.7 # 在当前目录创建env-dir虚拟环境,基于python3.6.7
配置python环境变量后virtualenv命令可以直接使用,否则需要指定目录

cd env-dir/bin
source activate # 激活进入虚拟环境
deactivate # 退出虚拟环境

去宿主机导出模块文件
pip freeze > requirements.txt
通过模块文件批量安装模块
pip3 install -r requirements.txt

有一个模块需要注意:mysqlclient==1.4.2.post1

此模块需要先安装mysql-devel

yum install -y mysql-devel --nogpgcheck

二、安装Nginx

1.安装Nginx之前需要先安装PCRE

wget https://nchc.dl.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
cd ../software
tar -zxvf ../package/pcre-8.35.tar.gz
cd pcre-8.35
./configure --prefix=/usr/local/pcre-8.35
make && make install

配置环境变量

echo PATH='/usr/local/pcre-8.35/bin/:$PATH' >> /etc/profile # 配环境变量
source /etc/profile
pcre-config --version # 查看版本

2.安装Nginx

wget https://nginx.org/download/nginx-1.14.2.tar.gz
cd ../software
tar -zxvf ../package/nginx-1.14.2.tar.gz
cd nginx-1.14.2
./configure --prefix=/usr/local/nginx-1.14.2 --with-http_stub_status_module --with-http_ssl_module --with-pcre=/opt/software/pcre-8.35/
make && make install

注意:这里"–with-pcre="指定的是PCRE源码目录,而不是安装目录

配置环境变量

echo PATH='/usr/local/nginx-1.14.2/sbin/:$PATH' >> /etc/profile # 配环境变量
source /etc/profile
nginx -v # 查看版本

3.开放端口

firewall-cmd --zone=public --add-port=80/tcp --permanent # 开放80端口
firewall-cmd --reload # 刷新防火墙
firewall-cmd --zone=public --list-ports # 查看开放端口列表

4.测试Nginx是否正常

nginx # 启动Nginx服务

nginx -s quit # 正常关闭Nginx服务
nginx -s stop # 快速关闭Nginx服务
service nginx restart # 重启Nginx服务
nginx -s reload # 配置文件修改后重载

5.配置Nginx

cd /usr/local/nginx-1.14.2/conf
vim nginx.conf

编辑以下内容

#user  nobody;
worker_processes  1;

# 错误日志文件位置
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
	
    # 日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    # nginx访问日志位置
    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 项目较大可以开启压缩
    gzip  on;

    # upstream djangos{
    #     server 192.168.88.8:8000;
    #     server 192.168.88.8:8001;
    #     server 192.168.88.8:8002;
    #     server 192.168.88.8:8003;
    # }

    server {
        # 监听的端口和IP
        listen       80;
        server_name  localhost;
        #charset koi8-r;

        # server访问日志位置
        access_log  logs/host.access.log  main;

        # 指定项目路径uwsgi
        location / {
            include uwsgi_params;
            uwsgi_connect_timeout 30;
            # proxy_pass http://192.168.88.8:8000;
            uwsgi_pass unix:/home/pyproject/script/uwsgi.sock;
            
            # 负载均衡
            # proxy_pass_header Server;
            # proxy_set_header Host $http_host;
            # proxy_redirect off;
            # proxy_set_header X-Real_IP $remote_addr;
            # proxy_set_header X-Scheme $scheme;
            # proxy_pass http://djangos;
        }

        # 指定静态文件路径
        location /static/ {
            alias /home/pyproject/mymall/static_all/;
            index index.html index.htm;
        }

        # 指定媒体文件路径
        location /media/ {
            alias /home/pyproject/mymall/media/;
            index index.html index.htm;
        }
		
        error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

三、安装MySQL数据库

1.下载并安装MySQL官方的MySQL Yum Repository

wget https://repo.mysql.com//mysql57-community-release-el7-10.noarch.rpm

2.然后进行repo的安装

rpm -ivh mysql57-community-release-el7-10.noarch.rpm

3.安装MySQL服务器

yum -y install mysql-community-server

如果直接执行yum安装命令报错:Error:Unable to find a match: mysql-community-server

这时执行以下命令,然后在此执行yum安装命令

yum module disable mysql 

阿里云镜像安装MySQL时,使用 yum 的方式可能导致报错:Error: GPG check FAILED

这时改用以下命令

yum -y install mysql-community-server --nogpgcheck

4.启动MySQL服务

systemctl start mysqld # 启动MySQL服务
systemctl status mysqld # 查看MySQL服务状态
systemctl enable mysqld # 设置MySQL服务自启动
systemctl disable mysqld # 禁止MySQL服务自启动

grep "password" /var/log/mysqld.log # 查找安装后的初始密码,"root@localhost:"后都是密码
mysql -uroot -p # 用初始密码登录数据库
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password'; # 修改密码

我们学习的时候可能会设置比较简单的密码比如"root"或"123456"可能会报以下错误
密码安全等级报错示例

简单来说就是你的密码太简单,不符合现在的安全策略,那么我们可以降低一下策略

set global validate_password_policy=LOW; # 设置为低安全策略安全策略
set global validate_password_length=4; # 设置密码长度

安全策略有四种:OFF(关闭)、LOW(弱)、MEDIUM(中)、STRONG(强)

5.配置远程连接MySQL数据库

mysql -uroot -proot # 登录数据库
use mysql; # 进入mysql库
select user,host from user; # 查看用户和访问权限

访问权限查询结果

可以看到root用户只允许本地连接,我们修改一下权限

update user set host='%' where user = 'root';
flush privileges; # 刷新权限

6.开放端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent # 开放3306端口
firewall-cmd --reload # 刷新防火墙
firewall-cmd --zone=public --list-ports # 查看开放端口列表

四、安装并配置uwsgi

1.pip3安装uwsgi

cd /root/pyproject/mymall-env/bin
source activate # 进入虚拟环境
pip3 install uwsgi==2.0.18

2.配置uwsgi.ini

cd /root/pyproject
mkdir script
cd script
vim uwsgi.ini

写入以下内容

# uwsgi使用配置文件启动
[uwsgi]
# 项目目录
chdir=/root/pyproject/mymall
# 指定项目的application[注意:这个application是wsgi.py文件中的application>函数]
module=netshop.wsgi:application
# 指定sock的文件路径
socket=/root/pyproject/script/uwsgi.sock
# 进程个数
workers=5
pidfile=/root/pyproject/script/uwsgi.pid
# 指定IP端口
http=192.168.88.8:8000
# 指定静态文件
static-map=/static=/root/pyproject/mymall/static_all
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 当服务停止的时候自动移除unix Socket和pid文件
vacuum=true
# 序列化接受的内容,如果开可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/root/pyproject/script/uwsgi.log

用配置文件启动uwsgi

uwsgi --ini uwsgi.ini # 记得在虚拟环境中,并指定uwsgi.ini文件路径
uwsgi --reload uwsgi.pid # 重启uwsgi
uwsgi --stop uwsgi.pid # 关闭uwsgi
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值