NossCo

I Make Computer Beep Boop Beep

Sharry via Docker und NGINX Reverse Proxy

- Posted in Docker by

Auf der Sucher nach einer Lösung um schnell Dateien teile zu können (wie z.B. WeTransfer) bin ich auf Sharry von eikek gestoßen.

Es biete genau die Funktionen die ich brauche:

  • einfache Benutzerverwaltung
  • ansprechendes Webinterface
  • Uploadfolder für nicht registierte Benutzer
  • Downloadbeschränkungen: Passwort, Lifetime, Download-Limit
  • periodische Cleanups
  • Mailversand der Down-/Uploadlinks

Die Installation & Konfiguration ist dank docker-compose und der sehr guten Dokumentation von eikek ein Kinderspiel. Es werden nur zwei Dateien angelegt (docker-compose.yml & sharry.conf) und fertig ist die Geschichte.

In meinem Setup verbindet sich der Sharry-Container mit drei Netzwerken:

  • sharry-net : sharry & db Container
  • nginx-proxy : sharry & nginx-proxy (Reverse-Proxy und LE)
  • mailcow-net : Mailcow-Dockerized Netz für den Mailversand

docker-compose.yml

version: '3.7'
services:
  restserver:
    image: eikek0/sharry:latest
    container_name: sharry
    command: /opt/sharry.conf
    volumes:
      - ${PWD}/sharry.conf:/opt/sharry.conf
    depends_on:
      - db
    networks:
      - sharry-net
      - nginx-proxy
      - mailcow-net
    environment:
    - VIRTUAL_HOST=<URL>
    - LETSENCRYPT_HOST=<URL>
    - LETSENCRYPT_EMAIL=<mail>

  db:
    image: postgres:13.3
    container_name: postgres_db
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=dbuser
      - POSTGRES_PASSWORD=<DB-PW>
      - POSTGRES_DB=dbname
    networks:
      - sharry-net

volumes:
  postgres_data:

networks:
  sharry-net:
  nginx-proxy:
    external:
      name: nginx-proxy
  mailcow-net:
    external:
      name: mailcowdockerized_mailcow-network

sharry.conf

sharry.restserver {

  base-url = "https://<URL>"

  bind {
    address = "0.0.0.0"
    port = 9090
  }

  webapp {
    app-name = "NossCo Sharry"
    default-language = "de"
  }

  backend {
    auth {
      fixed.enabled = true ## enabled admin:admin access
    }

    jdbc {
      url = "jdbc:postgresql://db:5432/dbname"
      user = "dbuser"
      password = "<DB-PW>"
    }

    signup {
      mode = "closed"
      invite-time = "14 days"
      invite-password = "generate-invite"
    }
  mail {
    enabled = true
    smtp {
      host = "postfix-mailcow"
      port = "587"
      ssl-type = "starttls"
      check-certificates = false
      timeout = "10 seconds"
      default-from = "<MAILADRESS>"
      user = "<MAILUSER>"
      password = "<MAIL-PW>"
      list-id = "Sharry"
    }
  }    
  }
}

Nachdem beide Dateien erstellt wurden, pullt man die benötigten Images

docker-compose pull

und startet danach das erste mal die Container.

docker-compose up

Beim ersten Start wird die Datenbank angelegt und (zumindest bei mir) wars das dann. Kein Start der App. Naja, reboot tut gut ... also mit CTRL-C die Container gekillt und neu gestartet und gleich in den Hintegrund verbannt.

docker-compose up -d

Siehe da! Es funktioniert!

Die default Logindaten sind admin:admin. Nach dem Login direkt einen neuen Benutzer anlegen, Adminrechte und Passwort vergeben, umloggen und den default Admin löschen. Dann kann nichts mehr schief gehen.


Links: