fix pipeline production still use port 8000
All checks were successful
Build, Push and Deploy / build-and-push (push) Successful in 3m15s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 16s
Build, Push and Deploy / deploy-staging (push) Successful in 39s
Build, Push and Deploy / deploy-production (push) Has been skipped
Build, Push and Deploy / cleanup (push) Successful in 1s

This commit is contained in:
eko
2026-04-04 23:12:57 +07:00
parent cdd7fbaecb
commit 481b8fba7e

View File

@@ -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,49 +212,100 @@ 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 "")
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 \
-p 8000:8000 \
-e MODE=prod \
-e MODE=production \
-e APP_ENV=production \
-e APP_DEBUG=false \
$PREVIOUS_IMAGE
echo "Rollback attempted"
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()
@@ -256,8 +313,12 @@ jobs:
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