Files
photography/.gitea/workflows/deploy-frontend.yml
xujiang 5df11e5b00 fix: 修复 CI/CD 部署中的权限问题
- 使用 sudo 创建部署目录并设置正确的所有者权限
- 在 rsync 前确保目录归用户所有
- 添加最终权限设置确保文件可访问
- 修复了 "Permission denied" 错误

现在部署过程会:
1. 用 sudo 创建目录
2. 设置目录所有者为部署用户
3. 执行 rsync 上传文件
4. 最终设置正确的文件权限
2025-07-09 09:44:33 +08:00

76 lines
2.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Deploy Frontend
on:
push:
branches: [ main ]
paths: [ 'frontend/**' ]
pull_request:
branches: [ main ]
paths: [ 'frontend/**' ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Install dependencies
run: |
cd frontend
bun install
- name: Run type check
run: |
cd frontend
bun run type-check
- name: Run lint
run: |
cd frontend
bun run lint
- name: Build project
run: |
cd frontend
bun run build
- name: Deploy to VPS
run: |
# 安装 SSH 客户端、rsync 和 sshpass
sudo apt-get update && sudo apt-get install -y openssh-client rsync sshpass
# 设置 SSH 选项以禁用主机密钥检查(用于密码认证)
export SSHPASS=${{ secrets.ALIYUN_PWD }}
# 测试 SSH 连接
sshpass -e ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "echo 'SSH 连接成功'"
# 在服务器上创建部署目录并设置权限
sshpass -e ssh -o StrictHostKeyChecking=no ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "sudo mkdir -p /data/photography && sudo chown -R ${{ secrets.ALIYUN_USER_NAME }}:${{ secrets.ALIYUN_USER_NAME }} /data/photography && sudo chmod -R 755 /data/photography"
# 上传构建文件到服务器(使用密码认证)
sshpass -e rsync -avz --delete --progress -e "ssh -o StrictHostKeyChecking=no" frontend/out/ ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }}:/data/photography/
# 设置最终文件权限
sshpass -e ssh -o StrictHostKeyChecking=no ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "sudo chmod -R 755 /data/photography"
# 重新加载 Caddy 配置 (可选,根据你的服务器配置)
sshpass -e ssh -o StrictHostKeyChecking=no ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "sudo systemctl reload caddy || echo 'Caddy 重启跳过'"
echo "✅ 部署完成访问地址http://${{ secrets.ALIYUN_IP }}"
- name: Notify success
if: success()
run: |
echo "✅ 前端项目部署成功!"
- name: Notify failure
if: failure()
run: |
echo "❌ 前端项目部署失败!"