feat: Version 3.5.2 - Configuration Stripe et gestion des immeubles
- Configuration complète Stripe pour les 3 environnements (DEV/REC/PROD) * DEV: Clés TEST Pierre (mode test) * REC: Clés TEST Client (mode test) * PROD: Clés LIVE Client (mode live) - Ajout de la gestion des bases de données immeubles/bâtiments * Configuration buildings_database pour DEV/REC/PROD * Service BuildingService pour enrichissement des adresses - Optimisations pages et améliorations ergonomie - Mises à jour des dépendances Composer - Nettoyage des fichiers obsolètes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
281
bao/deploy-bao.sh
Executable file
281
bao/deploy-bao.sh
Executable file
@@ -0,0 +1,281 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script de déploiement unifié pour GEOSECTOR BAO
|
||||
# Version: 1.0 (Janvier 2025)
|
||||
# Auteur: Pierre (avec l'aide de Claude)
|
||||
#
|
||||
# Usage:
|
||||
# ./deploy-bao.sh # Déploiement local DVA (code → container dva-geo)
|
||||
# ./deploy-bao.sh rca # Livraison RECETTE (code → rca-geo)
|
||||
# ./deploy-bao.sh pra # Livraison PRODUCTION (code → pra-geo)
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# =====================================
|
||||
# Configuration générale
|
||||
# =====================================
|
||||
|
||||
# Paramètre optionnel pour l'environnement cible
|
||||
TARGET_ENV=${1:-dva}
|
||||
|
||||
# Configuration SSH
|
||||
HOST_KEY="/home/pierre/.ssh/id_rsa_mbpi"
|
||||
HOST_PORT="22"
|
||||
HOST_USER="root"
|
||||
|
||||
# Configuration des serveurs
|
||||
RCA_HOST="195.154.80.116" # IN3 - Serveur de recette
|
||||
PRA_HOST="51.159.7.190" # IN4 - Serveur de production
|
||||
|
||||
# Configuration Incus
|
||||
INCUS_PROJECT="default"
|
||||
BAO_PATH="/var/www/geosector/bao"
|
||||
FINAL_OWNER="root"
|
||||
FINAL_GROUP="root"
|
||||
|
||||
# Configuration de sauvegarde
|
||||
BACKUP_DIR="/data/backup/geosector/bao"
|
||||
|
||||
# Couleurs pour les messages
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[0;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# =====================================
|
||||
# Fonctions utilitaires
|
||||
# =====================================
|
||||
|
||||
echo_step() {
|
||||
echo -e "${GREEN}==>${NC} $1"
|
||||
}
|
||||
|
||||
echo_info() {
|
||||
echo -e "${BLUE}Info:${NC} $1"
|
||||
}
|
||||
|
||||
echo_warning() {
|
||||
echo -e "${YELLOW}Warning:${NC} $1"
|
||||
}
|
||||
|
||||
echo_error() {
|
||||
echo -e "${RED}Error:${NC} $1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Fonction pour nettoyer les anciens backups
|
||||
cleanup_old_backups() {
|
||||
local prefix=""
|
||||
case $TARGET_ENV in
|
||||
"dva") prefix="bao-dva-" ;;
|
||||
"rca") prefix="bao-rca-" ;;
|
||||
"pra") prefix="bao-pra-" ;;
|
||||
esac
|
||||
|
||||
echo_info "Cleaning old backups (keeping last 10)..."
|
||||
ls -t "${BACKUP_DIR}"/${prefix}*.tar.gz 2>/dev/null | tail -n +11 | xargs -r rm -f && {
|
||||
REMAINING_BACKUPS=$(ls "${BACKUP_DIR}"/${prefix}*.tar.gz 2>/dev/null | wc -l)
|
||||
echo_info "Kept ${REMAINING_BACKUPS} backup(s) for ${TARGET_ENV}"
|
||||
}
|
||||
}
|
||||
|
||||
# =====================================
|
||||
# Détermination de la configuration selon l'environnement
|
||||
# =====================================
|
||||
|
||||
case $TARGET_ENV in
|
||||
"dva")
|
||||
echo_step "Configuring for DVA deployment on IN3"
|
||||
DEST_CONTAINER="dva-geo"
|
||||
DEST_HOST="${RCA_HOST}" # IN3
|
||||
ENV_NAME="DEVELOPMENT"
|
||||
;;
|
||||
"rca")
|
||||
echo_step "Configuring for RECETTE delivery"
|
||||
DEST_CONTAINER="rca-geo"
|
||||
DEST_HOST="${RCA_HOST}" # IN3
|
||||
ENV_NAME="RECETTE"
|
||||
;;
|
||||
"pra")
|
||||
echo_step "Configuring for PRODUCTION delivery"
|
||||
DEST_CONTAINER="pra-geo"
|
||||
DEST_HOST="${PRA_HOST}" # IN4
|
||||
ENV_NAME="PRODUCTION"
|
||||
;;
|
||||
*)
|
||||
echo_error "Unknown environment: $TARGET_ENV. Use 'dva', 'rca' or 'pra'"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo_info "Deployment flow: ${ENV_NAME}"
|
||||
|
||||
# =====================================
|
||||
# Création de l'archive depuis le code local
|
||||
# =====================================
|
||||
|
||||
# Créer le dossier de backup s'il n'existe pas
|
||||
if [ ! -d "${BACKUP_DIR}" ]; then
|
||||
echo_info "Creating backup directory ${BACKUP_DIR}..."
|
||||
mkdir -p "${BACKUP_DIR}" || echo_error "Failed to create backup directory"
|
||||
fi
|
||||
|
||||
# Horodatage format YYYYMMDDHH
|
||||
TIMESTAMP=$(date +%Y%m%d%H)
|
||||
|
||||
# Nom de l'archive selon l'environnement
|
||||
case $TARGET_ENV in
|
||||
"dva")
|
||||
ARCHIVE_NAME="bao-dva-${TIMESTAMP}.tar.gz"
|
||||
;;
|
||||
"rca")
|
||||
ARCHIVE_NAME="bao-rca-${TIMESTAMP}.tar.gz"
|
||||
;;
|
||||
"pra")
|
||||
ARCHIVE_NAME="bao-pra-${TIMESTAMP}.tar.gz"
|
||||
;;
|
||||
esac
|
||||
|
||||
ARCHIVE_PATH="${BACKUP_DIR}/${ARCHIVE_NAME}"
|
||||
|
||||
echo_step "Creating archive from local code..."
|
||||
|
||||
# Vérification des fichiers requis
|
||||
if [ ! -f "config/database.php" ]; then
|
||||
echo_error "Configuration file missing"
|
||||
fi
|
||||
|
||||
if [ ! -f "lib/CryptoService.php" ]; then
|
||||
echo_error "CryptoService missing"
|
||||
fi
|
||||
|
||||
tar --exclude='.git' \
|
||||
--exclude='.gitignore' \
|
||||
--exclude='.vscode' \
|
||||
--exclude='*.template' \
|
||||
--exclude='*.sh' \
|
||||
--exclude='config/.env' \
|
||||
--exclude='*.log' \
|
||||
--exclude='.DS_Store' \
|
||||
--exclude='README.md' \
|
||||
--exclude="*.tar.gz" \
|
||||
--exclude='*.swp' \
|
||||
--exclude='*.swo' \
|
||||
--exclude='*~' \
|
||||
-czf "${ARCHIVE_PATH}" . 2>/dev/null || echo_error "Failed to create archive"
|
||||
|
||||
echo_info "Archive created: ${ARCHIVE_PATH}"
|
||||
echo_info "Archive size: $(du -h "${ARCHIVE_PATH}" | cut -f1)"
|
||||
|
||||
# Nettoyer les anciens backups
|
||||
cleanup_old_backups
|
||||
|
||||
# =====================================
|
||||
# Déploiement sur le container distant
|
||||
# =====================================
|
||||
|
||||
echo_step "Deploying to remote container ${DEST_CONTAINER} on ${DEST_HOST}..."
|
||||
|
||||
# Créer une sauvegarde sur le serveur de destination
|
||||
BACKUP_TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||
REMOTE_BACKUP_DIR="${BAO_PATH}_backup_${BACKUP_TIMESTAMP}"
|
||||
|
||||
echo_info "Creating backup on destination..."
|
||||
ssh -i ${HOST_KEY} -p ${HOST_PORT} ${HOST_USER}@${DEST_HOST} "
|
||||
incus project switch ${INCUS_PROJECT} &&
|
||||
incus exec ${DEST_CONTAINER} -- test -d ${BAO_PATH} &&
|
||||
incus exec ${DEST_CONTAINER} -- cp -r ${BAO_PATH} ${REMOTE_BACKUP_DIR} &&
|
||||
echo 'Backup created: ${REMOTE_BACKUP_DIR}'
|
||||
" || echo_warning "No existing installation to backup"
|
||||
|
||||
# Transférer l'archive vers le serveur de destination
|
||||
echo_info "Transferring archive to ${DEST_HOST}..."
|
||||
scp -i ${HOST_KEY} -P ${HOST_PORT} ${ARCHIVE_PATH} ${HOST_USER}@${DEST_HOST}:/tmp/${ARCHIVE_NAME} || echo_error "Failed to copy archive to destination"
|
||||
|
||||
# Déployer sur le container de destination
|
||||
echo_info "Extracting on destination container..."
|
||||
ssh -i ${HOST_KEY} -p ${HOST_PORT} ${HOST_USER}@${DEST_HOST} "
|
||||
set -euo pipefail
|
||||
|
||||
# Pousser l'archive dans le container
|
||||
incus project switch ${INCUS_PROJECT} &&
|
||||
incus file push /tmp/${ARCHIVE_NAME} ${DEST_CONTAINER}/tmp/${ARCHIVE_NAME} &&
|
||||
|
||||
# Créer le répertoire parent et BAO s'ils n'existent pas
|
||||
incus exec ${DEST_CONTAINER} -- mkdir -p ${BAO_PATH} &&
|
||||
|
||||
# Nettoyer le répertoire complètement
|
||||
incus exec ${DEST_CONTAINER} -- rm -rf ${BAO_PATH}/* &&
|
||||
|
||||
# Extraire l'archive
|
||||
incus exec ${DEST_CONTAINER} -- tar -xzf /tmp/${ARCHIVE_NAME} -C ${BAO_PATH}/ &&
|
||||
|
||||
# Utiliser la config container (connexion directe maria3/maria4)
|
||||
incus exec ${DEST_CONTAINER} -- bash -c 'if [ -f ${BAO_PATH}/config/.env.container ]; then cp ${BAO_PATH}/config/.env.container ${BAO_PATH}/config/.env; fi' &&
|
||||
|
||||
# Permissions
|
||||
incus exec ${DEST_CONTAINER} -- chown -R ${FINAL_OWNER}:${FINAL_GROUP} ${BAO_PATH} &&
|
||||
incus exec ${DEST_CONTAINER} -- find ${BAO_PATH} -type d -exec chmod 755 {} \\; &&
|
||||
incus exec ${DEST_CONTAINER} -- find ${BAO_PATH} -type f -exec chmod 644 {} \\; &&
|
||||
|
||||
# Permissions exécutables pour les scripts bin/ (avec vérification)
|
||||
incus exec ${DEST_CONTAINER} -- bash -c 'if [ -d ${BAO_PATH}/bin ]; then chmod +x ${BAO_PATH}/bin/*; fi' &&
|
||||
|
||||
# Créer config/.env depuis le template si absent
|
||||
incus exec ${DEST_CONTAINER} -- bash -c 'if [ ! -f ${BAO_PATH}/config/.env ] && [ -f ${BAO_PATH}/config/.env.example ]; then cp ${BAO_PATH}/config/.env.example ${BAO_PATH}/config/.env && echo \"WARNING: config/.env created from template - you need to configure it!\"; fi' &&
|
||||
|
||||
# Nettoyage
|
||||
incus exec ${DEST_CONTAINER} -- rm -f /tmp/${ARCHIVE_NAME} &&
|
||||
rm -f /tmp/${ARCHIVE_NAME}
|
||||
" || echo_error "Deployment failed on destination"
|
||||
|
||||
echo_info "Remote backup saved: ${REMOTE_BACKUP_DIR} on ${DEST_CONTAINER}"
|
||||
|
||||
# =====================================
|
||||
# Configuration post-déploiement
|
||||
# =====================================
|
||||
|
||||
echo_step "Post-deployment configuration..."
|
||||
|
||||
ssh -i ${HOST_KEY} -p ${HOST_PORT} ${HOST_USER}@${DEST_HOST} "
|
||||
incus exec ${DEST_CONTAINER} -- bash -c '
|
||||
# Afficher l'état de la configuration
|
||||
if [ -f ${BAO_PATH}/config/.env ]; then
|
||||
echo \"✓ config/.env exists\"
|
||||
else
|
||||
echo \"✗ config/.env missing - copy from .env.example and configure\"
|
||||
fi
|
||||
|
||||
# Vérifier PHP
|
||||
php -v > /dev/null 2>&1 && echo \"✓ PHP available\" || echo \"✗ PHP missing\"
|
||||
|
||||
# Vérifier les extensions PHP requises
|
||||
php -m | grep -q pdo && echo \"✓ PHP PDO extension\" || echo \"✗ PHP PDO missing\"
|
||||
php -m | grep -q openssl && echo \"✓ PHP OpenSSL extension\" || echo \"✗ PHP OpenSSL missing\"
|
||||
php -m | grep -q mbstring && echo \"✓ PHP mbstring extension\" || echo \"✗ PHP mbstring missing\"
|
||||
'
|
||||
" && echo_info "Post-deployment check completed" || echo_warning "Post-deployment check failed"
|
||||
|
||||
# L'archive reste dans le dossier de backup
|
||||
echo_info "Archive preserved in backup directory: ${ARCHIVE_PATH}"
|
||||
|
||||
# =====================================
|
||||
# Instructions post-installation
|
||||
# =====================================
|
||||
|
||||
echo_step "Post-installation instructions:"
|
||||
echo_info "1. Connect to container: ssh -i ${HOST_KEY} ${HOST_USER}@${DEST_HOST} 'incus exec ${DEST_CONTAINER} -- bash'"
|
||||
echo_info "2. Configuration already set from .env.container (direct connection to maria3/maria4)"
|
||||
echo_info "3. Test with: cd ${BAO_PATH} && ./bin/bao"
|
||||
|
||||
# =====================================
|
||||
# Résumé final
|
||||
# =====================================
|
||||
|
||||
echo_step "Deployment completed successfully!"
|
||||
echo_info "Environment: ${ENV_NAME}"
|
||||
echo_info "Deployed from local code to container ${DEST_CONTAINER} on ${DEST_HOST}"
|
||||
echo_info "Deployment completed at: $(date)"
|
||||
|
||||
# Journaliser le déploiement
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - BAO deployed to ${ENV_NAME} (${DEST_CONTAINER}) - Archive: ${ARCHIVE_NAME}" >> ~/.geo_deploy_history
|
||||
Reference in New Issue
Block a user