diff --git a/deploy-techsolidaire.sh b/deploy-techsolidaire.sh new file mode 100644 index 0000000..2a574e4 --- /dev/null +++ b/deploy-techsolidaire.sh @@ -0,0 +1,293 @@ +#!/usr/bin/env bash +# +# deploy-techsolidaire.sh +# -------------------------------------------------------------------------- +# Déploie via Docker un site vitrine (fictif) pour une association +# communautaire d'entraide technologique : "TechSolidaire". +# +# Le site tient sur une seule page HTML (CSS intégré, aucun menu, +# aucun lien externe). Le script génère les fichiers, construit l'image +# Docker basée sur nginx, puis lance le conteneur. +# +# Usage : +# ./deploy-techsolidaire.sh # déploie sur le port 8080 +# PORT=9000 ./deploy-techsolidaire.sh # déploie sur un autre port +# -------------------------------------------------------------------------- + +set -euo pipefail + +# --- Paramètres configurables --------------------------------------------- +PROJECT_DIR="${PROJECT_DIR:-./techsolidaire-site}" +IMAGE_NAME="${IMAGE_NAME:-techsolidaire-vitrine}" +CONTAINER_NAME="${CONTAINER_NAME:-techsolidaire}" +PORT="${PORT:-8080}" + +# --- Couleurs pour les messages -------------------------------------------- +GREEN='\033[0;32m'; BLUE='\033[0;34m'; YELLOW='\033[1;33m'; NC='\033[0m' +info() { echo -e "${BLUE}[INFO]${NC} $*"; } +ok() { echo -e "${GREEN}[OK]${NC} $*"; } +warn() { echo -e "${YELLOW}[ATTENTION]${NC} $*"; } + +# --- Vérifications préalables ----------------------------------------------- +if ! command -v docker >/dev/null 2>&1; then + echo "Docker n'est pas installé ou pas dans le PATH. Installe Docker d'abord." >&2 + exit 1 +fi + +if ! docker info >/dev/null 2>&1; then + echo "Le démon Docker ne répond pas. Démarre Docker puis relance le script." >&2 + exit 1 +fi + +# --- Préparation de l'arborescence ------------------------------------------ +info "Préparation du dossier de projet : ${PROJECT_DIR}" +mkdir -p "${PROJECT_DIR}" + +# --- Génération de la page web (une seule page, sans lien externe) ---------- +info "Génération de la page web index.html" +cat > "${PROJECT_DIR}/index.html" << 'EOF' + + + + + + TechSolidaire — Entraide technologique + + + + +
+
+ +

L'entraide technologique
au service de tous

+

+ Une association communautaire qui démocratise l'accès au numérique : + partage de savoirs, réparation, et accompagnement, par et pour les habitants. +

+
Association à but non lucratif · Fictive
+
+
+ +
+
+

Notre activité

+

+ TechSolidaire réunit bénévoles, passionnés et curieux autour d'une idée + simple : la technologie ne doit laisser personne de côté. Nous animons + des ateliers ouverts à tous, accompagnons celles et ceux qui se sentent + démunis face aux outils numériques, et donnons une seconde vie au + matériel informatique plutôt que de le jeter. +

+

+ Chaque rencontre repose sur l'échange : ici, on apprend en faisant, on + partage ce que l'on sait, et l'on construit ensemble des solutions + concrètes. L'entraide est notre seul mode d'emploi. +

+
+
+ +
+
+

Notre mobilisation

+

+ Portée par une équipe entièrement bénévole, notre association se mobilise + chaque semaine sur le terrain. Notre force, c'est le collectif. +

+
+
120+
bénévoles actifs
+
48
ateliers par an
+
900
personnes accompagnées
+
350
appareils reconditionnés
+
+
+
+ +
+
+

Quelques projets

+

Un aperçu de ce que nous menons au quotidien.

+
+
+ Réparation +

Repair Café numérique

+

+ Un rendez-vous mensuel pour diagnostiquer et réparer ensemble + ordinateurs, smartphones et petits appareils, plutôt que de les + remplacer. +

+
+
+ Inclusion +

Le numérique pour tous

+

+ Des sessions d'initiation pour les seniors et les personnes éloignées + du numérique : démarches en ligne, messagerie, sécurité de base. +

+
+
+ Réemploi +

Atelier reconditionnement

+

+ Nous collectons du matériel inutilisé, le remettons en état et le + redistribuons aux familles et aux associations qui en ont besoin. +

+
+
+ Logiciel libre +

Cloud d'entraide

+

+ Un hébergement de services libres géré par la communauté, pour + partager fichiers et outils sans dépendre des grandes plateformes. +

+
+
+
+
+ + + + + +EOF + +# --- Génération du Dockerfile ----------------------------------------------- +info "Génération du Dockerfile" +cat > "${PROJECT_DIR}/Dockerfile" << 'EOF' +FROM nginx:alpine + +# On retire la page par défaut puis on copie notre site +RUN rm -rf /usr/share/nginx/html/* +COPY index.html /usr/share/nginx/html/index.html + +EXPOSE 80 +EOF + +# --- Construction de l'image ------------------------------------------------ +info "Construction de l'image Docker : ${IMAGE_NAME}" +docker build -t "${IMAGE_NAME}" "${PROJECT_DIR}" + +# --- Nettoyage d'un éventuel conteneur existant ----------------------------- +if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then + warn "Un conteneur '${CONTAINER_NAME}' existe déjà : suppression." + docker rm -f "${CONTAINER_NAME}" >/dev/null +fi + +# --- Lancement du conteneur ------------------------------------------------- +info "Démarrage du conteneur sur le port ${PORT}" +docker run -d \ + --name "${CONTAINER_NAME}" \ + -p "${PORT}:80" \ + --restart unless-stopped \ + "${IMAGE_NAME}" >/dev/null + +ok "Site déployé !" +echo "" +echo " ➜ Accès local : http://localhost:${PORT}" +echo "" +echo "Commandes utiles :" +echo " docker logs ${CONTAINER_NAME} # voir les journaux" +echo " docker stop ${CONTAINER_NAME} # arrêter le site" +echo " docker start ${CONTAINER_NAME} # relancer le site" +echo " docker rm -f ${CONTAINER_NAME} # supprimer le conteneur"