hosting-platform/deploy.sh

116 lines
3.0 KiB
Bash

#!/bin/bash
# Deployment script for argeict.net server
# This script deploys backend and frontend to the production server
set -e # Exit on error
SERVER="root@argeict.net"
BACKEND_DIR="/var/www/hosting-backend"
FRONTEND_DIR="/var/www/hosting-frontend"
echo "🚀 Starting deployment to argeict.net..."
# 1. Deploy Backend
echo ""
echo "📦 Deploying Backend..."
ssh $SERVER "mkdir -p $BACKEND_DIR"
# Copy backend files
rsync -avz --exclude='venv' --exclude='__pycache__' --exclude='*.pyc' --exclude='hosting.db' \
backend/ $SERVER:$BACKEND_DIR/
# Copy .env.example as template
scp backend/.env.example $SERVER:$BACKEND_DIR/.env.example
echo "✅ Backend files copied"
# Install dependencies and restart backend
ssh $SERVER << 'ENDSSH'
cd /var/www/hosting-backend
# Create venv if not exists
if [ ! -d "venv" ]; then
echo "Creating virtual environment..."
python3 -m venv venv
fi
# Activate venv and install dependencies
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
# Check if .env exists, if not create from example
if [ ! -f ".env" ]; then
echo "Creating .env file..."
cp .env.example .env
# Generate random encryption key
ENCRYPTION_KEY=$(python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())")
sed -i "s|ENCRYPTION_KEY=.*|ENCRYPTION_KEY=$ENCRYPTION_KEY|" .env
echo "⚠️ Please edit .env file and set DATABASE_URL and other settings"
fi
# Initialize database if needed
if [ ! -f "hosting.db" ]; then
echo "Initializing database..."
python3 -c "from app.main import app, db; app.app_context().push(); db.create_all()"
fi
# Restart backend service (if using systemd)
if systemctl is-active --quiet hosting-backend; then
echo "Restarting backend service..."
sudo systemctl restart hosting-backend
else
echo "⚠️ Backend service not found. Please start manually or create systemd service."
fi
echo "✅ Backend deployed"
ENDSSH
# 2. Deploy Frontend
echo ""
echo "📦 Deploying Frontend..."
# Build frontend locally first
echo "Building frontend..."
cd frontend
npm install
npm run build
cd ..
# Copy built files to server
ssh $SERVER "mkdir -p $FRONTEND_DIR"
rsync -avz --delete frontend/dist/ $SERVER:$FRONTEND_DIR/
echo "✅ Frontend deployed"
# 3. Update Nginx configuration (if needed)
echo ""
echo "🔧 Checking Nginx configuration..."
ssh $SERVER << 'ENDSSH'
# Reload nginx if config changed
if nginx -t 2>/dev/null; then
echo "Reloading Nginx..."
sudo systemctl reload nginx
echo "✅ Nginx reloaded"
else
echo "⚠️ Nginx config test failed. Please check configuration."
fi
ENDSSH
echo ""
echo "✅ Deployment completed!"
echo ""
echo "🌐 URLs:"
echo " Frontend: https://argeict.net"
echo " API: https://api.argeict.net"
echo " Gitea: https://gitea.argeict.net"
echo ""
echo "📝 Next steps:"
echo " 1. SSH to server and check .env file: ssh $SERVER"
echo " 2. Set DATABASE_URL in /var/www/hosting-backend/.env"
echo " 3. Check backend logs: journalctl -u hosting-backend -f"
echo " 4. Test API: curl https://api.argeict.net/health"