Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
services:olivetin [2025/05/06 06:11] – willy | services:olivetin [2025/05/11 18:27] (current) – [Configuration] willy | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Olivetin ====== | ====== Olivetin ====== | ||
- | [[https:// | + | [[https:// |
Line 14: | Line 14: | ||
Download the latest relesase from [[https:// | Download the latest relesase from [[https:// | ||
- | <code bash | + | <code bash> |
mkdir / | mkdir / | ||
cd / | cd / | ||
Line 22: | Line 22: | ||
rmdir OliveTin-linux-amd64 | rmdir OliveTin-linux-amd64 | ||
</ | </ | ||
+ | |||
+ | As for the configuration file, i think it's a good idea to keep it under **/ | ||
+ | <code bash> | ||
+ | mkdir / | ||
+ | mv / | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Reverse Proxy ===== | ||
+ | |||
+ | Please refer to [[selfhost: | ||
+ | |||
+ | ==== OliveTin on subdomain ==== | ||
+ | |||
+ | This will enable your SSO login protection (see [[selfhost: | ||
+ | |||
+ | <file - olivetin.conf> | ||
+ | server { | ||
+ | server_name olivetin.mydomain.com; | ||
+ | listen 8443 ssl; | ||
+ | listen 443 ssl; | ||
+ | |||
+ | access_log / | ||
+ | error_log / | ||
+ | | ||
+ | include " | ||
+ | |||
+ | location / { | ||
+ | include " | ||
+ | include " | ||
+ | | ||
+ | proxy_pass http:// | ||
+ | proxy_redirect http:// | ||
+ | } | ||
+ | | ||
+ | location /websocket { | ||
+ | include " | ||
+ | include " | ||
+ | |||
+ | proxy_set_header Upgrade " | ||
+ | proxy_set_header Connection " | ||
+ | proxy_pass http:// | ||
+ | } | ||
+ | | ||
+ | include com.mydomain/ | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== OliveTin on subpath ==== | ||
+ | |||
+ | OliveTin can be used on a subpath. While it is //not recomended//, | ||
+ | <file - olivetin.conf> | ||
+ | location /olivetin/ { | ||
+ | proxy_pass http:// | ||
+ | proxy_redirect http:// | ||
+ | } | ||
+ | |||
+ | location / | ||
+ | proxy_set_header Upgrade " | ||
+ | proxy_set_header Connection " | ||
+ | proxy_pass http:// | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Of course, this assume that this is hosted under the main domain, which is already protected by the SSO (see [[selfhost: | ||
+ | |||
+ | In order to let OliveTin work under a sub-path you need to add the following configuration directive to **/ | ||
+ | < | ||
+ | externalRestAddress: | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Configuration ===== | ||
+ | |||
+ | <file - config.yaml> | ||
+ | listenAddressSingleHTTPFrontend: | ||
+ | logLevel: " | ||
+ | themeName: home | ||
+ | |||
+ | checkForUpdates: | ||
+ | webUIDir: / | ||
+ | |||
+ | actions: | ||
+ | - title: Check Internet | ||
+ | shell: 'ping -c 1 1.1.1.1' | ||
+ | icon: ping | ||
+ | popupOnStart: | ||
+ | |||
+ | - title: ISP_1 | ||
+ | shell: 'ping -c 1 192.168.0.1' | ||
+ | icon: ping | ||
+ | popupOnStart: | ||
+ | |||
+ | - title: ISP_2 | ||
+ | shell: 'ping -c 1 192.168.1.254' | ||
+ | icon: ping | ||
+ | popupOnStart: | ||
+ | |||
+ | # Actions for containers | ||
+ | - title: Update containers | ||
+ | shell: '/ | ||
+ | hidden: true | ||
+ | execOnStartup: | ||
+ | execOnCron: '*/5 * * * *' | ||
+ | |||
+ | - title: Stop {{ container.name }} | ||
+ | shell: '{{ container.command }} stop' | ||
+ | icon: ping | ||
+ | popupOnStart: | ||
+ | entity: container | ||
+ | triggers: | ||
+ | - Update containers | ||
+ | |||
+ | - title: Update {{ container.name }} | ||
+ | shell: '{{ container.command }} update' | ||
+ | icon: ping | ||
+ | popupOnStart: | ||
+ | entity: container | ||
+ | triggers: | ||
+ | - Update containers | ||
+ | |||
+ | - title: Start {{ container.name }} | ||
+ | shell: '{{ container.command }} start' | ||
+ | icon: ping | ||
+ | popupOnStart: | ||
+ | entity: container | ||
+ | triggers: | ||
+ | - Update containers | ||
+ | |||
+ | # Actions for servers | ||
+ | - title: Update servers | ||
+ | shell: '/ | ||
+ | hidden: true | ||
+ | execOnStartup: | ||
+ | execOnCron: '*/5 * * * *' | ||
+ | |||
+ | - title: ping {{ server.ip }} | ||
+ | shell: 'ping {{ server.ip }} -c 1' | ||
+ | icon: ping | ||
+ | entity: server | ||
+ | |||
+ | entities: | ||
+ | - file: entities/ | ||
+ | name: server | ||
+ | |||
+ | - file: entities/ | ||
+ | name: container | ||
+ | |||
+ | dashboards: | ||
+ | - title: Home network | ||
+ | contents: | ||
+ | - title: Server {{ server.name }} | ||
+ | type: fieldset | ||
+ | entity: server | ||
+ | contents: | ||
+ | - type: display | ||
+ | cssClass: '{{ server.status }}' | ||
+ | title: | | ||
+ | < | ||
+ | < | ||
+ | - title: ping {{ server.ip }} | ||
+ | |||
+ | - title: servizi | ||
+ | contents: | ||
+ | - title: Servizio {{ container.name }} | ||
+ | type: fieldset | ||
+ | entity: container | ||
+ | contents: | ||
+ | - type: display | ||
+ | cssClass: '{{ container.state }}' | ||
+ | title: | | ||
+ | < | ||
+ | - title: "Start {{ container.name }}" | ||
+ | - title: "Stop {{ container.name }}" | ||
+ | - title: " | ||
+ | </ | ||
+ | |||
+ | <file - update_containers.sh> | ||
+ | #!/bin/bash | ||
+ | |||
+ | TARGET=/ | ||
+ | TARGET_TEMP=${TARGET}.tmp | ||
+ | |||
+ | test -e ${TARGET_TEMP} && rm -f ${TARGET_TEMP} | ||
+ | for i in / | ||
+ | do | ||
+ | name=${i## | ||
+ | $i status 2> /dev/null | grep started > /dev/null | ||
+ | if [ $? -eq 0 ] | ||
+ | then | ||
+ | running=running | ||
+ | else | ||
+ | running=stopped | ||
+ | fi | ||
+ | echo " | ||
+ | - name: $name | ||
+ | state: $running | ||
+ | command: $i | ||
+ | " >> ${TARGET_TEMP} | ||
+ | |||
+ | done | ||
+ | |||
+ | test -e ${TARGET_TEMP} && mv ${TARGET_TEMP} ${TARGET} | ||
+ | </ | ||
+ | |||
+ | <file - update_servers.sh> | ||
+ | #!/bin/bash | ||
+ | |||
+ | |||
+ | TARGET=/ | ||
+ | TARGET_TEMP=${TARGET}.tmp | ||
+ | |||
+ | test -e ${TARGET_TEMP} && rm -f ${TARGET_TEMP} | ||
+ | |||
+ | while read -r line | ||
+ | do | ||
+ | clean_line=${line%%# | ||
+ | ip=${clean_line%%[[: | ||
+ | name=${clean_line## | ||
+ | status=offline | ||
+ | if [ " | ||
+ | then | ||
+ | (ping -c 1 -w 1 $ip 2> /dev/null > /dev/null | ||
+ | if [ $? -eq 0 ] | ||
+ | then | ||
+ | status=online | ||
+ | fi | ||
+ | echo " | ||
+ | - name: $name | ||
+ | ip: $ip | ||
+ | status: $status" | ||
+ | fi | ||
+ | done < "/ | ||
+ | |||
+ | wait | ||
+ | test -e ${TARGET_TEMP} && mv ${TARGET_TEMP} ${TARGET} | ||
+ | </ | ||
+ | |||
+ | |||
+ | <file - theme.css> | ||
+ | div.display.running { | ||
+ | background-color: | ||
+ | color: white; | ||
+ | } | ||
+ | |||
+ | div.display.stopped { | ||
+ | background-color: | ||
+ | } | ||
+ | |||
+ | div.display.online { | ||
+ | background-color: | ||
+ | color: white; | ||
+ | } | ||
+ | |||
+ | div.display.offline { | ||
+ | background-color: | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Autostart ===== | ||
+ | |||
+ | OliveTin provides both a SystemD service file and an OpenRC init script. If you, like me, prefeer to use OpenRC, keep in mind that the provided one has some limits like no stdout/err redirect and the binary path should be changed to / | ||
+ | |||
+ | Drop the following to **/ | ||
+ | <file - olivetin> | ||
+ | # | ||
+ | # Copyright 1999-2021 Gentoo Authors | ||
+ | # Distributed under the terms of the GNU General Public License v2 | ||
+ | |||
+ | description=" | ||
+ | pidfile="/ | ||
+ | command_background=true | ||
+ | command="/ | ||
+ | command_args="" | ||
+ | output_log="/ | ||
+ | output_err="/ | ||
+ | |||
+ | depend() { | ||
+ | need net | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | and make it executable, add to the runlevel, and start it: | ||
+ | <code bash> | ||
+ | mkdir / | ||
+ | chmod +x / | ||
+ | rc-update add olivetin default | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | Yes, i prefer to keep it's log separate, so i created also a log folder for it. | ||
+ | |||