Skip to main content

symfony

Helm chart for Symfony PHP applications.

  • Workload kind: StatefulSet
  • Container port: 80
  • Probes: required, always on (/health startup + liveness, /ready readiness)
  • Init container: runs ./.container-init.sh if present in the image
  • Migrations: component-tasks.migrations.commands run once per deploy as an ArgoCD Sync hook Job

Dependencies​

Defaults worth knowing​

replicaCount: 2
terminationGracePeriodSeconds: 30
container:
port: 80
probes:
startup: { path: /health, periodSeconds: 2, failureThreshold: 60 }
readiness: { path: /ready, periodSeconds: 5, failureThreshold: 3 }
liveness: { path: /health, periodSeconds: 10, failureThreshold: 3 }

Probes are not toggleable on this chart — if your image doesn't expose them, use php-generic instead.

Minimum project values​

global:
projectSlug: my-project
environmentSlug: staging
image:
repository: registry.gitlab.com/onyourmarks/k8s/my-project/app
tag: abc123-staging

component-traefik-ingress:
enabled: true
hosts:
- host: my-project.staging.k8s.instance.onyourmarks.tech
paths: [{ path: /, pathType: Prefix }]
tls:
- secretName: traefik-ingress-tls
hosts: [my-project.staging.k8s.instance.onyourmarks.tech]

component-database:
enabled: true

Shared volumes (RWX)​

Cross-pod shared storage is opt-in via global.sharedVolumes. Each entry creates an nfs-backed ReadWriteMany PVC and mounts one or more paths from it into the app container.

global:
sharedVolumes:
- name: shared
size: 2Gi
mounts:
- path: /var/app/var/cache
subPath: cache
- path: /var/app/public/cache
subPath: public-cache

See component-shared-volume for the full schema and Shared storage for cluster-level context.

Migrations​

Database migrations run once per deploy as an ArgoCD Sync hook Job, after the app secrets and database are ready and before any new pod of the app, its workers or its cron jobs starts:

component-tasks:
migrations:
commands:
- ["bin/console", "doctrine:migrations:migrate", "--no-interaction", "--allow-no-migration"]

.container-init.sh then holds only per-pod steps, or goes away entirely. Fields and behaviour: component-tasks → Migrations.