name: 部署 Next.js 站点到 Gitea # 定义触发工作流程的条件 on: push: # 当推送到 "main" 分支时触发工作流程 branches: ["main"] # 手动触发工作流程 workflow_dispatch: #permissions: # contents: read # pages: write # id-token: write # 设置工作流程中所需的权限 permissions: # 只读权限用于读取仓库内容 contents: read #concurrency: # group: "pages" # cancel-in-progress: false # 设置工作流的并发控制 concurrency: group: "deploy" # 定义并发组名称为 "deploy" cancel-in-progress: false # 不取消正在运行的工作流 jobs: deploy: # 指定在最新的 Ubuntu 环境下运行 runs-on: ubuntu-latest # 主要执行的步骤 steps: # 第一步:检出(checkout)代码 - name: 检出代码 # 使用 GitHub 官方的 actions/checkout@v4 #uses: actions/checkout@v4 uses: https://git.aoun.ltd/actions/checkout@v4 # 第二步:将代码通过 SCP 传输到群晖服务器上 - name: 🚚 将项目文件复制到目标服务器 # 使用 appleboy 的 SCP 动作传输文件到远程服务器 #uses: appleboy/scp-action@v0.1.7 uses: https://git.aoun.ltd/298977887/scp-action@v0.1.7 with: host: ${{ secrets.SYNOLOGY_HOST }} username: ${{ secrets.SYNOLOGY_USERNAME }} key: ${{ secrets.SSH_PRIVATE_KEY }} port: ${{ secrets.SYNOLOGY_SSH_PORT }} source: "." target: "/volume2/docker/mirror/" - name: 🛠️ 在群晖上构建并运行Docker镜像 #uses: appleboy/ssh-action@master # 使用 appleboy 的 SSH 动作来连接服务器并运行命令 #uses: appleboy/ssh-action@v1.0.3 #使用自定义的 SSH 动作 uses: https://git.aoun.ltd/298977887/ssh-action@v1.0.3 with: host: ${{ secrets.SYNOLOGY_HOST }} username: ${{ secrets.SYNOLOGY_USERNAME }} key: ${{ secrets.SSH_PRIVATE_KEY }} port: ${{ secrets.SYNOLOGY_SSH_PORT }} script: | # 通过 set -e 使脚本在遇到错误时立即停止 set -e echo "🚀 开始执行部署..." #cd /volume1/docker/mirror cd /volume2/docker/mirror echo "🔧 正在构建临时镜像..." #/usr/local/bin/docker build -t mirror-temp . if /usr/local/bin/docker build -t mirror-temp .; then echo "✅ 镜像构建成功,开始更新容器..." echo "🔧 正在停止旧容器..." /usr/local/bin/docker stop mirror || true echo "🔧 正在删除旧容器..." /usr/local/bin/docker rm mirror || true echo "🔧 正在删除旧镜像..." /usr/local/bin/docker rmi mirror || true echo "🔧 重命名新镜像..." /usr/local/bin/docker tag mirror-temp mirror /usr/local/bin/docker rmi mirror-temp echo "🚀 正在运行新容器..." #/usr/local/bin/docker run -d -p 3301:3000 --name mirror -e TZ=Asia/Shanghai mirror # 启动新的容器,使用指定的环境变量和端口映射,并设置自动重启功能 # 容器名称为 mirror,镜像名称为 mirror # 自动重启容器,除非手动停止 # 将本地 3301 端口映射到容器的 3000 端口 # 设置时区为上海 # 设置 API 地址,最后一行没有反斜杠 # 使用 mirror 镜像运行容器 /usr/local/bin/docker run -d \ --name mirror \ --restart unless-stopped \ -p 3301:3000 \ -e TZ=Asia/Shanghai \ -e NEXT_PUBLIC_API=https://emoji.aoun.ltd/ \ mirror echo "🎉 部署完成!" else echo "❌ 镜像构建失败!,保留旧容器运行。" fi