回头我放个完整的仓库
注意:仓里里的 .github/workflows 里的文件很重要
# 放在 仓库/.github/workflows/deploy-prod.yml
name: Deploy to Production
on:
push:
branches:
- prod # 只对这个分支 做出响应(代码合并到名字叫prod的分支,才会触发工作流)
jobs:
deploy:
runs-on: self-hosted
env:
APP_DIR: /home/ecs-user/app # 这里似乎必须硬编码 user,否则会报错
# 在这里定义环境变量,使用 secrets
# DB_HOST: ${{ secrets.DB_HOST }}
# DB_PORT: ${{ secrets.DB_PORT }}
# DB_NAME: ${{ secrets.DB_NAME }}
# DB_USER: ${{ secrets.DB_USER }}
# DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
steps:
- name: Check running user and permissions
run: |
echo "Current user: $(whoami)"
echo "User ID: $(id)"
echo "Groups: $(groups)"
echo "Home directory: $HOME"
- name: Check Docker version
run: docker --version
# 1
- name: Check Docker is running
run: docker info
- name: Checkout code
uses: actions/checkout@v3
with:
ref: prod
fetch-depth: 0
clean: true
- name: Show current commit
run: |
echo "Current commit:"
git log -1 --oneline
echo "Git status:"
git status
- name: Setup deploy directory
run: |
mkdir -p ${{ env.APP_DIR }}
cd ${{ env.APP_DIR }}
if [ -d current ]; then
rm -rf backup
mv current backup
fi
mkdir -p current
- name: Copy project files
run: |
cp -r ./* ${{ env.APP_DIR }}/current/
# 先构建新镜像
- name: 拉取基础镜像
working-directory: ${{ env.APP_DIR }}/current
run: |
docker compose -f docker-compose.prod.yml pull
- name: 构建新镜像
working-directory: ${{ env.APP_DIR }}/current
run: |
docker compose -f docker-compose.prod.yml build
- name: 停止旧容器
working-directory: ${{ env.APP_DIR }}/current
run: |
docker compose -f docker-compose.prod.yml stop
- name: 启动新容器
working-directory: ${{ env.APP_DIR }}/current
run: |
docker compose -f docker-compose.prod.yml up -d
- name: Clean up
if: always()
run: |
docker system prune -f
docker image prune -f
cd ${{ env.APP_DIR }}
ls -t | grep -v 'current\|backup' | tail -n +6 | xargs -r rm -rf
adduser ecs-user
按照官方教程走 https://docs.docker.com/engine/install/ubuntu/
不要使用 snap 安装,因为 snap 安装的 docker似乎有些命令不兼容 (我之前被坑过好几次)
把用户加入docker组
sudo usermod -aG docker ecs-user
注意:在服务器安装github runner的时候,不要用root账户,而是用普通用户,因为github runner不能使用root账户运行
仓库 =》 Settings =》 Actions =》 Runners =》 New self-hosted runner =》 根据步骤操作
提示: 如果遇到错误,确保自己没有选错 【Runner image】
# 编辑
sudo vim /etc/systemd/system/github-runner.service
[Unit]
Description=GitHub Actions Runner
After=network.target
[Service]
ExecStart=/home/ecs-user/actions-runner/run.sh
User=ecs-user
WorkingDirectory=/home/ecs-user/actions-runner/
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable github-runner.service
sudo systemctl start github-runner.service
sudo systemctl status github-runner.service
现在就可以在github 的runner 页面 ,看看是不是上线了