Update deployment scripts and server setup for automatic deployment and database backup

Update deploy scripts to include database backup and restore functionality, configure Nginx for vt.alfacom.it, and modify server setup to use the provided database password.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 42d8028a-fa71-4ec2-938c-e43eedf7df01
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
This commit is contained in:
marco370 2025-10-16 10:54:16 +00:00
parent 6d7d6c82ef
commit a7df004348
8 changed files with 1141 additions and 72 deletions

View File

@ -13,20 +13,21 @@ PGPASSWORD=YOUR_SECURE_PASSWORD
# Genera con: openssl rand -base64 32 # Genera con: openssl rand -base64 32
SESSION_SECRET=YOUR_RANDOM_SESSION_SECRET_HERE SESSION_SECRET=YOUR_RANDOM_SESSION_SECRET_HERE
# =================== REPLIT AUTH (Produzione) =================== # =================== AUTHENTICATION ===================
# Configurazione OIDC per autenticazione # Configurazione OIDC (senza Replit)
ISSUER_URL=https://replit.com/oidc ISSUER_URL=https://auth.vt.alfacom.it/oidc
REPL_ID=your-repl-id-here CLIENT_ID=vigilanza-turni
REPLIT_DOMAINS=tuodominio.it,www.tuodominio.it CLIENT_SECRET=YOUR_OIDC_CLIENT_SECRET
# =================== NODE ENVIRONMENT =================== # =================== APPLICATION ===================
NODE_ENV=production NODE_ENV=production
PORT=5000 PORT=5000
APP_URL=https://vt.alfacom.it
# =================== LOGGING (opzionale) =================== # =================== BACKUP ===================
BACKUP_ENABLED=true
BACKUP_DIR=/var/backups/vigilanza-turni
BACKUP_RETENTION_DAYS=30
# =================== LOGGING ===================
LOG_LEVEL=info LOG_LEVEL=info
# =================== BACKUP (opzionale) ===================
# BACKUP_ENABLED=true
# BACKUP_SCHEDULE="0 2 * * *" # Daily at 2 AM
# BACKUP_RETENTION_DAYS=30

View File

@ -4,7 +4,7 @@ hidden = [".config", ".git", "generated-icon.png", "node_modules", "dist"]
[nix] [nix]
channel = "stable-24_05" channel = "stable-24_05"
packages = ["nano"] packages = ["nano", "zip", "openssh"]
[deployment] [deployment]
deploymentTarget = "autoscale" deploymentTarget = "autoscale"

View File

