今天在重启了无数次 instance 之后,我最后一次刷新页面,看到终于跳出来的网站页面,全身一阵抖动,顿觉索然无味。
花了三天时间完成了项目的部署,我觉得有必要记录一下这个巨坑。
先说一下项目的大致配置:前端使用的是 Angular6 框架,中间层使用 Node.js 搭配 Express 框架来负责路由,后端采用 Python 编写,基于 Flask 框架,数据库使用 MongoDB 配合 Redis 缓存。 相对应的,启动网站时,我需要开启 Node 服务、Flask 服务、Redis 服务,打包前端代码,并且开启 Nginx 将用户请求传递到 Node。所以,编写一个自动开启以上服务们的脚本义不容辞。而 AWS 的 EC2(Elastic Comput Cloud,用多少,花多少的云服务器)提供了启动 instance 实例时运行脚本命令的功能:
AWS 提供了一个叫做 cloud-init 的工具,通过它可以在启动 instance 的时候执行自动配置任务。用户需要做的就是在 用户数据(user data) 字段中复制 shell 脚本。cloud-init 支持两种格式:Shell 脚本和 cloud-init 指令。
下面是一个 AWS 官方指导提供的脚本实例:
#!/bin/bash
yum update -y
amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
yum install -y httpd mariadb-server
systemctl start httpd
systemctl ena