CentOS7下部署flask项目详细操作步骤centos7+nginx+uwsgi+python3+flask+https

版本介绍

Centos7.9

Python版本:python3.8.12 

flask2.0.2

以下操作使用ROOT权限执行

 

一、 更新系统系统软件包

1 yum update -y

 

 二、安装软件管理包和可能使用的依赖

yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel

三、安装Python

1. 下载Pyhton3到/usr/local 目录

cd /usr/local
wget https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz

2. 解压并进入解压的文件夹

tar -zxvf Python-3.8.12.tgz
cd Python-3.8.12

3. 编译安装到指定路径

./configure --prefix=/usr/local/python3

4. 安装python3

make && make install

5. 建立软链接直接使用python3和pip

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

6. (可选步骤)覆盖掉原来的python2.7的软链接直接使用python3和python3的pip

ln -s /usr/local/python3/bin/python3.8 /usr/bin/python
ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip

  注意:本步骤操作需要删除python2.7的软连接原有的文件,不然会报:“ln: failed to create symbolic link ‘/usr/bin/python’: File exists” 错误,提示已经存在。

7. 输入命令查看是否安装成功,成功后会显示版本

Python3
pip3 -v

 

四、安装virtualenv ,方便不同版本项目管理。

1. 安装virtualenv

pip3 install virtualenv

2. 建立软链接、

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

3. 安装成功在根目录data文件夹下建立两个文件夹,主要用于存放env和网站文件的。

mkdir -p /data/env
mkdir -p /data/wwwroot

4. 切换到/data/env/下,创建指定版本的虚拟环境。

cd /data/env/
virtualenv --python=/usr/bin/python3 pyweb

5. 启动虚拟环境

cd /data/env/pyweb/bin

source activate

6.当最左边出现(pyweb),说明是已经进入虚拟环境。

 

五、安装uwsgi

pip3 install uwsgi

  注意:uwsgi要安装两次,系统和虚拟环境都要安装。

六、 将flask项目上传到服务器

1. 导出本地flask依赖包(在本地项目操作)

pip freeze >requirements.txt

2. 将项目文件上传到服务器,我这里用到的是Xftp直接将所有文件到 “/data/wwwroot”

3. 在虚拟环境安装包

  cd到 requirements.txt 所在文件夹

pip install -r requirements.txt

 

七、虚拟机运行flask

python app.py

 

 

 

八、 配置uwsgi

1. 任意位置编写uwsgi配置文件,我是在项目根目录创建的 uwsgi.ini 文件

[uwsgi]
# localhost  port  端口自定义
http=127.0.0.1:9000
# uwsgi 管理的项目入口文件
wsgi-file=/data/wwwroot/chati/app.py
# 管理的flask对象app
callable=app
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log

2. 令启动运行uwsgi

uwsgi  --ini  uwsgi.ini

显示 [uWSGI] getting INI configuration from uwsgi.ini 表明uwsgi运行成功

可能通过ps -ef|grep uwsgi   查看确认是否uwsgi启动.

**uwsgi常用命令:

#停止运行uwsgi,通过包含主进程编号的文件设置停止项目
uwsgi --stop uwsgi.pid

#重启uwsgi
uwsgi --reload uwsgi.pid

#后台运行,日志输出到指定文件
uwsgi --ini uwsgi.ini --daemonize /var/log/uwsgi.log 

 

九、 安装nginx和配置nginx.conf文件

1. 下载,我这里下载的是1.21.6 你也可以去 http://nginx.org/ 查看更多你想要的版本

cd /home/
wget http://nginx.org/download/nginx-1.21.6.tar.gz

2. 解压

tar -zxvf nginx-1.21.6.tar.gz

3. 安装

cd nginx-1.21.6
./configure
make && make install

4.备份 nginx.conf, nginx一般默认安装好的路径为/usr/local/nginx,在/usr/local/nginx/conf/中先备份一下nginx.conf文件,以防意外。

cd /usr/local/nginx/conf/
cp nginx.conf nginx.conf.bak

