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
13 changes: 13 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM python:3.12-slim

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

WORKDIR /app
COPY djau/. .
RUN apt-get update && apt-get install -y git wait-for-it \
libgl1 \
libglib2.0-0 && \
apt clean && rm -rf /var/lib/apt/lists/*

RUN pip install --upgrade pip && pip install -r requirements.txt
7 changes: 6 additions & 1 deletion docker/Makefile.demo.automatica
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
.PHONY: serve stop down logs
.PHONY: build serve stop down logs

# ----------- DEMO -----------

build:
${INFO} "Creating builder image..."
@ docker compose -f docker-compose.yml build --no-cache web
${INFO} "Build completed"

serve:
${INFO} "Running demo services (detached)"
@ docker compose -f docker-compose.yml up -d
Expand Down
18 changes: 18 additions & 0 deletions docker/carrega_inicial.sh
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

15 changes: 9 additions & 6 deletions docker/docker-compose.demo.automatica.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# docker/docker-compose.demo.automatica.yml
services:
db:
image: postgres:17.7-alpine
image: postgres:16
container_name: demo_db
ports:
- "5432:5432"
Expand All @@ -13,15 +13,14 @@ services:
POSTGRES_DB: ${DB_NAME}
volumes:
- pg_data:/var/lib/postgresql/data
- ./dades-demo-sql:/docker-entrypoint-initdb.d
restart: always

web:
image: django_aula:latest
container_name: demo_web
# build:
# context: .
# dockerfile: Dockerfile
build:
context: .
dockerfile: Dockerfile
depends_on:
- db
env_file:
Expand All @@ -31,7 +30,11 @@ services:
restart: always
ports:
- "8000:8000"
command: bash -c "wait-for-it db:5432 --timeout=30 --strict && python manage.py runserver 0.0.0.0:8000"
volumes:
- media_data:/app/storage
command: docker/carrega_inicial.sh

volumes:
pg_data:
media_data:

121 changes: 81 additions & 40 deletions docker/install_quick_demo_docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,55 +14,97 @@ clear
echo -e "⚙️ Iniciant instal·lació ràpida de la Demo en Docker...\n"
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..."
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

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

# 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 -e "✅ Repositori clonat (Branca: $GIT_BRANCH) a '$FULL_PATH'."


echo -e "\n"
sleep 3

# --- 2. Fitxers a descarregar ---

FILES_TO_DOWNLOAD=(
"Dockerfile"
"docker-compose.demo.automatica.yml"
"Makefile.demo.automatica"
"env.demo.automatica"
"dades_demo.sql"
)
DEST_FILES=(
"Dockerfile"
"docker-compose.yml"
"Makefile"
".env"
"dades-demo-sql/dades_demo.sql"
)
)


# --- 3. Descarregar fitxers de configuració i dades ---

echo "📦 Descarregant fitxers necessaris..."
mkdir -p dades-demo-sql

for i in "${!FILES_TO_DOWNLOAD[@]}"; do
ORIGIN="${FILES_TO_DOWNLOAD[$i]}"
DEST="${DEST_FILES[$i]}"
URL="${URL_BASE}/${ORIGIN}"

# Crear el directori si no existeix
mkdir -p "$(dirname "${DEST}")"

echo " -> Descarregant ${ORIGIN} com a ${DEST}..."
if wget -q -O "${DEST}" "${URL}"; then
if cp "${FULL_PATH}/docker/${ORIGIN}" "${DEST}"; then
echo " ✅ Fitxer ${DEST} descarregat correctament."
else
echo " ❌ Error en descarregar ${ORIGIN}."
exit 1
fi

# Assignar permisos adequats
if [[ "${DEST}" == *.sql ]]; then
chmod 644 "${DEST}"
fi

echo
done

echo "✅ Tots els fitxers s'han descarregat correctament."
echo

ls -lah docker-compose.yml Makefile .env dades-demo-sql/dades_demo.sql
ls -lah Dockerfile docker-compose.yml Makefile .env

echo


Expand All @@ -71,7 +113,12 @@ echo
echo "🔧 Comprovant que 'make' estigui instal·lat..."
if ! command -v make &> /dev/null; then
echo " Instal·lant 'make'..."
sudo apt-get update -y >/dev/null 2>&1 && sudo apt-get install -y make
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
fi
else
echo " ✅ 'make' ja està disponible."
fi
Expand Down Expand Up @@ -99,14 +146,6 @@ fi

# --- 6. Posar en marxa els contenidors ---

echo
echo "🕓 Posant en marxa els contenidors de la Demo i de la Base de Dades PostgreSQL..."
echo
make serve
echo

# --- 7. Esperar que la base de dades estigui llesta ---

# Comprovant que l'arxiu .env existeix
if [ -f .env ]; then
set -a
Expand All @@ -117,6 +156,15 @@ else
exit 1
fi

echo
echo "🕓 Posant en marxa els contenidors de la Demo i de la Base de Dades PostgreSQL..."
echo
make build
make serve
echo

# --- 7. Esperar que la base de dades estigui llesta ---

echo
echo "⌛ Esperant que la base de dades estigui llesta (pot trigar uns segons)..."
TIMEOUT=60
Expand All @@ -132,35 +180,28 @@ until docker exec demo_db pg_isready -U "$DB_USER" >/dev/null 2>&1; do
done
echo " ✅ PostgreSQL està llest!"

echo
echo "--------------------------------------------"
echo "📦 Estat final de l'estat dels contenidors"
echo "--------------------------------------------"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo "--------------------------------------------"
echo
echo

# --- 8. Comprovació del fitxer SQL ---
# --- 8. Espera a la finalització de la preparació ---

echo
echo "🔍 Comprovant si s'ha carregat el fitxer SQL de dades de la demo..."
DB_LOGS=$(docker logs demo_db 2>&1 | grep -E "docker-entrypoint-initdb.d/.*\.sql" | tail -n 1)
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

if [[ "$DB_LOGS" == *".sql"* ]]; then
echo " ✅ Base de dades inicialitzada correctament!"
echo " Fragment del log:"
echo " $DB_LOGS"
else
echo "⚠️ No s'ha trobat cap evidència que s'hagi executat dades_demo.sql"
echo " -> Revisa amb: docker logs demo_db | less"
echo " -> o torna a reiniciar amb: make down && make serve"
fi
docker logs -f demo_web

# --- 9. Missatge final ---

echo
echo
echo "Finalització de l'automatització!"

echo
echo "--------------------------------------------"
echo "📦 Estat final de l'estat dels contenidors"
echo "--------------------------------------------"
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo "--------------------------------------------"
echo
echo
echo "ℹ️ Informació addicional"
Expand Down
2 changes: 1 addition & 1 deletion install_djau.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ REPO_URL="https://github.com/ctrl-alt-d/django-aula.git" # repositori del projec
GIT_BRANCH="master" # Si es vol instal·lar una branca concreta. Exemple: "feat/upgrade-bootstrap"

# Definició de sistema d'inicialització de processos del Sistema Operatiu (SysVinit vs Systemd)
IS_SYSTEMD=0 # Per defecte, assumim que no és systemd (Debian, etc.)
IS_SYSTEMD=0 # Per defecte, assumim que no és systemd (Devuan, etc.)

if command -v systemctl >/dev/null 2>&1; then
# La comanda systemctl s'ha trobat: és un sistema amb systemd (Debian, Ubuntu o derivats)
Expand Down