chatbot_lookupit / deploy /deploy.sh
Sanjay kumar K
Add GitHub Actions CI/CD pipeline
5bba702
Raw
History Blame Contribute Delete
2.67 kB
#!/usr/bin/env bash
#
# One-shot deploy script for the LookUP IT chatbot on an
# Amazon Linux 2023 Lightsail instance (IPv6-only).
#
# RUN THIS ON THE SERVER (the black "Connect using SSH" browser window),
# NOT on your Windows laptop.
#
# Usage (on the server):
# cd ~/chatbot_lookupit
# bash deploy/deploy.sh
#
set -euo pipefail
DOMAIN="chat.lookupitaibot.com"
EMAIL="lookupit8013@gmail.com" # used for the Let's Encrypt account
APP_DIR="$HOME/chatbot_lookupit"
IMAGE="chatbot-lookupit"
echo "==> 0. Sanity check: are we on Linux?"
if [[ "$(uname -s)" != "Linux" ]]; then
echo "!! This script must run on the Amazon Linux server, not on Windows." >&2
exit 1
fi
echo "==> 1. Installing Docker, git, nginx, certbot ..."
sudo dnf update -y
sudo dnf install -y docker git nginx certbot python3-certbot-nginx
sudo systemctl enable --now docker
sudo systemctl enable --now nginx
sudo usermod -aG docker "$USER" || true
cd "$APP_DIR"
echo "==> 2. Checking for .env (your secrets) ..."
if [[ ! -f .env ]]; then
echo "!! No .env file found in $APP_DIR."
echo " Create it first with: nano .env"
echo " (paste your GROQ_API_KEY, SMTP_*, FIREBASE_CREDENTIALS_JSON, etc.)"
exit 1
fi
echo "==> 3. Building the Docker image ..."
sudo docker build -t "$IMAGE" .
echo "==> 4. (Re)starting the container ..."
sudo docker rm -f chatbot 2>/dev/null || true
sudo docker run -d \
--name chatbot \
--restart unless-stopped \
--env-file .env \
-p 127.0.0.1:7860:7860 \
"$IMAGE"
echo "==> 5. Waiting for the app to come up ..."
sleep 5
if curl -fsS http://127.0.0.1:7860/ >/dev/null; then
echo " App is responding on 127.0.0.1:7860 ✓"
else
echo "!! App did not respond. Check logs: sudo docker logs chatbot"
exit 1
fi
echo "==> 6. Configuring nginx reverse proxy for $DOMAIN ..."
sudo cp deploy/nginx-chatbot.conf /etc/nginx/conf.d/chatbot.conf
sudo sed -i "s/chat\.lookupitaibot\.com/$DOMAIN/g" /etc/nginx/conf.d/chatbot.conf
sudo nginx -t
sudo systemctl reload nginx
echo "==> 7. Requesting HTTPS certificate (Let's Encrypt) ..."
sudo certbot --nginx -d "$DOMAIN" --agree-tos -m "$EMAIL" --redirect -n || {
echo "!! Certbot failed. Make sure:"
echo " - Lightsail IPv6 firewall has ports 80 and 443 open"
echo " - $DOMAIN resolves (AAAA) to this instance"
exit 1
}
echo ""
echo "============================================================"
echo " Done! Your chatbot is live at: https://$DOMAIN"
echo " Update later with: cd ~/chatbot_lookupit && git pull && bash deploy/update.sh"
echo " (or just push to main — GitHub Actions deploys automatically)"
echo "============================================================"