Files
Olivier CROGUENNEC 48ed7fe65e Initial commit
2026-06-13 14:57:15 +02:00

133 lines
4.6 KiB
Bash

#!/usr/bin/env bash
# =============================================================================
# server-setup.sh — Installation initiale du CT Proxmox
#
# À exécuter UNE SEULE FOIS en root sur le CT (Debian/Ubuntu)
# après avoir cloné le repo ou transféré ce script.
#
# Pré-requis : CT Proxmox avec accès internet
# =============================================================================
set -euo pipefail
REPO_URL="${1:-}" # ex: git@github.com:toi/crowdlending-app.git
APP_DIR="/opt/crowdlending-app"
GH_USER="${SUDO_USER:-root}"
echo ""
echo "========================================"
echo " Setup serveur — Crowdlending App"
echo "========================================"
# 1. Dépendances système
echo ""
echo "📦 Installation des dépendances système..."
apt-get update -qq
apt-get install -y --no-install-recommends \
git \
curl \
ca-certificates \
gnupg \
sqlite3 \
ufw
# 2. Docker (méthode officielle)
echo ""
echo "🐋 Installation de Docker..."
if ! command -v docker &>/dev/null; then
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
> /etc/apt/sources.list.d/docker.list
apt-get update -qq
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl enable --now docker
echo " ✓ Docker installé : $(docker --version)"
else
echo " ✓ Docker déjà présent : $(docker --version)"
fi
# 3. Clé SSH pour GitHub (si pas encore présente)
echo ""
echo "🔑 Clé SSH..."
if [ ! -f ~/.ssh/id_ed25519 ]; then
ssh-keygen -t ed25519 -C "crowdlending-deploy" -f ~/.ssh/id_ed25519 -N ""
echo ""
echo " ┌─────────────────────────────────────────────────────────┐"
echo " │ Ajoute cette clé publique dans ton repo GitHub/Gitea │"
echo " │ (Settings → Deploy keys → Add deploy key) │"
echo " └─────────────────────────────────────────────────────────┘"
echo ""
cat ~/.ssh/id_ed25519.pub
echo ""
read -r -p " Appuie sur Entrée une fois la clé ajoutée dans GitHub..."
else
echo " ✓ Clé SSH déjà présente"
fi
# 4. Clone du repo
echo ""
echo "📂 Clonage du repo..."
if [ -d "$APP_DIR/.git" ]; then
echo " ✓ Repo déjà cloné dans $APP_DIR"
else
if [ -z "$REPO_URL" ]; then
read -r -p " URL du repo Git (ex: git@github.com:toi/crowdlending-app.git) : " REPO_URL
fi
git clone "$REPO_URL" "$APP_DIR"
echo " ✓ Repo cloné dans $APP_DIR"
fi
cd "$APP_DIR"
# 5. Fichier .env
echo ""
echo "⚙ Configuration .env..."
if [ ! -f ".env" ]; then
cp .env.example .env
# Générer un JWT_SECRET aléatoire
JWT_SECRET=$(openssl rand -hex 32)
sed -i "s/change-me-in-production/$JWT_SECRET/" .env
echo ""
echo " ┌──────────────────────────────────────────────────────────┐"
echo " │ Fichier .env créé avec un JWT_SECRET aléatoire. │"
echo " │ Vérifie et adapte si besoin : nano $APP_DIR/.env │"
echo " └──────────────────────────────────────────────────────────┘"
else
echo " ✓ .env déjà présent"
fi
# 6. Permissions du script de déploiement
chmod +x "$APP_DIR/deploy.sh"
# 7. Pare-feu (UFW)
echo ""
echo "🔒 Configuration du pare-feu (UFW)..."
ufw allow OpenSSH
ufw allow 8080/tcp comment "crowdlending frontend"
ufw --force enable
echo " ✓ Ports ouverts : SSH + 8080"
# 8. Premier build et démarrage
echo ""
echo "🚀 Premier build et démarrage..."
docker compose build
docker compose up -d
echo ""
echo "============================================"
echo " ✅ Installation terminée !"
echo ""
echo " App disponible sur : http://$(hostname -I | awk '{print $1}'):8080"
echo ""
echo " Commandes utiles :"
echo " cd $APP_DIR"
echo " ./deploy.sh → déployer une mise à jour"
echo " docker compose logs -f → suivre les logs"
echo " docker compose ps → état des containers"
echo "============================================"