Skip to main content

Instal·lació

Necessites tenir Docker instal·lat a la teva màquina.

Renfe Tracker es distribueix com a imatge Docker. La manera recomanada d'executar-lo és amb Docker Compose, tot i que docker run i el desenvolupament local sense Docker també estan admesos.


Opció 1 — Docker Compose (recomanat)

Docker Compose és l'opció més senzilla per a un desplegament permanent i sempre actiu. El fitxer compose gestiona els volums, els reinicis automàtics i la configuració de variables d'entorn en un sol lloc.

1. Obtenir el fitxer compose

curl -o docker-compose.yml https://raw.githubusercontent.com/JavierMonton/renfe-tracker/main/docker-compose.example.yml

2. (Opcional) Configurar variables d'entorn

Obre docker-compose.yml i descomenta / omple les opcions que necessitis:

services:
app:
image: jmonton/renfe-tracker:latest
ports:
- "${PORT:-8000}:8000"
environment:
DATA_DIR: /data

# ── Alertes per correu ────────────────────────────────
# SMTP_HOST: smtp.example.com
# SMTP_PORT: 587
# SMTP_USERNAME: alerts@example.com
# SMTP_PASSWORD: your-smtp-password

# ── Alertes de Home Assistant ────────────────────────
# HA_URL: http://homeassistant.local:8123
# HA_TOKEN: your-long-lived-access-token

volumes:
- ./data:/data
restart: unless-stopped

3. Iniciar

docker compose up -d

Obre http://localhost:8000. Per usar un port diferent, estableix PORT en un fitxer .env o directament:

PORT=9000 docker compose up -d

4. Aturar / actualitzar

# Aturar
docker compose down

# Obtenir la darrera imatge i reiniciar
docker compose pull
docker compose up -d

Les dades a ./data mai es modifiquen amb aquestes ordres.


Opció 2 — docker run

Usa aquesta opció si prefereixes gestionar el contenidor manualment o integrar-lo en una configuració existent.

Executar el contenidor

docker run -d \
--name renfe-tracker \
--restart unless-stopped \
-p 8000:8000 \
-v "$(pwd)/data:/data" \
jmonton/renfe-tracker:latest

Amb variables d'entorn per a correu electrònic i Home Assistant:

docker run -d \
--name renfe-tracker \
--restart unless-stopped \
-p 8000:8000 \
-v "$(pwd)/data:/data" \
-e SMTP_HOST=smtp.example.com \
-e SMTP_PORT=587 \
-e SMTP_USERNAME=alerts@example.com \
-e SMTP_PASSWORD=your-password \
-e HA_URL=http://homeassistant.local:8123 \
-e HA_TOKEN=your-ha-token \
jmonton/renfe-tracker:latest

Per actualitzar a una versió més recent:

docker pull jmonton/renfe-tracker:latest
docker rm -f renfe-tracker
# torna a executar l'ordre docker run anterior

Obre http://localhost:8000.


Opció 3 — Desenvolupament local (sense Docker)

Útil si vols modificar el codi. Requereix uv (gestor de paquets Python) i Node.js 18+.

Backend

# Instal·lar dependències
uv sync

# Iniciar el servidor API (recàrrega automàtica en canviar el codi)
uv run uvicorn app.main:app --reload --port 8000

Frontend

En un segon terminal:

cd frontend
npm install
npm run dev # Servidor de desenvolupament Vite a http://localhost:5173
# Totes les peticions /api es redirigeixen a :8000

El servidor de desenvolupament Vite redirigeix les crides /api al backend FastAPI, de manera que obtens recàrrega en calent al frontend mentre el backend gestiona les dades.

Executar les proves

uv run pytest          # totes les proves (Renfe es simula, sense crides de xarxa reals)
uv run pytest -v # sortida detallada

Persistència de dades

Totes les dades de l'aplicació viuen al directori ./data (o allà on apunti el volum):

RutaContingut
./data/renfe_tracker.dbBase de dades SQLite (viatges, preus, notificacions)
./data/renfe_schedule/Dades GTFS de Renfe (descarregades automàticament a la primera cerca)

La base de dades i els fitxers GTFS sobreviuen als reinicis, reconstruccions i actualitzacions del contenidor. Fes una còpia de seguretat del directori ./data per conservar els teus viatges seguits i l'historial de preus.

Propietat dels fitxers

El contenidor s'executa com a root per defecte per poder crear i escriure la base de dades al primer inici. Si vols que els fitxers de l'amfitrió siguin del teu usuari, estableix PUID i PGID:

environment:
PUID: 1000
PGID: 1000

O després del primer inici:

chown -R $(id -u):$(id -g) ./data