从 Linux 基础到远程部署:6 天 DevOps 基础项目
Source: Dev.to
Overview
我决定通过构建一个结构化的 6 天实战项目系列来强化我的 DevOps 基础。到本周结束时,我已经实现了远程 Ubuntu EC2 实例的自动化配置、Flask 应用的容器化、Nginx 作为反向代理的配置,并通过一个脚本完成了全部部署。
Environment
- Ubuntu(本地和 EC2)
- Bash
- Docker
- Docker Compose
- Nginx
- AWS EC2
- SSH 与 SCP
Day 1: Linux Essentials
Topics
- 文件权限
- 服务与
systemctl - 日志检查
- 基本系统命令
Exercise
编写了一个 Bash 脚本,用于检查磁盘使用率、内存使用率和系统运行时间。这迫使我对底层命令有更深入的理解,而不是仅仅执行它们。
Day 2: Bash Scripting
Topics
- 变量
- 循环
- 条件语句
- 日志记录
- 基本错误处理
Exercise
创建了一个脚本,能够在 Ubuntu 服务器或容器上自动安装 Docker、Git 和 Nginx。此脚本将手动、重复的任务转化为一键自动化。
Day 3: Docker Fundamentals
Steps
- 将一个简单的 Flask 应用容器化。
- 编写
Dockerfile。 - 构建镜像。
- 在本地运行容器。
Insight
该练习阐明了容器如何打包应用,以及它们的运行时行为与直接在宿主机上运行应用的区别。
Day 4: Docker Compose and Nginx
Setup
- 在
docker-compose.yml中定义了两个服务:一个用于 Flask,另一个用于 Nginx。 - 启用了内部网络,使容器之间能够通信。
- 配置 Nginx 作为反向代理,将请求路由到 Flask 服务。
- 添加了健康检查以验证服务可用性。
Insight
看到流量通过反向代理的过程,使网络部分的概念更加清晰,并展示了容器内部的通信方式。
Day 5: SSH Automation
Tasks
- 通过 SSH 安全连接到远程 Ubuntu 服务器。
- 使用 SCP 传输脚本。
- 在远程执行脚本。
- 管理权限和环境变量。
Insight
此步骤将本地自动化与真实基础设施关联起来,使项目从理论走向实际的远程执行。
Day 6: Full Deployment
Combined Script
最终脚本在远程 EC2 Ubuntu 实例上执行以下操作:
- 通过 SSH 连接。
- 安装 Docker 和 Git。
- 构建 Flask 容器。
- 配置 Nginx 作为反向代理。
执行完毕后,应用即可通过实例的公网 IP 访问。