You must setup Lighttpd and Cloudflared first.

Steps

  1. create olivetin directory in $HOME
    mkdir -p ~/olivetin && cd ~/olivetin
    
  2. download latest version
    latest=$(basename $(curl -fs -o/dev/null -w %{redirect_url} https://github.com/OliveTin/OliveTin/releases/latest))
    curl -LO https://github.com/OliveTin/OliveTin/releases/download/${latest}/OliveTin-linux-amd64.tar.gz
    tar -xzf OliveTin-linux-amd64.tar.gz
    mv OliveTin-linux-amd64/OliveTin ./olivetin
    
  3. move webui directory to /var/www/olivetin
    sudo mkdir -p /var/www
    sudo chown $(id -nu):$(id -ng) /var/www
    mv OliveTin-linux-amd64/webui /var/www/olivetin
    
  4. copy from config.yaml
    nano config.yaml
    
  5. copy from olivetin.service
    nano olivetin.service
    
  6. start olivetin service
    cp ~/olivetin/olivetin.service ~/.config/systemd/user/
    systemctl --user daemon-reload
    systemctl --user enable --now olivetin
    
  7. copy from olivetin.conf
    nano ~/lighttpd/conf.d/olivetin.conf
    
  8. create auth for olivetin
    printf "<username>:$(openssl passwd -6 <password>)" > ~/lighttpd/passwd/.olivetin
    
  9. restart lighttpd
    systemctl --user restart lighttpd
    

config.yaml

listenAddressSingleHTTPFrontend: localhost:1337
logLevel: "ERROR"
showFooter: false
showNewVersions: false
checkForUpdates: false
actions:
- title: coturn
  shell: systemctl --user "{{ action }}" podman-compose@coturn
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: dozzle
  shell: systemctl --user "{{ action }}" podman-compose@dozzle
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: filebrowser
  shell: systemctl --user "{{ action }}" podman-compose@filebrowser
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: gitea
  shell: systemctl --user "{{ action }}" podman-compose@gitea
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: glider
  shell: systemctl --user "{{ action }}" podman-compose@glider
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: kms
  shell: systemctl --user "{{ action }}" podman-compose@kms
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: lighttpd
  shell: systemctl --user "{{ action }}" podman-compose@lighttpd
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: mirotalk
  shell: systemctl --user "{{ action }}" podman-compose@mirotalk
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: nvim
  shell: systemctl --user "{{ action }}" podman-compose@nvim
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: qbittorrent
  shell: systemctl --user "{{ action }}" podman-compose@qbittorrent
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: rustdesk
  shell: systemctl --user "{{ action }}" podman-compose@rustdesk
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: rustpad
  shell: systemctl --user "{{ action }}" podman-compose@rustpad
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: rustypaste
  shell: systemctl --user "{{ action }}" podman-compose@rustypaste
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: screego
  shell: systemctl --user "{{ action }}" podman-compose@screego
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: shadowbox
  shell: systemctl --user "{{ action }}" podman-compose@shadowbox
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: traefik
  shell: systemctl --user "{{ action }}" podman-compose@traefik
  arguments:
    - name: action
      choices:
        - title: Status
          value: status
        - title: Start
          value: start
        - title: Stop
          value: stop
        - title: Restart
          value: restart
- title: server
  shell: sudo "{{ action }}" now
  arguments:
    - name: action
      choices:
        - title: Reboot
          value: reboot
        - title: Poweroff
          value: poweroff

olivetin.service

[Unit]
Description=olivetin
Wants=network-online.target
After=network-online.target

[Service]
Restart=always
ExecStart=%h/olivetin/olivetin -configdir %h/olivetin

[Install]
WantedBy=default.target

olivetin.conf

$HTTP["host"] == "olivetin.example.com" {
    auth.backend = "htpasswd"
    auth.backend.htpasswd.userfile= env.HOME + "/lighttpd/passwd/.olivetin"
    auth.require = ( "" =>
    (
    "method"  => "basic",
    "realm"   => "Restricted!",
    "require" => "valid-user"
    ),
)
    server.document-root = "/var/www/olivetin"
    index-file.names = ( "index.html" )
    proxy.server = ( "" => ( ( "host" => "127.0.0.1", "port" => "1337" ) ) )
    proxy.header = ( "upgrade" => "enable" )
}