133 lines
4.6 KiB
Bash
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 "============================================"
|