chitfund/old_docs_backup_20251105_20.../deploy.sh

335 lines
11 KiB
Bash
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
###############################################################################
# LuckyChit Automated Deployment Script for Proxmox LXC
# Author: LuckyChit Team
# Description: Automates the deployment of LuckyChit app on Ubuntu LXC
###############################################################################
set -e # Exit on error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Functions
print_info() {
echo -e "${BLUE} $1${NC}"
}
print_success() {
echo -e "${GREEN}$1${NC}"
}
print_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
print_error() {
echo -e "${RED}$1${NC}"
}
print_header() {
echo ""
echo -e "${GREEN}╔════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ LuckyChit Deployment Script for Proxmox LXC ║${NC}"
echo -e "${GREEN}╚════════════════════════════════════════════════════════╝${NC}"
echo ""
}
check_root() {
if [ "$EUID" -ne 0 ]; then
print_error "Please run as root or with sudo"
exit 1
fi
}
###############################################################################
# Main Installation
###############################################################################
print_header
# Check if running as root
check_root
# Get configuration from user
print_info "Starting interactive setup..."
echo ""
read -p "Enter database password for PostgreSQL: " DB_PASSWORD
read -p "Enter JWT secret (min 32 characters): " JWT_SECRET
read -p "Enter your domain name (or press Enter to skip): " DOMAIN_NAME
read -p "Enter your server IP address: " SERVER_IP
echo ""
print_info "Configuration received. Starting installation..."
echo ""
###############################################################################
# 1. System Update
###############################################################################
print_info "Step 1/10: Updating system..."
apt update && apt upgrade -y
apt install -y curl wget git nano ufw htop postgresql postgresql-contrib nginx
print_success "System updated"
###############################################################################
# 2. Create Application User
###############################################################################
print_info "Step 2/10: Creating application user..."
if id "luckychit" &>/dev/null; then
print_warning "User 'luckychit' already exists"
else
adduser --disabled-password --gecos "" luckychit
usermod -aG sudo luckychit
print_success "User 'luckychit' created"
fi
###############################################################################
# 3. Install Node.js
###############################################################################
print_info "Step 3/10: Installing Node.js v20..."
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
print_success "Node.js $(node --version) installed"
###############################################################################
# 4. Install PM2
###############################################################################
print_info "Step 4/10: Installing PM2..."
npm install -g pm2
print_success "PM2 installed"
###############################################################################
# 5. Setup PostgreSQL
###############################################################################
print_info "Step 5/10: Configuring PostgreSQL..."
systemctl start postgresql
systemctl enable postgresql
sudo -u postgres psql << EOF
CREATE DATABASE luckychit;
CREATE USER luckychit WITH PASSWORD '$DB_PASSWORD';
GRANT ALL PRIVILEGES ON DATABASE luckychit TO luckychit;
EOF
print_success "PostgreSQL configured"
###############################################################################
# 6. Install Flutter
###############################################################################
print_info "Step 6/10: Installing Flutter..."
apt install -y clang cmake ninja-build pkg-config libgtk-3-dev unzip
if [ ! -d "/opt/flutter" ]; then
cd /opt
git clone https://github.com/flutter/flutter.git -b stable
chown -R luckychit:luckychit /opt/flutter
print_success "Flutter installed"
else
print_warning "Flutter already installed"
fi
# Add Flutter to PATH for all users
if ! grep -q "flutter/bin" /etc/profile.d/flutter.sh 2>/dev/null; then
echo 'export PATH="$PATH:/opt/flutter/bin"' > /etc/profile.d/flutter.sh
chmod +x /etc/profile.d/flutter.sh
fi
export PATH="$PATH:/opt/flutter/bin"
flutter config --enable-web
print_success "Flutter configured for web"
###############################################################################
# 7. Create Directory Structure
###############################################################################
print_info "Step 7/10: Creating directory structure..."
mkdir -p /home/luckychit/apps
mkdir -p /home/luckychit/logs
mkdir -p /home/luckychit/backups
chown -R luckychit:luckychit /home/luckychit
print_success "Directories created"
###############################################################################
# 8. Setup Firewall
###############################################################################
print_info "Step 8/10: Configuring firewall..."
ufw --force enable
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
print_success "Firewall configured"
###############################################################################
# 9. Setup Nginx (Basic Config)
###############################################################################
print_info "Step 9/10: Configuring Nginx..."
cat > /etc/nginx/sites-available/luckychit << 'NGINX_EOF'
server {
listen 80;
server_name _;
location /api/ {
proxy_pass http://localhost:3000/api/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /health {
proxy_pass http://localhost:3000/health;
access_log off;
}
location / {
root /var/www/luckychit;
index index.html;
try_files $uri $uri/ /index.html;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
root /var/www/luckychit;
expires 1y;
add_header Cache-Control "public, immutable";
}
}
NGINX_EOF
ln -sf /etc/nginx/sites-available/luckychit /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx
print_success "Nginx configured"
###############################################################################
# 10. Create .env Template
###############################################################################
print_info "Step 10/10: Creating environment file template..."
mkdir -p /home/luckychit/apps/chitfund/backend
cat > /home/luckychit/apps/chitfund/backend/.env << ENV_EOF
# Server Configuration
NODE_ENV=production
PORT=3000
# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_NAME=luckychit
DB_USER=luckychit
DB_PASSWORD=$DB_PASSWORD
DATABASE_URL=postgresql://luckychit:$DB_PASSWORD@localhost:5432/luckychit
# JWT Configuration
JWT_SECRET=$JWT_SECRET
JWT_EXPIRES_IN=24h
# CORS Configuration
ALLOWED_ORIGINS=http://$SERVER_IP,https://$DOMAIN_NAME
# Rate Limiting
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100
# Logging
LOG_LEVEL=info
ENV_EOF
chown luckychit:luckychit /home/luckychit/apps/chitfund/backend/.env
chmod 600 /home/luckychit/apps/chitfund/backend/.env
print_success "Environment file created"
###############################################################################
# Create Backup Script
###############################################################################
print_info "Creating backup script..."
cat > /home/luckychit/backup-db.sh << 'BACKUP_EOF'
#!/bin/bash
BACKUP_DIR="/home/luckychit/backups"
DATE=$(date +%Y%m%d_%H%M%S)
FILENAME="luckychit_backup_$DATE.sql"
pg_dump -U luckychit -h localhost luckychit > "$BACKUP_DIR/$FILENAME"
gzip "$BACKUP_DIR/$FILENAME"
# Keep only last 7 days of backups
find $BACKUP_DIR -name "luckychit_backup_*.sql.gz" -mtime +7 -delete
echo "Backup completed: $FILENAME.gz"
BACKUP_EOF
chmod +x /home/luckychit/backup-db.sh
chown luckychit:luckychit /home/luckychit/backup-db.sh
# Add to crontab for luckychit user
(crontab -u luckychit -l 2>/dev/null; echo "0 2 * * * /home/luckychit/backup-db.sh") | crontab -u luckychit -
print_success "Backup script created (runs daily at 2 AM)"
###############################################################################
# Installation Complete
###############################################################################
echo ""
echo -e "${GREEN}╔════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ Installation Complete! 🎉 ║${NC}"
echo -e "${GREEN}╚════════════════════════════════════════════════════════╝${NC}"
echo ""
print_success "LuckyChit infrastructure is ready!"
echo ""
print_info "Next Steps:"
echo ""
echo " 1. Upload your application code to:"
echo " /home/luckychit/apps/chitfund/"
echo ""
echo " 2. Deploy the backend:"
echo " cd /home/luckychit/apps/chitfund/backend"
echo " npm install --production"
echo " node create-db.js"
echo " pm2 start src/server.js --name luckychit-api"
echo " pm2 startup systemd -u luckychit --hp /home/luckychit"
echo " pm2 save"
echo ""
echo " 3. Build and deploy the frontend:"
echo " cd /home/luckychit/apps/chitfund/luckychit"
echo " flutter pub get"
echo " flutter build web --release"
echo " sudo cp -r build/web/* /var/www/luckychit/"
echo ""
echo " 4. Access your application:"
echo " Frontend: http://$SERVER_IP"
echo " API Health: http://$SERVER_IP/health"
echo ""
echo " 5. (Optional) Setup SSL:"
echo " apt install certbot python3-certbot-nginx"
echo " certbot --nginx -d $DOMAIN_NAME"
echo ""
print_warning "Important: Review and update the .env file at:"
print_warning "/home/luckychit/apps/chitfund/backend/.env"
echo ""
print_info "Documentation available at:"
echo " - Full Guide: PROXMOX_DEPLOYMENT_GUIDE.md"
echo " - Quick Reference: QUICK_DEPLOY.md"
echo ""
print_success "Deployment script completed successfully!"