- Stop and remove old containers with docker-compose down - Prevents conflicts with cached old configurations - Ensures clean deployment of new nginx-only setup 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
87 lines
3.0 KiB
YAML
87 lines
3.0 KiB
YAML
name: Deploy to NAS (rsync)
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup SSH key
|
|
uses: webfactory/ssh-agent@v0.9.0
|
|
with:
|
|
ssh-private-key: ${{ secrets.NAS_SSH_KEY_ADMIN }}
|
|
|
|
- name: Check SSH key loaded
|
|
run: ssh-add -l
|
|
|
|
- name: Add NAS host to known_hosts
|
|
run: |
|
|
mkdir -p ~/.ssh
|
|
ssh-keyscan -p ${{ secrets.NAS_PORT }} ${{ secrets.NAS_HOST }} >> ~/.ssh/known_hosts
|
|
|
|
- name: Test SSH connection
|
|
run: |
|
|
ssh -o StrictHostKeyChecking=no -p ${{ secrets.NAS_PORT }} \
|
|
${{ secrets.NAS_USER }}@${{ secrets.NAS_HOST }} echo "SSH connection successful"
|
|
|
|
- name: Test directory access
|
|
run: |
|
|
ssh -p ${{ secrets.NAS_PORT }} admin@${{ secrets.NAS_HOST }} \
|
|
"ls -la /volume1/homes/admin/ && whoami && pwd"
|
|
|
|
- name: Create target directory if not exists
|
|
run: |
|
|
ssh -p ${{ secrets.NAS_PORT }} admin@${{ secrets.NAS_HOST }} \
|
|
"mkdir -p /volume1/homes/admin/nginx-infra && ls -la /volume1/homes/admin/nginx-infra"
|
|
|
|
- name: Test rsync availability
|
|
run: |
|
|
ssh -p ${{ secrets.NAS_PORT }} admin@${{ secrets.NAS_HOST }} \
|
|
"which rsync && rsync --version"
|
|
|
|
- name: Deploy with file ownership fix
|
|
run: |
|
|
tar czf - --exclude='.git' . | ssh -p ${{ secrets.NAS_PORT }} admin@${{ secrets.NAS_HOST }} \
|
|
"mkdir -p /tmp/nginx-infra-deploy && cd /tmp/nginx-infra-deploy && tar xzf - && cp -rf /tmp/nginx-infra-deploy/* /volume1/homes/admin/nginx-infra/ 2>/dev/null || true && rm -rf /tmp/nginx-infra-deploy"
|
|
|
|
- name: Check Docker permissions
|
|
run: |
|
|
ssh -p ${{ secrets.NAS_PORT }} admin@${{ secrets.NAS_HOST }} \
|
|
"ls -la /var/run/docker.sock && id"
|
|
|
|
- name: Clean up old containers
|
|
run: |
|
|
ssh -p ${{ secrets.NAS_PORT }} admin@${{ secrets.NAS_HOST }} << 'EOF'
|
|
cd /volume1/homes/admin/nginx-infra
|
|
|
|
# Stop and remove old containers
|
|
if ! docker ps > /dev/null 2>&1; then
|
|
echo "Using sudo for docker commands..."
|
|
sudo docker-compose down --remove-orphans 2>/dev/null || true
|
|
else
|
|
echo "Direct docker access available..."
|
|
docker-compose down --remove-orphans 2>/dev/null || true
|
|
fi
|
|
EOF
|
|
|
|
- name: Remote docker-compose up
|
|
run: |
|
|
ssh -p ${{ secrets.NAS_PORT }} admin@${{ secrets.NAS_HOST }} << 'EOF'
|
|
cd /volume1/homes/admin/nginx-infra
|
|
|
|
# Start new containers
|
|
if ! docker ps > /dev/null 2>&1; then
|
|
echo "Using sudo for docker commands..."
|
|
sudo docker-compose up -d --build
|
|
else
|
|
echo "Direct docker access available..."
|
|
docker-compose up -d --build
|
|
fi
|
|
EOF |