CentOS 7下部署flask项目详细过程

1.写在前面的话

很久不做python项目了,有些遗忘,同时网上相关资料太多太杂,没有很系统,所以根据自己的理解和网上资料,写下云上部署过程,方便下次查看,至于创建项目过程,网上资料很多,就不写了。

2.开发环境

本次主要是在腾讯云上进行部署,系统是CentOS 7.9 64位,主要使用的软件如下:

  • Python 3.9.5
  • Pycharm
  • Flask1.0.2
  • Mysql 5.7
  • virtualenv 与 virtualenvwrapper
  • Putty
  • Xftp
  • nginx + uwsgi

这里我使用的是python3.9版本,flask已经更新到2.0了,我这里使用的还是1.0版本,数据库暂时使用mysql数据库,后期根据需要再调整,使用virtualenv 与 virtualenvwrapper管理python虚拟环境,nginx + uwsgi是我们常用的框架部署方式。nginx作为最前端的服务器,他负责接收所有的客户端请求,对于请求的静态文件,由nginx服务器自己完成,因为它具有很好处理静态文件的能力,性能进行过优化,支持高并发量;uWSGI服务器作为支持服务器,是用来服务nginx的,nginx将请求的动态文件交给uWSGI进行处理。uWSGI实现了uwsgi、wsgi和http协议,uwsgi协议是uWSGI自定义的协议,定义的是框架和服务器对接的接口

3.开始部署

3.1 通过putty远程连接

这里我用的是腾讯云服务器,买的最简单的配置,适合调试,根据需求和个人爱好,选择相应服务器即可,有了服务器之后,需先开通相应端口,一般默认22端口都是开通的,此时用putty(也可用xshell)连接即可。
putty连接图
输入相应用户名和密码即可进入:

即可连接上我们的服务器。

3.2 通过xftp实现文件的传输

连接上服务器后,我们就可以进行环境的搭建了。要将我们在本地创建的项目上传到服务器上,就通过xftp软件进行连接:

这里用的是xftp7连接,同样输入服务器公网ip和默认22端口
在这里插入图片描述
点击连接
在这里插入图片描述
在弹出的窗口依次输入用户名(一般root)和密码即可。
在这里插入图片描述
操作方法非常简单,左边是你的windows电脑,右边是你的服务器,直接将左边的内容拖动到右边即可。

这样我们就完成了服务器的远程连接及文件的上传。接下来就开始通过putty安装各种依赖包了

3.3 安装python3.6

3.3.1 安装python3.6

CentOS 8当中已经去掉默认安装的python2的版本,但是CentOS 7 默认安装了python2.7.5, 因为一些命令要用它比如yum 它使用的是python2.7.5,所以如果觉得麻烦可以直接在服务器中选择CentOS 8系统,当然部分配置可能有所不同。

我们可以通过python -V来查看Python的版本。然后使用命令 which python 查看一下Python可执行文件的位置。

安装相关包

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

编译安装python3

可以去官网下载编译安装包或者直接执行以下命令下载

wget https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz

解压

tar -xvJf Python-3.9.5.tar.xz

切换进入

cd Python-3.9.5

编译安装

./configure prefix=/usr/local/python3

make && make install

安装完毕,/usr/local/目录下就会有python3了
可能出现警告:

WARNING: The scripts pip3 and pip3.9 are installed in ‘/usr/local/python3/bin’ which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location

不要紧,这是提示我们安装的脚本不在路径中,下面继续创建链接。

添加软链接

ln -s /usr/local/python3/bin/python3 /usr/bin/python3

这样我们就安装成功python3.6了,可以执行以下命令验证:

python -V #得到的是python 2.7版本

python3 -V #得到的是python 3.6版本

添加pip3链接

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

同样可以验证是否添加成功:

pip3 --version

3.3.2 创建虚拟环境

安装virtualenv

pip install virtualenv #安装到python2中
pip3 install virtualenv #安装到python3中

安装virtualenvwrapper

pip install virtualenvwrapper #安装到python2中
pip3 install virtualenvwrapper #安装到python3中

需要注意的是这两个都得装,如果只装python3的话,workon命令是用不了的。

设置

查找位置

find / -name virtualenvwrapper.sh

会出现两个位置

/usr/local/python3/bin/virtualenvwrapper.sh #python3中的
/usr/bin/virtualenvwrapper.sh #python2中的

稍后我们用python3中的位置。

编辑配置文件

cd
vim ~/.bashrc

将以下两个命令添加到最后面,指定了虚拟环境的位置

export WORKON_HOME=~/.virtualenvs
source /usr/local/python3/bin/virtualenvwrapper.sh

执行.bashrc使文件生效

source ~/.bashrc

创建虚拟环境

mkvirtualenv -p /usr/bin/python3 flask_wl

这样我们就创建了虚拟环境flask_wl
通过workon命令就可以查看所有虚拟环境的目录,进入该虚拟环境,通过deactivate退出虚拟环境

