{"id":13893993,"url":"https://github.com/uselagoon/lagoon","last_synced_at":"2026-03-05T01:17:36.477Z","repository":{"id":36987223,"uuid":"101875675","full_name":"uselagoon/lagoon","owner":"uselagoon","description":"Lagoon, the developer-focused application delivery platform","archived":false,"fork":false,"pushed_at":"2026-03-03T09:42:19.000Z","size":99840,"stargazers_count":594,"open_issues_count":192,"forks_count":157,"subscribers_count":23,"default_branch":"main","last_synced_at":"2026-03-03T12:58:10.957Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"https://docs.lagoon.sh/","language":"TypeScript","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/uselagoon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing-to-lagoon/api-debugging.md","funding":null,"license":"LICENSE","code_of_conduct":"docs/code-of-conduct.md","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,"notice":null,"maintainers":"maintainers.md","copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-08-30T11:57:54.000Z","updated_at":"2026-02-18T22:27:33.000Z","dependencies_parsed_at":"2023-01-17T11:46:54.083Z","dependency_job_id":"93b3cb24-bd02-4905-8cbb-46b9ee32724a","html_url":"https://github.com/uselagoon/lagoon","commit_stats":{"total_commits":8320,"total_committers":111,"mean_commits":74.95495495495496,"dds":0.7420673076923077,"last_synced_commit":"453133648388510b6a70cfe3f5dab73695519deb"},"previous_names":["amazeeio/lagoon"],"tags_count":158,"template":false,"template_full_name":null,"purl":"pkg:github/uselagoon/lagoon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uselagoon%2Flagoon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uselagoon%2Flagoon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uselagoon%2Flagoon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uselagoon%2Flagoon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uselagoon","download_url":"https://codeload.github.com/uselagoon/lagoon/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uselagoon%2Flagoon/sbom","scorecard":{"id":188534,"data":{"date":"2025-07-21","repo":{"name":"github.com/uselagoon/lagoon","commit":"c9113e0d13b1079acc1237fa3471b8312e1a66ae"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.5,"checks":[{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/mkdocs.yml:1","Warn: no topLevel permission defined: .github/workflows/test-db-migrations.yml:1","Warn: no topLevel permission defined: .github/workflows/test-mkdocs.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 7 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/mkdocs.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/uselagoon/lagoon/mkdocs.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/mkdocs.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/uselagoon/lagoon/mkdocs.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/mkdocs.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/uselagoon/lagoon/mkdocs.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-db-migrations.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/uselagoon/lagoon/test-db-migrations.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-db-migrations.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/uselagoon/lagoon/test-db-migrations.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-db-migrations.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/uselagoon/lagoon/test-db-migrations.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-mkdocs.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/uselagoon/lagoon/test-mkdocs.yml/main?enable=pin","Warn: containerImage not pinned by hash: local-dev/api-data-watcher-pusher/Dockerfile:1","Warn: containerImage not pinned by hash: local-dev/git/Dockerfile:1","Warn: containerImage not pinned by hash: services/actions-handler/Dockerfile:4","Warn: containerImage not pinned by hash: services/actions-handler/Dockerfile:14","Warn: containerImage not pinned by hash: services/api-db/Dockerfile:3","Warn: containerImage not pinned by hash: services/api-db/Dockerfile.mysql:3","Warn: containerImage not pinned by hash: services/api-redis/Dockerfile:3","Warn: containerImage not pinned by hash: services/api-sidecar-handler/Dockerfile:4","Warn: containerImage not pinned by hash: services/api-sidecar-handler/Dockerfile:14","Warn: containerImage not pinned by hash: services/api/Dockerfile:6","Warn: containerImage not pinned by hash: services/api/Dockerfile:9","Warn: containerImage not pinned by hash: services/auth-server/Dockerfile:6","Warn: containerImage not pinned by hash: services/auth-server/Dockerfile:9","Warn: containerImage not pinned by hash: services/backup-handler/Dockerfile:4","Warn: containerImage not pinned by hash: services/backup-handler/Dockerfile:15","Warn: containerImage not pinned by hash: services/broker/Dockerfile:3","Warn: containerImage not pinned by hash: services/broker/Dockerfile:4: pin your Docker image by updating rabbitmq:4.1.0-management-alpine to rabbitmq:4.1.0-management-alpine@sha256:770948395acde6a1faf449f8570dc1f0365eb573dba1c6c89d060e1fcbfe199c","Warn: containerImage not pinned by hash: services/keycloak-db/Dockerfile:3","Warn: containerImage not pinned by hash: services/keycloak-db/Dockerfile.mysql:3","Warn: containerImage not pinned by hash: services/keycloak/Dockerfile:2","Warn: containerImage not pinned by hash: services/keycloak/Dockerfile:7","Warn: containerImage not pinned by hash: services/keycloak/Dockerfile:14","Warn: containerImage not pinned by hash: services/keycloak/Dockerfile:23: pin your Docker image by updating quay.io/keycloak/keycloak:26.3.1 to quay.io/keycloak/keycloak:26.3.1@sha256:d9b4b8ff1627e43472cee278bab2da8dafeb082144addd2bfb0faa56a9be47d6","Warn: containerImage not pinned by hash: services/logs2notifications/Dockerfile:4","Warn: containerImage not pinned by hash: services/logs2notifications/Dockerfile:14","Warn: containerImage not pinned by hash: services/ssh/Dockerfile:3","Warn: containerImage not pinned by hash: services/ssh/Dockerfile:4: pin your Docker image by updating ubuntu:22.04 to ubuntu:22.04@sha256:1ec65b2719518e27d4d25f104d93f9fac60dc437f81452302406825c46fcc9cb","Warn: containerImage not pinned by hash: services/webhook-handler/Dockerfile:6","Warn: containerImage not pinned by hash: services/webhook-handler/Dockerfile:9","Warn: containerImage not pinned by hash: services/webhooks2tasks/Dockerfile:6","Warn: containerImage not pinned by hash: services/webhooks2tasks/Dockerfile:9","Warn: containerImage not pinned by hash: taskimages/activestandby/Dockerfile:2","Warn: containerImage not pinned by hash: taskimages/activestandby/Dockerfile:12: pin your Docker image by updating gcr.io/distroless/static:nonroot to gcr.io/distroless/static:nonroot@sha256:cdf4daaf154e3e27cfffc799c16f343a384228f38646928a1513d925f473cb46","Warn: containerImage not pinned by hash: tests/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/active-standby/first/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/active-standby/second/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/bulk/bulk1/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/bulk/bulk2/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/bulk/bulk3/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/bulk/bulk4/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/bulk/bulk5/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/bulk/bulk6/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/drupal-base/lagoon/cli.dockerfile:3","Warn: containerImage not pinned by hash: tests/files/drupal-base/lagoon/mariadb.dockerfile:3","Warn: containerImage not pinned by hash: tests/files/drupal-base/lagoon/nginx.dockerfile:4","Warn: containerImage not pinned by hash: tests/files/drupal-base/lagoon/nginx.dockerfile:6","Warn: containerImage not pinned by hash: tests/files/drupal-base/lagoon/php.dockerfile:4","Warn: containerImage not pinned by hash: tests/files/drupal-base/lagoon/php.dockerfile:6","Warn: containerImage not pinned by hash: tests/files/features-autogenerated-routes-disabled/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/features-autogenerated-routes-disabled/Dockerfile:7","Warn: containerImage not pinned by hash: tests/files/features-disable-inject-git-sha/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/features-disable-inject-git-sha/Dockerfile:7","Warn: containerImage not pinned by hash: tests/files/features-lagoon-type-override/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/features-lagoon-type-override/Dockerfile:7","Warn: containerImage not pinned by hash: tests/files/features-subfolder/subfolder1/subfolder2/subfolder3/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/features-subfolder/subfolder1/subfolder2/subfolder3/Dockerfile:7","Warn: containerImage not pinned by hash: tests/files/features/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/features/Dockerfile:7","Warn: containerImage not pinned by hash: tests/files/image-cache/Dockerfile:2","Warn: containerImage not pinned by hash: tests/files/image-cache/Dockerfile:8","Warn: containerImage not pinned by hash: tests/files/image-cache/Dockerfile:12","Warn: containerImage not pinned by hash: tests/files/nginx/first/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/nginx/first/basic-auth-disable.dockerfile:3","Warn: containerImage not pinned by hash: tests/files/nginx/first/basic-auth.dockerfile:3","Warn: containerImage not pinned by hash: tests/files/node/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/node/Dockerfile:7","Warn: containerImage not pinned by hash: tests/files/python/Dockerfile:1","Warn: containerImage not pinned by hash: tests/files/tasks/Dockerfile:3","Warn: containerImage not pinned by hash: tests/files/tasks/Dockerfile:7","Warn: containerImage not pinned by hash: yarn-workspace-builder/Dockerfile:3","Warn: pipCommand not pinned by hash: tests/Dockerfile:20-25","Warn: pipCommand not pinned by hash: tests/files/python/Dockerfile:7","Warn: pipCommand not pinned by hash: .github/workflows/test-mkdocs.yml:27","Warn: pipCommand not pinned by hash: .github/workflows/test-mkdocs.yml:28","Warn: pipCommand not pinned by hash: .github/workflows/test-mkdocs.yml:29","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of  70 containerImage dependencies pinned","Info:   0 out of   5 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"40 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0391 / GHSA-6jvc-q2x7-pchv / GHSA-76wf-9vgp-pj7w","Warn: Project is vulnerable to: GO-2022-0635 / GHSA-7f33-f4f5-xwgw","Warn: Project is vulnerable to: GO-2022-0646 / GHSA-f5pg-7wfw-84q9","Warn: Project is vulnerable to: GO-2025-3553 / GHSA-mh63-6h87-95cp","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GHSA-qj5r-2r5p-phc7","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2025-3488 / GHSA-6v2p-p543-phr9","Warn: Project is vulnerable to: GHSA-2qph-q8xw-gv7q","Warn: Project is vulnerable to: GHSA-39g6-x4x8-5jcm","Warn: Project is vulnerable to: GHSA-7cwc-fjqm-8vh8","Warn: Project is vulnerable to: GHSA-8mvq-8h2v-j9vf","Warn: Project is vulnerable to: GHSA-938f-5r4f-h65v","Warn: Project is vulnerable to: GHSA-gvf2-2f4g-jqf4","Warn: Project is vulnerable to: GHSA-m4wj-hhwj-47qp","Warn: Project is vulnerable to: GHSA-mg8j-w93w-xjgc","Warn: Project is vulnerable to: GHSA-w6rx-9g2x-mg5g","Warn: Project is vulnerable to: GHSA-wpp8-fjgf-pwc7","Warn: Project is vulnerable to: GHSA-mrqx-rp3w-jpjp","Warn: Project is vulnerable to: GHSA-qq5c-677p-737q","Warn: Project is vulnerable to: GHSA-g3rh-rrhp-jhh9","Warn: Project is vulnerable to: GHSA-6377-hfv9-hqf6","Warn: Project is vulnerable to: GHSA-6j75-5wfj-gh66","Warn: Project is vulnerable to: GHSA-jjxq-ff2g-95vh","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-hhhv-q57g-882q","Warn: Project is vulnerable to: GHSA-8cf7-32gw-wr33","Warn: Project is vulnerable to: GHSA-hjrf-2m68-5959","Warn: Project is vulnerable to: GHSA-qwph-4952-7xr6","Warn: Project is vulnerable to: GHSA-r683-j2x4-v87g","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-8cj5-5rvv-wf4v","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T20:13:03.381Z","repository_id":36987223,"created_at":"2025-08-16T20:13:03.381Z","updated_at":"2025-08-16T20:13:03.381Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30104222,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T01:06:53.091Z","status":"ssl_error","status_checked_at":"2026-03-05T01:02:35.679Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["hacktoberfest"],"created_at":"2024-08-06T18:01:21.329Z","updated_at":"2026-03-05T01:17:36.429Z","avatar_url":"https://github.com/uselagoon.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","hacktoberfest"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n \u003cimg src=\"./docs/images/lagoon-logo.png\" alt=\"The Lagoon logo is a blue hexagon split in two pieces with an L-shaped cut\" width=\"40%\"\u003e\n\u003c/p\u003e\n\n# Lagoon - the developer-focused application delivery platform for Kubernetes\n\n## Table of Contents\n1. Project Description\n2. Usage\n3. Architecture\n4. Testing\n5. Other Lagoon Components\n6. Contribution\n7. History\n8. Connect\n\n## Project Description\n\nLagoon solves what developers are dreaming about: A system that allows developers to locally develop their code and their services with Docker and run the exact same system in production. The same container images, the same service configurations and the same code.\n\n\u003e Lagoon is an application delivery **platform**. Its primary focus is as a cloud-native tool for the deployment, management, security and operation of many applications. Lagoon greatly reduces the requirement on developers of those applications to have cloud-native experience or knowledge.\n\nLagoon has been designed to handle workloads that have been traditionally more complex to make cloud-native (such as CMS, LMS, and other multi-container applications), and to do so with minimal retraining or reworking needed for the developers of those applications.\n\nLagoon is fully open-source, built on open-source tools, built collaboratively with our users.\n\n## Usage\n### Installation\n\n*Note that is not necessary to install Lagoon on to your local machine if you are looking to maintain websites hosted on Lagoon.*\n\nLagoon can be installed:\n\n- Locally (for evaluation, testing, debugging or development) using [Helm](https://helm.sh/) charts and [kind](https://kind.sigs.k8s.io/), [microk8s](https://microk8s.io/), [k3s](https://k3s.io/) or similar.\n- Into your managed Kubernetes cloud provider of choice - it's running in production on [Amazon Elastic Kubernetes Service](https://aws.amazon.com/eks/), [Azure Kubernetes Service](https://azure.microsoft.com/en-au/services/kubernetes-service/), and [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine/), but we are confident that it will also run on any other managed Kubernetes service.\n\nFor more information on developing or contributing to Lagoon, head to https://docs.lagoon.sh/contributing\n\nFor more information on installing and administering Lagoon, head to https://docs.lagoon.sh/installing-lagoon/requirements/\n\n### Architecture\n\nLagoon comprises two main components: **Lagoon Core** and **Lagoon Remote**. It's also built on several other third-party services, Operators and Controllers. In a full production setting, we recommend installing Lagoon Core and Remote into different Kubernetes Clusters. A single Lagoon Core installation is capable of serving multiple Remotes, but they can also be installed into the same cluster if preferred.\n\nTo enhance security, Lagoon Core does not need administrator-level access to the Kubernetes clusters that are running Lagoon Remote. All inter-cluster communication happens only via RabbitMQ. This is hosted in Lagoon Core, and consumed (and published back to) by Lagoon Remote. This allows Lagoon Remotes to be managed by different teams, in different locations - even behind firewalls or inaccessible from the internet.\n\nLagoon services are mostly built in Node.js. More recent development occurs in Go, and most of the automation and scripting components are in Bash.\n\n### Lagoon Core\n\nAll the services that handle the API, authentication and external communication are installed here. Installation is via a [Helm Chart].(https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-core)\n- API\n  - [api](https://github.com/uselagoon/lagoon/tree/main/services/api) (the GraphQL API that powers Lagoon)\n  - [api-db](https://github.com/uselagoon/lagoon/tree/main/services/api-db) (the MariaDB storage for the API)\n  - [api-redis](https://github.com/uselagoon/lagoon/tree/main/services/api-redis) (the cache layer for API queries)\n- Authentication\n  - [keycloak](https://github.com/uselagoon/lagoon/tree/main/services/keycloak) (the main authentication application)\n  - [keycloak-db](https://github.com/uselagoon/lagoon/tree/main/services/keycloak-db) (the MariaDB storage for Keycloak)\n  - [auth-server](https://github.com/uselagoon/lagoon/tree/main/services/auth-server) (generates authentication tokens for Lagoon services)\n  - [ssh](https://github.com/uselagoon/lagoon/tree/main/services/ssh) (provides developers with ssh access to the sites hosted on Lagoon)\n- Messaging\n  - [broker](https://github.com/uselagoon/lagoon/tree/main/services/broker) (the RabbitMQ message service used to communicate with Lagoon Remote)\n  - [webhooks2tasks](https://github.com/uselagoon/lagoon/tree/main/services/webhooks2tasks) (the service that converts incoming webhooks to API updates)\n  - [actions-handler](https://github.com/uselagoon/lagoon/tree/main/services/actions-handler) (the service that to manage bulk action processing for builds and tasks)\n- Webhooks\n  - [webhook-handler](https://github.com/uselagoon/lagoon/tree/main/services/webhook-handler) (the external service that Git Repositories and Registries communicate with)\n  - [backup-handler](https://github.com/uselagoon/lagoon/tree/main/services/backup-handler) (the service used to collect and collate information on backups)\n- Notifications\n  - [logs2notifications](https://github.com/uselagoon/lagoon/tree/main/services/logs2notifications) (the service that pushes build notifications to a configured notification types)\n\n### Lagoon Remote\n\nAll the services that are used to provision, deploy and maintain sites hosted by Lagoon on Kubernetes live here. These services are mostly comprised of third-party tools, developed external to Lagoon itself. Installation is via a [Helm Chart](https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-remote)\n\n- [Docker Host](https://github.com/uselagoon/lagoon-service-images/tree/main/docker-host) (the service that stores and caches upstream docker images for use in builds)\n- [Storage Calculator](https://github.com/uselagoon/storage-calculator) (an optional service to collect the size of storage and databases)\n- [Remote Controller](https://github.com/uselagoon/remote-controller) (the controllers that handle building and deploying sites onto Lagoon)\n- [Build Deploy Tool](https://github.com/uselagoon/build-deploy-tool) (the service that computes which services, configuration and settings to provision for Kubernetes)\n- [Aergia](https://github.com/uselagoon/aergia-controller) (an optional controller that can idle non-production sites not currently in use to conserve resources)\n- [Dioscuri](https://github.com/amazeeio/dioscuri) (an optional operator that provides Active/Standby functionality to Lagoon)\n- [DBaaS Operator](https://github.com/amazeeio/dbaas-operator) (an optional operator that provisions databases from an underlying managed database)\n\n### Lagoon UI\n  - [ui](https://github.com/uselagoon/lagoon-ui) (the main user interface and dashboard for Lagoon, usually installed in lagoon-core, but can also be installed anywhere as a Lagoon project)\n\n### Lagoon Tools\n  - [lagoon-cli](https://github.com/uselagoon/lagoon-cli) (the command-line interface for managing sites on Lagoon)\n  - [lagoon-sync](https://github.com/uselagoon/lagoon-sync) (a command-line interface for syncing databases or file assets between Lagoon environments)\n  - [drush-alias](https://github.com/uselagoon/lagoon-service-images/tree/main/drush-alias) (provides Drupal developers with an automated alias service for Drush)\n\n### Additional Services\n\nThese services are usually installed alongside either Lagoon Core or Lagoon Remote to provide additional functionality to Lagoon.\n\n- Registry (required)\n  - [Harbor](https://goharbor.io/) (provides image registry services to Lagoon projects)\n- Backups (optional)\n  - [k8up](https://k8up.io/) (provides a scheduled backup and prune service to environment namespaces)\n- Lagoon Logging (optional)\n  - [lagoon-logging](https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-logging) (utilizes [banzaicloud/logging-operator](https://github.com/banzaicloud/logging-operator) to collect and augment container\u0026router logs from all sites, and sends them to a logs-dispatcher)\n  - [logs-dispatcher](https://github.com/uselagoon/lagoon-service-images/tree/main/logs-dispatcher) (collects application logs from sites, as well as container\u0026router logs from lagoon-logging, enriches them with additional metadata and sends them to a central log concentrator)\n  - [lagoon-logs-concentrator](https://github.com/uselagoon/lagoon-charts/tree/main/charts/lagoon-logs-concentrator) (collects logs from remote logs-dispatchers and sends them to Elasticsearch)\n- Elasticsearch or Opensearch (optional)\n  - [OpenSearch](https://opensearch.org/docs/latest/opensearch/index/) (provides centralized log storage, search and analysis)\n  - [OpenSearch Dashboards](https://opensearch.org/docs/latest/dashboards/index/) (the default user interface for OpenSearch searching and visualization)\n- Managed databases, for use with DBaaS operator (optional)\n  - MariaDB (self managed or via [Amazon RDS for MariaDB](https://aws.amazon.com/rds/mariadb/), [Azure Database for MariaDB](https://azure.microsoft.com/en-au/services/mariadb/)\n  - MySQL (self managed or via [Amazon RDS for MySQL](https://aws.amazon.com/rds/mysql/), [Amazon Aurora MySQL](https://aws.amazon.com/rds/aurora/mysql-features/), [Azure Database for MySQL](https://azure.microsoft.com/en-au/services/mysql), [Cloud SQL for MySQL](https://cloud.google.com/sql/docs/mysql))\n  - PostgreSQL (self managed or via [Amazon RDS for PostgreSQL](https://aws.amazon.com/rds/postgresql/), [Amazon Aurora PostgreSQL](https://aws.amazon.com/rds/aurora/postgresql-features/), [Azure Database for PostgreSQL](https://docs.microsoft.com/en-us/azure/postgresql), [Cloud SQL for PostgreSQL](https://cloud.google.com/sql/docs/postgres) )\n  - MongoDB (self managed, or via [Amazon DocumentDB](https://aws.amazon.com/documentdb/), [Azure Cosmos DB](https://azure.microsoft.com/en-au/services/cosmos-db/) )\n- Open Policy Agent (optional)\n\n## Testing\n\nLagoon has a comprehensive [test suite](https://github.com/uselagoon/lagoon/tree/main/tests/tests), designed to cover most end-user scenarios. The testing is automated in Ansible, and runs in Jenkins, but can also be run locally in a self-contained cluster. The testing provisions a standalone Lagoon cluster, running on Kind (Kubernetes in Docker). This cluster is made of Lagoon Core, Lagoon Remote, an image registry and a set of managed databases. It runs test deployments and scenarios for a range of Node.js, Drupal, Python and NGINX projects, all built using the latest Lagoon images.\n\n\n## Other Lagoon components\n\nHere are a number of other repositories, tools and components used in Lagoon\n\n### [Lagoon Images](https://github.com/uselagoon/lagoon-images)\n\nThese images are used by developers to build web applications on, and come preconfigured for running on Lagoon as well as locally.  There are php, NGINX, Node.JS, Python (and more) variants. These images are regularly updated, and are not only used in hosted projects, they're used in Lagoon too!\n\nTo browse the full set of images, head to https://hub.docker.com/u/uselagoon\n\n### [Lagoon Examples](https://github.com/uselagoon/lagoon-examples)\n\nA meta-project that houses a wide range of example projects, ready-made for use on Lagoon. These projects also include test suites that are used in the testing of the images. Please request an example via that repository if you want to see a particular one, or even better, have a crack at making one!\n\n### [Lagoon Charts](https://github.com/uselagoon/lagoon-charts)\n\nHouses all the Helm Charts used to deploy Lagoon, it comes with a built-in test suite.\n\nTo add the repository `helm repo add lagoon https://uselagoon.github.io/lagoon-charts/`\n\n### [amazee.io Charts](https://github.com/amazeeio/charts)\n\namazee.io has developed a number of tools, charts and operators designed to work with Lagoon and other Kubernetes services.\n\nTo add the repository `helm repo add lagoon https://amazeeio.github.io/charts/`\n\n\n\n## Contribution\n\nDo you want to contribute to Lagoon? Fabulous! [See our Documentation](https://docs.lagoon.sh/contributing/) on how to get started.\n\n\n\n## History\n\nLagoon was originally created and open sourced by the team at [amazee.io](https://www.amazee.io/) in August 2017, and powers their global hosting platform.\n\n\n\n## Connect\n\nFind more information about Lagoon:\n\nAt our website - https://lagoon.sh\n\nIn our documentation - https://docs.lagoon.sh\n\nIn our blog - https://dev.to/uselagoon\n\nVia our socials - https://twitter.com/uselagoon\n\nOn Discord -  https://discord.gg/te5hHe95JE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuselagoon%2Flagoon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuselagoon%2Flagoon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuselagoon%2Flagoon/lists"}