diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml new file mode 100644 index 0000000..393ccff --- /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/aounsaas/" + + - 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/aounsaas + cd /volume2/docker/aounsaas + echo "🔧 正在构建临时镜像..." + #/usr/local/bin/docker build -t aounsaas-temp . + if /usr/local/bin/docker build -t aounsaas-temp .; then + echo "✅ 镜像构建成功,开始更新容器..." + echo "🔧 正在停止旧容器..." + /usr/local/bin/docker stop aounsaas || true + echo "🔧 正在删除旧容器..." + /usr/local/bin/docker rm aounsaas || true + echo "🔧 正在删除旧镜像..." + /usr/local/bin/docker rmi aounsaas || true + echo "🔧 重命名新镜像..." + /usr/local/bin/docker tag aounsaas-temp aounsaas + /usr/local/bin/docker rmi aounsaas-temp + echo "🚀 正在运行新容器..." + #/usr/local/bin/docker run -d -p 3300:3000 --name aounsaas -e TZ=Asia/Shanghai aounsaas + # 启动新的容器,使用指定的环境变量和端口映射,并设置自动重启功能 + # 容器名称为 aounsaas,镜像名称为 aounsaas + # 自动重启容器,除非手动停止 + # 将本地 3300 端口映射到容器的 3000 端口 + # 设置时区为上海 + # 设置 API 地址,最后一行没有反斜杠 + # 使用 aounsaas 镜像运行容器 + /usr/local/bin/docker run -d \ + --name aounsaas \ + --restart unless-stopped \ + -p 3300:3000 \ + -e TZ=Asia/Shanghai \ + -e NEXT_PUBLIC_API=https://emoji.aoun.ltd/ \ + aounsaas + echo "🎉 部署完成!" + else + echo "❌ 镜像构建失败!,保留旧容器运行。" + fi diff --git a/rules/nextjs.mdc b/rules/nextjs.mdc new file mode 100644 index 0000000..965b771 --- /dev/null +++ b/rules/nextjs.mdc @@ -0,0 +1,26 @@ +--- +description: +globs: +alwaysApply: true +--- +Always respond in 中文 + +## 注意事项 + +### 开发规范 +- 现在已启用TypeScript严格模式,不要出现类型错误,禁止出现未使用变量 +- UI使用Ant Design 5.X 注意兼容性问题 +- 使用现代简约。扁平化的设计来制作设计UI/UX +- 开发时,不要画蛇添足! 禁止使用any类型! +- 必须包含三级注释体系: + ▸ 文件头注释(作者:阿瑞/功能/版本) + ▸ 模块级注释(逻辑分段说明) + ▸ 关键代码行注释(复杂逻辑解释) +- 当前在Windows 11环境下使用PowerShell终端进行开发,禁用类Unix命令,使用`Get-ChildItem` 替代ls ; +- 已使用pnpm run dev启动了项目,禁止重复运行启动命令! +- 当修改超过300行的文件时,确保每次修改代码行数 ≤ 100行,分多次修改。 + +## 补充 +1. 适当使用useMemo、React.memo来优化性能和防止不必要的重新渲染,但是要注意防止React.memo过度使用、useCallback依赖项设置错误的问题,要合理使用。 +2. 当执行终端命令时,先解释这个命令的作用;如果要使用pnpm安装包时,先解释为什么需要这个包; +