小白弄 AWS EC2
又遇上了服务器部署,这次就匆匆忙忙选了 EC2,就是传统的虚拟机。

开通 EC2 服务
相对于 Fargate,Beanstalk ……花里胡哨的产品,还是 EC2 好用(大概也是技术发展比较长久??……)。
首先没有烦人的 IAM 权限配置问题,基本上开好进出端口就可以用了。

第一步,给服务器取个酷炫的名字,再选择一下喜欢的操作系统。。。。。。小白此处以 ubuntu 为例。

第二步,选择服务器类型。AWS 第一年给新上手小白免费试用 t2.micro。和微软 Azure 的免费试用相比,AWS 相对诚意。小程序 t2.micro 基本够用。

第三步,给服务器配置一个用于远程登录的 SSH 密钥。如果没有,点击右边 ‘Create new key pair’ 一键生成,下载密钥到本机用于后续步骤登录使用。

第四步,配置出入端口等信息……根据自己的需要配置,当然也可以后续到 Security Group 里去更新 in bound rules。
这一步涉及到服务器如何请求其他服务,以及以供服务给用户。。。。。。

第五步,配置存储。没什么高要求,选择 gp2 大众类别就行了。。。。。。。
🎉 到此为止,EC2 服务器基本信息配置完成,点击 Launch Instance 按钮,几分钟后小型虚拟机就在 AWS 上跑起来了。
连虚拟机

快速连虚拟机可以直接在 AWS 用户界面上端点击 Connect 按钮,直接进入终端操作。
当然也可以使用之前第三步中生成的密钥进行远程登录。
ssh -i <密钥> ubuntu@<EC2 public ip>
EC2 默认 root 用户叫 ubuntu,如果选 centOS 系统,默认用户叫 centos。。。。。。
配置服务器跑代码
EC2 为了方便部署节约时间,基本常用工具环境都已提前安装,例如 git,python……此处以 python 应用为例,由于基本工具都已由 AWS 默认开通,拿到 EC2 以后基本只需要给项目工程创建一个 python 虚拟环境即可。
这一环节和在本机配置虚拟环境用于开发几乎一模一样。
sudo apt update
sudo apt upgrade
sudo apt python3-venv
安装完成之后,进入项目文件,创建运行项目所需的 python 虚拟环境
项目文件,可以通过 git clone 等多种方式获取……
cd <项目源代码文件路径>
python3 -m venv <虚拟环境名字>
这一步完成以后,项目文件下会多一个文件夹,文件夹名字就是刚刚创建的虚拟环境名字。创建虚拟环境没问题之后,激活环境:
source <虚拟环境名字>/bin/activate
激活python 虚拟环境后,终端显示也了些区别,预示已经成功进入上一步创建好的虚拟环境。
(虚拟环境名字)登录用户名@服务器名字:当前所在路径
接下来,就可以在虚拟环境下,干别的事了。例如安装项目需要的依赖包然后把程序跑起来。此处以 fastapi 为例:
pip install -r requirements.txt
cd app
uvicorn main:app --host 0.0.0.0 --port 8000
🎉 这一步完成之后,小程序就在 EC2 上跑起来了。确保 EC2 以开通 public ip 和 8000 端口,用户们就可以登录服务器访问小程序了。
http://<EC2 public ip>:8000
开通 Systemd 系统服务用于后台管理
以上步骤已经完成了95%,但是存在一个小问题:程序一直在终端前面跑,一旦关闭终端窗口,服务就停止了。
在生产环境中,我们当然需要服务一直跑下去,和终端窗口关闭无关。于是需要配置一下 Systemd 服务:
第一步,需要创建一个 Systemd 文件
sudo vim /etc/systemd/system/<服务名称>.service
第二步,在 vim 编辑器里编辑刚刚创建的<服务名称>.service:
[Unit]
Description=<服务名称>
After=network.target
[Service]
User=ubuntu # 有权限操作这个任务的用户名
WorkingDirectory=/path/to/your/app ExecStart=/path/to/your/app/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8000
Environment="PATH=/path/to/your/app/venv/bin:$PATH"
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
第三步,保存编辑启动服务:
sudo systemctl daemon-reload
sudo systemctl start <服务名称>
🎉 这时打开浏览器,输入 EC2 ip 地址(http://<EC2 public ip>:8000)可以看到服务正在运行。
查询服务运行情况,可以服务器远程终端输入:
sudo systemctl status <服务名称>
也可以通过 journal 查看运行日志:
journalctl -u fastapi_app.service -f

基础虚拟机运行成功后,后续如有提升性能需要,例如 load balancer 等,都可以在 EC2 页面左边工具栏进行设置。
总体来说 EC2 对小白上手友好,服务快。好评。
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!