Go to file
Efertone e22a67d6f3
This application is much simpler than it seems for the first time
2021-04-13 18:43:20 +02:00
.assets add screenshots 2021-04-05 12:44:13 +02:00
.vscode Initial commit 2021-04-03 14:37:30 +02:00
api This application is much simpler than it seems for the first time 2021-04-13 18:43:20 +02:00
elm This application is much simpler than it seems for the first time 2021-04-13 18:43:20 +02:00
server This application is much simpler than it seems for the first time 2021-04-13 18:43:20 +02:00
storage Cache images + client jwt 2021-04-05 12:30:49 +02:00
.gitattributes Initial commit 2021-04-03 14:37:30 +02:00
.gitignore remove generated js 2021-04-04 14:25:30 +02:00
.golangci.yaml Initial commit 2021-04-03 14:37:30 +02:00
.goreleaser.yml getting better and better 2021-04-03 20:23:06 +02:00
Dockerfile Dockerfiles 2021-04-04 22:13:44 +02:00
Dockerfile.prebuilt-elm Dockerfiles 2021-04-04 22:13:44 +02:00
LICENSE Initial commit 2021-04-03 14:37:30 +02:00
Makefile getting better and better 2021-04-03 20:23:06 +02:00
elm.json getting better and better 2021-04-03 20:23:06 +02:00
go.mod Cache images + client jwt 2021-04-05 12:30:49 +02:00
go.sum Cache images + client jwt 2021-04-05 12:30:49 +02:00
main.go Initial commit 2021-04-03 14:37:30 +02:00
readme.md update readme 2021-04-05 13:03:33 +02:00
root_command.go experimental thumbnail 2021-04-05 00:12:37 +02:00
serve_command.go kind of basic structure, it works... maybe 2021-04-03 15:58:08 +02:00
thumbnail_command.go Cache images + client jwt 2021-04-05 12:30:49 +02:00
version_command.go Initial commit 2021-04-03 14:37:30 +02:00

readme.md

Fulla

Why?

We have a lot of pictures (mostly about our children). I store them in my Minio instance and the backup is on Wasabi. I tried to find a good soltion that can be used in a very simple way, like no database, but I coulnd't find an good solution for my probelem. I only wanted a small software that can list all images and view them. I need only one "login" credential that can be shared between us (close family members).

Intended environment: local network, not on the public internet. Of course you can do it, but I have no intention to make it bullet-proof. Just host it in your own network (homeserver, rpi, whatever).

  • Why Go? Because I like Go and with 1.16+, the embed module is awesome.
  • Why Elm? Because I want to learn more Elm and it was a good candidate.

Configuration

Endironment variables:

FULLA_ENDPOINT          -> endpoint
  Example: storage.efertone.me, s3.eu-central-1.wasabisys.com

FULLA_ACCESS_KEY_ID     -> access key id
FULLA_SECRET_ACCESS_KEY -> secret access key
FULLA_BUCKET            -> target bucket name
FULLA_NOSSL             -> if it's not empty, use http, otherwise use https

FULLA_LOGIN_SECRET      -> secret for login
  If not provided, the system will generate one (not persistent)

Example docker compose file

  • xxxx -> access key id (aws, wasabi, minio, any s3 compatible service)
  • yyyy -> secret access key (aws, wasabi, minio, any s3 compatible service)
  • zzzz -> secret token for login (example: openssl rand -base64 30)
---
version: '3.2'

services:
  web:
    image: yitsushi/fulla:1.0.1
    networks:
      - traefik-public
    ports:
      - 9876
    command: serve --listen="0.0.0.0:9876"
    environment:
      - FULLA_ENDPOINT=storage.mydomain.tld
      - FULLA_BUCKET=fulla-photos
      - FULLA_ACCESS_KEY_ID=xxxx
      - FULLA_SECRET_ACCESS_KEY=yyyy
      - FULLA_LOGIN_SECRET=zzzz
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.fulla-router.rule=Host(`fulla.mydomain.tld`)"
        - "traefik.http.services.fulla-service.loadbalancer.server.port=9876"
        - "traefik.http.routers.fulla-router.tls=true"
        - "traefik.http.routers.fulla-router.tls.certresolver=cloudflare"
        - "traefik.docker.network=traefik-public"
        - "traefik.http.middlewares.wg.ipwhitelist.sourcerange=127.0.0.1/32, 10.100.100.1/24, 172.18.0.1/24"
        - "traefik.http.routers.fulla-router.middlewares=wg@docker"

networks:
  traefik-public:
    external: true

Start server

fulla serve --listen="0.0.0.0:9876" [--debug]

Generate thumbnails

fulla thumbnail --workers=4 [--debug]

Hotkeys

  • Esc: Close single-image view
  • ArrowLeft: Previous image in single-image view
  • ArrowRight: Previous image in single-image view

Note

This project target audiance is not a hosted solition for large user base.

The name field on the login screen is just a placeholder. It does not matter what is the value, it will be saved in the JWT token and will be used on image upload (Issue#3) to populate object metadata.

Screenshots

Directory list Image list Single image view