From d9f0967cd69d5eaba40d8c05be8d739141e35758 Mon Sep 17 00:00:00 2001 From: Sheikah45 <66929319+Sheikah45@users.noreply.github.com> Date: Sun, 25 Oct 2026 22:24:43 -0400 Subject: [PATCH 1/2] Add faf-player-service (#339) * add faf-player-service * use versioned player-service * add geoip database update --- Tiltfile | 14 ++-- apps/faf-lobby-server/config/config.yaml | 2 + apps/faf-player-service/Chart.yaml | 8 +++ apps/faf-player-service/templates/config.yaml | 15 ++++ .../templates/deployment.yaml | 69 +++++++++++++++++++ .../templates/local-secret.yaml | 12 ++++ apps/faf-player-service/values.yaml | 2 + apps/rabbitmq/values.yaml | 4 ++ infra/mariadb/values.yaml | 6 ++ 9 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 apps/faf-player-service/Chart.yaml create mode 100644 apps/faf-player-service/templates/config.yaml create mode 100644 apps/faf-player-service/templates/deployment.yaml create mode 100644 apps/faf-player-service/templates/local-secret.yaml create mode 100644 apps/faf-player-service/values.yaml diff --git a/Tiltfile b/Tiltfile index 92155781..be8299c3 100644 --- a/Tiltfile +++ b/Tiltfile @@ -213,7 +213,7 @@ def proxy_local_service_if_set(service_name, service_chart, service_namespace, a service_objects.append(object["metadata"]["name"] + ":" + object["kind"].lower()) k8s_resource(new_name=service_name, objects=service_objects, resource_deps=all_service_deps, labels=service_labels, links=service_links, pod_readiness="ignore") elif (service_yaml): - if service_name == "faf-icebreaker": + if service_name == "faf-icebreaker" or service_name == "faf-player-service": service_yaml = remove_init_container(service_yaml) k8s_yaml(service_yaml) @@ -329,7 +329,7 @@ k8s_resource(workload="mariadb", objects=["mariadb:configmap", "mariadb:secret", mariadb_setup_resources = [] for object in decode_yaml_stream(mariadb_init_user_yaml): mariadb_setup_resources.append(object["metadata"]["name"]) - k8s_resource(workload=object["metadata"]["name"], resource_deps=["init-apps", "mariadb", "faf-api-config", "faf-user-service-config", "faf-lobby-server-config", "faf-message-broker-config", "faf-replay-server-config", "faf-policy-server-config", "faf-league-service-config", "wordpress-config", "ergochat-config", "faf-icebreaker-config"], labels=["database"]) + k8s_resource(workload=object["metadata"]["name"], resource_deps=["init-apps", "mariadb", "faf-api-config", "faf-user-service-config", "faf-lobby-server-config", "faf-player-service-config", "faf-replay-server-config", "faf-policy-server-config", "faf-league-service-config", "wordpress-config", "ergochat-config", "faf-icebreaker-config"], labels=["database"]) mongodb_yaml = helm_with_build_cache("infra/mongodb", namespace="faf-infra", values=["config/local.yaml"]) mongodb_init_user_yaml, mongodb_resource_yaml = filter_yaml(mongodb_yaml, {"app": "mongodb-sync-db-user"}) @@ -350,7 +350,7 @@ k8s_resource(workload="rabbitmq", objects=["rabbitmq:configmap", "rabbitmq:secre rabbitmq_setup_resources = [] for object in decode_yaml_stream(rabbitmq_init_user_yaml): rabbitmq_setup_resources.append(object["metadata"]["name"]) - k8s_resource(workload=object["metadata"]["name"], resource_deps=["init-apps", "rabbitmq", "faf-api-config", "faf-icebreaker-config", "faf-lobby-server-config", "faf-message-broker-config", "debezium-config", "faf-league-service-config", "faf-user-service-config"], labels=["rabbitmq"]) + k8s_resource(workload=object["metadata"]["name"], resource_deps=["init-apps", "rabbitmq", "faf-api-config", "faf-icebreaker-config", "faf-lobby-server-config", "faf-player-service-config", "faf-message-broker-config", "debezium-config", "faf-league-service-config", "faf-user-service-config"], labels=["rabbitmq"]) k8s_yaml(cronjob_to_job(helm_with_build_cache("apps/faf-db-migrations", namespace="faf-apps", values=["config/local.yaml"]))) k8s_resource(workload="faf-db-migrations", objects=["faf-db-migrations:secret"], resource_deps=mariadb_setup_resources, labels=["database"]) @@ -426,11 +426,15 @@ lobby_server_labels = ["lobby"] lobby_server_patch = {"HYDRA_JWKS_URI": "http://ory-hydra:4444/.well-known/jwks.json"} proxy_local_service_if_set(service_name="faf-lobby-server", service_chart="apps/faf-lobby-server", service_namespace="faf-apps", service_deps=lobby_server_deps, service_labels=lobby_server_labels, config_patch=lobby_server_patch) -message_broker_deps = ["ory-hydra"] + rabbitmq_setup_resources +message_broker_deps = ["ory-hydra"] + rabbitmq_setup_resources + postgres_setup_resources message_broker_labels = ["lobby"] -message_broker_patch = {"USE_POLICY_SERVER": "false", "QUARKUS_LOG_CONSOLE_JSON_ENABLED": "false", "QUARKUS_LOG_CATEGORY__COM_FAFOREVER__LEVEL":"DEBUG", "QUARKUS_LOG_CATEGORY__IO_QUARKUS_WEBSOCKETS_NEXT_TRAFFIC__LEVEL":"DEBUG", "QUARKUS_WEBSOCKETS_NEXT_SERVER_TRAFFIC_LOGGING_ENABLED":"true"} +message_broker_patch = {"HYDRA_TOKEN_ISSUER": "http://ory-hydra:4444", "USE_POLICY_SERVER": "false", "QUARKUS_LOG_CONSOLE_JSON_ENABLED": "false", "QUARKUS_LOG_CATEGORY__COM_FAFOREVER__LEVEL":"DEBUG", "QUARKUS_LOG_CATEGORY__IO_QUARKUS_WEBSOCKETS_NEXT_TRAFFIC__LEVEL":"DEBUG", "QUARKUS_WEBSOCKETS_NEXT_SERVER_TRAFFIC_LOGGING_ENABLED":"true"} proxy_local_service_if_set(service_name="faf-message-broker", service_chart="apps/faf-message-broker", service_namespace="faf-apps", service_deps=message_broker_deps, service_labels=message_broker_labels, config_patch=message_broker_patch) +player_service_deps = rabbitmq_setup_resources + mariadb_setup_resources +player_service_labels = ["lobby"] +proxy_local_service_if_set(service_name="faf-player-service", service_chart="apps/faf-player-service", service_namespace="faf-apps", service_deps=player_service_deps, service_labels=player_service_labels) + replay_server_deps = ["faf-db-migrations"] replay_server_labels = ["replay"] proxy_local_service_if_set(service_name="faf-replay-server", service_chart="apps/faf-replay-server", service_namespace="faf-apps", service_deps=replay_server_deps, service_labels=replay_server_labels) diff --git a/apps/faf-lobby-server/config/config.yaml b/apps/faf-lobby-server/config/config.yaml index 70f0d860..50e3d7b2 100644 --- a/apps/faf-lobby-server/config/config.yaml +++ b/apps/faf-lobby-server/config/config.yaml @@ -45,6 +45,8 @@ LADDER_TOP_PLAYER_SEARCH_EXPANSION_STEP: 0.5 QUEUE_POP_TIME_MAX: 90 USE_POLICY_SERVER: false +TRACK_PLAYER_STATE: false + # 3rd Jan 2026: Disable matchmaking bans # There are problems with the ban system when a game doesn't start due to # connection issues. The current hypothesis is that all players except for the diff --git a/apps/faf-player-service/Chart.yaml b/apps/faf-player-service/Chart.yaml new file mode 100644 index 00000000..e9adf817 --- /dev/null +++ b/apps/faf-player-service/Chart.yaml @@ -0,0 +1,8 @@ +apiVersion: v2 +name: faf-player-service +version: 1.0.0 + +dependencies: + - name: infisical-secret + version: 1.0.0 + repository: file://../../common/infisical-secret diff --git a/apps/faf-player-service/templates/config.yaml b/apps/faf-player-service/templates/config.yaml new file mode 100644 index 00000000..355e61fb --- /dev/null +++ b/apps/faf-player-service/templates/config.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: faf-player-service + labels: + app: faf-player-service +data: + DATABASE_NAME: "faf_lobby" + DATABASE_USER: "faf-player-service" + DATABASE_HOST: "mariadb" + RABBITMQ_USER: "faf-player-service" + RABBITMQ_HOST: "rabbitmq" + RABBITMQ_PORT: "5672" + GEOIPUPDATE_EDITION_IDS: "GeoLite2-Country" + GEO_IP_DATABASE_PATH: "/geoip/GeoLite2-Country.mmdb" diff --git a/apps/faf-player-service/templates/deployment.yaml b/apps/faf-player-service/templates/deployment.yaml new file mode 100644 index 00000000..2069dfd1 --- /dev/null +++ b/apps/faf-player-service/templates/deployment.yaml @@ -0,0 +1,69 @@ + apiVersion: apps/v1 +kind: Deployment +metadata: + name: faf-player-service + labels: + app: faf-player-service + annotations: + reloader.stakater.com/auto: "true" +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: faf-player-service + template: + metadata: + labels: + app: faf-player-service + annotations: + prometheus.io/scrape: 'true' + prometheus.io/port: '9000' + prometheus.io/path: '/q/metrics' + spec: + initContainers: + - name: geolite-db-dl + image: ghcr.io/maxmind/geoipupdate:v7.1.1 + envFrom: + - configMapRef: + name: faf-player-service + - secretRef: + name: faf-player-service + volumeMounts: + - name: geolite-db + mountPath: /usr/share/GeoIP + containers: + - image: faforever/faf-player-service:1.0.0 + imagePullPolicy: Always + name: faf-player-service + envFrom: + - configMapRef: + name: faf-player-service + - secretRef: + name: faf-player-service + resources: + limits: + memory: 2Gi + requests: + memory: 250Mi + ports: + - containerPort: 9000 + volumeMounts: + - name: geolite-db + mountPath: /geoip + startupProbe: + httpGet: + port: 9000 + path: /q/health + failureThreshold: 10 + periodSeconds: 3 + livenessProbe: + httpGet: + port: 9000 + path: /q/health + failureThreshold: 3 + periodSeconds: 10 + volumes: + - name: geolite-db + emptyDir: {} + restartPolicy: Always \ No newline at end of file diff --git a/apps/faf-player-service/templates/local-secret.yaml b/apps/faf-player-service/templates/local-secret.yaml new file mode 100644 index 00000000..d041de6c --- /dev/null +++ b/apps/faf-player-service/templates/local-secret.yaml @@ -0,0 +1,12 @@ +{{- if not (index .Values "infisical-secret" "enabled") }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Chart.Name }} +type: Opaque +stringData: + DATABASE_PASSWORD: "banana" + RABBITMQ_PASSWORD: "banana" + GEOIPUPDATE_ACCOUNT_ID: "banana" + GEOIPUPDATE_LICENSE_KEY: "banana" +{{- end}} diff --git a/apps/faf-player-service/values.yaml b/apps/faf-player-service/values.yaml new file mode 100644 index 00000000..97aedf8a --- /dev/null +++ b/apps/faf-player-service/values.yaml @@ -0,0 +1,2 @@ +infisical-secret: + name: faf-player-service diff --git a/apps/rabbitmq/values.yaml b/apps/rabbitmq/values.yaml index a6ff19eb..d2017223 100644 --- a/apps/rabbitmq/values.yaml +++ b/apps/rabbitmq/values.yaml @@ -14,6 +14,10 @@ users: secretRef: faf-message-broker usernameKey: RABBITMQ_USER passwordKey: RABBITMQ_PASSWORD + - configMapRef: faf-player-service + secretRef: faf-player-service + usernameKey: RABBITMQ_USER + passwordKey: RABBITMQ_PASSWORD - configMapRef: faf-api secretRef: faf-api usernameKey: RABBIT_USERNAME diff --git a/infra/mariadb/values.yaml b/infra/mariadb/values.yaml index 2dd12f13..13a2df52 100644 --- a/infra/mariadb/values.yaml +++ b/infra/mariadb/values.yaml @@ -37,6 +37,12 @@ databasesAndUsers: usernameKey: DATABASE_USER passwordKey: DATABASE_PASSWORD + - configMapRef: faf-player-service + secretRef: faf-player-service + databaseKey: DATABASE_NAME + usernameKey: DATABASE_USER + passwordKey: DATABASE_PASSWORD + # League service database - configMapRef: faf-api secretRef: faf-api From c0a20c6e29b1c562aa1da809ed793c554ba50031 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 31 Oct 2026 17:18:25 +0000 Subject: [PATCH 2/2] Update Helm release traefik to v39.0.9 --- cluster/traefik/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cluster/traefik/Chart.yaml b/cluster/traefik/Chart.yaml index 1ace7061..dd260fc8 100644 --- a/cluster/traefik/Chart.yaml +++ b/cluster/traefik/Chart.yaml @@ -3,5 +3,5 @@ name: traefik version: 1.0.0 dependencies: - name: traefik - version: 39.0.5 + version: 39.0.9 repository: https://traefik.github.io/charts