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