{"id":13466456,"url":"https://github.com/camptocamp/terraboard","last_synced_at":"2025-05-14T06:12:22.413Z","repository":{"id":37664921,"uuid":"97692739","full_name":"camptocamp/terraboard","owner":"camptocamp","description":":earth_africa: :clipboard:  A web dashboard to inspect Terraform States ","archived":false,"fork":false,"pushed_at":"2025-03-13T01:01:05.000Z","size":10876,"stargazers_count":1967,"open_issues_count":10,"forks_count":166,"subscribers_count":38,"default_branch":"master","last_synced_at":"2025-04-11T00:48:34.410Z","etag":null,"topics":["aws","devops","devops-tools","diff","go","infrastructure-as-code","terraform","terraform-states","versioning","web-dashboard"],"latest_commit_sha":null,"homepage":"https://terraboard.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/camptocamp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-07-19T08:31:38.000Z","updated_at":"2025-04-08T12:46:01.000Z","dependencies_parsed_at":"2023-01-27T21:46:10.235Z","dependency_job_id":"fa8fcf27-76d3-47a8-ae98-f71b47b7b551","html_url":"https://github.com/camptocamp/terraboard","commit_stats":{"total_commits":569,"total_committers":40,"mean_commits":14.225,"dds":"0.28119507908611596","last_synced_commit":"6f6b6b60f5f05defcf1792aca5278824305ca76e"},"previous_names":[],"tags_count":42,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camptocamp%2Fterraboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camptocamp%2Fterraboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camptocamp%2Fterraboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camptocamp%2Fterraboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/camptocamp","download_url":"https://codeload.github.com/camptocamp/terraboard/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254080453,"owners_count":22011407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","devops","devops-tools","diff","go","infrastructure-as-code","terraform","terraform-states","versioning","web-dashboard"],"created_at":"2024-07-31T15:00:44.454Z","updated_at":"2025-05-14T06:12:22.364Z","avatar_url":"https://github.com/camptocamp.png","language":"Go","readme":"\u003ch1 align=\"center\"\u003eTerraboard\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Terraboard logo\" height=\"200\" src=\"logo/terraboard_logo.png\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e🌍 📋 A web dashboard to inspect Terraform States\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://hub.docker.com/r/camptocamp/terraboard/\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Docker Pulls\" src=\"https://img.shields.io/docker/pulls/camptocamp/terraboard.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/camptocamp/terraboard\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Go Report Card\" src=\"https://goreportcard.com/badge/github.com/camptocamp/terraboard\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://gitter.im/camptocamp/terraboard\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Gitter\" src=\"https://img.shields.io/gitter/room/camptocamp/terraboard.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/camptocamp/terraboard/actions\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Build Status\" src=\"https://github.com/camptocamp/terraboard/workflows/Build/badge.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://coveralls.io/github/camptocamp/terraboard?branch=master\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Coverage Status\" src=\"https://coveralls.io/repos/github/camptocamp/terraboard/badge.svg?branch=master\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"http://www.camptocamp.com\" target=\"_blank\"\u003e\n    \u003cimg alt=\"By Camptocamp\" src=\"https://img.shields.io/badge/by-camptocamp-fb7047.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://pkg.go.dev/github.com/camptocamp/terraboard\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Documentation\" src=\"https://pkg.go.dev/badge/github.com/camptocamp/terraboard\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003eWebsite: \u003ca href=\"https://terraboard.io\"\u003ehttps://terraboard.io\u003c/a\u003e\u003c/p\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\u003cstrong\u003eCaution: Terraboard's Docker registry was migrated from Dockerhub to GHCR! All new tags will be now pushed \u003ca href=\"https://github.com/camptocamp/terraboard/pkgs/container/terraboard\"\u003ehere\u003c/a\u003e. You can still access to old tags on the legacy Dockerhub repository.\u003c/strong\u003e\u003c/p\u003e\n\n\u003cdetails\u003e\u003csummary\u003eTable of content\u003c/summary\u003e\n\n- [What is it?](#what-is-it)\n  - [Overview](#overview)\n  - [Search](#search)\n  - [State](#state)\n  - [Compare](#compare)\n  - [Requirements](#requirements)\n    - [AWS S3 (state) + DynamoDB (lock)](#aws-s3-state--dynamodb-lock)\n    - [Terraform Cloud](#terraform-cloud)\n- [Configuration](#configuration)\n  - [Multiple buckets/providers](#multiple-bucketsproviders)\n  - [Available parameters](#available-parameters)\n    - [Application Options](#application-options)\n    - [General Provider Options](#general-provider-options)\n    - [Logging Options](#logging-options)\n    - [Database Options](#database-options)\n    - [AWS (and S3 compatible providers) Options](#aws-and-s3-compatible-providers-options)\n    - [S3 Options](#s3-options)\n    - [Terraform Enterprise Options](#terraform-enterprise-options)\n    - [Google Cloud Platform Options](#google-cloud-platform-options)\n    - [GitLab Options](#gitlab-options)\n    - [Web](#web)\n    - [Help Options](#help-options)\n- [Push plans to Terraboard](#push-plans-to-terraboard)\n- [Use with Docker](#use-with-docker)\n  - [Docker-compose](#docker-compose)\n  - [Docker command line](#docker-command-line)\n- [Use with Kubernetes](#use-with-kubernetes)\n- [Use with Rancher](#use-with-rancher)\n- [Authentication and base URL](#authentication-and-base-url)\n- [Install from source](#install-from-source)\n- [Compatibility Matrix](#compatibility-matrix)\n- [Development](#development)\n  - [Architecture](#architecture)\n    - [A server process](#a-server-process)\n    - [A web UI](#a-web-ui)\n  - [Testing](#testing)\n  - [Contributing](#contributing)\n\n\u003c/details\u003e\n\n## What is it?\n\nTerraboard is a web dashboard to visualize and query\n[Terraform](https://terraform.io) states. It currently features:\n\n- an overview page listing the most recently updated state files with their\n  activity\n- a state page with state file details, including versions and resource\n  attributes\n- a search interface to query resources by type, name or attributes\n- a diff interface to compare state between versions\n\nIt currently supports several remote state backend providers:\n\n- [AWS S3 (state) + DynamoDB (lock)](https://www.terraform.io/docs/backends/types/s3.html)\n- [S3 compatible backends (ex: MinIO)](https://min.io/)\n- [Google Cloud Storage](https://www.terraform.io/docs/backends/types/gcs.html)\n- [Terraform Cloud (remote)](https://www.terraform.io/docs/backends/types/remote.html)\n- [GitLab](https://docs.gitlab.com/ee/user/infrastructure/terraform_state.html)\n\nTerraboard is now able to handle multiple buckets/providers configuration! 🥳\nCheck *configuration* section for more details.\n\n### Overview\n\nThe overview presents all the state files in the S3 bucket, by most recent\nmodification date.\n\n![Screenshot Overview](screenshots/main.png)\n\n\n### Search\n\nThe search view allows to find resources by various criteria.\n\n![Screenshot Search](screenshots/search.png)\n\n\n### State\n\nThe state view presents details of a Terraform state at a given version.\n\n![Screenshot State](screenshots/state.png)\n\n\n### Compare\n\nFrom the state view, you can compare the current state version with another\nversion.\n\n![Screenshot Compare](screenshots/compare.png)\n\n\n### Requirements\n\nIndependently of the location of your statefiles, Terraboard needs to store an internal version of its dataset. For this purpose it requires a PostgreSQL database.\nData resiliency is not paramount though as this dataset can be rebuilt upon your statefiles at anytime.\n#### AWS S3 (state) + DynamoDB (lock)\n\n- A **versioned** S3 bucket name with one or more Terraform states, named with a `.tfstate` suffix\n- AWS credentials with the following IAM permissions over the bucket:\n  - `s3:GetObject`\n  - `s3:ListBucket`\n  - `s3:ListBucketVersions`\n  - `s3:GetObjectVersion`\n- If you want to retrieve lock states [from a dynamoDB table](https://www.terraform.io/docs/backends/types/s3.html#dynamodb_table), you need to make sure the provided AWS credentials have `dynamodb:Scan` access to that table.\n#### Terraform Cloud\n\n- Account on [Terraform Cloud](https://app.terraform.io/)\n- Existing organization\n- Token assigned to an organization\n\n## Configuration\n\nTerraboard currently supports configuration in three different ways:\n\n1. Environment variables **(only usable for single provider configuration)**\n2. CLI parameters **(only usable for single provider configuration)**\n3. Configuration file (YAML). A configuration file example can be found in the root directory of this repository and in the `test/` subdirectory.\n\n**Important: all flags/environment variables related to the providers settings aren't compatible with multi-provider configuration! Instead, you must use the YAML config file to be able to configure multiples buckets/providers. YAML config is able to load values from environments variables.**\n\nThe precedence of configurations is as described below.\n\n### Multiple buckets/providers\n\nIn order for Terraboard to import states from multiples buckets or even providers, you must use the YAML configuration method:\n\n- Set the `CONFIG_FILE` environment variable or the `-c`/`--config-file` flag to point to a valid YAML config file.\n- In the YAML file, specify your desired providers configuration. For example with two MinIO buckets (using the AWS provider with compatible mode):\n\n```yaml\n# Needed since MinIO doesn't support versioning or locking\nprovider:\n  no-locks: true\n  no-versioning: true\n\naws:\n  - endpoint: http://minio:9000/\n    region: ${AWS_DEFAULT_REGION}\n    s3:\n      - bucket: test-bucket\n        force-path-style: true\n        file-extension:\n          - .tfstate\n\n  - endpoint: http://minio:9000/\n    region: eu-west-1\n    s3:\n      - bucket: test-bucket2\n        force-path-style: true\n        file-extension:\n          - .tfstate\n```\n\nIn the case of AWS, don't forget to set the `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` environment variables.\n\nThat's it! Terraboard will now fetch these two buckets on DB refresh. You can also mix providers like AWS and Gitlab or anything else.\nYou can find a ready-to-use Docker example with two *MinIO* buckets in the `test/multiple-minio-buckets/` sub-folder.\n\n### Available parameters\n\n#### Application Options\n\n- `-V`, `--version` Display version.\n- `-c`, `--config-file` \u003cdefault: *$CONFIG_FILE*\u003e Config File path\n  - Env: *CONFIG_FILE*\n\n#### General Provider Options\n\n- `--no-versioning` \u003cdefault: *$TERRABOARD_NO_VERSIONING*\u003e Disable versioning support from Terraboard (useful for S3 compatible providers like MinIO)\n  - Env: *TERRABOARD_NO_VERSIONING*\n  - Yaml: *provider.no-versioning*\n- `--no-locks` \u003cdefault: *$TERRABOARD_NO_LOCKS*\u003e Disable locks support from Terraboard (useful for S3 compatible providers like MinIO)\n  - Env: *TERRABOARD_NO_LOCKS*\n  - Yaml: *provider.no-locks*\n\n#### Logging Options\n\n- `-l`, `--log-level` \u003cdefault: *\"info\"*\u003e Set log level ('debug', 'info', 'warn', 'error', 'fatal', 'panic').\n  - Env: *TERRABOARD_LOG_LEVEL*\n  - Yaml: *log.level*\n- `--log-format` \u003cdefault: *\"plain\"*\u003e Set log format ('plain', 'json').\n  - Env: *TERRABOARD_LOG_FORMAT*\n  - Yaml: *log.format*\n\n#### Database Options\n\n- `--db-host` \u003cdefault: *\"db\"*\u003e Database host.\n  - Env: *DB_HOST*\n  - Yaml: *database.host*\n- `--db-port` \u003cdefault: *\"5432\"*\u003e Database port.\n  - Env: *DB_PORT*\n  - Yaml: *database.port*\n- `--db-user` \u003cdefault: *\"gorm\"*\u003e Database user.\n  - Env: *DB_USER*\n  - Yaml: *database.user*\n- `--db-password` \u003cdefault: *$DB_PASSWORD*\u003e Database password.\n  - Env: *DB_PASSWORD*\n  - Yaml: *database.password*\n- `--db-name` \u003cdefault: *\"gorm\"*\u003e Database name.\n  - Env: *DB_NAME*\n  - Yaml: *database.name*\n- `--db-sslmode` \u003cdefault: *\"require\"*\u003e Database SSL mode.\n  - Env: *DB_SSLMODE*\n  - Yaml: *database.sslmode*\n- `--no-sync` Do not sync database.\n  - Yaml: *database.no-sync*\n- `--sync-interval` \u003cdefault: *\"1\"*\u003e DB sync interval (in minutes)\n  - Yaml: *database.sync-interval*\n\n#### AWS (and S3 compatible providers) Options\n\n- `--aws-access-key` \u003cdefault: *$AWS_ACCESS_KEY_ID*\u003e AWS account access key.\n  - Env: *AWS_ACCESS_KEY_ID*\n  - Yaml: *aws.access-key*\n- `--aws-secret-access-key` \u003cdefault: *$AWS_SECRET_ACCESS_KEY*\u003e AWS secret account access key.\n  - Env: *AWS_SECRET_ACCESS_KEY*\n  - Yaml: *aws.secret-access-key*\n- `--aws-session-token` \u003cdefault: *$AWS_SESSION_TOKEN*\u003e AWS session token.\n  - Env: *AWS_SESSION_TOKEN*\n  - Yaml: *aws.session-token*\n- `--dynamodb-table` \u003cdefault: *$AWS_DYNAMODB_TABLE*\u003e AWS DynamoDB table for locks.\n  - Env: *AWS_DYNAMODB_TABLE*\n  - Yaml: *aws.dynamodb-table*\n- `--aws-endpoint` \u003cdefault: *$AWS_ENDPOINT*\u003e AWS endpoint.\n  - Env: *AWS_ENDPOINT*\n  - Yaml: *aws.endpoint*\n- `--aws-region` \u003cdefault: *$AWS_REGION*\u003e AWS region.\n  - Env: *AWS_REGION*\n  - Yaml: *aws.region*\n- `--aws-role-arn` \u003cdefault: *$APP_ROLE_ARN*\u003e Role ARN to Assume.\n  - Env: *APP_ROLE_ARN*\n  - Yaml: *aws.app-role-arn*\n- `--aws-external-id` \u003cdefault: *$AWS_EXTERNAL_ID*\u003e External ID to use when assuming role.\n  - Env: *AWS_EXTERNAL_ID*\n  - Yaml: *aws.external-id*\n\n#### S3 Options\n\n- `--s3-bucket` \u003cdefault: *$AWS_BUCKET*\u003e AWS S3 bucket.\n  - Env: *AWS_BUCKET*\n  - Yaml: *aws.s3.bucket*\n- `--key-prefix` \u003cdefault: *$AWS_KEY_PREFIX*\u003e AWS Key Prefix.\n  - Env: *AWS_KEY_PREFIX*\n  - Yaml: *aws.s3.key-prefix*\n- `--file-extension` \u003cdefault: *\".tfstate\"*\u003e File extension(s) of state files.\n  - Env: *AWS_FILE_EXTENSION*\n  - Yaml: *aws.s3.file-extension*\n- `--force-path-style` \u003cdefault: *$AWS_FORCE_PATH_STYLE*\u003e Force path style S3 bucket calls.\n  - Env: *AWS_FORCE_PATH_STYLE*\n  - Yaml: *aws.s3.force-path-style*\n\n#### Terraform Enterprise Options\n\n- `--tfe-address` \u003cdefault: *$TFE_ADDRESS*\u003e Terraform Enterprise address for states access\n  - Env: *TFE_ADDRESS*\n  - Yaml: *tfe.address*\n- `--tfe-token` \u003cdefault: *$TFE_TOKEN*\u003e Terraform Enterprise Token for states access\n  - Env: *TFE_TOKEN*\n  - Yaml: *tfe.token*\n- `--tfe-organization` \u003cdefault: *$TFE_ORGANIZATION*\u003e Terraform Enterprise organization for states access\n  - Env: *TFE_ORGANIZATION*\n  - Yaml: *tfe.organization*\n\n#### Google Cloud Platform Options\n\n- `--gcs-bucket` Google Cloud bucket to search\n  - Yaml: *gcp.gcs-bucket*\n- `--gcp-sa-key-path` \u003cdefault: *$GCP_SA_KEY_PATH*\u003e The path to the service account to use to connect to Google Cloud Platform\n  - Env: *GCP_SA_KEY_PATH*\n  - Yaml: *gcp.gcp-sa-key-path*\n\n#### GitLab Options\n\n- `--gitlab-address` \u003cdefault: *\"https://gitlab.com\"*\u003e GitLab address (root)\n  - Env: *GITLAB_ADDRESS*\n  - Yaml: *gitlab.address*\n- `--gitlab-token` \u003cdefault: *$GITLAB_TOKEN*\u003e Token to authenticate upon GitLab\n  - Env: *GITLAB_TOKEN*\n  - Yaml: *gitlab.token*\n\n#### Web\n\n- `-p`, `--port` \u003cdefault: *\"8080\"*\u003e Port to listen on.\n  - Env: *TERRABOARD_PORT*\n  - Yaml: *web.port*\n- `--base-url` \u003cdefault: *\"/\"*\u003e Base URL.\n  - Env: *TERRABOARD_BASE_URL*\n  - Yaml: *web.base-url*\n- `--logout-url` \u003cdefault: *$TERRABOARD_LOGOUT_URL*\u003e Logout URL.\n  - Env: *TERRABOARD_LOGOUT_URL*\n  - Yaml: *web.logout-url*\n\n#### Help Options\n\n- `-h`, `--help` Show this help message\n\n## Push plans to Terraboard\n\nIn order to send Terraform plans to Terraboard, you must wrap it in this JSON format:\n```json\n{\n    \"lineage\": \"\u003cPlan's lineage\u003e\",\n    \"terraform_version\": \"\u003cTerraform version\u003e\",\n    \"git_remote\": \"\u003cThe URL of the remote that generated this plan\u003e\",\n    \"git_commit\": \"\u003cCommit hash\u003e\",\n    \"ci_url\": \"\u003cThe URL of the CI that sent this plan\u003e\",\n    \"source\": \"\u003cFree field for the triggering event\u003e\",\n    \"plan_json\": \"\u003cTerraform plan JSON export\u003e\"\n}\n```\n\nAnd send it to `/api/plans` using **POST** method\n\n## Use with Docker\n\n### Docker-compose\n\nConfiguration file can be provided to the container using a [volume](https://docs.docker.com/compose/compose-file/#volumes) or a [configuration](https://docs.docker.com/compose/compose-file/#configs).\n\n```shell\n# Set AWS credentials as environment variables:\nexport AWS_ACCESS_KEY_ID=\u003caccess_key\u003e\nexport AWS_SECRET_ACCESS_KEY=\u003caccess_secret\u003e\n\n# Set AWS configuration as environment variables:\nexport AWS_DEFAULT_REGION=\u003cAWS default region\u003e\nexport AWS_BUCKET=\u003cS3 Bucket name\u003e\nexport AWS_DYNAMODB_TABLE=\u003cAws DynamoDB Table\u003e\n\ndocker-compose up\n```\n\nThen point your browser to http://localhost:8080.\n\n### Docker command line\n\n```shell\n# Set AWS credentials as environment variables:\nexport AWS_ACCESS_KEY_ID=\u003caccess_key\u003e\nexport AWS_SECRET_ACCESS_KEY=\u003caccess_secret\u003e\n\n# Set AWS configuration as environment variables:\nexport AWS_DEFAULT_REGION=\u003cAWS default region\u003e\nexport AWS_BUCKET=\u003cS3 Bucket name\u003e\nexport AWS_DYNAMODB_TABLE=\u003cAWS_DYNAMODB_TABLE\u003e\n\n# Spin up the two containers and a network for them to communciate on:\ndocker network create terraboard\ndocker run --name db \\\n  -e POSTGRES_USER=gorm \\\n  -e POSTGRES_DB=gorm \\\n  -e POSTGRES_PASSWORD=\"\u003cmypassword\u003e\" \\\n  -e GODEBUG=\"netdns=go\" \\\n  --net terraboard \\\n  --detach \\\n  --restart=always \\\n  postgres:9.5\n\ndocker run -p 8080:8080 \\\n  -e AWS_ACCESS_KEY_ID=\"${AWS_ACCESS_KEY_ID}\" \\\n  -e AWS_SECRET_ACCESS_KEY=\"${AWS_SECRET_ACCESS_KEY}\" \\\n  -e AWS_REGION=\"${AWS_DEFAULT_REGION}\" \\\n  -e AWS_BUCKET=\"${AWS_BUCKET}\" \\\n  -e AWS_DYNAMODB_TABLE=\"${AWS_DYNAMODB_TABLE}\" \\\n  -e DB_PASSWORD=\"\u003cmypassword\u003e\" \\\n  -e DB_SSLMODE=\"disable\" \\\n  --net terraboard \\\n  ghcr.io/camptocamp/terraboard:latest\n```\n\nThen point your browser to http://localhost:8080.\n\n\n## Use with Kubernetes\n\nA Helm chart is available on [Camptocamp's repository](https://github.com/camptocamp/charts/tree/master/terraboard).\n\nIn order to install it:\n\n```shell\n$ helm repo add c2c https://camptocamp.github.io/charts\n$ helm install -v values.yaml terraboard c2c/terraboard\n```\n\n\n## Use with Rancher\n\n[Camptocamp's Rancher Catalog](https://github.com/camptocamp/camptocamp-rancher-catalog)\ncontains a Terraboard template to automate its installation in Cattle.\n\n\n## Authentication and base URL\n\nTerraboard does not implement authentication. Instead, it is recommended to use\nan authentication proxy such as [oauth2_proxy](https://github.com/bitly/oauth2_proxy).\n\nIf you need to set a route path for Terraboard, you can set a base URL by\npassing it as the `BASE_URL` environment variable.\n\nWhen using an authentication proxy, Terraboard will retrieve the logged in\nuser and email from the headers passed by the proxy.\nTerraboard expects you to setup the HTTP Headers `X-Forwarded-User` and\n`X-Forwarded-Email` when passing the logged in user and email. A Nginx\nexample can be found below:\n\n```nginx\nlocation / {\n  ....\n  auth_request_set $user   $upstream_http_x_auth_request_user;\n  auth_request_set $email  $upstream_http_x_auth_request_email;\n  proxy_set_header X-Forwarded-User  $user;\n  proxy_set_header X-Forwarded-Email $email;\n  ...\n  proxy_pass http://terraboard/;\n}\n```\n\nYou can also pass a `TERRABOARD_LOGOUT_URL` parameter to allow users to\nsign out of the proxy.\n\n\n## Install from source\n\n```shell\n$ go get github.com/camptocamp/terraboard\n```\n\n## Compatibility Matrix\n\n|Terraboard|Max Terraform version|\n|----------|---------------------|\n| 0.15.0   |  0.12.7             |\n| 0.16.0   |  0.12.7             |\n| 0.17.0   |  0.12.18            |\n| 0.18.0   |  0.12.18            |\n| 0.19.0   |  0.12.20            |\n| 0.20.0   |  0.12.26            |\n| 0.21.0   |  0.12.28            |\n| 0.22.0   |  0.13.0             |\n| 1.0.0    |  0.14.5             |\n| 1.1.0    |  0.14.10            |\n\n## Development\n\n### Architecture\n\nTerraboard is made of two components:\n\n#### A server process\n\nThe server is written in go and runs a web server which serves:\n\n- the API on known access points, taking the data from the PostgreSQL\n  database\n- the index page (from [static/index.html](static/index.html)) on all other\n  URLs\n\nThe server also has a routine which regularly (every 1 minute) feeds\nthe PostgreSQL database from the S3 bucket.\n\n#### A web UI\n\nThe UI is an AngularJS application served from `index.html`. All the UI code\ncan be found in the [static/](static/) directory.\n\n\n### Testing\n\n```shell\n$ docker-compose build \u0026\u0026 docker-compose up -d\n# Point your browser to http://localhost\n```\n\n### Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n","funding_links":[],"categories":["Go","Tools","Repositories"],"sub_categories":["Miscellaneous","Community providers"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamptocamp%2Fterraboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcamptocamp%2Fterraboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamptocamp%2Fterraboard/lists"}