← All articles
a close up of a snail on the ground

OliveTin: Run Shell Commands from a Web Browser

Automation 2026-03-04 · 3 min read olivetin automation self-hosted docker shell homelab scripts open-source
By Selfhosted Guides Editorial TeamSelf-hosting practitioners covering open source software, home lab infrastructure, and data sovereignty.

SSH is powerful, but sometimes you want to restart a service, run a backup, or trigger a script from your phone without opening a terminal. OliveTin gives you a simple web interface with big buttons that execute predefined shell commands on your server. No code, no complex automation — just buttons that do things.

Photo by Danist Soh on Unsplash

What OliveTin Does

Docker Setup

services:
  olivetin:
    image: jamesread/olivetin:latest
    container_name: olivetin
    restart: unless-stopped
    ports:
      - 1337:1337
    volumes:
      - ./olivetin:/config
      - /var/run/docker.sock:/var/run/docker.sock  # If managing Docker containers

Configuration

OliveTin is configured via config.yaml. Create ./olivetin/config.yaml:

actions:
  - title: Restart Nginx
    shell: docker restart nginx
    icon: 🔄

  - title: Run Backups
    shell: /home/user/scripts/backup.sh
    icon: 💾

  - title: Update Containers
    shell: docker compose -f /opt/stacks/main/docker-compose.yml pull && docker compose -f /opt/stacks/main/docker-compose.yml up -d
    icon: ⬆️

  - title: Reboot Server
    shell: sudo reboot
    icon: 🔃
    timeout: 10

Navigate to http://your-server:1337. Each action appears as a labeled button.

Actions with Arguments

Prompt for input before running a command:

actions:
  - title: Wake Device
    shell: wakeonlan {{ mac_address }}
    icon: 💻
    arguments:
      - name: mac_address
        title: MAC Address
        description: "Format: AA:BB:CC:DD:EE:FF"
        type: ascii

  - title: Ping Host
    shell: ping -c 4 {{ hostname }}
    icon: 🏓
    arguments:
      - name: hostname
        title: Hostname or IP
        type: ascii

  - title: Pull Docker Image
    shell: docker pull {{ image }}:{{ tag }}
    icon: 📦
    arguments:
      - name: image
        title: Image name
        type: ascii
      - name: tag
        title: Tag
        default: latest
        type: ascii

When you click the button, OliveTin shows a dialog for the arguments before executing.

Dropdown Arguments

actions:
  - title: Set Log Level
    shell: /opt/scripts/set-log-level.sh {{ level }}
    icon: 📋
    arguments:
      - name: level
        title: Log Level
        type: select
        choices:
          - debug
          - info
          - warning
          - error

Scheduled Actions

Run actions on a schedule:

actions:
  - title: Daily Backup
    shell: /opt/scripts/backup.sh
    icon: 💾
    trigger:
      schedule: "0 2 * * *"  # Cron syntax: 2 AM daily

This acts like a simplified cron with the added benefit of manual triggering via the UI.

Execution Permissions

OliveTin runs as a specific user by default. For commands requiring different permissions:

actions:
  - title: Restart SSH Service
    shell: systemctl restart sshd
    icon: 🔐
    shell: sudo systemctl restart sshd

Or run the OliveTin container with appropriate user mapping and sudoers configuration.

Practical Use Cases

Homelab server management:

Household automation:

Development:

Monitoring response:

Grouping Actions

Organize buttons into sections:

actions:
  - title: Restart Nginx
    shell: docker restart nginx
    icon: 🌐

  - title: Restart Vaultwarden
    shell: docker restart vaultwarden
    icon: 🔐

  - title: Run Backup
    shell: /opt/backup/run.sh
    icon: 💾

  - title: Check Disk Usage
    shell: df -h
    icon: 💿

OliveTin displays actions in configuration order. Use consistent icon themes for visual grouping.

Output and Logs

After running a command, OliveTin shows:

Execution history is stored and viewable from the UI — useful for confirming a scheduled backup ran or debugging a failed command.

Security

OliveTin is designed for internal network use. It has no authentication by default:

Don't expose OliveTin directly to the internet without authentication — the buttons run arbitrary shell commands.

Comparison to Alternatives

OliveTin Portainer n8n
Setup complexity Minimal Moderate High
Target use Shell commands Docker management Workflow automation
Mobile UI Yes Yes Limited
Scheduling Simple cron No Complex workflows
Code required No No Sometimes

OliveTin fills the niche of "I want a button that runs a shell command" without the overhead of a full automation platform.

The project is at github.com/OliveTin/OliveTin. For anyone running a homelab who wants non-technical household members to be able to trigger scripts, or for your own use to avoid opening a terminal for routine tasks, OliveTin is a well-designed solution.

Get free weekly tips in your inbox. Subscribe to Self-Hosted Weekly