stack-orchestrator/docs/webapp.md

2.9 KiB

Building and Running Webapps

It is possible to build and run Next.js webapps using the build-webapp and run-webapp subcommands.

To make it easier to build once and deploy into different environments and with different configuration, compilation and static page generation are separated in the build-webapp and run-webapp steps.

This offers much more flexibilty than standard Next.js build methods, since any environment variables accessed via process.env, whether for pages or for API, will have values drawn from their runtime deployment environment, not their build environment.

Building

Building usually requires no additional configuration. By default, the Next.js version specified in package.json is used, and either yarn or npm will be used automatically depending on which lock files are present. These can be overidden with the build arguments CERC_NEXT_VERSION and CERC_BUILD_TOOL respectively. For example: --extra-build-args "--build-arg CERC_NEXT_VERSION=13.4.12"

Example:

$ cd ~/cerc
$ git clone git@git.vdb.to:cerc-io/test-progressive-web-app.git
$ laconic-so build-webapp --source-repo ~/cerc/test-progressive-web-app
...

Built host container for ~/cerc/test-progressive-web-app with tag:

    cerc/test-progressive-web-app:local

To test locally run:

    laconic-so run-webapp --image cerc/test-progressive-web-app:local --env-file /path/to/environment.env

Running

With run-webapp a new container will be launched on the local machine, with runtime configuration provided by --env-file (if specified) and published on an available port. Multiple instances can be launched with different configuration.

Example:

# Production env
$ laconic-so run-webapp --image cerc/test-progressive-web-app:local --env-file /path/to/environment/production.env

Image: cerc/test-progressive-web-app:local
ID: 4c6e893bf436b3e91a2b92ce37e30e499685131705700bd92a90d2eb14eefd05
URL: http://localhost:32768

# Dev env
$ laconic-so run-webapp --image cerc/test-progressive-web-app:local --env-file /path/to/environment/dev.env

Image: cerc/test-progressive-web-app:local
ID: 9ab96494f563aafb6c057d88df58f9eca81b90f8721a4e068493a289a976051c
URL: http://localhost:32769

Deploying

Use the subcommand deploy-webapp create to make a deployment directory that can be subsequently deployed to a Kubernetes cluster. Example commands are shown below, assuming that the webapp container image cerc/test-progressive-web-app:local has already been built:

$ laconic-so deploy-webapp create --kube-config ~/kubectl/k8s-kubeconfig.yaml --image-registry registry.digitalocean.com/laconic-registry --deployment-dir webapp-k8s-deployment --image cerc/test-progressive-web-app:local --url https://test-pwa-app.hosting.laconic.com/ --env-file test-webapp.env
$ laconic-so deployment --dir webapp-k8s-deployment push-images
$ laconic-so deployment --dir webapp-k8s-deployment start