cross-posted from: https://gregtech.eu/post/4809104

The storage usage is at 340GB currently, which is a lot and it’s rapidly increasing. I use Backblaze B2 for my storage. Here is my docker compose file: x-logging: &default-logging driver: “json-file” options: max-size: “50m” max-file: “4”

services:
  proxy:
    image: docker.io/library/nginx
    volumes:
      - ./nginx_internal.conf:/etc/nginx/nginx.conf:ro,Z
      - ./proxy_params:/etc/nginx/proxy_params:ro,Z
    restart: always
    logging: *default-logging
    depends_on:
      - pictrs
      - lemmy-ui
    labels:
      - traefik.enable=true
      - traefik.http.routers.http-lemmy.entryPoints=http
      - traefik.http.routers.http-lemmy.rule=Host(`gregtech.eu`)
      - traefik.http.middlewares.https_redirect.redirectscheme.scheme=https
      - traefik.http.middlewares.https_redirect.redirectscheme.permanent=true
      - traefik.http.routers.http-lemmy.middlewares=https_redirect
      - traefik.http.routers.https-lemmy.entryPoints=https
      - traefik.http.routers.https-lemmy.rule=Host(`gregtech.eu`)
      - traefik.http.routers.https-lemmy.service=lemmy
      - traefik.http.routers.https-lemmy.tls=true
      - traefik.http.services.lemmy.loadbalancer.server.port=8536
      - traefik.http.routers.https-lemmy.tls.certResolver=le-ssl


  lemmy:
    image: dessalines/lemmy:0.19.8
    hostname: lemmy
    restart: always
    logging: *default-logging
    volumes:
      - ./lemmy.hjson:/config/config.hjson:Z
    depends_on:
      - postgres
      - pictrs
    networks:
      - default
      - database

  lemmy-ui:
    image: dessalines/lemmy-ui:0.19.8
    volumes:
      - ./volumes/lemmy-ui/extra_themes:/app/extra_themes:Z
    depends_on:
      - lemmy
    restart: always
    logging: *default-logging
    environment:
      - LEMMY_UI_LEMMY_INTERNAL_HOST=lemmy:8536
      - LEMMY_UI_LEMMY_EXTERNAL_HOST=gregtech.eu
      - LEMMY_UI_HTTPS=true

  pictrs:
    image: docker.io/asonix/pictrs:0.5
    # this needs to match the pictrs url in lemmy.hjson
    hostname: pictrs
    # we can set options to pictrs like this, here we set max. image size and forced format for conversion
    # entrypoint: /sbin/tini -- /usr/local/bin/pict-rs -p /mnt -m 4 --image-format webp
    #entrypoint: /sbin/tini -- /usr/local/bin/pict-rs run  --max-file-count 10  --media-max-file-size 500 --media-retention-proxy 10d --media-retention-variants 10d  filesystem sled -p /mnt
    user: 991:991
    environment:
      - PICTRS__STORE__TYPE=object_storage
      - PICTRS__STORE__ENDPOINT=https://s3.eu-central-003.backblazeb2.com/
      - PICTRS__STORE__BUCKET_NAME=gregtech-lemmy
      - PICTRS__STORE__REGION=eu-central
      - PICTRS__STORE__USE_PATH_STYLE=false
      - PICTRS__STORE__ACCESS_KEY=redacted
      - PICTRS__STORE__SECRET_KEY=redacted
      - MEDIA__RETENTION__VARIANTS=4d
      - MEDIA__RETENTION__PROXY=4d
      #- PICTRS__MEDIA__IMAGE__FORMAT=webp
      #- PICTRS__MEDIA__IMAGE__QUALITY__WEBP=50
      #- PICTRS__MEDIA__ANIMATION__QUALITY=50
    volumes:
      - ./volumes/pictrs:/mnt:Z
    restart: always
    logging: *default-logging

  postgres:
    image: docker.io/postgres:16-alpine
    hostname: postgres
    volumes:
      - ./volumes/postgres:/var/lib/postgresql/data:Z
      #- ./customPostgresql.conf:/etc/postgresql.conf:Z
    restart: always
    #command: postgres -c config_file=/etc/postgresql.conf
    shm_size: 256M
    logging: *default-logging
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=lemmy
      - POSTGRES_DB=lemmy
    networks:
      - database
  postfix:
    image: docker.io/mwader/postfix-relay
    restart: "always"
    logging: *default-logging

  #pictrs-safety:
  #  image: ghcr.io/db0/pictrs-safety:v1.2.2
  #  hostname: pictrs-safety
  #  environment:
  #  ports:
  #    - "14051:14051"
  #  user: 991:991
  #  restart: always
  #  logging: *default-logging
  #  depends_on:
  #    - pictrs
networks:
  default:
    name: traefik_access
    external: true
  database:
  • seang96@spgrn.com
    link
    fedilink
    arrow-up
    5
    ·
    2 days ago

    I didn’t see your Lemmy config much but have you looked at setting in Lemmy for pictrs?

    image_mode: "ProxyAllImages"
    

    This stores images temporarily on your pictrs instance, I am sitting at 8GB since this feature came out.

    • GregorOPA
      link
      fedilink
      arrow-up
      4
      ·
      2 days ago

      Here’s my config

      {
        # for more info about the config, check out the documentation
        # https://join-lemmy.org/docs/en/administration/configuration.html
      
        database: {
          host: postgres
          password: "redacted"
          # Alternative way:
          #uri: "postgresql://lemmy:{{ postgres_password }}@postgres/lemmy"
        }
        hostname: "gregtech.eu"
        pictrs: {
          url: "http://pictrs:8080/"
          api_key: "redacted"
        }
        email: {
          smtp_server: "smtp.sendgrid.net:587"
          smtp_from_address: "lemmy@lemmy.gregtech.eu"
          tls_type: "starttls"
          smtp_login: "apikey"
          smtp_password: "redacted"
        }
         # Parameters for automatic configuration of new instance (only used at first start)
        setup: {
          # Username for the admin user
          admin_username: "gregor"
          # Password for the admin user. It must be between 10 and 60 characters.
          admin_password: "redacted"
          # Name of the site, can be changed later. Maximum 20 characters.
          site_name: "Gremmy"
          # Email for the admin user (optional, can be omitted and set later through the website)
          admin_email: "redacted"
        }
      }
      
      • seang96@spgrn.com
        link
        fedilink
        arrow-up
        2
        ·
        edit-2
        2 days ago

        This blog post talks about the image proxying mode here

        It basically downloads the pictures temporarily. This wouldn’t account for your existing ones. Assuming you are on one of the most recent versions, you should be able to lookup and delete images on the admin UI as well, but image proxying would only apply to new content.