From b4253aacda3a3cf87b97bc7ed5e90bfdfa8a1a12 Mon Sep 17 00:00:00 2001
From: jabertwo <git@jabertwo.de>
Date: Wed, 26 Jun 2024 00:05:18 +0200
Subject: [PATCH] WIP verwaltung jameica testserver

---
 site.yml                                      |  7 ++-
 testserver/docker_jameica/tasks/main.yml      | 38 ++++++++++++++
 .../docker_jameica/templates/Dockerfile       | 24 +++++++++
 .../templates/docker-compose.yml              | 52 +++++++++++++++++++
 .../docker_jameica/templates/jameica.conf     |  4 ++
 .../docker_jameica/templates/jameica.sh       | 11 ++++
 6 files changed, 135 insertions(+), 1 deletion(-)
 create mode 100644 testserver/docker_jameica/tasks/main.yml
 create mode 100644 testserver/docker_jameica/templates/Dockerfile
 create mode 100644 testserver/docker_jameica/templates/docker-compose.yml
 create mode 100644 testserver/docker_jameica/templates/jameica.conf
 create mode 100644 testserver/docker_jameica/templates/jameica.sh

diff --git a/site.yml b/site.yml
index 9124d9e3..e133f9c5 100644
--- a/site.yml
+++ b/site.yml
@@ -99,7 +99,12 @@
         basedir: "/srv/{{ servicename }}",
         domain: "www.test-warpzone.de" 
       }
-
+    - { 
+        role: testserver/docker_jameica, tags: [ test_jameicavnc, docker_services ],
+        servicename: "jameicavnc",
+        domain: "verwaltung-jameica.test-warpzone.de",
+        basedir: "/srv/{{servicename}}"
+      }
 
 ##################################################
 # Produktive Server
