flask项目的部署(五)

2024/3/22 flask

前面的众多博客,已经大致说明了项目的整体逻辑,这篇博客则主要讲述flask项目如何从开发环境到部署上线(以我个人为例)


# 前言

前面的众多博客,已经大致说明了项目的整体逻辑,这篇博客则主要讲述flask项目如何从开发环境到部署上线(以我个人为例)


# 1. 准备服务器

项目开发好后,就必然需要部署在服务器上,然后还要经历备案等繁琐的操作。

这里就不赘述了, 以腾讯云的轻量应用服务器为例,具体流程官方网站都有。

参考文章使用腾讯云服务器搭建网站全流程 (opens new window)

# 2. 宝塔面板部署

我个人使用的是宝塔面板部署,

因为我租的云服务器有对应的宝塔面板,所以我没有安装,如果有需要,也可以安装宝塔面板

在这里插入图片描述

进入宝塔面板后

在这里插入图片描述 可以点击网站 : 添加python项目,将你的项目上传到文件 在这里插入图片描述

在这里插入图片描述

然后指定项目路径等配置信息

在这里插入图片描述 打开设置查看配置信息:

在这里插入图片描述

如果显示未启动,可以查看项目日志中的报错信息,去修改(或许是你的模块未安装好、或许是代码有问题、或许是你的开发环境没有换为生产环境等)

# 3. gunicorn配置

在这里插入图片描述

# 项目目录
chdir = '/www/xingshixiaowo'

# 指定进程数
workers = 4

# 指定每个进程开启的线程数
threads = 2

#启动用户
user = 'www'

# 启动模式
worker_class = 'sync'

# 绑定的ip与端口
bind = '0.0.0.0:80'

# 设置进程文件目录(用于停止服务和重启服务,请勿删除)
pidfile = '/www/xingshixiaowo/gunicorn.pid'

# 设置访问日志和错误信息日志路径
accesslog = '/www/wwwlogs/python/xingshixiaowo/gunicorn_acess.log'
errorlog = '/www/wwwlogs/python/xingshixiaowo/gunicorn_error.log'

# 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
# debug:调试级别,记录的信息最多;
# info:普通级别;
# warning:警告消息;
# error:错误消息;
# critical:严重错误消息;
loglevel = 'critical'

# 代码发生变化是否自动重启
reload=True

# 自定义设置项请写到该处
# 最好以上面相同的格式 <注释 + 换行 + key = value> 进行书写, 
# PS: gunicorn 的配置文件是python扩展形式,即".py"文件,需要注意遵从python语法,
# 如:loglevel的等级是字符串作为配置的,需要用引号包裹起来
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# 4. nginx配置

nginx是一个高性能的 HTTP服务器

# 3.1. 进入软件商店,安装nginx

在这里插入图片描述

  
  
# HTTPS server
  server {
  #listen 443 ssl;  #为什么
  listen 443

  server_name www.whtuu.cn;
  root /www/xingshixiaowo;
  index index.html index.htm;
 ssl_certificate whtuu.cn_bundle.crt;
 ssl_certificate_key whtuu.cn.key;
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件。
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置。
  ssl_prefer_server_ciphers on;
   include /etc/nginx/default.d/*.conf;
 

  location / {
      add_header Content-Security-Policy upgrade-insecure-requests; #这里这个就是处理https反向代理http时候静态资源的关键
      proxy_set_header HOST $host;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://127.0.0.1:80;       
      
    
  }
  
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }


        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

 
 }
 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

我这里配置有点问题,我发现如果我配置了SSL证书,即https服务,那么原来的代理功能就失效了,无法返回正确的静态文件。

如果我把下面的代码注释掉,开启了https服务的网站就不会没有样式等静态文件(可是代理似乎就失效了)

   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }


        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

这是为什么呢,十分疑惑。请大佬帮我看一下,指出问题,十分感谢。

# 5. SSL证书配置

腾讯云是有免费的ssl证书的

在这里插入图片描述

可以申请证书,之后下载证书:

在这里插入图片描述 我下载的是nginx的,解压后得到安全证书: 在这里插入图片描述

为面板配置SSL证书:

在这里插入图片描述

将.Key文件和.PEM文件分别复制进去即可: 在这里插入图片描述 如果没有生效(建议重启一下面板)

之后就是为网站配置SSL证书了,同理: 在这里插入图片描述

配置完成后,对应的nginx配置也要修改,但是我也不太清除,想要求助有没有大佬,帮我看一下,为何无法正确代理。

# 6. 数据库的配置

我使用的是宝塔面板软件商店中的一个sql管理器 phpmyadmin

在这里插入图片描述 在数据库中添加数据库,我添加的是Mysql数据库: 在这里插入图片描述

然后,检查一下nginx的配置文件,确保有这些配置(同时监听的端口号要在面板的安全组中、以及服务器控制台的防火墙中开放)

 server {
   listen 888;
   server_name phpmyadmin;
   index index.html index.htm index.php;
   root /www/server/phpmyadmin;
   location ~ /tmp/ {
     return 403;
   }
   include enable-php.conf;
   
     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }


        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

 
   
   
 }       
        
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

在这里插入图片描述

在这里插入图片描述

然后,回到数据库,点击管理即可,然后输入你的用户名和密码,即可进入

在这里插入图片描述

在这里插入图片描述


# 总结

总的来说,我是使用gunicorn+nginx来部署的flask项目。

--2024-3-22

评 论:

冬眠
司南