diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index df8c48f..965d403 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,7 +4,9 @@ on: types: [published] jobs: + # Builds the Dockerfile and pushes it to dockerhub release: + name: Release - Docker image runs-on: ubuntu-latest steps: - name: Checkout @@ -34,3 +36,35 @@ jobs: with: push: true tags: ${{ steps.meta.outputs.tags }} + + # Generates a new release specifically for the helm chart, using the helm charts version + # Only generates a new release if the helm charts version has changed since the last release + # Will then update the gh-pages branch & helm repository + release-helm: + name: Release - Helm chart + runs-on: ubuntu-latest + permissions: + contents: write + pages: write + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Git - Configure + run: | + git config user.name "$GITHUB_ACTOR" + git config user.email "$GITHUB_ACTOR@users.noreply.github.com" + + # Will push updates to a index.yaml file in the gh-pages branch + - name: Helm - chart-releaser + uses: helm/chart-releaser-action@v1.6.0 + with: + charts_dir: charts + pages_branch: gh-pages + mark_as_latest: false + skip_existing: true + config: ./charts/cr.yaml + env: + CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.gitignore b/.gitignore index 5cddfe9..d65ba47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ palworld .idea -values*.yaml -!chart/values.yaml \ No newline at end of file +!charts/* +values*.yaml \ No newline at end of file diff --git a/README.md b/README.md index 05e5554..79ddaca 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ services: image: thijsvanloef/palworld-server-docker:latest restart: unless-stopped container_name: palworld-server + stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop ports: - 8211:8211/udp - 27015:27015/udp @@ -97,6 +98,10 @@ docker run -d \ ``` +> [!TIP] +> If you want to stop the container with a custom stop grace period then run: +> `docker stop --name palworld-server --time 30` + ### Kubernetes All files you will need to deploy this container to kubernetes are located in the [k8s folder](k8s/). @@ -105,7 +110,7 @@ Follow the steps in the [README.md here](k8s/readme.md) to deploy it. #### Using helm chart -Follow up the docs on the [README.md for the helm chart](./chart/README.md) to deploy. +Follow up the docs on the [README.md for the helm chart](./charts/palworld/README.md) to deploy. ### Environment variables @@ -297,12 +302,12 @@ BACKUP_ENABLED=true When the server starts, a `PalWorldSettings.ini` file will be created in the following location: `/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini` -Any changes made while the server is live will be overridden. - Please keep in mind that the ENV variables will always overwrite the changes made to `PalWorldSettings.ini`. > [!IMPORTANT] > Changes can only be made to `PalWorldSettings.ini` while the server is off. +> +> Any changes made while the server is live will be overwritten when the server stops. For a more detailed list of explanations of server settings go to: [shockbyte](https://shockbyte.com/billing/knowledgebase/1189/How-to-Configure-your-Palworld-server.html) diff --git a/charts/cr.yaml b/charts/cr.yaml new file mode 100644 index 0000000..e3130a8 --- /dev/null +++ b/charts/cr.yaml @@ -0,0 +1 @@ +release-name-template: "chart-{{ .Version }}" diff --git a/chart/Chart.yaml b/charts/palworld/Chart.yaml similarity index 78% rename from chart/Chart.yaml rename to charts/palworld/Chart.yaml index da1408a..50d9ee1 100644 --- a/chart/Chart.yaml +++ b/charts/palworld/Chart.yaml @@ -1,20 +1,20 @@ -apiVersion: v2 -name: palworld -version: 0.0.1 -description: This chart can provide an rAthena emulator installation on a Kubernetes cluster. -type: application -keywords: - - palworld - - server - - kubernetes - - helm -home: https://github.com/thijsvanloef/palworld-server-docker -sources: - - https://github.com/thijsvanloef/palworld-server-docker -maintainers: - - name: Filipe Souza - email: filipe.souza@mestre8d.com - url: https://github.com/Filipe-Souza -icon: https://cdn.akamai.steamstatic.com/steam/apps/1623730/header.jpg -appVersion: "latest" +apiVersion: v2 +name: palworld +version: 0.0.2 +description: This chart will provide a Palworld server installation on a kubernetes cluster. +type: application +keywords: + - palworld + - server + - kubernetes + - helm +home: https://github.com/thijsvanloef/palworld-server-docker +sources: + - https://github.com/thijsvanloef/palworld-server-docker +maintainers: + - name: Filipe Souza + email: filipe.souza@mestre8d.com + url: https://github.com/Filipe-Souza +icon: https://cdn.akamai.steamstatic.com/steam/apps/1623730/header.jpg +appVersion: "latest" deprecated: false \ No newline at end of file diff --git a/chart/README.md b/charts/palworld/README.md similarity index 100% rename from chart/README.md rename to charts/palworld/README.md diff --git a/chart/VALUES_SUMMARY.md b/charts/palworld/VALUES_SUMMARY.md similarity index 81% rename from chart/VALUES_SUMMARY.md rename to charts/palworld/VALUES_SUMMARY.md index 49d3222..7526ee6 100644 --- a/chart/VALUES_SUMMARY.md +++ b/charts/palworld/VALUES_SUMMARY.md @@ -1,10 +1,10 @@ # palworld -![Version: 0.0.0](https://img.shields.io/badge/Version-0.0.0-informational) +![Version: 0.0.2](https://img.shields.io/badge/Version-0.0.2-informational) ![Type: application](https://img.shields.io/badge/Type-application-informational) ![AppVersion: latest](https://img.shields.io/badge/AppVersion-latest-informational) -This chart can provide an rAthena emulator installation on a Kubernetes cluster. +This chart will provide a Palworld server installation on a kubernetes cluster. **Homepage:** @@ -32,11 +32,17 @@ This chart can provide an rAthena emulator installation on a Kubernetes cluster. | server.config.labels | object | `{}` | Additional labels to the resources | | server.config.max_players | int | `16` | The max number of players supported. | | server.config.multithreading | bool | `true` | Enables the multithreading, allowing the usage of up to 4 cores (needs citation) | +| server.config.public_ip | string | `""` | You can manually specify the global IP address of the network on which the server running. If not specified, it will be detected automatically. If it does not work well, try manual configuration. | +| server.config.public_port | string | `""` | You can manually specify the port number of the network on which the server running. If not specified, it will be detected automatically. If it does not work well, try manual configuration. | | server.config.query_port | string | `27015` | The query port of the game. | | server.config.rcon | dict | | Remote connection configuration. Allows the remote connection and management for the server. Those are directly connected with the container image, providing multiple environment variables to the scripts. | | server.config.rcon.enable | bool | `true` | Enables/disables the rcon port. | | server.config.rcon.password | string | `""` | If not provided, a random password will be generated and stored on the secret. | | server.config.rcon.port | string | `25575` | The port for rcon. If you change this, make sure to change the service.ports and server.ports accordingly. | +| server.config.server_description | string | `""` | Your server description to be shown in game | +| server.config.timezone | string | `"UTC"` | The timezone used for time stamping backup server. Use the IANA TZ format with Area/Location See the [list of TZ database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#Time_Zone_abbreviations) | +| server.config.update_on_boot | string | `true` | Update/Install the server when the container starts. THIS HAS TO BE ENABLED THE FIRST TIME YOU RUN THE CONTAINER | +| server.config.world_parameters | object | | Configures the game world settings. The key:values here should represent in game accepted values. Wrap all values with quotes here to avoid validation issues. | | server.image | dict | | Define the parameters for the server image container | | server.image.imagePullPolicy | string | `"IfNotPresent"` | Define the pull policy for the server image. | | server.image.name | string | `"thijsvanloef/palworld-server-docker"` | Name of the image, without the tag. | @@ -63,6 +69,7 @@ This chart can provide an rAthena emulator installation on a Kubernetes cluster. | server.storage.preventDelete | bool | `false` | Keeps helm from deleting the PVC. By default, helm does not delete pvcs. | | server.storage.size | string | `"12Gi"` | The size of the pvc storage. | | server.storage.storageClassName | string | `""` | The storage class name. | +| server.strategy | string | `"Recreate"` | Change the deployment strategy | ---------------------------------------------- Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0) diff --git a/chart/templates/configmaps.yaml b/charts/palworld/templates/configmaps.yaml similarity index 75% rename from chart/templates/configmaps.yaml rename to charts/palworld/templates/configmaps.yaml index 4dea3bf..58cfd91 100644 --- a/chart/templates/configmaps.yaml +++ b/charts/palworld/templates/configmaps.yaml @@ -1,40 +1,51 @@ -{{- $cPwd := randAlphaNum 12 | nospace -}} -{{- $sName := "" -}} -apiVersion: v1 -kind: ConfigMap -metadata: - namespace: {{ .Values.namespace }} - name: "{{ .Release.Name }}-env-config" - annotations: - {{- with .Values.server.config.annotations }} - {{- toYaml . | nindent 4 }} - {{- end }} - labels: - helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - app.kubernetes.io/name: "{{ .Release.Name }}-config" - app.kubernetes.io/managed-by: {{ .Release.Service }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/component: "{{ .Release.Name }}-config" - app.kubernetes.io/version: {{ .Chart.AppVersion }} - {{- with .Values.server.config.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} -data: - PUID: "{{ .Values.server.config.puid }}" - PGID: "{{ .Values.server.config.pgid }}" - PORT: "{{ .Values.server.config.port }}" - PLAYERS: "{{ .Values.server.config.max_players }}" - MULTITHREADING: "{{ .Values.server.config.multithreading }}" - {{ if .Values.server.config.rcon.enable }} - RCON_ENABLED: "true" - RCON_PORT: "{{ .Values.server.config.rcon.port }}" - {{ end }} - {{ if .Values.server.config.community.enable }} - COMMUNITY: "true" - SERVER_PASSWORD: {{- if .Values.server.config.community.password }} "{{ .Values.server.config.community.password }}" {{ else }} {{ $cPwd }} {{ end }} - {{ end }} - {{ if .Values.server.config.server_name }} - SERVER_NAME: {{ regexReplaceAll "\\W+" .Values.server.config.server_name "_" }} - {{ else }} - SERVER_NAME: {{ printf "%s_%s" "palworld" (randAlphaNum 6 | nospace) }} +{{- $cPwd := randAlphaNum 12 | nospace -}} +{{- $sName := "" -}} +apiVersion: v1 +kind: ConfigMap +metadata: + namespace: {{ .Values.namespace }} + name: "{{ .Release.Name }}-env-config" + annotations: + {{- with .Values.server.config.annotations }} + {{- toYaml . | nindent 4 }} + {{- end }} + labels: + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + app.kubernetes.io/name: "{{ .Release.Name }}-config" + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/component: "{{ .Release.Name }}-config" + app.kubernetes.io/version: {{ .Chart.AppVersion }} + {{- with .Values.server.config.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +data: + PUID: "{{ .Values.server.config.puid }}" + PGID: "{{ .Values.server.config.pgid }}" + PORT: "{{ .Values.server.config.port }}" + PLAYERS: "{{ .Values.server.config.max_players }}" + MULTITHREADING: "{{ .Values.server.config.multithreading }}" + {{ if .Values.server.config.rcon.enable }} + RCON_ENABLED: "true" + RCON_PORT: "{{ .Values.server.config.rcon.port }}" + {{ end }} + {{ if .Values.server.config.community.enable }} + COMMUNITY: "true" + SERVER_PASSWORD: {{- if .Values.server.config.community.password }} "{{ .Values.server.config.community.password }}" {{ else }} {{ $cPwd }} {{ end }} + {{ end }} + {{ if .Values.server.config.server_name }} + SERVER_NAME: {{ regexReplaceAll "\\W+" .Values.server.config.server_name "_" }} + {{ else }} + SERVER_NAME: {{ printf "%s_%s" "palworld" (randAlphaNum 6 | nospace) }} + {{ end }} + TZ: {{ .Values.server.config.timezone }} + PUBLIC_IP: {{ .Values.server.config.public_ip | quote }} + PUBLIC_PORT: {{ .Values.server.config.public_port | quote }} + SERVER_DESCRIPTION: {{ .Values.server.config.server_description }} + UPDATE_ON_BOOT: {{ .Values.server.config.update_on_boot | quote }} + QUERY_PORT: {{ .Values.server.config.query_port | quote }} + {{ if .Values.server.config.world_parameters }} + {{- with .Values.server.config.world_parameters }} + {{- toYaml . | nindent 2 }} + {{- end }} {{ end }} \ No newline at end of file diff --git a/chart/templates/deployments.yaml b/charts/palworld/templates/deployments.yaml similarity index 97% rename from chart/templates/deployments.yaml rename to charts/palworld/templates/deployments.yaml index 20d9f1c..2c857bc 100644 --- a/chart/templates/deployments.yaml +++ b/charts/palworld/templates/deployments.yaml @@ -1,70 +1,70 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - namespace: {{ .Values.namespace }} - name: "{{ .Release.Name }}-server" -spec: - selector: - matchLabels: - app.kubernetes.io/component: "{{ .Release.Name }}-server" - strategy: - type: "{{ .Values.server.strategy }}" - template: - metadata: - annotations: - {{- with .Values.server.annotations }} - {{- toYaml . | nindent 4 }} - {{- end }} - labels: - helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - app.kubernetes.io/name: "{{ .Release.Name }}-server" - app.kubernetes.io/managed-by: {{ .Release.Service }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/component: "{{ .Release.Name }}-server" - app.kubernetes.io/version: {{ .Chart.AppVersion }} - {{- with .Values.server.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} - spec: - containers: - {{ if .Values.server.service.healthz.enabled }} - - name: healthz - image: "chussenot/tiny-server:latest" - imagePullPolicy: {{ .Values.server.image.imagePullPolicy }} - ports: - - name: healthz - containerPort: 80 - protocol: TCP - {{ end }} - - name: server - image: "{{ .Values.server.image.name }}:{{ .Values.server.image.tag }}" - imagePullPolicy: {{ .Values.server.image.imagePullPolicy }} - resources: - {{- with .Values.server.resources }} - {{- toYaml . | nindent 12 }} - {{- end }} - ports: - {{- with .Values.server.ports }} - {{- toYaml . | nindent 12 }} - {{- end }} - env: - - name: ADMIN_PASSWORD - valueFrom: - secretKeyRef: - name: "{{ .Release.Name }}-rcon-password" - key: "rconPassword" - envFrom: - - configMapRef: - name: "{{ .Release.Name }}-env-config" - volumeMounts: - - mountPath: /palworld - name: datadir - volumes: - - name: datadir - persistentVolumeClaim: - {{- if not .Values.server.storage.external }} - claimName: "{{ .Release.Name }}-datadir-pvc" - {{ else }} - claimName: "{{ .Values.server.storage.externalName }}" - {{ end }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + namespace: {{ .Values.namespace }} + name: "{{ .Release.Name }}-server" +spec: + selector: + matchLabels: + app.kubernetes.io/component: "{{ .Release.Name }}-server" + strategy: + type: "{{ .Values.server.strategy }}" + template: + metadata: + annotations: + {{- with .Values.server.annotations }} + {{- toYaml . | nindent 4 }} + {{- end }} + labels: + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + app.kubernetes.io/name: "{{ .Release.Name }}-server" + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/component: "{{ .Release.Name }}-server" + app.kubernetes.io/version: {{ .Chart.AppVersion }} + {{- with .Values.server.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + spec: + containers: + {{ if .Values.server.service.healthz.enabled }} + - name: healthz + image: "chussenot/tiny-server:latest" + imagePullPolicy: {{ .Values.server.image.imagePullPolicy }} + ports: + - name: healthz + containerPort: 80 + protocol: TCP + {{ end }} + - name: server + image: "{{ .Values.server.image.name }}:{{ .Values.server.image.tag }}" + imagePullPolicy: {{ .Values.server.image.imagePullPolicy }} + resources: + {{- with .Values.server.resources }} + {{- toYaml . | nindent 12 }} + {{- end }} + ports: + {{- with .Values.server.ports }} + {{- toYaml . | nindent 12 }} + {{- end }} + env: + - name: ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: "{{ .Release.Name }}-rcon-password" + key: "rconPassword" + envFrom: + - configMapRef: + name: "{{ .Release.Name }}-env-config" + volumeMounts: + - mountPath: /palworld + name: datadir + volumes: + - name: datadir + persistentVolumeClaim: + {{- if not .Values.server.storage.external }} + claimName: "{{ .Release.Name }}-datadir-pvc" + {{ else }} + claimName: "{{ .Values.server.storage.externalName }}" + {{ end }} diff --git a/chart/templates/pvcs.yaml b/charts/palworld/templates/pvcs.yaml similarity index 97% rename from chart/templates/pvcs.yaml rename to charts/palworld/templates/pvcs.yaml index c16e754..4ece1da 100644 --- a/chart/templates/pvcs.yaml +++ b/charts/palworld/templates/pvcs.yaml @@ -1,31 +1,31 @@ -{{- if not .Values.server.storage.external }} -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - namespace: {{ .Values.namespace }} - name: "{{ .Release.Name }}-datadir-pvc" - annotations: - {{- with .Values.server.config.annotations }} - {{- toYaml . | nindent 4 }} - {{- end }} - labels: - helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - app.kubernetes.io/name: "{{ .Release.Name }}-datadir-pvc" - app.kubernetes.io/managed-by: {{ .Release.Service }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/component: "{{ .Release.Name }}-datadir-pvc" - app.kubernetes.io/version: {{ .Chart.AppVersion }} - {{- if .Values.server.storage.preventDelete }} - helm.sh/resource-policy: keep - {{ end }} - {{- with .Values.server.config.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: {{ .Values.server.storage.size }} - storageClassName: {{ .Values.server.storage.storageClassName }} +{{- if not .Values.server.storage.external }} +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + namespace: {{ .Values.namespace }} + name: "{{ .Release.Name }}-datadir-pvc" + annotations: + {{- with .Values.server.config.annotations }} + {{- toYaml . | nindent 4 }} + {{- end }} + labels: + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + app.kubernetes.io/name: "{{ .Release.Name }}-datadir-pvc" + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/component: "{{ .Release.Name }}-datadir-pvc" + app.kubernetes.io/version: {{ .Chart.AppVersion }} + {{- if .Values.server.storage.preventDelete }} + helm.sh/resource-policy: keep + {{ end }} + {{- with .Values.server.config.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: {{ .Values.server.storage.size }} + storageClassName: {{ .Values.server.storage.storageClassName }} {{ end }} \ No newline at end of file diff --git a/chart/templates/secrets.yaml b/charts/palworld/templates/secrets.yaml similarity index 97% rename from chart/templates/secrets.yaml rename to charts/palworld/templates/secrets.yaml index f1a3d85..6e695d4 100644 --- a/chart/templates/secrets.yaml +++ b/charts/palworld/templates/secrets.yaml @@ -1,25 +1,25 @@ -{{- define "server.rcon.password" -}} -{{- randAlphaNum 24 | nospace -}} -{{- end -}} -apiVersion: v1 -kind: Secret -metadata: - namespace: {{ .Values.namespace }} - name: "{{ .Release.Name }}-rcon-password" - annotations: - {{- with .Values.server.config.annotations }} - {{- toYaml . | nindent 4 }} - {{- end }} - labels: - helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - app.kubernetes.io/name: "{{ .Release.Name }}-rcon-password" - app.kubernetes.io/managed-by: {{ .Release.Service }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/component: "{{ .Release.Name }}-rcon-password" - app.kubernetes.io/version: {{ .Chart.AppVersion }} - {{- with .Values.server.config.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} -type: Opaque -stringData: +{{- define "server.rcon.password" -}} +{{- randAlphaNum 24 | nospace -}} +{{- end -}} +apiVersion: v1 +kind: Secret +metadata: + namespace: {{ .Values.namespace }} + name: "{{ .Release.Name }}-rcon-password" + annotations: + {{- with .Values.server.config.annotations }} + {{- toYaml . | nindent 4 }} + {{- end }} + labels: + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + app.kubernetes.io/name: "{{ .Release.Name }}-rcon-password" + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/component: "{{ .Release.Name }}-rcon-password" + app.kubernetes.io/version: {{ .Chart.AppVersion }} + {{- with .Values.server.config.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +type: Opaque +stringData: rconPassword: {{- if .Values.server.config.rcon.password }} "{{ .Values.server.config.rcon.password }}" {{ else }} "{{ include "server.rcon.password" .}}" {{ end }} \ No newline at end of file diff --git a/chart/templates/services.yaml b/charts/palworld/templates/services.yaml similarity index 93% rename from chart/templates/services.yaml rename to charts/palworld/templates/services.yaml index 2aa7fba..5396c5e 100644 --- a/chart/templates/services.yaml +++ b/charts/palworld/templates/services.yaml @@ -1,34 +1,34 @@ ---- -apiVersion: v1 -kind: Service -metadata: - namespace: {{ .Values.namespace }} - name: "{{ .Release.Name }}-svc" - labels: - helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} - app.kubernetes.io/name: "{{ .Release.Name }}-svc" - app.kubernetes.io/managed-by: {{ .Release.Service }} - app.kubernetes.io/instance: {{ .Release.Name }} - app.kubernetes.io/component: "{{ .Release.Name }}-svc" - app.kubernetes.io/version: {{ .Chart.AppVersion }} - {{- with .Values.server.service.labels }} - {{- toYaml . | nindent 4 }} - {{- end }} - annotations: - {{- with .Values.server.config.annotations }} - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - selector: - app.kubernetes.io/component: "{{ .Release.Name }}-server" - ports: - {{ if .Values.server.service.healthz.enabled }} - - name: {{ .Values.server.service.healthz.name }} - port: {{ .Values.server.service.healthz.port }} - protocol: {{ .Values.server.service.healthz.protocol }} - targetPort: {{ .Values.server.service.healthz.targetPort }} - {{ end }} - {{- with .Values.server.service.ports }} - {{- toYaml . | nindent 4 }} - {{- end }} +--- +apiVersion: v1 +kind: Service +metadata: + namespace: {{ .Values.namespace }} + name: "{{ .Release.Name }}-svc" + labels: + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + app.kubernetes.io/name: "{{ .Release.Name }}-svc" + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/component: "{{ .Release.Name }}-svc" + app.kubernetes.io/version: {{ .Chart.AppVersion }} + {{- with .Values.server.service.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + annotations: + {{- with .Values.server.service.annotations }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + selector: + app.kubernetes.io/component: "{{ .Release.Name }}-server" + ports: + {{ if .Values.server.service.healthz.enabled }} + - name: {{ .Values.server.service.healthz.name }} + port: {{ .Values.server.service.healthz.port }} + protocol: {{ .Values.server.service.healthz.protocol }} + targetPort: {{ .Values.server.service.healthz.targetPort }} + {{ end }} + {{- with .Values.server.service.ports }} + {{- toYaml . | nindent 4 }} + {{- end }} type: {{ .Values.server.service.type }} \ No newline at end of file diff --git a/chart/values.yaml b/charts/palworld/values.yaml similarity index 62% rename from chart/values.yaml rename to charts/palworld/values.yaml index 0fcf492..4f37074 100644 --- a/chart/values.yaml +++ b/charts/palworld/values.yaml @@ -1,139 +1,210 @@ -# -- Namespace where the resources will be created -namespace: palworld -# -- (dict) The server configuration -# @notationType -- bigValue -server: - # -- Additional annotations to the resources - annotations: { } - # -- Additional labels to the resources - labels: { } - # -- (dict) Resources limits for the container. - resources: - limits: - cpu: 4 - memory: "12Gi" - requests: - cpu: 4 - memory: "8Gi" - # -- (dict) Define some parameters for the storage volume - storage: - # -- (bool) Define if it will use an existing PVC containing the installation data. - external: false - # -- (bool) The external PVC name to use. - externalName: "" - # -- Keeps helm from deleting the PVC. By default, helm does not delete pvcs. - preventDelete: false - # -- The size of the pvc storage. - size: 12Gi - # -- The storage class name. - storageClassName: "" - # -- (dict) Define the parameters for the server image container - # @notationType -- bigValue - image: - # -- Name of the image, without the tag. - name: thijsvanloef/palworld-server-docker - # -- The tag of the image. - tag: latest - # -- Define the pull policy for the server image. - imagePullPolicy: IfNotPresent - - # -- (dict) Change the ports to be mapped to the pod. - # If you change those, make sure to change the service.ports and server.config accordingly. - # @notationType -- bigValue - ports: - # -- (dict) The "game" port definition. - # If you change this, make sure to change the service.ports.game and server.config accordingly. - - name: game - containerPort: 8211 - protocol: UDP - # -- (dict) The "query" port definition . - # If you change this, make sure to change the service.ports.query_port and server.config accordingly. - - name: query - containerPort: 27015 - protocol: UDP - # -- (dict) The "rcon" port definition . - # If you change this, make sure to change the service.ports.rcon and server.config accordingly. - - name: rcon - containerPort: 25575 - protocol: UDP - # -- (string) Change the deployment strategy - strategy: Recreate - - # -- (dict) Change the service configuration. - # If you change those, make sure to change the server.config and server.ports accordingly. - # @notationType -- bigValue - service: - # -- (bool) Enables the creation of the service component. - enabled: true - # -- Additional annotations to the resources - annotations: { } - # -- Additional labels to the resources - labels: { } - # -- (string) The type of service to be created. - type: LoadBalancer - # -- (dict) The "healthz" definition . - # Use if you need to create a TCP health check for load balancers on cloud services. - healthz: - enabled: false - name: healthz - port: 80 - protocol: TCP - targetPort: 80 - # -- (dict) Change the ports to be mapped to the service. - # If you change those, make sure to change the server.config and server.ports accordingly. - # @notationType -- bigValue - ports: - # -- (dict) The "game" port definition. - # If you change this, make sure to change the server.ports.game and server.config.port accordingly. - - name: game - port: 8211 - protocol: UDP - targetPort: 8211 - # -- (dict) The "query" port definition . - # If you change this, make sure to change the server.ports.query and server.config.query_port accordingly. - - name: query - port: 27015 - protocol: UDP - targetPort: 27015 - # -- (dict) The "rcon" port definition . - # If you change this, make sure to change the server.ports.rcon and server.config.rcon.port accordingly. - - name: rcon - port: 25575 - protocol: UDP - targetPort: 25575 - # -- (dict) Change the game server configuration. - # If you change those, make sure to change the service.ports and server.ports accordingly. - # Those are directly connected with the container image, providing multiple environment variables to the scripts. - # @notationType -- bigValue - config: - # -- Additional annotations to the resources - annotations: { } - # -- Additional labels to the resources - labels: { } - puid: 1000 - pgid: 1000 - port: 8211 - # -- (string) The query port of the game. - query_port: 27015 - # -- The max number of players supported. - max_players: 16 - # -- (bool) Enables the multithreading, allowing the usage of up to 4 cores (needs citation) - multithreading: true - # -- (dict) Remote connection configuration. - # Allows the remote connection and management for the server. - # Those are directly connected with the container image, providing multiple environment variables to the scripts. - # @notationType -- bigValue - rcon: - # -- (bool) Enables/disables the rcon port. - enable: true - # -- (string) The port for rcon. If you change this, make sure to change the service.ports and server.ports accordingly. - port: 25575 - # -- (string) If not provided, a random password will be generated and stored on the secret. - password: "" - community: - # -- (bool) Enables/disables the visibility of this server on Steam community servers list. - enable: true - # -- (string) If not provided, a random password will be generated and stored on the secret. - password: "" - # -- (string) If not provided, a random server name will be generated with the "palworld_" prefix. - server_name: "" +# -- Namespace where the resources will be created +namespace: palworld +# -- (dict) The server configuration +# @notationType -- bigValue +server: + # -- Additional annotations to the resources + annotations: { } + # -- Additional labels to the resources + labels: { } + # -- (dict) Resources limits for the container. + resources: + limits: + cpu: 4 + memory: "12Gi" + requests: + cpu: 4 + memory: "8Gi" + # -- (dict) Define some parameters for the storage volume + storage: + # -- (bool) Define if it will use an existing PVC containing the installation data. + external: false + # -- (bool) The external PVC name to use. + externalName: "" + # -- Keeps helm from deleting the PVC. By default, helm does not delete pvcs. + preventDelete: false + # -- The size of the pvc storage. + size: 12Gi + # -- The storage class name. + storageClassName: "" + # -- (dict) Define the parameters for the server image container + # @notationType -- bigValue + image: + # -- Name of the image, without the tag. + name: thijsvanloef/palworld-server-docker + # -- The tag of the image. + tag: latest + # -- Define the pull policy for the server image. + imagePullPolicy: IfNotPresent + + # -- (dict) Change the ports to be mapped to the pod. + # If you change those, make sure to change the service.ports and server.config accordingly. + # @notationType -- bigValue + ports: + # -- (dict) The "game" port definition. + # If you change this, make sure to change the service.ports.game and server.config accordingly. + - name: game + containerPort: 8211 + protocol: UDP + # -- (dict) The "query" port definition . + # If you change this, make sure to change the service.ports.query_port and server.config accordingly. + - name: query + containerPort: 27015 + protocol: UDP + # -- (dict) The "rcon" port definition . + # If you change this, make sure to change the service.ports.rcon and server.config accordingly. + - name: rcon + containerPort: 25575 + protocol: UDP + # -- (string) Change the deployment strategy + strategy: Recreate + + # -- (dict) Change the service configuration. + # If you change those, make sure to change the server.config and server.ports accordingly. + # @notationType -- bigValue + service: + # -- (bool) Enables the creation of the service component. + enabled: true + # -- Additional annotations to the resources + annotations: { } + # -- Additional labels to the resources + labels: { } + # -- (string) The type of service to be created. + type: LoadBalancer + # -- (dict) The "healthz" definition . + # Use if you need to create a TCP health check for load balancers on cloud services. + healthz: + enabled: false + name: healthz + port: 80 + protocol: TCP + targetPort: 80 + # -- (dict) Change the ports to be mapped to the service. + # If you change those, make sure to change the server.config and server.ports accordingly. + # @notationType -- bigValue + ports: + # -- (dict) The "game" port definition. + # If you change this, make sure to change the server.ports.game and server.config.port accordingly. + - name: game + port: 8211 + protocol: UDP + targetPort: 8211 + # -- (dict) The "query" port definition . + # If you change this, make sure to change the server.ports.query and server.config.query_port accordingly. + - name: query + port: 27015 + protocol: UDP + targetPort: 27015 + # -- (dict) The "rcon" port definition . + # If you change this, make sure to change the server.ports.rcon and server.config.rcon.port accordingly. + - name: rcon + port: 25575 + protocol: UDP + targetPort: 25575 + # -- (dict) Change the game server configuration. + # If you change those, make sure to change the service.ports and server.ports accordingly. + # Those are directly connected with the container image, providing multiple environment variables to the scripts. + # @notationType -- bigValue + config: + # -- Additional annotations to the resources + annotations: { } + # -- Additional labels to the resources + labels: { } + puid: 1000 + pgid: 1000 + port: 8211 + # -- (string) The query port of the game. + query_port: 27015 + # -- The max number of players supported. + max_players: 16 + # -- (bool) Enables the multithreading, allowing the usage of up to 4 cores (needs citation) + multithreading: true + # -- (dict) Remote connection configuration. + # Allows the remote connection and management for the server. + # Those are directly connected with the container image, providing multiple environment variables to the scripts. + # @notationType -- bigValue + rcon: + # -- (bool) Enables/disables the rcon port. + enable: true + # -- (string) The port for rcon. If you change this, make sure to change the service.ports and server.ports accordingly. + port: 25575 + # -- (string) If not provided, a random password will be generated and stored on the secret. + password: "" + community: + # -- (bool) Enables/disables the visibility of this server on Steam community servers list. + enable: true + # -- (string) If not provided, a random password will be generated and stored on the secret. + password: "" + # -- (string) If not provided, a random server name will be generated with the "palworld_" prefix. + server_name: "" + # -- (string) The timezone used for time stamping backup server. Use the IANA TZ format with Area/Location + # See the [list of TZ database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#Time_Zone_abbreviations) + timezone: "UTC" + # -- (string) You can manually specify the global IP address of the network on which the server running. + # If not specified, it will be detected automatically. If it does not work well, try manual configuration. + public_ip: "" + # -- (string) You can manually specify the port number of the network on which the server running. + # If not specified, it will be detected automatically. If it does not work well, try manual configuration. + public_port: "" + # -- (string) Your server description to be shown in game + server_description: "" + # -- (string) Update/Install the server when the container starts. + # THIS HAS TO BE ENABLED THE FIRST TIME YOU RUN THE CONTAINER + update_on_boot: true + # -- (object) Configures the game world settings. + # The key:values here should represent in game accepted values. + # Wrap all values with quotes here to avoid validation issues. + # @notationType -- bigValue + world_parameters: + DAYTIME_SPEEDRATE: "1.000000" + NIGHTTIME_SPEEDRATE: "1.000000" + EXP_RATE: "1.000000" + PAL_CAPTURE_RATE: "1.000000" + PAL_SPAWN_NUM_RATE: "1.000000" + PAL_DAMAGE_RATE_ATTACK: "1.000000" + PAL_DAMAGE_RATE_DEFENSE: "1.000000" + PLAYER_DAMAGE_RATE_ATTACK: "1.000000" + PLAYER_DAMAGE_RATE_DEFENSE: "1.000000" + PLAYER_STOMACH_DECREASE_RATE: "1.000000" + PLAYER_STAMINA_DECREASE_RATE: "1.000000" + PLAYER_AUTO_HP_REGEN_RATE: "1.000000" + PLAYER_AUTO_HP_REGEN_RATE_IN_SLEEP: "1.000000" + PAL_STOMACH_DECREASE_RATE: "1.000000" + PAL_STAMINA_DECREASE_RATE: "1.000000" + PAL_AUTO_HP_REGEN_RATE: "1.000000" + PAL_AUTO_HP_REGEN_RATE_IN_SLEEP: "1.000000" + BUILD_OBJECT_DAMAGE_RATE: "1.000000" + BUILD_OBJECT_DETERIORATION_DAMAGE_RATE: "1.000000" + COLLECTION_DROP_RATE: "1.000000" + COLLECTION_OBJECT_HP_RATE: "1.000000" + COLLECTION_OBJECT_RESPAWN_SPEED_RATE: "1.000000" + ENEMY_DROP_ITEM_RATE: "1.000000" + DEATH_PENALTY: "All" + ENABLE_PLAYER_TO_PLAYER_DAMAGE: "False" + ENABLE_FRIENDLY_FIRE: "False" + ENABLE_INVADER_ENEMY: "True" + ACTIVE_UNKO: "True" + ENABLE_AIM_ASSIST_PAD: "True" + ENABLE_AIM_ASSIST_KEYBOARD: "False" + DROP_ITEM_MAX_NUM: "3000" + DROP_ITEM_MAX_NUM_UNKO: "1000" + BASE_CAMP_MAX_NUM: "128" + BASE_CAMP_WORKER_MAXNUM: "15" + DROP_ITEM_ALIVE_MAX_HOURS: "1.000000" + AUTO_RESET_GUILD_NO_ONLINE_PLAYERS: "False" + AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS: "72.000000" + GUILD_PLAYER_MAX_NUM: "3" + PAL_EGG_DEFAULT_HATCHING_TIME: "72.000000" + WORK_SPEED_RATE: "1.000000" + IS_MULTIPLAY: "False" + IS_PVP: "False" + CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP: "False" + ENABLE_NON_LOGIN_PENALTY: "True" + ENABLE_FAST_TRAVEL: "True" + IS_START_LOCATION_SELECT_BY_MAP: "True" + EXIST_PLAYER_AFTER_LOGOUT: "False" + ENABLE_DEFENSE_OTHER_GUILD_PLAYER: "False" + COOP_PLAYER_MAX_NUM: "4" + REGION: "" + USEAUTH: "True" + BAN_LIST_URL: "https://api.palworldgame.com/api/banlist.txt" diff --git a/docker-compose.yml b/docker-compose.yml index a4ac545..440af54 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,6 +3,7 @@ services: image: thijsvanloef/palworld-server-docker:latest restart: unless-stopped container_name: palworld-server + stop_grace_period: 30s # Set to however long you are willing to wait for the container to gracefully stop ports: - 8211:8211/udp - 27015:27015/udp # Required if you want your server to show up in the community servers tab