一、效果演示

首页展示

python Flask自定义域名 flask绑定域名_服务器

播放页面

python Flask自定义域名 flask绑定域名_服务器_02

该项目部署只为学习,所以用的服务器是腾讯云服务器10元/月,域名也是在腾讯云买的.com 55元/年  因为本人比较穷 哈哈😁

 

python Flask自定义域名 flask绑定域名_nginx_03

这个服务器纯粹是为新手准备的,1M带宽 速度堪称蜗牛,不过价格是真心便宜,适合练手。。。

废话不多说下面我们开始项目部署

二、准备云服务器

服务器镜像我们选择CentOS 7.2 64位

服务器买完后点击控制台进入如下页面

python Flask自定义域名 flask绑定域名_服务器_04

找到我们购买的服务器查看公网ip地址,我的这里为49.232.24.154 端口默认为22

那么22端口又是干什么的呢?

python Flask自定义域名 flask绑定域名_python Flask自定义域名_05

说白了就是我们用于连接liunx服务器的,我用的连接工具是xshell 点击下载 😎

打开后界面如下:

python Flask自定义域名 flask绑定域名_服务器_06

在这里我们输入连接服务器的命令

# root为默认的主机名
ssh root@49.232.24.154

接下来会让我们输入服务器的密码

python Flask自定义域名 flask绑定域名_python Flask自定义域名_07

如果忘记密码需要重置密码

python Flask自定义域名 flask绑定域名_nginx_08

三、环境准备

成功连接服务器后接下来就要准备运行Flask项目所需要的必备环境了;

python Flask自定义域名 flask绑定域名_python Flask自定义域名_09

点击查看python3.6编译安装 

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的目录下

python Flask自定义域名 flask绑定域名_服务器_10

在服务器上我们需要将项目的压缩文件解压缩

# 解压缩命令
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

  

python Flask自定义域名 flask绑定域名_python Flask自定义域名_11

  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进程命令

python Flask自定义域名 flask绑定域名_nginx_12

这样我们的项目就在服务器上跑起来了  开森 ~~~ 😝😝😝

你以为这样就完事儿了么,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配置文件才会生效,选用平滑重启

七、配置云服务器的安全组防火墙

默认是方通全部端口,我们选择第二个

python Flask自定义域名 flask绑定域名_服务器_13

端口说明

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地址数串。

域名购买地址

python Flask自定义域名 flask绑定域名_python Flask自定义域名_14

购买前需要查询你要注册的域名是否已经被注册

python Flask自定义域名 flask绑定域名_ico_15

购买后点击云产品下的移动解析httpDNS

python Flask自定义域名 flask绑定域名_ico_16

需要进行实名认证,按照提示照做就行

python Flask自定义域名 flask绑定域名_ico_17

进入域名解析列表点击默认是没有记录的,点击添加记录

python Flask自定义域名 flask绑定域名_服务器_18

解析域名

python Flask自定义域名 flask绑定域名_服务器_19

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

python Flask自定义域名 flask绑定域名_服务器_20

修改后重新连接

python Flask自定义域名 flask绑定域名_服务器_21

数据库创建密码

自行百度

注意:在我们用nginx做反向代理的时候一定要看看端口我们是否在安全组中有配置放行,只有放行的端口才可以访问