name: Deploy to Remote Server on: push: branches: [ main, master ] # 也可以手动触发 workflow_dispatch: env: REMOTE_HOST: "leisueretimedock.top" REMOTE_USER: "root" REMOTE_PATH: "/opt/filebrowser/ltd v8" SSH_PORT: "22" jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup SSH run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -p $SSH_PORT $REMOTE_HOST >> ~/.ssh/known_hosts - name: Prepare remote directory run: | ssh -p $SSH_PORT $REMOTE_USER@$REMOTE_HOST " mkdir -p '$REMOTE_PATH' # 安全清理目录内容 if [ \"\$(ls -A '$REMOTE_PATH' 2>/dev/null)\" ]; then rm -rf '$REMOTE_PATH'/* echo 'Directory cleaned' fi " - name: Transfer files with tar run: | # 使用tar管道传输,保留文件权限和结构 tar czf - --exclude='.git' --exclude='.github' . | \ ssh -p $SSH_PORT $REMOTE_USER@$REMOTE_HOST "cd '$REMOTE_PATH' && tar xzf -" - name: Set proper permissions run: | ssh -p $SSH_PORT $REMOTE_USER@$REMOTE_HOST " chmod -R 755 '$REMOTE_PATH' echo 'Permissions set' "