From 7b2a08116be8c3aeb763b357907a9e5f18e1381e Mon Sep 17 00:00:00 2001 From: LIRUI <298977887@qq.com> Date: Fri, 28 Feb 2025 16:57:35 +0800 Subject: [PATCH] 0228 --- .github/workflows/nextjs.yml | 104 +++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 .github/workflows/nextjs.yml diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml new file mode 100644 index 0000000..cc20c68 --- /dev/null +++ b/.github/workflows/nextjs.yml @@ -0,0 +1,104 @@ +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 3300:3000 --name mirror -e TZ=Asia/Shanghai mirror + # 启动新的容器,使用指定的环境变量和端口映射,并设置自动重启功能 + # 容器名称为 mirror,镜像名称为 mirror + # 自动重启容器,除非手动停止 + # 将本地 3300 端口映射到容器的 3000 端口 + # 设置时区为上海 + # 设置 API 地址,最后一行没有反斜杠 + # 使用 mirror 镜像运行容器 + /usr/local/bin/docker run -d \ + --name mirror \ + --restart unless-stopped \ + -p 3300:3000 \ + -e TZ=Asia/Shanghai \ + -e NEXT_PUBLIC_API=https://emoji.aoun.ltd/ \ + mirror + echo "🎉 部署完成!" + else + echo "❌ 镜像构建失败!,保留旧容器运行。" + fi