From 481b8fba7e62b8344a3a2cb8780155373279dcda Mon Sep 17 00:00:00 2001 From: eko Date: Sat, 4 Apr 2026 23:12:57 +0700 Subject: [PATCH] fix pipeline production still use port 8000 --- .gitea/workflows/pipeline.yml | 115 ++++++++++++++++++++++++++-------- 1 file changed, 88 insertions(+), 27 deletions(-) diff --git a/.gitea/workflows/pipeline.yml b/.gitea/workflows/pipeline.yml index 8ffc9bf1..96fe95df 100644 --- a/.gitea/workflows/pipeline.yml +++ b/.gitea/workflows/pipeline.yml @@ -183,7 +183,13 @@ jobs: docker ps --filter name=kulakpos_web_prod # Create backup of current deployment info - docker inspect kulakpos_web_prod > /tmp/kulakpos_backup_$(date +%Y%m%d_%H%M%S).json || true + mkdir -p /opt/kulakpos/backups + docker inspect kulakpos_web_prod > /opt/kulakpos/backups/kulakpos_backup_$(date +%Y%m%d_%H%M%S).json || true + + # Backup .env file + if [ -f "/opt/kulakpos/.env" ]; then + cp /opt/kulakpos/.env /opt/kulakpos/backups/.env_backup_$(date +%Y%m%d_%H%M%S) + fi # Pull the specified image echo "Pulling image: kode.sadateknologi.site/${{ gitea.repository_owner }}/kulakpos_web:$IMAGE_TAG" @@ -194,11 +200,11 @@ jobs: docker stop kulakpos_web_prod || true docker rm kulakpos_web_prod || true - # Run new container - echo "Starting new container..." + # Run new container (using PHP's built-in server on port 8000 like staging) + echo "Starting new production container on port 8000..." docker run -d \ --restart unless-stopped \ - --health-cmd="pgrep php-fpm" \ + --health-cmd="curl -f http://localhost:8000 || exit 1" \ --health-interval=30s \ --health-timeout=10s \ --health-start-period=40s \ @@ -206,58 +212,113 @@ jobs: --name kulakpos_web_prod \ --network="host" \ -v /opt/kulakpos/.env:/var/www/html/.env \ - -p 9000:9000 \ - -e MODE=prod \ + -e MODE=production \ -e APP_ENV=production \ + -e APP_DEBUG=false \ + -e APP_URL=https://prod-test.kulakpos.id \ kode.sadateknologi.site/${{ gitea.repository_owner }}/kulakpos_web:$IMAGE_TAG - # Check if container is running + # Wait for container to be ready + echo "Waiting for container to be ready..." sleep 10 + + # Check if container is running if docker ps | grep -q kulakpos_web_prod; then echo "✅ Production deployment successful!" + echo "" + echo "Container status:" + docker ps --filter name=kulakpos_web_prod --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" + echo "" echo "Container logs (last 20 lines):" docker logs --tail 20 kulakpos_web_prod + + # Test the application locally + echo "" + echo "Testing application locally..." + curl -f http://localhost:8000 > /dev/null 2>&1 && echo "✅ Application is responding on port 8000" || echo "⚠️ Application not responding on port 8000" else echo "❌ Production deployment failed! Checking logs:" docker logs kulakpos_web_prod || echo "No logs available" # Attempt rollback to previous version if available + echo "" echo "Attempting rollback to previous version..." - PREVIOUS_IMAGE=$(docker inspect kulakpos_web_prod --format='{{.Config.Image}}' 2>/dev/null || echo "") - if [ -n "$PREVIOUS_IMAGE" ] && [ "$PREVIOUS_IMAGE" != "kode.sadateknologi.site/${{ gitea.repository_owner }}/kulakpos_web:$IMAGE_TAG" ]; then - docker run -d \ - --restart unless-stopped \ - --name kulakpos_web_prod \ - --network="host" \ - -v /opt/kulakpos/.env:/var/www/html/.env \ - -p 8000:8000 \ - -e MODE=prod \ - -e APP_ENV=production \ - $PREVIOUS_IMAGE - echo "Rollback attempted" + PREVIOUS_BACKUP=$(ls -t /opt/kulakpos/backups/kulakpos_backup_*.json 2>/dev/null | head -1) + if [ -f "$PREVIOUS_BACKUP" ]; then + PREVIOUS_IMAGE=$(jq -r '.[0].Config.Image' $PREVIOUS_BACKUP 2>/dev/null || echo "") + if [ -n "$PREVIOUS_IMAGE" ] && [ "$PREVIOUS_IMAGE" != "kode.sadateknologi.site/${{ gitea.repository_owner }}/kulakpos_web:$IMAGE_TAG" ]; then + echo "Rolling back to: $PREVIOUS_IMAGE" + docker run -d \ + --restart unless-stopped \ + --health-cmd="curl -f http://localhost:8000 || exit 1" \ + --health-interval=30s \ + --health-timeout=10s \ + --health-start-period=40s \ + --health-retries=3 \ + --name kulakpos_web_prod \ + --network="host" \ + -v /opt/kulakpos/.env:/var/www/html/.env \ + -e MODE=production \ + -e APP_ENV=production \ + -e APP_DEBUG=false \ + $PREVIOUS_IMAGE + echo "Rollback completed" + fi fi exit 1 fi EOF - # - name: Verify Production Deployment - # run: | - # ssh kulakpos_prod "curl -f http://localhost:8000/health || curl -f http://localhost:8000 || echo 'Service is running but health check endpoint not configured'" - # echo "✅ Production deployment verified!" - - name: Verify Production Deployment run: | - ssh kulakpos_prod "docker ps --filter 'name=kulakpos_web_prod' --format '{{.Status}}' | grep -q healthy" - echo "✅ Production deployment verified!" - + ssh kulakpos_prod << 'EOF' + echo "🔍 Verifying production deployment..." + + # Check container health + if docker ps --filter "name=kulakpos_web_prod" --format "{{.Status}}" | grep -q "Up"; then + echo "✅ Container is running" + else + echo "❌ Container is not running" + exit 1 + fi + + # Check if port 8000 is listening + if ss -tlnp | grep -q ":8000"; then + echo "✅ Application is listening on port 8000" + else + echo "❌ Application is not listening on port 8000" + exit 1 + fi + + # Test application response + HTTP_CODE=$(curl -k -s -o /dev/null -w "%{http_code}" http://localhost:8000) + if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "302" ]; then + echo "✅ Application is responding with HTTP $HTTP_CODE" + else + echo "❌ Application returned HTTP $HTTP_CODE" + exit 1 + fi + + # Check if .env is properly mounted + docker exec kulakpos_web_prod test -f /var/www/html/.env && echo "✅ .env file is mounted" || echo "⚠️ .env file not found" + + echo "" + echo "🎉 Production deployment verification complete!" + echo "Application is running at: https://prod-test.kulakpos.id" + EOF + - name: Send Deployment Notification if: always() run: | STATUS="${{ job.status }}" if [ "$STATUS" = "success" ]; then echo "✅ Production deployment completed successfully!" + echo "🌐 Application is now running at: https://prod-test.kulakpos.id" + echo "🐳 Container name: kulakpos_web_prod" + echo "🔌 Port: 8000 (internal) -> 80/443 (Nginx proxy)" else echo "❌ Production deployment failed!" + echo "Please check the logs above for details" exit 1 fi