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