From 7408308855b3376ee3a30b1a98b03d191ecba4b8 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 13:08:49 +0100 Subject: [PATCH 01/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/install_quick_demo_docker.sh | 68 ++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 11 deletions(-) diff --git a/docker/install_quick_demo_docker.sh b/docker/install_quick_demo_docker.sh index e79ba479..de41e0c4 100644 --- a/docker/install_quick_demo_docker.sh +++ b/docker/install_quick_demo_docker.sh @@ -1,17 +1,19 @@ -#!/bin/bash +<65;41;19M#!/bin/bash # ------------------------------------------------------------- -# Script per a la instal·lació ràpida de la Demo Docker de django-aula. -# Descarrega els fitxers de configuració essencials i comprova la base de dades. +# Script per a la instal·lació de la Demo Docker de django-aula. +# Descarrega els fitxers de configuració i comprova la base de dades. # ------------------------------------------------------------- # --- 1. Informació del repositori --- -REPO="ctrl-alt-d/django-aula" -BRANCA="master" +REPO="rafatecno1/django-aula" +#REPO="ctrl-alt-d/django-aula" +#BRANCA="master" +BRANCA)="millora-demo" URL_BASE="https://raw.githubusercontent.com/${REPO}/refs/heads/${BRANCA}/docker" clear -echo -e "⚙️ Iniciant instal·lació ràpida de la Demo en Docker...\n" +echo -e "⚙️ Iniciant instal·lació de la Demo en Docker...\n" echo # ---------------------------------------------------------------------- @@ -62,6 +64,14 @@ echo -e "✅ Repositori clonat (Branca: $GIT_BRANCH) a '$FULL_PATH'." echo -e "\n" sleep 3 +# Carrega de la llibreria de funcions +if [ -f "{FULL_PATH}/setup_djau/functions.sh" ]; then + source "{FULL_PATH}/setup_djau/functions.sh" + echo -e "${C_EXITO}✅ Llibreria de funcions carregada amb èxit.${RESET}" +else + echo -e "\n\e[31m\e[1m❌ ERROR:\e[0m No s'ha trobat l'arxiu functions.sh dins el directori {FULL_PATH}/setup_djau/." +fi + # --- 2. Fitxers a descarregar --- FILES_TO_DOWNLOAD=( @@ -129,9 +139,9 @@ fi echo echo "🌍 Si la Demo ha de funcionar en una xarxa local cal definir quina IP té. Si es vol instal·lar en un servidor en internet (VPS) caldrà informar de la seva IP pública i del domini o subdomini, si n'hi ha." echo -e "\n" -read -p "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (y/n): " REPLY +read -p "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (S/n): " REPLY -if [[ $REPLY =~ ^[Yy]$ ]]; then +if [[ $REPLY =~ ^[Ss]$ ]]; then read -p "👉 Introdueix els dominis o IPs separats per comes (ex: demo.elteudomini.cat,192.168.1.46): " HOSTS if [ -n "$HOSTS" ]; then sed -i "s|^DEMO_ALLOWED_HOSTS=.*|DEMO_ALLOWED_HOSTS=${HOSTS}|" .env @@ -178,6 +188,7 @@ until docker exec demo_db pg_isready -U "$DB_USER" >/dev/null 2>&1; do exit 1 fi done +echo " L'espera ha sigut de $COUNT segons." echo " ✅ PostgreSQL està llest!" echo @@ -191,10 +202,45 @@ echo # --- 8. Espera a la finalització de la preparació --- -echo "Premi qualsevol tecla per continuar i mostrar el progrés de la preparació de la demo." -read -p "posteriorment CTRL-C per deixar de mostrar la informació." -n1 -s +#echo "Premi qualsevol tecla per continuar i mostrar el progrés de la preparació de la demo." +#read -p "posteriorment CTRL-C per deixar de mostrar la informació." -n1 -s + +#docker logs -f demo_web + +echo "AQUÍ CAL POSAR UN BON MISSATGE PER INDICAR QUE MOSTRAREM ELS LOGS" +echo "Comença la prova" + + +echo -e "\n" +info "S'està preparant la base de dades i el servidor..." +echo -e "${C_PRINCIPAL}Aquest procés finalitzarà automàticament quan el servidor estigui llest.${RESET}" +echo -e "${C_PRINCIPAL}------------------------------------------------------------------------${RESET}" + +# Iniciem el bucle de lectura de logs +# Filtrem els "SyntaxWarning" per no embrutar la sortida si vols +docker logs -f demo_web 2>&1 | while read -r line; do + + # 1. Ignorem els SyntaxWarning per netaeja visual. NO VULL IGORNAR-LOS + #if [[ "$line" == *"SyntaxWarning"* ]]; then + # continue + #fi + + # 2. Imprimim la línia en gris per diferenciar-la del script + echo -e "${CIANO}${line}${RESET}" + + # 3. Condició de sortida: Quan Django ens diu que ja escolta al port 8000 + if [[ "$line" == *"Starting development server at"* ]]; then + echo -e "${C_PRINCIPAL}----------------------------------------------------------------------${RESET}" + echo -e "\n" + success "EL SERVIDOR ESTÀ PREPARAT!" + + # Matem el procés 'docker logs' per sortir del bucle 'while' + # Ho fem d'una manera neta cercant el procés fill + pkill -P $$ -f "docker logs" + break + fi +done -docker logs -f demo_web # --- 9. Missatge final --- From 99a9c6101e40bb63c2e964d48170f05b7204c3b6 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 13:19:09 +0100 Subject: [PATCH 02/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/install_quick_demo_docker.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/install_quick_demo_docker.sh b/docker/install_quick_demo_docker.sh index de41e0c4..2ef27cb7 100644 --- a/docker/install_quick_demo_docker.sh +++ b/docker/install_quick_demo_docker.sh @@ -1,4 +1,4 @@ -<65;41;19M#!/bin/bash +<#!/bin/bash # ------------------------------------------------------------- # Script per a la instal·lació de la Demo Docker de django-aula. # Descarrega els fitxers de configuració i comprova la base de dades. @@ -9,7 +9,7 @@ REPO="rafatecno1/django-aula" #REPO="ctrl-alt-d/django-aula" #BRANCA="master" -BRANCA)="millora-demo" +BRANCA="millora-demo" URL_BASE="https://raw.githubusercontent.com/${REPO}/refs/heads/${BRANCA}/docker" clear From ac6be3470804d394ad9354cd74d69633197cd582 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 13:21:55 +0100 Subject: [PATCH 03/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/install_quick_demo_docker.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/install_quick_demo_docker.sh b/docker/install_quick_demo_docker.sh index 2ef27cb7..0e65e9c7 100644 --- a/docker/install_quick_demo_docker.sh +++ b/docker/install_quick_demo_docker.sh @@ -1,4 +1,4 @@ -<#!/bin/bash +#!/bin/bash # ------------------------------------------------------------- # Script per a la instal·lació de la Demo Docker de django-aula. # Descarrega els fitxers de configuració i comprova la base de dades. From 6c2d6521d4d7b7e70c6d4fe3f2135f09280c05a6 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 13:24:33 +0100 Subject: [PATCH 04/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/install_quick_demo_docker.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/install_quick_demo_docker.sh b/docker/install_quick_demo_docker.sh index 0e65e9c7..ca61e84a 100644 --- a/docker/install_quick_demo_docker.sh +++ b/docker/install_quick_demo_docker.sh @@ -65,11 +65,11 @@ echo -e "\n" sleep 3 # Carrega de la llibreria de funcions -if [ -f "{FULL_PATH}/setup_djau/functions.sh" ]; then - source "{FULL_PATH}/setup_djau/functions.sh" +if [ -f "${FULL_PATH}/setup_djau/functions.sh" ]; then + source "${FULL_PATH}/setup_djau/functions.sh" echo -e "${C_EXITO}✅ Llibreria de funcions carregada amb èxit.${RESET}" else - echo -e "\n\e[31m\e[1m❌ ERROR:\e[0m No s'ha trobat l'arxiu functions.sh dins el directori {FULL_PATH}/setup_djau/." + echo -e "\n\e[31m\e[1m❌ ERROR:\e[0m No s'ha trobat l'arxiu functions.sh dins el directori ${FULL_PATH}/setup_djau/." fi # --- 2. Fitxers a descarregar --- From 39f39a24e2e33ea17e670a115e82aebd584ace36 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 13:28:48 +0100 Subject: [PATCH 05/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/install_quick_demo_docker.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/install_quick_demo_docker.sh b/docker/install_quick_demo_docker.sh index ca61e84a..60d8638e 100644 --- a/docker/install_quick_demo_docker.sh +++ b/docker/install_quick_demo_docker.sh @@ -65,11 +65,11 @@ echo -e "\n" sleep 3 # Carrega de la llibreria de funcions -if [ -f "${FULL_PATH}/setup_djau/functions.sh" ]; then - source "${FULL_PATH}/setup_djau/functions.sh" +if [ -f "$FULL_PATH/setup_djau/functions.sh" ]; then + source "$FULL_PATH/setup_djau/functions.sh" echo -e "${C_EXITO}✅ Llibreria de funcions carregada amb èxit.${RESET}" else - echo -e "\n\e[31m\e[1m❌ ERROR:\e[0m No s'ha trobat l'arxiu functions.sh dins el directori ${FULL_PATH}/setup_djau/." + echo -e "\n\e[31m\e[1m❌ ERROR:\e[0m No s'ha trobat l'arxiu functions.sh dins el directori $FULL_PATH/setup_djau/." fi # --- 2. Fitxers a descarregar --- From 98ce120fc200eea665f6ae82d733fa549c634d1f Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 16:25:00 +0100 Subject: [PATCH 06/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/carrega_inicial.old | 18 +++++ docker/carrega_inicial.sh | 27 ++++++- docker/install_quick_demo_docker.sh | 120 +++++++++++----------------- 3 files changed, 87 insertions(+), 78 deletions(-) create mode 100755 docker/carrega_inicial.old diff --git a/docker/carrega_inicial.old b/docker/carrega_inicial.old new file mode 100755 index 00000000..35fe9daa --- /dev/null +++ b/docker/carrega_inicial.old @@ -0,0 +1,18 @@ +#!/bin/bash +set -e + +wait-for-it db:5432 --timeout=30 --strict + +if [ ! -f /app/storage/.inicialitzat ]; then + echo "Inicialitzant dades ..." + python manage.py migrate + python manage.py collectstatic --noinput + ./scripts/fixtures.sh + python manage.py loaddemodata + touch /app/storage/.inicialitzat +else + echo "Dades ja inicialitzades." +fi + +exec python manage.py runserver 0.0.0.0:8000 + diff --git a/docker/carrega_inicial.sh b/docker/carrega_inicial.sh index 35fe9daa..ec99d20f 100755 --- a/docker/carrega_inicial.sh +++ b/docker/carrega_inicial.sh @@ -1,7 +1,26 @@ #!/bin/bash set -e -wait-for-it db:5432 --timeout=30 --strict +echo "⌛ Esperant que la base de dades estigui operativa..." + +TIMEOUT=60 +COUNT=0 + +# Utilitzem pg_isready per minimitzar el temps d'espera fent la comprovació amb motor de postgres +until pg_isready -h db -U "$DB_USER" >/dev/null 2>&1; do + sleep 1 + ((COUNT+=1)) + + if [ $COUNT -ge $TIMEOUT ]; then + echo "❌ ERROR: La base de dades no ha respost en $TIMEOUT segons." + echo " El procés d'inicialització s'ha aturat. Revisa els logs amb: 'docker logs demo_db' o amb 'make logs'." + exit 1 + fi +done + +echo "✅ PostgreSQL està llest! (El procés de preparació ha trigat $COUNT segons)" +echo +echo "📦 Aplicant migracions i preparant dades..." if [ ! -f /app/storage/.inicialitzat ]; then echo "Inicialitzant dades ..." @@ -11,8 +30,10 @@ if [ ! -f /app/storage/.inicialitzat ]; then python manage.py loaddemodata touch /app/storage/.inicialitzat else - echo "Dades ja inicialitzades." + echo "Les dades ja s'havien inicialitzant anteriorment." fi - +echo +echo "Engengant el servidor de desenvolupament..." +echo exec python manage.py runserver 0.0.0.0:8000 diff --git a/docker/install_quick_demo_docker.sh b/docker/install_quick_demo_docker.sh index 60d8638e..570435c9 100644 --- a/docker/install_quick_demo_docker.sh +++ b/docker/install_quick_demo_docker.sh @@ -70,6 +70,8 @@ if [ -f "$FULL_PATH/setup_djau/functions.sh" ]; then echo -e "${C_EXITO}✅ Llibreria de funcions carregada amb èxit.${RESET}" else echo -e "\n\e[31m\e[1m❌ ERROR:\e[0m No s'ha trobat l'arxiu functions.sh dins el directori $FULL_PATH/setup_djau/." + echo "No es pot continuar sense la llibreria de funcions." + exit 1 fi # --- 2. Fitxers a descarregar --- @@ -90,7 +92,7 @@ DEST_FILES=( # --- 3. Descarregar fitxers de configuració i dades --- -echo "📦 Descarregant fitxers necessaris..." +echo -e "${C_INFO}📦 Descarregant fitxers necessaris...${RESET}" for i in "${!FILES_TO_DOWNLOAD[@]}"; do ORIGIN="${FILES_TO_DOWNLOAD[$i]}" @@ -101,16 +103,15 @@ for i in "${!FILES_TO_DOWNLOAD[@]}"; do echo " -> Descarregant ${ORIGIN} com a ${DEST}..." if cp "${FULL_PATH}/docker/${ORIGIN}" "${DEST}"; then - echo " ✅ Fitxer ${DEST} descarregat correctament." + echo -e "${C_EXITO} ✅ Fitxer ${DEST} descarregat correctament.${RESET}" else - echo " ❌ Error en descarregar ${ORIGIN}." - exit 1 + finalitzar_amb_error " Error en descarregar ${ORIGIN}." fi echo done -echo "✅ Tots els fitxers s'han descarregat correctament." +echo -e "${C_EXITO}✅ Tots els fitxers s'han descarregat correctament.${RESET}" echo ls -lah Dockerfile docker-compose.yml Makefile .env @@ -120,37 +121,38 @@ echo # --- 4. Instal·lar make si cal --- -echo "🔧 Comprovant que 'make' estigui instal·lat..." +echo -e "${C_INFO}🔧 Comprovant que 'make' estigui instal·lat...${RESET}" if ! command -v make &> /dev/null; then - echo " Instal·lant 'make'..." + echo -e "${C_INFO} Instal·lant 'make'...${RESET}" sudo apt-get update -y >/dev/null 2>&1 sudo apt-get install -y make if ! command -v make &> /dev/null; then - echo " ERROR a la instal·lació de 'make'" - exit 1 + finalitzar_amb_error " Error a la instal·lació de 'make'" fi else - echo " ✅ 'make' ja està disponible." + echo -e "${C_EXITO} ✅ 'make' ja està disponible.${RESET}" fi # --- 5. Pregunta pel domini o IP --- echo -echo "🌍 Si la Demo ha de funcionar en una xarxa local cal definir quina IP té. Si es vol instal·lar en un servidor en internet (VPS) caldrà informar de la seva IP pública i del domini o subdomini, si n'hi ha." +echo -e "${C_INFO}🌍 Si la Demo ha de funcionar en una xarxa local cal definir quina IP té. Si es vol instal·lar en un servidor en internet (VPS) caldrà informar de la seva IP pública i del domini o subdomini, si n'hi ha.${RESET}" echo -e "\n" -read -p "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (S/n): " REPLY +read_prompt "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (Per defecte NO: sí/NO): " REPLY "no" +RESPONSE_LOWER=$(echo "$REPLY" | tr '[:upper:]' '[:lower:]') +#read -p "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (S/n): " REPLY -if [[ $REPLY =~ ^[Ss]$ ]]; then +if [[ "$RESPONSE_LOWER" = "sí" ]] && [[ "$RESPONSE_LOWER" = "si" ]]; then read -p "👉 Introdueix els dominis o IPs separats per comes (ex: demo.elteudomini.cat,192.168.1.46): " HOSTS if [ -n "$HOSTS" ]; then sed -i "s|^DEMO_ALLOWED_HOSTS=.*|DEMO_ALLOWED_HOSTS=${HOSTS}|" .env - echo "✅ Fitxer .env actualitzat amb DEMO_ALLOWED_HOSTS=${HOSTS}" + echo -e "${C_EXITO}✅ Fitxer .env actualitzat amb DEMO_ALLOWED_HOSTS=${HOSTS}${RESET}" else - echo "⚠️ No s'ha introduït cap domini/IP. Es manté buit." + echo -e "${C_INFO}⚠️ No s'ha introduït cap domini/IP. Es manté buit.${RESET}" fi else - echo "ℹ️ No s'ha modificat DEMO_ALLOWED_HOSTS. Es manté buit." + echo -e "${C_INFO}ℹ️ No s'ha modificat DEMO_ALLOWED_HOSTS. Es manté buit.${RESET}" fi @@ -162,104 +164,72 @@ if [ -f .env ]; then source .env # carregar DB_USER, etc. set +a else - echo "⚠️ No s'ha trobat el fitxer .env. No es pot comprovar l'estat de la base de dades." - exit 1 + finalitzar_amb_error "⚠️ No s'ha trobat el fitxer .env. No es pot comprovar l'estat de la base de dades." fi echo -echo "🕓 Posant en marxa els contenidors de la Demo i de la Base de Dades PostgreSQL..." +echo -e "${C_INFO}🕓 Posant en marxa els contenidors de la Demo i de la Base de Dades PostgreSQL...${RESET}" echo make build make serve echo -# --- 7. Esperar que la base de dades estigui llesta --- +# --- 7. Informació sobre els contenidors en marxa --- echo -echo "⌛ Esperant que la base de dades estigui llesta (pot trigar uns segons)..." -TIMEOUT=60 -COUNT=0 -until docker exec demo_db pg_isready -U "$DB_USER" >/dev/null 2>&1; do - sleep 2 - ((COUNT+=2)) - if [ $COUNT -ge $TIMEOUT ]; then - echo "❌ Error: la base de dades no ha respost en $TIMEOUT segons." - echo " Revisa els logs amb: docker logs demo_db" - exit 1 - fi -done -echo " L'espera ha sigut de $COUNT segons." -echo " ✅ PostgreSQL està llest!" - -echo -echo "--------------------------------------------" -echo "📦 Estat final de l'estat dels contenidors" -echo "--------------------------------------------" +echo -e "${C_INFO}--------------------------------------------${RESET}" +echo -e "${C_INFO}📦 Estat final de l'estat dels contenidors ${RESET}" +echo -e "${C_INFO}--------------------------------------------${RESET}" docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" -echo "--------------------------------------------" +echo -e "${C_INFO}--------------------------------------------${RESET}" echo echo # --- 8. Espera a la finalització de la preparació --- -#echo "Premi qualsevol tecla per continuar i mostrar el progrés de la preparació de la demo." -#read -p "posteriorment CTRL-C per deixar de mostrar la informació." -n1 -s - -#docker logs -f demo_web - -echo "AQUÍ CAL POSAR UN BON MISSATGE PER INDICAR QUE MOSTRAREM ELS LOGS" -echo "Comença la prova" - - +echo -e "${C_INFO}Progrès de preparació de la base de dades i del servidor de la demo (logs).${RESET}" +echo -e "${C_INFO}El procés finalitzarà automàticament quan el servidor estigui llest.${RESET}" +echo -e "${C_INFO}---------------------------------------------------------------------------${RESET}" echo -e "\n" -info "S'està preparant la base de dades i el servidor..." -echo -e "${C_PRINCIPAL}Aquest procés finalitzarà automàticament quan el servidor estigui llest.${RESET}" -echo -e "${C_PRINCIPAL}------------------------------------------------------------------------${RESET}" # Iniciem el bucle de lectura de logs -# Filtrem els "SyntaxWarning" per no embrutar la sortida si vols docker logs -f demo_web 2>&1 | while read -r line; do - - # 1. Ignorem els SyntaxWarning per netaeja visual. NO VULL IGORNAR-LOS + + # 1. Bloc per ocultar els SyntaxWarning per neteja visual. #if [[ "$line" == *"SyntaxWarning"* ]]; then # continue #fi # 2. Imprimim la línia en gris per diferenciar-la del script - echo -e "${CIANO}${line}${RESET}" + echo -e "${GRIS}${line}${RESET}" # 3. Condició de sortida: Quan Django ens diu que ja escolta al port 8000 if [[ "$line" == *"Starting development server at"* ]]; then - echo -e "${C_PRINCIPAL}----------------------------------------------------------------------${RESET}" + echo -e "${C_INFO}----------------------------------------------------------------------${RESET}" echo -e "\n" - success "EL SERVIDOR ESTÀ PREPARAT!" - + echo -e "${C_EXITO}✅ EL SERVIDOR ESTÀ PREPARAT.${RESET}" # Matem el procés 'docker logs' per sortir del bucle 'while' - # Ho fem d'una manera neta cercant el procés fill pkill -P $$ -f "docker logs" break fi done - # --- 9. Missatge final --- -echo -echo -echo "Finalització de l'automatització!" +echo -e "\n" +sleep 1 -echo -echo -echo "ℹ️ Informació addicional" -echo -echo "Instruccions disponibles amb la comanda **make** per la Demo:" -echo " 1. Si no està en marxa, executi: make serve" -echo " 2. Per veure els logs: make logs" -echo " 3. Per detenir la Demo: make stop" -echo " 4. Per eliminar els contenidors: make down i després -> docker system prune -a" +echo -e "${C_INFO}-------------------------------------------------------------------------------------" +echo -e "ℹ️ Informació addicional${RESET}" +echo -e "\n" +echo -e "${C_INFO}Instruccions disponibles amb la comanda **make** per la Demo:${RESET}" +echo -e "${C_INFO} 1. Si no està en marxa, executi: ${RESET}${CIANO}make serve${RESET}" +echo -e "${C_INFO} 2. Per veure els logs: ${RESET}${CIANO}make logs${RESET}" +echo -e "${C_INFO} 3. Per detenir la Demo: ${RESET}${CIANO}make stop${RESET}" +echo -e "${C_INFO} 4. Per eliminar els contenidors: ${RESET}${CIANO}make down${RESET}${C_INFO} i després -> docker system prune -a" echo -echo "🌐 Si ha definit IP o dominis a DEMO_ALLOWED_HOSTS, provi ara d'accedir-hi al navegador!" -echo " (p. ex. http://demo.elteudomini.cat:8000 o http://IP:8000)" +echo -e "🌐 Si ha definit IP o dominis a DEMO_ALLOWED_HOSTS, provi ara d'accedir-hi al navegador!" +echo -e " (p. ex. http://demo.elteudomini.cat:8000 o http://IP:8000)${RESET}" echo From 7b4da67529845f91e78fb081e7253ce90b116f94 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 18:32:12 +0100 Subject: [PATCH 07/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/Dockerfile | 8 ++++++-- docker/install_quick_demo_docker.sh | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 00fb6f47..48029289 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -5,9 +5,13 @@ ENV PYTHONUNBUFFERED=1 WORKDIR /app COPY djau/. . -RUN apt-get update && apt-get install -y git wait-for-it \ +RUN apt-get update && apt-get install -y \ + git \ +# wait-for-it \ + postgresql-client \ libgl1 \ libglib2.0-0 && \ - apt clean && rm -rf /var/lib/apt/lists/* + apt clean && \ + rm -rf /var/lib/apt/lists/* RUN pip install --upgrade pip && pip install -r requirements.txt diff --git a/docker/install_quick_demo_docker.sh b/docker/install_quick_demo_docker.sh index 570435c9..8b5fad01 100644 --- a/docker/install_quick_demo_docker.sh +++ b/docker/install_quick_demo_docker.sh @@ -143,7 +143,7 @@ read_prompt "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedi RESPONSE_LOWER=$(echo "$REPLY" | tr '[:upper:]' '[:lower:]') #read -p "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (S/n): " REPLY -if [[ "$RESPONSE_LOWER" = "sí" ]] && [[ "$RESPONSE_LOWER" = "si" ]]; then +if [[ "$RESPONSE_LOWER" = "sí" ]] || [[ "$RESPONSE_LOWER" = "si" ]] || [[ "$RESPONSE_LOWER" = "s" ]]; then read -p "👉 Introdueix els dominis o IPs separats per comes (ex: demo.elteudomini.cat,192.168.1.46): " HOSTS if [ -n "$HOSTS" ]; then sed -i "s|^DEMO_ALLOWED_HOSTS=.*|DEMO_ALLOWED_HOSTS=${HOSTS}|" .env From c3ad46e8d31c06cf172086e7bcec215ba1d1aa04 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 18:52:50 +0100 Subject: [PATCH 08/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- setup_djau/functions.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup_djau/functions.sh b/setup_djau/functions.sh index 641af007..d63b1d26 100755 --- a/setup_djau/functions.sh +++ b/setup_djau/functions.sh @@ -16,6 +16,7 @@ ROJO='\e[31m' CIANO='\e[36m' AMARILLO='\e[33m' MAGENTA='\e[35m' +GRIS='\033[0;90m' # Gris clar (ideal per a logs) # Estils compostos C_EXITO="${NEGRITA}${VERDE}" # Éxit i confirmacions (✅) @@ -23,7 +24,7 @@ C_ERROR="${NEGRITA}${ROJO}" # Errors o fallades (❌) C_PRINCIPAL="${NEGRITA}${AZUL}" # Fases principals (FASE 1, FASE 2) C_CAPITULO="${NEGRITA}${CIANO}" # Títuls de Capítul (1. DEFINICIÓ...) C_SUBTITULO="${NEGRITA}${MAGENTA}" # Títuls de Subcapítul (1.1, 1.2) -C_INFO="${NEGRITA}${AMARILLO}" # Informació important (INFO, ATENCIÓN) +C_INFO="${NEGRITA}${AMARILLO}" # Informació important (INFO, ATENCIÓ) # =========================================================================== From 13807f0d5cbe71d4bb07b2b5cb4df29c18826c7a Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 19:40:35 +0100 Subject: [PATCH 09/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/carrega_inicial.sh | 7 ++++++- docker/install_quick_demo_docker.sh | 28 +++++++++++++++++----------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/docker/carrega_inicial.sh b/docker/carrega_inicial.sh index ec99d20f..b019b7b5 100755 --- a/docker/carrega_inicial.sh +++ b/docker/carrega_inicial.sh @@ -1,6 +1,7 @@ #!/bin/bash set -e - +echo "Mostrant 'logs'..." +echo echo "⌛ Esperant que la base de dades estigui operativa..." TIMEOUT=60 @@ -21,12 +22,16 @@ done echo "✅ PostgreSQL està llest! (El procés de preparació ha trigat $COUNT segons)" echo echo "📦 Aplicant migracions i preparant dades..." +echo if [ ! -f /app/storage/.inicialitzat ]; then echo "Inicialitzant dades ..." python manage.py migrate + echo -e "\n" python manage.py collectstatic --noinput + echo -e "\n" ./scripts/fixtures.sh + echo -e "\n" python manage.py loaddemodata touch /app/storage/.inicialitzat else diff --git a/docker/install_quick_demo_docker.sh b/docker/install_quick_demo_docker.sh index 8b5fad01..4b5fd624 100644 --- a/docker/install_quick_demo_docker.sh +++ b/docker/install_quick_demo_docker.sh @@ -20,10 +20,6 @@ echo # --- 1.1. CLONACIÓ DEL REPOSITORI # ---------------------------------------------------------------------- -echo "------- Clonant repositori ----------------------------" -echo "-------------------------------------------------------" -echo -e "\n" - # --- Instal·lar git si cal --- echo "🔧 Comprovant que 'git' estigui instal·lat..." @@ -38,6 +34,7 @@ if ! command -v git &> /dev/null; then else echo " ✅ 'git' ja està disponible." fi +echo -e "\n" FULL_PATH="./djau" REPO_URL="https://github.com/${REPO}.git" # repositori del projecte @@ -47,7 +44,13 @@ GIT_BRANCH=${BRANCA} # Si es vol instal·lar una branca concreta. Exemple: if [ -d "$FULL_PATH" ] && [ "$(ls -A "$FULL_PATH")" ]; then rm -Rf $FULL_PATH fi + +echo "------- Clonant repositori -------" +echo "----------------------------------" +echo -e "\n" + echo -e "Clonant $REPO_URL, branca '$GIT_BRANCH' en $FULL_PATH." +echo -e "\n" # Clonar el repositori com l'usuari de l'aplicació, forçant la branca especificada git clone -b "$GIT_BRANCH" "$REPO_URL" "$FULL_PATH" @@ -58,13 +61,15 @@ if [ $? -ne 0 ]; then echo -e "\n" exit 1 fi +echo -e "\n" echo -e "✅ Repositori clonat (Branca: $GIT_BRANCH) a '$FULL_PATH'." echo -e "\n" -sleep 3 +sleep 2 # Carrega de la llibreria de funcions +echo "Important variables de colors i funcions de la llibreria 'functions.sh'" if [ -f "$FULL_PATH/setup_djau/functions.sh" ]; then source "$FULL_PATH/setup_djau/functions.sh" echo -e "${C_EXITO}✅ Llibreria de funcions carregada amb èxit.${RESET}" @@ -73,6 +78,7 @@ else echo "No es pot continuar sense la llibreria de funcions." exit 1 fi +echo -e "\n" # --- 2. Fitxers a descarregar --- @@ -92,7 +98,8 @@ DEST_FILES=( # --- 3. Descarregar fitxers de configuració i dades --- -echo -e "${C_INFO}📦 Descarregant fitxers necessaris...${RESET}" +echo -e "${C_INFO}📦 Descarregant arxius necessaris per fer el desplegament amb Docker de la demo...${RESET}" +echo for i in "${!FILES_TO_DOWNLOAD[@]}"; do ORIGIN="${FILES_TO_DOWNLOAD[$i]}" @@ -107,13 +114,12 @@ for i in "${!FILES_TO_DOWNLOAD[@]}"; do else finalitzar_amb_error " Error en descarregar ${ORIGIN}." fi - echo done echo -e "${C_EXITO}✅ Tots els fitxers s'han descarregat correctament.${RESET}" echo - +echo "ls -lah Dockerfile docker-compose.yml Makefile .env" ls -lah Dockerfile docker-compose.yml Makefile .env echo @@ -138,7 +144,7 @@ fi echo echo -e "${C_INFO}🌍 Si la Demo ha de funcionar en una xarxa local cal definir quina IP té. Si es vol instal·lar en un servidor en internet (VPS) caldrà informar de la seva IP pública i del domini o subdomini, si n'hi ha.${RESET}" -echo -e "\n" +echo read_prompt "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (Per defecte NO: sí/NO): " REPLY "no" RESPONSE_LOWER=$(echo "$REPLY" | tr '[:upper:]' '[:lower:]') #read -p "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (S/n): " REPLY @@ -205,7 +211,7 @@ docker logs -f demo_web 2>&1 | while read -r line; do # 3. Condició de sortida: Quan Django ens diu que ja escolta al port 8000 if [[ "$line" == *"Starting development server at"* ]]; then - echo -e "${C_INFO}----------------------------------------------------------------------${RESET}" + echo -e "${C_INFO}----------------------------------------------------------------------------------------${RESET}" echo -e "\n" echo -e "${C_EXITO}✅ EL SERVIDOR ESTÀ PREPARAT.${RESET}" # Matem el procés 'docker logs' per sortir del bucle 'while' @@ -219,7 +225,7 @@ done echo -e "\n" sleep 1 -echo -e "${C_INFO}-------------------------------------------------------------------------------------" +echo -e "${C_INFO}----------------------------------------------------------------------------------------" echo -e "ℹ️ Informació addicional${RESET}" echo -e "\n" echo -e "${C_INFO}Instruccions disponibles amb la comanda **make** per la Demo:${RESET}" From 06c14e72ee544343e784c948ebbc9e6e71eef148 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 19:48:48 +0100 Subject: [PATCH 10/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/install_quick_demo_docker.sh | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/docker/install_quick_demo_docker.sh b/docker/install_quick_demo_docker.sh index 4b5fd624..664878f5 100644 --- a/docker/install_quick_demo_docker.sh +++ b/docker/install_quick_demo_docker.sh @@ -13,8 +13,11 @@ BRANCA="millora-demo" URL_BASE="https://raw.githubusercontent.com/${REPO}/refs/heads/${BRANCA}/docker" clear -echo -e "⚙️ Iniciant instal·lació de la Demo en Docker...\n" +echo "---------------------------------------------------------------" +echo "--- Instal·lador automàtic de la Demo Docker de django-aula ---" +echo "---------------------------------------------------------------" echo +sleep 1 # ---------------------------------------------------------------------- # --- 1.1. CLONACIÓ DEL REPOSITORI @@ -45,12 +48,8 @@ if [ -d "$FULL_PATH" ] && [ "$(ls -A "$FULL_PATH")" ]; then rm -Rf $FULL_PATH fi -echo "------- Clonant repositori -------" -echo "----------------------------------" -echo -e "\n" - echo -e "Clonant $REPO_URL, branca '$GIT_BRANCH' en $FULL_PATH." -echo -e "\n" +echo # Clonar el repositori com l'usuari de l'aplicació, forçant la branca especificada git clone -b "$GIT_BRANCH" "$REPO_URL" "$FULL_PATH" @@ -61,10 +60,9 @@ if [ $? -ne 0 ]; then echo -e "\n" exit 1 fi -echo -e "\n" +echo echo -e "✅ Repositori clonat (Branca: $GIT_BRANCH) a '$FULL_PATH'." - echo -e "\n" sleep 2 @@ -117,9 +115,7 @@ for i in "${!FILES_TO_DOWNLOAD[@]}"; do echo done -echo -e "${C_EXITO}✅ Tots els fitxers s'han descarregat correctament.${RESET}" -echo -echo "ls -lah Dockerfile docker-compose.yml Makefile .env" +echo -e "${C_EXITO}✅ Tots els fitxers s'han descarregat correctament. Llistant el contingut del directori com a comprovació:${RESET}" ls -lah Dockerfile docker-compose.yml Makefile .env echo From 2677ab8be9fb923cfbf8aae7287f3ff87122d4b8 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 21:58:49 +0100 Subject: [PATCH 11/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...demo_docker.sh => install_demo_docker.old} | 8 +- docker/install_demo_docker.sh | 256 ++++++++++++++++++ 2 files changed, 260 insertions(+), 4 deletions(-) rename docker/{install_quick_demo_docker.sh => install_demo_docker.old} (97%) create mode 100644 docker/install_demo_docker.sh diff --git a/docker/install_quick_demo_docker.sh b/docker/install_demo_docker.old similarity index 97% rename from docker/install_quick_demo_docker.sh rename to docker/install_demo_docker.old index 664878f5..a0b272e0 100644 --- a/docker/install_quick_demo_docker.sh +++ b/docker/install_demo_docker.old @@ -197,10 +197,10 @@ echo -e "\n" # Iniciem el bucle de lectura de logs docker logs -f demo_web 2>&1 | while read -r line; do - # 1. Bloc per ocultar els SyntaxWarning per neteja visual. - #if [[ "$line" == *"SyntaxWarning"* ]]; then - # continue - #fi + # 1. Bloc per ocultar els SyntaxWarning, per neteja visual. Si, per dev, es vol veure tota la sortida cal fer make logs + if [[ "$line" == *"SyntaxWarning"* ]]; then + continue + fi # 2. Imprimim la línia en gris per diferenciar-la del script echo -e "${GRIS}${line}${RESET}" diff --git a/docker/install_demo_docker.sh b/docker/install_demo_docker.sh new file mode 100644 index 00000000..26b06fb7 --- /dev/null +++ b/docker/install_demo_docker.sh @@ -0,0 +1,256 @@ +#!/bin/bash +# ------------------------------------------------------------- +# Script per a la instal·lació de la Demo Docker de django-aula. +# Descarrega els fitxers de configuració i comprova la base de dades. +# ------------------------------------------------------------- + +# ============================================================= +# 1. CONFIGURACIÓ DE RUTES I REPOSITORI +# ============================================================= + +# Ruta on s'executa el script (Directori arrel de la instal·lació) +BASE_DIR=$(pwd) + +# Dades del repositori +#REPO_USER="ctrl-alt-d" +REPO_USER="rafatecno1" +REPO_NAME="django-aula" +REPO_BRANCA="millora-demo" +#REPO_BRANCA="master" + +# Rutes locals +DJAU_PATH="${BASE_DIR}/djau" +DOCKER_SRC="${DJAU_PATH}/docker" +FUNCTION_PATH="${DJAU_PATH}/setup_djau" + +# URLs +REPO_URL="https://github.com/${REPO_USER}/${REPO_NAME}.git" + + + + + +#REPO="rafatecno1/django-aula" +#REPO="ctrl-alt-d/django-aula" +#BRANCA="master" +#BRANCA="millora-demo" +#URL_BASE="https://raw.githubusercontent.com/${REPO}/refs/heads/${BRANCA}/docker" + +clear +echo "---------------------------------------------------------------" +echo "--- Instal·lador automàtic de la Demo Docker de django-aula ---" +echo "--- Branca: $REPO_BRANCA | Arrel: $BASE_DIR ---" +echo "---------------------------------------------------------------" +echo +sleep 1 + +# --- 1. Clonació del repositori + +# Instal·lar git, si cal. + +echo "🔧 Comprovant que 'git' estigui instal·lat..." +if ! command -v git &> /dev/null; then + echo " Instal·lant 'git'..." + sudo apt-get update -y >/dev/null 2>&1 + sudo apt-get install -y git + if ! command -v git &> /dev/null; then + echo " ERROR a la instal·lació de 'git'" + exit 1 + fi +else + echo " ✅ 'git' ja està disponible." +fi +echo -e "\n" + +#FULL_PATH="./djau" +#REPO_URL="https://github.com/${REPO}.git" # repositori del projecte +#GIT_BRANCH=${BRANCA} # Si es vol instal·lar una branca concreta. Exemple: "feat/upgrade-bootstrap" + +# COMPROVACIÓ: El directori existeix i no està buit? +if [ -d "$DJAU_PATH" ] && [ "$(ls -A "$DJAU_PATH")" ]; then + rm -Rf $DJAU_PATH +fi + +echo -e "Clonant $REPO_URL, branca '$REPO_BRANCA' en $DJAU_PATH." +echo + +# Clonar el repositori com l'usuari de l'aplicació, forçant la branca especificada i amb profunditat mínima (no interessa tot l'historial) +git clone --depth 1 -b "$REPO_BRANCA" "$REPO_URL" "$DJAU_PATH" +#git clone -b "$GIT_BRANCH" "$REPO_URL" "$FULL_PATH" + +if [ $? -ne 0 ]; then + echo -e "❌ ERROR: Fallida en clonar la branca '$REPO_BRANCA' del repositori '$REPO_URL'." + echo "Comprovi la URL, conexió a internet o permisos de l'usuari." + echo -e "\n" + exit 1 +fi +echo +echo -e "✅ Repositori clonat (Branca: $REPO_BRANCA) a '$DJAU_PATH'." + +echo -e "\n" +sleep 2 + +# Carrega de la llibreria de funcions +echo "Important variables de colors i funcions de la llibreria 'functions.sh'" +if [ -f "$FUNCTION_PATH/functions.sh" ]; then + source "$FUNCTION_PATH/functions.sh" + echo -e "${C_EXITO}✅ Llibreria de funcions carregada amb èxit.${RESET}" +else + echo -e "\n\e[31m\e[1m❌ ERROR:\e[0m No s'ha trobat l'arxiu functions.sh dins el directori $FUNCTION_PATH." + echo "No es pot continuar sense la llibreria de funcions." + exit 1 +fi +echo -e "\n" + +# --- 2. Fitxers a descarregar --- + +FILES_ORIGIN=( + "Dockerfile" + "docker-compose.demo.automatica.yml" + "Makefile.demo.automatica" + "env.demo.automatica" +) +FILES_DEST=( + "Dockerfile" + "docker-compose.yml" + "Makefile" + ".env" + ) + +# --- 3. Descarregar fitxers de configuració i dades --- + +echo -e "${C_INFO}📦 Preparant fitxers pel desplegament des de ${DOCKER_SRC}...${RESET}" +echo + +for i in "${!FILES_ORIGIN[@]}"; do + SRC="${DOCKER_SRC}/${FILES_ORIGIN[$i]}" + DST="${BASE_DIR}/${FILES_DEST[$i]}" + + if [ -f "$SRC" ]; then + cp "$SRC" "$DST" + echo -e "${C_EXITO} ✅ ${FILES_DEST[$i]} preparat.${RESET}" + else + echo -e "${C_ERROR} ❌ No s'ha trobat l'origen: ${FILES_ORIGIN[$i]}${RESET}" + exit 1 + fi +done + +echo -e "${C_EXITO}✅ Tots els fitxers s'han descarregat correctament. Com a comprovació es llista el contingut del directori:${RESET}" +ls -lah Dockerfile docker-compose.yml Makefile .env + +echo + +# --- 4. Instal·lar make si cal --- + +echo -e "${C_INFO}🔧 Comprovant que 'make' estigui instal·lat...${RESET}" +if ! command -v make &> /dev/null; then + echo -e "${C_INFO} Instal·lant 'make'...${RESET}" + sudo apt-get update -y >/dev/null 2>&1 + sudo apt-get install -y make + if ! command -v make &> /dev/null; then + finalitzar_amb_error " Error a la instal·lació de 'make'" + fi +else + echo -e "${C_EXITO} ✅ 'make' ja està disponible.${RESET}" +fi + + +# --- 5. Pregunta pel domini o IP --- + +echo +echo -e "${C_INFO}🌍 Si la Demo ha de funcionar en una xarxa local cal definir quina IP té. Si es vol instal·lar en un servidor en internet (VPS) caldrà informar de la seva IP pública i del domini o subdomini, si n'hi ha.${RESET}" +echo +read_prompt "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (Per defecte NO: sí/NO): " REPLY "no" +RESPONSE_LOWER=$(echo "$REPLY" | tr '[:upper:]' '[:lower:]') +#read -p "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (S/n): " REPLY + +if [[ "$RESPONSE_LOWER" = "sí" ]] || [[ "$RESPONSE_LOWER" = "si" ]] || [[ "$RESPONSE_LOWER" = "s" ]]; then + read -p "👉 Introdueix els dominis o IPs separats per comes (ex: demo.elteudomini.cat,192.168.1.46): " HOSTS + if [ -n "$HOSTS" ]; then + sed -i "s|^DEMO_ALLOWED_HOSTS=.*|DEMO_ALLOWED_HOSTS=${HOSTS}|" .env + echo -e "${C_EXITO}✅ Fitxer .env actualitzat amb DEMO_ALLOWED_HOSTS=${HOSTS}${RESET}" + else + echo -e "${C_INFO}⚠️ No s'ha introduït cap domini/IP. Es manté buit.${RESET}" + fi +else + echo -e "${C_INFO}ℹ️ No s'ha modificat DEMO_ALLOWED_HOSTS. Es manté buit.${RESET}" +fi + + +# --- 6. Posar en marxa els contenidors --- + +# Comprovant que l'arxiu .env existeix +if [ -f .env ]; then + set -a + source .env # carregar DB_USER, etc. + set +a +else + finalitzar_amb_error "⚠️ No s'ha trobat el fitxer .env. No es pot comprovar l'estat de la base de dades." +fi + +echo +echo -e "${C_INFO}🕓 Posant en marxa els contenidors de la Demo i de la Base de Dades PostgreSQL...${RESET}" +echo +make build +make serve +echo + +# --- 7. Informació sobre els contenidors en marxa --- + +echo +echo -e "${C_INFO}--------------------------------------------${RESET}" +echo -e "${C_INFO}📦 Estat final de l'estat dels contenidors ${RESET}" +echo -e "${C_INFO}--------------------------------------------${RESET}" +docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" +echo -e "${C_INFO}--------------------------------------------${RESET}" +echo +echo + +# --- 8. Espera a la finalització de la preparació --- + +echo -e "${C_INFO}Progrès de preparació de la base de dades i del servidor de la demo (logs).${RESET}" +echo -e "${C_INFO}El procés finalitzarà automàticament quan el servidor estigui llest.${RESET}" +echo -e "${C_INFO}---------------------------------------------------------------------------${RESET}" +echo -e "\n" + +# Iniciem el bucle de lectura de logs +docker logs -f demo_web 2>&1 | while read -r line; do + + # 1. Bloc per ocultar els SyntaxWarning, per neteja visual. Si, per dev, es vol veure tota la sortida cal fer make logs + if [[ "$line" == *"SyntaxWarning"* ]]; then + continue + fi + + # 2. Imprimim la línia en gris per diferenciar-la del script + echo -e "${GRIS}${line}${RESET}" + + # 3. Condició de sortida: Quan Django ens diu que ja escolta al port 8000 + if [[ "$line" == *"Starting development server at"* ]]; then + echo -e "${C_INFO}----------------------------------------------------------------------------------------${RESET}" + echo -e "\n" + echo -e "${C_EXITO}✅ EL SERVIDOR ESTÀ PREPARAT.${RESET}" + # Matem el procés 'docker logs' per sortir del bucle 'while' + pkill -P $$ -f "docker logs" + break + fi +done + +# --- 9. Missatge final --- + +echo -e "\n" +sleep 1 + +echo -e "${C_INFO}----------------------------------------------------------------------------------------" +echo -e "ℹ️ Informació addicional${RESET}" +echo -e "\n" +echo -e "${C_INFO}Instruccions disponibles amb la comanda **make** per la Demo:${RESET}" +echo -e "${C_INFO} 1. Si no està en marxa, executi: ${RESET}${CIANO}make serve${RESET}" +echo -e "${C_INFO} 2. Per veure els logs: ${RESET}${CIANO}make logs${RESET}" +echo -e "${C_INFO} 3. Per detenir la Demo: ${RESET}${CIANO}make stop${RESET}" +echo -e "${C_INFO} 4. Per eliminar els contenidors: ${RESET}${CIANO}make down${RESET}${C_INFO} i després -> docker system prune -a" + +echo +echo -e "🌐 Si ha definit IP o dominis a DEMO_ALLOWED_HOSTS, provi ara d'accedir-hi al navegador!" +echo -e " (p. ex. http://demo.elteudomini.cat:8000 o http://IP:8000)${RESET}" +echo + From 7fa0b99325b51c0e7874a8d24fbdb5bd429f1bc4 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 22:16:57 +0100 Subject: [PATCH 12/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/install_demo_docker.sh | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/docker/install_demo_docker.sh b/docker/install_demo_docker.sh index 26b06fb7..18a083db 100644 --- a/docker/install_demo_docker.sh +++ b/docker/install_demo_docker.sh @@ -4,9 +4,7 @@ # Descarrega els fitxers de configuració i comprova la base de dades. # ------------------------------------------------------------- -# ============================================================= -# 1. CONFIGURACIÓ DE RUTES I REPOSITORI -# ============================================================= +# --- 0. Configuració de rutes i repositori # Ruta on s'executa el script (Directori arrel de la instal·lació) BASE_DIR=$(pwd) @@ -26,16 +24,6 @@ FUNCTION_PATH="${DJAU_PATH}/setup_djau" # URLs REPO_URL="https://github.com/${REPO_USER}/${REPO_NAME}.git" - - - - -#REPO="rafatecno1/django-aula" -#REPO="ctrl-alt-d/django-aula" -#BRANCA="master" -#BRANCA="millora-demo" -#URL_BASE="https://raw.githubusercontent.com/${REPO}/refs/heads/${BRANCA}/docker" - clear echo "---------------------------------------------------------------" echo "--- Instal·lador automàtic de la Demo Docker de django-aula ---" @@ -62,10 +50,6 @@ else fi echo -e "\n" -#FULL_PATH="./djau" -#REPO_URL="https://github.com/${REPO}.git" # repositori del projecte -#GIT_BRANCH=${BRANCA} # Si es vol instal·lar una branca concreta. Exemple: "feat/upgrade-bootstrap" - # COMPROVACIÓ: El directori existeix i no està buit? if [ -d "$DJAU_PATH" ] && [ "$(ls -A "$DJAU_PATH")" ]; then rm -Rf $DJAU_PATH @@ -76,7 +60,6 @@ echo # Clonar el repositori com l'usuari de l'aplicació, forçant la branca especificada i amb profunditat mínima (no interessa tot l'historial) git clone --depth 1 -b "$REPO_BRANCA" "$REPO_URL" "$DJAU_PATH" -#git clone -b "$GIT_BRANCH" "$REPO_URL" "$FULL_PATH" if [ $? -ne 0 ]; then echo -e "❌ ERROR: Fallida en clonar la branca '$REPO_BRANCA' del repositori '$REPO_URL'." @@ -135,6 +118,7 @@ for i in "${!FILES_ORIGIN[@]}"; do fi done +echo echo -e "${C_EXITO}✅ Tots els fitxers s'han descarregat correctament. Com a comprovació es llista el contingut del directori:${RESET}" ls -lah Dockerfile docker-compose.yml Makefile .env @@ -154,7 +138,6 @@ else echo -e "${C_EXITO} ✅ 'make' ja està disponible.${RESET}" fi - # --- 5. Pregunta pel domini o IP --- echo @@ -176,7 +159,6 @@ else echo -e "${C_INFO}ℹ️ No s'ha modificat DEMO_ALLOWED_HOSTS. Es manté buit.${RESET}" fi - # --- 6. Posar en marxa els contenidors --- # Comprovant que l'arxiu .env existeix @@ -253,4 +235,3 @@ echo echo -e "🌐 Si ha definit IP o dominis a DEMO_ALLOWED_HOSTS, provi ara d'accedir-hi al navegador!" echo -e " (p. ex. http://demo.elteudomini.cat:8000 o http://IP:8000)${RESET}" echo - From e701232b3327c6a1af4d062b2aa047bbca2bba82 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Fri, 6 Feb 2026 22:32:01 +0100 Subject: [PATCH 13/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/install_demo_docker.old | 237 --------------------------------- 1 file changed, 237 deletions(-) delete mode 100644 docker/install_demo_docker.old diff --git a/docker/install_demo_docker.old b/docker/install_demo_docker.old deleted file mode 100644 index a0b272e0..00000000 --- a/docker/install_demo_docker.old +++ /dev/null @@ -1,237 +0,0 @@ -#!/bin/bash -# ------------------------------------------------------------- -# Script per a la instal·lació de la Demo Docker de django-aula. -# Descarrega els fitxers de configuració i comprova la base de dades. -# ------------------------------------------------------------- - -# --- 1. Informació del repositori --- - -REPO="rafatecno1/django-aula" -#REPO="ctrl-alt-d/django-aula" -#BRANCA="master" -BRANCA="millora-demo" -URL_BASE="https://raw.githubusercontent.com/${REPO}/refs/heads/${BRANCA}/docker" - -clear -echo "---------------------------------------------------------------" -echo "--- Instal·lador automàtic de la Demo Docker de django-aula ---" -echo "---------------------------------------------------------------" -echo -sleep 1 - -# ---------------------------------------------------------------------- -# --- 1.1. CLONACIÓ DEL REPOSITORI -# ---------------------------------------------------------------------- - -# --- Instal·lar git si cal --- - -echo "🔧 Comprovant que 'git' estigui instal·lat..." -if ! command -v git &> /dev/null; then - echo " Instal·lant 'git'..." - sudo apt-get update -y >/dev/null 2>&1 - sudo apt-get install -y git - if ! command -v git &> /dev/null; then - echo " ERROR a la instal·lació de 'git'" - exit 1 - fi -else - echo " ✅ 'git' ja està disponible." -fi -echo -e "\n" - -FULL_PATH="./djau" -REPO_URL="https://github.com/${REPO}.git" # repositori del projecte -GIT_BRANCH=${BRANCA} # Si es vol instal·lar una branca concreta. Exemple: "feat/upgrade-bootstrap" - -# COMPROVACIÓ: El directori existeix i no està buit? -if [ -d "$FULL_PATH" ] && [ "$(ls -A "$FULL_PATH")" ]; then - rm -Rf $FULL_PATH -fi - -echo -e "Clonant $REPO_URL, branca '$GIT_BRANCH' en $FULL_PATH." -echo - -# Clonar el repositori com l'usuari de l'aplicació, forçant la branca especificada -git clone -b "$GIT_BRANCH" "$REPO_URL" "$FULL_PATH" - -if [ $? -ne 0 ]; then - echo -e "❌ ERROR: Fallida en clonar la branca '$GIT_BRANCH' del repositori '$REPO_URL'." - echo "Comprovi la URL, conexió a internet o permisos de l'usuari." - echo -e "\n" - exit 1 -fi -echo -echo -e "✅ Repositori clonat (Branca: $GIT_BRANCH) a '$FULL_PATH'." - -echo -e "\n" -sleep 2 - -# Carrega de la llibreria de funcions -echo "Important variables de colors i funcions de la llibreria 'functions.sh'" -if [ -f "$FULL_PATH/setup_djau/functions.sh" ]; then - source "$FULL_PATH/setup_djau/functions.sh" - echo -e "${C_EXITO}✅ Llibreria de funcions carregada amb èxit.${RESET}" -else - echo -e "\n\e[31m\e[1m❌ ERROR:\e[0m No s'ha trobat l'arxiu functions.sh dins el directori $FULL_PATH/setup_djau/." - echo "No es pot continuar sense la llibreria de funcions." - exit 1 -fi -echo -e "\n" - -# --- 2. Fitxers a descarregar --- - -FILES_TO_DOWNLOAD=( - "Dockerfile" - "docker-compose.demo.automatica.yml" - "Makefile.demo.automatica" - "env.demo.automatica" -) -DEST_FILES=( - "Dockerfile" - "docker-compose.yml" - "Makefile" - ".env" - ) - - -# --- 3. Descarregar fitxers de configuració i dades --- - -echo -e "${C_INFO}📦 Descarregant arxius necessaris per fer el desplegament amb Docker de la demo...${RESET}" -echo - -for i in "${!FILES_TO_DOWNLOAD[@]}"; do - ORIGIN="${FILES_TO_DOWNLOAD[$i]}" - DEST="${DEST_FILES[$i]}" - - # Crear el directori si no existeix - mkdir -p "$(dirname "${DEST}")" - - echo " -> Descarregant ${ORIGIN} com a ${DEST}..." - if cp "${FULL_PATH}/docker/${ORIGIN}" "${DEST}"; then - echo -e "${C_EXITO} ✅ Fitxer ${DEST} descarregat correctament.${RESET}" - else - finalitzar_amb_error " Error en descarregar ${ORIGIN}." - fi - echo -done - -echo -e "${C_EXITO}✅ Tots els fitxers s'han descarregat correctament. Llistant el contingut del directori com a comprovació:${RESET}" -ls -lah Dockerfile docker-compose.yml Makefile .env - -echo - - -# --- 4. Instal·lar make si cal --- - -echo -e "${C_INFO}🔧 Comprovant que 'make' estigui instal·lat...${RESET}" -if ! command -v make &> /dev/null; then - echo -e "${C_INFO} Instal·lant 'make'...${RESET}" - sudo apt-get update -y >/dev/null 2>&1 - sudo apt-get install -y make - if ! command -v make &> /dev/null; then - finalitzar_amb_error " Error a la instal·lació de 'make'" - fi -else - echo -e "${C_EXITO} ✅ 'make' ja està disponible.${RESET}" -fi - - -# --- 5. Pregunta pel domini o IP --- - -echo -echo -e "${C_INFO}🌍 Si la Demo ha de funcionar en una xarxa local cal definir quina IP té. Si es vol instal·lar en un servidor en internet (VPS) caldrà informar de la seva IP pública i del domini o subdomini, si n'hi ha.${RESET}" -echo -read_prompt "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (Per defecte NO: sí/NO): " REPLY "no" -RESPONSE_LOWER=$(echo "$REPLY" | tr '[:upper:]' '[:lower:]') -#read -p "Vol afegir un domini o IP a **DEMO_ALLOWED_HOSTS** per poder accedir-hi externament a la Demo? (S/n): " REPLY - -if [[ "$RESPONSE_LOWER" = "sí" ]] || [[ "$RESPONSE_LOWER" = "si" ]] || [[ "$RESPONSE_LOWER" = "s" ]]; then - read -p "👉 Introdueix els dominis o IPs separats per comes (ex: demo.elteudomini.cat,192.168.1.46): " HOSTS - if [ -n "$HOSTS" ]; then - sed -i "s|^DEMO_ALLOWED_HOSTS=.*|DEMO_ALLOWED_HOSTS=${HOSTS}|" .env - echo -e "${C_EXITO}✅ Fitxer .env actualitzat amb DEMO_ALLOWED_HOSTS=${HOSTS}${RESET}" - else - echo -e "${C_INFO}⚠️ No s'ha introduït cap domini/IP. Es manté buit.${RESET}" - fi -else - echo -e "${C_INFO}ℹ️ No s'ha modificat DEMO_ALLOWED_HOSTS. Es manté buit.${RESET}" -fi - - -# --- 6. Posar en marxa els contenidors --- - -# Comprovant que l'arxiu .env existeix -if [ -f .env ]; then - set -a - source .env # carregar DB_USER, etc. - set +a -else - finalitzar_amb_error "⚠️ No s'ha trobat el fitxer .env. No es pot comprovar l'estat de la base de dades." -fi - -echo -echo -e "${C_INFO}🕓 Posant en marxa els contenidors de la Demo i de la Base de Dades PostgreSQL...${RESET}" -echo -make build -make serve -echo - -# --- 7. Informació sobre els contenidors en marxa --- - -echo -echo -e "${C_INFO}--------------------------------------------${RESET}" -echo -e "${C_INFO}📦 Estat final de l'estat dels contenidors ${RESET}" -echo -e "${C_INFO}--------------------------------------------${RESET}" -docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" -echo -e "${C_INFO}--------------------------------------------${RESET}" -echo -echo - -# --- 8. Espera a la finalització de la preparació --- - -echo -e "${C_INFO}Progrès de preparació de la base de dades i del servidor de la demo (logs).${RESET}" -echo -e "${C_INFO}El procés finalitzarà automàticament quan el servidor estigui llest.${RESET}" -echo -e "${C_INFO}---------------------------------------------------------------------------${RESET}" -echo -e "\n" - -# Iniciem el bucle de lectura de logs -docker logs -f demo_web 2>&1 | while read -r line; do - - # 1. Bloc per ocultar els SyntaxWarning, per neteja visual. Si, per dev, es vol veure tota la sortida cal fer make logs - if [[ "$line" == *"SyntaxWarning"* ]]; then - continue - fi - - # 2. Imprimim la línia en gris per diferenciar-la del script - echo -e "${GRIS}${line}${RESET}" - - # 3. Condició de sortida: Quan Django ens diu que ja escolta al port 8000 - if [[ "$line" == *"Starting development server at"* ]]; then - echo -e "${C_INFO}----------------------------------------------------------------------------------------${RESET}" - echo -e "\n" - echo -e "${C_EXITO}✅ EL SERVIDOR ESTÀ PREPARAT.${RESET}" - # Matem el procés 'docker logs' per sortir del bucle 'while' - pkill -P $$ -f "docker logs" - break - fi -done - -# --- 9. Missatge final --- - -echo -e "\n" -sleep 1 - -echo -e "${C_INFO}----------------------------------------------------------------------------------------" -echo -e "ℹ️ Informació addicional${RESET}" -echo -e "\n" -echo -e "${C_INFO}Instruccions disponibles amb la comanda **make** per la Demo:${RESET}" -echo -e "${C_INFO} 1. Si no està en marxa, executi: ${RESET}${CIANO}make serve${RESET}" -echo -e "${C_INFO} 2. Per veure els logs: ${RESET}${CIANO}make logs${RESET}" -echo -e "${C_INFO} 3. Per detenir la Demo: ${RESET}${CIANO}make stop${RESET}" -echo -e "${C_INFO} 4. Per eliminar els contenidors: ${RESET}${CIANO}make down${RESET}${C_INFO} i després -> docker system prune -a" - -echo -echo -e "🌐 Si ha definit IP o dominis a DEMO_ALLOWED_HOSTS, provi ara d'accedir-hi al navegador!" -echo -e " (p. ex. http://demo.elteudomini.cat:8000 o http://IP:8000)${RESET}" -echo - From 996a86754a6549a0118eb3182637d78bdc35b950 Mon Sep 17 00:00:00 2001 From: rafatecno1 Date: Sat, 7 Feb 2026 15:07:23 +0100 Subject: [PATCH 14/14] =?UTF-8?q?Millora=20instal=C2=B7lador=20demo=20dock?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 20 ++++++++++---------- docker/install_demo_docker.sh | 6 ++---- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index f0140b20..2572f519 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Gestió de presència, incidències i més per a Instituts, Escoles i Acadèmies - [1. Introducció](#introduccio) - [2. Requisits del sistema operatiu per instal·lar Django-Aula](#requisits) -- [3. Desplegament d'una Demostració de Django-Aula (Quick Demo) amb Docker 🐳 ](#quickdemo) +- [3. Desplegament d'una Demostració de Django-Aula amb Docker 🐳 ](#demodocker) - [4. Instal·lació i càrrega de dades de Django-Aula per ús real a un Centre Educatiu](#produccio) - [5. Equip Desenvolupador i Suport Tècnic](#dev-suport-tecnic) @@ -54,10 +54,10 @@ Per qualsevol tipus d'instal·lació, ja sigui per un ús real o per l'entorn de --- - -## Desplegament d'una Demostració de Django-Aula (Quick Demo) amb Docker 🐳 + +## Desplegament d'una Demostració de Django-Aula amb Docker 🐳 -L'entorn de demostració, conegut com Demo, és una versió funcional del sistema i que es pot posar en funcionament en molt pocs minuts. Disposa de dades fictícies (usuaris, professors, alumnat i un horari mínim) que faciliten observar l'aspecte visual i interaccionar, des de diferents rols, amb les funcionalitats de l'aplicatiu real Django-Aula. +L'entorn de demostració, conegut com Demo, és una versió funcional del sistema i que es pot posar en funcionament en pocs minuts. Disposa de dades fictícies (usuaris, professors, alumnat i un horari mínim) que faciliten observar l'aspecte visual i interaccionar, des de diferents rols, amb les funcionalitats de l'aplicatiu real Django-Aula. El desplegament de la Demo s'ha automatitzat amb l'execució de dues comandes i consta de dues passes consecutives: @@ -78,17 +78,17 @@ Es recomana crear un subdirectori dins el directori de l'usuari instal·lador pe ```bash mkdir demo-djau-docker && cd demo-djau-docker && \ -wget -q -O install_quick_demo_docker.sh https://raw.githubusercontent.com/ctrl-alt-d/django-aula/refs/heads/master/docker/install_quick_demo_docker.sh && \ -chmod +x install_quick_demo_docker.sh && \ -bash ./install_quick_demo_docker.sh +wget -q -O install_demo_docker.sh https://raw.githubusercontent.com/ctrl-alt-d/django-aula/refs/heads/master/docker/install_demo_docker.sh && \ +chmod +x install_demo_docker.sh && \ +bash ./install_demo_docker.sh ``` -Tot i que el procés anterior és autònom i interactivament configurable, es recomana llegir la informació, molt més detallada del procés, segons el tipus de màquina (no virtualitzada, virtualitzada o servidor d'accés públic) on s'instal·larà la Demo. També hi haurà qui estarà interessat en dur a terme la instal·lació manual, tant de l'entorn de docker com de la Demo. Per tots aquests casos es recomana consultar els següents detallats documents: +Tot i que el procés anterior és autònom i interactivament configurable, es recomana llegir la informació, molt més detallada del procés, segons el tipus de màquina (no virtualitzada, virtualitzada o servidor d'accés públic) on s'instal·larà la Demo. També hi haurà qui estarà interessat en dur a terme la instal·lació manual, tant de l'entorn de Docker com de la Demo. Per tots aquests casos es recomana consultar els següents detallats documents: -➡️ **[Instal·lació de l'entorn de Docker i Docker Compose](docs/USER_MANUAL/demo/install_entorn_docker.md)**. +➡️ **[Instal·lació automatitzada de l'entorn de Docker i Docker Compose](docs/USER_MANUAL/demo/install_entorn_docker.md)**. -➡️ **[Instal·lació ràpida de la Demo amb Docker](docs/USER_MANUAL/demo/install_demo_docker.md)**. +➡️ **[Instal·lació automatitzada de la Demo amb Docker](docs/USER_MANUAL/demo/install_demo_docker.md)**. ➡️ **[Instal·lació manual de la Demo (sense Docker)](docs/USER_MANUAL/demo/install_demo_manual.md)**. diff --git a/docker/install_demo_docker.sh b/docker/install_demo_docker.sh index 18a083db..0e4efbc1 100644 --- a/docker/install_demo_docker.sh +++ b/docker/install_demo_docker.sh @@ -10,11 +10,9 @@ BASE_DIR=$(pwd) # Dades del repositori -#REPO_USER="ctrl-alt-d" -REPO_USER="rafatecno1" +REPO_USER="ctrl-alt-d" REPO_NAME="django-aula" -REPO_BRANCA="millora-demo" -#REPO_BRANCA="master" +REPO_BRANCA="master" # Rutes locals DJAU_PATH="${BASE_DIR}/djau"