apiVersion: apps/v1 kind: Deployment metadata: name: farmos namespace: farm spec: replicas: 1 selector: matchLabels: app: farmos template: metadata: labels: app: farmos spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - vmi3045103.contaboserver.net containers: - name: farmos image: farmos/farmos:3.x env: - name: FARMOS_DB_TYPE value: "pgsql" - name: FARMOS_DB_HOST value: "postgis" - name: FARMOS_DB_PORT value: "5432" - name: FARMOS_DB_NAME valueFrom: secretKeyRef: name: farm-db-credentials key: POSTGRES_DB - name: FARMOS_DB_USER valueFrom: secretKeyRef: name: farm-db-credentials key: POSTGRES_USER - name: FARMOS_DB_PASS valueFrom: secretKeyRef: name: farm-db-credentials key: POSTGRES_PASSWORD resources: requests: memory: "512Mi" cpu: "200m" limits: memory: "1Gi" lifecycle: postStart: exec: command: ["sh", "-c", "if [ ! -f /opt/drupal/web/sites/default/settings.local.php ]; then cat < /opt/drupal/web/sites/default/settings.local.php\n getenv('FARMOS_DB_NAME'),\n 'username' => getenv('FARMOS_DB_USER'),\n 'password' => getenv('FARMOS_DB_PASS'),\n 'prefix' => '',\n 'host' => getenv('FARMOS_DB_HOST'),\n 'port' => getenv('FARMOS_DB_PORT'),\n 'namespace' => 'Drupal\\\\Core\\\\Database\\\\Driver\\\\pgsql',\n 'driver' => 'pgsql',\n];\nEOF\nfi && if ! grep -q \"settings.local.php\" /opt/drupal/web/sites/default/settings.php; then echo \"\nif (file_exists(\\$app_root . '/' . \\$site_path . '/settings.local.php')) {\n include \\$app_root . '/' . \\$site_path . '/settings.local.php';\n}\" >> /opt/drupal/web/sites/default/settings.php; fi"] volumeMounts: - name: sites mountPath: /opt/drupal/web/sites volumes: - name: sites persistentVolumeClaim: claimName: farmos-sites-pvc --- apiVersion: v1 kind: Service metadata: name: farmos namespace: farm spec: ports: - port: 80 targetPort: 80 selector: app: farmos --- apiVersion: apps/v1 kind: Deployment metadata: name: nodered namespace: farm spec: replicas: 1 selector: matchLabels: app: nodered template: metadata: labels: app: nodered spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - vmi3045103.contaboserver.net containers: - name: nodered image: nodered/node-red:latest ports: - containerPort: 1880 resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "512Mi" volumeMounts: - name: data mountPath: /data volumes: - name: data persistentVolumeClaim: claimName: nodered-data-pvc --- apiVersion: v1 kind: Service metadata: name: nodered namespace: farm spec: ports: - port: 1880 selector: app: nodered --- apiVersion: apps/v1 kind: Deployment metadata: name: grafana namespace: farm spec: replicas: 1 selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - vmi3045103.contaboserver.net containers: - name: grafana image: grafana/grafana:latest env: - name: GF_SECURITY_ALLOW_EMBEDDING value: "true" ports: - containerPort: 3000 resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "512Mi" volumeMounts: - name: data mountPath: /var/lib/grafana volumes: - name: data persistentVolumeClaim: claimName: grafana-data-pvc --- apiVersion: v1 kind: Service metadata: name: grafana namespace: farm spec: ports: - port: 3000 selector: app: grafana