#!/usr/bin/env bash set -euo pipefail STACK_DIR="/opt/openwebui-ollama" SERVICE_NAME="openwebui-ollama.service" SERVICE_PATH="/etc/systemd/system/${SERVICE_NAME}" if ! command -v docker >/dev/null 2>&1; then echo "Docker is not installed. Install Docker first, then rerun this script." exit 1 fi if ! docker compose version >/dev/null 2>&1; then echo "Docker Compose plugin is not available. Install docker-compose-plugin, then rerun this script." exit 1 fi SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" sudo mkdir -p "${STACK_DIR}" sudo cp "${SCRIPT_DIR}/docker-compose.yml" "${STACK_DIR}/docker-compose.yml" sudo tee "${SERVICE_PATH}" >/dev/null <<'EOF' [Unit] Description=Open WebUI + Ollama Docker Stack Requires=docker.service After=docker.service network-online.target Wants=network-online.target [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/opt/openwebui-ollama ExecStart=/usr/bin/docker compose up -d ExecStop=/usr/bin/docker compose down TimeoutStartSec=0 [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload sudo systemctl enable --now "${SERVICE_NAME}" # Keep local models persistent and pull a small starter model. sudo docker exec ollama ollama pull llama3.2 || true echo "Deployment complete." echo "Open WebUI: http://:3000" echo "Service status: sudo systemctl status ${SERVICE_NAME}"