@ -2,19 +2,50 @@
set -e set -e
# Script di deployment automatico per VigilanzaTurni # Script di deployment automatico per VigilanzaTurni
# Eseguito da GitLab CI/CD Runner # Uso: bash deploy/deploy.sh
APP_DIR="/var/www/vigilanza-turni" APP_DIR="/var/www/vigilanza-turni"
APP_NAME="vigilanza-turni" APP_NAME="vigilanza-turni"
BACKUP_DIR="/var/backups/vigilanza-turni"
echo "🚀 Deployment VigilanzaTurni - $(date)" echo "🚀 Deployment VigilanzaTurni - $(date)"
# Vai alla directory applicazione # Vai alla directory applicazione
cd $APP_DIR cd $APP_DIR
# Pull ultime modifiche (già fatto da GitLab Runner) # Pull ultime modifiche (se eseguito manualmente)
echo "📦 Repository aggiornato" if [ -d .git ]; then
echo "📥 Pull ultime modifiche da GitLab..."
git pull origin main || true
fi
# =================== BACKUP DATABASE ===================
echo "💾 Backup database pre-deployment..."
mkdir -p $BACKUP_DIR
BACKUP_FILE="$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).sql"
# Load env vars
if [ -f .env ]; then
export $(cat .env | grep -v '^#' | xargs)
fi
# Esegui backup PostgreSQL
if command -v pg_dump &> /dev/null; then
PGPASSWORD=$PGPASSWORD pg_dump -h $PGHOST -U $PGUSER -d $PGDATABASE > $BACKUP_FILE
echo "✅ Backup salvato: $BACKUP_FILE"
# Comprimi backup
gzip $BACKUP_FILE
echo "✅ Backup compresso: ${BACKUP_FILE}.gz"
# Pulisci backup vecchi (> 30 giorni)
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +30 -delete
echo "🧹 Backup vecchi eliminati (retention: 30 giorni)"
else
echo "⚠️ pg_dump non trovato, skip backup"
fi
# =================== BUILD & DEPLOY ===================
# Installa TUTTE le dipendenze (serve per build e migrations) # Installa TUTTE le dipendenze (serve per build e migrations)
echo "📥 Installazione dipendenze (include devDependencies)..." echo "📥 Installazione dipendenze (include devDependencies)..."
npm ci npm ci
@ -32,6 +63,7 @@ npm run db:push || true
echo "🧹 Pulizia devDependencies (mantiene solo production)..." echo "🧹 Pulizia devDependencies (mantiene solo production)..."
npm prune --production npm prune --production
# =================== RESTART APPLICATION ===================
# Restart applicazione con PM2 # Restart applicazione con PM2
echo "🔄 Restart applicazione..." echo "🔄 Restart applicazione..."
if pm2 show $APP_NAME > /dev/null 2>&1; then if pm2 show $APP_NAME > /dev/null 2>&1; then
@ -50,8 +82,27 @@ if pm2 show $APP_NAME | grep -q "online"; then
else else
echo "❌ Errore: applicazione non online" echo "❌ Errore: applicazione non online"
pm2 logs $APP_NAME --lines 50 --nostream pm2 logs $APP_NAME --lines 50 --nostream
# Rollback: ripristina ultimo backup
echo "🔄 Tentativo rollback backup..."
LATEST_BACKUP=$(ls -t $BACKUP_DIR/backup_*.sql.gz 2>/dev/null | head -1)
if [ -f "$LATEST_BACKUP" ]; then
echo "📦 Ripristino da: $LATEST_BACKUP"
gunzip -c $LATEST_BACKUP | PGPASSWORD=$PGPASSWORD psql -h $PGHOST -U $PGUSER -d $PGDATABASE
echo "✅ Database ripristinato"
fi
exit 1 exit 1
fi fi
# =================== STATUS ===================
echo ""
echo "📊 Status PM2:" echo "📊 Status PM2:"
pm2 status pm2 status
echo ""
echo "📈 Ultimi backup disponibili:"
ls -lht $BACKUP_DIR/*.gz 2>/dev/null | head -5 || echo "Nessun backup trovato"
echo ""
echo "🌐 Applicazione disponibile su: https://vt.alfacom.it"

View File

@ -10,7 +10,7 @@ upstream vigilanza_backend {
server { server {
listen 80; listen 80;
listen [::]:80; listen [::]:80;
server_name tuodominio.it www.tuodominio.it; server_name vt.alfacom.it;
# Let's Encrypt challenge # Let's Encrypt challenge
location /.well-known/acme-challenge/ { location /.well-known/acme-challenge/ {
@ -26,11 +26,11 @@ server {
server { server {
listen 443 ssl http2; listen 443 ssl http2;
listen [::]:443 ssl http2; listen [::]:443 ssl http2;
server_name tuodominio.it www.tuodominio.it; server_name vt.alfacom.it;
# SSL Certificate (generato da certbot) # SSL Certificate (generato da certbot)
ssl_certificate /etc/letsencrypt/live/tuodominio.it/fullchain.pem; ssl_certificate /etc/letsencrypt/live/vt.alfacom.it/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tuodominio.it/privkey.pem; ssl_certificate_key /etc/letsencrypt/live/vt.alfacom.it/privkey.pem;
# SSL Security # SSL Security
ssl_protocols TLSv1.2 TLSv1.3; ssl_protocols TLSv1.2 TLSv1.3;

View File

@ -1,55 +1,57 @@
#!/bin/bash #!/bin/bash
# Setup automatico server AlmaLinux 9 per VigilanzaTurni
# Esegui: sudo bash deploy/setup-server.sh
set -e set -e
echo "================================================" # Colori output
echo "Setup VigilanzaTurni su AlmaLinux 9"
echo "================================================"
# Colori per output
RED='\033[0;31m' RED='\033[0;31m'
GREEN='\033[0;32m' GREEN='\033[0;32m'
YELLOW='\033[1;33m' YELLOW='\033[1;33m'
NC='\033[0m' # No Color NC='\033[0m'
# Funzione di log log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_info() { log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
echo -e "${GREEN}[INFO]${NC} $1" log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Verifica root # Verifica root
if [ "$EUID" -ne 0 ]; then if [ "$EUID" -ne 0 ]; then
log_error "Esegui questo script come root: sudo bash setup-server.sh" log_error "Esegui come root: sudo bash $0"
exit 1 exit 1
fi fi
log_info "🚀 Setup server AlmaLinux 9 per VigilanzaTurni"
log_info "Dominio: vt.alfacom.it"
# =================== SYSTEM UPDATE ===================
log_info "Aggiornamento sistema..." log_info "Aggiornamento sistema..."
dnf update -y dnf update -y
# =================== NODE.JS 20 =================== # =================== NODE.JS ===================
log_info "Installazione Node.js 20 LTS..." log_info "Installazione Node.js 20..."
dnf module reset nodejs -y dnf module reset nodejs -y
dnf module enable nodejs:20 -y dnf module enable nodejs:20 -y
dnf install nodejs -y dnf install nodejs -y
node --version node --version
npm --version npm --version
# =================== POSTGRESQL 15 =================== # =================== PM2 ===================
log_info "Installazione PM2..."
npm install -g pm2
pm2 startup systemd -u root --hp /root
systemctl enable pm2-root
# =================== POSTGRESQL ===================
log_info "Installazione PostgreSQL 15..." log_info "Installazione PostgreSQL 15..."
dnf install -y postgresql15-server postgresql15-contrib dnf install -y postgresql15-server postgresql15
# Inizializza database
postgresql-setup --initdb postgresql-setup --initdb
systemctl enable postgresql systemctl enable postgresql
systemctl start postgresql systemctl start postgresql
# Generazione password sicura PostgreSQL # Password database fornita dall'utente
DB_PASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-25) DB_PASSWORD="553da84c94093919d46055d6ec37dfa2a03d0f46"
# Creazione database e utente # Creazione database e utente
log_info "Configurazione database..." log_info "Configurazione database..."
@ -61,26 +63,22 @@ GRANT ALL PRIVILEGES ON DATABASE vigilanza_turni TO vigilanza_user;
GRANT ALL ON SCHEMA public TO vigilanza_user; GRANT ALL ON SCHEMA public TO vigilanza_user;
EOF EOF
# Salva password in file sicuro log_info "✅ Database configurato con password fornita"
echo "PGPASSWORD=${DB_PASSWORD}" > /root/.vigilanza_db_password
chmod 600 /root/.vigilanza_db_password
log_info "Password PostgreSQL salvata in: /root/.vigilanza_db_password"
# Configurazione PostgreSQL per connessioni locali # Configurazione PostgreSQL per connessioni locali
log_info "Configurazione autenticazione PostgreSQL..." log_info "Configurazione autenticazione PostgreSQL..."
PG_HBA="/var/lib/pgsql/data/pg_hba.conf" PG_HBA="/var/lib/pgsql/data/pg_hba.conf"
sed -i 's/ident$/md5/' $PG_HBA if ! grep -q "vigilanza_user" $PG_HBA; then
systemctl restart postgresql echo "local vigilanza_turni vigilanza_user md5" >> $PG_HBA
echo "host vigilanza_turni vigilanza_user 127.0.0.1/32 md5" >> $PG_HBA
# =================== PM2 (Process Manager) =================== systemctl restart postgresql
log_info "Installazione PM2..." fi
npm install -g pm2
pm2 startup systemd -u root --hp /root
# =================== NGINX =================== # =================== NGINX ===================
log_info "Installazione Nginx..." log_info "Installazione Nginx..."
dnf install -y nginx dnf install -y nginx
systemctl enable nginx systemctl enable nginx
systemctl start nginx
# =================== GIT =================== # =================== GIT ===================
log_info "Installazione Git..." log_info "Installazione Git..."
@ -89,10 +87,14 @@ dnf install -y git
# =================== DIRECTORY APPLICAZIONE =================== # =================== DIRECTORY APPLICAZIONE ===================
log_info "Creazione directory applicazione..." log_info "Creazione directory applicazione..."
mkdir -p /var/www/vigilanza-turni mkdir -p /var/www/vigilanza-turni
chown -R root:root /var/www/vigilanza-turni mkdir -p /var/backups/vigilanza-turni
chmod 755 /var/www/vigilanza-turni
chmod 700 /var/backups/vigilanza-turni
# =================== FIREWALL =================== # =================== FIREWALL ===================
log_info "Configurazione Firewall..." log_info "Configurazione firewall..."
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https firewall-cmd --permanent --add-service=https
firewall-cmd --reload firewall-cmd --reload
@ -107,14 +109,11 @@ log_info "Setup completato con successo!"
log_info "================================================" log_info "================================================"
log_info "" log_info ""
log_warn "PROSSIMI PASSI:" log_warn "PROSSIMI PASSI:"
echo "1. Configura il DNS per puntare questo server" echo "1. Copia deploy/nginx.conf → /etc/nginx/conf.d/vigilanza-turni.conf"
echo "2. Copia DATABASE_URL qui sotto nel file /var/www/vigilanza-turni/.env" echo "2. Clone repository: cd /var/www/vigilanza-turni && git clone <repo-url> ."
echo "3. Ottieni certificato SSL: sudo certbot --nginx -d tuodominio.it" echo "3. Crea file .env con DATABASE_URL (password già configurata)"
echo "4. Esegui il primo deployment con GitLab CI/CD" echo "4. Ottieni certificato SSL: sudo certbot --nginx -d vt.alfacom.it"
echo "" echo "5. Esegui primo deploy: bash deploy/deploy.sh"
log_warn "⚠️ IMPORTANTE - Salva questa password (disponibile in /root/.vigilanza_db_password):"
echo "" echo ""
log_info "DATABASE_URL per .env:" log_info "DATABASE_URL per .env:"
echo "postgresql://vigilanza_user:${DB_PASSWORD}@localhost:5432/vigilanza_turni" echo "postgresql://vigilanza_user:${DB_PASSWORD}@localhost:5432/vigilanza_turni"
echo ""
log_warn "Password PostgreSQL generata automaticamente: ${DB_PASSWORD}"

1007
dump.sql Normal file

File diff suppressed because it is too large Load Diff

BIN
dump.zip Normal file

Binary file not shown.

23
push-to-gitlab.sh Executable file → Normal file
View File

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# Script helper per push automatico verso GitLab da Replit # Script per push automatico verso GitLab
set -e set -e
@ -9,9 +9,17 @@ YELLOW='\033[1;33m'
RED='\033[0;31m' RED='\033[0;31m'
NC='\033[0m' NC='\033[0m'
echo -e "${GREEN}🚀 Push to GitLab Production${NC}" echo -e "${GREEN}🚀 Push to GitLab (vt.alfacom.it)${NC}"
echo "========================================" echo "========================================"
# Verifica remote GitLab
if ! git remote | grep -q "production"; then
echo -e "${YELLOW}⚠️ Remote 'production' non configurato${NC}"
echo "Configurazione remote GitLab..."
read -p "URL repository GitLab: " GITLAB_URL
git remote add production $GITLAB_URL
fi
# Verifica se ci sono modifiche # Verifica se ci sono modifiche
if [[ -z $(git status -s) ]]; then if [[ -z $(git status -s) ]]; then
echo -e "${YELLOW}⚠️ Nessuna modifica da committare${NC}" echo -e "${YELLOW}⚠️ Nessuna modifica da committare${NC}"
@ -52,8 +60,11 @@ git push production main
echo -e "\n${GREEN}✅ Push completato!${NC}" echo -e "\n${GREEN}✅ Push completato!${NC}"
echo "========================================" echo "========================================"
echo -e "${YELLOW}Prossimi passi:${NC}" echo -e "${YELLOW}Deployment automatico disponibile:${NC}"
echo "1. Vai su GitLab: https://git.alfacom.it/marco/VigilanzaTurni/-/pipelines" echo ""
echo "2. La pipeline CI/CD partirà automaticamente" echo "Sul server esegui:"
echo "3. Clicca su 'deploy_production' per deployare su server" echo -e "${GREEN} cd /var/www/vigilanza-turni${NC}"
echo -e "${GREEN} bash deploy/deploy.sh${NC}"
echo ""
echo "🌐 Sito: https://vt.alfacom.it"
echo "" echo ""