Skip to content

Latest commit

 

History

History
67 lines (47 loc) · 3.29 KB

kubernetes.md

File metadata and controls

67 lines (47 loc) · 3.29 KB

Deploying to a Kubernetes Cluster

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.

Preparing Your Cluster and Your Local Machine

  1. Create a Kubernetes cluster on your preferred Cloud provider or install Kubernetes locally on your servers
  2. Install Helm locally and on your cluster following their documentation
  3. Be sure to be connected to the right Kubernetes container
  4. Update the Helm repo: helm repo update

Creating and Publishing the Docker Images

  1. Build the PHP and Nginx Docker images:

     docker build -t gcr.io/test-api-platform/php -t gcr.io/test-api-platform/php:latest api
     docker build -t gcr.io/test-api-platform/nginx -t gcr.io/test-api-platform/nginx:latest -f api/Dockerfile.nginx api
     docker build -t gcr.io/test-api-platform/varnish -t gcr.io/test-api-platform/varnish:latest -f api/Dockerfile.varnish api
    
  2. Push your images to your Docker registry, example with Google Container Registry:

     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
    

Deploying

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.

Initializing the Database

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