从购买服务器ECS到部署Flask再到绑定域名
话不多说,好久没有写博客啦,最近突发奇想的想自己搞一个个人网站,于是把过程记录下来,面向和我一样的小白程序员。话不多说直接开始
购买阿里服务器ECS
本人穷逼一个,还好有阿里的云翼计划,凡是身份证上面的年龄<=24岁的都可以用9.5元一个月的超低价格购买服务器,但是购买时长不能超过24岁(诶,岁月催人老啊)正好今年(2020年)我刚好24岁,还能用真庆幸(话说废话有点多了)
我买的是云服务器ECS,系统选择的是CentOS 7.3 64位
期间会让你设置名称,密码等,这是用于登陆的,要记住
买完后会自动跳转到云服务器管理控制台这里可以看到你刚刚买的实例的公网IP。通过Xshell连接ECS输入刚刚上面填写的名称和密码。这样你就有了一台属于自己的服务器了。想想还挺开心的
PS:本人Flask项目是不涉及数据库的,所以没有安装Mysql,还有Flask没有用manage.py这种形式去管理,不过后面也会提到用manage.py去管理要如何做
修改ECS的默认python版本
服务器刚刚连上我就迫不及待的查看了python的版本,果然又是2.7的。果断先把2.7换成3
这里需要耗费一点时间,去python官网看了一圈发现下载位置没有提示可以用命令行安装python3
具体下载位置在这里也就是download下面的source code
选择了最新的python3.8.1
地址页面上Files位置下面第一个
叫做Gzipped source tarball,点击会弹窗,记得把地址记录下面,后面再ECS上面下载。想吐槽的是为什么python没有便捷的命令行安装,例如yum直接安装python类的,找了许久发现没有,只好用下面的方法安装python3
1.ECS下载对应得包,这里是最新的3.8.1
把上面说的地址复制下来通过wget下载
wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz
下载完在当前目录有个Python-3.8.1.tgz的文件。后面解压
当然你也可以在window下下载文件,然后通过Xftp传到服务器
2.解压上面下载好的安装包
tar -xzvf Python-3.8.1.tgz
3.安装其他依赖包
安装python需要的包(其他教程里面说的,当时我也这样做了,这里也写下来)
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
yum -y install epel-release
yum install python-pip
4.进入解压的目录进行安装
下面就是关键的安装python3的语句啦
cd Python-3.8.1
./configure prefix=/usr/local/python3
make && make install
编译完记得文件先不要删除,后面还要再编译一次(pip的原因)
如果最后没提示出错,就代表正确安装了,在/usr/local/目录下就会有python3目录
5.添加软链接
凡是需要替代系统之前的配置都记得备份啊,养成这个良好习惯
# 备份原先的
mv /usr/bin/python /usr/bin/python.bak
#添加python3的软链接
ln -s /usr/local/python3/bin/python3.8 /usr/bin/python
#测试是否安装成功了
python -V
这样shell下python就是3的版本啦
6.更改yum配置,因为其要用到python 2才能执行,否则会导致yum不能正常使用
这里也是其他教程说的,我也试了
vi /usr/bin/yum
把#! /usr/bin/python修改为#! /usr/bin/python2vi /usr/libexec/urlgrabber-ext-down
把#! /usr/bin/python 修改为#! /usr/bin/python2
7.改变pip
# 先备份
mv /usr/bin/pip /usr/bin/pip.bak
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
这样改为pip之后发现没有报错,但是后面通过pip安装python 的包会有如下错误
会出现ModuleNotFoundError: No module named '_ctypes'
解决方法
安装下面的包
yum install libffi-devel -y然后再重新编译一下python3
cd Python-3.8.1
./configure prefix=/usr/local/python3
make && make install
这与就ok啦,现在就可以把上面下载和解压的python文件给删除啦
这样就完成了替代系统python 2.7的步骤了,不得不吐槽一下,阿里是该换一下镜像的python版本了,都3.8了还用默认的2.7-_-||
把Flask项目传到ECS
懂得用Xshell的人自然知道Xftp。话说这两个软件还真好用哦。通过Xftp把自己的项目(这里用XXX代替)传到ECS,然后再cd到XXX的根目录,创建一个venv的虚拟环境,python3就无须再用virtualenv啦,这个好评!
cd XXX
python -m venv ./venv
./venv表示在当前位置创建名为venv的虚拟环境,你叫其他的也行,例如python -m venv ./GoodVenv
创建完环境后马上进入环境并且更新一下pip
1.激活环境
. venv/bin/activate
当然这里如果你叫GoodVenv就是下面的
. GoodVenv/bin/activate
2.更新pip
其实你随便安装一个包,如果pip不是最新的它就会提示你更新,不用特意去更新,如果你系统的pip是最新的,那么创建虚拟环境的pip也是最新的,也就不需要更新,因为创建虚拟环境时会把系统的环境复制到它自己里面。
pip install --upgrade pip
然后安装项目里面的包文件(懂flask的自然知道requirements.txt,就是pip freeze > requirements.txt 把当前项目的环境包需求写入文件 requirements.txt 当然你把文件名字叫:rq.txt也行,那安装时就是pip install -r rq.txt
)
pip install -r requirements.txt
这样就完成了虚拟环境的搭建
可以运行一下flask项目查看效果,因为我的flask项目的入口文件是app.py,所以用下面的语句启动
python app.py
如果有用manage.py管理,就是下面的语句
python manage.py runserver
这样就搞定了项目在ECS运行的问题
增加ECS的访问端口
阿里的服务器,默认把80端口给关了(后面安装nginx后访问不了也有这个原因)
所以我们把需要的端口都开起来,配置端口方法如下
1.找到自己的实例
2.点击右边的 更多
3.选择 网络和安全组
4.选择 安全组管理
5.选择 配置规则
6.添加安全组规则
然后我添加了两条新的规则,一条是80端口,一条是8000~9999端口用于测试,授权对象都是
0.0.0.0/0,也就是所有人都可以访问
使用Gunicorn控制运行项目
在上面的虚拟环境下安装gunicorn用于控制项目的运行
虚拟环境下!!!
pip install gunicorn
然后在项目的目录下
gunicorn -w 4 -b 0.0.0.0:8000 app:app
因为我的项目的启动文件是app.py,当时要是想到gunicorn有这个app关键字我就不叫app.py了-_-||如果项目用了manage.py进行控制
gunicorn -w 4 -b 0.0.0.0:8000 manage:app可以看到第一个是项目运行的入口文件
PS:这里用了阿里云的服务器,记得把端口开放.就可以通过ip+:+8000访问到项目,这个端口要记住,后面配置nginx要用
其实这里不用虚拟环境下安装gunicorn应该也是可以的,正常安装应该也行(本人没去尝试,感觉可以)。
这样就可以通过 公网ip:端口 进行访问啦!但是有个问题就是,每次访问都必须手动输入gunicorn -w 4 -b 0.0.0.0:8000 app:app
项目才能跑起来,这样是有点麻烦,后面用supervisor来控制,这样就不用手动输入了。但是现在还是要手动输入语句运行
现在退出虚拟环境,继续进行下面的安装
使用nginx代理
现在的问题就是如何让项目可以在公网上直接通过ip访问啦,因为之前都是用nginx,所以现在也用nginx进行代理,这边说一下我的理解,你Flask项目跑在ECS上的某个端口,例如是8000,可是在网络上,大家访问你的ip(假如现在还没有用域名)是如何能正确的访问到你的项目端口呢?因为默认访问的端口是80端口,当然如果你直接 IP:8000 也是能访问到你的Flask项目的,但是这样每次都要多输入:8000是相当蛋疼。
于是我们用nginx做代理,让访问默认的80端口可以接到Flask项目的8000端口
下面就来安装和配置nginx
安装nginx
安装nginx的源
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
安装nginx
yum install -y nginx
通过whereis nginx可以知道nginx安装后的路径
知道路径后进入到nginx 的配置(默认应该是在/etc/nginx/下)
这样再通过ip访问ECS就会出现nginx的欢迎页面welcome to nginx
修改nginx的配置文件default.conf
查看nginx的配置
cat nginx.conf
下面是nginx的配置文件
user nginx;
worker_processes 1;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;
}
可以看到最后一句的包含配置语句,于是到conf.d目录下
cd conf.d
看到了一个default.conf,第一步自然是先备份!!!
cp default.conf default.conf.bak
然后修改nignx的配置文件default.conf
server {listen 80;server_name localhost;location / {proxy_pass http://localhost:8000;proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 500s;proxy_read_timeout 500s;proxy_send_timeout 500s;}
}
这里proxy_pass http://localhost:8000;就是ECS本地运行Flask项目的端口,要与gunicorn的端口一样才行
重启niginx
先检查一下nignx配置文件有没有问题
nginx -t
出现
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
这样就是说明没有问题,然后重启nginx
service nginx restart
然后我们看一下效果,上面说到了gunicorn暂时还是需要手动运行的,我们输入gunicorn的语句让Flask项目开始在ECS本地跑
虚拟环境下!!!
gunicorn -w 4 -b 0.0.0.0:8000 app:app
然后你再访问ip:8000发现可以访问flask项目,直接ip也可以访问flask项目就是成功啦!
安装supervisor
supervisor告别手动运行gunicorn语句
supervisor是一个进程守护工具,可以管理重启进程等,对于这个我是有所感受的,之前用supervisor(3.X版本)的时候,如果系统的环境是python3就会提示你
Supervisor requires Python 2.4 or later but does not work on any version of Python 3. You are using version
但是大人时代变啦!python3的天下啦,这次发现supervisor竟然适配了python3,原因是我安装的时候忘记了之前的不适配直接
pip install supervisor
它竟然提示我安装成功,后来回过头才发现我是python3啊,然后去官网看了一下4.0版本以上好像就支持python3了,现在安装的是最新的4.1.0(19年10月19日更新)
用pip安装supervisor成功,但是在shell下不见supervisord等命令(当前pip默认是python3的pip3)
然后发现whereis supervisord找不到(然后发现locate supervisord的路径全是在python3下,默认没有安装locate后面有介绍如何安装)
然后再抱着之前安装早期版本的方法通过easy_install supervisor
安装一次(也是4.1.0的supervisor)
easy_install supervisor
发现安装的也是4.1.0的版本,安装后发现whereis supervisord有结果了
supervisord: /usr/bin/supervisord
supervisord命令终于可以识别了
那接下来的工作就很明确了,用supervisor控制的gunicorn的命令就可以了
supervisor的配置
1.生成配置文件
在etc文件夹下创建supervisor文件夹,并且通过命令生成supervisor的配置文件
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
2.修改supervisord.conf
修改supervisord.conf文件(/etc/supervisor/下的)其实这和nginx的配置很像,末尾改成
[include]
files = /etc/supervisor/conf.d/*.conf
3.新建conf.d文件
在配置路径(/etc/supervisor/)
mkdir conf.d
4.配置自己的控制文件
在conf.d里面新建项目配置(注意文件的结尾必须.conf,例如XXX.conf)这里项目名称用XXX替代
我用app.py作为入口的配置
[program:XXX]
command = /home/work/XXX/venv/bin/gunicorn -b 127.0.0.1:8000 app:app
directory = /home/work/XXX
stdout_logfile = /home/work/XXX/supervisord_stdout.log
stderr_logfile = /home/work/XXX/supervisord_stderr.log
有manage.py控制的语句
[program:XXX]
command = /home/work/XXX/venv/bin/gunicorn -b 127.0.0.1:8000 manage:app
directory = /home/work/XXX
stdout_logfile = /home/work/XXX/supervisord_stdout.log
stderr_logfile = /home/work/XXX/supervisord_stderr.log
这里有个要注意的地方,一般项目我们都有虚拟环境,所以command命令必须使用虚拟环境来跑。
测试语句有没有问题可以使用下面的方法
cd /home/work/XXX
venv/bin/gunicorn -b 127.0.0.1:8000 app:app
上面这样如果不报错就是ok啦
5.更新supervisor
supervisorctl update
这样通过supervisorctl就可以进行控制进程
例如
[root@iZbp117p51ll3pasv31s6fZ GBCommentsWeb]# supervisorctl
XXX RUNNING pid 2822, uptime 3:33:46
supervisor> stop XXX
XXX: stopped
supervisor> start GBCommentsWeb
XXX: started
这样就可以通过ip直接访问Flask的项目啦,如果想要通过域名访问就继续看
购买域名
我买了一个.top的域名,才9元一年十分的便宜。
等域名买完实名认证一下,后面把域名绑定到ECS就可以通过域名访问Flask的项目啦!
绑定域名到ECS
1.进入阿里的域名控制台
2.点击域名右边的解析
3.点击上面的 新手引导 把ECS的公网IP输入进行就好了
这样就可以通过域名访问了,但是过一段时间就不能访问啦,会提示“该网站暂时无法访问”,直接ip访问还是可以的,这是因为需要备案。
记得2年前备案的时候还要向阿里买幕布(好像是免费的幕布但是要15元邮费,其实幕布就是一张纸),还要等幕布寄过来,然后帖在墙上拍一张照片,这样才能通过备案。今天我看了一下发现不用这个步骤了,很棒!
这样就结束啦!完结✿✿ヽ(°▽°)ノ✿
附录:
安装locate
安装locate
无法使用locate原因:没有安装mlocate这个包
yum -y install mlocate
然后使用时报错了
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
需要更新一下库
updatedb
这样就可以使用locate了
从购买服务器ECS到部署Flask再到绑定域名相关推荐
- 阿里云服务器ECS上部署简单的SSM项目
一.引言(为什么选择Linux部署) 1.1 开发环境(dev) 外部用户无法访问,开发人员使用,版本变动很大 平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大 ...
- 购买服务器及宝塔部署环境指南
服务器购买宝塔部署环境指南 为什么程序员都需要一个自己的服务器 作为一个程序员,必须要发布自己的网站和项目 联系linux 自己的远程长裤,远程数据库,远程tomcat-搭建在服务器上 练习,Linu ...
- 云服务器 ECS 建站教程:手工部署Java Web项目
手工部署Java Web项目 Tomcat 一个开源的且免费的 Java Web 服务器,常用来作为 web 开发的工具.它可以托管由 servlet,JSP 页面(动态内容),HTML 页面,jav ...
- 【Java】购买腾讯云服务器,并部署Spring boot项目,再到部署自己的个人博客,域名备案,安全连接配置
云服务器部署 一.购买腾讯云服务器 二.简单配置 2.1 进入控制台 2.2 配置防火墙 2.3 配置访问密码 三.远程ssh登录连接服务器 四.云服务器安装软件 4.1 安装JDK 4.2 安装My ...
- 云服务器 ECS 建站教程:部署Linux主机管理系统WDCP
部署Linux主机管理系统WDCP WDlinux Control Panel(简称 wdCP),是一套通过 Web 控制和管理服务器的 Linux 服务器管理系统以及虚拟主机管理系统.在 wdCP ...
- 云服务器 ECS 搭建WordPress网站:购买 Linux 实例
购买 Linux 实例 对于个人使用的小型网站,一台云服务器 ECS 实例可以满足需求.这里只介绍新购实例.如果您有镜像,可以使用自定义镜像创建实例. 注意:这个文档中描述的实例将结合 云市场 的 阿 ...
- 阿里云服务器ecs从购买到上传网站详细教程
最近花了好几天的时间在阿里云ecs上,从最开始的购买ecs就遇到了很多问题,个人觉得这些东西对于新手来说很不友好,现在把我从购买完ecs到搭建网站的过程以及遇到的一些问题写下来,也算是一次总结. 可能 ...
- 阿里云-ECS云服务器跨地域部署k8s集群
阿里云-ECS云服务器跨地域部署k8s集群 一 .背景介绍 二.环境准备 2.1 ECS云服务资源清单 2.2 K8s软件列表 三.阿里云ECS服务器网络问题 3.1 问题阐述 3.2 解决方案 四. ...
- 阿里云服务器ECS centos7.4搭建nginx环境部署静态代码
阿里云服务器ECS centos7.4搭建nginx环境部署静态代码 欢迎来到新手如何通过阿里云服务器部署静态网站 作为一个前端开发,第一次部署自己的私人网站,没有经验,战战兢兢,但是没有办法,成为全 ...
最新文章
- 【Matlab】求解黎卡提 Riccati 方程 李雅普诺夫 Lyapunov 方程
- 关于STM32的IAP与APP互相跳转
- 【LOJ#572】Misaka Network 与求和(莫比乌斯反演/杜教筛/min_25筛)
- JAVA中extends 与implements区别
- 计算矩阵边缘元素之和(信息学奥赛一本通-T1121)
- 有关Silverlight3.0在浏览器外运行的问题
- Scala:函数式编程之下划线underscore
- 10. Browser 对象 - Location 对象(2)
- springmvc中@PathVariable和@RequestParam的区别(百度收集)
- 通达OA智能开发平台CRM系统 实现数据的自动计算
- mobi 转 PDF最新方法 2017/11/21亲测可用
- 3dmax卸载工具_3Dmax软件无法安装?3Dmax软件正确卸载方法,重装无忧
- PDF动态生僻字文本处理
- 大数据CAP原则(CAP定理)、BASE理论
- 码易手机站,现已轻快上线!
- 整数转罗马数字(C++)
- Vue 使用 Vue-socket.io 实现即时聊天应用(实战篇 一)
- java 的访问修饰符是什么?
- 【TVOS】媒体融合 智慧乡村——TVOS绍兴试点项目正式启动
- 计算机专业高级职称评定条件,计算机职称考试初级高级中级职称评定申报条件...
热门文章
- 计算机应用样式指什么,Word 2013中样式的认识与内置样式的使用方法——想象力电脑应用...
- 智能水平创新高 华为手机驾驶保时捷汽车
- JavaFX的MVC框架
- c语言扣费系统,51单片机水卡充值扣费系统 RC522+S50卡源程序
- 程序人生 - 公寓40年产权到期后怎么办?
- 室内定位系统(IPS):不只是定位
- RN-borderRadius 失效问题
- 如何把msg.html导入微信,weui Msg提示页
- knockout.js简单实用教程1
- 164页5万字轨道交通BIM方案建议书