← ClaudeAtlas

github-aliyun-deploylisted

把任意项目配成「本地/手机改代码 → push GitHub main → 阿里云 ECS 自托管 Runner 自动 Docker 部署」的闭环。当用户说"自动部署到阿里云""GitHub Actions 自托管 Runner""本地改代码自动上线""帮我把 XX 项目配成云端自动部署""手机 Codex 改完自动发布"时使用。涵盖 Docker 化、deploy.yml、ECS 初始化、nginx 反代、certbot HTTPS 与已知踩坑。
sdwurg180507280211/my-skills · ★ 1 · DevOps & Infrastructure · score 74
Install: claude install-skill sdwurg180507280211/my-skills
# 本地 → GitHub → 阿里云 ECS 自动部署 一套通用方法论:GitHub 自托管 Runner 在服务器上**主动拉代码**执行部署,不需要 GitHub 反向 SSH 进服务器,因此 22 端口可长期关闭。 ## 何时用 - 用户要把某个本地项目做成「push 即部署」到阿里云。 - 用户有阿里云 ECS,希望手机/电脑改完代码自动上线。 - 用户已有一套这样的项目,想用相同套路套到另一个项目。 ## 核心约定(自动部署稳定的前提) - 服务名、容器端口(默认 8080)、��康检查路由 `/api/health` **固定不变**。 - 凭据只放服务器 `/opt/{{PROJECT}}/.env`(`chmod 600`),仓库只提交 `.env.example`。 - `runs-on: self-hosted` 才能用服务器上的 Runner。 ## 执行流程(按需跳步,已存在的产物跳过) ### 1. 容器化(本地) - `Dockerfile`:基础镜像按语言选,`USER` 非 root,`EXPOSE 8080`,`CMD` 启动服务。 - **Node 轻量项目**(无原生编译依赖):`node:20-alpine`。 - **Node 含原生模块**(如 `better-sqlite3`、需 python/make/g++ 编译):改用 `node:*-bookworm-slim`,`npm install` 走国内源 `registry.npmmirror.com`(见踩坑 C)。 - **Python 后端**用 `python:3.13-slim` + `uvicorn` 起 `:8000`;`pip install` **务必加阿里云 PyPI 镜像源**(`-i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com`),否则 ECS 直连 PyPI 会卡死。 - `docker-compose.yml`:服务名 = `{{PROJECT}}`,`ports: "${BIND_ADDR:-127.0.0.1:8080}:8080"`(只绑内网,由 nginx 反代),`restart: unless-stopped`,挂载 `./data`。 - `.dockerignore`:排除 `node_modules dist .git .github docs scripts .env* data/* .DS_Store *.log`。 - `.env.example`:只放占位(如 `ADMIN_TOKEN=__强随机值__`)。 ### 2. GitHub 仓库 + Actions - `gh repo create {{OWNER}}/{{PROJECT}} --public --source=. --remote=origin --push` - `.github/workflows/deploy.yml`(见下方模板):on push main,job `runs-on: self-hosted`,步骤 checkout → `docker compose --env-file /opt/{{PROJECT}}/.env up -d --build` → 健康检查 `curl -fsS http://127.0.0.1:8080/api/health`。 ### 3. 阿里云 E