|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
set -e |
|
|
|
|
|
echo "🚀 Cidadão.AI Deploy Script" |
|
|
echo "==========================" |
|
|
|
|
|
|
|
|
if [ -z "$1" ]; then |
|
|
echo "Usage: ./deploy.sh [local|render|railway|k8s|vps]" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
DEPLOY_TARGET=$1 |
|
|
|
|
|
case $DEPLOY_TARGET in |
|
|
"local") |
|
|
echo "📦 Deploying locally with Docker Compose..." |
|
|
|
|
|
|
|
|
if [ ! -f .env ]; then |
|
|
echo "Creating .env file..." |
|
|
cp .env.example .env |
|
|
echo "⚠️ Please edit .env with your credentials" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
|
|
|
docker-compose -f docker-compose.production.yml up -d --build |
|
|
|
|
|
|
|
|
echo "Running database migrations..." |
|
|
docker-compose -f docker-compose.production.yml exec api python -m alembic upgrade head |
|
|
|
|
|
echo "✅ Local deployment complete!" |
|
|
echo "🌐 API available at http://localhost:8000" |
|
|
;; |
|
|
|
|
|
"render") |
|
|
echo "☁️ Deploying to Render..." |
|
|
|
|
|
|
|
|
if ! command -v render &> /dev/null; then |
|
|
echo "Installing Render CLI..." |
|
|
pip install render-cli |
|
|
fi |
|
|
|
|
|
|
|
|
render up |
|
|
|
|
|
echo "✅ Render deployment initiated!" |
|
|
;; |
|
|
|
|
|
"railway") |
|
|
echo "🚂 Deploying to Railway..." |
|
|
|
|
|
|
|
|
if ! command -v railway &> /dev/null; then |
|
|
echo "Please install Railway CLI: https://docs.railway.app/develop/cli" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
|
|
|
railway login |
|
|
railway up |
|
|
|
|
|
echo "✅ Railway deployment complete!" |
|
|
;; |
|
|
|
|
|
"k8s") |
|
|
echo "☸️ Deploying to Kubernetes..." |
|
|
|
|
|
|
|
|
if ! command -v kubectl &> /dev/null; then |
|
|
echo "kubectl not found. Please install it first." |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
|
|
|
kubectl create namespace cidadao-ai --dry-run=client -o yaml | kubectl apply -f - |
|
|
|
|
|
|
|
|
echo "Creating secrets..." |
|
|
kubectl create secret generic cidadao-secrets \ |
|
|
--from-literal=database-url="${DATABASE_URL}" \ |
|
|
--from-literal=redis-url="${REDIS_URL}" \ |
|
|
--from-literal=maritaca-api-key="${MARITACA_API_KEY}" \ |
|
|
--namespace=cidadao-ai \ |
|
|
--dry-run=client -o yaml | kubectl apply -f - |
|
|
|
|
|
|
|
|
kubectl apply -f k8s/ -n cidadao-ai |
|
|
|
|
|
echo "✅ Kubernetes deployment complete!" |
|
|
;; |
|
|
|
|
|
"vps") |
|
|
echo "🖥️ Deploying to VPS..." |
|
|
|
|
|
|
|
|
if [ -z "$VPS_HOST" ]; then |
|
|
echo "Please set VPS_HOST environment variable" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
|
|
|
echo "Copying files to VPS..." |
|
|
rsync -avz --exclude='.git' --exclude='__pycache__' --exclude='.env' . $VPS_HOST:~/cidadao-ai/ |
|
|
|
|
|
|
|
|
ssh $VPS_HOST << 'ENDSSH' |
|
|
cd ~/cidadao-ai |
|
|
|
|
|
|
|
|
if ! command -v docker &> /dev/null; then |
|
|
curl -fsSL https://get.docker.com | sh |
|
|
sudo usermod -aG docker $USER |
|
|
fi |
|
|
|
|
|
|
|
|
if ! command -v docker-compose &> /dev/null; then |
|
|
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
|
|
sudo chmod +x /usr/local/bin/docker-compose |
|
|
fi |
|
|
|
|
|
|
|
|
docker-compose -f docker-compose.production.yml up -d --build |
|
|
|
|
|
|
|
|
sudo apt-get update |
|
|
sudo apt-get install -y nginx certbot python3-certbot-nginx |
|
|
|
|
|
echo "VPS setup complete!" |
|
|
ENDSSH |
|
|
|
|
|
echo "✅ VPS deployment complete!" |
|
|
;; |
|
|
|
|
|
*) |
|
|
echo "❌ Unknown deploy target: $DEPLOY_TARGET" |
|
|
echo "Options: local, render, railway, k8s, vps" |
|
|
exit 1 |
|
|
;; |
|
|
esac |
|
|
|
|
|
echo "" |
|
|
echo "🎉 Deployment finished!" |
|
|
echo "" |
|
|
echo "Next steps:" |
|
|
echo "1. Check application logs" |
|
|
echo "2. Run health checks" |
|
|
echo "3. Configure monitoring" |
|
|
echo "4. Setup backups" |