flask项目部署到云服务器+域名绑定
一、效果演示
首页展示
播放页面
该项目部署只为学习,所以用的服务器是腾讯云服务器10元/月,域名也是在腾讯云买的.com 55元/年 因为本人比较穷 哈哈😁
这个服务器纯粹是为新手准备的,1M带宽 速度堪称蜗牛,不过价格是真心便宜,适合练手。。。
废话不多说下面我们开始项目部署
二、准备云服务器
服务器镜像我们选择CentOS 7.2 64位
服务器买完后点击控制台进入如下页面
找到我们购买的服务器查看公网ip地址,我的这里为49.232.24.154 端口默认为22
那么22端口又是干什么的呢?
说白了就是我们用于连接liunx服务器的,我用的连接工具是xshell 点击下载 😎
打开后界面如下:
在这里我们输入连接服务器的命令
# root为默认的主机名 ssh root@49.232.24.154
接下来会让我们输入服务器的密码
如果忘记密码需要重置密码
三、环境准备
成功连接服务器后接下来就要准备运行Flask项目所需要的必备环境了;
mongodb安装
yum install mongodb-server
yum install mongodb 启动服务端 systemctl start mongod 查看端口 netstat -tunlp 默认端口为27017 查看进程 ps -ef|grep mongo
在部署项目之前需要我们将Windows上的mongodb数据库中的数据导出
导出命令
# 在cmd命令行执行 mongoexport -d [数据库名] -c [表名] -o [文件名字] 文件后缀为json格式
四、上传项目文件
Windows与liunx文件互传需要用到lrzsz
在服务器上安装
yum install lrzsz # 安装完直接从win拖到liunx指定目录即可 # 通常我们将项目文件放在opt下
我们需要将Windows中的项目文件压缩成zip文件上传至服务器opt的目录下
在服务器上我们需要将项目的压缩文件解压缩
# 解压缩命令 unzip 【项目名.zip】
项目所依赖的python模块
# 安装命令 pip3 install 模块名
将Windows上mongodb的数据文件【json格式】上传到服务器并导入mongodb中
# 导入命令 mongoimport -d [数据库名] -c [表名] --upsert [需要导入的文件路径]
至此我们就将部署项目所依赖的环境和数据都上传到了服务器,接下来开始表演。。。
五、安装gunicorn启动Flask服务
在生产环境中,flask自带的服务器,无法满足性能要求,我们这里采用Gunicorn做wsgi容器,来部署flask程序。
Gunicorn(绿色独角兽)是一个Python WSGI的HTTP服务器。从Ruby的独角兽(Unicorn )项目移植。该Gunicorn服务器与各种Web框架兼容,实现非常简单,轻量级的资源消耗。Gunicorn直接用命令启动,不需要编写配置文件,相对uWSGI要容易很多。 Gunicorn 服务器与许多 Web 框架广泛兼容,简单实现,轻松服务器资源并且速度相当快。
区分几个概念:
WSGI:全称是Web Server Gateway Interface(web服务器网关接口),它是一种规范,它是web服务器和web应用程序之间的接口。它的作用就像是桥梁,连接在web服务器和web应用框架之间。
uwsgi:是一种传输协议,用于定义传输信息的类型。
uWSGI:是实现了uwsgi协议WSGI的web服务器。
我们的部署方式: nginx + gunicorn + flask
Gunicorn 服务器作为 wsgi app 的容器,能够与各种 Web 框架兼容(flask,django 等),得益于 gevent 等技术,使用 Gunicorn 能够在基本不改变 wsgi app 代码的前提下,大幅度提高 wsgi app 的性能。
安装命令
# 在liunx命令行执行 pip3 install gunicorn
基于Gunicorn启动我们的Flask项目
gunicorn -w 4 -b 127.0.0.1:5001 manage:app 用gunicorn启动flask服务 -w 4 [开启4个进程] -b 127.0.0.1:5001 [启动flask服务的ip+端口] manage [启动flask服务的文件名.py] app [项目实例]
这里注意:想要用gunicorn启动你的项目,需要先把项目所依赖的python模块下载下来例如:pymongo
启动Flask项目后查看Gunicorn进程命令
这样我们的项目就在服务器上跑起来了 开森 ~~~ 😝😝😝
你以为这样就完事儿了么,no no no 我们的项目指定的是本地回环地址【127.0.0.1】,也就是只有本机才可以访问这个项目;
为了我们的项目能够实现高并发我们还需要配置nginx;
六、Nginx反向代理Flask项目
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
nginx配置文件配置
# 进入opt目录下 进入nginx配置文件 cd tngx231/conf/ vim nginx.conf # 进行如下配置 server { # 监听80端口 listen 80; # 本机 server_name localhost; # 默认请求的url location / { #请求转发到gunicorn服务器 proxy_pass http://127.0.0.1:5001; # 这里的ip+端口就是我们启动flak的ip和端口 #设置请求头,并将头信息传递给服务器端 proxy_set_header Host $host; } }
配置完nginx需要重启nginx配置文件才会生效,选用平滑重启
七、配置云服务器的安全组防火墙
默认是方通全部端口,我们选择第二个
端口说明
22 端口 【ssh连接服务器】 80 端口 【浏览网页服务默认的端口号】 443 端口 【网页浏览端口,主要是用于HTTPS服务,是提供加密和通过安全端口传输的另一种HTTP】 3389 端口 【Windows 2000(2003) Server远程桌面的服务端口,可以通过这个端口,用"远程桌面"等连接工具来连接到远程的服务器,如果连接上了,输入系统管理员的用户名和密码后,将变得可以像操作本机一样操作远程的电脑,因此远程服务器一般都将这个端口修改数值或者关闭。】 ICMP 协议 【ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。 [3] 它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。】
至此我们就完成了Flask项目部署到云服务器上的所有流程,可以通过公网ip访问我们的项目了,但是ip太长了不好记,我这个记忆力。。。。。。so 决定买一个域名绑定我们的ip,这样我们以后就可以直接在浏览器上输入域名来访问我们的项目了;
八、绑定域名
网域名称系统(DNS,Domain Name System,将域名和IP地址相互映射的一个分布式数据库)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址数串。
购买前需要查询你要注册的域名是否已经被注册
购买后点击云产品下的移动解析httpDNS
需要进行实名认证,按照提示照做就行
进入域名解析列表点击默认是没有记录的,点击添加记录
解析域名
ok大功告成,按照我的步骤一步一步操作就可以轻松将你的web项目部署到云服务器上;
最后因路径问题找不到文件,因为我在本地把路径写死了,没有写死的可自行忽略
项目中涉及路径查找 import os # 跟目录 MOVIE_TXT_PATH=os.path.dirname(os.path.dirname(os.path.abspath(__name__)))
嘀 嘀 嘀 欢迎访问我的第一个网站http://www.flaskvideo.com😎😎😎 至于为什么域名用这个,因为我用的Flask框架搭建的视频网站,刚开始想做影评网站的,一不小心做成视频了。。。
九、防止被黑客攻击
修改ssh连接端口
# 不要让22号端口暴露在公网中 [root@VM_0_6_centos ssh]# vim sshd_config
修改后重新连接
数据库创建密码
自行百度
注意:在我们用nginx做反向代理的时候一定要看看端口我们是否在安全组中有配置放行,只有放行的端口才可以访问