Everything was good, great in fact. Everything was working, but my OCD weren’t okay with how a few services were set-up, so I cleaned up my yaml, commented my docker compose and felt cushty… right up until it was time to fix Immich.
I have minor beef with Immich and basically any larger project and the way they go about their Docker Compose. Basically I feel they make the assumption that they’re the only thing running.
^Disclaimer: I fully accept this is all just me being too stupid and not the Immich development team.
So first things first, let’s rename database
to immich-database
, redis
to immich-redis
and most importantly, let’s give it a port that’s not the default postgres port that everyone wants to use. Easy right? Nope.
First Immich said it couldn’t find the database, so I went in and added the IP as the DB_URL
to the .env
. But that didn’t really help, so I went back to the Docker Compose and added the path to the references to the env.
Second issue I stumble upon, is that despite the port being available as DB_PORT
Immich decided it was a suggestion and not an instruction. No worries, I edit the database URL to include the port.
Okay, I’m on the home stretch now right. I mean this was working before I decided to mess around with it in the name of scalability or whatever I thought was genius at the time… except
[Nest] 7 - 04/05/2024, 6:10:23 PM ERROR [ExceptionHandler] no PostgreSQL user name specified in startup packet
What does that even mean? Why won’t you work? So I do a web search and everything is saying that docker probably isn’t reading the username from the env file or the Docker Compose. I try adding single quotes and no joy, double quotes, no joy. I have no idea where I’ve gone wrong. I feel like my beautiful simple Docker Compose now looks like Frankenstein’s Monster. Help 🙏
ENV
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables # The location where your uploaded files are stored #UPLOAD_LOCATION=immichlibrary # The Immich version to use. You can pin this to a specific version like "v1.71.0" IMMICH_VERSION=release # Connection secret for postgres. You should change it to a random password DB_PASSWORD="RANDOMLIES" DB_URL=http://192.168.0.89:8765 DB_PORT=8765 # The values below this line do not need to be changed ################################################################################### DB_HOSTNAME=immich_postgres DB_USERNAME=postgres DB_DATABASE_NAME=immich REDIS_HOSTNAME=immich_redis
Docker Compose
version: "3.8" # # WARNING: Make sure to use the docker-compose.yml of the current release: # # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml # # The compose file on main may not be compatible with the latest release. # name: immich services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} command: [ "start.sh", "immich" ] volumes: #- ${UPLOAD_LOCATION}:/usr/src/app/upload - immichlibrary:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - /opt/immich/.env environment: POSTGRES_USER: ${DB_USERNAME} POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: ${DB_DATABASE_NAME} ports: - 2283:3001 depends_on: - immich-redis - immich-database restart: always immich-microservices: container_name: immich_microservices image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} # extends: # file: hwaccel.yml # service: hwaccel command: [ "start.sh", "microservices" ] volumes: #- ${UPLOAD_LOCATION}:/usr/src/app/upload - immichlibrary:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro env_file: - /opt/immich/.env environment: POSTGRES_USER: ${DB_USERNAME} POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: ${DB_DATABASE_NAME} depends_on: - immich-redis - immich-database restart: always immich-machine-learning: container_name: immich_machine_learning image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} volumes: - model-cache:/cache env_file: - /opt/immich/.env restart: always immich-redis: container_name: immich_redis image: redis:6.2-alpine@sha256:c5a607fb6e1bb15d32bbcf14db22787d19e428d59e31a5da67511b49bb0f1ccc restart: always immich-database: container_name: immich_postgres image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0 env_file: - /opt/immich/.env environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} ports: - 8765:5432 volumes: - /opt/immich/postgres:/var/lib/postgresql/data restart: always volumes: model-cache: driver_opts: type: "nfs" o: "addr=192.168.0.245,nolock,soft,rw" device: ":/mnt/Shared Pictures/.Immich/cache" immichlibrary: driver_opts: type: "nfs" o: "addr=192.168.0.245,nolock,soft,rw" device: ":/mnt/Shared Pictures/.Immich"
Even if you read this and don’t feel you can help or have nothing to add, thanks for sharing your time with me 🥹
Dave@lemmy.nz 7 months ago
This might be my turn to be too stupid but isn’t the point of docker that they all run in containers so it doesn’t matter? They can all use the same database port, because the database is in a container and so doesn’t prevent another database container using the same port. The port doesn’t need to be exposed to the host.
The only issue that comes up when running lots of services is accessing them all over http, and that’s what a reverse proxy is for. I run a dozen services on the same machine, mostly using the default docker compose files, and never have to mess with things like you have here.
avidamoeba@lemmy.ca 7 months ago
Yes.
sabreW4K3@lazysoci.al 7 months ago
Thank you
MangoPenguin@lemmy.blahaj.zone 7 months ago
Correct yes, each compose project is isolated on its own network as well.
sabreW4K3@lazysoci.al 7 months ago
Thank you.
sabreW4K3@lazysoci.al 7 months ago
Ooh. I was clearly overthinking it. Thank you so much for dispersing my stupidity.