5. 然后打开nginx.conf,把原来的内容删除,直接加入以下内容:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.(你的域名或直接改成服务器ip).com;
        location / {  # 将访问 / url时转发到下面的url,与前面设置的uwsgi端口一致
                proxy_pass http://127.0.0.1:9000;
        }
        location /static/ {
        alias /data/wwwroot/chati/static/; #静态资源路径
        }
    }

}

 

6. 启动nginx

cd /usr/local/nginx/sbin/

#你可以先执行下面命令检查配置文件是否有错,没有错就执行以下命令
./nginx -t


#执行启动nginx命令
./nginx

终端没有任何提示就证明nginx启动成功。你可以使用浏览器输入你的域名或者服务器ip查看网页是不是显示出来了。

 

**nginx常用命令

nginx -t #命令检查Nginx配置是否有错误
nginx -c /usr/local/nginx/nginx.conf #重新加载Nginx配置文件
service nginx restart #重启服务
nginx -s stop #快速停止或关闭Nginx
nginx -s quit #正常停止或关闭Nginx
nginx -s reload #配置文件修改重装载命令

**配置过程中可能会用到Linux命令

# 查看端口运行的进程任务 进程pid
lsof -i :80
# 杀死进程
kill -9 pid 
# 杀死运行的服务
pkill -9 nginx(服务名)
# 管道过滤查询
ps -ef | grep nginx

 

 

九、flask启用SSL证书(https域名)

1. 进入之前我们下载nginx的源码目录

cd /home/nginx-1.21.6/

2. 安装PCRE库

yum -y install pcre

3. 安装SSL

yum -y install openssl openssl-devel

 

4. 依次执行下面两行代码重新编译一下

./configure

./configure --with-http_ssl_module --with-http_v2_module

 

5. 执行make

make

注意:是make而不是make install

 

6. 备份原来的nginx

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

 

7. 将新的 nginx 覆盖旧安装目录

cp objs/nginx /usr/local/nginx/sbin/nginx

 

如果报错,刚用执行下面的命令覆盖

cp -rfp objs/nginx /usr/local/nginx/sbin/nginx

注意:提醒 “cp: overwrite ‘/usr/local/nginx/sbin/nginx’?” 输入y 回车

 

8. ssl证书下载后有两个文件。一个是扩展名为.pem的文件,一个是扩展名为.key的文件。.pem文件中已经包含服务器证书和CA中间证书,第一段为服务器证书,第二段为CA中间证书,可以使用文本编辑器自行提取。.key文件是证书私钥。这里我们直接把域名证书复制到网站根目录里去就行。

 

9. 配置nginx.conf文件。


events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 443 ssl http2;
server_name www.你的域名.com 你的域名.com;
root /data/wwwroot/chati;#项目路径
charset utf-8;
ssl_certificate /data/wwwroot/chati/你的pem文件.pem;#.pem证书路径
ssl_certificate_key /data/wwwroot/chati/你的key文件key;#.key证书路径
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
location / { # 将访问 / url时转发到下面的url
proxy_pass http://127.0.0.1:9000;
}
location /static/ {
alias /data/wwwroot/chati/static/; #静态资源路径
}
access_log /data/wwwroot/chati/nginx.log;
error_log /data/wwwroot/chati/nginx.error.log;
}

}

注意证书的路径,需要将原来的80端口,修改成443,然后再加一些SSL证书配置,对比前面的nginx的配置进。

 

10、测试配置文件是否正确

/usr/local/nginx/sbin/nginx -t

 

如果没有报错则重启nginx即可。

/usr/local/nginx/sbin/nginx -s reload

注意:使用https时,要开启服务器的443端口,如果开启了服务器还不能访问,可能需要到服务器提供商后台安全组给端口放行。

 

 

 

本文是我自己一点一点通过自己服务器测试出来,然后编写步骤,我踩了很多坑才调试成功,如有哪些地方错误请在下方留言。

如果你觉得我的文章写的很好请帮我点赞谢谢!!

 

感谢Django中文网 https://www.django.cn/article/show-4.html 此文章,通过这篇文章的部署Django的方法进行部署flask。

posted @ 2022-02-16 22:35  紅ノ肚兜メ  阅读(751)  评论(0编辑  收藏  举报