# OpenShift Installation - Simplified Guide
Quick and easy guide to install Seawise Dashboard on OpenShift clusters with OADP
[🌐 seawise.cloud](https://seawise.cloud) | [📦 GitHub](https://github.com/shwcloudapp/seawise-backup)
You need:
oc CLI configuredTwo supported paths: Option A — OperatorHub (recommended) or Option B — Helm. Both require OADP first:
# Check if OADP is installed
oc get deployment -n openshift-adp
# Should show velero deployment
If OADP is not installed, see: OADP Installation Guide
Seawise is a Red Hat Certified Operator available in the in-cluster OperatorHub. This is the easiest path on OpenShift — the Operator deploys and manages the dashboard for you, and you get automatic upgrades.
CLI alternative:
oc apply -f - <<'YAML' apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: seawise-backup-operator namespace: openshift-operators spec: channel: alpha name: seawise-backup-operator source: certified-operators sourceNamespace: openshift-marketplace YAML
In Installed Operators → Seawise Backup Dashboard → Create instance, or via CLI:
oc new-project seawise-app # namespace for the dashboard
oc apply -f - <<'YAML'
apiVersion: backup.seawise.cloud/v1alpha1
kind: Seawise
metadata:
name: seawise-dashboard
namespace: seawise-app
spec:
replicaCount: 1
image:
repository: quay.io/marcellshwcloud/seawise-backup-dashboard
tag: v1.7.1-ubi
app:
veleroNamespace: openshift-adp # where OADP/Velero is installed
persistence:
enabled: true
accessMode: ReadWriteOnce
size: 1Gi
storageClassName: "nfs-storage-class" # <-- set YOUR cluster's StorageClass
service:
port: 80
targetPort: 8080
route:
enabled: true
YAML
⚠️ Set
persistence.storageClassNameto a StorageClass that exists in your cluster (oc get storageclass). If left empty, the cluster default is used; if there is no default, the PVC staysPendingand the pod won’t start.
oc get route -n seawise-app seawise-dashboard -o jsonpath='{.spec.host}'; echo
🔐 Default login is
admin/admin123— change the password on first login.
To upgrade later, the Operator handles it automatically when a new version is
published. To remove: delete the Seawise instance, then uninstall the Operator.
Prefer Helm (no Operator)? Follow the steps below.
Copy and paste this command (it will create the file automatically):
cat > openshift-values.yaml <<'YAML'
image:
repository: shwcloud/seawise-backup
tag: "v1.7.1"
pullPolicy: IfNotPresent
app:
veleroNamespace: "openshift-adp"
timezone: "America/Sao_Paulo"
persistence:
enabled: true
storageClassName: "nfs-storage-class"
size: 1Gi
route:
enabled: true
host: ""
tls:
enabled: true
termination: edge
ingress:
enabled: false
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
podSecurityContext:
runAsNonRoot: true
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: false
runAsNonRoot: true
YAML
Edit the StorageClass if needed:
# Check available storage classes
oc get storageclass
# Edit the file to use your storage class
nano openshift-values.yaml
# Change line 11: storageClassName: "YOUR-STORAGE-CLASS"
Latest Version: Check releases
# Set the version
export CHART_VERSION=1.7.1
helm install seawise-dashboard \
https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
--namespace seawise-app \
--create-namespace \
-f openshift-values.yaml
Done! Wait 1-2 minutes and get the URL:
oc get route -n seawise-app seawise-dashboard
Access the URL shown in the output! 🎉
# Check if pod is running
oc get pods -n seawise-app
# Check the Route
oc get route -n seawise-app
# Check logs if needed
oc logs -n seawise-app -l app.kubernetes.io/name=seawise-dashboard -f
Expected output:
NAME READY STATUS RESTARTS AGE
seawise-dashboard-xxxxxxxxxx-xxxxx 1/1 Running 0 2m
NAME HOST/PORT
seawise-dashboard seawise-dashboard-seawise-app.apps.cluster.example.com
helm upgrade seawise-dashboard \
https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
--namespace seawise-app \
--reuse-values \
--set app.timezone="America/New_York"
# Edit the file
nano openshift-values.yaml
# Change:
# route:
# enabled: true
# host: "backup.apps.cluster.example.com"
# Update
helm upgrade seawise-dashboard \
https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
--namespace seawise-app \
-f openshift-values.yaml
helm upgrade seawise-dashboard \
https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
--namespace seawise-app \
--reuse-values \
--set route.tls.insecureEdgeTerminationPolicy="Redirect"
If OADP is in a different namespace:
# Find OADP namespace
oc get deployment --all-namespaces | grep velero
# Update
helm upgrade seawise-dashboard \
https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
--namespace seawise-app \
--reuse-values \
--set app.veleroNamespace="YOUR-OADP-NAMESPACE"
# View logs
oc logs -n seawise-app -l app.kubernetes.io/name=seawise-dashboard
# Check PVC
oc get pvc -n seawise-app
Solution: Usually a storage issue. Check if the StorageClass exists:
oc get storageclass
If nfs-storage-class doesn’t exist, use another one:
helm upgrade seawise-dashboard \
https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
--namespace seawise-app \
--reuse-values \
--set persistence.storageClassName="ocs-storagecluster-cephfs"
Common OpenShift storage classes:
ocs-storagecluster-cephfs (OCS/ODF)ocs-storagecluster-ceph-rbd (OCS/ODF block)gp2 or gp3 (AWS EBS)managed-nfs-storage (NFS)# Check if Route was created
oc describe route -n seawise-app seawise-dashboard
# Check service
oc get svc -n seawise-app
Solutions:
route.enabled=true in the values fileoc port-forward -n seawise-app svc/seawise-dashboard 8080:80
# Access: http://localhost:8080
# Find where OADP/Velero is installed
oc get deployment --all-namespaces | grep velero
# If it's in a different namespace, update:
helm upgrade seawise-dashboard \
https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
--namespace seawise-app \
--reuse-values \
--set app.veleroNamespace="CORRECT-NAMESPACE"
# Check RBAC
oc get clusterrole | grep seawise
oc get clusterrolebinding | grep seawise
# Check ServiceAccount
oc get sa -n seawise-app
Solution: The Helm chart automatically creates all required RBAC resources. If there are errors, reinstall:
helm uninstall seawise-dashboard -n seawise-app
helm install seawise-dashboard \
https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
--namespace seawise-app \
--create-namespace \
-f openshift-values.yaml
OpenShift has strict security policies. The chart is configured to work with the default restricted-v2 SCC by:
runAsUser or fsGroup (OpenShift manages this automatically)runAsNonRoot: trueThe chart should work out-of-the-box with OpenShift’s default SCC!
If you still get SCC errors:
# Check which SCC is being used
oc describe pod -n seawise-app -l app.kubernetes.io/name=seawise-dashboard | grep scc
# Check available SCCs
oc get scc
Solution: The Helm chart v1.7.1+ is already configured correctly for OpenShift. Just make sure you’re NOT specifying runAsUser or fsGroup in your values file.
If upgrading from an older version:
# Uninstall old version
helm uninstall seawise-dashboard -n seawise-app
# Reinstall with correct SCC settings
helm install seawise-dashboard \
https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
--namespace seawise-app \
--create-namespace \
-f openshift-values.yaml
helm upgrade seawise-dashboard \
https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
--namespace seawise-app \
--reuse-values
# Remove application
helm uninstall seawise-dashboard -n seawise-app
# Remove data (CAUTION: this deletes the database!)
oc delete pvc -n seawise-app seawise-dashboard-pvc
# Remove namespace
oc delete project seawise-app
For convenience, here’s the complete command in a single block:
# 1. Create configuration file
cat > openshift-values.yaml <<'YAML'
image:
repository: shwcloud/seawise-backup
tag: "v1.7.1"
pullPolicy: IfNotPresent
app:
veleroNamespace: "openshift-adp"
timezone: "America/Sao_Paulo"
persistence:
enabled: true
storageClassName: "nfs-storage-class"
size: 1Gi
route:
enabled: true
host: ""
tls:
enabled: true
termination: edge
ingress:
enabled: false
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
podSecurityContext:
runAsNonRoot: true
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: false
runAsNonRoot: true
YAML
# 2. EDIT storage class if needed
nano openshift-values.yaml
# 3. Install
helm install seawise-dashboard \
https://github.com/shwcloudapp/seawise-backup/releases/download/v${CHART_VERSION}/seawise-dashboard-${CHART_VERSION}.tgz \
--namespace seawise-app \
--create-namespace \
-f openshift-values.yaml
# 4. Verify
oc get pods,route -n seawise-app
# 5. Get URL
oc get route -n seawise-app seawise-dashboard -o jsonpath='{.spec.host}'
echo ""
Done! 🎉
# Check OADP operator
oc get csv -n openshift-adp | grep oadp
# Check DataProtectionApplication
oc get dpa -n openshift-adp
# Check Velero deployment
oc get deployment -n openshift-adp velero
oc port-forward -n seawise-app svc/seawise-dashboard 8080:80
# Access: http://localhost:8080
export SEAWISE_URL=$(oc get route -n seawise-app seawise-dashboard -o jsonpath='{.spec.host}')
echo "Access Seawise Dashboard at: https://$SEAWISE_URL"
Ready to backup! 🚀