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服务器的主要内容,如果未能解决你的问题,请参考以下文章