Update backend local development docs (#884)
* docs refactor: - add local deployment guide local-dev-setup.md - deploy/local.md focuses only on deployment with latest release, links to local-dev-setup.md for local image deployment - add nav to mkdocs.yml to ensure correct order of pages - update microk8s specific info - update minikube specific info --------- Co-authored-by: Ilya Kreymer <ikreymer@gmail.com>
This commit is contained in:
		
							parent
							
								
									4852532866
								
							
						
					
					
						commit
						965aa7ff90
					
				| @ -1,6 +1,6 @@ | ||||
| # Local Deployment | ||||
| 
 | ||||
| To just test out Browsertrix Cloud on your local machine, you'll first need to have a working Kubernetes cluster. | ||||
| To try out the latest release of Browsertrix Cloud on your local machine, you'll first need to have a working Kubernetes cluster. | ||||
| 
 | ||||
| ## Installing Kubernetes | ||||
| 
 | ||||
| @ -24,7 +24,6 @@ Here are some environment specific instructions for setting up a local cluster f | ||||
| 
 | ||||
|     4. Install [Helm](https://helm.sh/), which can be installed with `brew install helm` (Mac) or `choco install kubernetes-helm` (Windows) or following some of the [other install options](https://helm.sh/docs/intro/install/) | ||||
| 
 | ||||
| 
 | ||||
| ??? info "MicroK8S (recommended for Ubuntu)" | ||||
| 
 | ||||
|     For Ubuntu and other linux distros, we recommend using MicroK8S for both local deployment and production. | ||||
| @ -39,13 +38,11 @@ Here are some environment specific instructions for setting up a local cluster f | ||||
| 
 | ||||
| ??? info "Minikube (Windows, Mac or Linux)" | ||||
| 
 | ||||
|     1. Install Minikube [following installation instructions](https://minikube.sigs.k8s.io/docs/start/), eg. `brew install minikube` | ||||
|     1. Install Minikube [following installation instructions](https://minikube.sigs.k8s.io/docs/start/), eg. `brew install minikube`. | ||||
|        Note that Minikube also requires Docker or another container management system to be installed as well. | ||||
| 
 | ||||
|     2. Install [Helm](https://helm.sh/), which can be installed with `brew install helm` (Mac) or `choco install kubernetes-helm` (Windows) or following some of the [other install options](https://helm.sh/docs/intro/install/) | ||||
| 
 | ||||
|     3. Run the Helm command as described above. | ||||
| 
 | ||||
|     4. Mac Only: To access Browsertrix Cloud running in minikube on a mac, run `minikube service browsertrix-cloud-frontend --url` and then access Browsertrix Cloud via the provided URL. This is needed as Browsertrix Cloud is running in a VM. | ||||
| 
 | ||||
| ??? info "K3S (recommended for non-Ubuntu Linux)" | ||||
| 
 | ||||
| @ -55,15 +52,27 @@ Here are some environment specific instructions for setting up a local cluster f | ||||
| 
 | ||||
|     3. Set `KUBECONFIG` to point to the config for K3S: `export KUBECONFIG=/etc/rancher/k3s/k3s.yaml` to ensure Helm will use the correct version. | ||||
| 
 | ||||
| 
 | ||||
| ## Launching Browsertrix Cloud with Helm | ||||
| 
 | ||||
| Once you have a running Kubernetes cluster with one of the options above, and Helm 3 installed, you can then run from the Browsertrix Cloud repo directory: | ||||
| 
 | ||||
| ```shell | ||||
| helm upgrade --install -f ./chart/values.yaml -f ./chart/examples/local-config.yaml btrix ./chart/ | ||||
| helm upgrade --install -f ./chart/values.yaml \ | ||||
| -f ./chart/examples/local-config.yaml btrix ./chart/ | ||||
| ``` | ||||
| 
 | ||||
| ??? info "MicroK8S" | ||||
| 
 | ||||
|     If using microk8s, the command will be: | ||||
| 
 | ||||
|     ```sh | ||||
|     microk8s helm3 upgrade --install -f ./chart/values.yaml \ | ||||
|     -f ./chart/examples/local-config.yaml btrix ./chart/ | ||||
|     ``` | ||||
| 
 | ||||
|     Subsequent commands will also use `microk8s helm3` instead of `helm`. | ||||
| 
 | ||||
| 
 | ||||
| The local setup includes the full Browsertrix Cloud system, with frontend, backend api, db (via MongoDB) and storage (via Minio) | ||||
| 
 | ||||
| An admin user with name `admin@example.com` and password `PASSW0RD!` will be automatically created. | ||||
| @ -72,8 +81,7 @@ This config uses the standard config (`./chart/values.yaml`) with a couple addit | ||||
| 
 | ||||
| These settings can be changed in [charts/examples/local-config.yaml](https://github.com/webrecorder/browsertrix-cloud/blob/main/chart/examples/local-config.yaml). | ||||
| 
 | ||||
| Note that the admin user and password will not be reset after creation. | ||||
| 
 | ||||
| For example, to change the default superadmin, uncomment the `superadmin` block in `local-config.yaml`, and then change the username (`admin@example.com`) and password (`PASSW0RD!`) to different values. (The admin username and password will be updated with each deployment) | ||||
| 
 | ||||
| ## Waiting for Cluster to Start | ||||
| 
 | ||||
| @ -97,6 +105,13 @@ The command will exit when all pods have been loaded, or if there is an error an | ||||
| 
 | ||||
| If the command succeeds, you should be able to access Browsertrix Cloud by loading: **[http://localhost:30870/](http://localhost:30870/)** in your browser. | ||||
| 
 | ||||
| ??? info "Minikube (on Mac)" | ||||
| 
 | ||||
|     When using Minikube on a Mac, the port will not be 30870. Instead, Minikube opens a tunnel to a random port, | ||||
|     obtained by running `minikube service browsertrix-cloud-frontend --url` in a separate terminal. | ||||
|     Use the provided URL (in the format `http://127.0.0.1:<TUNNEL_PORT>`) instead. | ||||
| 
 | ||||
| 
 | ||||
| ### Debugging Pod Issues | ||||
| 
 | ||||
| If this command fails, you can also run `kubectl get pods` to see the status of each of the pods. | ||||
| @ -125,75 +140,15 @@ To uninstall, run `helm uninstall btrix`. | ||||
| 
 | ||||
| By default, the database + storage volumes are not automatically deleted, so you can run `helm upgrade ...` again to restart the cluster in its current state. | ||||
| 
 | ||||
| To fully delete all persistent data created in the cluster, also run `kubectl delete pvc --all` after uninstalling. | ||||
| If you are upgrading from a previous version, and run into issues with `helm upgrade ...`, we recommend | ||||
| uninstalling and then re-running upgrade. | ||||
| 
 | ||||
| ## Deleting all Data | ||||
| 
 | ||||
| ## Running With Local Images | ||||
| To fully delete all persistent data (db + archives) created in the cluster, also run `kubectl delete pvc --all` after uninstalling. | ||||
| 
 | ||||
| By default, this setup will pull the latest release of Browsertrix Cloud. However, if you are developing locally, you may want to use your local images instead. | ||||
| ## Deploying for Local Development | ||||
| 
 | ||||
| First, open `./chart/examples/local-config.yaml` and add the following, which will ensure only local images are used: | ||||
| 
 | ||||
| ```yaml | ||||
| backend_pull_policy: "Never" | ||||
| frontend_pull_policy: "Never" | ||||
| ``` | ||||
| 
 | ||||
| Now, rebuild either the backend and/or frontend images locally. The exact process depends on the Kubernetes deployment in use: | ||||
| 
 | ||||
| 
 | ||||
| ??? info "Docker Desktop" | ||||
| 
 | ||||
|     Rebuild the local images by running `./scripts/build-backend.sh` and/or `./scripts/build-frontend.sh` scripts to build the images in the local Docker. | ||||
| 
 | ||||
| 
 | ||||
| ??? info "MicroK8S" | ||||
| 
 | ||||
|     MicroK8s uses its own container registry, running on port 32000.  | ||||
| 
 | ||||
|     1. Set `export REGISTRY=localhost:32000/` and then run `./scripts/build-backend.sh` and/or `./scripts/build-frontend.sh` to rebuild the images into the MicroK8S registry.  | ||||
| 
 | ||||
|     2. In `./chart/examples/local-config.yaml`, uncomment out one or both of the following lines to use the local images: | ||||
| 
 | ||||
|     ```yaml | ||||
|     backend_image: "localhost:32000/webrecorder/browsertrix-backend:latest" | ||||
|     frontend_image: "localhost:32000/webrecorder/browsertrix-frontend:latest" | ||||
|     ``` | ||||
| 
 | ||||
| ??? info "Minikube"  | ||||
| 
 | ||||
|     Minikube comes with its own image builder to update the images used in Minikube. | ||||
| 
 | ||||
|     To build the backend image, run: | ||||
| 
 | ||||
|     ```shell | ||||
|     minikube image build -t webrecorder/browsertrix-backend:latest ./backend | ||||
|     ``` | ||||
| 
 | ||||
|     To build a local frontend image, run: | ||||
|      | ||||
|     ```shell | ||||
|     minikube image build -t webrecorder/browsertrix-frontend:latest ./frontend | ||||
|     ``` | ||||
| 
 | ||||
| ??? info "K3S" | ||||
| 
 | ||||
|     K3S uses `containerd` by default. To use local images, they need to be imported after rebuilding. | ||||
| 
 | ||||
|     1. Rebuild the images with Docker by running by running `./scripts/build-backend.sh` and/or `./scripts/build-frontend.sh` scripts. (Requires Docker to be installed as well). | ||||
| 
 | ||||
|     2. Serializer the images to .tar: | ||||
| 
 | ||||
|     ```shell | ||||
|     docker save webrecorder/browsertrix-backend:latest > ./backend.tar | ||||
|     docker save webrecorder/browsertrix-frontend:latest > ./frontend.tar | ||||
|     ``` | ||||
| 
 | ||||
|     3. Import images into k3s containerd: | ||||
| 
 | ||||
|     ```shell | ||||
|     k3s ctr images import --base-name webrecorder/browsertrix-backend:latest ./backend.tar | ||||
|     k3s ctr images import --base-name webrecorder/browsertrix-frontend:latest ./frontend.tar | ||||
|     ``` | ||||
| 
 | ||||
| Once the images have been built and any other config changes made per the above instructions, simply run the `helm upgrade...` command again to restart with local images. | ||||
| These instructions are intended for deploying the cluster from the latest release. | ||||
| See [setting up cluster for local development](../develop/local-dev-setup.md) for additional customizations related to | ||||
| developing Browsertrix Cloud and deploying from local images. | ||||
|  | ||||
| @ -1,7 +1,15 @@ | ||||
| # Running the Frontend | ||||
| # Running the Frontend for Development | ||||
| 
 | ||||
| This guide explains how to deploy an instance of the Browsertrix Cloud frontend for development. | ||||
| The frontend can connect to a Browsertrix Cloud API backend running locally or remotely. | ||||
| 
 | ||||
| This setup may be ideal for rapid development on the frontend, as it will allow running the frontend | ||||
| via `yarn` instead of the frontend image deployed in Kubernetes. | ||||
| 
 | ||||
| ## Requirements | ||||
| 
 | ||||
| This setup does require a Browsertrix Cloud API backend already in a Kubernetes cluster. | ||||
| 
 | ||||
| Refer to [setup for local deployment](./local-dev-setup.md) for additional details on this setup. | ||||
| 
 | ||||
| ## Quickstart | ||||
| 
 | ||||
| @ -31,6 +39,15 @@ If connecting to a local deployment cluster, set API_BASE_URL to: | ||||
| API_BASE_URL=http://localhost:30870/api | ||||
| ``` | ||||
| 
 | ||||
| ??? info "Minikube (on Mac)" | ||||
| 
 | ||||
|     When using Minikube on a Mac, the port will not be 30870. Instead, Minikube opens a tunnel to a random port, | ||||
|     obtained by running `minikube service browsertrix-cloud-frontend --url` in a separate terminal. | ||||
| 
 | ||||
|     Set API_BASE_URL to provided URL instead, eg. `API_BASE_URL=http://127.0.0.1:<TUNNEL_PORT>` | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| Start the dev server: | ||||
| 
 | ||||
| ```sh | ||||
|  | ||||
| @ -1,13 +1,24 @@ | ||||
| --- | ||||
| hide: | ||||
|     - toc | ||||
| --- | ||||
| 
 | ||||
| # Developing Browsertrix Cloud | ||||
| 
 | ||||
| Browsertrix Cloud consists of a Python-based backend and TypeScript-based frontend. | ||||
| 
 | ||||
| To develop Browsertrix Cloud, the system must [first be deployed locally](../deploy/local.md) in a Kubernetes cluster. | ||||
| 
 | ||||
| The deployment can then be [further customized for local development](./local-dev-setup.md). | ||||
| 
 | ||||
| ### Backend | ||||
| 
 | ||||
| The backend is an API-only system, using the FastAPI framework. The latest API reference is available | ||||
| under ./api of a running cluster. | ||||
| 
 | ||||
| *TODO Add additional info here* | ||||
| At this time, the backend must be deployed in the Kubernetes cluster. | ||||
| 
 | ||||
| <!-- *TODO Add additional info here* --> | ||||
| 
 | ||||
| ### Frontend | ||||
| 
 | ||||
| @ -17,5 +28,4 @@ The static build of the frontend is bundled with nginx, but the frontend can be | ||||
| 
 | ||||
| See [Running Frontend](./frontend-dev) for more details. | ||||
| 
 | ||||
| *TODO Add additional info here* | ||||
| 
 | ||||
| <!-- *TODO Add additional info here* --> | ||||
|  | ||||
							
								
								
									
										136
									
								
								docs/develop/local-dev-setup.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								docs/develop/local-dev-setup.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,136 @@ | ||||
| # Setup for Local Development | ||||
| 
 | ||||
| ## Installation | ||||
| 
 | ||||
| First, see our [Local Deployment guide](../deploy/local.md#installing-kubernetes) for instructions on how to install the latest release with [Kubernetes](https://kubernetes.io/) with [Helm 3](https://v3.helm.sh/). | ||||
| 
 | ||||
| ## Local Dev Configuration | ||||
| 
 | ||||
| The local deployment guide explains how to deploy Browsertrix Cloud with latest published images. | ||||
| 
 | ||||
| However, if you are developing locally, you will need to use your local images instead. | ||||
| 
 | ||||
| We recommend the following setup: | ||||
| 
 | ||||
| 1. Copy the provided `./chart/examples/local-config.yaml` Helm configuration file to a separate file `local.yaml`, | ||||
| so that local changes to it will not be accidentally committed to git. From the root directory: | ||||
| ```sh | ||||
| cp ./chart/examples/local-config.yaml ./chart/local.yaml | ||||
| ``` | ||||
| 
 | ||||
| 2. Uncomment pull policies in `./chart/local.yaml`, which will ensure the local images are used: | ||||
| ```yaml | ||||
| backend_pull_policy: 'Never' | ||||
| frontend_pull_policy: 'Never' | ||||
| ``` | ||||
| 
 | ||||
|     ??? info "MicroK8S" | ||||
| 
 | ||||
|         For microk8s, the pull policies actually need to be set to `IfNotPresent` instead of `Never`: | ||||
| 
 | ||||
|         ```yaml | ||||
|         backend_pull_policy: 'IfNotPresent' | ||||
|         frontend_pull_policy: 'IfNotPresent' | ||||
|         ``` | ||||
| 
 | ||||
|         This will ensure images are pulled from the MicroK8S registry (configured in next section). | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 3. Build the local backend and frontend images. The exact process depends on the Kubernetes environment you've selected in your initial deployment. Environment specific build instructions are as follows: | ||||
| 
 | ||||
|     ??? info "Docker Desktop" | ||||
| 
 | ||||
|         Rebuild the local images by running `./scripts/build-backend.sh` and/or `./scripts/build-frontend.sh` scripts to build the images in the local Docker. | ||||
| 
 | ||||
|     ??? info "MicroK8S" | ||||
| 
 | ||||
|         MicroK8s uses its own container registry, running on port 32000. | ||||
| 
 | ||||
|         1. Ensure the registry add-on is enabled by running `microk8s enable registry` | ||||
| 
 | ||||
|         2. Set `export REGISTRY=localhost:32000/` and then run `./scripts/build-backend.sh` and/or `./scripts/build-frontend.sh` to rebuild the images into the MicroK8S registry. | ||||
| 
 | ||||
|         3. In `./chart/local.yaml`, also uncomment the following lines to use the local images: | ||||
|         ```yaml | ||||
|         backend_image: "localhost:32000/webrecorder/browsertrix-backend:latest" | ||||
|         frontend_image: "localhost:32000/webrecorder/browsertrix-frontend:latest" | ||||
|         ``` | ||||
| 
 | ||||
|     ??? info "Minikube" | ||||
| 
 | ||||
|         Minikube comes with its own image builder to update the images used in Minikube. | ||||
| 
 | ||||
|         To build the backend image, run: | ||||
| 
 | ||||
|         ```shell | ||||
|         minikube image build -t webrecorder/browsertrix-backend:latest ./backend | ||||
|         ``` | ||||
| 
 | ||||
|         To build a local frontend image, run: | ||||
| 
 | ||||
|         ```shell | ||||
|         minikube image build -t webrecorder/browsertrix-frontend:latest ./frontend | ||||
|         ``` | ||||
| 
 | ||||
|     ??? info "K3S" | ||||
| 
 | ||||
|         K3S uses `containerd` by default. To use local images, they need to be imported after rebuilding. | ||||
| 
 | ||||
|         1. Rebuild the images with Docker by running by running `./scripts/build-backend.sh` and/or `./scripts/build-frontend.sh` scripts. (Requires Docker to be installed as well). | ||||
| 
 | ||||
|         2. Serializer the images to .tar: | ||||
|         ```shell | ||||
|         docker save webrecorder/browsertrix-backend:latest > ./backend.tar | ||||
|         docker save webrecorder/browsertrix-frontend:latest > ./frontend.tar | ||||
|         ``` | ||||
| 
 | ||||
|         3. Import images into k3s containerd: | ||||
|         ```shell | ||||
|         k3s ctr images import --base-name webrecorder/browsertrix-backend:latest ./backend.tar | ||||
|         k3s ctr images import --base-name webrecorder/browsertrix-frontend:latest ./frontend.tar | ||||
|         ``` | ||||
| 
 | ||||
| 4. If you'd like to change other options, you can uncomment them as needed in `./chart/local.yaml` | ||||
| or add additional overrides from `./chart/values.yaml` | ||||
| 
 | ||||
|     For example, to set a superuser email to `my_super_user_email@example.com` and password to `MySecretPassword!`, uncomment that block and set: | ||||
| ```yaml | ||||
| superuser: | ||||
|   # set this to enable a superuser admin | ||||
|   email: my_super_user_email@example.com | ||||
| 
 | ||||
|   # optional: if not set, automatically generated | ||||
|   # change or remove this | ||||
|   password: MySecretPassword! | ||||
| ``` | ||||
| 
 | ||||
| 5. Once the images have been built and config changes made in `./chart/local.yaml`,  | ||||
| 
 | ||||
|     the cluster can be re-deployed by running: | ||||
| ```sh | ||||
| helm upgrade --install -f ./chart/values.yaml \ | ||||
| -f ./chart/local.yaml btrix ./chart/ | ||||
| ``` | ||||
| 
 | ||||
|     ??? info "MicroK8S" | ||||
| 
 | ||||
|         If using microk8s, the commend will be: | ||||
| 
 | ||||
|         ```sh | ||||
|         microk8s helm3 upgrade --install -f ./chart/values.yaml -f ./chart/local.yaml btrix ./chart/ | ||||
|         ``` | ||||
| 
 | ||||
| Refer back to the [Local Development guide](../deploy/local.md#waiting-for-cluster-to-start) for additional information on running and debugging your local cluster. | ||||
| 
 | ||||
| ## Update the Images | ||||
| 
 | ||||
| After making any changes to backend code (in `./backend`) or frontend code (in `./frontend`), | ||||
| you'll need to rebuild the images as specified above, before running `helm upgrade ...` to re-deploy. | ||||
| 
 | ||||
| Changes to settings in `./chart/local.yaml` can be deployed with `helm upgrade ...` directly. | ||||
| 
 | ||||
| ## Deploying Frontend Only | ||||
| 
 | ||||
| If you are just making changes to the frontend, you can also [deploy the frontend separately](frontend-dev.md) | ||||
| using a dev server for quicker iteration. | ||||
							
								
								
									
										17
									
								
								mkdocs.yml
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								mkdocs.yml
									
									
									
									
									
								
							| @ -38,7 +38,22 @@ theme: | ||||
|     edit: bootstrap/pencil | ||||
|     view: bootstrap/eye | ||||
| 
 | ||||
| 
 | ||||
| nav: | ||||
|   - index.md | ||||
|   - Deploy: | ||||
|       - deploy/index.md | ||||
|       - deploy/local.md | ||||
|       - deploy/production.md | ||||
|       - Ansible: | ||||
|         - deploy/ansible/digitalocean.md | ||||
|         - deploy/ansible/microk8s.md | ||||
|   - Develop: | ||||
|       - develop/index.md | ||||
|       - develop/local-dev-setup.md | ||||
|       - develop/frontend-dev.md | ||||
|       - develop/docs.md | ||||
|   - User Guide: | ||||
|       - user-guide/index.md | ||||
| 
 | ||||
| markdown_extensions: | ||||
|   - toc: | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user