diff --git a/.gitea/workflows/deploy-dev.yml b/.gitea/workflows/deploy-dev.yml index f18e0ca..e9c50c2 100644 --- a/.gitea/workflows/deploy-dev.yml +++ b/.gitea/workflows/deploy-dev.yml @@ -13,107 +13,102 @@ jobs: image: catthehacker/ubuntu:act-latest steps: + # 1๏ธโƒฃ Checkout code - name: Checkout code shell: sh run: | git clone $GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git /workspace/repo cd /workspace/repo git checkout $GITHUB_REF_NAME - git pull origin $GITHUB_REF_NAME - - name: Build Docker Image + # 2๏ธโƒฃ Build image + - name: Build Docker image shell: sh run: | cd /workspace/repo docker build -t merchbay_admin:dev . docker save merchbay_admin:dev | gzip > merchbay_admin_dev.tar.gz - # ๐Ÿ” TEMP DEBUG (remove after verification) - - name: Debug secrets (safe) - shell: sh - run: | - echo "== Secrets presence check ==" - [ -z "${DEPLOY_SSH_KEY}" ] && echo "โŒ DEPLOY_SSH_KEY EMPTY" && exit 1 - [ -z "${DEPLOY_USER}" ] && echo "โŒ DEPLOY_USER EMPTY" && exit 1 - [ -z "${DEPLOY_HOST}" ] && echo "โŒ DEPLOY_HOST EMPTY" && exit 1 - echo "โœ… Secrets OK" - env: - DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - + # 3๏ธโƒฃ Setup SSH - name: Setup SSH shell: sh + env: + DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} run: | mkdir -p ~/.ssh chmod 700 ~/.ssh - - echo "${DEPLOY_SSH_KEY}" > ~/.ssh/id_ed25519 + echo "$DEPLOY_SSH_KEY" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 + ssh-keyscan -H "$DEPLOY_HOST" >> ~/.ssh/known_hosts - ssh-keyscan -H ${DEPLOY_HOST} >> ~/.ssh/known_hosts - env: - DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - - - name: SSH sanity check - shell: sh - run: | - ssh -i ~/.ssh/id_ed25519 ${DEPLOY_USER}@${DEPLOY_HOST} "whoami" - env: - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - - # ๐Ÿš€ DEPLOY - - name: Deploy to Server + # 4๏ธโƒฃ Upload artifacts + - name: Upload image and compose shell: sh env: DEPLOY_USER: ${{ secrets.DEPLOY_USER }} DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} run: | - cd /workspace/repo - scp -i ~/.ssh/id_ed25519 \ - merchbay_admin_dev.tar.gz docker-compose.yml \ - ${DEPLOY_USER}@${DEPLOY_HOST}:/tmp/ + merchbay_admin_dev.tar.gz \ + docker-compose.yml \ + $DEPLOY_USER@$DEPLOY_HOST:/tmp/ - ssh -i ~/.ssh/id_ed25519 ${DEPLOY_USER}@${DEPLOY_HOST} << 'EOF' + # 5๏ธโƒฃ Deploy on server + - name: Deploy on server + shell: sh + env: + DEPLOY_USER: ${{ secrets.DEPLOY_USER }} + DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} + run: | + ssh -i ~/.ssh/id_ed25519 $DEPLOY_USER@$DEPLOY_HOST << 'EOF' set -e DEPLOY_DIR="/var/www/apps/merchbay_admin_dev" - mkdir -p "$DEPLOY_DIR" - cd /tmp - docker load < merchbay_admin_dev.tar.gz - cp docker-compose.yml "$DEPLOY_DIR/" + echo "๐Ÿ“ฆ Loading image" + docker load < /tmp/merchbay_admin_dev.tar.gz + + echo "๐Ÿ“„ Updating compose file" + cp /tmp/docker-compose.yml "$DEPLOY_DIR/" cd "$DEPLOY_DIR" - docker compose down || true - docker image prune -f - + echo "๐ŸŒ Ensure Traefik network" docker network inspect traefik-public >/dev/null 2>&1 || \ docker network create traefik-public + echo "๐Ÿš€ Starting containers" export DOMAIN=dev-admin.merchbay.app export APP_URL=https://dev-admin.merchbay.app - docker compose up -d - sleep 10 - docker compose exec -T app php artisan migrate --force - docker compose exec -T app php artisan config:cache - docker compose exec -T app php artisan route:cache - docker compose exec -T app php artisan view:cache + echo "โณ Waiting for app container" + sleep 15 + if docker ps --format '{{.Names}}' | grep -q merchbay_admin_app; then + docker compose exec -T app php artisan migrate --force + docker compose exec -T app php artisan config:clear + docker compose exec -T app php artisan config:cache + docker compose exec -T app php artisan route:cache + docker compose exec -T app php artisan view:cache + else + echo "โŒ App container not running" + docker compose logs + exit 1 + fi + + echo "๐Ÿงน Cleanup" rm -f /tmp/merchbay_admin_dev.tar.gz /tmp/docker-compose.yml + docker image prune -f - echo "โœ… Development deployment completed" + echo "โœ… Deployment completed" EOF - - name: Health Check + # 6๏ธโƒฃ Health check + - name: Health check shell: sh run: | sleep 10 - curl -f https://dev-admin.merchbay.app + curl -f https://dev-admin.merchbay.app \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index f99dbac..c13fa0d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,6 @@ services: app: - build: - context: . - dockerfile: Dockerfile + image: merchbay_admin:dev container_name: merchbay_admin_app restart: unless-stopped environment: