Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -54,10 +54,10 @@ Per qualsevol tipus d'instal·lació, ja sigui per un ús real o per l'entorn de

---

<a name="quickdemo"></a>
## Desplegament d'una Demostració de Django-Aula (Quick Demo) amb Docker 🐳
<a name="demodocker"></a>
## 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:

Expand All @@ -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)**.

Expand Down
8 changes: 6 additions & 2 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
18 changes: 18 additions & 0 deletions docker/carrega_inicial.old
Original file line number Diff line number Diff line change
@@ -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

32 changes: 29 additions & 3 deletions docker/carrega_inicial.sh
Original file line number Diff line number Diff line change
@@ -1,18 +1,44 @@
#!/bin/bash
set -e
echo "Mostrant 'logs'..."
echo
echo "⌛ Esperant que la base de dades estigui operativa..."

wait-for-it db:5432 --timeout=30 --strict
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..."
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
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

235 changes: 235 additions & 0 deletions docker/install_demo_docker.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
#!/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.
# -------------------------------------------------------------

# --- 0. 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_NAME="django-aula"
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"

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"

# 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"

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
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
Loading