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的等级是字符串作为配置的,需要用引号包裹起来
复制成功
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; } }
复制成功
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; }
复制成功
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; } }
复制成功
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
评 论:
v1.5.1