Kubernetes has become the most popular way to deploy, run and manage containers in production. Both Google Cloud Platform, Microsoft Azure and Amazon Web Services provide managed Kubernetes environment.
The official API Platform distribution contains a built-in Helm (the k8s package manager) chart to deploy in a wink on any of these platforms.
gcloud config get-value core/project
helm repo update
docker build -t gcr.io/test-api-platform/php -t gcr.io/test-api-platform/php:latest api --target api_platform_php
docker build -t gcr.io/test-api-platform/nginx -t gcr.io/test-api-platform/nginx:latest api --target api_platform_nginx
docker build -t gcr.io/test-api-platform/varnish -t gcr.io/test-api-platform/varnish:latest api --target api_platform_varnish
Docker client versions <= 18.03
:
gcloud docker -- push gcr.io/test-api-platform/php
gcloud docker -- push gcr.io/test-api-platform/nginx
gcloud docker -- push gcr.io/test-api-platform/varnish
Docker client versions > 18.03
:
gcloud auth configure-docker
docker push gcr.io/test-api-platform/php
docker push gcr.io/test-api-platform/nginx
docker push gcr.io/test-api-platform/varnish
Firstly you need to update helm dependencies by running:
helm dependency update ./api/helm/api
You are now ready to deploy the API!
Deploy your API to the container:
helm install ./api/helm/api --namespace=baz --name baz \
--set php.repository=gcr.io/test-api-platform/php \
--set nginx.repository=gcr.io/test-api-platform/nginx \
--set secret=MyAppSecretKey \
--set postgresql.postgresPassword=MyPgPassword \
--set postgresql.persistence.enabled=true \
--set corsAllowOrigin='^https?://[a-z\]*\.mywebsite.com$'
If you prefer to use a managed DBMS like Heroku Postgres or Google Cloud SQL (recommended):
helm install --name api ./api/helm/api \
# ...
--set postgresql.enabled=false \
--set postgresql.url=pgsql://username:password@host/database?serverVersion=9.6
If you want to use a managed Varnish such as Fastly for the invalidation cache mechanism provided by API Platform:
helm install --name api ./api/helm/api \
# ...
--set varnish.enabled=false \
--set varnish.url=https://myvarnish.com
Finally, build the client
and admin
JavaScript apps and deploy them on a static
website hosting service.
Before running your application for the first time, be sure to create the database schema:
PHP_POD=$(kubectl --namespace=bar get pods -l app=php -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace=bar exec -it $PHP_POD -- bin/console doctrine:schema:create
We noticed that some tiller RBAC trouble occurred. You can usually resolve it by running:
kubectl create serviceaccount --namespace kube-system tiller
serviceaccount "tiller" created
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
clusterrolebinding "tiller-cluster-rule" created
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
deployment "tiller-deploy" patched
Please, see the related issue for further details / information. You can also take a look at the related documentation
Made with love by
Les-Tilleuls.coop can help you design and develop your APIs and web projects, and train your teams in API Platform, Symfony, Next.js, Kubernetes and a wide range of other technologies.
Learn more