diff --git a/.gitea/workflows/deploy-dev.yml b/.gitea/workflows/deploy-dev.yml index f00a420..3179e91 100644 --- a/.gitea/workflows/deploy-dev.yml +++ b/.gitea/workflows/deploy-dev.yml @@ -13,37 +13,64 @@ jobs: steps: - name: Checkout code run: | - #!/bin/sh git clone $GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git /workspace/repo || true cd /workspace/repo git fetch origin $GITHUB_REF_NAME git checkout $GITHUB_REF_NAME git pull origin $GITHUB_REF_NAME - - name: Setup SSH Key + - name: Build Docker Image + run: | + cd /workspace/repo + docker build -t merchbay_admin:dev . + docker save merchbay_admin:dev | gzip > merchbay_admin_dev.tar.gz + + - name: Setup SSH and Deploy run: | - #!/bin/sh mkdir -p ~/.ssh printf '%s' "$DEPLOY_SSH_KEY" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key - env: - DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} - - - name: Transfer Files to Development Server - run: | - #!/bin/sh + cd /workspace/repo scp -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key merchbay_admin_dev.tar.gz docker-compose.yml "$DEPLOY_USER@$DEPLOY_HOST:/tmp/" + + ssh -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key "$DEPLOY_USER@$DEPLOY_HOST" " + DEPLOY_DIR='/var/www/merchbay_admin_dev' + mkdir -p \$DEPLOY_DIR + cd /tmp + docker load < merchbay_admin_dev.tar.gz + cp docker-compose.yml \$DEPLOY_DIR/ + cd \$DEPLOY_DIR + + cat > .env <<'ENVEOF' + APP_ENV=staging + APP_DEBUG=false + APP_URL=https://dev.merchbay.app + DB_HOST=$DEV_DB_HOST + DB_PORT=${DEV_DB_PORT:-3306} + DB_DATABASE=$DEV_DB_DATABASE + DB_USERNAME=$DEV_DB_USERNAME + DB_PASSWORD=$DEV_DB_PASSWORD + DOMAIN=dev.merchbay.app + ENVEOF + + docker compose down || true + docker image prune -f + docker network inspect traefik-public >/dev/null 2>&1 || docker network create traefik-public + export DOMAIN=dev.merchbay.app + export APP_URL=https://dev.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 + rm -f /tmp/merchbay_admin_dev.tar.gz /tmp/docker-compose.yml + echo 'Development deployment completed successfully!' + echo 'Application available at: https://dev.merchbay.app' + " env: - DEPLOY_USER: ${{ secrets.DEPLOY_USER }} - DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} - - - name: Deploy to Development Server - run: | - #!/bin/sh - ssh -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key "$DEPLOY_USER@$DEPLOY_HOST" << 'ENDSSH' - #!/bin/sh - env: + DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} DEPLOY_USER: ${{ secrets.DEPLOY_USER }} DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} DEV_DB_HOST: ${{ secrets.DEV_DB_HOST }} @@ -51,71 +78,8 @@ jobs: DEV_DB_DATABASE: ${{ secrets.DEV_DB_DATABASE }} DEV_DB_USERNAME: ${{ secrets.DEV_DB_USERNAME }} DEV_DB_PASSWORD: ${{ secrets.DEV_DB_PASSWORD }} - # Set deployment directory for dev - DEPLOY_DIR="/var/www/merchbay_admin_dev" - - # Create deployment directory if it doesn't exist - mkdir -p $DEPLOY_DIR - - # Load the Docker image - cd /tmp - docker load < merchbay_admin_dev.tar.gz - - # Copy docker-compose.yml to deployment directory - cp docker-compose.yml $DEPLOY_DIR/ - - # Navigate to deployment directory - cd $DEPLOY_DIR - - # Update environment file for dev - cat > .env << EOF - APP_ENV=staging - APP_DEBUG=false - APP_URL=https://dev.merchbay.app - DB_HOST=${{ secrets.DEV_DB_HOST }} - DB_PORT=${{ secrets.DEV_DB_PORT || 3306 }} - DB_DATABASE=${{ secrets.DEV_DB_DATABASE }} - DB_USERNAME=${{ secrets.DEV_DB_USERNAME }} - DB_PASSWORD=${{ secrets.DEV_DB_PASSWORD }} - DOMAIN=dev.merchbay.app - EOF - - # Stop existing container - docker compose down || true - - # Remove old image - docker image prune -f - - # Ensure Traefik network exists - docker network inspect traefik-public >/dev/null 2>&1 || docker network create traefik-public - - # Update docker-compose for dev - export DOMAIN=dev.merchbay.app - export APP_URL=https://dev.merchbay.app - - # Start the application - docker compose up -d - - # Wait for container to be ready - sleep 10 - - # Run migrations - docker compose exec -T app php artisan migrate --force - - # Clear and cache configuration - 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 - - # Cleanup - rm -f /tmp/merchbay_admin_dev.tar.gz /tmp/docker-compose.yml - - echo "Development deployment completed successfully!" - echo "Application available at: https://dev.merchbay.app" - ENDSSH - name: Health Check run: | - #!/bin/sh sleep 10 curl -f https://dev.merchbay.app || exit 1 diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 5aefa26..cabbcb5 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -10,13 +10,10 @@ on: jobs: deploy: runs-on: ubuntu-latest - # If using self-hosted runner, change to: - # runs-on: self-hosted steps: - name: Checkout code run: | - #!/bin/sh git clone $GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git /workspace/repo || true cd /workspace/repo git fetch origin $GITHUB_REF_NAME @@ -25,35 +22,56 @@ jobs: - name: Build Docker Image run: | - #!/bin/sh cd /workspace/repo docker build -t merchbay_admin:latest . docker save merchbay_admin:latest | gzip > merchbay_admin.tar.gz - - name: Setup SSH Key + - name: Setup SSH and Deploy run: | - #!/bin/sh mkdir -p ~/.ssh printf '%s' "$PROD_DEPLOY_SSH_KEY" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key - env: - PROD_DEPLOY_SSH_KEY: ${{ secrets.PROD_DEPLOY_SSH_KEY }} - - - name: Transfer Files to Production Server - run: | - #!/bin/sh + cd /workspace/repo scp -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key merchbay_admin.tar.gz docker-compose.yml "$PROD_DEPLOY_USER@$PROD_DEPLOY_HOST:/tmp/" + + ssh -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key "$PROD_DEPLOY_USER@$PROD_DEPLOY_HOST" " + DEPLOY_DIR='/var/www/merchbay_admin' + mkdir -p \$DEPLOY_DIR + cd /tmp + docker load < merchbay_admin.tar.gz + cp docker-compose.yml \$DEPLOY_DIR/ + cd \$DEPLOY_DIR + + cat > .env <<'ENVEOF' + APP_ENV=production + APP_DEBUG=false + APP_URL=https://merchbay.com + DB_HOST=$PROD_DB_HOST + DB_PORT=${PROD_DB_PORT:-3306} + DB_DATABASE=$PROD_DB_DATABASE + DB_USERNAME=$PROD_DB_USERNAME + DB_PASSWORD=$PROD_DB_PASSWORD + DOMAIN=merchbay.com + ENVEOF + + docker compose down || true + docker image prune -f + docker network inspect traefik-public >/dev/null 2>&1 || docker network create traefik-public + export DOMAIN=merchbay.com + export APP_URL=https://merchbay.com + 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 + rm -f /tmp/merchbay_admin.tar.gz /tmp/docker-compose.yml + echo 'Production deployment completed successfully!' + echo 'Application available at: https://merchbay.com' + " env: - PROD_DEPLOY_USER: ${{ secrets.PROD_DEPLOY_USER }} - PROD_DEPLOY_HOST: ${{ secrets.PROD_DEPLOY_HOST }} - - - name: Deploy to Production Server - run: | - #!/bin/sh - ssh -o StrictHostKeyChecking=no -i ~/.ssh/deploy_key "$PROD_DEPLOY_USER@$PROD_DEPLOY_HOST" << 'ENDSSH' - #!/bin/sh - env: + PROD_DEPLOY_SSH_KEY: ${{ secrets.PROD_DEPLOY_SSH_KEY }} PROD_DEPLOY_USER: ${{ secrets.PROD_DEPLOY_USER }} PROD_DEPLOY_HOST: ${{ secrets.PROD_DEPLOY_HOST }} PROD_DB_HOST: ${{ secrets.PROD_DB_HOST }} @@ -61,71 +79,8 @@ jobs: PROD_DB_DATABASE: ${{ secrets.PROD_DB_DATABASE }} PROD_DB_USERNAME: ${{ secrets.PROD_DB_USERNAME }} PROD_DB_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }} - # Set deployment directory for production - DEPLOY_DIR="/var/www/merchbay_admin" - - # Create deployment directory if it doesn't exist - mkdir -p $DEPLOY_DIR - - # Load the Docker image - cd /tmp - docker load < merchbay_admin.tar.gz - - # Copy docker-compose.yml to deployment directory - cp docker-compose.yml $DEPLOY_DIR/ - - # Navigate to deployment directory - cd $DEPLOY_DIR - - # Update environment file for production - cat > .env << EOF - APP_ENV=production - APP_DEBUG=false - APP_URL=https://merchbay.com - DB_HOST=${{ secrets.PROD_DB_HOST }} - DB_PORT=${{ secrets.PROD_DB_PORT || 3306 }} - DB_DATABASE=${{ secrets.PROD_DB_DATABASE }} - DB_USERNAME=${{ secrets.PROD_DB_USERNAME }} - DB_PASSWORD=${{ secrets.PROD_DB_PASSWORD }} - DOMAIN=merchbay.com - EOF - - # Stop existing container (disconnect from Traefik network gracefully) - docker compose down || true - - # Remove old image (optional, keeps only latest) - docker image prune -f - - # Ensure Traefik network exists - docker network inspect traefik-public >/dev/null 2>&1 || docker network create traefik-public - - # Update docker-compose for production - export DOMAIN=merchbay.com - export APP_URL=https://merchbay.com - - # Start the application (will auto-connect to Traefik with paid SSL) - docker compose up -d - - # Wait for container to be ready - sleep 10 - - # Run migrations - docker compose exec -T app php artisan migrate --force - - # Clear and cache configuration - 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 - - # Cleanup - rm -f /tmp/merchbay_admin.tar.gz /tmp/docker-compose.yml - - echo "Production deployment completed successfully!" - echo "Application available at: https://merchbay.com" - ENDSSH - name: Health Check run: | - #!/bin/sh sleep 10 curl -f https://merchbay.com || exit 1