diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 570bbc396..000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,8 +0,0 @@ -blank_issues_enabled: false -contact_links: - - name: Support Center - url: https://github.com/Termix-SSH/Support/issues - about: Report any feature requests or bugs in the support center - - name: Discord - url: https://discord.gg/jVQGdvHDrf - about: Official Termix Discord server for general discussion (not recommended for support) diff --git a/.github/workflows/crowdin-sync.yml b/.github/workflows/crowdin-sync.yml deleted file mode 100644 index 6a97ff1b9..000000000 --- a/.github/workflows/crowdin-sync.yml +++ /dev/null @@ -1,83 +0,0 @@ -name: Crowdin Sync - -on: - schedule: - - cron: "0 6 * * *" - workflow_dispatch: - inputs: - branch: - description: "Branch to sync translations into" - required: false - type: string - -permissions: - contents: write - -jobs: - crowdin: - runs-on: blacksmith-2vcpu-ubuntu-2404 - steps: - - name: Resolve target branch - id: branch - run: | - BRANCH="${{ inputs.branch }}" - if [ -z "$BRANCH" ]; then - BRANCH="${{ github.event.repository.default_branch }}" - fi - echo "name=$BRANCH" >> "$GITHUB_OUTPUT" - - - name: Checkout branch - uses: actions/checkout@v7 - with: - ref: ${{ steps.branch.outputs.name }} - fetch-depth: 0 - token: ${{ secrets.TERMIX_PAT }} - - - name: Setup Node.js - uses: actions/setup-node@v7 - with: - node-version-file: ".nvmrc" - - - name: Upload sources to Crowdin - uses: crowdin/github-action@v3 - with: - upload_sources: true - upload_translations: false - download_translations: false - create_pull_request: false - push_translations: false - token: ${{ secrets.CROWDIN_API_KEY }} - project_id: "858252" - env: - CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_KEY }} - - - name: Pre-translate untranslated strings - env: - CROWDIN_API_KEY: ${{ secrets.CROWDIN_API_KEY }} - run: node scripts/crowdin-pretranslate.cjs - - - name: Download translations from Crowdin - uses: crowdin/github-action@v3 - with: - upload_sources: false - upload_translations: false - download_translations: true - create_pull_request: false - push_translations: false - token: ${{ secrets.CROWDIN_API_KEY }} - project_id: "858252" - env: - CROWDIN_API_TOKEN: ${{ secrets.CROWDIN_API_KEY }} - - - name: Commit translations - run: | - git config user.name "LukeGus" - git config user.email "bugattiguy527@gmail.com" - - git add src/ui/locales/translated - if git diff --cached --quiet; then - echo "No translation changes to commit." - exit 0 - fi - git commit -m "chore: sync Crowdin translations" - git push origin HEAD:"${{ steps.branch.outputs.name }}" diff --git a/.github/workflows/deploy-helm.yml b/.github/workflows/deploy-helm.yml deleted file mode 100644 index 875007e9e..000000000 --- a/.github/workflows/deploy-helm.yml +++ /dev/null @@ -1,76 +0,0 @@ -name: Deploy Helm - -on: - workflow_dispatch: - inputs: - namespace: - description: "Kubernetes namespace" - required: true - default: termix - release: - description: "Helm release name" - required: true - default: termix - values_file: - description: "Values file to use" - required: true - default: charts/termix/values-gitops-example.yaml - image_tag: - description: "Image tag to deploy" - required: false - default: "" - -permissions: - contents: read - -jobs: - deploy: - runs-on: blacksmith-2vcpu-ubuntu-2404 - environment: production - steps: - - name: Checkout - uses: actions/checkout@v7 - - - name: Set up Helm - uses: azure/setup-helm@v5 - with: - version: v3.15.4 - - - name: Configure kubeconfig - env: - KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }} - run: | - test -n "$KUBE_CONFIG" - echo "$KUBE_CONFIG" | base64 -d > "$RUNNER_TEMP/kubeconfig" - chmod 600 "$RUNNER_TEMP/kubeconfig" - - - name: Lint chart - run: helm lint charts/termix - - - name: Deploy - env: - KUBECONFIG: ${{ runner.temp }}/kubeconfig - IMAGE_TAG: ${{ inputs.image_tag }} - RELEASE_NAME: ${{ inputs.release }} - TARGET_NAMESPACE: ${{ inputs.namespace }} - VALUES_FILE: ${{ inputs.values_file }} - run: | - set -euo pipefail - [[ "$RELEASE_NAME" =~ ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ ]] - [[ "$TARGET_NAMESPACE" =~ ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ ]] - case "$VALUES_FILE" in - charts/termix/*.yaml) ;; - *) echo "values_file must be a YAML file under charts/termix" >&2; exit 1 ;; - esac - test -f "$VALUES_FILE" - ARGS=() - if [ -n "$IMAGE_TAG" ]; then - ARGS+=(--set "image.tag=$IMAGE_TAG") - fi - helm upgrade --install "$RELEASE_NAME" charts/termix \ - --namespace "$TARGET_NAMESPACE" \ - --create-namespace \ - --values "$VALUES_FILE" \ - --atomic \ - --timeout 10m \ - "${ARGS[@]}" diff --git a/.github/workflows/helm.yml b/.github/workflows/helm.yml deleted file mode 100644 index b39030602..000000000 --- a/.github/workflows/helm.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: Helm - -on: - pull_request: - paths: - - "charts/**" - - ".github/workflows/helm.yml" - push: - branches: [main] - paths: - - "charts/**" - - ".github/workflows/helm.yml" - workflow_dispatch: - inputs: - publish: - description: "Publish chart to GHCR OCI registry" - required: true - type: boolean - default: false - -permissions: - contents: read - -jobs: - lint: - runs-on: blacksmith-2vcpu-ubuntu-2404 - steps: - - name: Checkout - uses: actions/checkout@v7 - - - name: Set up Helm - uses: azure/setup-helm@v5 - with: - version: v3.15.4 - - - name: Lint chart - run: helm lint charts/termix - - - name: Render default chart - run: helm template termix charts/termix --namespace termix - - - name: Render GitOps example - run: helm template termix charts/termix --values charts/termix/values-gitops-example.yaml --namespace termix - - - name: Render Traefik example - run: helm template termix charts/termix --values charts/termix/values-traefik.yaml --namespace termix - - publish: - needs: lint - if: github.event_name == 'workflow_dispatch' && inputs.publish - runs-on: blacksmith-2vcpu-ubuntu-2404 - permissions: - contents: read - packages: write - steps: - - name: Checkout - uses: actions/checkout@v7 - - - name: Set up Helm - uses: azure/setup-helm@v5 - with: - version: v3.15.4 - - - name: Log in to GHCR - run: echo "${{ secrets.GITHUB_TOKEN }}" | helm registry login ghcr.io --username "${{ github.actor }}" --password-stdin - - - name: Package chart - run: helm package charts/termix --destination .helm-packages - - - name: Push chart - run: | - OWNER="$(echo "$GITHUB_REPOSITORY_OWNER" | tr '[:upper:]' '[:lower:]')" - helm push .helm-packages/termix-*.tgz "oci://ghcr.io/$OWNER/charts" diff --git a/.github/workflows/openapi.yml b/.github/workflows/openapi.yml deleted file mode 100644 index 54f1486fd..000000000 --- a/.github/workflows/openapi.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Generate OpenAPI Specification - -on: - workflow_dispatch: - -jobs: - generate-openapi: - name: Generate OpenAPI JSON - runs-on: blacksmith-2vcpu-ubuntu-2404 - - steps: - - name: Checkout repository - uses: actions/checkout@v7 - - - name: Setup Node.js - uses: actions/setup-node@v7 - with: - node-version-file: ".nvmrc" - cache: "npm" - - - name: Install dependencies - run: npm ci - - - name: Generate OpenAPI specification - run: npm run generate:openapi - - - name: Upload OpenAPI artifact - uses: actions/upload-artifact@v7 - with: - name: openapi-spec - path: openapi.json - retention-days: 90 diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index 866188d5e..8809af565 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -28,8 +28,6 @@ jobs: run: npm run build:sdk - name: Lint - # npm run lint, not npx eslint — the script also checks that the - # generated dialect schemas match schema.ts, which eslint cannot see. run: npm run lint - name: Run Prettier check @@ -48,9 +46,6 @@ jobs: name: Postgres and MySQL runs-on: blacksmith-2vcpu-ubuntu-2404 - # The test suite only ever sees SQLite. Everything that differs per engine — - # the RETURNING replacements, the read-then-write transactions, the - # migrations themselves — is only covered here, against real servers. services: postgres: image: postgres:16 @@ -97,17 +92,12 @@ jobs: - name: Build plugin SDK run: npm run build:sdk - # Each run applies the migrations to an empty database first, so a - # migration that does not apply cleanly fails the build. - name: Verify Postgres run: npm run verify:dialect -- postgres://termix:termix@127.0.0.1:5432/termix_test - name: Verify MySQL run: npm run verify:dialect -- mysql://termix:termix@127.0.0.1:3306/termix_test - # The same repository suite the SQLite run executes, pointed at each - # engine. This is where a dialect difference in a query shows up as a - # failing assertion rather than as a bug report. - name: Repository tests on Postgres env: TEST_DIALECT: postgres diff --git a/.github/workflows/redirect-issues.yml b/.github/workflows/redirect-issues.yml deleted file mode 100644 index 7a23ce1f2..000000000 --- a/.github/workflows/redirect-issues.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Redirect issues -on: - issues: - types: [opened] - -permissions: - issues: write - -jobs: - close: - if: github.event.issue.author_association != 'OWNER' && github.event.issue.author_association != 'COLLABORATOR' - runs-on: blacksmith-2vcpu-ubuntu-2404 - steps: - - uses: actions/github-script@v9 - with: - script: | - const n = context.issue.number; - await github.rest.issues.createComment({ - ...context.repo, issue_number: n, - body: "Do not create issues here. Use the dedicated support repo and issue template system: https://github.com/Termix-SSH/Support" - }); - await github.rest.issues.update({ ...context.repo, issue_number: n, state: "closed", state_reason: "not_planned" }); - await github.rest.issues.lock({ ...context.repo, issue_number: n, lock_reason: "off-topic" }); diff --git a/.prettierignore b/.prettierignore index f1e9db6f4..ff2d4a06c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -21,7 +21,4 @@ openapi.json # Generated by drizzle-kit; formatting is the tool's own drizzle/ -# Helm templates contain Go template syntax, not plain YAML -charts/*/templates/ - src/ui/settings/settings-search-index.ts diff --git a/README.md b/README.md index 38b4afa75..f12a3e00e 100644 --- a/README.md +++ b/README.md @@ -304,10 +304,6 @@ Around 30 languages built in, managed through [Crowdin](https://docs.termix.site Visit the [Termix Docs](https://docs.termix.site/install) for full installation instructions across all platforms. -Deploying to Kubernetes? The Helm chart is in `charts/termix`, and setup instructions -covering Ingress, Traefik, Argo CD, GitHub Actions, and GitLab CI are at -[docs.termix.site/install/server/kubernetes](https://docs.termix.site/install/server/kubernetes). - Sample Docker Compose file (you can omit `guacd` and the network if you don't plan on using remote desktop features): ```yaml diff --git a/charts/termix/.helmignore b/charts/termix/.helmignore deleted file mode 100644 index e4a6797e2..000000000 --- a/charts/termix/.helmignore +++ /dev/null @@ -1,6 +0,0 @@ -.git/ -.github/ -node_modules/ -dist/ -coverage/ -*.tgz diff --git a/charts/termix/Chart.yaml b/charts/termix/Chart.yaml deleted file mode 100644 index 5fd44049a..000000000 --- a/charts/termix/Chart.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v2 -name: termix -description: Self-hosted SSH and remote desktop management for Kubernetes. -type: application -version: 0.1.0 -appVersion: 2.7.0 -home: https://github.com/Termix-SSH/Termix -sources: - - https://github.com/Termix-SSH/Termix -maintainers: - - name: Termix maintainers -keywords: - - ssh - - remote-desktop - - guacamole - - terminal diff --git a/charts/termix/templates/NOTES.txt b/charts/termix/templates/NOTES.txt deleted file mode 100644 index c2eea984e..000000000 --- a/charts/termix/templates/NOTES.txt +++ /dev/null @@ -1,17 +0,0 @@ -Termix has been installed. - -Service: - {{ include "termix.fullname" . }}:{{ .Values.service.port }} - -{{- if .Values.ingress.enabled }} -Ingress hosts: -{{- range .Values.ingress.hosts }} - - {{ .host }} -{{- end }} -{{- else if .Values.traefik.ingressRoute.enabled }} -Traefik IngressRoute: - https://{{ .Values.traefik.ingressRoute.host }}{{ .Values.traefik.ingressRoute.pathPrefix }} -{{- else }} -Port-forward for local testing: - kubectl -n {{ .Release.Namespace }} port-forward svc/{{ include "termix.fullname" . }} 8080:{{ .Values.service.port }} -{{- end }} diff --git a/charts/termix/templates/_helpers.tpl b/charts/termix/templates/_helpers.tpl deleted file mode 100644 index 65b38907b..000000000 --- a/charts/termix/templates/_helpers.tpl +++ /dev/null @@ -1,45 +0,0 @@ -{{- define "termix.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{- define "termix.fullname" -}} -{{- if .Values.fullnameOverride -}} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- if contains $name .Release.Name -}} -{{- .Release.Name | trunc 63 | trimSuffix "-" -}} -{{- else -}} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} -{{- end -}} -{{- end -}} - -{{- define "termix.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} -{{- end -}} - -{{- define "termix.labels" -}} -helm.sh/chart: {{ include "termix.chart" . }} -app.kubernetes.io/name: {{ include "termix.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end -}} - -{{- define "termix.selectorLabels" -}} -app.kubernetes.io/name: {{ include "termix.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end -}} - -{{- define "termix.serviceAccountName" -}} -{{- if .Values.serviceAccount.create -}} -{{- default (include "termix.fullname" .) .Values.serviceAccount.name -}} -{{- else -}} -{{- default "default" .Values.serviceAccount.name -}} -{{- end -}} -{{- end -}} - -{{- define "termix.secretName" -}} -{{- default (printf "%s-secret" (include "termix.fullname" .)) .Values.secrets.name -}} -{{- end -}} diff --git a/charts/termix/templates/deployment.yaml b/charts/termix/templates/deployment.yaml deleted file mode 100644 index 52487425d..000000000 --- a/charts/termix/templates/deployment.yaml +++ /dev/null @@ -1,148 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "termix.fullname" . }} - labels: - {{- include "termix.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - strategy: - {{- toYaml .Values.strategy | nindent 4 }} - selector: - matchLabels: - {{- include "termix.selectorLabels" . | nindent 6 }} - template: - metadata: - labels: - {{- include "termix.selectorLabels" . | nindent 8 }} - {{- with .Values.podLabels }} - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - spec: - serviceAccountName: {{ include "termix.serviceAccountName" . }} - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: termix - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - ports: - - name: http - containerPort: {{ .Values.service.port }} - protocol: TCP - env: - {{- range $key, $value := .Values.env }} - - name: {{ $key }} - value: {{ $value | quote }} - {{- end }} - {{- if .Values.guacd.enabled }} - - name: GUACD_HOST - value: "127.0.0.1" - {{- else if .Values.guacd.host }} - - name: GUACD_HOST - value: {{ .Values.guacd.host | quote }} - {{- end }} - - name: GUACD_TUNNEL_HOST - value: {{ include "termix.fullname" . | quote }} - {{- if ne .Values.database.dialect "sqlite" }} - - name: DATABASE_DIALECT - value: {{ .Values.database.dialect | quote }} - {{- end }} - {{- if .Values.database.existingSecret.name }} - - name: DATABASE_URL - valueFrom: - secretKeyRef: - name: {{ .Values.database.existingSecret.name }} - key: {{ .Values.database.existingSecret.urlKey }} - {{- end }} - {{- if .Values.secrets.create }} - {{- range $key, $value := .Values.secrets.data }} - {{- if $value }} - - name: {{ $key }} - valueFrom: - secretKeyRef: - name: {{ include "termix.secretName" $ }} - key: {{ $key }} - {{- end }} - {{- end }} - {{- end }} - {{- with .Values.extraEnv }} - {{- toYaml . | nindent 12 }} - {{- end }} - {{- with .Values.extraEnvFrom }} - envFrom: - {{- toYaml . | nindent 12 }} - {{- end }} - {{- if .Values.probes.liveness.enabled }} - livenessProbe: - httpGet: - path: /health - port: http - initialDelaySeconds: {{ .Values.probes.liveness.initialDelaySeconds }} - periodSeconds: {{ .Values.probes.liveness.periodSeconds }} - timeoutSeconds: {{ .Values.probes.liveness.timeoutSeconds }} - failureThreshold: {{ .Values.probes.liveness.failureThreshold }} - {{- end }} - {{- if .Values.probes.readiness.enabled }} - readinessProbe: - httpGet: - path: /health - port: http - initialDelaySeconds: {{ .Values.probes.readiness.initialDelaySeconds }} - periodSeconds: {{ .Values.probes.readiness.periodSeconds }} - timeoutSeconds: {{ .Values.probes.readiness.timeoutSeconds }} - failureThreshold: {{ .Values.probes.readiness.failureThreshold }} - {{- end }} - resources: - {{- toYaml .Values.resources | nindent 12 }} - volumeMounts: - - name: data - mountPath: /app/data - {{- if .Values.guacd.enabled }} - - name: guacd - image: "{{ .Values.guacd.image.repository }}:{{ .Values.guacd.image.tag }}" - imagePullPolicy: {{ .Values.guacd.image.pullPolicy }} - securityContext: - {{- toYaml .Values.guacd.securityContext | nindent 12 }} - ports: - - name: guacd - containerPort: {{ .Values.guacd.service.port }} - protocol: TCP - resources: - {{- toYaml .Values.guacd.resources | nindent 12 }} - volumeMounts: - - name: data - mountPath: /termix-data - {{- end }} - volumes: - - name: data - {{- if .Values.persistence.enabled }} - persistentVolumeClaim: - claimName: {{ default (printf "%s-data" (include "termix.fullname" .)) .Values.persistence.existingClaim }} - {{- else }} - emptyDir: {} - {{- end }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/charts/termix/templates/hpa.yaml b/charts/termix/templates/hpa.yaml deleted file mode 100644 index 016a9e87c..000000000 --- a/charts/termix/templates/hpa.yaml +++ /dev/null @@ -1,22 +0,0 @@ -{{- if .Values.autoscaling.enabled -}} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "termix.fullname" . }} - labels: - {{- include "termix.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "termix.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} -{{- end }} diff --git a/charts/termix/templates/ingress.yaml b/charts/termix/templates/ingress.yaml deleted file mode 100644 index 6c6b1fbe8..000000000 --- a/charts/termix/templates/ingress.yaml +++ /dev/null @@ -1,35 +0,0 @@ -{{- if .Values.ingress.enabled -}} -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: {{ include "termix.fullname" . }} - labels: - {{- include "termix.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if .Values.ingress.className }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- toYaml .Values.ingress.tls | nindent 4 }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - pathType: {{ .pathType }} - backend: - service: - name: {{ include "termix.fullname" $ }} - port: - name: http - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/termix/templates/networkpolicy.yaml b/charts/termix/templates/networkpolicy.yaml deleted file mode 100644 index c0e508be5..000000000 --- a/charts/termix/templates/networkpolicy.yaml +++ /dev/null @@ -1,19 +0,0 @@ -{{- if .Values.networkPolicy.enabled -}} -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: {{ include "termix.fullname" . }} - labels: - {{- include "termix.labels" . | nindent 4 }} -spec: - podSelector: - matchLabels: - {{- include "termix.selectorLabels" . | nindent 6 }} - policyTypes: - - Ingress - - Egress - ingress: - {{- toYaml .Values.networkPolicy.ingress | nindent 4 }} - egress: - {{- toYaml .Values.networkPolicy.egress | nindent 4 }} -{{- end }} diff --git a/charts/termix/templates/pdb.yaml b/charts/termix/templates/pdb.yaml deleted file mode 100644 index fc22ede1c..000000000 --- a/charts/termix/templates/pdb.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.podDisruptionBudget.enabled -}} -apiVersion: policy/v1 -kind: PodDisruptionBudget -metadata: - name: {{ include "termix.fullname" . }} - labels: - {{- include "termix.labels" . | nindent 4 }} -spec: - minAvailable: {{ .Values.podDisruptionBudget.minAvailable }} - selector: - matchLabels: - {{- include "termix.selectorLabels" . | nindent 6 }} -{{- end }} diff --git a/charts/termix/templates/pvc.yaml b/charts/termix/templates/pvc.yaml deleted file mode 100644 index ac7a11a48..000000000 --- a/charts/termix/templates/pvc.yaml +++ /dev/null @@ -1,21 +0,0 @@ -{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) -}} -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: {{ include "termix.fullname" . }}-data - labels: - {{- include "termix.labels" . | nindent 4 }} - {{- with .Values.persistence.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - accessModes: - {{- toYaml .Values.persistence.accessModes | nindent 4 }} - resources: - requests: - storage: {{ .Values.persistence.size | quote }} - {{- if .Values.persistence.storageClass }} - storageClassName: {{ .Values.persistence.storageClass | quote }} - {{- end }} -{{- end }} diff --git a/charts/termix/templates/secret.yaml b/charts/termix/templates/secret.yaml deleted file mode 100644 index 278119ee9..000000000 --- a/charts/termix/templates/secret.yaml +++ /dev/null @@ -1,15 +0,0 @@ -{{- if .Values.secrets.create -}} -apiVersion: v1 -kind: Secret -metadata: - name: {{ include "termix.secretName" . }} - labels: - {{- include "termix.labels" . | nindent 4 }} -type: Opaque -stringData: - {{- range $key, $value := .Values.secrets.data }} - {{- if $value }} - {{ $key }}: {{ $value | quote }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/termix/templates/service.yaml b/charts/termix/templates/service.yaml deleted file mode 100644 index c2d2f4dba..000000000 --- a/charts/termix/templates/service.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "termix.fullname" . }} - labels: - {{- include "termix.labels" . | nindent 4 }} - {{- with .Values.service.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "termix.selectorLabels" . | nindent 4 }} diff --git a/charts/termix/templates/serviceaccount.yaml b/charts/termix/templates/serviceaccount.yaml deleted file mode 100644 index 365c382b3..000000000 --- a/charts/termix/templates/serviceaccount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "termix.serviceAccountName" . }} - labels: - {{- include "termix.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -automountServiceAccountToken: {{ .Values.serviceAccount.automount }} -{{- end }} diff --git a/charts/termix/templates/traefik-ingressroute.yaml b/charts/termix/templates/traefik-ingressroute.yaml deleted file mode 100644 index 4d5f29a7f..000000000 --- a/charts/termix/templates/traefik-ingressroute.yaml +++ /dev/null @@ -1,34 +0,0 @@ -{{- if .Values.traefik.ingressRoute.enabled -}} -apiVersion: traefik.io/v1alpha1 -kind: IngressRoute -metadata: - name: {{ include "termix.fullname" . }} - labels: - {{- include "termix.labels" . | nindent 4 }} - {{- with .Values.traefik.ingressRoute.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - entryPoints: - {{- toYaml .Values.traefik.ingressRoute.entryPoints | nindent 4 }} - routes: - - match: Host(`{{ .Values.traefik.ingressRoute.host }}`) && PathPrefix(`{{ .Values.traefik.ingressRoute.pathPrefix }}`) - kind: Rule - services: - - name: {{ include "termix.fullname" . }} - port: {{ .Values.service.port }} - {{- with .Values.traefik.ingressRoute.middlewares }} - middlewares: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- if .Values.traefik.ingressRoute.tls.enabled }} - tls: - {{- if .Values.traefik.ingressRoute.tls.secretName }} - secretName: {{ .Values.traefik.ingressRoute.tls.secretName }} - {{- end }} - {{- if .Values.traefik.ingressRoute.tls.certResolver }} - certResolver: {{ .Values.traefik.ingressRoute.tls.certResolver }} - {{- end }} - {{- end }} -{{- end }} diff --git a/charts/termix/templates/validate.yaml b/charts/termix/templates/validate.yaml deleted file mode 100644 index 2faf999a4..000000000 --- a/charts/termix/templates/validate.yaml +++ /dev/null @@ -1,12 +0,0 @@ -{{- if and .Values.ingress.enabled .Values.traefik.ingressRoute.enabled -}} -{{- fail "ingress and traefik.ingressRoute cannot both be enabled" -}} -{{- end -}} -{{- if and (eq .Values.database.dialect "sqlite") (or (gt (int .Values.replicaCount) 1) .Values.autoscaling.enabled) -}} -{{- fail "SQLite supports only one replica; use Postgres or MySQL before enabling replicas or autoscaling" -}} -{{- end -}} -{{- if and (not .Values.guacd.enabled) (not .Values.guacd.host) -}} -{{- fail "guacd.host is required when the bundled guacd sidecar is disabled" -}} -{{- end -}} -{{- if and .Values.database.existingSecret.name .Values.secrets.create .Values.secrets.data.DATABASE_URL -}} -{{- fail "DATABASE_URL must come from either database.existingSecret or secrets.data, not both" -}} -{{- end -}} diff --git a/charts/termix/values-gitops-example.yaml b/charts/termix/values-gitops-example.yaml deleted file mode 100644 index 9f3d769ba..000000000 --- a/charts/termix/values-gitops-example.yaml +++ /dev/null @@ -1,28 +0,0 @@ -image: - repository: ghcr.io/termix-ssh/termix - tag: "2.7.0" - -ingress: - enabled: true - className: nginx - hosts: - - host: termix.example.com - paths: - - path: / - pathType: Prefix - tls: - - secretName: termix-tls - hosts: - - termix.example.com - -persistence: - enabled: true - size: 20Gi - -secrets: - create: false - -database: - dialect: sqlite - -extraEnvFrom: [] diff --git a/charts/termix/values-traefik.yaml b/charts/termix/values-traefik.yaml deleted file mode 100644 index d4b799428..000000000 --- a/charts/termix/values-traefik.yaml +++ /dev/null @@ -1,32 +0,0 @@ -ingress: - enabled: false - -traefik: - ingressRoute: - enabled: true - entryPoints: - - websecure - host: termix.example.com - pathPrefix: / - tls: - enabled: true - certResolver: letsencrypt - -persistence: - enabled: true - size: 20Gi - -resources: - requests: - cpu: 250m - memory: 512Mi - limits: - memory: 2Gi - -guacd: - resources: - requests: - cpu: 100m - memory: 128Mi - limits: - memory: 512Mi diff --git a/charts/termix/values.yaml b/charts/termix/values.yaml deleted file mode 100644 index 55cf77613..000000000 --- a/charts/termix/values.yaml +++ /dev/null @@ -1,151 +0,0 @@ -replicaCount: 1 - -image: - repository: ghcr.io/termix-ssh/termix - pullPolicy: IfNotPresent - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - create: true - automount: false - annotations: {} - name: "" - -podAnnotations: {} -podLabels: {} - -podSecurityContext: - fsGroup: 1000 - fsGroupChangePolicy: OnRootMismatch - -securityContext: {} - -service: - type: ClusterIP - port: 8080 - annotations: {} - -ingress: - enabled: false - className: "" - annotations: {} - hosts: - - host: termix.example.com - paths: - - path: / - pathType: Prefix - tls: [] - -traefik: - ingressRoute: - enabled: false - entryPoints: - - websecure - host: termix.example.com - pathPrefix: / - tls: - enabled: true - secretName: "" - certResolver: "" - middlewares: [] - annotations: {} - -resources: {} - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 3 - targetCPUUtilizationPercentage: 80 - -persistence: - enabled: true - accessModes: - - ReadWriteOnce - size: 10Gi - storageClass: "" - annotations: {} - existingClaim: "" - -env: - PORT: "8080" - DATA_DIR: /app/data - NODE_ENV: production - TERMIX_REQUIRE_EXTERNAL_SECRETS: "false" - GUACD_RECORDING_PATH: /termix-data/session_recordings/guacamole - GUACD_RECORDING_BACKEND_PATH: /app/data/session_recordings/guacamole - -extraEnv: [] -extraEnvFrom: [] - -secrets: - create: false - name: "" - data: - JWT_SECRET: "" - DATABASE_KEY: "" - ENCRYPTION_KEY: "" - INTERNAL_AUTH_TOKEN: "" - DATABASE_URL: "" - GUACAMOLE_ENCRYPTION_KEY: "" - -database: - dialect: sqlite - existingSecret: - name: "" - urlKey: DATABASE_URL - -guacd: - enabled: true - host: "" - image: - repository: guacamole/guacd - tag: 1.6.0 - pullPolicy: IfNotPresent - resources: {} - podAnnotations: {} - podLabels: {} - securityContext: - runAsNonRoot: true - runAsUser: 1000 - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - service: - port: 4822 - annotations: {} - -nodeSelector: {} -tolerations: [] -affinity: {} - -strategy: - type: Recreate - -probes: - liveness: - enabled: true - initialDelaySeconds: 60 - periodSeconds: 30 - timeoutSeconds: 10 - failureThreshold: 3 - readiness: - enabled: true - initialDelaySeconds: 15 - periodSeconds: 10 - timeoutSeconds: 5 - failureThreshold: 6 - -podDisruptionBudget: - enabled: false - minAvailable: 1 - -networkPolicy: - enabled: false - ingress: [] - egress: [] diff --git a/docs/readme/README-CN.md b/docs/readme/README-CN.md index 9fe873303..cd9590060 100644 --- a/docs/readme/README-CN.md +++ b/docs/readme/README-CN.md @@ -304,9 +304,6 @@ Termix 是一个免费、开源、自托管的服务器管理平台。它把 SSH 访问 [Termix 文档](https://docs.termix.site/install) 查看所有平台的完整安装说明。 -要部署到 Kubernetes?Helm chart 在 `charts/termix` 目录下,涵盖 Ingress、Traefik、Argo CD、GitHub Actions 和 GitLab CI 的完整搭建说明见 -[docs.termix.site/install/server/kubernetes](https://docs.termix.site/install/server/kubernetes)。 - Docker Compose 示例(如果你不打算使用远程桌面功能,可以省略 `guacd` 和相关网络配置): ```yaml diff --git a/docs/readme/README-DE.md b/docs/readme/README-DE.md index d00d66a0b..307be3ff7 100644 --- a/docs/readme/README-DE.md +++ b/docs/readme/README-DE.md @@ -304,10 +304,6 @@ Rund 30 Sprachen sind eingebaut, verwaltet über [Crowdin](https://docs.termix.s In der [Termix-Dokumentation](https://docs.termix.site/install) findest du die vollständigen Installationsanleitungen für alle Plattformen. -Willst du auf Kubernetes bereitstellen? Das Helm-Chart liegt in `charts/termix`, und die Einrichtung -für Ingress, Traefik, Argo CD, GitHub Actions und GitLab CI steht unter -[docs.termix.site/install/server/kubernetes](https://docs.termix.site/install/server/kubernetes). - Beispiel für eine Docker-Compose-Datei (`guacd` und das Netzwerk kannst du weglassen, wenn du keinen Remotedesktop brauchst): ```yaml diff --git a/docs/readme/README-ES.md b/docs/readme/README-ES.md index 97708d966..a47665d75 100644 --- a/docs/readme/README-ES.md +++ b/docs/readme/README-ES.md @@ -304,10 +304,6 @@ Unos 30 idiomas incluidos, gestionados a través de [Crowdin](https://docs.termi Visita la [documentación de Termix](https://docs.termix.site/install) para ver las instrucciones completas de instalación en todas las plataformas. -¿Vas a desplegar en Kubernetes? El chart de Helm está en `charts/termix`, y las instrucciones -de configuración para Ingress, Traefik, Argo CD, GitHub Actions y GitLab CI están en -[docs.termix.site/install/server/kubernetes](https://docs.termix.site/install/server/kubernetes). - Ejemplo de archivo Docker Compose (puedes quitar `guacd` y la red si no piensas usar el escritorio remoto): ```yaml diff --git a/docs/readme/README-FR.md b/docs/readme/README-FR.md index 9a1f7a087..82371c539 100644 --- a/docs/readme/README-FR.md +++ b/docs/readme/README-FR.md @@ -304,8 +304,6 @@ Une trentaine de langues intégrées, gérées via [Crowdin](https://docs.termix Consultez la [documentation Termix](https://docs.termix.site/install) pour les instructions d'installation complètes sur toutes les plateformes. -Vous déployez sur Kubernetes ? Le chart Helm se trouve dans `charts/termix`, et les instructions de configuration couvrant Ingress, Traefik, Argo CD, GitHub Actions et GitLab CI sont sur [docs.termix.site/install/server/kubernetes](https://docs.termix.site/install/server/kubernetes). - Exemple de fichier Docker Compose (vous pouvez retirer `guacd` et le réseau si vous ne comptez pas utiliser le bureau à distance) : ```yaml diff --git a/docs/readme/README-IT.md b/docs/readme/README-IT.md index f57e27814..7eab963d0 100644 --- a/docs/readme/README-IT.md +++ b/docs/readme/README-IT.md @@ -304,10 +304,6 @@ Circa 30 lingue incluse, gestite tramite [Crowdin](https://docs.termix.site/tran Vai alla [documentazione di Termix](https://docs.termix.site/install) per le istruzioni complete di installazione su tutte le piattaforme. -Vuoi installare su Kubernetes? Il chart Helm è in `charts/termix`, e le istruzioni di configurazione -per Ingress, Traefik, Argo CD, GitHub Actions e GitLab CI sono su -[docs.termix.site/install/server/kubernetes](https://docs.termix.site/install/server/kubernetes). - Esempio di file Docker Compose (puoi togliere `guacd` e la rete se non pensi di usare il desktop remoto): ```yaml diff --git a/docs/readme/README-JA.md b/docs/readme/README-JA.md index a36e744d8..610d9aa9d 100644 --- a/docs/readme/README-JA.md +++ b/docs/readme/README-JA.md @@ -304,10 +304,6 @@ Proxmox のインスタンスからそのままホストを取り込めます。 すべてのプラットフォーム向けの詳しいインストール手順は [Termix ドキュメント](https://docs.termix.site/install)をご覧ください。 -Kubernetes にデプロイしますか?Helm chart は `charts/termix` にあり、 -Ingress、Traefik、Argo CD、GitHub Actions、GitLab CI を扱うセットアップ手順は -[docs.termix.site/install/server/kubernetes](https://docs.termix.site/install/server/kubernetes) にあります。 - Docker Compose の例です(リモートデスクトップ機能を使わないなら `guacd` とネットワークの部分は省略できます): ```yaml diff --git a/docs/readme/README-KO.md b/docs/readme/README-KO.md index c0ddf5c8f..cee2f3ede 100644 --- a/docs/readme/README-KO.md +++ b/docs/readme/README-KO.md @@ -304,8 +304,6 @@ Proxmox 인스턴스에서 호스트를 바로 가져오고, 노드와 게스트 모든 플랫폼의 자세한 설치 방법은 [Termix 문서](https://docs.termix.site/install)를 참고하세요. -쿠버네티스에 배포하시나요? Helm 차트는 `charts/termix`에 있고, Ingress와 Traefik, Argo CD, GitHub Actions, GitLab CI를 다루는 설정 안내는 [docs.termix.site/install/server/kubernetes](https://docs.termix.site/install/server/kubernetes)에 있습니다. - Docker Compose 예시입니다(원격 데스크톱 기능을 쓰지 않는다면 `guacd`와 네트워크 부분은 빼도 됩니다): ```yaml