services: backend: build: ./backend env_file: ./backend/.env volumes: # Bind mounts (not named volumes) so the sqlite db and uploaded # receipt photos live visibly under ./data, not hidden inside # Docker's own volume storage. `:Z` relabels them for the container on # SELinux-enforcing hosts (Fedora/RHEL) - without it the container # gets "unable to open database file" since the host dir's default # user_home_t context isn't accessible to it. Harmless no-op on # non-SELinux hosts. - ./data/instance:/app/instance:Z - ./data/uploads:/app/uploads:Z restart: unless-stopped frontend: build: ./frontend ports: - "${FRONTEND_PORT:-8080}:80" depends_on: - backend restart: unless-stopped