diff --git a/testserver/docker_jameica/tasks/main.yml b/testserver/docker_jameica/tasks/main.yml
new file mode 100644
index 00000000..fae41ec7
--- /dev/null
+++ b/testserver/docker_jameica/tasks/main.yml
@@ -0,0 +1,38 @@
+---
+- include_tasks: ../functions/get_secret.yml
+  with_items:
+    - { path: "{{ basedir }}/secrets/forward_auth_secret", length: 64 }
+    - { path: "{{ basedir }}/secrets/oauth_client_secret", length: 64 }
+  
+- name: "create folder struct for {{ servicename }}"
+  file: 
+    path: "{{item}}" 
+    state: "directory"
+  with_items:
+    - "{{basedir}}/"
+    - "{{basedir}}/work"
+    - "{{basedir}}/secrets"
+
+- name: Konfig-Dateien erstellen
+  template: 
+    src: "{{item}}" 
+    dest: "{{basedir}}/{{item}}"
+  with_items:
+    - "docker-compose.yml"
+    - "Dockerfile"
+    - "jameica.conf"
+    - "jameica.sh"
+  register: config_files
+
+- name: "stop {{ servicename }} docker"
+  community.docker.docker_compose_v2:
+    project_src: "{{ basedir }}"
+    state: absent
+  when: config_files.changed 
+
+
+- name: "start {{ servicename }} docker"
+  community.docker.docker_compose_v2:
+    project_src: "{{ basedir }}"
+    state: present
+    
diff --git a/testserver/docker_jameica/templates/Dockerfile b/testserver/docker_jameica/templates/Dockerfile
new file mode 100644
index 00000000..6e872df1
--- /dev/null
+++ b/testserver/docker_jameica/templates/Dockerfile
@@ -0,0 +1,24 @@
+FROM theasp/novnc:latest
+
+# Install java
+RUN set -ex; \
+    apt-get update; \
+    apt-get install -y \
+      openjdk-17-jre \
+      libswt-gtk-4-java
+
+COPY jameica.conf /app/conf.d/
+COPY jameica.sh  /app/
+
+# Add User Vorstand
+RUN groupadd --gid 1000 vorstand \
+ && useradd --uid 1000 --gid 1000 -m vorstand 
+
+RUN set -ex; \
+  mkdir /jameica/; \
+  mkdir /jameica-data/; \
+  mkdir /jameica-work/; \
+  usermod -U -s /bin/bash -d /jameica-work/ -G root www-data; \
+  chown vorstand:vorstand /app/jameica.sh; \
+  chown vorstand:vorstand /jameica-work/; \
+  chmod +x /app/jameica.sh; 
diff --git a/testserver/docker_jameica/templates/docker-compose.yml b/testserver/docker_jameica/templates/docker-compose.yml
new file mode 100644
index 00000000..3c3c4435
--- /dev/null
+++ b/testserver/docker_jameica/templates/docker-compose.yml
@@ -0,0 +1,52 @@
+services:
+    
+  vnc:
+    build: .
+    restart: always
+    environment:
+      DISPLAY_WIDTH: 1440
+      DISPLAY_HEIGHT: 900
+      RUN_XTERM: "no"
+    volumes:
+      - /srv/jameica:/jameica/
+      - /srv/data-jameica:/jameica-data/
+      - {{basedir}}/work:/jameica-work/
+    networks:
+      - default
+    labels:
+      - com.centurylinklabs.watchtower.enable=false
+      - traefik.enable=true
+      - traefik.http.routers.{{ servicename }}.middlewares={{ servicename }}-auth
+      - traefik.http.routers.{{ servicename }}.rule=Host(`{{ domain }}`)
+      - traefik.http.routers.{{ servicename }}.entrypoints=websecure
+      - traefik.http.services.{{ servicename }}.loadbalancer.server.port=8080
+
+
+  auth:
+    image: thomseddon/traefik-forward-auth:2.2
+    restart: always
+    environment: 
+      LOG_LEVEL: info
+      DEFAULT_ACTION: auth
+      DEFAULT_PROVIDER: generic-oauth
+      SECRET: {{ forward_auth_secret }}
+      PROVIDERS_GENERIC_OAUTH_AUTH_URL: {{ oauth_global.authorize_url }}
+      PROVIDERS_GENERIC_OAUTH_TOKEN_URL: {{ oauth_global.token_url }}
+      PROVIDERS_GENERIC_OAUTH_USER_URL: {{ oauth_global.userinfo_url }}
+      PROVIDERS_GENERIC_OAUTH_CLIENT_ID: {{ servicename }}
+      PROVIDERS_GENERIC_OAUTH_CLIENT_SECRET: {{ oauth_client_secret }}
+      PROVIDERS_GENERIC_OAUTH_SCOPE: profile
+      PROVIDERS_GENERIC_OAUTH_TOKEN_STYLE: header
+    labels:
+      - com.centurylinklabs.watchtower.enable=false
+      - traefik.enable=true
+      - traefik.http.middlewares.{{ servicename }}-auth.forwardauth.address=http://auth:4181
+      - traefik.http.middlewares.{{ servicename }}-auth.forwardauth.authResponseHeaders=X-Forwarded-User
+      - traefik.http.services.{{ servicename }}-auth.loadbalancer.server.port=4181
+    networks:
+      - default
+      - web
+
+networks:
+  web:
+    external: true    
\ No newline at end of file
diff --git a/testserver/docker_jameica/templates/jameica.conf b/testserver/docker_jameica/templates/jameica.conf
new file mode 100644
index 00000000..1e2873ea
--- /dev/null
+++ b/testserver/docker_jameica/templates/jameica.conf
@@ -0,0 +1,4 @@
+[program:jameica]
+command=/app/jameica.sh
+autorestart=true
+user=vorstand
diff --git a/testserver/docker_jameica/templates/jameica.sh b/testserver/docker_jameica/templates/jameica.sh
new file mode 100644
index 00000000..1fb8c4b9
--- /dev/null
+++ b/testserver/docker_jameica/templates/jameica.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Linux Start-Script fuer regulaeren Standalone-Betrieb.
+# Jameica wird hierbei mit GUI gestartet.
+
+# Das Datenverzeichnis wird hierbei ohne Passwort geladen
+
+cd "/jameica/"
+archsuffix="64"
+
+LIBOVERLAY_SCROLLBAR=0 GDK_NATIVE_WINDOWS=1 SWT_GTK3=1 exec java -Djava.net.preferIPv4Stack=true -Xmx512m $_JCONSOLE -jar jameica-linux${archsuffix}.jar -f /jameica-data/ -p nopassword $@
-- 
GitLab