# This didn't work but can be kept so I remember to deploy # ====================================================== # POSTIZ FULL STACK (KUBERNETES - SINGLE FILE) # ====================================================== # ------------------------- # POSTGRES (APP DB) # ------------------------- --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postiz-db-pvc spec: accessModes: - ReadWriteOnce storageClassName: microk8s-hostpath resources: requests: storage: 2Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: postiz-postgres spec: replicas: 1 selector: matchLabels: app: postiz-postgres template: metadata: labels: app: postiz-postgres spec: containers: - name: postgres image: postgres:17-alpine env: - name: POSTGRES_USER value: postiz-user - name: POSTGRES_PASSWORD value: postiz-password - name: POSTGRES_DB value: postiz-db-local volumeMounts: - mountPath: /var/lib/postgresql/data name: postgres-storage volumes: - name: postgres-storage persistentVolumeClaim: claimName: postiz-db-pvc --- apiVersion: v1 kind: Service metadata: name: postiz-postgres spec: selector: app: postiz-postgres ports: - port: 5432 # ------------------------- # REDIS # ------------------------- --- apiVersion: apps/v1 kind: Deployment metadata: name: postiz-redis spec: replicas: 1 selector: matchLabels: app: postiz-redis template: metadata: labels: app: postiz-redis spec: containers: - name: redis image: redis:7.2 ports: - containerPort: 6379 --- apiVersion: v1 kind: Service metadata: name: postiz-redis spec: selector: app: postiz-redis ports: - port: 6379 # ------------------------- # TEMPORAL POSTGRES # ------------------------- --- apiVersion: apps/v1 kind: Deployment metadata: name: temporal-postgres spec: replicas: 1 selector: matchLabels: app: temporal-postgres template: metadata: labels: app: temporal-postgres spec: containers: - name: postgres image: postgres:16 env: - name: POSTGRES_USER value: temporal - name: POSTGRES_PASSWORD value: temporal --- apiVersion: v1 kind: Service metadata: name: temporal-postgres spec: selector: app: temporal-postgres ports: - port: 5432 # ------------------------- # ELASTICSEARCH # ------------------------- --- apiVersion: apps/v1 kind: Deployment metadata: name: temporal-elasticsearch spec: replicas: 1 selector: matchLabels: app: temporal-elasticsearch template: metadata: labels: app: temporal-elasticsearch spec: containers: - name: elasticsearch image: elasticsearch:7.17.27 env: - name: discovery.type value: single-node - name: ES_JAVA_OPTS value: "-Xms256m -Xmx256m" ports: - containerPort: 9200 --- apiVersion: v1 kind: Service metadata: name: temporal-elasticsearch spec: selector: app: temporal-elasticsearch ports: - port: 9200 # ------------------------- # TEMPORAL # ------------------------- --- apiVersion: apps/v1 kind: Deployment metadata: name: temporal spec: replicas: 1 selector: matchLabels: app: temporal template: metadata: labels: app: temporal spec: containers: - name: temporal image: temporalio/auto-setup:1.28.1 env: - name: DB value: postgres12 - name: POSTGRES_USER value: temporal - name: POSTGRES_PWD value: temporal - name: POSTGRES_SEEDS value: temporal-postgres - name: ENABLE_ES value: "true" - name: ES_SEEDS value: temporal-elasticsearch ports: - containerPort: 7233 --- apiVersion: v1 kind: Service metadata: name: temporal spec: selector: app: temporal ports: - port: 7233 # ------------------------- # POSTIZ APP # ------------------------- --- --- apiVersion: apps/v1 kind: Deployment metadata: name: postiz spec: replicas: 1 selector: matchLabels: app: postiz template: metadata: labels: app: postiz spec: containers: - name: postiz image: ghcr.io/gitroomhq/postiz-app:latest env: - name: MAIN_URL value: https://postiz.juntekim.com - name: FRONTEND_URL value: https://postiz.juntekim.com - name: NEXT_PUBLIC_BACKEND_URL value: https://postiz.juntekim.com/api - name: BACKEND_INTERNAL_URL value: http://postiz:5000 - name: JWT_SECRET value: super-long-random-string-here - name: DATABASE_URL value: postgresql://postiz-user:postiz-password@postiz-postgres:5432/postiz-db-local - name: REDIS_URL value: redis://postiz-redis:6379 - name: TEMPORAL_ADDRESS value: temporal:7233 - name: IS_GENERAL value: "true" - name: DISABLE_REGISTRATION value: "false" - name: RUN_CRON value: "true" - name: API_LIMIT value: "30" - name: STORAGE_PROVIDER value: local - name: UPLOAD_DIRECTORY value: /uploads - name: NEXT_PUBLIC_UPLOAD_DIRECTORY value: /uploads ports: - containerPort: 5000 volumeMounts: - name: postiz-uploads mountPath: /uploads volumes: - name: postiz-uploads emptyDir: {} --- apiVersion: v1 kind: Service metadata: name: postiz spec: selector: app: postiz ports: - port: 5000 targetPort: 5000 # ------------------------- # TRAEFIK INGRESS # ------------------------- --- apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: postiz-ingress spec: entryPoints: - websecure routes: - match: Host(`postiz.juntekim.com`) kind: Rule services: - name: postiz port: 5000 tls: certResolver: myresolver domains: - main: postiz.juntekim.com