workon
workon flask_wl
deactivate

在这里插入图片描述

3.3.3 在虚拟环境中安装依赖包

进入windows中的虚拟环境中,执行如下命令,导出所有需要安装的包:

pip freeze > requirements.txt

通过xftp上传自己的项目

进入到服务器中的虚拟环境,执行以下命令,即可安装其中的所有包

pip install -r requirements.txt

3.4 安装mysql

在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB

下载安装

下载并安装MySQL官方的 Yum Repository

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

使用上面的命令就直接下载了安装用的Yum Repository,大概25KB的样子,然后就可以直接yum安装了

yum -y install mysql57-community-release-el7-10.noarch.rpm

之后就开始安装MySQL服务器:

yum -y install mysql-community-server

没报错就跳过,如果报以下错误
在这里插入图片描述

Downloading packages:
warning: /var/cache/yum/x86_64/7/mysql57-community/packages/mysql-community-devel-5.7.37-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

The GPG keys listed for the "MySQL 5.7 Community Server" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.

Failing package is: mysql-community-devel-5.7.37-1.el7.x86_64
GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
 
==翻译:==
 
警告:/var/cache/yum/ x86_64/7/mysql57-community/packages/mysql-community-libs-compat-5.7.37-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
Retrieving key from file:/// etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

为“MySQL 5.7 社区服务器”存储库列出的 GPG 密钥已经安装,但它们对于这个包不正确。
检查是否为此存储库配置了正确的密钥 URL。

失败的包是:mysql-community-libs-compat-5.7.37-1.el7.x86_64
GPG 密钥配置为:file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

也就是 MySQL GPG 密钥已过期
可以在运行安装程序之前导入密钥即可:

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

感谢网上大佬,详情请看 宁海没有七号公园 的博客:

https://blog.csdn.net/b_ingram/article/details/122761408

至此MySQL就安装完成了,然后是对MySQL的一些设置。

数据库设置

首先启动MySQL

systemctl start mysqld.service

查看MySQL运行状态,运行状态如图:

systemctl status mysqld.service

在这里插入图片描述
此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:

grep “password” /var/log/mysqld.log

在这里插入图片描述
如下命令进入数据库:

[root@VM-0-4-centos ~]# mysql -uroot -p

输入初始密码(是上面图片最后面的 Sry,d)qpp5tU),此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库:

mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘new password’;

其中‘new password’替换成你要设置的密码,注意:密码设置必须要大小写字母数字和特殊符号(,/’;:等),不然不能配置成功

开启mysql数据库远程访问

执行以下命令开启远程访问限制(注意:下面命令开启的IP是 192.168.0.1,如要开启所有的,用%代替IP):

mysql> grant all privileges on . to ‘root’@‘192.162.18.11’ identified by ‘password’ with grant option;

然后在输入以下两行命令

mysql> flush privileges;
mysql> exit

在这里插入图片描述

为firewalld添加开放端口

CentOS7的默认防火墙为firewall,且默认是不打开的。

systemctl start firewalld # 启动friewall
systemctl status firewalld # 查看firewall启动情况
firewall-cmd --reload # 重启防火墙
firewall-cmd --list-ports # 检查打开的端口

添加mysql端口3306和flask端口9000

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload # 重新载入

在这里插入图片描述

更改mysql的语言

首先重新登录mysql,然后输入status:
在这里插入图片描述
可以看到,箭头处不是utf-8

因此我们先退出mysql,然后再到、etc目录下的my.cnf文件下修改一下文件内容

vim /etc/my.cnf

进入文件后,新增四行代码:

[client]
defaullt-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci

在这里插入图片描述
保存更改后的my.cnf文件后,重启下mysql,然后输入status再次查看:

在这里插入图片描述

验证

最后,到Windows下用cmd命令启动mysql!!
在这里插入图片描述
到此,数据库就安装成功了。

3.5 简单验证配置

经过上面两步的部署,我们现在就可以启动项目查看项目是否完整了。

创建数据库

进入到数据库,创建相应的数据库。

迁移映射

进入到项目目录和项目虚拟环境中:
1.运行命令初始化迁移文件

python manage.py db init

2.运行命令将模型的映射添加到文件中, 以后有更新只需要执行 以下两条命令就可以了

python manage.py db migrate

3.最后将映射文件真正映射到数据库

python manage.py db upgrade

启动

注意,需要先修改服务器项目app.py文件,才能使用公网ip访问,否则无法访问,同时保证防火墙、服务器相关端口已经开放。
在这里插入图片描述

执行以下命令启动项目,浏览器查看是否能够访问

python app.py



访问成功!此时就可以走一遍自己的项目,看是否存在错误

3.6 uwsgi配置

uwsgi是一个应用服务器,非静态文件的网络请求就必须通过他完成, 他也可以充当静态文件服务器,但不是他的强项。以下命令直接安装:

pip3 install uwsgi

