diff --git a/template/next-terminal.yaml b/template/next-terminal.yaml new file mode 100644 index 00000000..813b25f9 --- /dev/null +++ b/template/next-terminal.yaml @@ -0,0 +1,231 @@ +apiVersion: app.sealos.io/v1 +kind: Template +metadata: + name: next-terminal +spec: + title: 'next-terminal' + url: 'https://github.com/dushixiang/next-terminal' + gitRepo: 'https://github.com/dushixiang/next-terminal' + author: '孤城落寞' + description: 'Next Terminal是一个简单好用安全的开源交互审计系统,支持RDP、SSH、VNC、Telnet、Kubernetes协议。' + readme: 'https://raw.githubusercontent.com/dushixiang/next-terminal/master/README.md' + icon: 'https://raw.githubusercontent.com/dushixiang/next-terminal/master/web/public/favicon.ico' + templateType: inline + defaults: + app_host: + # number or string. + type: string + value: ${{ random(8) }} + app_name: + type: string + value: next-terminal-${{ random(8) }} + inputs: + +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: ${{ defaults.app_name }} + annotations: + originImageName: dushixiang/next-terminal:latest + deploy.cloud.sealos.io/minReplicas: '1' + deploy.cloud.sealos.io/maxReplicas: '1' + labels: + cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }} + app: ${{ defaults.app_name }} +spec: + replicas: 1 + revisionHistoryLimit: 1 + minReadySeconds: 10 + serviceName: ${{ defaults.app_name }} + selector: + matchLabels: + app: ${{ defaults.app_name }} + template: + metadata: + labels: + app: ${{ defaults.app_name }} + spec: + terminationGracePeriodSeconds: 10 + containers: + - name: ${{ defaults.app_name }} + image: dushixiang/next-terminal:latest + env: + - name: DB + value: sqlite + - name: GUACD_HOSTNAME + value: guacd-${{ defaults.app_host }}.ns-admin.svc.cluster.local + - name: GUACD_PORT + value: 4822 + resources: + requests: + cpu: 50m + memory: 51Mi + limits: + cpu: 500m + memory: 512Mi + command: [] + args: [] + ports: + - containerPort: 8088 + imagePullPolicy: IfNotPresent + volumeMounts: + - name: vn-data + mountPath: /usr/local/next-terminal/data + volumes: [] + volumeClaimTemplates: + - metadata: + annotations: + path: /usr/local/next-terminal/data + value: '5' + name: vn-data + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 5Gi + +--- +apiVersion: v1 +kind: Service +metadata: + name: ${{ defaults.app_name }} + labels: + cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }} +spec: + ports: + - port: 8088 + selector: + app: ${{ defaults.app_name }} + +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ${{ defaults.app_name }} + labels: + cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }} + cloud.sealos.io/app-deploy-manager-domain: ${{ defaults.app_host }} + annotations: + kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/proxy-body-size: 32m + nginx.ingress.kubernetes.io/server-snippet: | + client_header_buffer_size 64k; + large_client_header_buffers 4 128k; + nginx.ingress.kubernetes.io/ssl-redirect: 'false' + nginx.ingress.kubernetes.io/backend-protocol: HTTP + nginx.ingress.kubernetes.io/rewrite-target: /$2 + nginx.ingress.kubernetes.io/client-body-buffer-size: 64k + nginx.ingress.kubernetes.io/proxy-buffer-size: 64k + nginx.ingress.kubernetes.io/configuration-snippet: | + if ($request_uri ~* \.(js|css|gif|jpe?g|png)) { + expires 30d; + add_header Cache-Control "public"; + } +spec: + rules: + - host: ${{ defaults.app_host }}.${{ SEALOS_CLOUD_DOMAIN }} + http: + paths: + - pathType: Prefix + path: /()(.*) + backend: + service: + name: ${{ defaults.app_name }} + port: + number: 8088 + tls: + - hosts: + - ${{ defaults.app_host }}.${{ SEALOS_CLOUD_DOMAIN }} + secretName: ${{ SEALOS_CERT_SECRET_NAME }} + + +--- +apiVersion: app.sealos.io/v1 +kind: App +metadata: + name: ${{ defaults.app_name }} + labels: + cloud.sealos.io/app-deploy-manager: ${{ defaults.app_name }} +spec: + data: + url: https://${{ defaults.app_host }}.${{ SEALOS_CLOUD_DOMAIN }} + displayType: normal + icon: "https://${{ defaults.app_host }}.${{ SEALOS_CLOUD_DOMAIN }}/favicon.ico" + menuData: + nameColor: text-black + name: ${{ defaults.app_name }} + type: iframe + +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: guacd-${{ defaults.app_host }} + annotations: + originImageName: dushixiang/guacd:latest + deploy.cloud.sealos.io/minReplicas: '1' + deploy.cloud.sealos.io/maxReplicas: '1' + labels: + cloud.sealos.io/app-deploy-manager: guacd-${{ defaults.app_host }} + app: guacd-${{ defaults.app_host }} +spec: + replicas: 1 + revisionHistoryLimit: 1 + minReadySeconds: 10 + serviceName: guacd-${{ defaults.app_host }} + selector: + matchLabels: + app: guacd-${{ defaults.app_host }} + template: + metadata: + labels: + app: guacd-${{ defaults.app_host }} + spec: + terminationGracePeriodSeconds: 10 + containers: + - name: guacd-${{ defaults.app_host }} + image: dushixiang/guacd:latest + env: [] + resources: + requests: + cpu: 50m + memory: 51Mi + limits: + cpu: 500m + memory: 512Mi + command: [] + args: [] + ports: + - containerPort: 4822 + imagePullPolicy: Always + volumeMounts: + - name: vn-data + mountPath: /usr/local/next-terminal/data + volumes: [] + volumeClaimTemplates: + - metadata: + annotations: + path: /usr/local/next-terminal/data + value: '1' + name: vn-data + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + +--- +apiVersion: v1 +kind: Service +metadata: + name: guacd-${{ defaults.app_host }} + labels: + cloud.sealos.io/app-deploy-manager: guacd-${{ defaults.app_host }} +spec: + ports: + - port: 4822 + selector: + app: guacd-${{ defaults.app_host }}