Prepare the Minecraft installation (#1)
Reviewed-on: https://git.badhouseplants.net/badhouseplants/minecraft-helmfile/pulls/1
This commit is contained in:
		
							
								
								
									
										5
									
								
								.sops.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.sops.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
creation_rules:
 | 
			
		||||
  - path_regex: secrets.yaml
 | 
			
		||||
    key_groups:
 | 
			
		||||
      - age:
 | 
			
		||||
          - age1vy36vn6w3f07rxm40tsy0u4gvqtjqznrs69ue4fkgxd06n4jl3esq8l60v
 | 
			
		||||
							
								
								
									
										31
									
								
								.woodpecker/cdh.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								.woodpecker/cdh.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
# ----------------------------------------------
 | 
			
		||||
# -- Check da helm pipeline
 | 
			
		||||
# ----------------------------------------------
 | 
			
		||||
when:
 | 
			
		||||
  - event: cron
 | 
			
		||||
    cron: nightly
 | 
			
		||||
steps:
 | 
			
		||||
  check badhouseplants:
 | 
			
		||||
    image: ghcr.io/allanger/check-da-helm-helmfile-secrets:stable
 | 
			
		||||
    secrets:
 | 
			
		||||
      - sops_age_key
 | 
			
		||||
    environment:
 | 
			
		||||
      RUST_LOG: info
 | 
			
		||||
    commands:
 | 
			
		||||
      - cdh --kind helmfile -p $CI_WORKSPACE/helmfile.yaml -o
 | 
			
		||||
 | 
			
		||||
  notification:
 | 
			
		||||
    image: deblan/woodpecker-email
 | 
			
		||||
    settings:
 | 
			
		||||
      dsn:
 | 
			
		||||
        from_secret: smtp_dsn
 | 
			
		||||
      from:
 | 
			
		||||
        address: woody@badhouseplants.net
 | 
			
		||||
        name: Woody Woodpecker
 | 
			
		||||
      recipients:
 | 
			
		||||
        - allanger@badhouseplants.net
 | 
			
		||||
      subject: CDH result
 | 
			
		||||
      target: main
 | 
			
		||||
      attachment: result.html
 | 
			
		||||
    when:
 | 
			
		||||
      - status: [success, failure]
 | 
			
		||||
							
								
								
									
										27
									
								
								.woodpecker/helmfile.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								.woodpecker/helmfile.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
when:
 | 
			
		||||
  event: push
 | 
			
		||||
 | 
			
		||||
steps:
 | 
			
		||||
  diff:
 | 
			
		||||
    image: ghcr.io/helmfile/helmfile:canary
 | 
			
		||||
    secrets: [sops_age_key, kubeconfig_content]
 | 
			
		||||
    when:
 | 
			
		||||
      - branch:
 | 
			
		||||
          exclude:
 | 
			
		||||
            - main
 | 
			
		||||
    commands:
 | 
			
		||||
      - mkdir $HOME/.kube
 | 
			
		||||
      - echo "$KUBECONFIG_CONTENT" > $HOME/.kube/config && chmod 0600 $HOME/.kube/config
 | 
			
		||||
      - helmfile diff --suppress-secrets
 | 
			
		||||
 | 
			
		||||
  apply:
 | 
			
		||||
    image: ghcr.io/helmfile/helmfile:canary
 | 
			
		||||
    secrets: [sops_age_key, kubeconfig_content]
 | 
			
		||||
    when:
 | 
			
		||||
      - branch:
 | 
			
		||||
          include:
 | 
			
		||||
            - main
 | 
			
		||||
    commands:
 | 
			
		||||
      - mkdir $HOME/.kube
 | 
			
		||||
      - echo "$KUBECONFIG_CONTENT" > $HOME/.kube/config && chmod 0600 $HOME/.kube/config
 | 
			
		||||
      - helmfile apply
 | 
			
		||||
							
								
								
									
										3
									
								
								environments.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								environments.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
environments:
 | 
			
		||||
  default:
 | 
			
		||||
    kubeContext: badhouseplants
 | 
			
		||||
							
								
								
									
										30
									
								
								helmfile.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								helmfile.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
---
 | 
			
		||||
bases:
 | 
			
		||||
  - environments.yaml
 | 
			
		||||
 | 
			
		||||
templates:
 | 
			
		||||
  ext-istio-resource:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      - chart: bedag/raw
 | 
			
		||||
        version: 2.0.0
 | 
			
		||||
        alias: istio
 | 
			
		||||
    values:
 | 
			
		||||
      - '{{ requiredEnv "PWD" }}/istio.yaml'
 | 
			
		||||
  
 | 
			
		||||
repositories:
 | 
			
		||||
  - name: bedag
 | 
			
		||||
    url: https://bedag.github.io/helm-charts/
 | 
			
		||||
  - name: minecraft
 | 
			
		||||
    url: https://itzg.github.io/minecraft-server-charts/
 | 
			
		||||
 | 
			
		||||
releases:
 | 
			
		||||
  - name: minecraft
 | 
			
		||||
    chart: minecraft/minecraft
 | 
			
		||||
    namespace: minecraft-application
 | 
			
		||||
    version: 4.15.0
 | 
			
		||||
    values:
 | 
			
		||||
      - ./values.yaml
 | 
			
		||||
    secrets:
 | 
			
		||||
      - ./secrets.yaml
 | 
			
		||||
    inherit:
 | 
			
		||||
      - template: ext-istio-resource
 | 
			
		||||
							
								
								
									
										36
									
								
								istio.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								istio.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
---
 | 
			
		||||
istio:
 | 
			
		||||
  templates:
 | 
			
		||||
    - |
 | 
			
		||||
        {{ range .Values.istio }}
 | 
			
		||||
        ---
 | 
			
		||||
        apiVersion: networking.istio.io/v1beta1
 | 
			
		||||
        kind: VirtualService
 | 
			
		||||
        metadata:
 | 
			
		||||
          name: {{ .name }}
 | 
			
		||||
        spec:
 | 
			
		||||
          gateways:
 | 
			
		||||
          - "{{ .gateway }}"
 | 
			
		||||
          hosts:
 | 
			
		||||
          -  {{ .hostname | quote }}
 | 
			
		||||
          {{- if eq  .kind "http" }}
 | 
			
		||||
          http:
 | 
			
		||||
          - match:
 | 
			
		||||
            - uri:
 | 
			
		||||
                prefix: /
 | 
			
		||||
            route:
 | 
			
		||||
            - destination:
 | 
			
		||||
                host: {{ .service }}
 | 
			
		||||
                port:
 | 
			
		||||
                  number: {{ .port }}
 | 
			
		||||
          {{- else if eq  .kind "tcp" }}
 | 
			
		||||
          tcp:
 | 
			
		||||
          - match:
 | 
			
		||||
            - port: {{ .port_match }}
 | 
			
		||||
            route:
 | 
			
		||||
            - destination:
 | 
			
		||||
                host: {{ .service }}
 | 
			
		||||
                port:
 | 
			
		||||
                  number: {{ .port }}
 | 
			
		||||
          {{ end }}
 | 
			
		||||
        {{ end }}
 | 
			
		||||
							
								
								
									
										28
									
								
								secrets.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								secrets.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
minecraftServer:
 | 
			
		||||
    rcon:
 | 
			
		||||
        password: ENC[AES256_GCM,data:d7rEX5rOJNXikocvJBSoCnA1aTx2jKfV7A==,iv:P5wsHV2XAzL6Ny1TwgsMEp+IbFFY2cObdfV+q//X01c=,tag:x+FOgJ8OvGcs8C0cEicejQ==,type:str]
 | 
			
		||||
mcbackup:
 | 
			
		||||
    resticEnvs:
 | 
			
		||||
        RESTIC_PASSWORD: ENC[AES256_GCM,data:AOYlclTvz+DVlYAPxG1X+V/5KfQLTwzImbcxlU01,iv:KolGzA//wWOolocX3T5zxWJ0jfWkWg+PrGbME+D2iFU=,tag:uDuU+sdcvVyjwcxh/UEOrg==,type:str]
 | 
			
		||||
        AWS_SECRET_ACCESS_KEY: ENC[AES256_GCM,data:8IBX/nwoqyR/xhr3umY=,iv:4FIGY9dryZ+G48vevaAdZAbU8Dlj+mdEtnytTuiP9Aw=,tag:b8vwsOD+WhclZhO/nxMmug==,type:str]
 | 
			
		||||
        AWS_ACCESS_KEY_ID: ENC[AES256_GCM,data:Cvh5NCtE,iv:w9FeowyjjPqNzz6MwIUytVQbcRIdn0qcSm0tnjpZQiQ=,tag:z2bV6d6XLJWgOU6Nfd9sBQ==,type:str]
 | 
			
		||||
sops:
 | 
			
		||||
    kms: []
 | 
			
		||||
    gcp_kms: []
 | 
			
		||||
    azure_kv: []
 | 
			
		||||
    hc_vault: []
 | 
			
		||||
    age:
 | 
			
		||||
        - recipient: age1vy36vn6w3f07rxm40tsy0u4gvqtjqznrs69ue4fkgxd06n4jl3esq8l60v
 | 
			
		||||
          enc: |
 | 
			
		||||
            -----BEGIN AGE ENCRYPTED FILE-----
 | 
			
		||||
            YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFZmxLUDNRTUoxS0tjWmRW
 | 
			
		||||
            c1ZuZFRqZVBVbjQ3UlhDQnZhb3M4R3ZPVVRjCi9BQkFVT2l2c1MrQzI3MGo5YUQ2
 | 
			
		||||
            Ti9jbHZUeVlGYWsycllWT3EyR2U4cVEKLS0tIGJBZ2IvakpHYzkrMXBqWFlSK1Fs
 | 
			
		||||
            bkZBbXlpNC9uVGEwNDZ3WllaT01kdTQKYac1Tjq7EwfSNq1I8dyxZGuJ8Zkk0qTJ
 | 
			
		||||
            zI/n40s54Y6rv4u5qTkIvW6HLp1NRm5jofpmq53Ss/yvsgwyWMmMyA==
 | 
			
		||||
            -----END AGE ENCRYPTED FILE-----
 | 
			
		||||
    lastmodified: "2024-02-20T23:30:18Z"
 | 
			
		||||
    mac: ENC[AES256_GCM,data:u3ngPkQ5ZJHLUbFzCg/mhG8k4V9w0N4UzxeV2gOENJAC1hQnv6ZzB9PSWvqRlgu6TiBCNg1RC8AecxX2p7/9L2HyeQpfxj3J/oY0tyXlWdUJ9uVMG9b7F0jdP5a2rRoQWJ1YhI4ThZDVaittNy/jINlfNrTwWfIehVAd+CdcOp4=,iv:YymBTrvWAGvtFYu60oZQw0L3kgv1cnUy0MIV0jsFs6s=,tag:ULfzTGZq+z49FC9up6qm1g==,type:str]
 | 
			
		||||
    pgp: []
 | 
			
		||||
    unencrypted_suffix: _unencrypted
 | 
			
		||||
    version: 3.8.1
 | 
			
		||||
							
								
								
									
										180
									
								
								values.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								values.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,180 @@
 | 
			
		||||
---
 | 
			
		||||
# --------------------------------------------------
 | 
			
		||||
# -- Extensions values
 | 
			
		||||
# --------------------------------------------------
 | 
			
		||||
service-account:
 | 
			
		||||
  enabled: true
 | 
			
		||||
  resources:
 | 
			
		||||
    - name: minecraft-exporter
 | 
			
		||||
      label:
 | 
			
		||||
        app: minecraft-minecraft-metrics
 | 
			
		||||
      endpoints:
 | 
			
		||||
        port: metrics
 | 
			
		||||
# ------------------------------------------
 | 
			
		||||
# -- Istio extenstion. Just because I'm
 | 
			
		||||
# --  not using ingress nginx
 | 
			
		||||
# ------------------------------------------
 | 
			
		||||
istio:
 | 
			
		||||
  enabled: true
 | 
			
		||||
  istio:
 | 
			
		||||
    - name: minecraft-tcp
 | 
			
		||||
      gateway: istio-system/badhouseplants-minecraft
 | 
			
		||||
      kind: tcp
 | 
			
		||||
      port_match: 25565
 | 
			
		||||
      hostname: "*"
 | 
			
		||||
      service: minecraft-minecraft
 | 
			
		||||
      port: 25565
 | 
			
		||||
# --------------------------------------------------
 | 
			
		||||
# -- Main values
 | 
			
		||||
# --------------------------------------------------
 | 
			
		||||
image:
 | 
			
		||||
  tag: java17-graalvm-ce
 | 
			
		||||
  pullPolicy: Always
 | 
			
		||||
 | 
			
		||||
resources:
 | 
			
		||||
  requests:
 | 
			
		||||
    memory: 3Gi
 | 
			
		||||
    cpu: 256m
 | 
			
		||||
  limits:
 | 
			
		||||
    memory: 3Gi
 | 
			
		||||
 | 
			
		||||
lifecycle:
 | 
			
		||||
  postStart:
 | 
			
		||||
    - bash
 | 
			
		||||
    - -c
 | 
			
		||||
    - for i in {1..100}; do mc-health && break || sleep 20; done && mc-send-to-console setpassword 11223345
 | 
			
		||||
 | 
			
		||||
readinessProbe:
 | 
			
		||||
  command:
 | 
			
		||||
    - mc-health
 | 
			
		||||
  periodSeconds: 20
 | 
			
		||||
  failureThreshold: 50
 | 
			
		||||
  timeoutSeconds: 10
 | 
			
		||||
livenessProbe:
 | 
			
		||||
  timeoutSeconds: 10
 | 
			
		||||
 | 
			
		||||
minecraftServer:
 | 
			
		||||
  overrideServerProperties: true
 | 
			
		||||
  eula: "TRUE"
 | 
			
		||||
  onlineMode: false
 | 
			
		||||
  difficulty: hard
 | 
			
		||||
  hardcore: true
 | 
			
		||||
  version: 1.20.1
 | 
			
		||||
  maxWorldSize: 90000
 | 
			
		||||
  type: "PAPER"
 | 
			
		||||
  paperDownloadUrl: https://api.papermc.io/v2/projects/paper/versions/1.20.1/builds/170/downloads/paper-1.20.1-170.jar
 | 
			
		||||
  gameMode: survival
 | 
			
		||||
  pvp: true
 | 
			
		||||
  rcon:
 | 
			
		||||
    enabled: true
 | 
			
		||||
    withGeneratedPassword: false
 | 
			
		||||
    port: 25575
 | 
			
		||||
    serviceType: ClusterIP
 | 
			
		||||
  extraPorts:
 | 
			
		||||
    - name: metrics
 | 
			
		||||
      containerPort: 9225
 | 
			
		||||
      protocol: TCP
 | 
			
		||||
      service:
 | 
			
		||||
        enabled: true
 | 
			
		||||
        embedded: false
 | 
			
		||||
        labels:
 | 
			
		||||
          exporter: minecraft
 | 
			
		||||
        type: ClusterIP
 | 
			
		||||
        port: 9925
 | 
			
		||||
      ingress:
 | 
			
		||||
        enabled: false
 | 
			
		||||
persistence:
 | 
			
		||||
  dataDir:
 | 
			
		||||
    enabled: true
 | 
			
		||||
    Size: 15Gi
 | 
			
		||||
mcbackup:
 | 
			
		||||
  enabled: false
 | 
			
		||||
  backupInterval: 2h
 | 
			
		||||
  pauseIfNoPlayers: "false"
 | 
			
		||||
  pruneBackupsDays: 2
 | 
			
		||||
  rconRetries: 5
 | 
			
		||||
  rconRetryInterval: 10s
 | 
			
		||||
  excludes: "*.jar,cache,logs"
 | 
			
		||||
  backupMethod: restic
 | 
			
		||||
  resticRepository: s3:https://s3.e.badhouseplants.net:443/restic/minecraft
 | 
			
		||||
  resticAdditionalTags: "mc_backups"
 | 
			
		||||
  pruneResticRetention: "--keep-last 12 --keep-daily 1 --keep-weekly 2 --keep-monthly 2 --keep-yearly 2"
 | 
			
		||||
  resources:
 | 
			
		||||
    requests:
 | 
			
		||||
      memory: 512Mi
 | 
			
		||||
      cpu: 100m
 | 
			
		||||
  persistence:
 | 
			
		||||
    backupDir:
 | 
			
		||||
      enabled: false
 | 
			
		||||
# ---------------------------------------------
 | 
			
		||||
# -- Install Plugins
 | 
			
		||||
# ---------------------------------------------
 | 
			
		||||
initContainers:
 | 
			
		||||
  - name: 0-install-prometheus-exporter
 | 
			
		||||
    image: alpine/curl
 | 
			
		||||
    command:
 | 
			
		||||
      - curl
 | 
			
		||||
      - -L
 | 
			
		||||
      - "https://github.com/sladkoff/minecraft-prometheus-exporter/releases/download/v2.5.0/minecraft-prometheus-exporter-2.5.0.jar"
 | 
			
		||||
      - -o
 | 
			
		||||
      - /data/plugins/prometheus-exporter.jar
 | 
			
		||||
    volumeMounts:
 | 
			
		||||
      - name: plugins
 | 
			
		||||
        mountPath: /data/plugins
 | 
			
		||||
        readOnly: false
 | 
			
		||||
  - name: 0-install-password-plugin
 | 
			
		||||
    image: alpine/curl
 | 
			
		||||
    command:
 | 
			
		||||
      - curl
 | 
			
		||||
      - -L
 | 
			
		||||
      - "https://github.com/timbru31/PasswordProtect/releases/download/PasswordProtect-3.1.0/PasswordProtect.jar"
 | 
			
		||||
      - -o
 | 
			
		||||
      - /data/plugins/PasswordProtect.jar
 | 
			
		||||
    volumeMounts:
 | 
			
		||||
      - name: plugins
 | 
			
		||||
        mountPath: /data/plugins
 | 
			
		||||
        readOnly: false
 | 
			
		||||
  - name: 0-install-gravity-control-plugin
 | 
			
		||||
    image: alpine/curl
 | 
			
		||||
    command:
 | 
			
		||||
      - curl
 | 
			
		||||
      - -L
 | 
			
		||||
      - https://github.com/e-im/GravityControl/releases/download/v1.3.0/GravityControl-1.3.0.jar
 | 
			
		||||
      - -o
 | 
			
		||||
      - /data/plugins/GravityControl-1.3.0.jar
 | 
			
		||||
    volumeMounts:
 | 
			
		||||
      - name: plugins
 | 
			
		||||
        mountPath: /data/plugins
 | 
			
		||||
        readOnly: false
 | 
			
		||||
  - name: 0-install-fast-minecart-plugin
 | 
			
		||||
    image: alpine/curl
 | 
			
		||||
    command:
 | 
			
		||||
      - curl
 | 
			
		||||
      - -L
 | 
			
		||||
      - https://github.com/certainly1182/FastMinecarts/releases/download/v1.0.1/FastMinecarts.jar
 | 
			
		||||
      - -o
 | 
			
		||||
      - /data/plugins/FastMinecarts.jar
 | 
			
		||||
    volumeMounts:
 | 
			
		||||
      - name: plugins
 | 
			
		||||
        mountPath: /data/plugins
 | 
			
		||||
  - name: 1-add-plugins-to-minecraft
 | 
			
		||||
    image: alpine/curl
 | 
			
		||||
    command:
 | 
			
		||||
      - sh 
 | 
			
		||||
      - -c 
 | 
			
		||||
      - cp -r /in /out/plugins
 | 
			
		||||
    volumeMounts:
 | 
			
		||||
      - name: plugins
 | 
			
		||||
        mountPath: /in
 | 
			
		||||
        readOnly: false
 | 
			
		||||
      - name: datadir
 | 
			
		||||
        mountPath: /out
 | 
			
		||||
extraVolumes:
 | 
			
		||||
  - volumeMounts:
 | 
			
		||||
      - name: plugins
 | 
			
		||||
        mountPath: /data/plugins
 | 
			
		||||
        readOnly: false
 | 
			
		||||
    volumes:
 | 
			
		||||
      - name: plugins
 | 
			
		||||
        emptyDir:
 | 
			
		||||
          sizeLimit: 500Mi
 | 
			
		||||
		Reference in New Issue
	
	Block a user