uwsgi必须安装在系统级别的Python环境中,不要安装到虚拟环境中。
在虚拟环境下,进入到项目路径,创建uwsgi.ini文件

vim uwsgi.ini

# 将下面内容添加到uwsgi.ini中,下面的配置路径是我自己项目的路径,不同项目路径自己进行修改.
# 注意:不建议等号左右空格,如果出现问题,可以第一时间检查自己等号左右两边是否有空格

[uwsgi]
# uwsgi启动时所使用的地址与端口
socket=127.0.0.1:8000
# 必须全部为绝对路径
# 项目的路径 ,pwd指令中显示的路径
chdir=/root/flask_demo
# flask的wsgi文件 启动文件
wsgi-file=/root/flask_demo/app.py
# python 程序内用以启动的 application 变量名
callable=app
# Python虚拟环境的路径 , 进入到虚拟环境目录里面执行pipenv --venv得到
home=/root/.virtualenvs/flask_env
# 进程相关
# 主进程
master=True
# 最大数量的工作进程
processes=10
# 线程数
threads=4
#状态检测地址
# stats = 127.0.0.1:9191

3.7 nginx配置

虽然uwsgi可以正常的部署我们的项目了。但我们还是依然要采用nginx来作为web服务器。使用nginx来作为web
服务器有以下好处:

  1. uwsgi对静态文件资源处理并不好,包括响应速度,缓存等。
  2. nginx作为专业的web服务器,暴露在公网上会比uwsgi更加安全一点。
  3. 运维起来更加方便。比如要将某些IP写入黑名单,nginx可以非常方便的写进去。而uwsgi可能还要写一大段
    代码才能实现。
安装epel-release源并进行安装

yum install epel-release
yum update
yum install nginx

设置防火墙

在启动完以后可能无法通过IP访问,需要进一步设置防火墙:

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

nginx启动与关闭

pkill -f nginx #关闭
nginx #启动

安装完成后,在自己windows电脑上输入ip,即可访问到nginx欢迎页面,如下所示:

添加配置文件

在/etc/nginx/conf.d目录下,新建一个文件,叫做bbs.conf,
然后将以下代码粘贴进去:

upstream bbs{ server 127.0.0.1:8000; }
# 配置服务器 
server {
        # 监听的端口号,改成什么就是用什么端口访问服务器 ,默认是80
        listen 9000;
        # 域名,即公网ip
        server_name 112.95.150.130;
        charset utf-8;
        # 最大的文件上传尺寸
        client_max_body_size 75M;
        # 静态文件访问的url 
        location /static {
        # 静态文件地址 
        alias /root/flask_demo/static;
        }
        # 最后,发送所有非静态文件请求到flask服务器
        location / {
        uwsgi_pass 127.0.0.1:8000;
        # uwsgi_params文件地址 
        include /etc/nginx/uwsgi_params;
        }
}

修改配置文件/etc/nginx/nginx.conf参数

3.8 通过nginx启动项目

每次修改完了配置文件,都要记得运行

pkill -f nginx  #关闭
nginx    #启动

# 运行项目
uwsgi --ini uwsgi.ini

4. 总结

以上就是本人的整个开发环境的搭建,有什么问题,可以在博客下面进行评论。
第一次写博客,有错误欢迎指正,同时在写博客的时候,借鉴了大量大佬的文章,特别感谢!

以下是基于 CentOS 操作系统的 Nginx + Uwsgi + Flask 部署服务的详细操作步骤: 1. 安装必要的软件包 ```bash yum install epel-release yum install nginx yum install python3 python3-pip pip3 install uwsgi flask ``` 2. 创建 Flask 应用程序 在服务器上创建 Flask 应用程序,例如: ```python from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run() ``` 3. 创建 uwsgi 配置文件 在服务器上创建一个 uwsgi 配置文件,例如: ```ini [uwsgi] module = wsgi:app master = true processes = 5 socket = /tmp/uwsgi.sock chmod-socket = 660 vacuum = true die-on-term = true ``` 其中,`module` 参数指定 Flask 应用程序所在的模块和变量名,`socket` 参数指定 uwsgi 与 Nginx 通信的 Unix 套接字文件位置。 4. 创建 Nginx 配置文件 在服务器上创建一个 Nginx 配置文件,例如: ```nginx server { listen 80; server_name your-domain.com; location / { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgi.sock; } } ``` 其中,`listen` 参数指定监听的端口,`server_name` 参数指定服务器的域名或 IP 地址,`location` 参数指定请求 URL 的路径,`uwsgi_pass` 参数指定 uwsgi 与 Nginx 通信的 Unix 套接字文件位置。 5. 启动服务 在服务器上启动 uwsgi 和 Nginx 服务: ```bash uwsgi --ini uwsgi.ini & systemctl start nginx ``` 6. 测试服务 在浏览器中输入服务器的域名或 IP 地址,应该能够看到 Hello, World! 的输出。 以上就是在 CentOS 上使用 Nginx + Uwsgi + Flask 部署服务的详细操作步骤。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值