Getting started: Deployment from a local machine
Please note the general Getting Started documentation by openDesk.
Clone the openDesk repository
Clone the openDesk repository to your local computer:
git clone https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk
cd opendesk
Add settings for your environment
Create your own directory for one or more environments:
mkdir -p helmfile/environments/example-env/dev/
In the folder you created, add one or more files with the configuration for your environment, e.g. values.yaml.gotmpl
(see the Getting Started chapter for an example).
Reference the environment you want to deploy in helmfile.yaml
:
cat helmfile.yaml <<__EOF__
example-env:
values:
- "helmfile/environments/example-env/dev/*.yaml.gotmpl"
__EOF__
Choose your components
Decide which components you want to deploy. If you start with some apps only, you can enable the rest of them later. In the example configuration below all apps are enabled for the initial rollout.
Basic configuration
You can use the following example settings as a starting point for your helmfile/environments/example-env/dev/values.yaml.gotmpl
file. Please see the configuration chapter for more details.
{{/*
SPDX-FileCopyrightText: 2024 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH
SPDX-FileCopyrightText: 2023 Bundesministerium des Innern und für Heimat, PG ZenDiS "Projektgruppe für Aufbau ZenDiS"
SPDX-License-Identifier: Apache-2.0
*/}}
---
grafana:
dashboards:
annotations:
"grafana-dashboard-folder": "openDesk: {{ env "NAMESPACE" | default "Main" }}"
enabled: true
functional:
authentication:
twoFactor:
# Define a list of groups to enable 2FA for.
# Note: Removing a group from the list will not disable 2FA for the removed group.
groups: []
certificate:
issuerRef:
name: "letsencrypt-prod"
wildcard: true
ingress:
ingressClassName: "nginx"
persistence:
storageClassNames:
RWX: "csi-cinder-sc-delete"
RWO: "csi-cinder-sc-delete"
smtp:
host: "host.example-relay.org"
username: "some-account"
port: 587
turn:
server:
host: "turn.example.org"
port: "3478"
tls:
host: "turn.example.org"
port: "5349"
cluster:
service:
type: "ClusterIP"
api:
domain: "api.example.org"
port: 6443
networking:
ingressGatewayIP: "YOUR-PUBLIC-IP"
prometheus:
serviceMonitors:
enabled: true
podMonitors:
enabled: true
prometheusRules:
enabled: true
security:
clusterPostfix:
namespace: "swp-cross-instance-mail"
debug:
enabled: true
databases:
oxAppsuite:
host: "mariadb"
# DB name has to set or else "configdb" will used while "openxchange" is created.
name: "openxchange"
username: "root"
collabora:
enabled: true
cryptpad:
enabled: true
element:
enabled: true
intercom:
enabled: true
jitsi:
enabled: true
nextcloud:
enabled: true
openproject:
enabled: true
oxAppsuite:
enabled: true
oxConnector:
enabled: true
xwiki:
enabled: true
...
Namespace
Create a namespace in your SCS cluster:
kubectl create namespace your-namespace
Deploy an ingress resource inside the namespace
Create an ingress resource:
cat >ingress-resource.yaml <<EOF
---
apiVersion: "networking.k8s.io/v1"
kind: "Ingress"
metadata:
name: "example.org"
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
ingressClassName: "nginx"
tls:
- hosts:
- "example.org"
- "*.example.org"
secretName: "opendesk-certificates-tls"
rules:
- host: "*.example.org"
http:
paths:
- pathType: "Prefix"
path: "/"
backend:
service:
name: "ums-portal-frontend"
port:
number: 443
EOF
Deploy the ingress resource inside your namespace:
kubectl apply -f ingress-resource.yaml -n your-namespace
Deployment
Trigger the deployment:
OPENDESK_SMTPRELAY_PASSWORD="************" OPENDESK_MASTER_PASSWORD="************" DOMAIN="example.org" helmfile apply -e example-env -n your-namespace
Note that the wrapper script supports you in running some of the above tasks.
First login
Two accounts, an admin and a user account, are automatically created for you.
The default admin user is called default.admin
, you can retrieve its password by running:
kubectl -n your-namespace get secret ums-nubus-credentials -o json | jq -r '.data.admin_password' | base64 -d
The default user is called default.user
, you can retrieve its password by running:
kubectl -n your-namespace get secret ums-nubus-credentials -o json | jq -r '.data.user_password' | base64 -d
Open the portal in your browser, e.g. https://portal.example.org
and log in.
Deploy the desired apps
To add an app later you don't have to run helmfile
in the top-level directory. You can cd
into the app's directory underneath helmfile/apps
an execute helmfile
in there. The advantage is that this is faster.