devsofttech_hms_ci4/middleware-gateway/deploy.sh
DevSoftTech Server 0628f8f813 feat: ABDM OPD Queue + ABHA Register flow + patient ABHA search fix
ABDM OPD Queue (today):
- New EAtriaBridgeConnector: opdQueueFetch/opdTokenCreate/opdTokenUpdateStatus + patch() helper
- New AbdmOpdQueue controller: index/list/fetchQueue/createToken/updateTokenStatus/processScannedToken
  - fetchQueue syncs gateway tokens into abdm_opd_tokens (local DB) and enriches with HMS patient data
  - processScannedToken auto-finds/creates patient_master record from ABHA scan data, marks token CALLED
- New migration: abdm_opd_tokens table (gateway_token_id, source, status, patient_id, opd_id, processed_at)
- New view: abdm/opd_queue.php - reception screen with auto-refresh 30s, HMS Patient column (green row when OPD registered)
- Sidebar: ABDM OPD Queue nav link added
- Routes: AbdmOpdQueue with abdmPermFilter

ABHA Register tab (earlier this session):
- New Abha controller: initiate/verifyOtp/communication/verifyCommOtp/validateAbha/card + autoCreateOrFindPatient
- New views: abha/card.php, partials/abha_create_panel.php, partials/abha_otp_modal.php
- Patient_V.php: ABHA Register tab with 4-method wizard (ABHA number, QR scan, facility QR, mobile OTP)

Patient ABHA search fix:
- Patient::search() now detects ABHA column (abha_id/abha_no/abha/abha_address) and searches by it

ABDM Bridge infrastructure:
- EAtriaBridgeConnector: new connector for e-atria.in ABDM bridge gateway
- AbdmConnectorFactory/Interface updated
- AbdmGatewaySettings controller + view
- SNOMED/CSNOTK terminology service skeleton
- Finance payout OPD consult views
- Migration: AddAbdmPushFieldsToOpdAndPatient, CreateSnomedCoreTables
- Docs: abdm/ API specs, architecture, gateway guides
2026-05-16 04:21:31 +05:30

198 lines
6.9 KiB
Bash

