# Caudal en un contenedor, para un servidor de casa (Start9, Umbrel o Docker a secas). # # docker build -t caudal . # docker run -d --name caudal -p 8080:8080 -v caudal-datos:/data caudal # # Todo lo tuyo queda en /data (el volumen): los datos en /data/datos y, a su # lado, la contraseña de entrada (su huella) y los ajustes. La imagen no # guarda nada. Se entra con una contraseña que se crea la primera vez. # # CAUDAL_CIFRADO=1 cifra los datos en el disco desde el principio (para # los sistemas que no cifran el disco, como Umbrel) # # Si se olvida la contraseña y los datos no van cifrados: # docker exec caudal python3 -m cartera.acceso --datos /data/datos restablecer FROM python:3.12-slim RUN pip install --no-cache-dir "requests>=2.31" "beautifulsoup4>=4.12" "lxml>=4.9" "openpyxl>=3.1" "cryptography>=38" # UID 1000: el usuario con el que Umbrel monta los datos de las aplicaciones RUN useradd --uid 1000 --create-home caudal && mkdir -p /data && chown caudal:caudal /data WORKDIR /app COPY --chown=caudal:caudal programa/cartera ./cartera COPY LICENSE AVISO.md ./ USER caudal LABEL org.opencontainers.image.title="Caudal" \ org.opencontainers.image.description="Tus inversiones y tu bitcoin, llevados en tu casa" \ org.opencontainers.image.authors="esetheyers" \ org.opencontainers.image.licenses="AGPL-3.0-or-later" \ org.opencontainers.image.source="https://git.huveme.com/esetheyers/caudal" \ org.opencontainers.image.url="https://git.huveme.com/esetheyers/caudal" ENV PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 VOLUME ["/data"] EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD python3 -c "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:8080/api/salud', timeout=4).status == 200 else 1)" CMD ["python3", "-m", "cartera.servidor", "--servidor", "0.0.0.0", "--puerto", "8080", "--datos", "/data/datos"]