Python3 - 使用uwsgin部署Python项目到Centos服务器

Posted 韩俊强

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3 - 使用uwsgin部署Python项目到Centos服务器相关的知识,希望对你有一定的参考价值。

文章目录

本篇博客主要介绍, 使用uwsgin, 部署Flask开发的Python项目到Centos服务器, 意在学习部署流程, 简明扼要的学习要点, 了解原理, 为后面的项目部署做准备。

0. 测试服务器

查看centos版本, 以Centos 7.9 为例

cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

1. 添加一个用户

新增用户(用户名harry为例):
adduser harry

如何删除用户:
userdel 用户名

修改密码:
passwd harry

添加到sudo用户组:
gpasswd -a harry wheel

切换到harry用户:
sudo -iu harry

注意: 下方所有命令, 都是切换到harry这个用户进行的, 所以很多都带上了sudo

2. 初始化环境

初始化仓库

sudo yum install epel-release

安装gcc和nginx:

sudo yum install gcc nginx

3. 安装anaconda

下载地址: https://www.anaconda.com/distribution/

下载Anaconda的安装软件文件:

wget https://repo.anaconda.com/archive/Anaconda3-2021.11-Linux-x86_64.sh

安装Anaconda:

sh Anaconda3-2021.11-Linux-x86_64.sh

路径选择的时候, 不要改动, 默认是:

/home/harry/anaconda3
是否初始化Anaconda3环境, yes
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>> yes

4. 创建Python虚拟环境

激活anaconda:

source anaconda3/bin/activate

安装virtualenv:

pip install virtualenv

创建目录:

mkdir ~/myproject
cd ~/myprogect

创建虚拟环境目录:

virtualenv myprojectenv

激活虚拟环境目录:

source myprojectenv/bin/activate
前面加了个(myprojectenv), 说明已经在子环境
(myprojectenv) (base) [harry@iZxxxx4bq9xxxz0o60rq3uZ myproject]$ 

5. 初始化一个简单的flask应用

首先修改一下pip镜像源:

(myprojectenv) (base) [harry@iZxxxx4bq9xxxz0o60rq3uZ myproject]$ cd
(myprojectenv) (base) [harry@iZxxxx4bq9xxxz0o60rq3uZ ~]$ mkdir ~/.pip
(myprojectenv) (base) [harry@iZxxxx4bq9xxxz0o60rq3uZ ~]$ cd .pip/
(myprojectenv) (base) [harry@iZxxxx4bq9xxxz0o60rq3uZ .pip]$ vim pip.conf

写入如下内容:
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
trusted-host=mirrors.aliyun.com

安装依赖的flask和uwsgi:

pip install flask
sudo yum install -y gcc* pcre-devel openssl-devel python-devel && pip install 
sudo yum install -y uwsgi

创建一个flask文件:

 vim ~/myproject/myproject.py

把下面代码粘贴进去:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():  # put application's code here
    return 'Hello World!'


if __name__ == '__main__':
    app.run(host='0.0.0.0')

回到命令行, 启动测试flask服务:

python myproject.py
如果地址http://0.0.0.0:5000无法打开,则是防火墙问题, 那么需要打开系统的5000端口号
sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent
sudo firewall-cmd --reload

如过仍然访问不了, 服务器管理-安全组规则: 将5000端口号 加到入方向

常用的防火墙及端口号操作:

firewall-cmd --add-service=mysql        # 开放mysql端口
firewall-cmd --remove-service=http      # 阻止http端口
firewall-cmd --list-services            # 查看开放的服务
firewall-cmd --add-port=3306/tcp        # 开放通过tcp访问3306
firewall-cmd --remove-port=80tcp        # 阻止通过tcp访问3306
firewall-cmd --add-port=233/udp         # 开放通过udp访问233
firewall-cmd --list-ports               # 查看开放的端口

systemctl start firewalld               # 开启防火墙
sudo firewall-cmd --reload 							# 刷新防火墙
sudo systemctl reload firewalld         # 重启防火墙

能访问了, 但是有个问题?

WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.

6.创建一个uwsgi入口

vim ~/myproject/mywsgi.py

写入以下代码

from myproject import app
if __name__ == '__main__':
    app.run()

使用这个命令测试一下uwsgi

uwsgi --socket 0.0.0.0:5000 --protocol=http -w mywsgi

也可以如下操作

uwsgi --socket 0.0.0.0:5000 --ptocol=http --wsgi-file mywsgi.py --callable app

在浏览器访问, 即可打开网页, 其中ip部分换成自己的服务器公网ip

7. 配置uwsgi的配置文件

编辑一个配置文件

vim /home/harry/myproject/myproject.ini
[uwsgi]
module=mywsgi

master=true
processes=5
threads=100

http=0.0.0.0:5000
virtualenv=/home/harry/myproject/myprojectenv
die-on-term=true

回到命令行, 通过一下命令启动一个uwsgi服务器:

uwsgi --ini myproject.ini

8. 创建自启动Systemd配置

好处是: 系统自己重启后, 服务会自动启动

sudo vim /etc/systemd/system/myproject.service
[Unit]
Description=uWSGI instance to serve myproject
After=network.target

[Service]
User=harry
Group=nginx
WorkingDirectory=/home/harry/myproject
Environment="PATH=/home/harry/myproject/myprojectenv/bin"
ExecStart=/home/harry/myproject/myprojectenv/bin/uwsgi --ini myproject.ini

[Install]
WantedBy=multi-user.target

启动服务

sudo systemctl start myproject.service

开机自动启动设置

sudo systemctl enable myproject.service

以上是关于Python3 - 使用uwsgin部署Python项目到Centos服务器的主要内容,如果未能解决你的问题,请参考以下文章

centos7下部署Django(nginx+uwsgi+django+python3)

Nginx+uWSGI+Django部署方案的详细实现过程

Python3中urllib使用与源代码

CentOS8部署自己本地的django项目

pytho 的基本语法

使用 UDF 删除多列 - python3