#!/bin/bash
# ABDM Gateway Automated Deployment Script for Ubuntu
# Run: sudo ./deploy.sh
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}ABDM Bridge Gateway - Auto Deploy${NC}"
echo -e "${BLUE}========================================${NC}"
# Configuration
DOMAIN="abdm-bridge.e-atria.in"
APP_DIR="/opt/abdm-gateway"
APP_USER="gateway"
REPO_URL="${REPO_URL:-}" # Set via: export REPO_URL="https://..."
if command -v docker-compose > /dev/null 2>&1; then
COMPOSE_CMD="docker-compose"
else
COMPOSE_CMD="docker compose"
fi
# Check root
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}❌ This script must be run as root${NC}"
echo "Usage: sudo ./deploy.sh"
exit 1
fi
# Step 1: System Update
echo -e "\n${YELLOW}[1/10] Updating system packages...${NC}"
apt-get update > /dev/null 2>&1
apt-get upgrade -y > /dev/null 2>&1
echo -e "${GREEN}✓ System updated${NC}"
# Step 2: Install Dependencies
echo -e "\n${YELLOW}[2/10] Installing dependencies...${NC}"
apt-get install -y curl wget git apt-transport-https ca-certificates gnupg lsb-release > /dev/null 2>&1
echo -e "${GREEN}✓ Dependencies installed${NC}"
# Step 3: Install Docker
echo -e "\n${YELLOW}[3/10] Installing Docker...${NC}"
if ! command -v docker &> /dev/null; then
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 2>/dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update > /dev/null 2>&1
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin > /dev/null 2>&1
fi
echo -e "${GREEN}✓ Docker installed${NC}"
# Step 4: Install Certbot
echo -e "\n${YELLOW}[4/10] Installing Certbot for SSL...${NC}"
apt-get install -y certbot python3-certbot-nginx > /dev/null 2>&1
systemctl stop nginx 2>/dev/null || true
systemctl disable nginx 2>/dev/null || true
echo -e "${GREEN}✓ Certbot installed${NC}"
# Step 5: Create Application User
echo -e "\n${YELLOW}[5/10] Creating application user...${NC}"
if ! id -u $APP_USER > /dev/null 2>&1; then
useradd -m -s /bin/bash $APP_USER
usermod -aG docker $APP_USER
echo -e "${GREEN}✓ User $APP_USER created${NC}"
else
echo -e "${GREEN}✓ User $APP_USER already exists${NC}"
fi
# Step 6: Setup Application Directory
echo -e "\n${YELLOW}[6/10] Setting up application directory...${NC}"
mkdir -p $APP_DIR
if [ ! -z "$REPO_URL" ]; then
cd $APP_DIR
git clone $REPO_URL . 2>/dev/null || git pull origin main 2>/dev/null
else
echo -e "${YELLOW}⚠ REPO_URL not set. Copy middleware files manually to $APP_DIR${NC}"
fi
mkdir -p $APP_DIR/logs
mkdir -p /var/www/certbot
chown -R $APP_USER:$APP_USER $APP_DIR
chmod -R 755 $APP_DIR
echo -e "${GREEN}✓ Application directory ready at $APP_DIR${NC}"
# Step 7: Configure Environment
echo -e "\n${YELLOW}[7/10] Configuring environment...${NC}"
if [ ! -f "$APP_DIR/.env" ]; then
cp $APP_DIR/.env.example $APP_DIR/.env 2>/dev/null || echo "# Copy .env.example to .env and update values" > $APP_DIR/.env
echo -e "${YELLOW}⚠ Please edit $APP_DIR/.env with your credentials${NC}"
else
echo -e "${GREEN}✓ .env already configured${NC}"
fi
# Step 8: Get SSL Certificate
echo -e "\n${YELLOW}[8/10] Getting SSL certificate from Let's Encrypt...${NC}"
if [ ! -d "/etc/letsencrypt/live/$DOMAIN" ]; then
echo "Enter your email for SSL certificate:"
read -p "Email: " SSL_EMAIL
certbot certonly --standalone -d $DOMAIN -m $SSL_EMAIL --agree-tos -n
mkdir -p $APP_DIR/ssl
cp /etc/letsencrypt/live/$DOMAIN/fullchain.pem $APP_DIR/ssl/
cp /etc/letsencrypt/live/$DOMAIN/privkey.pem $APP_DIR/ssl/
chown -R $APP_USER:$APP_USER $APP_DIR/ssl
else
echo -e "${GREEN}✓ SSL certificate already exists${NC}"
fi
# Step 9: Build and Start Containers
echo -e "\n${YELLOW}[9/10] Building and starting Docker containers...${NC}"
cd $APP_DIR
$COMPOSE_CMD build > /dev/null 2>&1
$COMPOSE_CMD up -d
sleep 5
if $COMPOSE_CMD ps | grep -q "abdm-bridge-gateway"; then
echo -e "${GREEN}✓ Containers started successfully${NC}"
else
echo -e "${RED}❌ Failed to start containers${NC}"
$COMPOSE_CMD logs
exit 1
fi
if curl -fsS "https://$DOMAIN/api/v3/health" > /dev/null 2>&1; then
echo -e "${GREEN}✓ Health endpoint responding${NC}"
else
echo -e "${YELLOW}⚠ Containers started but health endpoint did not return 200 yet${NC}"
fi
# Step 10: Setup Auto-Renewal and Systemd
echo -e "\n${YELLOW}[10/10] Setting up auto-renewal and systemd service...${NC}"
# Create renewal script
cat > /usr/local/bin/renew-ssl.sh << 'EOF'
#!/bin/bash
certbot renew --quiet
cp /etc/letsencrypt/live/abdm-bridge.e-atria.in/fullchain.pem /opt/abdm-gateway/ssl/
cp /etc/letsencrypt/live/abdm-bridge.e-atria.in/privkey.pem /opt/abdm-gateway/ssl/
cd /opt/abdm-gateway && if command -v docker-compose > /dev/null 2>&1; then docker-compose restart nginx > /dev/null 2>&1; else docker compose restart nginx > /dev/null 2>&1; fi
EOF
chmod +x /usr/local/bin/renew-ssl.sh
# Add crontab entry
(crontab -l 2>/dev/null | grep -v "renew-ssl.sh"; echo "0 2 * * * /usr/local/bin/renew-ssl.sh") | crontab -
# Create systemd service
cat > /etc/systemd/system/abdm-gateway.service << EOF
[Unit]
Description=ABDM Bridge Gateway
After=docker.service network-online.target
Requires=docker.service
Wants=network-online.target
[Service]
Type=simple
User=$APP_USER
WorkingDirectory=$APP_DIR
ExecStart=/bin/bash -lc 'cd $APP_DIR && if command -v docker-compose > /dev/null 2>&1; then docker-compose up; else docker compose up; fi'
ExecStop=/bin/bash -lc 'cd $APP_DIR && if command -v docker-compose > /dev/null 2>&1; then docker-compose down; else docker compose down; fi'
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable abdm-gateway > /dev/null 2>&1
echo -e "${GREEN}✓ Systemd service configured${NC}"
# Summary
echo -e "\n${GREEN}========================================${NC}"
echo -e "${GREEN}✅ Deployment Complete!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e "${BLUE}Gateway URL:${NC} https://$DOMAIN"
echo -e "${BLUE}Health Check:${NC} curl https://$DOMAIN/api/v3/health"
echo ""
echo -e "${YELLOW}⚠ IMPORTANT:${NC}"
echo "1. Edit .env file with your credentials:"
echo " sudo nano $APP_DIR/.env"
echo ""
echo "2. Restart gateway after updating .env:"
echo " cd $APP_DIR && sudo $COMPOSE_CMD restart abdm-gateway"
echo ""
echo "3. Check logs:"
echo " sudo docker logs abdm-bridge-gateway"
echo ""
echo "4. Service status:"
echo " sudo systemctl status abdm-gateway"
echo ""
echo -e "${BLUE}Documentation:${NC} See $APP_DIR/DEPLOYMENT_GUIDE.md"
echo ""