]> Andreas Glashauser | Gitweb - salt-qubes.git/commitdiff
ADDED: states for setting up OpenWebUI in a Podman container with strict firewall...
authorAndreas Glashauser <ag@andreasglashauser.com>
Tue, 1 Apr 2025 08:15:09 +0000 (10:15 +0200)
committerAndreas Glashauser <ag@andreasglashauser.com>
Tue, 1 Apr 2025 08:17:07 +0000 (10:17 +0200)
user_salt/openwebui/init.sls [new file with mode: 0644]
user_salt/openwebui/openwebui--configure-qube.sls [new file with mode: 0644]
user_salt/openwebui/openwebui--create-qube.sls [new file with mode: 0644]
user_salt/openwebui/openwebui--create-template.sls [new file with mode: 0644]
user_salt/openwebui/openwebui--install-packages.sls [new file with mode: 0644]

diff --git a/user_salt/openwebui/init.sls b/user_salt/openwebui/init.sls
new file mode 100644 (file)
index 0000000..69474a0
--- /dev/null
@@ -0,0 +1,5 @@
+include:
+  - openwebui.openwebui--create-template
+  - openwebui.openwebui--install-packages
+  - openwebui.openwebui--create-qube
+  - openwebui.openwebui--configure-qube
diff --git a/user_salt/openwebui/openwebui--configure-qube.sls b/user_salt/openwebui/openwebui--configure-qube.sls
new file mode 100644 (file)
index 0000000..399fd2e
--- /dev/null
@@ -0,0 +1,75 @@
+{% if grains['id'] == 'dom0' %}
+
+openwebui--configure-qube-firewall:
+  cmd.run:
+    - name: |
+        qvm-firewall q-openwebui reset
+        qvm-firewall q-openwebui del accept
+        qvm-firewall q-openwebui add accept specialtarget=dns
+        qvm-firewall q-openwebui add accept proto=icmp
+        qvm-firewall q-openwebui add accept ghcr.io proto=tcp
+        qvm-firewall q-openwebui add accept pkg-containers.githubusercontent.com proto=tcp
+        qvm-firewall q-openwebui add accept openrouter.ai proto=tcp
+        qvm-firewall q-openwebui add drop
+
+{% elif grains['id'] == 'q-openwebui' %}
+
+{% set username = 'user' %}
+{% set container_name = 'open-webui' %}
+{% set service_file_dir = '/home/' ~ username ~ '/.config/systemd/user/' %}
+{% set service_file = '/home/' ~ username ~ '/.config/systemd/user/container-' ~ container_name ~ '.service' %}
+{% set userid = salt['user.info'](username).uid %}
+{% set quadlet_file_dir = '/home/' ~ username ~ '/.config/containers/systemd/' %}
+{% set quadlet_file_path = quadlet_file_dir ~ container_name ~ '.container' %}
+
+{% set xdg_runtime_dir = '/run/user' + userid | string %}
+
+openwebui--create-quadlet-dir:
+  file.directory:
+    - name: /home/{{ username }}/.config/containers/systemd/
+    - user: {{ username }}
+    - group: {{ username }}
+    - makedirs: True
+
+openwebui--deploy-quadlet-file:
+  file.managed:
+    - name: /home/{{ username }}/.config/containers/systemd/open-webui.container
+    - contents: |
+        [Unit]
+        Description=Open WebUI container managed by Podman
+        
+        [Container]
+        Image=ghcr.io/open-webui/open-webui:ollama
+        PublishPort=3000:8080
+        Volume=ollama:/root/.ollama
+        Volume=open-webui:/app/backend/data
+        
+        [Service]
+        Restart=always
+        TimeoutStartSec=1800
+
+        [Install]
+        WantedBy=default.target
+    - user: {{ username }}
+    - group: {{ username }}
+    - mode: 644
+    - require:
+      - file: openwebui--create-quadlet-dir
+
+openwebui--enable-linger:
+  cmd.run:
+    - name: loginctl enable-linger user
+    - unless: loginctl show-user user | grep Linger=yes
+
+openwebui--reload-user-daemon:
+  cmd.run:
+    - name: |
+        systemctl --user daemon-reload
+    - runas: {{ username }}
+    - env:
+      - XDG_RUNTIME_DIR: /run/user/1000
+      - DBUS_SESSION_BUS_ADDRESS: unix:path=/run/user/1000/bus
+    - require:
+      - cmd: openwebui--enable-linger
+
+{% endif %}
diff --git a/user_salt/openwebui/openwebui--create-qube.sls b/user_salt/openwebui/openwebui--create-qube.sls
new file mode 100644 (file)
index 0000000..3124097
--- /dev/null
@@ -0,0 +1,31 @@
+{% if grains['id'] == 'dom0' %}
+
+openwebui--create-qube:
+  qvm.vm:
+    - name: q-openwebui
+    - present:
+      - template: template-openwebui
+      - label: orange
+    - prefs:
+      - label: orange
+      - autostart: True 
+      - audiovm:
+      - guivm: dom0
+      - netvm: sys-vpn-mullvad
+      - memory: 4000
+      - maxmem: 6000
+      - vcpus: 4
+    - features:
+      - set:
+        - menu-items: xterm.desktop org.mozilla.firefox.desktop
+    - service:
+      - enable:
+        - shutdown-idle
+    - require:
+      - qvm: openwebui--create-template
+
+openwebui--extend-private-storage:
+  cmd.run:
+    - name: qvm-volume extend q-openwebui:private 10737418240
+
+{% endif %}
diff --git a/user_salt/openwebui/openwebui--create-template.sls b/user_salt/openwebui/openwebui--create-template.sls
new file mode 100644 (file)
index 0000000..41d8deb
--- /dev/null
@@ -0,0 +1,26 @@
+{% import "templates/versions.jinja" as version %}
+
+include:
+  - templates.templates--install-fedora-minimal
+
+{% if grains['id'] == 'dom0' %}
+
+openwebui-create-template:
+  qvm.clone:
+    - name: template-openwebui
+    - source: fedora-{{ version.fedora }}-minimal
+    - class: TemplateVM
+    - require:
+      - qvm: templates--install-fedora-{{ version.fedora }}-minimal
+
+openwebui--create-template-prefs:
+  qvm.prefs:
+    - name: template-openwebui
+    - label: orange 
+    - netvm:
+    - audiovm:
+    - guivm:
+    - require:
+      - qvm: openwebui--create-template
+
+{% endif %}
diff --git a/user_salt/openwebui/openwebui--install-packages.sls b/user_salt/openwebui/openwebui--install-packages.sls
new file mode 100644 (file)
index 0000000..892d6bf
--- /dev/null
@@ -0,0 +1,11 @@
+{% if grains['id'] == 'template-openwebui' %}
+
+openwebui--install-packages:
+  pkg.installed:
+    - pkgs:
+      - qubes-core-agent-networking
+      - qubes-app-shutdown-idle
+      - podman
+      - firefox
+
+{% endif %}