diff --git a/DEPRECATIONS.md b/DEPRECATIONS.md index ce21d7163d..380bdbc969 100644 --- a/DEPRECATIONS.md +++ b/DEPRECATIONS.md @@ -1,22 +1,24 @@ - - # Lagoon Project Deprecation Announcements ## Overview + This file is a constantly updated central tracker for deprecations across the suite of Lagoon products. As Lagoon continues to evolve, we occasionally need to replace, rename or retire existing processes, tools or configuration. Where this may impact a user's processes or procedures, we intend to outline a timeframe to allow any necessary changes to be made. Deprecations will be tracked by the release they are announced in, and then updated when the actual deprecation occurs. All deprecations should provide a rough timeline (in months or releases). Releases will normally only be listed here if they include planned deprecations. ## Deprecation History + All deprecations are listed below, with the most recent announcements at the top. ### Lagoon v2.17.0 + release link: https://github.com/uselagoon/lagoon/releases/tag/v2.17.0 * This release introduces a new active/standby task image that does not require the use of the [dioscuri controller](https://github.com/amazeeio/dioscuri). Dioscuri is deprecated and will eventually be removed from the `lagoon-remote` helm chart. If you use active/standby functionality in your clusters, you should upgrade to lagoon v2.17.0 and update your remote clusters to the version of the `lagoon-remote` helm chart the v2.17.0 release says to use (see release notes for v2.17.0) * Support for Harbor in the API will be removed in a future release. If you currently have your core installation with Harbor support, you should move to using the integration within lagoon-remote instead. See the documentation [here](https://docs.lagoon.sh/installing-lagoon/install-lagoon-remote) and read the section about Harbor. * Support for Harbor 2.1.x (chart version 1.5.x) and older in `lagoon-remote` will be removed in a future release. You should consider upgrading Harbor to a newer version (currently Lagoon supports up to v2.9.x (chart version 1.13.x)), following any recommended upgrade paths from Harbor. ### Lagoon v2.16.0 + release link: https://github.com/uselagoon/lagoon/releases/tag/v2.16.0 -There were no planned deprecations announced in this release. \ No newline at end of file +There were no planned deprecations announced in this release. diff --git a/docs/README.md b/docs/README.md index 1b45d846e7..10366d4438 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,14 +6,22 @@ Lagoon gives developers what they dream about. It's a system that allows developers to run the exact same code in their local and production environment. The same Docker images, the same service configurations, and the same code. -## Who are you? +## Where do I start? -
+If you want to use Lagoon to host your website or application, visit +[Using Lagoon - The Basics](using-lagoon-the-basics/index.md) + +To get more in depth with Lagoon functionality, visit +[Using Lagoon - Advanced](using-lagoon-advanced/index.md) + +To understand how Lagoon works, check out +[Lagoon Concepts - The Basics](concepts-basics/index.md) + +and for a deeper understanding, [Lagoon Concepts - Advanced](concepts-advanced/index.md) + +If you want to develop Lagoon \(add features, fix bugs\), [Developing Lagoon](contributing-to-lagoon/developing-lagoon.md) -- If you want to use Lagoon to host your website or application, visit [Using Lagoon](using-lagoon-the-basics/index.md). -- If you want to develop Lagoon \(add features, fix bugs\), [Developing Lagoon](contributing-to-lagoon/developing-lagoon.md). -
## TL;DR: How Lagoon Works 1. Developers define and configure needed services within YAML files. diff --git a/docs/administering-lagoon/using-harbor/container_overview.png b/docs/administering-lagoon/using-harbor/container_overview.png deleted file mode 100644 index ee4e84c36f..0000000000 Binary files a/docs/administering-lagoon/using-harbor/container_overview.png and /dev/null differ diff --git a/docs/administering-lagoon/using-harbor/projects_overview.png b/docs/administering-lagoon/using-harbor/projects_overview.png deleted file mode 100644 index 79f8902041..0000000000 Binary files a/docs/administering-lagoon/using-harbor/projects_overview.png and /dev/null differ diff --git a/docs/administering-lagoon/using-harbor/repositories_overview.png b/docs/administering-lagoon/using-harbor/repositories_overview.png deleted file mode 100644 index d66ea8f83e..0000000000 Binary files a/docs/administering-lagoon/using-harbor/repositories_overview.png and /dev/null differ diff --git a/docs/administering-lagoon/using-harbor/scanning_image_1.png b/docs/administering-lagoon/using-harbor/scanning_image_1.png deleted file mode 100644 index 923b1181ef..0000000000 Binary files a/docs/administering-lagoon/using-harbor/scanning_image_1.png and /dev/null differ diff --git a/docs/drupal/automatic-updates.md b/docs/applications/drupal/automatic-updates.md similarity index 97% rename from docs/drupal/automatic-updates.md rename to docs/applications/drupal/automatic-updates.md index 68e1a3af4b..20f08ad084 100644 --- a/docs/drupal/automatic-updates.md +++ b/docs/applications/drupal/automatic-updates.md @@ -20,13 +20,13 @@ runtime, it can cause any of the following problems: The following update methods been disabled by Lagoon. -### Drupal Automatic Updates +## Drupal Automatic Updates The [Automatic Updates](https://www.drupal.org/project/automatic_updates) contrib module is disabled by and it will also be disabled when it moves into Drupal core. -### Drush +## Drush Using `drush pm-install` or `drush pm-update` is disabled by default as part of the [amazeeio/drupal-integrations](https://github.com/amazeeio/drupal-integrations) diff --git a/docs/drupal/drush-9.md b/docs/applications/drupal/drush-9.md similarity index 100% rename from docs/drupal/drush-9.md rename to docs/applications/drupal/drush-9.md diff --git a/docs/drupal/first-deployment-of-drupal.md b/docs/applications/drupal/first-deployment-of-drupal.md similarity index 86% rename from docs/drupal/first-deployment-of-drupal.md rename to docs/applications/drupal/first-deployment-of-drupal.md index f7b927a002..2dfa6aec71 100644 --- a/docs/drupal/first-deployment-of-drupal.md +++ b/docs/applications/drupal/first-deployment-of-drupal.md @@ -4,7 +4,7 @@ ## 1. Make sure you are all set -In order to make your first deployment a successful one, please make sure that your [Drupal Project is Lagoonized](../using-lagoon-the-basics/setup-project.md) and you have set up the project in Lagoon. If not, don't worry! Follow the [Step-by-Step Guide](step-by-step-getting-drupal-ready-to-run-on-lagoon.md) which show you how this works. +In order to make your first deployment a successful one, please make sure that your [Drupal Project is Lagoonized](../../using-lagoon-the-basics/setup-project.md) and you have set up the project in Lagoon. If not, don't worry! Follow the [Step-by-Step Guide](./step-by-step-getting-drupal-ready-to-run-on-lagoon.md) which show you how this works. ## 2. Push @@ -19,13 +19,13 @@ git push This will trigger a push, and the Git hosting will inform Lagoon about this push via the configured webhook. -If all is correct, you will see a notification in your configured chat system \(this is configured by your friendly Lagoon administrator\): +If all is correct, you will see a notification in your configured chat system (this is configured by your friendly Lagoon administrator): -![Slack notification of a deployment starting.](./first_deployment_slack_start.jpg) +![Slack notification of a deployment starting.](../../images/first_deployment_slack_start.jpg) -This tells you that Lagoon has just started to deploy your code. Depending on the size of the codebase and amount of containers, this will take a couple of seconds. Just relax. If you'd like to know what's happening now, check out the [Build and Deploy Process of Lagoon](../using-lagoon-the-basics/build-and-deploy-process.md). +This tells you that Lagoon has just started to deploy your code. Depending on the size of the codebase and amount of containers, this will take a couple of seconds. Just relax. If you'd like to know what's happening now, check out the [Build and Deploy Process of Lagoon](../../concepts-basics/build-and-deploy-process.md). -You can also check your Lagoon UI to see the progress of any deployment \(your Lagoon administrator has the info\). +You can also check your Lagoon UI to see the progress of any deployment (your Lagoon administrator has the info). ## 3. A fail @@ -85,9 +85,9 @@ git push This time all should be green: -![Deployment Success!](./first_deployment_slack_success.jpg) +![Deployment Success!](../../images/first_deployment_slack_success.jpg) -Click on the links in the notification, and you should see your Drupal site loaded in all its beauty! It will probably not have images yet, which we will handle in [Step 6](first-deployment-of-drupal.md#6-synchronize-local-files-to-the-remote-lagoon-environment). +Click on the links in the notification, and you should see your Drupal site loaded in all its beauty! It will probably not have images yet, which we will handle in [Step 6](./first-deployment-of-drupal.md#6-synchronize-local-files-to-the-remote-lagoon-environment). If it is still failing, check the logs link for more information. @@ -121,7 +121,7 @@ The reason for that is that the Drupal cannot resolve the path of the files dire As soon as Lagoon is done building and deploying it will send a second notification to the chat system, like so: -![Slack notification of complete deployment.](./first_deployment_slack_2nd_success.jpg) +![Slack notification of complete deployment.](../../images/first_deployment_slack_2nd_success.jpg) This tells you: @@ -136,7 +136,7 @@ That's it! We hope that wasn't too hard - making devOps accessible is what we ar That's the beauty of Lagoon: it's exactly the same: Push the branch name you defined to be your production branch and that one will be deployed. -## Failure? Don't worry. +## Failure? Don't worry Did the deployment fail? Oh no! But we're here to help: diff --git a/docs/drupal/index.md b/docs/applications/drupal/index.md similarity index 61% rename from docs/drupal/index.md rename to docs/applications/drupal/index.md index 2d99bd9fa9..48d250046b 100644 --- a/docs/drupal/index.md +++ b/docs/applications/drupal/index.md @@ -6,7 +6,7 @@ In this section you'll find more information on the various services that have b ## `drupal_integrations` Drupal scaffolding package -The `drupal_integrations` package, available on [pacakagist](https://packagist.org/packages/amazeeio/drupal_integrations) extends Drupal's core-composer-scaffold for use on Lagoon. It also provides additional Drush command `drush la` to retreive the Drush aliases for your Lagoon project. +The `drupal_integrations` package, available on [packagist](https://packagist.org/packages/amazeeio/drupal_integrations) extends Drupal's core-composer-scaffold for use on Lagoon. It also provides additional Drush command `drush la` to retreive the Drush aliases for your Lagoon project. ## `lagoon-logs` Drupal module diff --git a/docs/drupal/integrate-drupal-and-fastly.md b/docs/applications/drupal/integrate-drupal-and-fastly.md similarity index 100% rename from docs/drupal/integrate-drupal-and-fastly.md rename to docs/applications/drupal/integrate-drupal-and-fastly.md diff --git a/docs/drupal/phpunit-and-phpstorm.md b/docs/applications/drupal/phpunit-and-phpstorm.md similarity index 86% rename from docs/drupal/phpunit-and-phpstorm.md rename to docs/applications/drupal/phpunit-and-phpstorm.md index 14df8515ac..99b9db3778 100644 --- a/docs/drupal/phpunit-and-phpstorm.md +++ b/docs/applications/drupal/phpunit-and-phpstorm.md @@ -5,7 +5,7 @@ - You are using Docker. - - You are using a standard Amazee/Lagoon project with a [`docker-compose.yml`](../using-lagoon-the-basics/docker-compose-yml.md) file. + - You are using a standard Amazee/Lagoon project with a [`docker-compose.yml`](../../concepts-basics/docker-compose-yml.md) file. - You are on a Mac - it should work for other operating systems but folder structure and some configuration settings may be different. @@ -25,7 +25,7 @@ 2. Click: `+` 3. Select: `Docker for Mac` -![Set Up Docker](./1-docker-setup.png) +![Set Up Docker](../../images/1-docker-setup.png) ### Set Up CLI interpreter @@ -43,7 +43,7 @@ * Local path: `` * Remote path\*: `/app` -![Add a new CLI interpreter:](./2-cli-interpreter.png) +![Add a new CLI interpreter:](../../images/2-cli-interpreter.png) ### **Set Up Remote Interpreter** @@ -58,7 +58,7 @@ * Path to script\*: `/app/vendor/autoload.php` * Default configuration file\*: `/app/web/core/phpunit.xml` -![Add Remote Interpreter](./3-remote-interpreter-setup.png) +![Add Remote Interpreter](../../images/3-remote-interpreter-setup.png) #### Setup/Configure Runner Template @@ -70,14 +70,14 @@ 2. Interpreter: `` -![Configure runner](./4-configure-runner.png) +![Configure runner](../../images/4-configure-runner.png) !!! Note If you are not on a Mac, this may vary. ## Final checks -### Some final checks to run before you run a test! +### Some final checks to run before you run a test 1. You have the project up and running: `$ docker-compose up -d` 2. The project is working without any errors, visit the site just to make sure it all works as expected - this is not 100% necessary, but nice to know it is working normally. @@ -89,4 +89,4 @@ Now you have the above configuration set up it should be as straightforward as g Once you press this PhpStorm will use Docker to enter the CLI container, then start running PHPUnit based upon the config. -![Here it is in action, look at it go!!](./5-going-green-1-.gif) +![Here it is in action, look at it go!!](../../images/5-going-green-1-.gif) diff --git a/docs/applications/drupal/services/README.md b/docs/applications/drupal/services/README.md new file mode 100644 index 0000000000..a04b4e6878 --- /dev/null +++ b/docs/applications/drupal/services/README.md @@ -0,0 +1,25 @@ +# Services + +## MariaDB is the open-source successor to MySQL + +[Learn about MariaDB with Drupal](mariadb.md) + +[Documentation on the plain MariaDB image](../../../docker-images/mariadb.md) (the MariaDB-Drupal image is built on this). + +## Redis is a fast, open-source, in-memory key-value data store for use as a database, cache, message broker, and queue + +[Learn about Redis with Drupal.](../services/redis.md) + +[Documentation on the Redis-persistent image.](../../../docker-images/redis.md) + +## Solr is an open-source search platform + +[Learn about Solr with Drupal.](../services/solr.md) + +[Documentation on the plain Solr image](../../../docker-images/solr.md) \(the Solr-Drupal image is built on this\). + +## Varnish is a powerful, open-source HTTP engine and reverse HTTP proxy that helps to speed up your website + +[Learn about Varnish with Drupal](../services/varnish.md) + +[Documentation on the plain Varnish image](../../../docker-images/varnish.md) \(the Varnish-Drupal image is built on this\). diff --git a/docs/drupal/services/mariadb.md b/docs/applications/drupal/services/mariadb.md similarity index 90% rename from docs/drupal/services/mariadb.md rename to docs/applications/drupal/services/mariadb.md index a61dd4f666..ff3a96d4cc 100644 --- a/docs/drupal/services/mariadb.md +++ b/docs/applications/drupal/services/mariadb.md @@ -4,7 +4,7 @@ description: MariaDB is the open source successor to MySQL. # MariaDB-Drupal -The Lagoon `mariadb-drupal` Docker image [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/mariadb-drupal/10.5.Dockerfile) is a customized [`mariadb`](../../docker-images/mariadb.md) image to use within Drupal projects in Lagoon. It differs from the `mariadb` image only for initial database setup, made by some environment variables: +The Lagoon `mariadb-drupal` Docker image [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/mariadb-drupal/10.5.Dockerfile) is a customized [`mariadb`](../../../docker-images/mariadb.md) image to use within Drupal projects in Lagoon. It differs from the `mariadb` image only for initial database setup, made by some environment variables: | Environment Variable | Default | Description | | :--- | :--- | :--- | @@ -14,7 +14,7 @@ The Lagoon `mariadb-drupal` Docker image [Dockerfile](https://github.com/uselago If the `LAGOON_ENVIRONMENT_TYPE` variable is set to `production`, performances are set accordingly by using `MARIADB_INNODB_BUFFER_POOL_SIZE=1024` and `MARIADB_INNODB_LOG_FILE_SIZE=256`. -## Additional MariaDB [Logging](../../logging/logging.md) +## Additional MariaDB [Logging](../../../logging/logging.md) During the course of development, it may be necessary to enable either query logging or slow query logging. To do so, set the environment variables `MARIADB_LOG_SLOW` or `MARIADB_LOG_QUERIES`. This can be done in `docker-compose.yml`. diff --git a/docs/drupal/services/nginx.md b/docs/applications/drupal/services/nginx.md similarity index 98% rename from docs/drupal/services/nginx.md rename to docs/applications/drupal/services/nginx.md index d757d7fbbd..d4a5ba8de8 100644 --- a/docs/drupal/services/nginx.md +++ b/docs/applications/drupal/services/nginx.md @@ -1,6 +1,6 @@ # NGINX-Drupal -The [Lagoon `nginx-drupal` Docker image](https://github.com/uselagoon/lagoon-images/blob/main/images/nginx-drupal/Dockerfile). Optimized to work with Drupal. Based on [Lagoon `nginx` image](../../docker-images/nginx.md). +The [Lagoon `nginx-drupal` Docker image](https://github.com/uselagoon/lagoon-images/blob/main/images/nginx-drupal/Dockerfile). Optimized to work with Drupal. Based on [Lagoon `nginx` image](../../../docker-images/nginx.md). ## Lagoon adaptions @@ -8,7 +8,7 @@ This image is prepared to be used on Lagoon. There are therefore some things alr * Folder permissions are automatically adapted with [`fix-permissions`](https://github.com/uselagoon/lagoon-images/blob/main/images/commons/fix-permissions), so this image will work with a random user. * To keep `drupal.conf` 's configuration file as clean and customizable as possible, we added `include` directives in the main sections of the file:`server`, `location /`, `location @drupal` and `location @php`. -* Further information in the section [`Drupal.conf` customization](nginx.md#drupal-conf-customization). +* Further information in the section [`Drupal.conf` customization](#drupalconf-customization). ## Included Drupal configuration \(`drupal.conf`\) diff --git a/docs/drupal/services/php-cli.md b/docs/applications/drupal/services/php-cli.md similarity index 90% rename from docs/drupal/services/php-cli.md rename to docs/applications/drupal/services/php-cli.md index b7877b5fa0..205d30e467 100644 --- a/docs/drupal/services/php-cli.md +++ b/docs/applications/drupal/services/php-cli.md @@ -1,6 +1,6 @@ # PHP-CLI-Drupal -The [Lagoon `php-cli-drupal` Docker image](https://github.com/uselagoon/lagoon-images/blob/main/images/php-cli-drupal) is optimized to work with Drupal. It is based on the [Lagoon `php-cli` image](../../docker-images/php-cli.md), and has all the command line tools needed for the daily maintenance of a Drupal website: +The [Lagoon `php-cli-drupal` Docker image](https://github.com/uselagoon/lagoon-images/blob/main/images/php-cli-drupal) is optimized to work with Drupal. It is based on the [Lagoon `php-cli` image](../../../docker-images/php-cli.md), and has all the command line tools needed for the daily maintenance of a Drupal website: * `drush` * `drupal console` diff --git a/docs/drupal/services/redis.md b/docs/applications/drupal/services/redis.md similarity index 100% rename from docs/drupal/services/redis.md rename to docs/applications/drupal/services/redis.md diff --git a/docs/drupal/services/solr.md b/docs/applications/drupal/services/solr.md similarity index 100% rename from docs/drupal/services/solr.md rename to docs/applications/drupal/services/solr.md diff --git a/docs/drupal/services/varnish.md b/docs/applications/drupal/services/varnish.md similarity index 100% rename from docs/drupal/services/varnish.md rename to docs/applications/drupal/services/varnish.md diff --git a/docs/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md b/docs/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md similarity index 98% rename from docs/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md rename to docs/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md index a4f3953731..bdd2889d61 100644 --- a/docs/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md +++ b/docs/applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md @@ -8,8 +8,8 @@ If you're working on a Drupal project, you can check out one of the various Drup Here is a summary of the Lagoon- and Drupal-specific files you will find: -* `.lagoon.yml` - The main file that will be used by Lagoon to understand what should be deployed and many more things. This file has some sensible Drupal defaults. If you would like to edit or modify, please check the [documentation for `.lagoon.yml`](../using-lagoon-the-basics/lagoon-yml.md). -* `docker-compose.yml`, `.dockerignore`, and `*.dockerfile` \(or `Dockerfile`\) - These files are used to run your local Drupal development environment, they tell Docker which services to start and how to build them. They contain sensible defaults and many commented lines. We hope that it's well-commented enough to be self-describing. If you would like to find out more, see [documentation for `docker-compose.yml`](../using-lagoon-the-basics/docker-compose-yml.md). +* `.lagoon.yml` - The main file that will be used by Lagoon to understand what should be deployed and many more things. This file has some sensible Drupal defaults. If you would like to edit or modify, please check the [documentation for `.lagoon.yml`](../../concepts-basics/lagoon-yml.md). +* `docker-compose.yml`, `.dockerignore`, and `*.dockerfile` \(or `Dockerfile`\) - These files are used to run your local Drupal development environment, they tell Docker which services to start and how to build them. They contain sensible defaults and many commented lines. We hope that it's well-commented enough to be self-describing. If you would like to find out more, see [documentation for `docker-compose.yml`](../../concepts-basics/docker-compose-yml.md). * `sites/default/*` - These `.php` and `.yml` files tell Drupal how to communicate with Lagoon containers both locally and in production. They also provide a straightforward system for specific overrides in development and production environments. Unlike other Drupal hosting systems, Lagoon never ever injects Drupal settings files into your Drupal. Therefore, you can edit them however you like. Like all other files, they contain sensible defaults and some commented parts. * `drush/aliases.drushrc.php` - These files are specific to Drush and tell Drush how to talk to the Lagoon GraphQL API in order to learn about all site aliases there are. * `drush/drushrc.php` - Some sensible defaults for Drush commands. @@ -24,7 +24,7 @@ Drupal is shipped with `sites/*/settings*.php` and `sites/*/services*.yml` in `. Unfortunately the Drupal community has not decided on a standardized `WEBROOT` folder name. Some projects put Drupal within `web`, and others within `docroot` or somewhere else. The Lagoon Drupal settings files assume that your Drupal is within `web`, but if this is different for your Drupal, please adapt the files accordingly. -### Note about composer.json +### Note about `composer.json` If you installed Drupal via composer, please check your `composer.json` and make sure that the `name` is NOT `drupal/drupal`, as this could confuse Drush and other tools of the Drupal universe, just rename it to something like `myproject/drupal` diff --git a/docs/drupal/subfolders.md b/docs/applications/drupal/subfolders.md similarity index 100% rename from docs/drupal/subfolders.md rename to docs/applications/drupal/subfolders.md diff --git a/docs/applications/options.md b/docs/applications/options.md index 825f286bcb..59dcc13efa 100644 --- a/docs/applications/options.md +++ b/docs/applications/options.md @@ -8,13 +8,13 @@ description: Configuring Applications for use on Lagoon Project- and environment-level configuration for Lagoon is provided in the `.lagoon.yml` file in your repository. -See [`lagoon-yml.md`](../using-lagoon-the-basics/lagoon-yml.md). +See [`lagoon-yml.md`](../concepts-basics/lagoon-yml.md). ## `docker-compose.yml` Service-level configuration for Lagoon in provided in the `docker-compose.yml` file in your repository. In particular, the `lagoon.type` and associated service labels are documented in the individual services. -See [`docker-compose-yml.md`](../using-lagoon-the-basics/docker-compose-yml.md) +See [`docker-compose-yml.md`](../concepts-basics/docker-compose-yml.md) ## Storage @@ -47,4 +47,4 @@ Lagoon auto-generates routes for services that have ingress requirements. Custom Lagoon makes heavy use of environment variables, at build and runtime. Where these are used to provide critical configuration for your application (e.g. database config/credentials) - it is important that the local and Lagoon versions are named similarly. -See [environment-variables.md](../using-lagoon-advanced/environment-variables.md). +See [environment-variables.md](../concepts-advanced/environment-variables.md). diff --git a/docs/applications/php.md b/docs/applications/php.md index 564b37d69d..ed3579bba1 100644 --- a/docs/applications/php.md +++ b/docs/applications/php.md @@ -2,6 +2,6 @@ ## Introduction -Lagoon supports a wide range of PHP-based applications, such as [Drupal](../drupal/index.md), Laravel, [Wordpress](wordpress.md), Magento and Symfony. +Lagoon supports a wide range of PHP-based applications, such as [Drupal](./drupal/index.md), Laravel, [Wordpress](wordpress.md), Magento and Symfony. More information on how to adapt your PHP project to run on Lagoon can be found in our [PHP-cli Docker Images](../docker-images/php-cli.md) and [PHP-FPM Docker Images](../docker-images/php-fpm.md) sections. diff --git a/docs/code-of-conduct.md b/docs/code-of-conduct.md index 4737cd2ab7..e899beb1eb 100644 --- a/docs/code-of-conduct.md +++ b/docs/code-of-conduct.md @@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [uselagoon@amazee.io](mailto:uselagoon@amazee.io). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [uselagoon@amazee.io](mailto:uselagoon@amazee.io). You may also reach out directly to either [Alanna](mailto:alanna.burke@amazee.io) or [Brandon](mailto:brandon.williams@amazee.io), both Lagoon team members who have completed [CoC training](https://www.drupal.org/community/cwg/code-of-conduct-contact-training). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. diff --git a/docs/community/discord.md b/docs/community/discord.md index 575cd9043d..64c9ae7e35 100644 --- a/docs/community/discord.md +++ b/docs/community/discord.md @@ -8,4 +8,8 @@ _Please remember that this is not to replace your current support channels - tho We ask that all community members review our [Participation](participation.md) and [Moderation](moderation.md) Guidelines, as well as the [Code of Conduct](../code-of-conduct.md). -In addition to our [Zoom Community Hours](https://dev.to/uselagoon/lagoon-community-hours-2022-4bd4), we'll also be hosting Community Hours on Discord in 2023! +## Community Hours + +Our Community hours are currently on hold as we survey the community to better determine the community's needs. [Please fill our the survey here](https://forms.gle/CFgQLCp3zu9fEFcM8). + +If you need a hand with Lagoon, please reach out on [Discord](https://discord.gg/te5hHe95JE) or shoot us an email at [uselagoon@amazee.io](mailto:uselagoon@amazee.io). diff --git a/docs/using-lagoon-advanced/backups.md b/docs/concepts-advanced/backups.md similarity index 75% rename from docs/using-lagoon-advanced/backups.md rename to docs/concepts-advanced/backups.md index 1f379ef57f..5323bb9703 100644 --- a/docs/using-lagoon-advanced/backups.md +++ b/docs/concepts-advanced/backups.md @@ -8,7 +8,7 @@ Lagoon makes use of the [k8up operator](https://github.com/vshn/k8up) to provide Backups of databases and containers' persistent storage volumes happens nightly within production environments by default. -If a different backup schedule for production backups is required, this can be specified at a project level via setting the "Backup Schedule" variables in the project's [.lagoon.yml](../using-lagoon-the-basics/lagoon-yml.md#backup-schedule) file. +If a different backup schedule for production backups is required, this can be specified at a project level via setting the "Backup Schedule" variables in the project's [.lagoon.yml](../concepts-basics/lagoon-yml.md#backup-schedule) file. ### Backup Retention @@ -19,7 +19,7 @@ Production environment backups will be held according to the following schedule * Monthly: 1 * Hourly: 0 -If a different retention period for production backups is required, this can be specified at a project level via setting the "Backup Retention" variables in the project's [.lagoon.yml](../using-lagoon-the-basics/lagoon-yml.md#backup-retention) file. +If a different retention period for production backups is required, this can be specified at a project level via setting the "Backup Retention" variables in the project's [.lagoon.yml](../concepts-basics/lagoon-yml.md#backup-retention) file. ## Development Environments @@ -31,7 +31,7 @@ Backups stored in Restic will be tracked within Lagoon, and can be recovered via ## Custom Backup and/or Restore Locations -Lagoon supports custom backup and restore locations via the use of the "[Custom Backup Settings](../using-lagoon-advanced/environment-variables.md#custom-backup-settings)" and/or "[Custom Restore Settings](../using-lagoon-advanced/environment-variables.md#custom-restore-settings)" variables stored in the Lagoon API for each project. +Lagoon supports custom backup and restore locations via the use of the "[Custom Backup Settings](../concepts-advanced/environment-variables.md#custom-backup-settings)" and/or "[Custom Restore Settings](../concepts-advanced/environment-variables.md#custom-restore-location)" variables stored in the Lagoon API for each project. !!! danger Proceed with caution: Setting these variables will override backup/restore storage locations that may be configured at a cluster level. Any misconfiguration will cause backup/restore failures. diff --git a/docs/using-lagoon-advanced/base-images.md b/docs/concepts-advanced/base-images.md similarity index 95% rename from docs/using-lagoon-advanced/base-images.md rename to docs/concepts-advanced/base-images.md index 39195f191f..4d316b118f 100644 --- a/docs/using-lagoon-advanced/base-images.md +++ b/docs/concepts-advanced/base-images.md @@ -37,7 +37,7 @@ We only require this metapackage, which points to a GitHub repository. ### `docker-compose.yml` -Other pieces of your project are defined in [`docker-compose.yml`](../using-lagoon-the-basics/docker-compose-yml.md). For example, if you have a Drupal project, you need the Drupal image, but you also need MariaDB, Solr, Redis, and Varnish. We have versions of these services optimized for Drupal, all of which are included in `docker-compose.yml`. +Other pieces of your project are defined in [`docker-compose.yml`](../concepts-basics/docker-compose-yml.md). For example, if you have a Drupal project, you need the Drupal image, but you also need MariaDB, Solr, Redis, and Varnish. We have versions of these services optimized for Drupal, all of which are included in `docker-compose.yml`. ### Drupal @@ -84,7 +84,7 @@ If your project makes use of [queues](https://laravel.com/docs/5.8/queues), you ## Understanding the process of building a base image -There are several parts to the process of building a base image. All of the major steps are represented in the Makefile. The Jenkinsfile contains a more stripped-down view. Taking a look at both files will give you a good understanding of what happens during this process. Most steps can be tested locally \(this is important when building new versions of the base image\). After you’ve created and tested everything locally and pushed it up, the actual base image is built by [Jenkins](https://jenkins.io/) and pushed to [Harbor](../administering-lagoon/using-harbor/README.md). +There are several parts to the process of building a base image. All of the major steps are represented in the Makefile. The Jenkinsfile contains a more stripped-down view. Taking a look at both files will give you a good understanding of what happens during this process. Most steps can be tested locally \(this is important when building new versions of the base image\). After you’ve created and tested everything locally and pushed it up, the actual base image is built by [Jenkins](https://jenkins.io/) and pushed to [Harbor](../using-lagoon-advanced/using-harbor/README.md). ### Makefile and build assumptions @@ -143,7 +143,7 @@ This is just pulling down the Git repository locally. In the case of the Drupal git clone ssh://git@bitbucket.biscrum.com:7999/webpro/drupal8_base_image.git ``` -![Running \`git clone\` on the base image repository.](../0.gif) +![Running \`git clone\` on the base image repository.](../images/0.gif) #### Step 2 - Make the changes to the repository @@ -158,13 +158,13 @@ Here we run: composer require drupal/clamav ``` -![Running \`composer require drupal/clamav\`](../step2_require.gif) +![Running \`composer require drupal/clamav\`](../images/step2_require.gif) When the Composer require process completes, the package should then appear in the `composer.json` file. Here we open the `composer.json` file and take a look at the list of required packages, and check that the ClamAV package is listed, and see that it is there: -![Opening composer.json to check that ClamAV is now required.](../2.gif) +![Opening composer.json to check that ClamAV is now required.](../images/2.gif) #### Step 2.2 - Ensure that the required Drupal module is enabled in template-based derived images @@ -172,7 +172,7 @@ For any modules now added to the base image, we need to ensure that they’re en Here we open `web/modules/contrib/lagoon/lagoon_bundle/lagoon_bundle.info.yml` and add `clamav:clamav` as a dependency: -![Adding ClamAV as a dependency of Lagoon Bundle.](../3.png) +![Adding ClamAV as a dependency of Lagoon Bundle.](../images/3.png) Adding a dependency to this will ensure that whenever the Lagoon Bundle module is enabled on the derived image, its dependencies \(in this case, the just-added ClamAV module\) will also be enabled. This is enforced by a post-rollout script which enables `lagoon_bundle` on the derived images when they are rolled out. @@ -182,7 +182,7 @@ This will depend on what you’re testing. In the case of adding the ClamAV modu Here we check that the module is downloaded to `/app/web/modules/contrib`: -![Checking /app/web/modules/contrib to make sure ClamAV is downloaded. ](../4.gif) +![Checking /app/web/modules/contrib to make sure ClamAV is downloaded. ](../images/4.gif) And then we check that when we enable the `lagoon_bundle` module, it enables `clamav` by running: @@ -190,7 +190,7 @@ And then we check that when we enable the `lagoon_bundle` module, it enables `cl drush pm-enable lagoon_bundle -y ``` -![Running \`drush pm-enable lagoon\_bundle -y\` and seeing that it also enables ClamAV](../5.gif) +![Running \`drush pm-enable lagoon\_bundle -y\` and seeing that it also enables ClamAV](../images/5.gif) !!! warning You’ll see that there is a JWT error in the container above. You can safely ignore this in the demonstration above - but, for background, you will see this error when there is no Lagoon environment for the site you’re working on. @@ -217,7 +217,7 @@ We check that we have committed \(but not pushed\) our changes, just as you woul !!! Danger The tags must be pushed explicitly in their own step! -![Demonstrating how to tag and push a base image.](../6.gif) +![Demonstrating how to tag and push a base image.](../images/6.gif) #### How Git tags map to image tags @@ -243,7 +243,7 @@ Images are tagged using the following rules, and images will be built for each o 3. Click the branch you would like to build. 4. Click “Build Now.” -![Showing how to build a base image in the Jenkins UI.](../7.gif) +![Showing how to build a base image in the Jenkins UI.](../images/7.gif) This will kick off the build process which, if successful, will push up the new images to Harbor. @@ -251,7 +251,7 @@ If the build is not successful, you can click into the build itself and read the As shown in the screenshot below from Harbor, the image we’ve just built in Jenkins has been uploaded and tagged in Harbor, where it will now be scanned for any vulnerabilities. Since it was tagged as v0.0.9, an image with that tag is present, and because we built the **main** branch, the “latest” image has also been built. At this stage, the v0.0.9 and “latest” images are identical. -![Screenshot from Harbor showing uploaded and tagged images.](../8.png) +![Screenshot from Harbor showing uploaded and tagged images.](../images/8.png) ## Acknowledgement diff --git a/docs/using-lagoon-advanced/environment-idling.md b/docs/concepts-advanced/environment-idling.md similarity index 100% rename from docs/using-lagoon-advanced/environment-idling.md rename to docs/concepts-advanced/environment-idling.md diff --git a/docs/using-lagoon-advanced/environment-types.md b/docs/concepts-advanced/environment-types.md similarity index 100% rename from docs/using-lagoon-advanced/environment-types.md rename to docs/concepts-advanced/environment-types.md diff --git a/docs/using-lagoon-advanced/environment-variables.md b/docs/concepts-advanced/environment-variables.md similarity index 83% rename from docs/using-lagoon-advanced/environment-variables.md rename to docs/concepts-advanced/environment-variables.md index b064413302..b359ff855f 100644 --- a/docs/using-lagoon-advanced/environment-variables.md +++ b/docs/concepts-advanced/environment-variables.md @@ -4,29 +4,29 @@ It is common to store API tokens or credentials for applications in environment Following best practices, those credentials are different per environment. We allow each environment to use a separate set of environment variables defined in environment variables or environment files. -As there can be environment variables defined in either the Dockerfile or during runtime \(via API environment variables\), we have a hierarchy of environment variables: environment variables defined in lower numbers are stronger. +As there can be environment variables defined in either the Dockerfile or during runtime (via API environment variables), we have a hierarchy of environment variables: environment variables defined in lower numbers are stronger. -1. Environment variables \(defined via Lagoon API\) - environment specific. -2. Environment variables \(defined via Lagoon API\) - project-wide. -3. Environment variables defined in Dockerfile \(`ENV` command\). -4. Environment variables defined in `.lagoon.env.$LAGOON_GIT_BRANCH` or `.lagoon.env.$LAGOON_GIT_SAFE_BRANCH` \(if the file exists and where `$LAGOON_GIT_BRANCH` `$LAGOON_GIT_SAFE_BRANCH` are the name and safe name of the branch this Docker image has been built for\), use this for overwriting variables for only specific branches. -5. Environment variables defined in `.lagoon.env` \(if it exists\), use this for overwriting variables for all branches. +1. Environment variables (defined via Lagoon API) - environment specific. +2. Environment variables (defined via Lagoon API) - project-wide. +3. Environment variables defined in Dockerfile (`ENV` command). +4. Environment variables defined in `.lagoon.env.$LAGOON_GIT_BRANCH` or `.lagoon.env.$LAGOON_GIT_SAFE_BRANCH` (if the file exists and where `$LAGOON_GIT_BRANCH` `$LAGOON_GIT_SAFE_BRANCH` are the name and safe name of the branch this Docker image has been built for), use this for overwriting variables for only specific branches. +5. Environment variables defined in `.lagoon.env` (if it exists), use this for overwriting variables for all branches. 6. Environment variables defined in `.env`. 7. Environment variables defined in `.env.defaults`. `.lagoon.env.$LAGOON_GIT_BRANCH`, `.lagoon.env.$LAGOON_GIT_SAFE_BRANCH`, `.env`, and `.env.defaults` are all sourced by the individual containers themselves as part of running their entrypoint scripts. They are not read by Lagoon, but by the containers `ENTRYPOINT` scripts, which look for them in the containers working directory. If environment variables don't appear as expected, check if your container has a `WORKDIR` setting that points to somewhere else. -## Environment Variables \(Lagoon API\) +## Environment Variables (Lagoon API) -We suggest using the Lagoon API environment variable system for variables that you don't want to keep in your Git repository \(like secrets or API keys\), as they could be compromised by somebody having them on their local development environment or on the internet, etc. +We suggest using the Lagoon API environment variable system for variables that you don't want to keep in your Git repository (like secrets or API keys), as they could be compromised by somebody having them on their local development environment or on the internet, etc. -The Lagoon API allows you to define project-wide or environment-specific variables. Additionally, they can be defined for a scope-only build-time or runtime. They are all created via the Lagoon GraphQL API. Read more on how to use the GraphQL API [in our GraphQL API](graphql.md) documentation. +The Lagoon API allows you to define project-wide or environment-specific variables. Additionally, they can be defined for a scope-only build-time or runtime. They are all created via the Lagoon GraphQL API. Read more on how to use the GraphQL API [in our GraphQL API](../interacting/graphql.md) documentation. -### Runtime Environment Variables \(Lagoon API\) +### Runtime Environment Variables (Lagoon API) Runtime environment variables are automatically made available in all containers, but they are only added or updated after an environment has been re-deployed. -This defines a project wide runtime variable \(available in all environments\) for the project with ID `463`: +This defines a project wide runtime variable (available in all environments) for the project with ID `463`: ```graphql title="Add runtime variable" mutation addRuntimeEnv { @@ -44,7 +44,7 @@ mutation addRuntimeEnv { } ``` -This defines a environment ID `546` specific runtime variable \(available only in that specific environment\): +This defines a environment ID `546` specific runtime variable (available only in that specific environment): ```graphql title="Define environment ID" mutation addRuntimeEnv { @@ -62,16 +62,17 @@ mutation addRuntimeEnv { } ``` -### Build-time Environment Variables \(Lagoon API\) +### Build-time Environment Variables (Lagoon API) Build-time environment variables are only available during a build and need to be consumed in Dockerfiles via: ```graphql title="Using build-time environment variables" ARG MYVARIABLENAME ``` + Typically the `ARG` will go after the FROM. Read [the docker documentation about ARG and FROM](https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact). -This defines a project-wide build-time variable \(available in all environments\) for the project with ID `463`: +This defines a project-wide build-time variable (available in all environments) for the project with ID `463`: ```graphql title="Define a project-wide build-time variable" mutation addBuildtimeEnv { @@ -88,7 +89,7 @@ mutation addBuildtimeEnv { } ``` -This defines an environment ID `546`specific build-time variable \(available only in that specific environment\): +This defines an environment ID `546`specific build-time variable (available only in that specific environment): ```graphql title="Define environment ID" mutation addBuildtimeEnv { @@ -98,9 +99,9 @@ mutation addBuildtimeEnv { } ``` -Container registry environment variables are only available during a build and are used when attempting to log in to a private registry. They are used to store the password for the user defined in [Specials » `container-registries`](../using-lagoon-the-basics/lagoon-yml.md#specials). They can be applied at the project or environment level. +Container registry environment variables are only available during a build and are used when attempting to log in to a private registry. They are used to store the password for the user defined in [Specials » `container-registries`](../concepts-basics/lagoon-yml.md#specials). They can be applied at the project or environment level. -This defines a project-wide container registry variable \(available in all environments\) for the project with ID `463`: +This defines a project-wide container registry variable (available in all environments) for the project with ID `463`: ```graphql title="Define project-wide container registry variable" mutation addContainerRegistryEnv { @@ -117,7 +118,7 @@ mutation addContainerRegistryEnv { } ``` -This defines a environment ID `546` specific container registry variable \(available only in that specific environment\): +This defines a environment ID `546` specific container registry variable (available only in that specific environment): ```graphql title="Define environment ID" mutation addContainerRegistryEnv { @@ -134,11 +135,11 @@ mutation addContainerRegistryEnv { } ``` -### Global Environment Variables \(Lagoon API\) +### Global Environment Variables (Lagoon API) Global environment variables are available as both a build-time environment variable so that it may be consumed by builds, and also a runtime variable so that it is available within running containers. -## Environment Files \(existing directly in the Git Repo\) +## Environment Files (existing directly in the Git Repo) If you have environment variables that can safely be saved within a Git repository, we suggest adding them directly into the Git repository in an environment file. These variables will also be available within local development environments and are therefore more portable. @@ -156,7 +157,7 @@ If you want to define environment variables different per environment you can cr ### `.env` and `.env.defaults` -`.env` and `.env.defaults` will act as the default values for environment variables if none other is defined. For example, as default environment variables for pull request environments \(see [Workflows](workflows.md#pull-requests)\). +`.env` and `.env.defaults` will act as the default values for environment variables if none other is defined. For example, as default environment variables for pull request environments (see [Workflows](workflows.md#pull-requests)). ## Special Environment Variables diff --git a/docs/administering-lagoon/feature-flags.md b/docs/concepts-advanced/feature-flags.md similarity index 100% rename from docs/administering-lagoon/feature-flags.md rename to docs/concepts-advanced/feature-flags.md diff --git a/docs/concepts-advanced/index.md b/docs/concepts-advanced/index.md new file mode 100644 index 0000000000..194a0ec856 --- /dev/null +++ b/docs/concepts-advanced/index.md @@ -0,0 +1,5 @@ +# Advanced Lagoon Concepts + +This section covers some of the more advanced concepts in Lagoon. If you're new to Lagoon, start with [Basic Lagoon Concepts](../concepts-basics/index.md). + +If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our [Discord](../community/discord.md). diff --git a/docs/using-lagoon-advanced/service-types.md b/docs/concepts-advanced/service-types.md similarity index 96% rename from docs/using-lagoon-advanced/service-types.md rename to docs/concepts-advanced/service-types.md index 9d553c3a47..fbb99e27c6 100644 --- a/docs/using-lagoon-advanced/service-types.md +++ b/docs/concepts-advanced/service-types.md @@ -1,13 +1,13 @@ # Service Types -The below lists all service types that can be defined via `lagoon.type` within a [`docker-compose.yml` file](../using-lagoon-the-basics/docker-compose-yml.md). +The below lists all service types that can be defined via `lagoon.type` within a [`docker-compose.yml` file](../concepts-basics/docker-compose-yml.md). !!! Warning Once a `lagoon.type` is defined and the environment is deployed, changing it to a different type is not supported and could result in a broken environment. ## `basic` -Basic container, good to use for most applications that don't have an existing template. No persistent storage. The port can be changed using a label. If an [autogenerated route](../using-lagoon-the-basics/docker-compose-yml.md#auto-generated-routes) is not required (e.g. for an internal-facing service, set `lagoon.autogeneratedroute: false` in the docker-compose.yml) +Basic container, good to use for most applications that don't have an existing template. No persistent storage. The port can be changed using a label. If an [autogenerated route](../concepts-basics/docker-compose-yml.md#auto-generated-routes) is not required (e.g. for an internal-facing service, set `lagoon.autogeneratedroute: false` in the docker-compose.yml) | Healthcheck | Exposed Ports | Auto Generated Routes | Storage | Additional customization parameter | | :--- | :--- | :--- | :--- | :--- | diff --git a/docs/using-lagoon-advanced/workflows.md b/docs/concepts-advanced/workflows.md similarity index 100% rename from docs/using-lagoon-advanced/workflows.md rename to docs/concepts-advanced/workflows.md diff --git a/docs/using-lagoon-the-basics/build-and-deploy-process.md b/docs/concepts-basics/build-and-deploy-process.md similarity index 98% rename from docs/using-lagoon-the-basics/build-and-deploy-process.md rename to docs/concepts-basics/build-and-deploy-process.md index e5d8c4c09c..6db17130fd 100644 --- a/docs/using-lagoon-the-basics/build-and-deploy-process.md +++ b/docs/concepts-basics/build-and-deploy-process.md @@ -100,7 +100,7 @@ Creation of these objects will also automatically cause Kubernetes or OpenShift Now Lagoon waits! It waits for all of the just-triggered deployments of the new pods to be finished, as well as for their health checks to be successful. -If any of the deployments or health checks fail, the deployment will be stopped here, and you will be informed via the [defined notification systems](../administering-lagoon/graphql-queries.md#adding-notifications-to-the-project) \(like Slack\) that the deployment has failed. +If any of the deployments or health checks fail, the deployment will be stopped here, and you will be informed via the [defined notification systems](../interacting/graphql-queries.md#adding-notifications-to-the-project) \(like Slack\) that the deployment has failed. ## 11. Run defined post-rollout tasks diff --git a/docs/concepts-basics/building-blocks/deploy-targets.md b/docs/concepts-basics/building-blocks/deploy-targets.md new file mode 100644 index 0000000000..49dc03eac5 --- /dev/null +++ b/docs/concepts-basics/building-blocks/deploy-targets.md @@ -0,0 +1,5 @@ +# Deploy Targets + +A _deploy target_ tells Lagoon where to deploy your project - into which cluster. A project may have one or more deploy targets, for example, one for production and one for testing. Deploy targets have options that allow for automatic deployment of defined branches, as well as pull requests. + +[Read more about deploy targets](../../using-lagoon-advanced/deploytarget-configs.md). diff --git a/docs/concepts-basics/building-blocks/groups.md b/docs/concepts-basics/building-blocks/groups.md new file mode 100644 index 0000000000..87d8fd8f32 --- /dev/null +++ b/docs/concepts-basics/building-blocks/groups.md @@ -0,0 +1,5 @@ +# Groups + +_Groups_ are made up of users who have roles. An organization can have one or more groups. Each project can be assigned one or more groups. Groups can be assigned to multiple projects. Groups are created independently of projects, and then assigned to them. + +Organizations have a quota to limit the number of groups assigned to it. If you need to change the quota, please contact your Lagoon administrator. diff --git a/docs/concepts-basics/building-blocks/notifications.md b/docs/concepts-basics/building-blocks/notifications.md new file mode 100644 index 0000000000..1812169d31 --- /dev/null +++ b/docs/concepts-basics/building-blocks/notifications.md @@ -0,0 +1,15 @@ +# Notifications + +_Notifications_ are how Lagoon informs users about what's going on with their projects. There are several types of notifications: + + - Slack + - RocketChat + - Email + - Webhook + - Microsoft Teams + +A project can have one or more notifications. Organizations have a notification quota for all of their projects. Notifications are created independently of projects, and can then be assigned to one or more projects. + +[Learn how to add notifications step-by-step in the Lagoon UI](../../interacting/organizations.md#add-an-email-notification-to-a-project). + +[Learn how to add notifications notifications via the API](../../interacting/graphql-queries.md#adding-notifications-to-the-project). diff --git a/docs/concepts-basics/building-blocks/organizations.md b/docs/concepts-basics/building-blocks/organizations.md new file mode 100644 index 0000000000..13d237c2fa --- /dev/null +++ b/docs/concepts-basics/building-blocks/organizations.md @@ -0,0 +1,9 @@ +# Organizations + +An _organization_ is an entity which can contain one or more projects, groups, users, and notifications. Organizations help control access to projects, making it easy to create groups, add and remove users, and assign groups to projects. + +Organizations add a layer of structure to help imitate life - for example, you may be a project manager who creates an organization to reflect the team working on a specific site. So that organization would contain the project or projects that make up that site, all of the people who need access to work on the site as users in a group called _developers_, and maybe another group of people who just need access to Lagoon to view the site and any issues, called _viewers_, each with the appropriate roles. + +Organizations have a quota to limit the number of projects, groups, notifications, and environments that can be assigned to it. If you need to change this quota, please contact your Lagoon administrator. + +[Learn more about how to interact with Organizations](../../interacting/organizations.md). diff --git a/docs/concepts-basics/building-blocks/projects.md b/docs/concepts-basics/building-blocks/projects.md new file mode 100644 index 0000000000..30e5099e08 --- /dev/null +++ b/docs/concepts-basics/building-blocks/projects.md @@ -0,0 +1,3 @@ +# Projects + +A _project_ is an application that lives on Lagoon. An organization may have one or more projects. A project may have one or more users, notifications, and at least one deploy target. Organizations have a quota to limit the amount of projects that can be created. diff --git a/docs/concepts-basics/building-blocks/roles.md b/docs/concepts-basics/building-blocks/roles.md new file mode 100644 index 0000000000..74979d0b2f --- /dev/null +++ b/docs/concepts-basics/building-blocks/roles.md @@ -0,0 +1,28 @@ +# Roles + +_Roles_ determine a user's access to projects. Users are given roles in groups and organizations. + +Members of groups can be given the following roles: + +- Guest +- Reporter +- Developer +- Maintainer +- Owner + +These roles and their permissions are described in more depth here: [Role-Based Access Control](../../interacting/rbac.md). + +Members of organizations can be given the following roles: + +- Org Owner +- Org Viewer + +!!! info inline end "Changing Quotas" + + If you need to change quotas, please contact your Lagoon administrator. + +An _organization owner_ can do everything to do with administering an organization aside from changing quotas. They can add and delete users, groups, projects, deploy targets, and notifcations + +An _organization viewer_ is a read-only role that can only view the organization, but cannot make any changes or additions. They can view the projects, groups, users, and notifications within an organization but cannot modify them. + +A user who has not been assigned as an owner or viewer cannot see the organization. diff --git a/docs/concepts-basics/building-blocks/users.md b/docs/concepts-basics/building-blocks/users.md new file mode 100644 index 0000000000..3493536279 --- /dev/null +++ b/docs/concepts-basics/building-blocks/users.md @@ -0,0 +1,5 @@ +# Users + +A _user_ is a Lagoon account that allows you to interact with the Lagoon system. A user may belong to one or more organizations and groups, and each group may have a different role granting various permissions. Organizations, groups, and roles grant users access to projects. + +[Read more about user roles](roles.md). diff --git a/docs/using-lagoon-the-basics/docker-compose-yml.md b/docs/concepts-basics/docker-compose-yml.md similarity index 78% rename from docs/using-lagoon-the-basics/docker-compose-yml.md rename to docs/concepts-basics/docker-compose-yml.md index 2bd4335a47..79199f065e 100644 --- a/docs/using-lagoon-the-basics/docker-compose-yml.md +++ b/docs/concepts-basics/docker-compose-yml.md @@ -6,7 +6,7 @@ The `docker-compose.yml` file is used by Lagoon to: * Define how the images for the containers are built. * Define additional configurations like persistent volumes. -Docker Compose \(the tool\) is very strict in validating the content of the YAML file, so we can only do configuration within `labels` of a service definition. +Docker Compose (the tool) is very strict in validating the content of the YAML file, so we can only do configuration within `labels` of a service definition. !!! warning Lagoon only reads the labels, service names, image names and build definitions from a `docker-compose.yml` file. Definitions like: ports, environment variables, volumes, networks, links, users, etc. are IGNORED. @@ -95,7 +95,7 @@ You are unlikely to need to change this, unless you are on Linux and would like This defines all the services you want to deploy. _Unfortunately,_ Docker Compose calls them services, even though they are actually containers. Going forward we'll be calling them services, and throughout this documentation. -The name of the service \(`nginx`, `php`, and `mariadb` in the example above\) is used by Lagoon as the name of the Kubernetes pod \(yet another term - again, we'll be calling them services\) that is generated, plus also any additional Kubernetes objects that are created based on the defined `lagoon.type`, which could be things like services, routes, persistent storage, etc. +The name of the service (`nginx`, `php`, and `mariadb` in the example above) is used by Lagoon as the name of the Kubernetes pod (yet another term - again, we'll be calling them services) that is generated, plus also any additional Kubernetes objects that are created based on the defined `lagoon.type`, which could be things like services, routes, persistent storage, etc. Please note that service names adhere to the [RFC 1035](https://tools.ietf.org/html/rfc1035) DNS label standard. Service names must: @@ -131,7 +131,7 @@ If you don't need to build a Dockerfile and just want to use an existing Dockerf Lagoon needs to know what type of service you are deploying in order to configure the correct Kubernetes or OpenShift objects. -This is done via the `lagoon.type` label. There are many different types to choose from. Check [Service Types](../using-lagoon-advanced/service-types.md) to see all of them and their additional configuration possibilities. +This is done via the `lagoon.type` label. There are many different types to choose from. Check [Service Types](../concepts-advanced/service-types.md) to see all of them and their additional configuration possibilities. #### Skip/Ignore containers @@ -143,32 +143,32 @@ Some containers need persistent storage. Lagoon allows for each container to hav In many cases, Lagoon knows where that persistent storage needs to go. For example, for a MariaDB container, Lagoon knows that the persistent storage should be put into `/var/lib/mysql` , and puts it there automatically without any extra configuration to define that. For some situations, though, Lagoon needs your help to know where to put the persistent storage: -* `lagoon.persistent` - The **absolute** path where the persistent storage should be mounted \(the above example uses `/app/web/sites/default/files/` which is where Drupal expects its persistent storage\). +* `lagoon.persistent` - The **absolute** path where the persistent storage should be mounted (the above example uses `/app/web/sites/default/files/` which is where Drupal expects its persistent storage). * `lagoon.persistent.name` - Tells Lagoon to not create a new persistent storage for that service, but instead mounts the persistent storage of another defined service into this service. -* `lagoon.persistent.size` - The size of persistent storage you require \(Lagoon usually gives you minimum 5G of persistent storage, if you need more, define it here\). -* `lagoon.persistent.class` - By default Lagoon automatically assigns the right storage class for your service \(like SSDs for MySQL, bulk storage for Nginx, etc.\). If you need to overwrite this, you can do so here. This is highly dependent on the underlying Kubernetes/OpenShift that Lagoon runs on. Ask your Lagoon administrator about this. +* `lagoon.persistent.size` - The size of persistent storage you require (Lagoon usually gives you minimum 5G of persistent storage, if you need more, define it here). +* `lagoon.persistent.class` - By default Lagoon automatically assigns the right storage class for your service (like SSDs for MySQL, bulk storage for Nginx, etc.). If you need to overwrite this, you can do so here. This is highly dependent on the underlying Kubernetes/OpenShift that Lagoon runs on. Ask your Lagoon administrator about this. ### Auto-generated Routes -The docker-compose.yml file also supports per-service enabling and disabling of [autogenerated routes](../using-lagoon-the-basics/lagoon-yml.md#routes) +The docker-compose.yml file also supports per-service enabling and disabling of [autogenerated routes](./lagoon-yml.md#routes) -* `lagoon.autogeneratedroute: false` label will stop a route from being automatically created for that service. It can be applied to all services with autogenerated routes, but is mostly useful for the [`basic`](../using-lagoon-advanced/service-types.md#basic) and [`basic-persistent`](../using-lagoon-advanced/service-types.md#basic-persistent) service types when used to create an additional internal-facing service for a database service or similar. The inverse is also true - it will enable an auto-generated route for a service when the .lagoon.yml file [disables them](lagoon-yml.md#routesautogenerate). +* `lagoon.autogeneratedroute: false` label will stop a route from being automatically created for that service. It can be applied to all services with autogenerated routes, but is mostly useful for the [`basic`](../concepts-advanced/service-types.md#basic) and [`basic-persistent`](../concepts-advanced/service-types.md#basic-persistent) service types when used to create an additional internal-facing service for a database service or similar. The inverse is also true - it will enable an auto-generated route for a service when the .lagoon.yml file [disables them](lagoon-yml.md#routesautogenerate). ## Multi-Container Pods Kubernetes and OpenShift don't deploy plain containers. Instead, they deploy pods, with each one or more containers. Usually Lagoon creates a single pod with a container inside for each defined `docker-compose` service. For some cases, we need to put two containers inside a single pod, as these containers are so dependent on each other that they should always stay together. An example for such a situation is the PHP and NGINX containers that both contain PHP code of a web application like Drupal. -For these cases, it is possible to tell Lagoon which services should stay together, which is done in the following way \(remember that we are calling containers `services` because of `docker-compose`: +For these cases, it is possible to tell Lagoon which services should stay together, which is done in the following way (remember that we are calling containers `services` because of `docker-compose`: -1. Define both services with a `lagoon.type` that expects two services \(in the example this is `nginx-php-persistent` defined on the `nginx` and `php` services\). -2. Link the second service with the first one, defining the label `lagoon.name` of the second one with the first one. \(in the example this is done with defining `lagoon.name: nginx`\). +1. Define both services with a `lagoon.type` that expects two services (in the example this is `nginx-php-persistent` defined on the `nginx` and `php` services). +2. Link the second service with the first one, defining the label `lagoon.name` of the second one with the first one. (in the example this is done with defining `lagoon.name: nginx`). This will cause Lagoon to realize that the `nginx` and `php` containers are combined in a pod that will be called `nginx`. !!! warning Once you have set the `lagooon.name` of a service, do NOT rename it. This will cause all kind of havoc in your containers and break things. -Lagoon still needs to understand which of the two services is the actual individual service type \(`nginx` and `php` in this case\). It does this by searching for service names with the same name that are given by the type, so `nginx-php-persistent` expects one service with the name `nginx` and one with `php` in the `docker-compose.yml.` If for any reason you want to use different names for the services, or you need for than one pod with the type `nginx-php-persistent` there is an additional label `lagoon.deployment.servicetype` which can be used to define the actual service type. +Lagoon still needs to understand which of the two services is the actual individual service type (`nginx` and `php` in this case). It does this by searching for service names with the same name that are given by the type, so `nginx-php-persistent` expects one service with the name `nginx` and one with `php` in the `docker-compose.yml.` If for any reason you want to use different names for the services, or you need for than one pod with the type `nginx-php-persistent` there is an additional label `lagoon.deployment.servicetype` which can be used to define the actual service type. An example: @@ -193,11 +193,11 @@ php: lagoon.deployment.servicetype: php ``` -In the example above, the services are named `nginx` and `php` \(but you can call them whatever you want\). The `lagoon.name` tells Lagoon which services go together - all of the services with the same name go together. +In the example above, the services are named `nginx` and `php` (but you can call them whatever you want). The `lagoon.name` tells Lagoon which services go together - all of the services with the same name go together. In order for Lagoon to realize which one is the `nginx` and which one is the `php` service, we define it via `lagoon.deployment.servicetype: nginx` and `lagoon.deployment.servicetype: php`. -## Helm Templates \(Kubernetes only\) +## Helm Templates (Kubernetes only) Lagoon uses [Helm](https://helm.sh/) for templating on Kubernetes. To do this, a series of [Charts](https://github.com/uselagoon/build-deploy-tool/tree/main/legacy/helmcharts) are included with the `build-deploy-tool` image. @@ -227,16 +227,16 @@ or Failed to solve: drupal9-base-cli: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed` ``` -* These are resolved in Docker Compose v2.13.0 +* These are resolved in Docker Compose v2.13.0. * This message means that your build has tried to access a Docker image that hasn't been built yet. As BuildKit builds in parallel, if you have a Docker image that inherits another one (as we do in Drupal with the CLI). -* You can also use the [target](https://docs.docker.com/compose/compose-file/build/#target) field inside the build to reconfigure as a multi-stage build -* If you are already running a newer Docker Compose version, this error may be because you're defaulting to using a docker-container build context with buildx. You should make sure that `docker buildx ls` shows the docker builder as default, not a docker-container based one. Check the docs on docker buildx [here](https://docs.docker.com/engine/reference/commandline/buildx_use/) +* You can also use the [target](https://docs.docker.com/compose/compose-file/build/#target) field inside the build to reconfigure as a multi-stage build. +* If you are already running a newer Docker Compose version, this error may be because you're defaulting to using a docker-container build context with buildx. You should make sure that `docker buildx ls` shows the docker builder as default, not a docker-container based one. Check the docs on Docker buildx [here](https://docs.docker.com/engine/reference/commandline/buildx_use/). ``` shell title="Docker Compose output indicating volumes_from error" no such service: container:amazeeio-ssh-agent ``` -* This is resolved in Docker Compose v2.17.3 +* This is resolved in Docker Compose v2.17.3. * This message means that the service that provides SSH access into locally running containers runs outside of your Docker Compose stack and is inaccessible. * The section can also be removed from your `docker-compose.yml` file if you don't require SSH access from inside your local environment. @@ -248,28 +248,33 @@ With the release of Lagoon v2.11.0, Lagoon now provides support for more advance ## Docker Compose Errors in Lagoon Builds -See the [Lagoon Build Errors page](lagoon-build-errors-and-warnings.md#docker-compose-errors) for how to resolve common build errors with Docker Compose +See the [Lagoon Build Errors page](../using-lagoon-the-basics/lagoon-build-errors-and-warnings.md#docker-compose-errors) for how to resolve common build errors with Docker Compose. ## Common Docker Compose Issues -This section outlines some of the more common Docker Compose errors, and how to remedy them. These may present in local development, or as [Lagoon Build Errors and Warnings](lagoon-build-errors-and-warnings.md#docker-compose-errors) +This section outlines some of the more common Docker Compose errors, and how to remedy them. These may present in local development, or as [Lagoon Build Errors and Warnings](../using-lagoon-the-basics/lagoon-build-errors-and-warnings.md#docker-compose-errors). ### Dual Mapping keys + ``` shell title="Docker Compose output indicating mapping key error" ERR: yaml: unmarshal errors: line 22: mapping key "<<" already defined at line 21 ``` -Early releases of the Lagoon examples contained a pair of YAML aliases attached to services to provide volumes and user code. Newer releases of Docker Compose will report this as an error. Whilst all examples have now been updated, there may be some older codebases around that need updating. + +Early releases of the Lagoon examples contained a pair of YAML aliases attached to services to provide volumes and user code. Newer releases of Docker Compose will report this as an error. While all examples have now been updated, there may be some older codebases around that need updating. This error arises from Docker Compose not knowing what it is inserting into the array, so just assuming it may be duplicate. -If your docker-compose.yml contains one or more of this (or similar) code blocks, you will be affected. +If your `docker-compose.yml` contains one or more of this (or similar) code blocks, you will be affected. + ``` yaml title="Docker Compose error with dual mapping keys" ... << : [*default-volumes] << : [*default-user] ... ``` + The corrected version combines both aliases into a single mapping key - you'll need to remedy all occurrances. + ``` yaml title="Docker Compose correct insertion of multiple alias mapping keys" ... << : [*default-volumes, *default-user] diff --git a/docs/concepts-basics/index.md b/docs/concepts-basics/index.md new file mode 100644 index 0000000000..b1a227d735 --- /dev/null +++ b/docs/concepts-basics/index.md @@ -0,0 +1,5 @@ +# Basic Lagoon Concepts + +This section covers some of the basic concepts in Lagoon. If you're already familiar with these, move on to [Advanced Lagoon Concepts](../concepts-advanced/index.md). + +If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our [Discord](../community/discord.md). diff --git a/docs/using-lagoon-the-basics/lagoon-yml.md b/docs/concepts-basics/lagoon-yml.md similarity index 99% rename from docs/using-lagoon-the-basics/lagoon-yml.md rename to docs/concepts-basics/lagoon-yml.md index ea4da26195..21add8f274 100644 --- a/docs/using-lagoon-the-basics/lagoon-yml.md +++ b/docs/concepts-basics/lagoon-yml.md @@ -104,7 +104,7 @@ Common uses for post-rollout tasks include running `drush updb`, `drush cim`, or * `when` * The "when" clause allows for the conditional running of tasks. It expects an expression that will evaluate to a true/false value which determines whether the task should be run. -Note: If you would like to temporarily disable pre/post-rollout tasks during a deployment, you can set either of the following environment variables in the API at the project or environment level \(see how on [Environment Variables](../using-lagoon-advanced/environment-variables.md)\). +Note: If you would like to temporarily disable pre/post-rollout tasks during a deployment, you can set either of the following environment variables in the API at the project or environment level \(see how on [Environment Variables](../concepts-advanced/environment-variables.md)\). * `LAGOON_PREROLLOUT_DISABLED=true` * `LAGOON_POSTROLLOUT_DISABLED=true` @@ -524,7 +524,7 @@ There are 2 ways to define the password used for your registry user. Create an environment variable in the Lagoon API with the type `container_registry`: * `lagoon add variable -p -N -V -S container_registry` -* \(see more on [Environment Variables](../using-lagoon-advanced/environment-variables.md)\) +* \(see more on [Environment Variables](../concepts-advanced/environment-variables.md)\) The name of the variable you create can then be set as the password: diff --git a/docs/contributing-to-lagoon/developing-lagoon.md b/docs/contributing-to-lagoon/developing-lagoon.md index eef1373a6c..d884da247c 100644 --- a/docs/contributing-to-lagoon/developing-lagoon.md +++ b/docs/contributing-to-lagoon/developing-lagoon.md @@ -98,7 +98,7 @@ make kind/get-admin-creds This will retrieve the necessary credentials to interact with the Lagoon. -* The JWT is an admin-scoped token for use as a bearer token with your local GraphQL client. [See more in our GraphQL documentation](../using-lagoon-advanced/graphql.md). +* The JWT is an admin-scoped token for use as a bearer token with your local GraphQL client. [See more in our GraphQL documentation](../interacting/graphql.md). * There is a token for use with the "admin" user in Keycloak, who can access all users, groups, roles, etc. * There is also a token for use with the "lagoonadmin" user in Lagoon, which can be allocated default groups, permissions, etc. @@ -177,7 +177,7 @@ The individual routines relevant to Kubernetes are: Most services are written in [Node.js](https://nodejs.org/en/docs/). As many of these services share similar Node.js code and Node.js packages, we're using a feature of [Yarn](https://yarnpkg.com/en/docs), called [Yarn workspaces](https://yarnpkg.com/en/docs/workspaces). Yarn workspaces need a `package.json` in the project's root directory that defines the workspaces. -The development of the services can happen directly within Docker. Each container for each service is set up in a way that its source code is mounted into the running container \([see `docker-compose.yml`](../using-lagoon-the-basics/docker-compose-yml.md)\). Node.js itself is watching the code via `nodemon` , and restarts the Node.js process automatically on a change. +The development of the services can happen directly within Docker. Each container for each service is set up in a way that its source code is mounted into the running container \([see `docker-compose.yml`](../concepts-basics/docker-compose-yml.md)\). Node.js itself is watching the code via `nodemon` , and restarts the Node.js process automatically on a change. ### lagoon-commons diff --git a/docs/docker-images/mariadb.md b/docs/docker-images/mariadb.md index 1397f8c44a..940c4378f2 100644 --- a/docs/docker-images/mariadb.md +++ b/docs/docker-images/mariadb.md @@ -51,7 +51,7 @@ This image is prepared to be used on Lagoon. There are therefore some things alr The image ships a _default_ MariaDB configuration file, optimized to work on Lagoon. Some options are configurable via [environment -variables](../using-lagoon-advanced/environment-variables.md). +variables](../concepts-advanced/environment-variables.md). ## Environment Variables diff --git a/docs/docker-images/nginx.md b/docs/docker-images/nginx.md index 4d8a59bcda..3d2dc3ebaa 100644 --- a/docs/docker-images/nginx.md +++ b/docs/docker-images/nginx.md @@ -49,7 +49,7 @@ COPY redirects-map.conf /etc/nginx/redirects-map.conf Basic authentication is enabled automatically when the `BASIC_AUTH_USERNAME` and `BASIC_AUTH_PASSWORD` [environment -variables](../using-lagoon-advanced/environment-variables.md) are set. +variables](../concepts-advanced/environment-variables.md) are set. !!! warning Automatic basic auth configuration is provided for convenience. It should not be considered a secure method of protecting your website or private data. @@ -57,7 +57,7 @@ variables](../using-lagoon-advanced/environment-variables.md) are set. ## Environment Variables Some options are configurable via [environment -variables](../using-lagoon-advanced/environment-variables.md). +variables](../concepts-advanced/environment-variables.md). | Environment Variable | Default | Description | | :------------------- | :--------- | :--- | diff --git a/docs/docker-images/nodejs.md b/docs/docker-images/nodejs.md index b02f0c0723..48195eca00 100644 --- a/docs/docker-images/nodejs.md +++ b/docs/docker-images/nodejs.md @@ -10,7 +10,7 @@ The builder variant of those images comes with additional tooling that is needed * 12 \(available for compatibility only, no longer officially supported\) - `uselagoon/node-12` * 14 \(available for compatibility only, no longer officially supported\) - `uselagoon/node-14` -* 16 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/node/16.Dockerfile) (Security Support until September 2023) - `uselagoon/node-16` +* 16 \(available for compatibility only, no longer officially supported\) - `uselagoon/node-16` * 18 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/node/18.Dockerfile) (Security Support until April 2025) - `uselagoon/node-18` * 20 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/node/20.Dockerfile) (Security Support until April 2026) - `uselagoon/node-20` @@ -21,7 +21,7 @@ The builder variant of those images comes with additional tooling that is needed The default exposed port of Node.js containers is port `3000`. -Persistent storage is configurable in Lagoon, using the `lagoon.type: node-persistent`. See [the docs](../using-lagoon-the-basics/docker-compose-yml.md#persistent-storage) for more info +Persistent storage is configurable in Lagoon, using the `lagoon.type: node-persistent`. See [the docs](../concepts-basics/docker-compose-yml.md#persistent-storage) for more info Use the following labels in your `docker-compose.yml` file to configure it: diff --git a/docs/docker-images/opensearch.md b/docs/docker-images/opensearch.md index ff583483f0..6b20cc2cfc 100644 --- a/docs/docker-images/opensearch.md +++ b/docs/docker-images/opensearch.md @@ -11,7 +11,7 @@ ## Environment Variables Some options are configurable via [environment -variables](../using-lagoon-advanced/environment-variables.md). +variables](../concepts-advanced/environment-variables.md). | Environment Variable | Default | Description | | :------------------- | :---------------- | :------------------------------------------------------------------------------------------------------------------------- | diff --git a/docs/docker-images/php-cli.md b/docs/docker-images/php-cli.md index 864aa69447..6d8a59c193 100644 --- a/docs/docker-images/php-cli.md +++ b/docs/docker-images/php-cli.md @@ -11,11 +11,12 @@ The image also contains database `cli`s for both MariaDB and PostgreSQL. ## Supported versions -* 7.3 \(available for compatibility only, no longer officially supported\) -* 7.4 \(available for compatibility only, no longer officially supported\) -* 8.0 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/php-cli/8.0.Dockerfile) (Security Support until November 2023) - `uselagoon/php-8.0-cli` +* 7.3 \(available for compatibility only, no longer officially supported\) - `uselagoon/php-7.3-cli` +* 7.4 \(available for compatibility only, no longer officially supported\) - `uselagoon/php-7.4-cli` +* 8.0 \(available for compatibility only, no longer officially supported\) - `uselagoon/php-8.0-cli` * 8.1 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/php-cli/8.1.Dockerfile) (Security Support until November 2024) - `uselagoon/php-8.1-cli` * 8.2 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/php-cli/8.2.Dockerfile) (Security Support until December 2025) - `uselagoon/php-8.2-cli` +* 8.3 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/php-cli/8.3.Dockerfile) (Security Support until December 2026) - `uselagoon/php-8.3-cli` All PHP versions use their own Dockerfiles. @@ -51,7 +52,7 @@ RUN apk del nodejs-current \ ## Environment variables Some options are configurable via [environment -variables](../using-lagoon-advanced/environment-variables.md). The [php-fpm +variables](../concepts-advanced/environment-variables.md). The [php-fpm environment variables](php-fpm.md#environment-variables) also apply. | Name | Default | Description | diff --git a/docs/docker-images/php-fpm.md b/docs/docker-images/php-fpm.md index 831ce4fb62..87b49886f0 100644 --- a/docs/docker-images/php-fpm.md +++ b/docs/docker-images/php-fpm.md @@ -15,9 +15,10 @@ The [Lagoon `php-fpm` Docker image](https://github.com/uselagoon/lagoon-images/b * 7.3 \(available for compatibility only, no longer officially supported\) - `uselagoon/php-7.3-fpm` * 7.4 \(available for compatibility only, no longer officially supported\) - `uselagoon/php-7.4-fpm` -* 8.0 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/php-fpm/8.0.Dockerfile) (Security Support until November 2023) - `uselagoon/php-8.0-fpm` +* 8.0 \(available for compatibility only, no longer officially supported\) - `uselagoon/php-8.0-fpm` * 8.1 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/php-fpm/8.1.Dockerfile) (Security Support until November 2024) - `uselagoon/php-8.1-fpm` * 8.2 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/php-fpm/8.2.Dockerfile) (Security Support until December 2025) - `uselagoon/php-8.2-fpm` +* 8.3 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/php-fpm/8.3.Dockerfile) (Security Support until December 2026) - `uselagoon/php-8.3-fpm` All PHP versions use their own Dockerfiles. @@ -78,7 +79,7 @@ Here a short description of what this file does: ## Environment Variables Some options are configurable via [environment -variables](../using-lagoon-advanced/environment-variables.md). +variables](../concepts-advanced/environment-variables.md). | Environment Variable | Default | Description | | :----------------------------------- | :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/docs/docker-images/postgres.md b/docs/docker-images/postgres.md index ec8f309247..00dcb459fe 100644 --- a/docs/docker-images/postgres.md +++ b/docs/docker-images/postgres.md @@ -9,6 +9,7 @@ The [Lagoon PostgreSQL Docker image](https://github.com/uselagoon/lagoon-images/ * 13 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/postgres/13.Dockerfile) (Security Support until November 2025) - `uselagoon/postgres-13` * 14 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/postgres/14.Dockerfile) (Security Support until November 2026) - `uselagoon/postgres-14` * 15 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/postgres/15.Dockerfile) (Security Support until November 2027) - `uselagoon/postgres-15` +* 16 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/postgres/16.Dockerfile) (Security Support until November 2028) - `uselagoon/postgres-16` !!! Tip We stop updating EOL PostgreSQL images usually with the Lagoon release that comes after the officially communicated EOL date: [https://www.postgresql.org/support/versioning](https://www.postgresql.org/support/versioning/) diff --git a/docs/docker-images/python.md b/docs/docker-images/python.md index 0c89ad341d..9d11c046b5 100644 --- a/docs/docker-images/python.md +++ b/docs/docker-images/python.md @@ -5,11 +5,12 @@ The [Lagoon `python` Docker image](https://github.com/uselagoon/lagoon-images/tr ## Supported Versions * 2.7 \(available for compatibility only, no longer officially supported\) - `uselagoon/python-2.7` -* 3.7 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/python/3.7.Dockerfile) (Security Support until July 2023) - `uselagoon/python-3.7` +* 3.7 \(available for compatibility only, no longer officially supported\) - `uselagoon/python-3.7` * 3.8 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/python/3.8.Dockerfile) (Security Support until October 2024) - `uselagoon/python-3.8` * 3.9 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/python/3.9.Dockerfile) (Security Support until October 2025) - `uselagoon/python-3.9` * 3.10 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/python/3.10.Dockerfile) (Security Support until October 2026) - `uselagoon/python-3.10` * 3.11 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/python/3.11.Dockerfile) (Security Support until October 2027) - `uselagoon/python-3.11` +* 3.12 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/python/3.12.Dockerfile) (Security Support until October 2028) - `uselagoon/python-3.12` !!! Tip We stop updating and publishing EOL Python images usually with the Lagoon release that comes after the officially communicated EOL date: [https://devguide.python.org/versions/#versions](https://devguide.python.org/versions/#versions). Previous published versions will remain available. @@ -18,7 +19,7 @@ The [Lagoon `python` Docker image](https://github.com/uselagoon/lagoon-images/tr The default exposed port of Python containers is port `8800`. -Persistent storage is configurable in Lagoon, using the `lagoon.type: python-persistent`. See [the docs](../using-lagoon-the-basics/docker-compose-yml.md#persistent-storage) for more info +Persistent storage is configurable in Lagoon, using the `lagoon.type: python-persistent`. See [the docs](../concepts-basics/docker-compose-yml.md#persistent-storage) for more info Use the following labels in your `docker-compose.yml` file to configure it: `lagoon.persistent` = use this to define the path in the container to use as persistent storage - e.g. /app/files diff --git a/docs/docker-images/rabbitmq.md b/docs/docker-images/rabbitmq.md index 00c4d34ebe..7890013c93 100644 --- a/docs/docker-images/rabbitmq.md +++ b/docs/docker-images/rabbitmq.md @@ -41,7 +41,7 @@ For further information and custom configuration, please refer to [official Rabb ## Environment Variables Some options are configurable via [environment -variables](../using-lagoon-advanced/environment-variables.md). +variables](../concepts-advanced/environment-variables.md). | Environment Variable | Default | Description | | :-------------------------- | :------ | :----------------------------------------------- | diff --git a/docs/docker-images/redis.md b/docs/docker-images/redis.md index 1ca1a34f14..67962c9a9b 100644 --- a/docs/docker-images/redis.md +++ b/docs/docker-images/redis.md @@ -40,7 +40,7 @@ The image ships a _default_ Redis configuration file, optimized to work on Lagoo ### Environment Variables Some options are configurable via [environment -variables](../using-lagoon-advanced/environment-variables.md). +variables](../concepts-advanced/environment-variables.md). | Environment Variable | Default | Description | | :------------------- | :---------- | :----------------------------------------------------------------------------------------- | @@ -63,7 +63,7 @@ It differs from `redis` only with the `FLAVOR` environment variable, which will ## Troubleshooting -The Lagoon Redis images all come pre-loaded with the `redis-cli` command, which allows for querying the Redis service for information and setting config values dynamically. To use this utility, you can simply SSH into your Redis pod by using the instructions [here] (../using-lagoon-advanced/ssh.md) with `redis` as the `pod` value then run it from the terminal once you've connected. +The Lagoon Redis images all come pre-loaded with the `redis-cli` command, which allows for querying the Redis service for information and setting config values dynamically. To use this utility, you can simply SSH into your Redis pod by using the instructions [here] (../interacting/ssh.md) with `redis` as the `pod` value then run it from the terminal once you've connected. ### Maximum Memory Policy diff --git a/docs/docker-images/solr.md b/docs/docker-images/solr.md index e108b8193d..35c34e03f4 100644 --- a/docs/docker-images/solr.md +++ b/docs/docker-images/solr.md @@ -23,7 +23,7 @@ This image is prepared to be used on Lagoon. There are therefore some things alr ## Environment Variables Some options are configurable via [environment -variables](../using-lagoon-advanced/environment-variables.md). +variables](../concepts-advanced/environment-variables.md). | Environment Variable | Default | Description | | :------------------------ | :-------- | :------------------------------------------------------------------------ | diff --git a/docs/docker-images/varnish.md b/docs/docker-images/varnish.md index 1a118e24f6..b72ff8053d 100644 --- a/docs/docker-images/varnish.md +++ b/docs/docker-images/varnish.md @@ -5,7 +5,7 @@ The [Lagoon `Varnish` Docker images](https://github.com/uselagoon/lagoon-images/ ## Supported versions * 5 \(available for compatibility only, no longer officially supported\) - `uselagoon/varnish-5` -* 6 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/varnish/6.Dockerfile) - `uselagoon/varnish-6` +* 6.0 LTS [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/varnish/6.Dockerfile) - `uselagoon/varnish-6` * 7 [Dockerfile](https://github.com/uselagoon/lagoon-images/blob/main/images/varnish/7.Dockerfile) - `uselagoon/varnish-7` ## Included varnish modules @@ -26,7 +26,7 @@ The image ships a _default_ `vcl` configuration file, optimized to work on Lagoo ## Environment Variables Some options are configurable via [environment -variables](../using-lagoon-advanced/environment-variables.md). +variables](../concepts-advanced/environment-variables.md). | Environment Variable | Default | Description | | :------------------------- | :-------------------- | :-------------------------------------------------------------------------------------- | diff --git a/docs/drupal/services/README.md b/docs/drupal/services/README.md deleted file mode 100644 index b1bc8fb352..0000000000 --- a/docs/drupal/services/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Services - -## MariaDB is the open-source successor to MySQL - -[Learn about MariaDB with Drupal](mariadb.md) - -[Documentation on the MariaDB-Drupal image.](./mariadb.md) - -[Documentation on the plain MariaDB image](../../docker-images/mariadb.md) (the MariaDB-Drupal image is built on this). - -## Redis is a fast, open-source, in-memory key-value data store for use as a database, cache, message broker, and queue - -[Learn about Redis with Drupal.](./redis.md) - -[Documentation on the Redis-persistent image.](../../docker-images/redis.md) - -## Solr is an open-source search platform - -[Learn about Solr with Drupal.](solr.md) - -[Documentation on the Solr-Drupal image.](solr.md) - -[Documentation on the plain Solr image](../../docker-images/solr.md) \(the Solr-Drupal image is built on this\). - -## Varnish is a powerful, open-source HTTP engine and reverse HTTP proxy that helps to speed up your website - -[Learn about Varnish with Drupal](varnish.md) - -[Documentation on the Varnish-Drupal image.](./varnish.md) - -[Documentation on the plain Varnish image](../../docker-images/varnish.md) \(the Varnish-Drupal image is built on this\). diff --git a/docs/0.gif b/docs/images/0.gif similarity index 100% rename from docs/0.gif rename to docs/images/0.gif diff --git a/docs/drupal/1-docker-setup.png b/docs/images/1-docker-setup.png similarity index 100% rename from docs/drupal/1-docker-setup.png rename to docs/images/1-docker-setup.png diff --git a/docs/drupal/2-cli-interpreter.png b/docs/images/2-cli-interpreter.png similarity index 100% rename from docs/drupal/2-cli-interpreter.png rename to docs/images/2-cli-interpreter.png diff --git a/docs/2.gif b/docs/images/2.gif similarity index 100% rename from docs/2.gif rename to docs/images/2.gif diff --git a/docs/drupal/3-remote-interpreter-setup.png b/docs/images/3-remote-interpreter-setup.png similarity index 100% rename from docs/drupal/3-remote-interpreter-setup.png rename to docs/images/3-remote-interpreter-setup.png diff --git a/docs/3.png b/docs/images/3.png similarity index 100% rename from docs/3.png rename to docs/images/3.png diff --git a/docs/drupal/4-configure-runner.png b/docs/images/4-configure-runner.png similarity index 100% rename from docs/drupal/4-configure-runner.png rename to docs/images/4-configure-runner.png diff --git a/docs/4.gif b/docs/images/4.gif similarity index 100% rename from docs/4.gif rename to docs/images/4.gif diff --git a/docs/drupal/5-going-green-1-.gif b/docs/images/5-going-green-1-.gif similarity index 100% rename from docs/drupal/5-going-green-1-.gif rename to docs/images/5-going-green-1-.gif diff --git a/docs/5.gif b/docs/images/5.gif similarity index 100% rename from docs/5.gif rename to docs/images/5.gif diff --git a/docs/6.gif b/docs/images/6.gif similarity index 100% rename from docs/6.gif rename to docs/images/6.gif diff --git a/docs/7.gif b/docs/images/7.gif similarity index 100% rename from docs/7.gif rename to docs/images/7.gif diff --git a/docs/8.png b/docs/images/8.png similarity index 100% rename from docs/8.png rename to docs/images/8.png diff --git a/docs/using-lagoon-the-basics/bb_webhook_1.png b/docs/images/bb_webhook_1.png similarity index 100% rename from docs/using-lagoon-the-basics/bb_webhook_1.png rename to docs/images/bb_webhook_1.png diff --git a/docs/administering-lagoon/container_overview.png b/docs/images/container_overview.png similarity index 100% rename from docs/administering-lagoon/container_overview.png rename to docs/images/container_overview.png diff --git a/docs/using-lagoon-advanced/custom-task-arguments.png b/docs/images/custom-task-arguments.png similarity index 100% rename from docs/using-lagoon-advanced/custom-task-arguments.png rename to docs/images/custom-task-arguments.png diff --git a/docs/using-lagoon-advanced/custom-task-confirm.png b/docs/images/custom-task-confirm.png similarity index 100% rename from docs/using-lagoon-advanced/custom-task-confirm.png rename to docs/images/custom-task-confirm.png diff --git a/docs/images/drupal-example project 2021-11-18 19-03-22.png b/docs/images/drupal-example project 2021-11-18 19-03-22.png new file mode 100644 index 0000000000..5429dfca43 Binary files /dev/null and b/docs/images/drupal-example project 2021-11-18 19-03-22.png differ diff --git a/docs/drupal/first_deployment_slack_2nd_success.jpg b/docs/images/first_deployment_slack_2nd_success.jpg similarity index 100% rename from docs/drupal/first_deployment_slack_2nd_success.jpg rename to docs/images/first_deployment_slack_2nd_success.jpg diff --git a/docs/drupal/first_deployment_slack_start.jpg b/docs/images/first_deployment_slack_start.jpg similarity index 100% rename from docs/drupal/first_deployment_slack_start.jpg rename to docs/images/first_deployment_slack_start.jpg diff --git a/docs/drupal/first_deployment_slack_success.jpg b/docs/images/first_deployment_slack_success.jpg similarity index 100% rename from docs/drupal/first_deployment_slack_success.jpg rename to docs/images/first_deployment_slack_success.jpg diff --git a/docs/using-lagoon-the-basics/gh_webhook_1.png b/docs/images/gh_webhook_1.png similarity index 100% rename from docs/using-lagoon-the-basics/gh_webhook_1.png rename to docs/images/gh_webhook_1.png diff --git a/docs/using-lagoon-the-basics/gh_webhook_2.png b/docs/images/gh_webhook_2.png similarity index 100% rename from docs/using-lagoon-the-basics/gh_webhook_2.png rename to docs/images/gh_webhook_2.png diff --git a/docs/using-lagoon-the-basics/gitlab-settings.png b/docs/images/gitlab-settings.png similarity index 100% rename from docs/using-lagoon-the-basics/gitlab-settings.png rename to docs/images/gitlab-settings.png diff --git a/docs/using-lagoon-the-basics/gitlab_webhook.png b/docs/images/gitlab_webhook.png similarity index 100% rename from docs/using-lagoon-the-basics/gitlab_webhook.png rename to docs/images/gitlab_webhook.png diff --git a/docs/administering-lagoon/graphiql-2020-01-29-18-05-54.png b/docs/images/graphiql-2020-01-29-18-05-54.png similarity index 100% rename from docs/administering-lagoon/graphiql-2020-01-29-18-05-54.png rename to docs/images/graphiql-2020-01-29-18-05-54.png diff --git a/docs/administering-lagoon/graphiql-2020-01-29-18-07-28.png b/docs/images/graphiql-2020-01-29-18-07-28.png similarity index 100% rename from docs/administering-lagoon/graphiql-2020-01-29-18-07-28.png rename to docs/images/graphiql-2020-01-29-18-07-28.png diff --git a/docs/administering-lagoon/graphiql-2020-01-29-20-10-32.png b/docs/images/graphiql-2020-01-29-20-10-32.png similarity index 100% rename from docs/administering-lagoon/graphiql-2020-01-29-20-10-32.png rename to docs/images/graphiql-2020-01-29-20-10-32.png diff --git a/docs/logging/kibana_example1.png b/docs/images/kibana_example1.png similarity index 100% rename from docs/logging/kibana_example1.png rename to docs/images/kibana_example1.png diff --git a/docs/logging/kibana_example2.png b/docs/images/kibana_example2.png similarity index 100% rename from docs/logging/kibana_example2.png rename to docs/images/kibana_example2.png diff --git a/docs/logging/kibana_example3.png b/docs/images/kibana_example3.png similarity index 100% rename from docs/logging/kibana_example3.png rename to docs/images/kibana_example3.png diff --git a/docs/logging/kibana_example4.png b/docs/images/kibana_example4.png similarity index 100% rename from docs/logging/kibana_example4.png rename to docs/images/kibana_example4.png diff --git a/docs/logging/kibana_example5.png b/docs/images/kibana_example5.png similarity index 100% rename from docs/logging/kibana_example5.png rename to docs/images/kibana_example5.png diff --git a/docs/using-lagoon-the-basics/lagoon-ui-production.png b/docs/images/lagoon-ui-production.png similarity index 100% rename from docs/using-lagoon-the-basics/lagoon-ui-production.png rename to docs/images/lagoon-ui-production.png diff --git a/docs/using-lagoon-advanced/phpinfo.png b/docs/images/phpinfo.png similarity index 100% rename from docs/using-lagoon-advanced/phpinfo.png rename to docs/images/phpinfo.png diff --git a/docs/administering-lagoon/projects_overview.png b/docs/images/projects_overview.png similarity index 100% rename from docs/administering-lagoon/projects_overview.png rename to docs/images/projects_overview.png diff --git a/docs/administering-lagoon/repositories_overview.png b/docs/images/repositories_overview.png similarity index 100% rename from docs/administering-lagoon/repositories_overview.png rename to docs/images/repositories_overview.png diff --git a/docs/administering-lagoon/scanning_image_1.png b/docs/images/scanning_image_1.png similarity index 100% rename from docs/administering-lagoon/scanning_image_1.png rename to docs/images/scanning_image_1.png diff --git a/docs/images/settings 2021-11-18 19-03-48.png b/docs/images/settings 2021-11-18 19-03-48.png new file mode 100644 index 0000000000..1b4ea990c7 Binary files /dev/null and b/docs/images/settings 2021-11-18 19-03-48.png differ diff --git a/docs/step2_require.gif b/docs/images/step2_require.gif similarity index 100% rename from docs/step2_require.gif rename to docs/images/step2_require.gif diff --git a/docs/using-lagoon-advanced/task-yarn-audit.png b/docs/images/task-yarn-audit.png similarity index 100% rename from docs/using-lagoon-advanced/task-yarn-audit.png rename to docs/images/task-yarn-audit.png diff --git a/docs/images/ui-settings.png b/docs/images/ui-settings.png new file mode 100644 index 0000000000..2bac7175a9 Binary files /dev/null and b/docs/images/ui-settings.png differ diff --git a/docs/images/ui-ssh.png b/docs/images/ui-ssh.png new file mode 100644 index 0000000000..625ea0967c Binary files /dev/null and b/docs/images/ui-ssh.png differ diff --git a/docs/using-lagoon-the-basics/webhooks-2020-01-23-12-40-16.png b/docs/images/webhooks-2020-01-23-12-40-16.png similarity index 100% rename from docs/using-lagoon-the-basics/webhooks-2020-01-23-12-40-16.png rename to docs/images/webhooks-2020-01-23-12-40-16.png diff --git a/docs/installing-lagoon/querying-graphql.md b/docs/installing-lagoon/querying-graphql.md index fce82c43fa..696edb8ba8 100644 --- a/docs/installing-lagoon/querying-graphql.md +++ b/docs/installing-lagoon/querying-graphql.md @@ -28,7 +28,7 @@ } ``` - [Read more about GraphQL here in our documentation.](../using-lagoon-advanced/graphql.md) + [Read more about GraphQL here in our documentation.](../interacting/graphql.md) 6. Once you get the correct response, we need to add a mutation. diff --git a/docs/administering-lagoon/create-project.gql b/docs/interacting/create-project.gql similarity index 94% rename from docs/administering-lagoon/create-project.gql rename to docs/interacting/create-project.gql index 53421c4522..c855b449b7 100644 --- a/docs/administering-lagoon/create-project.gql +++ b/docs/interacting/create-project.gql @@ -1,5 +1,5 @@ # See the docs for a detailed explanation about this file: -# https://docs.lagoon.sh/administering-lagoon/graphql-queries/#creating-the-first-project +# https://docs.lagoon.sh/interacting/graphql-queries/#creating-the-first-project # 1. Create a cluster (Kubernetes or OpenShift) mutation { diff --git a/docs/administering-lagoon/graphql-queries.md b/docs/interacting/graphql-queries.md similarity index 92% rename from docs/administering-lagoon/graphql-queries.md rename to docs/interacting/graphql-queries.md index 0aff02f00c..cec2d2bd1e 100644 --- a/docs/administering-lagoon/graphql-queries.md +++ b/docs/interacting/graphql-queries.md @@ -4,7 +4,7 @@ Direct API interactions in Lagoon are done via [GraphQL](graphql-queries.md). -In order to authenticate with the API, we need a JWT \(JSON Web Token\) that allows us to use the GraphQL API as admin. To generate this token, open the terminal of the `storage-calculator` pod via your Kubernetes UI, or via kubectl and run the following command: +In order to authenticate with the API, we need a JWT (JSON Web Token) that allows us to use the GraphQL API as admin. To generate this token, open the terminal of the `storage-calculator` pod via your Kubernetes UI, or via kubectl and run the following command: ```bash title="Generate JWT token." ./create_jwt.py @@ -19,11 +19,11 @@ To compose and send GraphQL queries, we recommend [GraphiQL.app](https://github. Under "GraphQL Endpoint", enter the API endpoint URL with `/graphql` on the end. Then click on "Edit HTTP Headers" and add a new header: * "Header name": `Authorization` -* "Header value": `Bearer [JWT token]` \(make sure that the JWT token has no spaces, as this would not work\) +* "Header value": `Bearer [JWT token]` (make sure that the JWT token has no spaces, as this would not work) Press ESC to close the HTTP header overlay and now we are ready to send the first GraphQL request! -![Editing HTTP Headers in GraphiQL.](./graphiql-2020-01-29-18-05-54.png) +![Editing HTTP Headers in GraphiQL.](../images/graphiql-2020-01-29-18-05-54.png) Enter this in the left panel @@ -35,24 +35,24 @@ query allProjects{ } ``` -![Running a query in GraphiQL.](./graphiql-2020-01-29-20-10-32.png) +![Running a query in GraphiQL.](../images/graphiql-2020-01-29-20-10-32.png) -And press the ▶️ button \(or press CTRL+ENTER\). +And press the ▶️ button (or press CTRL+ENTER). If all went well, your first GraphQL response should appear shortly afterwards in the right pane. ## Creating the first project -Let's create the first project for Lagoon to deploy! For this we'll use the queries from the GraphQL query template in [`create-project.gql`](../administering-lagoon/create-project.gql). +Let's create the first project for Lagoon to deploy! For this we'll use the queries from the GraphQL query template in [`create-project.gql`](../interacting/create-project.gql). -For each of the queries \(the blocks starting with `mutation {`\), fill in all of the empty fields marked by TODO comments and run the queries in GraphiQL.app. This will create one of each of the following two objects: +For each of the queries (the blocks starting with `mutation {`), fill in all of the empty fields marked by TODO comments and run the queries in GraphiQL.app. This will create one of each of the following two objects: 1. `kubernetes` : The Kubernetes (or Openshift) cluster to which Lagoon should deploy. Lagoon is not only capable of deploying to its own Kubernetes cluster, but also to any Kubernetes cluster anywhere in the world. 2. `project` : The Lagoon project to be deployed, which is a Git repository with a `.lagoon.yml` configuration file committed in the root. ## Allowing access to the project -In Lagoon, each developer authenticates via their SSH key\(s\). This determines their access to: +In Lagoon, each developer authenticates via their SSH key(s). This determines their access to: 1. The Lagoon API, where they can see and edit projects they have access to. 2. Remote shell access to containers that are running in projects they have access to. @@ -516,7 +516,7 @@ mutation { ### Query for projects by metadata -Queries may be by `key` only \(e.g return all projects where a specific key exists\) or both `key` and `value` where both key and value must match. +Queries may be by `key` only (e.g return all projects where a specific key exists) or both `key` and `value` where both key and value must match. All projects that have the `version` tag: diff --git a/docs/using-lagoon-advanced/graphql.md b/docs/interacting/graphql.md similarity index 84% rename from docs/using-lagoon-advanced/graphql.md rename to docs/interacting/graphql.md index 16adf06fc0..9a45cb95f6 100644 --- a/docs/using-lagoon-advanced/graphql.md +++ b/docs/interacting/graphql.md @@ -2,7 +2,7 @@ ## Connect to GraphQL API -API interactions in Lagoon are done via GraphQL. In order to authenticate to the API, you need a JWT \(JSON Web Token\), which will authenticate you against the API via your SSH public key. +API interactions in Lagoon are done via GraphQL. In order to authenticate to the API, you need a JWT (JSON Web Token), which will authenticate you against the API via your SSH public key. To generate this token, use the remote shell via the `token` command: @@ -29,7 +29,7 @@ Enter the API endpoint URL. Then click on "Edit HTTP Headers" and add a new Head * "Header name": `Authorization` * "Header value": `Bearer [jwt token]` \(make sure that the JWT token has no spaces, that won't work\) -![Editing HTTP Headers in the GraphiQL UI.](./graphiql-2020-01-29-18-05-54.png) +![Editing HTTP Headers in the GraphiQL UI.](../images/graphiql-2020-01-29-18-05-54.png) Close the HTTP Header overlay \(press ESC\) and now you are ready to make your first GraphQL Request! @@ -54,7 +54,7 @@ query whatIsThere { And press the ▶️ button \(or press CTRL+ENTER\). -![Entering a query in the GraphiQL UI.](./graphiql-2020-01-29-18-07-28.png) +![Entering a query in the GraphiQL UI.](../images/graphiql-2020-01-29-18-07-28.png) If all went well, you should see your first GraphQL response. @@ -62,7 +62,9 @@ If all went well, you should see your first GraphQL response. The Lagoon GraphQL API can not only display objects and create objects, but it also has the capability to update existing objects. All of Lagoon's GraphQL uses best practices. -_Mutation queries in GraphQL modify the data in the data store, and return a value. They can be used to insert, update, and delete data. Mutations are defined as a part of the schema._ +!!! info + + Mutation queries in GraphQL modify the data in the data store, and return a value. They can be used to insert, update, and delete data. Mutations are defined as a part of the schema._ Update the branches to deploy within a project: diff --git a/docs/interacting/lagoon-ui.md b/docs/interacting/lagoon-ui.md new file mode 100644 index 0000000000..6de7886fef --- /dev/null +++ b/docs/interacting/lagoon-ui.md @@ -0,0 +1,5 @@ +# The Lagoon UI + +The Lagoon UI can be accessed at https://ui-lagoon-master.ch.amazee.io. If you have any issues with access, please contact your Lagoon administrator. + +The UI allows you to complete a variety of tasks with your projects and organizations. [Learn more about organizations here](../concepts-basics/building-blocks/organizations.md). and [what you can do with organizations in the UI here](../interacting/organizations.md). diff --git a/docs/interacting/organizations.md b/docs/interacting/organizations.md new file mode 100644 index 0000000000..a6a5e6590b --- /dev/null +++ b/docs/interacting/organizations.md @@ -0,0 +1,39 @@ +# Working with Organizations in the UI + +Here are some step-by-step guides to help walk you through useful organization-related tasks in the Lagoon UI, working with groups, projects, users, and roles. + +## Log in and find organizations + + + +## View who has access to a project + + + +## Add User to Group with Role + + + +## Remove a User from a Group + + + +## Change a User Role + + + +## Add an Email Notification to a Project + + + +## Add a Group to a Project + + + +## Add a User with Organization Owner Privileges + + + +## Create a new Project, add a Group, and create a Production Environment + + \ No newline at end of file diff --git a/docs/administering-lagoon/rbac.md b/docs/interacting/rbac.md similarity index 100% rename from docs/administering-lagoon/rbac.md rename to docs/interacting/rbac.md diff --git a/docs/using-lagoon-advanced/ssh.md b/docs/interacting/ssh.md similarity index 95% rename from docs/using-lagoon-advanced/ssh.md rename to docs/interacting/ssh.md index 9e7fd4eac3..6586a27028 100644 --- a/docs/using-lagoon-advanced/ssh.md +++ b/docs/interacting/ssh.md @@ -42,15 +42,15 @@ You can upload your SSH key(s) through the UI. Log in as you normally would. In the upper right hand corner, click on Settings: -![Click "Settings" in the upper right hand corner](./ui-settings.png) +![Click "Settings" in the upper right hand corner](../images/ui-settings.png) You will then see a page where you can upload your SSH key(s), and it will show any uploaded keys. Paste your key into the text box, give it a name, and click "Add." That's it! Add additional keys as needed. -![Paste your key into the text box.](./ui-ssh.png) +![Paste your key into the text box.](../images/ui-ssh.png) ### Via Command Line -A general example of using the Lagoon API via GraphQL to add an SSH key to a user can be found [here](../administering-lagoon/graphql-queries.md#allowing-access-to-the-project) +A general example of using the Lagoon API via GraphQL to add an SSH key to a user can be found [here](../interacting/graphql-queries.md#allowing-access-to-the-project) ## SSH into a pod diff --git a/docs/lagoonizing/index.md b/docs/lagoonizing/index.md new file mode 100644 index 0000000000..fd9c3b4ef0 --- /dev/null +++ b/docs/lagoonizing/index.md @@ -0,0 +1,700 @@ +# Lagoonizing Your Existing Site + +_Lagoonizing_, or getting your existing site ready for the Lagoon platform, isn't generally difficult (depending on your site and setup), but does have a handful of steps. We've put together a stepo-by-step guide to make this process easier for you. + +## Requirements + +Make sure your system [meets the requirements](../using-lagoon-the-basics/index.md) for working with Lagoon locally. + +## Local Development Environment + +[Set up your local development environment](../using-lagoon-the-basics/local-development-environments.md). You can choose between Pygmy and Lando. + +## Command Line and Git + +You'll need to interact with Lagoon via the command line, and you'll need Git as well, so make sure they're ready to go. + +### Command line + +You’ll need to use a command line terminal for some tasks. Whatever you want to use is fine, including your operating system default tool. Here are a few options: + +- [iTerm2](https://iterm2.com/) (Mac) +- [PowerShell](https://docs.microsoft.com/en-us/powershell/) (Windows) +- [Fish](https://fishshell.com/) (Mac, Windows, Linux) +- [Tabby](https://tabby.sh/) (Mac, Windows, Linux) + +### Install Git + +If you don’t have one already, you’ll need a Git client of some kind. Command line, GUI, whatever works for you (our examples will use the command line, FYI). Here are a few options: + +- [Installing Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) (Mac, Windows, Linux) +- [SourceTree](https://www.sourcetreeapp.com/) (Mac, Windows) +- [GitHub Desktop](https://desktop.github.com/) (Mac, Windows) +- [GitKraken](https://www.gitkraken.com/git-client) (Mac, Windows, Linux - free for public repositories) + +## What Your Lagoon Administrator Needs + +Your Lagoon administrator, the person who is setting up your Lagoon, will need some information, [which is detailed here](../using-lagoon-the-basics/setup-project.md). + +## Configure Webhooks + +Next, you'll need to configure webhooks for your Git respository. [You can find those instructions here](../using-lagoon-the-basics/configure-webhooks.md). + +## `docker-compose.yml` + +The `docker-compose.yml` file is used by Lagoon to: + +- Learn which services/containers should be deployed. +- Define how the images for the containers are built. +- Define additional configurations like persistent volumes. + +You can read more about it in [our `docker-compose.yml` documentation](../concepts-basics/docker-compose-yml.md). + +This is the first of two files we’ll create and set up to get your site ready for Lagoon. + +`Docker-compose` (the tool) is very strict in validating the content of the YAML file, so we can only do configuration within **labels** of a service definition. + +!!! warning "Warning" + + Lagoon only reads the labels, service names, image names and build definitions from a `docker-compose.yml` file. Definitions like: ports, environment variables, volumes, networks, links, users, etc. are IGNORED. This is intentional, as the `docker-compose` file is there to define your local environment configuration. Lagoon learns from the `lagoon.type` the type of service you are deploying and from that knows about ports, networks and any additional configuration that this service might need. + +Let’s walk through setting up some basic services. In this example, we’ll set up NGINX, PHP, and MariaDB, which you’ll need for many systems like Drupal, Laravel, and other content management systems. + +Here is a straightforward example of a `docker-compose.yml` file for Drupal: + +```yaml title="docker-compose.yml" +version: '2.3' + +x-lagoon-project: + # Lagoon project name (leave `&lagoon-project` when you edit this) + &lagoon-project drupal-example + +x-volumes: + &default-volumes + # Define all volumes you would like to have real-time mounted into the docker containers + volumes: + - .:/app:delegated + +x-environment: + &default-environment + LAGOON_PROJECT: *lagoon-project + # Route that should be used locally, if you are using pygmy, this route *must* end with .docker.amazee.io + LAGOON_ROUTE: http://drupal-example.docker.amazee.io + # Uncomment if you would like to have the system behave like in production + #LAGOON_ENVIRONMENT_TYPE: production + # Uncomment to enable xdebug and then restart via `docker-compose up -d` + #XDEBUG_ENABLE: "true" + +x-user: + &default-user + # The default user under which the containers should run. Change this if you are on linux and run with a user other than id `1000`. + user: '1000' + +services: + nginx: + build: + context: . + dockerfile: nginx.dockerfile + labels: + lagoon.type: nginx-php-persistent + lagoon.persistent: /app/web/sites/default/files/ + + php: + build: + context: . + dockerfile: php.dockerfile + labels: + lagoon.type: nginx-php-persistent + lagoon.name: nginx + lagoon.persistent: /app/web/sites/default/files/ + + mariadb: + image: amazeeio/mariadb-drupal + labels: + lagoon.type: mariadb +``` + + +Now let’s break down what each of these options mean. + +### Basic Settings + +`x-lagoon-project`: +This is the machine name of your project, define it here. We’ll use “drupal-example.” + +`x-volumes`: +This tells Lagoon what to mount into the container. Your web application lives in `/app`, but you can add or change this if needed. + +`x-environment`: + +- Here you can set your local development URL. If you are using Pygmy, it must end with `.docker.amazee.io.` +- If you want to exactly mimic the production environment, uncomment `LAGOON_ENVIRONMENT_TYPE: production`. +- If you want to enable x-debug, uncomment `DEBUG_ENABLE: "true"`. + +`x-user`: +You are unlikely to need to change this, unless you are on Linux and would like to run with a user other than 1000. + +### `services` + +This defines all the services you want to deploy. Unfortunately, `docker-compose` calls them services, even though they are actually defining the containers. Going forward we'll be calling them services, and throughout this documentation. + +The **name** of the service (`nginx`, `php`, and `mariadb` in the example above) is used by Lagoon as the name of the Kubernetes pod (yet another term - again, we'll be calling them services) that is generated, plus any additional Kubernetes objects that are created based on the defined `lagoon.type`. This could be things like services, routes, persistent storage, etc. + +### Docker Images + +If you want Lagoon to build a Dockerfile for your service during every deployment, you can define it here: + +`build` + +- `context` + - The build context path that should be passed on into the Docker `build` command. +- `dockerfile`: + - Location and name of the Dockerfile that should be built. + +!!! warning inline end "Warning" + + Lagoon does NOT support the short version of `build: ` and will fail if it finds such a definition. + +`image` + +- If you don't need to build a Dockerfile and just want to use an existing Dockerfile, define it via `image`. + +In our example, we’re giving the path of the current directory. NGINX is set to build `nginx.dockerfile`, and PHP, `php.dockerfile`. MariaDB is using an existing image at `amazeeio/mariadb-drupal`. You can [learn more about our Docker images here](../docker-images/commons.md). + +### Types + +Lagoon needs to know what type of service you are deploying in order to configure the correct Kubernetes objects. + +This is done via the `lagoon.type` label. There are many different types to choose from. Read our public documentation about [Service Types](../concepts-advanced/service-types.md) to see all of them and their additional configuration possibilities. + +You might have noticed that in our example, both the PHP and NGINX services have their type defined as `nginx-php-persistent`. That’s because they are what’s called multi-container pods. + +### Multi-Container Pods + +Kubernetes doesn’t deploy plain containers. Instead, it deploys pods, with each one or more containers. Usually Lagoon creates a single pod with a container inside for each defined `docker-compose` service. For some cases, we need to put two containers inside a single pod, as these containers are so dependent on each other that they should always stay together. An example for such a situation is the PHP and NGINX containers that both contain PHP code of a web application like Drupal, as we’ve done above. + +For these cases, it is possible to tell Lagoon which services should stay together. This is done in the following way (remember that we are calling containers services): + +1. Define both services with a `lagoon.type` that expects two services (in the example this is `nginx-php-persistent` defined on the NGINX and PHP services). +2. Link the second service with the first one, setting the label `lagoon.name` of the second one to match the first one. (in the example this is done by setting `lagoon.name: nginx`). + +This will cause Lagoon to realize that the `nginx` and `php` services are combined in a pod that will be called `nginx`. + +Lagoon still needs to understand which of the two services is the _actual_ individual service type (`nginx` and `php` in this case). It does this by searching for the service names of the matching service types. `nginx-php-persistent` expects one service with the name `nginx` and one with `php` in the `docker-compose.yml`. + +If for any reason you want to use different names for the services, or you need more than one pod with the type `nginx-php-persistent`, there is an additional label `lagoon.deployment.servicetype`, which can be used to define the actual service type. + +Here’s an example showing how multi-container pods can be set up in more detail: + +```yaml title="docker-compose.yml" +nginx: + build: + context: . + dockerfile: nginx.dockerfile + labels: + lagoon.type: nginx-php-persistent + lagoon.persistent: /app/web/sites/default/files/ + lagoon.name: nginx # If this isn't present, Lagoon will use the container name, which in this case is nginx. + lagoon.deployment.servicetype: nginx +php: + build: + context: . + dockerfile: php.dockerfile + labels: + lagoon.type: nginx-php-persistent + lagoon.persistent: /app/web/sites/default/files/ + lagoon.name: nginx # We want this service to be part of the nginx pod in Lagoon. + lagoon.deployment.servicetype: php +``` + +There is quite a bit more you can do in docker-compose.yml, but setting up your services is the most important part. [Check out our documentation on `docker-compose.yml`](../concepts-basics/docker-compose-yml.md) to learn what else you can do. + +## `.lagoon.yml` + +The [`.lagoon.yml`](../concepts-basics/lagoon-yml.md) file is the central file for setting up your project. It contains configuration in order to do the following: + +- Define routes for accessing your sites. +- Define pre-rollout tasks. +- Define post-rollout tasks. +- Set up SSL certificates. +- Add cron jobs for environments. + +The `.lagoon.yml` file must be created and placed at the root of your Git repository. + +Here is an example `.lagoon.yml` file showing a variety of configuration options for a Drupal site that we’ll go over: + +```yaml title=".lagoon.yml" + +docker-compose-yaml: docker-compose.yml + +environment_variables: + git_sha: 'true' + +tasks: + pre-rollout: + - run: + name: drush sql-dump + command: mkdir -p /app/web/sites/default/files/private/ && drush sql-dump --ordered-dump --gzip --result-file=/app/web/sites/default/files/private/pre-deploy-dump.sql.gz + service: cli + post-rollout: + - run: + name: drush cim + command: drush -y cim + service: cli + shell: bash + - run: + name: drush cr + command: drush -y cr + service: cli + +routes: + insecure: Redirect + +environments: + main: + monitoring_urls: + - "www.example.com" + - "www.example.com/special_page" + routes: + - nginx: + - example.com + - example.net + - "www.example.com": + tls-acme: 'true' + insecure: Redirect + hsts: max-age=31536000 + - "example.ch": + Annotations: + nginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri + - www.example.ch + + types: + mariadb: mariadb-galera + templates: + mariadb: mariadb.main.deployment.yml + rollouts: + mariadb: statefulset + cronjobs: + - name: drush cron + schedule: "H * * * *" # This will run the cron once per hour. + command: drush cron + service: cli + staging: + cronjobs: + - name: drush cron + schedule: "H * * * *" # This will run the cron once per hour. + command: drush cron + service: cli +``` + +### General Settings + +#### `docker-compose-yaml` + +This file tells the build script which `docker-compose` YAML file should be used, in order to learn which services and containers should be deployed. This defaults to `docker-compose.yml`, but could be used for a specific Lagoon `docker-compose` YAML file if you need something like that. + +#### `environment_variables.git_sha` + +This setting allows you to enable injecting the deployed Git SHA into your project as an environment variable. By default this is disabled. Setting the value to `true` sets the SHA as the environment variable `LAGOON_GIT_SHA`. + +### Tasks + +There are different type of tasks you can define, and they differ when exactly they are executed in a build flow: + +#### Pre-Rollout Tasks - `pre_rollout.[i].run` + +The tasks defined as `pre_rollout` tasks will run against your project _after_ the new images have been built successfully, and _before_ the project gets altered in any way. This feature enables you, for example, to create a database dump before the rollout is running, as in our example above. This will make it easier to roll back in case of an issue with the rollout. + +#### Post-Rollout Tasks - `post_rollout.[i].run` + +Here you can specify tasks which need to run against your project, after: + +- All images have been successfully built. +- All containers are updated with the new images. +- All running containers have passed their readiness checks. + +Common uses for `post_rollout` tasks include running `drush updb`, `drush cim`, or clearing various caches. In the above example, we run `drush cim` and `drush cr`. + +`name` + +- The name is an arbitrary label for making it easier to identify each task in the logs. + +`command` + +- Here you specify what command should run. These are run in the `WORKDIR` of each container. For Lagoon images this is `/app`, keep this in mind if you need to `cd` into a specific location to run your task. + +`service` + +- The service in which to run the task. If following our drupal-example, this will be the CLI container, as it has all your site code, files, and a connection to the database. Typically you do not need to change this. + +`shell` + +Which shell should be used to run the task. By default `sh` is used, but if the container also has other shells (like bash), you can define it here. This is useful if you want to run some small if/else bash scripts within the post-rollouts. (see the example above for how to write a script with multiple lines). + +### Routes + +#### `routes.autogenerate.enabled` + +This allows for the disabling of the automatically created routes altogether. This does NOT disable the custom routes per environment, see below for more on that. + +#### `routes.autogenerate.insecure` + +This allows you to define the behavior of the automatically created routes. This does NOT configure the custom routes per environment, see below for more on that. This is the option we’re using in the example above, with `insecure: Redirect`. + +The following options are allowed: + +`Allow` + +- Sets up routes for both HTTP and HTTPS (this is the default). + +`Redirect` + +- Will redirect any HTTP requests to HTTPS. + +`None` + +- A route for HTTP will not be created, and no redirect. + +### Environments + +Environment names match your deployed branches or pull requests. This allows each environment to have a different configuration. In this example, we have the environments main and staging. + +#### Monitoring a Specific Path + +When UptimeRobot is configured for your cluster, Lagoon will inject annotations to each route/ingress for use by the `stakater/IngressControllerMonitor`. The default action is to monitor the homepage of the route. If you have a specific route to be monitored, this can be overridden by adding a `monitoring-path` to your route specification. A common use is to set up a path for monitoring which bypasses caching to give a more real-time monitoring of your site. + +```yaml title=".lagoon.yml example" + - "www.example.com": + monitoring-path: "/bypass-cache" +``` + +#### `environments.[name].routes` + +In the route section, we identify the domain names to which the environment will respond. It is typical to only have an environment with routes specified for your production environment. All environments receive a generated route, but sometimes there is a need for a non-production environment to have its own domain name. You can specify it here, and then add that domain with your DNS provider as a CNAME to the generated route name (these routes publish in deploy messages). + +The first element after the environment is the target service, NGINX in our example. This is how we identify which service incoming requests will be sent to. + +The simplest route is the `example.com` example in our sample `.lagoon.yml` above - you can see it has no additional configuration. This will assume that you want a Let's Encrypt certificate for your route and no redirect from HTTPS to HTTP. + +#### Annotations + +!!! info + Route/Ingress annotations are only supported by projects that deploy into clusters that run nginx-ingress controllers! Check with your Lagoon administrator if this is supported. + +Annotations can be a YAML map of annotations supported by the `nginx-ingress` controller, this is specifically useful for easy redirects: + +In this example any requests to `example.ch` will be redirected to `https://www.example.ch` with keeping folders or query parameters intact: + +`(example.com/folder?query -> https://www.example.ch/folder?query)` + +```yaml title=".lagoon.yml example" + - "example.ch": + annotations: + nginx.ingress.kubernetes.io/permanent-redirect: https://www.example.ch$request_uri + - www.example.ch +``` + +You can of course also redirect to any other URL not hosted on Lagoon. This will direct requests to `example.de` to `https://www.google.com`: + +```yaml title=".lagoon.yml example" + - "example.de": + annotations: + nginx.ingress.kubernetes.io/permanent-redirect: https://www.google.com +``` + +#### SSL Configuration - `tls-acme` + +`tls-acme : ‘true’` + +- Tells Lagoon to issue a Let's Encrypt certificate for that route. This is the default. +- If you don't want a Let's Encrypt, set this to `tls-acme: ‘false’`. + +`insecure` + +- Can be set to `None`, `Allow` or `Redirect`. +- Allow simply sets up both routes for HTTP and HTTPS (this is the default). +- `Redirect` will redirect any HTTP requests to HTTPS. + +`None` + +- Will mean a route for HTTP will not be created, and no redirect will take place. + +`Hsts` + +- Can be set to a value of `max-age=31536000;includeSubDomains;preload`. +- Ensure there are no spaces and no other parameters included. +- Only the `max-age` parameter is required. The required max-age parameter indicates the length of time, in seconds, the HSTS policy is in effect for. + +!!! info + If you plan to switch from a SSL certificate signed by a Certificate Authority (CA) to a Let's Encrypt certificate, it's best to get in touch with your Lagoon administrator to oversee the transition. + +#### `environments.[name].types` + +The Lagoon build process checks the `lagoon.type` label from the `docker-compose.yml` file in order to learn what type of service should be deployed (read more about them in [the documentation of docker-compose.yml](../concepts-basics/docker-compose-yml.md)). + +Sometimes you might want to override the type just for a single environment, and not for all of them. + +##### `service-name: service-type + +- `service-name`` is the name of the service from `docker-compose.yml` you would like to override. +- `service-type` the type of the service you would like to use in your override. + +For example, if you want a MariaDB-Galera high availability database for your production environment called main - this is what we’re doing in our example file: + +```yaml title=".lagoon.yml example" +environments: + main: + types: + mariadb: mariadb-galera +``` + +#### `environments.[name].templates` + +The Lagoon build process checks the `lagoon.template` label from the `docker-compose.yml` file in order to check if the service needs a custom template file (read more about them in [the documentation of docker-compose.yml](../concepts-basics/docker-compose-yml.md)). + +Sometimes you might want to override the template just for a single environment, and not for all of them: + +##### `service-name: template-file` + +- `service-name` is the name of the service from `docker-compose.yml` you would like to override. +- `template-file` is the path and name of the template to use for this service in this environment. + +```yaml title=".lagoon.yml example" +environments: + main: + templates: + mariadb: mariadb.main.deployment.yml +``` + +#### `environments.[name].rollouts` + +The Lagoon build process checks the `lagoon.rollout` label from the `docker-compose.yml` file in order to check if the service needs a special rollout type (read more about them in [the documentation of docker-compose.yml](../concepts-basics/docker-compose-yml.md)). + +Sometimes you might want to override the rollout type just for a single environment, especially if you also overwrote the template type for the environment: + +##### `service-name: rollout-type` + +- `service-name` is the name of the service from `docker-compose.yml` you would like to override. +- `rollout-type` is the type of rollout. See [the documentation of docker-compose.yml](../concepts-basics/docker-compose-yml.md) for possible values. + +```yaml title=".lagoon.yml example" +environments: + main: + rollouts: + mariadb: statefulset +``` + +#### Cron jobs - `environments.[name].cronjobs` + +As most of the time it is not desirable to run the same cron jobs across all environments, you must explicitly define which jobs you want to run for each environment. In our example, we’re creating a drush cron job that will run once per hour. + +`name` + +- Just a friendly name for identifying what the cron job will do. + +`schedule` + +- The schedule for executing the cron job. This follows the standard convention of cron. If you're not sure about the syntax, [Crontab Generator](https://crontab-generator.org/) can help. +- You can specify `M` for the minute, and your cron job will run once per hour at a random minute (the same minute each hour), or `M/15` to run it every 15 mins, but with a random offset from the hour (like 6, 21, 36, 51). +- You can specify `H` for the hour, and your cron job will run once per day at a random hour (the same hour every day), or `H(2-4)` to run it once per day within the hours of 2-4. + +`command` + +- The command to execute. Like the tasks, this executes in the `WORKDIR` of the service. For Lagoon images, this is `/app`. + +`service` + +- Which service of your project to run the command in. For most projects, this is the CLI service. + +There is quite a bit more you can do in `.lagoon.yml`. Check out [our documentation on `.lagoon.yml`](../concepts-basics/lagoon-yml.md) to find out. + +## Drupal-specific Setup + +If you’re moving a Drupal site to Lagoon, there are a few Drupal-specific tasks to complete in order to get everything all set up. + +### Settings Files + +The next step is to update your settings files. Lagoon uses a set of environment-specific settings files which use environment variables, so no sensitive information is stored in these files, and they are all safe to commit. We have a variety of different example projects in [our example repository](https://github.com/uselagoon/lagoon-examples) - if you’re starting from scratch, we encourage using one of them. If you’re not, just pick a similar one and copy the relevant settings files. [Check out the documentation on environment variables](../concepts-advanced/environment-variables.md) for more information on how to use them. + +Copy in the settings files from the example repository, and then review it to remove configuration for services that your site isn’t using (for example, not all sites use Solr or Redis). If you need to override configuration for a specific environment type (things like disabling caching on development environments), additional settings files can be set up (there’s even some in the example repository already), and are loaded in the following order: + +```php title="settings.php" + + all.settings.php + all.services.yml + production.settings.php + production.services.yml + development.settings.php + development.services.yml + settings.local.php + services.local.yml +``` + +### Update Your ``.gitignore`` Settings + +Make sure your `.gitignore` will allow you to commit the settings files. Drupal is shipped with `sites/*/settings*.php` and `sites/*/services*.yml` in `.gitignore.` You can remove that, as with Lagoon we don't ever keep sensitive information in the Git repository. + +### Note About Webroot in Drupal + +Unfortunately the Drupal community has not decided on a standardized webroot folder name. Some projects put Drupal within `/web`, and others within `/docroot` or somewhere else. The Lagoon Drupal settings files assume that your Drupal is within `/web`, if this is different for your Drupal installation, please adapt the files accordingly. + +### Build Your Images + +First, we need to build the defined images: + +```bash title="build your images" +docker-compose build +``` + +This may take several minutes and you’ll get a long response, [which should look something like this](https://gist.github.com/AlannaBurke/1bdad6aab977b0994c245834e61b6b50). + +This will tell `docker-compose` to build the Docker images for all containers that have a `build:` definition in `docker-compose.yml`. Usually for Drupal this includes `cli`, `nginx` and `php`. We do this because we want to run specific build commands (like `composer install`) or inject specific environment variables (like `WEBROOT`) into the images. + +Usually building is not needed every time you edit your Drupal code (as the code is mounted into the containers from your host), but rebuilding does not hurt. Plus Lagoon will build the exact same Docker images during a deployment, so you check that your build will also work during a deployment by just running `docker-compose build` again. + +### Start Containers + +Now that the images are built, we can start the containers: + +```bash title="start the containers" +docker-compose up -d +``` + +You will get a response something like this: + +```bash title="containers started" +➜ lagoon-test git:(main) docker-compose up -d +Recreating lagoon-test_cli_1 ... done +Starting lagoon-test_redis_1 ... done +Starting lagoon-test_solr_1 ... done +Starting lagoon-test_mariadb_1 ... done +Recreating lagoon-test_php_1 ... done +Recreating lagoon-test_nginx_1 ... done +Recreating lagoon-test_varnish_1 ... done +``` + +This will bring up all containers. After the command is done, you can check with `docker-compose ps` to ensure that they are all fully up and have not crashed. That response should look something like this: + +```bash title="view running containers" +➜ lagoon-test git:(main) docker-compose ps +Name Command State Ports +---------------------------------------------------------------------------------------- +lagoon-test_cli_1 /sbin/tini -- /lagoon/entr ... Up 9000/tcp +lagoon-test_mariadb_1 /sbin/tini -- /lagoon/entr ... Up 0.0.0.0:32768->3306/tcp +lagoon-test_nginx_1 /sbin/tini -- /lagoon/entr ... Up 8080/tcp +lagoon-test_php_1 /sbin/tini -- /lagoon/entr ... Up 9000/tcp +lagoon-test_redis_1 /sbin/tini -- /lagoon/entr ... Up 6379/tcp +lagoon-test_solr_1 /sbin/tini -- /lagoon/entr ... Up 0.0.0.0:32769->8983/tcp +lagoon-test_varnish_1 /sbin/tini -- /lagoon/entr ... Up 8080/tcp +``` + +If there is a problem, check the logs with `docker-compose logs -f [servicename]`. + +### Re-Run `composer install`` (for Composer projects only) + +If you’re running a Drupal 8+ project, you should be using Composer, and you’ll need to get all dependencies downloaded and installed. Connect into the cli container and run composer install: + +```bash title="re-run composer install" +docker-compose exec cli bash +[drupal-example]cli-drupal:/app$ composer install +``` + +This might sound weird, as there was already a `composer install` executed during the build step, so here’s why we do this again: + +- In order to be able to edit files on the host and have them immediately available in the container, the default `docker-composer.yml` mounts the whole folder into the containers (this happens with `.:/app:delegated` in the `volumes` section). This also means that all dependencies installed during the Docker build are overwritten with the files on the host. +- Locally, you probably want access to dependencies defined as `require-dev` in `composer.json`, while on a production deployment they would just use unnecessary space. So we run `composer install --no-dev` in the Dockerfile and `composer install` manually. + +If everything went well, open the `LAGOON_ROUTE` defined in `docker-compose.yml` (for example `http://drupal.docker.amazee.io`) and you should be greeted by a nice Drupal error. Don't worry - that's okay right now, the most important thing is that it tries to load a Drupal site. + +If you get a 500 or similar error, make sure that everything is loaded properly with Composer. + +### Check Status and Install Drupal + +Finally it's time to install Drupal, but just before that we want to make sure everything works. We suggest using Drush for that with `drush status`: + +```bash title="run drush status" +docker-compose exec cli bash +[drupal-example]cli-drupal:/app$ drush status +``` + +The above command should return something like the following: + +```bash title="drush status results" +[drupal-example]cli-drupal:/app$ drush status +[notice] Missing database table: key_value +Drupal version : 8.6.1 +Site URI : http://drupal.docker.amazee.io +Database driver : mysql +Database hostname : mariadb +Database port : 3306 +Database username : drupal +Database name : drupal +PHP binary : /usr/local/bin/php +PHP config : /usr/local/etc/php/php.ini +PHP OS : Linux +Drush script : /app/vendor/drush/drush/drush +Drush version : 9.4.0 +Drush temp : /tmp +Drush configs : /home/.drush/drush.yml + /app/vendor/drush/drush/drush.yml +Drupal root : /app/web +Site path : sites/default + +``` + +!!! info "" + You may have to tell pygmy about your public key before the next step. If you get an error like `Permission denied (publickey)`, check out the documentation here: [pygmy - adding ssh keys](https://pygmy.readthedocs.io/en/master/usage/#adding-ssh-keys). + +Now it’s time to install Drupal (if instead you would like to import an existing SQL File, please skip to the next step, but we suggest you install a clean Drupal in the beginning to be sure everything works.) + +```bash title="run drush si" +[drupal-example]cli-drupal:/app$ drush site-install +``` +This should output something like: + +```bash title="drush si results" +[drupal-example]cli-drupal:/app$ drush site-install +You are about to DROP all tables in your 'drupal' database. Do you want to continue? (y/n): y +Starting Drupal installation. This takes a while. Consider using the --notify global option. +Installation complete. User name: admin User password: arbZJekcqh +Congratulations, you installed Drupal! +``` + +Now you can visit the URL defined in `LAGOON_ROUTE` and you should see a fresh and cleanly installed Drupal - Congrats! + +### Import existing Database Dump + +If you have an already existing Drupal site you probably want to import its database over to your local site. There are many different ways on how to create a database dump, if your current hosting provider has Drush installed, you can use the following: + +```bash title="drush sql-dump" +[your-existing-site]$ drush sql-dump --result-file=dump.sql +Database dump saved to dump.sql [success] +``` + +Now you have a `dump.sql` file that contains your whole database. +Copy this file into your local Git repository and connect to the CLI, you should see the file in there: + +```bash title="here's our dump file" +[drupal-example] docker-compose exec cli bash +[drupal-example]cli-drupal:/app$ ls -l dump.sql +-rw-r--r-- 1 root root 5281 Dec 19 12:46 dump.sql +``` +Now you can import the dump after dropping the current database (still connected to the cli): + +```bash title="dump existing db and import dump file" +[drupal-example]cli-drupal:/app$ drush sql-drop +Do you really want to drop all tables in the database drupal? (y/n): y +[drupal-example]cli-drupal:/app$ drush sql-cli < dump.sql +``` + +### Drupal files directory + +A Drupal site also consists of the files directory. To migrate your files from your existing site, just add the files into the correct folder (probably `web/sites/default/files`, `sites/default/files` or something similar). Remember what you've set as your webroot - it may not be the same for all projects. + +## Deploy + +If you’ve done everything in this guide, and your amazee.io administrator has everything set up, you are now ready to deploy your site! + +If you are deploying a Drupal site, [follow this deployment guide](../applications/drupal/first-deployment-of-drupal.md). + +For all other deployments, [follow this deployment guide](../using-lagoon-the-basics/first-deployment.md). \ No newline at end of file diff --git a/docs/logging/kibana-examples.md b/docs/logging/kibana-examples.md index fb7ed10a5f..713ff1aff3 100644 --- a/docs/logging/kibana-examples.md +++ b/docs/logging/kibana-examples.md @@ -16,20 +16,20 @@ Below you'll find examples for two common log requests: ### Total Number of hits/requests to your site -* Let's start Kibana up and select `Discovery` \(\#1 in screen shot below\) -* Then the router logs for your project\(\#2\). +* Let's start Kibana up and select `Discovery` (#1 in screen shot below) +* Then the router logs for your project(#2). * From there, we will filter some of this information down a bit. Let's focus on our main production environment. -* In the search bar \(\#3\), enter: +* In the search bar (#3), enter: `openshift_project: "name of your production project"` * This will show you all the hits to your production environment in the given time frame. -* You can change the time frame in the upper right hand corner \(\#4\). -* Clicking on the arrow next to the entry \(\#5\) will expand it and show you all the information that was captured. -* You can add any of those fields to the window by hovering over them and clicking add on the left hand side \(\#6\). +* You can change the time frame in the upper right hand corner (#4). +* Clicking on the arrow next to the entry (#5) will expand it and show you all the information that was captured. +* You can add any of those fields to the window by hovering over them and clicking add on the left hand side (#6). * You can also further filter your results by using the search bar. -![How to get the total number of hits/requests to your site in Kibana.](./kibana_example1.png) +![How to get the total number of hits/requests to your site in Kibana.](../images/kibana_example1.png) ### Number of hits/requests from a specific IP address @@ -40,14 +40,14 @@ We are going to start off with the same query as above, but we are going to add * First, add the following fields: `client_ip` and `http_request`. * This will show you a list of all IP addresses and the page they requested. Here is what we see for the Amazee.io page: -![All IP addresses and the page they requested.](./kibana_example2.png) +![All IP addresses and the page they requested.](../images/kibana_example2.png) That looks good, but what if we wanted to just show requests from a specific IP address? You can filter for the address by adding it to your search criteria. * We are going to add: `AND client_ip: "IP address"`. * That will filter the results to just show you hits from that specific IP address, and the page they were requesting. Here is what it looks like for our Amazee.io website: -![Hits from a specific IP address.](./kibana_example3.png) +![Hits from a specific IP address.](../images/kibana_example3.png) ## Container Logs @@ -55,17 +55,17 @@ Container logs will show you all `stout` and `sterr` messages for your specific ### Logs from a container -Want to see the logs for a specific container \(php, nginx, etc\)? This section will help! Let's focus on looking at NGINX logs. +Want to see the logs for a specific container (php, nginx, etc)? This section will help! Let's focus on looking at NGINX logs. -* We start by opening up Kibana and selecting Discover \(\#1 in the screen shot below\). -* From there, we select the container logs for our project \(\#2\). -* Let's go to the search bar \(\#3\) and enter: `kubernetes.container_name: "nginx"` +* We start by opening up Kibana and selecting Discover (#1 in the screen shot below). +* From there, we select the container logs for our project (#2). +* Let's go to the search bar (#3) and enter: `kubernetes.container_name: "nginx"` * This will display all NGINX logs for our project. -* Clicking on the arrow next to an entry \(\#4\) will expand that entry and show you all of the information it gathered. -* Let's add the message field and the level field to the view. You can do that by clicking on "Add" on the left hand side \(\#5\). -* You can change the time frame in the upper right hand corner of the screen \(\#6\), in the example below I'm looking at logs for the last 4 hours. +* Clicking on the arrow next to an entry (#4) will expand that entry and show you all of the information it gathered. +* Let's add the message field and the level field to the view. You can do that by clicking on "Add" on the left hand side (#5). +* You can change the time frame in the upper right hand corner of the screen (#6), in the example below I'm looking at logs for the last 4 hours. -![](./kibana_example4.png) +![](../images/kibana_example4.png) ### Specific errors in logs @@ -91,9 +91,9 @@ Kibana will also give you the option to create visualizations or graphs. We are Here is an example of a daily hits visualization chart: -![Daily hits visualization chart.](./kibana_example5.png) +![Daily hits visualization chart.](../images/kibana_example5.png) -Also note that you can save your visualizations \(and searches\)! That will make it even faster to access them in the future. And because each account has their own Kibana Tenant, no searches or visualizations are shared with another account. +Also note that you can save your visualizations (and searches)! That will make it even faster to access them in the future. And because each account has their own Kibana Tenant, no searches or visualizations are shared with another account. ## Troubleshooting diff --git a/docs/resources/faq.md b/docs/resources/faq.md index eab5ce692b..d16c469780 100644 --- a/docs/resources/faq.md +++ b/docs/resources/faq.md @@ -10,7 +10,7 @@ If you've found a bug or security issue, please send your findings to [support@a ## I'm interested in amazee.io's hosting services with Lagoon -That's great news! You can contact them via email at [inquiries@amazee.io](mailto:inquiries@amazee.io). +That's great news! You can contact them via email at [sales@amazee.io](mailto:sales@amazee.io). ## How can I restore a backup? @@ -26,7 +26,7 @@ If you ever need to recover or restore a backup, feel free to submit a ticket or ## I'm getting an invalid SSL certificate error -The first thing to try is what is listed in [our documentation about SSL](../using-lagoon-the-basics/lagoon-yml.md#ssl-configuration-tls-acme). +The first thing to try is what is listed in [our documentation about SSL](../concepts-basics/lagoon-yml.md#ssl-configuration-tls-acme). If you follow those steps, and you are still seeing an error, please submit a ticket or send us a message on chat and we can help resolve this for you. @@ -34,7 +34,7 @@ If you follow those steps, and you are still seeing an error, please submit a ti This was a bug that was prevalent in Drush versions 8.1.16 and 8.1.17. There error would look something like this: -```text +```bash The command could not be executed successfully (returned: Array [error] ( [default] => Array @@ -85,7 +85,7 @@ This typically indicates an issue with Pygmy. You can find our troubleshooting d ## How do I remove a route? -You will need to contact your helpful Lagoon administrator should you need to remove a route. You can use the Slack channel that was set up for you to communicate - if not, you can always reach us at support@amazee.io or on [Discord](https://discord.gg/te5hHe95JE). +You will need to contact your helpful Lagoon administrator should you need to remove a route. You can use the Slack channel that was set up for you to communicate - if not, you can always reach us at [support@amazee.io](mailto:support@amazee.io) or on [Discord](https://discord.gg/te5hHe95JE). ## When I run `pygmy status`, no keys are loaded @@ -97,7 +97,7 @@ This typically indicates an issue with Pygmy. You can find our troubleshooting d ## My deployments fail with a message saying: "drush needs a more functional environment" -This usually means that there is no database uploaded to the project. [Follow our step-by-step guide to add a database to your project](../drupal/first-deployment-of-drupal.md#5-synchronize-local-database-to-the-remote-lagoon-environment). +This usually means that there is no database uploaded to the project. [Follow our step-by-step guide to add a database to your project](../applications/drupal/first-deployment-of-drupal.md#5-synchronize-local-database-to-the-remote-lagoon-environment). ## When I start Pygmy I see an "address already in use" error? @@ -105,7 +105,7 @@ This usually means that there is no database uploaded to the project. [Follow ou This is a known error! Most of the time it means that there is already something running on port 80. You can find the culprit by running the following query: -```text +```bash title="" netstat -ltnp | grep -w ':80' ``` @@ -113,21 +113,21 @@ That should list everything running on port 80. Kill the process running on port ## How can I change branches/PR environments/production on my project? -You can make that change using the Lagoon API! You can find the documentation for this change [in our GraphQL documentation](../administering-lagoon/graphql-queries.md#updating-objects). +You can make that change using the Lagoon API! You can find the documentation for this change [in our GraphQL documentation](../interacting/graphql-queries.md#updating-objects). ## How do I add a redirect? -## How can I add new users \(and SSH keys\) to my project/group? +## How can I add new users (and SSH keys) to my project/group? -This can be done via the Lagoon API. You can find the steps documentation for this change [in our GraphQL documentation](../administering-lagoon/graphql-queries.md#allowing-access-to-the-project). +This can be done via the Lagoon API. You can find the steps documentation for this change [in our GraphQL documentation](../interacting/graphql-queries.md#allowing-access-to-the-project). ## Can an environment be completely deleted to roll out large code changes to my project? Environments are fully built from scratch at each deploy, dropping the old database and files and pushing your code would result in a fresh clean build, Don’t forget to re-sync! -It is possible to delete an environment via GraphQL. You can find the instructions [in our GraphQL documentation](../administering-lagoon/graphql-queries.md#deleting-environments). +It is possible to delete an environment via GraphQL. You can find the instructions [in our GraphQL documentation](../interacting/graphql-queries.md#deleting-environments). ## How do I get my new environment variable to show up? @@ -151,25 +151,25 @@ Authentication also happens automatically via SSH Public & Private Key Authentic We can definitely help with that. Once you have your own SSL certificate, feel free to submit a ticket or send us a message via chat and we will be more than happy to help! You will need to send us the following files: -* Certificate key \(.key\) -* Certificate file \(.crt\) -* Intermediate certificates \(.crt\) +* Certificate key (.key) +* Certificate file (.crt) +* Intermediate certificates (.crt) -Also, you will need to [set the `tls-acme` option in `.lagoon.yml` to false](../using-lagoon-the-basics/lagoon-yml.md#ssl-configuration-tls-acme). +Also, you will need to [set the `tls-acme` option in `.lagoon.yml` to false](../concepts-basics/lagoon-yml.md#ssl-configuration-tls-acme). -## Is it possible to mount an external volume \(EFS/Fuse/SMB/etc\) into Lagoon? +## Is it possible to mount an external volume (EFS/Fuse/SMB/etc) into Lagoon? Mounting an external volume would need to be handled completely inside of your containers, Lagoon does not provide a provision for this type of connection as part of the platform. -A developer can handle this by installing the necessary packages into the container \(via the [Dockerfile](https://docs.docker.com/engine/reference/builder/)\), and ensuring the volume mount is connected via a [pre- or post-rollout task](../using-lagoon-the-basics/lagoon-yml.md#tasks). +A developer can handle this by installing the necessary packages into the container (via the [Dockerfile](https://docs.docker.com/engine/reference/builder/)), and ensuring the volume mount is connected via a [pre- or post-rollout task](../concepts-basics/lagoon-yml.md#tasks). ## Is there a way to stop a Lagoon build? If you have a build that has been running for a long time, and want to stop it, you will need to reach out to support. Currently, builds can only be stopped by users with admin access to the cluster. -## We installed the Elasticsearch\Solr service on our website. How can we get access to the UI \(port 9200/8983\) from a browser? +## We installed the Elasticsearch\Solr service on our website. How can we get access to the UI (port 9200/8983) from a browser? -We suggest only exposing web services \(NGINX/Varnish/Node.js\) in your deployed environments. Locally, you can get the ports mapped for these services by checking `docker-compose ps`, and then load [`http://localhost`](http://localhost/)`:` in your browser. +We suggest only exposing web services (NGINX/Varnish/Node.js) in your deployed environments. Locally, you can get the ports mapped for these services by checking `docker-compose ps`, and then load [`http://localhost`](http://localhost/)`:` in your browser. ## I have a question that isn't answered here diff --git a/docs/resources/glossary.md b/docs/resources/glossary.md index 3fe7891f0c..34f5503d93 100644 --- a/docs/resources/glossary.md +++ b/docs/resources/glossary.md @@ -24,6 +24,7 @@ description: >- | CMS | Content Management System | | Cron job | The cron command-line utility is a job scheduler on Unix-like operating systems. Users who set up and maintain software environments use cron to schedule jobs, also known as cron jobs, to run periodically at fixed times, dates, or intervals.| | Composer | A package manager | +| DDEV | A Docker-based PHP development environment popular in the Drupal community. | | DDoS | Distributed Denial of Service | | DNS | Domain Name System | | Docker | A container engine using Linux features and automating application deployment. | @@ -37,6 +38,7 @@ description: >- | Git Hash/SHA | A generated string that identifies each commit. Uses the SHA-1 algorithm | | GitHub | A proprietary version control hosting company using Git. A subsidiary of Microsoft, it offers all of the distributed version control and source code management functionality of Git as well as additional features. | | GitLab | A web-based Git repository manager with CI capabilities. | +| Grafana | An open-source analytics and monitoring solution. | | GraphQL | An open-source data query and manipulation language for APIs, and a runtime for fulfilling queries with existing data. | | Harbor | An open source container image registry that secures images with role-based access control, scans images for vulnerabilities, and signs images as trusted. | | Helm | A package manager for Kubernetes, it helps you manage Kubernetes applications. | @@ -47,10 +49,12 @@ description: >- | Ingress controller | An Ingress controller is a specialized load balancer for Kubernetes (and other containerized) environments. | | IPTables | A command line utility for configuring Linux kernel firewall. | | Jenkins | An open-source automation server. | +| JWT | JSON Web Token. | | k3s | A highly available, certified Kubernetes distribution. | | k3d | k3d is a lightweight wrapper to run k3s in Docker. | | k8s | Numeronym for Kubernetes \(K + 8 letters + s\) | | k8up | K8up is a backup operator that will handle storage and app backups on a k8s/OpenShift cluster. | +| Keycloak | An open-source identity and access management system. | | Kibana | An open-source data visualization plugin for Elasticsearch. It provides visualization capabilities on top of the content indexed on an Elasticsearch cluster. | | KinD | Kubernetes in Docker - a tool for running local Kubernetes clusters using Docker container “nodes”. Kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI.| | kubectl | The Kubernetes command-line tool which allows you to run commands against Kubernetes clusters.| @@ -66,9 +70,11 @@ description: >- | MongoDB | MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with schema. | | Multi-Tenant | A single instance of software runs on a server and serves multiple tenants - a tenant is a group of users who share common access with privileges to access the software instance. The software is designed to provide each tenant a share of the resources. | | MVC | Model-view-controller - an architectural pattern that separates an application into three main logical components: the model, the view, and the controller. Each of these components are built to handle specific development aspects of an application. | +| MySQL | MySQL is an open-source relational database management system. | | NGINX | NGINX is a web server which can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. | | Node | Single EC2 instance \(AWS virtual machine\) | | Node.js | An open-source, cross-platform, JavaScript runtime environment that executes JavaScript code outside of a browser. | +| Open source | A type of computer software in which source code is released under a license in which the copyright holder grants users the rights to study, change, and distribute the software to anyone and for any purpose. Open-source software may be developed in a collaborative public manner. | | OpenSearch | A community-driven, Apache 2.0-licensed open source search and analytics suite that makes it easy to ingest, search, visualize, and analyze data.| | OpenShift | Container application platform that brings Docker and Kubernetes to the enterprise. | | PHP | PHP \(Personal Home Page\) is a general-purpose programming language originally designed for web development. | @@ -79,6 +85,7 @@ description: >- | Puppet | An open-source software configuration management and deployment tool. | | PV | PersistentVolume - a piece of storage in the cluster that has been provisioned by an administrator or dynamically provisioned using Storage Classes.| | PVC | Persistent Volume Claim - a request for storage by a user. | +| Pygmy | An amazee.io flavored local development system. | | Python | Python is an open-source, interpreted, high-level, general-purpose programming language. | | RabbitMQ | An open-source message-broker software. | | RBAC | Role-Based Access Control | @@ -90,6 +97,8 @@ description: >- | RWO | Kubernetes access mode ReadWriteOnce - the volume can be mounted as read-write by a single node. ReadWriteOnce access mode still can allow multiple pods to access the volume when the pods are running on the same node.| | RWOP | Kubernetes access mode ReadWriteOncePod - the volume can be mounted as read-write by a single Pod. Use ReadWriteOncePod access mode if you want to ensure that only one pod across whole cluster can read that PVC or write to it. This is only supported for CSI volumes and Kubernetes version 1.22+.| | RWX | Kubernetes access mode ReadWriteMany - the volume can be mounted as read-write by many nodes. | +| S3 | Amazon Simple Storage Service. | +| SBOM | Software Bill of Materials. | | SHA-1 | Secure Hash Algorithm 1, a hash function which takes an input and produces a 160-bit hash value known as a message digest – typically rendered as 40 hexadecimal digits. It was designed by the United States National Security Agency, and is a U.S. Federal Information Processing Standard. | | Solr | An open-source enterprise-search platform, written in Java. | | SSH | Secure Socket Shell, a network protocol that provides administrators with a secure way to access a remote computer. | @@ -104,4 +113,4 @@ description: >- | Varnish | A powerful, open-source HTTP engine/reverse HTTP proxy that can speed up a website by caching \(or storing\) a copy of a webpage the first time a user visits. | | VM | Virtual Machine | | Webhook | A webhook is a way for an app like GitHub, GitLab, Bitbucket, etc, to provide other applications with immediate data and act upon something, like a pull request. | -| YAML | Yet Another Markup Language - YAML is a human-readable data-serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted.| +| YAML | YAML Ain't Markup Language - YAML is a human-readable data-serialization language. It is commonly used for configuration files and in applications where data is being stored or transmitted.| diff --git a/docs/using-lagoon-advanced/active-standby.md b/docs/using-lagoon-advanced/active-standby.md index 74edfece88..5fbd09489d 100644 --- a/docs/using-lagoon-advanced/active-standby.md +++ b/docs/using-lagoon-advanced/active-standby.md @@ -56,7 +56,7 @@ production_routes: ``` !!! Info - Any routes that are under the section `environments..routes` will not be moved as part of active/standby. These routes will always be attached to the environment as defined. Ensure that if you do need a specific route to be migrated during an active/standby switch, that you remove them from the environments section and place them under the `production_routes` section specific to if it should be an active or standby route. [See more about routes in `.lagoon.yml`.](../using-lagoon-the-basics/lagoon-yml.md#routes) + Any routes that are under the section `environments..routes` will not be moved as part of active/standby. These routes will always be attached to the environment as defined. Ensure that if you do need a specific route to be migrated during an active/standby switch, that you remove them from the environments section and place them under the `production_routes` section specific to if it should be an active or standby route. [See more about routes in `.lagoon.yml`.](../concepts-basics/lagoon-yml.md#routes) ## Triggering a switch event @@ -158,7 +158,7 @@ mutation updateProject { ## Notes -When the active/standby trigger has been executed, the `productionEnvironment` and `standbyProductionEnvironments` will switch within the Lagoon API. Both environments are still classed as `production` environment types. We use the `productionEnvironment` to determine which one is labelled as `active`. For more information on the differences between environment types, read the [documentation for `environment types`](environment-types.md) +When the active/standby trigger has been executed, the `productionEnvironment` and `standbyProductionEnvironments` will switch within the Lagoon API. Both environments are still classed as `production` environment types. We use the `productionEnvironment` to determine which one is labelled as `active`. For more information on the differences between environment types, read the [documentation for `environment types`](../concepts-advanced/environment-types.md) ```graphql title="Get environments via GraphQL" query projectByName { diff --git a/docs/using-lagoon-advanced/blackfire.md b/docs/using-lagoon-advanced/blackfire.md index 256604a537..011951296f 100644 --- a/docs/using-lagoon-advanced/blackfire.md +++ b/docs/using-lagoon-advanced/blackfire.md @@ -36,7 +36,7 @@ After restarting the containers, you should be able to profile via the [Blackfir ## Remote Usage of Blackfire -In order to use Blackfire in deployed Lagoon environments the same enviornment variables need to be set, this time via one of the possibilities of adding [environment variables to Lagoon](environment-variables.md). Important: Environment variables set in the `docker-compose.yml` for local development are not used by Lagoon in remote environments! +In order to use Blackfire in deployed Lagoon environments the same enviornment variables need to be set, this time via one of the possibilities of adding [environment variables to Lagoon](../concepts-advanced/environment-variables.md). Important: Environment variables set in the `docker-compose.yml` for local development are not used by Lagoon in remote environments! ## Debugging diff --git a/docs/using-lagoon-advanced/custom-tasks.md b/docs/using-lagoon-advanced/custom-tasks.md index 9690b9ea37..72f74079b7 100644 --- a/docs/using-lagoon-advanced/custom-tasks.md +++ b/docs/using-lagoon-advanced/custom-tasks.md @@ -18,7 +18,7 @@ We have to define where this task will be run -- this means two things, first, w Let's say that we'd like for our `yarn audit` task to be available to run in any environment in a specific project \(let's say the project's ID is 42 for this example\). We will therefore specify the project's ID when we create our task definition, as we will describe below. -The second question regards which environment we want to target with our task. When you set up your project, you specify several services in your [`docker-compose.yml`](../using-lagoon-the-basics/docker-compose-yml.md). We use this service name to determine where the command is actually executed. +The second question regards which environment we want to target with our task. When you set up your project, you specify several services in your [`docker-compose.yml`](../concepts-basics/docker-compose-yml.md). We use this service name to determine where the command is actually executed. ### Who can run this task? @@ -118,13 +118,13 @@ The second `ENV_VAR_NAME_STRING` is of type `STRING` and will present the user w The values that the user selects will be available as environment variables in the `COMMAND` type tasks when the task is run. -![Task Arguments](./custom-task-arguments.png) +![Task Arguments](../images/custom-task-arguments.png) ### Confirmation When the `confirmationText` field has text, it will be displayed with a confirmation modal in the UI before the user is able to run the task. -![Task Confirmation](./custom-task-confirm.png) +![Task Confirmation](../images/custom-task-confirm.png) ## Invoking the task @@ -166,4 +166,4 @@ This, then, will define our task for our project \(42\). When we run this, we wi This task will now be available to run from the UI for anyone with the `DEVELOPER` or `MAINTAINER` role. -![Task List](./task-yarn-audit.png) +![Task List](../images/task-yarn-audit.png) diff --git a/docs/using-lagoon-advanced/deploytarget-configs.md b/docs/using-lagoon-advanced/deploytarget-configs.md index d4624f05c2..f989b6268e 100644 --- a/docs/using-lagoon-advanced/deploytarget-configs.md +++ b/docs/using-lagoon-advanced/deploytarget-configs.md @@ -1,10 +1,5 @@ # DeployTarget Configurations -!!! Danger - This is an alpha feature in Lagoon. - The way DeployTarget Configurations work could change in future releases. - If you decide to use this feature, you do so at your own risk. - DeployTarget configurations are a way to define how a project can deploy to multiple clusters. This feature is useful when you have two clusters, one which could be dedicated for running production workloads, and another that is used for running development workloads. The configuration for these is not limited to just a production/development split though, so projects could perceivably target more than one specific cluster. diff --git a/docs/using-lagoon-advanced/graphiql-2020-01-29-18-05-54.png b/docs/using-lagoon-advanced/graphiql-2020-01-29-18-05-54.png deleted file mode 100644 index 60912674a3..0000000000 Binary files a/docs/using-lagoon-advanced/graphiql-2020-01-29-18-05-54.png and /dev/null differ diff --git a/docs/using-lagoon-advanced/graphiql-2020-01-29-18-07-28.png b/docs/using-lagoon-advanced/graphiql-2020-01-29-18-07-28.png deleted file mode 100644 index 891ac952f3..0000000000 Binary files a/docs/using-lagoon-advanced/graphiql-2020-01-29-18-07-28.png and /dev/null differ diff --git a/docs/using-lagoon-advanced/index.md b/docs/using-lagoon-advanced/index.md new file mode 100644 index 0000000000..1c0c485d69 --- /dev/null +++ b/docs/using-lagoon-advanced/index.md @@ -0,0 +1,5 @@ +# Using Lagoon - Advanced + +This section covers some of the more advanced features and functionality of Lagoon. If you're new to Lagoon, start with [Using Lagoon - the Basics](../using-lagoon-the-basics/index.md). + +If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our [Discord](../community/discord.md). diff --git a/docs/using-lagoon-advanced/project-default-users-keys.md b/docs/using-lagoon-advanced/project-default-users-keys.md index 6271d51e62..ece3aa27ef 100644 --- a/docs/using-lagoon-advanced/project-default-users-keys.md +++ b/docs/using-lagoon-advanced/project-default-users-keys.md @@ -4,7 +4,7 @@ When a Lagoon project is created, by default an associated SSH "project key" is The result of this is that from inside the CLI pod of any environment it is possible to SSH to any other environment within the same project. This access is used for running tasks from the command line such as synchronizing databases between environments \(e.g. drush `sql-sync`\). -There is more information on the `MAINTAINER` role available in the [RBAC](https://docs.lagoon.sh/lagoon/administering-lagoon/rbac) documentation. +There is more information on the `MAINTAINER` role available in the [RBAC](../interacting/rbac.md) documentation. ## Specifying the project key diff --git a/docs/using-lagoon-advanced/setting-up-xdebug-with-lagoon.md b/docs/using-lagoon-advanced/setting-up-xdebug-with-lagoon.md index 53a32b2214..e6d513424b 100644 --- a/docs/using-lagoon-advanced/setting-up-xdebug-with-lagoon.md +++ b/docs/using-lagoon-advanced/setting-up-xdebug-with-lagoon.md @@ -7,13 +7,14 @@ reasons, the extension is not loaded by default. To enable the extension, the `XDEBUG_ENABLE` environment variable must be set to `true`: - **Locally** (Pygmy and Lando) + 1. If your project is based off the lagoon-examples `docker-compose.yml` file, the environment variable already exists. [Uncomment these lines](https://github.com/lagoon-examples/drupal10-base/blob/main/docker-compose.yml#L14-L15). 2. Make sure to rebuild and restart the containers after changing any environment variables. - **Remotely** (dev/prod) 1. You can - [use the Lagoon API to add the environment variable to a running environment](environment-variables.md#runtime-environment-variables-lagoon-api). + [use the Lagoon API to add the environment variable to a running environment](../concepts-advanced/environment-variables.md#runtime-environment-variables-lagoon-api). 2. Make sure to redeploy the environment after changing this any environment variables. @@ -71,7 +72,7 @@ debugging. site is to check the PHP status page. You should find a section about Xdebug and all its settings. -![phpinfo results](phpinfo.png) +![phpinfo results](../images/phpinfo.png) - Verify the following settings: diff --git a/docs/administering-lagoon/using-harbor/README.md b/docs/using-lagoon-advanced/using-harbor/README.md similarity index 84% rename from docs/administering-lagoon/using-harbor/README.md rename to docs/using-lagoon-advanced/using-harbor/README.md index 238dbeedd4..4e2079523c 100644 --- a/docs/administering-lagoon/using-harbor/README.md +++ b/docs/using-lagoon-advanced/using-harbor/README.md @@ -12,12 +12,12 @@ If you are running Lagoon locally, you can access that UI at [localhost:8084](ht Once logged in, the first screen is a list of all repositories your user has access to. Each "repository" in Harbor correlates to a project in Lagoon. -![Harbor Projects Overview](projects_overview.png) +![Harbor Projects Overview](../../images/projects_overview.png) Within each Harbor repository, you'll see a list of container images from all environments with a single Lagoon project. -![Harbor Repositories Overview](repositories_overview.png) +![Harbor Repositories Overview](../../images/repositories_overview.png) From here, you can drill down into an individual container in order to see its details, including an overview of its security scan results. -![Harbor Container Overview](container_overview.png) +![Harbor Container Overview](../../images/container_overview.png) diff --git a/docs/administering-lagoon/using-harbor/harbor-settings/README.md b/docs/using-lagoon-advanced/using-harbor/harbor-settings/README.md similarity index 100% rename from docs/administering-lagoon/using-harbor/harbor-settings/README.md rename to docs/using-lagoon-advanced/using-harbor/harbor-settings/README.md diff --git a/docs/administering-lagoon/using-harbor/harbor-settings/harbor-core.md b/docs/using-lagoon-advanced/using-harbor/harbor-settings/harbor-core.md similarity index 100% rename from docs/administering-lagoon/using-harbor/harbor-settings/harbor-core.md rename to docs/using-lagoon-advanced/using-harbor/harbor-settings/harbor-core.md diff --git a/docs/administering-lagoon/using-harbor/harbor-settings/harbor-database.md b/docs/using-lagoon-advanced/using-harbor/harbor-settings/harbor-database.md similarity index 100% rename from docs/administering-lagoon/using-harbor/harbor-settings/harbor-database.md rename to docs/using-lagoon-advanced/using-harbor/harbor-settings/harbor-database.md diff --git a/docs/administering-lagoon/using-harbor/harbor-settings/harbor-jobservice.md b/docs/using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice.md similarity index 100% rename from docs/administering-lagoon/using-harbor/harbor-settings/harbor-jobservice.md rename to docs/using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice.md diff --git a/docs/administering-lagoon/using-harbor/harbor-settings/harbor-trivy.md b/docs/using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy.md similarity index 100% rename from docs/administering-lagoon/using-harbor/harbor-settings/harbor-trivy.md rename to docs/using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy.md diff --git a/docs/administering-lagoon/using-harbor/harbor-settings/harborregistry.md b/docs/using-lagoon-advanced/using-harbor/harbor-settings/harborregistry.md similarity index 100% rename from docs/administering-lagoon/using-harbor/harbor-settings/harborregistry.md rename to docs/using-lagoon-advanced/using-harbor/harbor-settings/harborregistry.md diff --git a/docs/administering-lagoon/using-harbor/harbor-settings/harborregistryctl.md b/docs/using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl.md similarity index 100% rename from docs/administering-lagoon/using-harbor/harbor-settings/harborregistryctl.md rename to docs/using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl.md diff --git a/docs/administering-lagoon/using-harbor/security-scanning.md b/docs/using-lagoon-advanced/using-harbor/security-scanning.md similarity index 91% rename from docs/administering-lagoon/using-harbor/security-scanning.md rename to docs/using-lagoon-advanced/using-harbor/security-scanning.md index 41ab1840f5..c84bda4262 100644 --- a/docs/administering-lagoon/using-harbor/security-scanning.md +++ b/docs/using-lagoon-advanced/using-harbor/security-scanning.md @@ -4,4 +4,4 @@ Harbor comes with a built-in security scanning solution provided by the Trivy se An example of a security scan in Harbor, showing applicable vulnerabilities for a scanned container: -![Harbor Security Scanning Example Image](scanning_image_1.png) +![Harbor Security Scanning Example Image](../../images/scanning_image_1.png) diff --git a/docs/using-lagoon-the-basics/configure-webhooks.md b/docs/using-lagoon-the-basics/configure-webhooks.md index 222c1fe82f..94fc3b9a71 100644 --- a/docs/using-lagoon-the-basics/configure-webhooks.md +++ b/docs/using-lagoon-the-basics/configure-webhooks.md @@ -13,23 +13,23 @@ Your Lagoon administrator will also give you the route to the `webhook-handler`. ## GitHub 1. Proceed to Settings -> Webhooks -> `Add webhook` in your GitHub repository. - ![Adding webhook in GitHub.](./webhooks-2020-01-23-12-40-16.png) + ![Adding webhook in GitHub.](../images/webhooks-2020-01-23-12-40-16.png) 2. The `Payload URL` is the route to the `webhook-handler` of your Lagoon instance, provided by your Lagoon administrator. 3. Set `Content type` to `application/json`. - ![Add the Payload URL and set the Content type.](./gh_webhook_1.png) + ![Add the Payload URL and set the Content type.](../images/gh_webhook_1.png) 4. Choose "`Let me select individual events`." 5. Choose which events will trigger your webhook. We suggest that you send `Push` and `Pull request` events, and then filter further in the Lagoon configuration of your project. - ![Select the webhook event triggers in GitHub.](./gh_webhook_2.png) + ![Select the webhook event triggers in GitHub.](../images/gh_webhook_2.png) 6. Make sure the webhook is set to `Active`. 7. Click `Add webhook` to save your configuration. ## GitLab 1. Navigate to Settings -> Integrations in your GitLab repository. - ![Go to Settings &gt; Integrations in your GitLab repository.](./gitlab-settings.png) + ![Go to Settings &gt; Integrations in your GitLab repository.](../images/gitlab-settings.png) 2. The `URL` is the route to the `webhook-handler` of your Lagoon instance, provided by your Lagoon administrator. 3. Select the `Trigger` events which will send a notification to Lagoon. We suggest that you send `Push events` and `Merge request events`, and then filter further in the Lagoon configuration of your project. - ![Selecting Trigger events in GitLab.](./gitlab_webhook.png) + ![Selecting Trigger events in GitLab.](../images/gitlab_webhook.png) 4. Click `Add webhook`to save your configuration. ## Bitbucket @@ -49,5 +49,5 @@ Your Lagoon administrator will also give you the route to the `webhook-handler`. * Merged * Declined - ![Select the Bitbucket Triggers for your webhook. ](./bb_webhook_1.png) + ![Select the Bitbucket Triggers for your webhook. ](../images/bb_webhook_1.png) 5. Click `Save` to save the webhook configurations for Bitbucket. diff --git a/docs/using-lagoon-the-basics/first-deployment.md b/docs/using-lagoon-the-basics/first-deployment.md index 7f1c7ee700..559b941911 100644 --- a/docs/using-lagoon-the-basics/first-deployment.md +++ b/docs/using-lagoon-the-basics/first-deployment.md @@ -9,7 +9,7 @@ description: >- ![excited](https://i.giphy.com/media/7kVRZwYRwF1ok/giphy-downsized.gif) !!! Note - If you are deploying a Drupal Project, skip this and read the [Drupal-specific first deployment documentation](../drupal/first-deployment-of-drupal.md). + If you are deploying a Drupal Project, skip this and read the [Drupal-specific first deployment documentation](../applications/drupal/first-deployment-of-drupal.md). ## 1. Make sure you are ready @@ -30,9 +30,9 @@ This will trigger a push, and your Git hosting will inform Lagoon about this pus If all is correct, you should see a notification in your configured chat system \(this has been configured by your friendly Lagoon administrator\): -![Slack notification that a push has been made in a Lagoonized repository.](./first_deployment_slack_start.jpg) +![Slack notification that a push has been made in a Lagoonized repository.](../images/first_deployment_slack_start.jpg) -This informs you that Lagoon has just started to deploy your code. Depending on the size of the code and amount of containers, this will take a couple of seconds. Just relax. If you want to know what's happening now, check out the [Build and Deploy Process of Lagoon](build-and-deploy-process.md). +This informs you that Lagoon has just started to deploy your code. Depending on the size of the code and amount of containers, this will take a couple of seconds. Just relax. If you want to know what's happening now, check out the [Build and Deploy Process of Lagoon](../concepts-basics/build-and-deploy-process.md). You can also check your Lagoon UI to see the progress of any deployment \(your Lagoon administrator has the info\). @@ -40,7 +40,7 @@ You can also check your Lagoon UI to see the progress of any deployment \(your L As soon as Lagoon is done building and deploying it will send a second notification to the chat system, here an example: -![Slack notification of a successful Lagoon build and deployment.](./first_deployment_slack_2nd_success.jpg) +![Slack notification of a successful Lagoon build and deployment.](../images/first_deployment_slack_2nd_success.jpg) It tells you: @@ -61,7 +61,7 @@ That's the beauty of Lagoon: it's exactly the same! Just push the name of the br Did the deployment fail? Oh no! But we're here to help: -1. If you deployed a Drupal site, make sure to read the [Drupal-specific first deployment documentation](../drupal/first-deployment-of-drupal.md), which explains why this happens. +1. If you deployed a Drupal site, make sure to read the [Drupal-specific first deployment documentation](../applications/drupal/first-deployment-of-drupal.md), which explains why this happens. 2. Click on the `Logs` link in the error notification, it will tell you where in the deployment process the failure happened. 3. If you can't figure it out, just ask your Lagoon support, we are here to help! 4. Reach out to us in your support channel or in [the community Discord](https://discord.gg/te5hHe95JE). diff --git a/docs/using-lagoon-the-basics/first_deployment_slack_2nd_success.jpg b/docs/using-lagoon-the-basics/first_deployment_slack_2nd_success.jpg deleted file mode 100644 index e3d69f28c4..0000000000 Binary files a/docs/using-lagoon-the-basics/first_deployment_slack_2nd_success.jpg and /dev/null differ diff --git a/docs/using-lagoon-the-basics/first_deployment_slack_start.jpg b/docs/using-lagoon-the-basics/first_deployment_slack_start.jpg deleted file mode 100644 index 2aed71ec80..0000000000 Binary files a/docs/using-lagoon-the-basics/first_deployment_slack_start.jpg and /dev/null differ diff --git a/docs/using-lagoon-the-basics/going-live.md b/docs/using-lagoon-the-basics/going-live.md index 2e3220aa11..73f27c8dc4 100644 --- a/docs/using-lagoon-the-basics/going-live.md +++ b/docs/using-lagoon-the-basics/going-live.md @@ -47,7 +47,7 @@ If you need non-www to www redirects, make sure you have them set up in the `red ### Cron jobs -Check if your cron jobs have been set up for your production environment - see [`.lagoon.yml`](lagoon-yml.md). +Check if your cron jobs have been set up for your production environment - see [`.lagoon.yml`](../concepts-basics/lagoon-yml.md). ## DNS @@ -96,4 +96,4 @@ Lagoon understands the concept of development and production environments. Devel During project setup, the production environment should already be defined. If that's omitted, your environment will run in development mode. You can check if the environment is set as production environment in the Lagoon user interface. If the production environment is not set, let your Lagoon administrator know, and they will configure the system accordingly. -![The production environment is labelled in green on the left. ](./lagoon-ui-production.png) +![The production environment is labelled in green on the left. ](../images/lagoon-ui-production.png) diff --git a/docs/using-lagoon-the-basics/index.md b/docs/using-lagoon-the-basics/index.md index 24cf7fc52d..70cd913588 100644 --- a/docs/using-lagoon-the-basics/index.md +++ b/docs/using-lagoon-the-basics/index.md @@ -1,4 +1,8 @@ -# Overview +# Using Lagoon - Overview + +This section covers some of the basic features and functionality in Lagoon. If you're familiar with these, move on to [Using Lagoon - Advanced](../concepts-advanced/index.md). + +If you need help, contact your Lagoon administrator or reach out to the community and maintainers in our [Discord](../community/discord.md). ## Requirements @@ -16,7 +20,7 @@ brew install pygmy; pygmy up ``` -1. HomeBrew is the easiest way to install Pygmy, see the docs for more info. +1. HomeBrew is the easiest way to install Pygmy, see the Pygmy docs for more info. [Pygmy](https://github.com/pygmystack/pygmy/) is a container stack for local development, developed collaboratively with the Lagoon team. @@ -26,19 +30,19 @@ Learn more about Lagoon, pygmy, and [Local Development Environments](local-devel * General: [set up a new project in Lagoon](setup-project.md) * General: [first deployment](first-deployment.md) -* Drupal: [first deployment in Drupal](../drupal/first-deployment-of-drupal.md) -* Drupal: [Lagoonize your Drupal site](../drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md) -* All: [build and deployment process of Lagoon](build-and-deploy-process.md) +* Drupal: [first deployment in Drupal](../applications/drupal/first-deployment-of-drupal.md) +* Drupal: [Lagoonize your Drupal site](../applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md) +* All: [build and deployment process of Lagoon](../concepts-basics/build-and-deploy-process.md) ## Overview of Lagoon Configuration Files ### `.lagoon.yml` -This is the main file that will be used by Lagoon to understand what should be deployed, as well as many other things. See [documentation for `.lagoon.yml`](lagoon-yml.md). +This is the main file that will be used by Lagoon to understand what should be deployed, as well as many other things. See [documentation for `.lagoon.yml`](../concepts-basics/lagoon-yml.md). ### `docker-compose.yml` -This file is used by `Docker Compose` to start your local development environment. Lagoon also uses it to understand which of the services should be deployed, which type, and how to build them. This happens via `labels`. See [documentation for `docker-compose.yml`](docker-compose-yml.md). +This file is used by `Docker Compose` to start your local development environment. Lagoon also uses it to understand which of the services should be deployed, which type, and how to build them. This happens via `labels`. See [documentation for `docker-compose.yml`](../concepts-basics/docker-compose-yml.md). ### Dockerfiles diff --git a/docs/using-lagoon-the-basics/lagoon-build-errors-and-warnings.md b/docs/using-lagoon-the-basics/lagoon-build-errors-and-warnings.md index 43f8a9ef8d..ca9758e8c8 100644 --- a/docs/using-lagoon-the-basics/lagoon-build-errors-and-warnings.md +++ b/docs/using-lagoon-the-basics/lagoon-build-errors-and-warnings.md @@ -6,19 +6,22 @@ If you aren't sure how to resolve these errors, please reach out to your Lagoon ## Docker Compose Errors -Please also see the section on [Common Docker Compose Issues](docker-compose-yml.md#common-docker-compose-issues), as some of these issues may be covered there +Please also see the section on [Common Docker Compose Issues](../concepts-basics/docker-compose-yml.md#common-docker-compose-issues), as some of these issues may be covered there ``` shell title="Lagoon Build output indicating env_file error" > an env_file is defined in your docker-compose file, but no matching file found ``` + Docker Compose expects a referenced env file to be present at build time, but that env file is only present in local development, or has been excluded from the Dockerfile. The Lagoon team is working to hopefully allow Docker Compose to ignore this error, so this warning will remain until we have a resolution. ``` shell title="Lagoon Build output indicating string key error" > an invalid string key was detected in your docker-compose file ``` + There is an error in your Docker Compose file, most likely relating to a malformed or misused alias or anchor. The error message should help you understand where. ``` shell title="Lagoon Build output indicating yaml validation error" > There are yaml validation errors in your docker-compose file that should be corrected ``` + There is an error in your Docker Compose file, most likely relating to a malformed or misused alias or anchor. The error message should help you understand where. diff --git a/docs/using-lagoon-the-basics/setup-project.md b/docs/using-lagoon-the-basics/setup-project.md index 6da0bc64e5..32a29e747f 100644 --- a/docs/using-lagoon-the-basics/setup-project.md +++ b/docs/using-lagoon-the-basics/setup-project.md @@ -1,7 +1,7 @@ # Set Up a New Project !!! Note - We are working hard on getting our CLI and GraphQL API set up to allow everyone using Lagoon to setup and configure their projects themselves. Right now, it needs more testing before we can release those features, so hold tight! + We are working hard on getting our CLI and GraphQL API set up to allow everyone using Lagoon to set up and configure their projects themselves. Right now, it needs more testing before we can release those features, so hold tight! Until then, the setup of a new project involves talking to your Lagoon administrator, which is ok, as they are much friendlier than APIs. 😊 @@ -12,16 +12,16 @@ Please have the following information ready for your Lagoon administrator: * Double dashes (`--`) are not allowed within a project name * SSH public keys, email addresses and the names of everybody that will work on this project. Here are instructions for generating and copying SSH keys for [GitHub](https://help.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh), [GitLab](https://docs.gitlab.com/ee/ssh/), and [Bitbucket](https://confluence.atlassian.com/bitbucket/set-up-an-ssh-key-728138079.html). * The URL of the Git repository where your code is hosted \(`git@example.com:test/test.git`\). -* The name of the Git branch you would like to use for your production environment \(see [Environment Types](../using-lagoon-advanced/environment-types.md) for details about the environments\). +* The name of the Git branch you would like to use for your production environment \(see [Environment Types](../concepts-advanced/environment-types.md) for details about the environments\). * Which branches and pull requests you would like to deploy to your additional environments. With Lagoon, you can filter branches and pull requests by name with regular expressions, and your Lagoon administrator can get this set up for you. -We suggest deploying specific important branches \(like `develop` and `main`\) and pull requests. But that's all up to you! \(see [Workflows](../using-lagoon-advanced/workflows.md) for some more information\) +We suggest deploying specific important branches \(like `develop` and `main`\) and pull requests. But that's all up to you! \(see [Workflows](../concepts-advanced/workflows.md) for some more information\) ## 1. Make sure your project is Lagoonized This means that the `.lagoon.yml` and `docker-compose.yml` files are available in your Git repository and configured accordingly. -If this is not the case, check out the list of [Step-by-Step Guides](index.md) on how to do so before proceeding. +If this is not the case, check out the list of [Step-by-Step Guides](index.md#step-by-step-guides) on how to do so before proceeding. ## 2. Provide access to your code diff --git a/maintainers.md b/maintainers.md index 6737fbbec4..df1979a4c0 100644 --- a/maintainers.md +++ b/maintainers.md @@ -14,17 +14,17 @@ If you have any questions or want to contribute to Lagoon, you can check out the ## Lagoon core team -The Lagoon core team is responsible for the priorisation, creation, development and delivery of Lagoon features. +The Lagoon core team is responsible for the priorization, creation, development and delivery of Lagoon features. They are responsible for the development, testing and release processes. - Toby Bellwood - Alanna Burke -- Tim Clifford - Davit Darsavelidze - Chris Goodwin - Ben Jackson - Blaize Kaye - Michael Schmid +- Matt Swann - Brandon Williams ## Additional reviewers & primary contributors @@ -38,7 +38,6 @@ They suggest and review features, develop integrations and tools, and work close - Sean Hamlin - Scott Leggett - Salvatore Pappalardo -- Thom Toogood - Bastian Widmer - Justin Winter @@ -46,7 +45,7 @@ The Lagoon team would also like to acknowledge the massive contributions from ev ## Scope of the Lagoon team -Lagoon comprises a number of individual tools maintained by the Lagoon team in this GitHub organistion, with assistance from our primary contributors. +Lagoon comprises a number of individual tools maintained by the Lagoon team in this GitHub organization, with assistance from our primary contributors. - [Lagoon](https://github.com/uselagoon) diff --git a/mkdocs.yml b/mkdocs.yml index 63f1e8c267..bb0894c15a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -7,88 +7,119 @@ site_author: The Lagoon Authors nav: - Home: README.md +- Basic Lagoon Concepts: + - Overview: concepts-basics/index.md + - .lagoon.yml: concepts-basics/lagoon-yml.md + - docker-compose.yml: concepts-basics/docker-compose-yml.md + - Build and Deploy Process: concepts-basics/build-and-deploy-process.md + - Building Blocks of Lagoon: + - Users: concepts-basics/building-blocks/users.md + - Groups: concepts-basics/building-blocks/groups.md + - Projects: concepts-basics/building-blocks/projects.md + - Notifications: concepts-basics/building-blocks/notifications.md + - Deploy Targets: concepts-basics/building-blocks/deploy-targets.md + - Organizations: concepts-basics/building-blocks/organizations.md + - Roles: concepts-basics/building-blocks/roles.md +- Advanced Lagoon Concepts: + - Overview: concepts-advanced/index.md + - Service Types: concepts-advanced/service-types.md + - Environment Types: concepts-advanced/environment-types.md + - Environment Variables: concepts-advanced/environment-variables.md + - Environment Idling: concepts-advanced/environment-idling.md + - Backups: concepts-advanced/backups.md + - Base Images: concepts-advanced/base-images.md + - Workflows: concepts-advanced/workflows.md + - Feature Flags: concepts-advanced/feature-flags.md +- Lagoonizing: + - Lagoonizing Your Exisiting Site: lagoonizing/index.md + - Docker Images: + - Commons: docker-images/commons.md + - MariaDB: docker-images/mariadb.md + - MongoDB: docker-images/mongodb.md + - Node.js: docker-images/nodejs.md + - NGINX: docker-images/nginx.md + - OpenSearch: docker-images/opensearch.md + - PHP-CLI: docker-images/php-cli.md + - PHP-FPM: docker-images/php-fpm.md + - Python: docker-images/python.md + - PostgreSQL: docker-images/postgres.md + - RabbitMQ: docker-images/rabbitmq.md + - Ruby: docker-images/ruby.md + - Solr: docker-images/solr.md + - Redis: docker-images/redis.md + - Varnish: docker-images/varnish.md + - Configuring Applications: + - Overview: applications/index.md + - Options: applications/options.md + - Drupal: + - Overview: applications/drupal/index.md + - Services: + - Overview: applications/drupal/services/README.md + - MariaDB: applications/drupal/services/mariadb.md + - NGINX: applications/drupal/services/nginx.md + - PHP-cli: applications/drupal/services/php-cli.md + - Redis: applications/drupal/services/redis.md + - Solr: applications/drupal/services/solr.md + - Varnish: applications/drupal/services/varnish.md + - Step by Step - Getting Drupal ready to run on Lagoon: applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md + - First Deployment of Drupal: applications/drupal/first-deployment-of-drupal.md + - Drush 9: applications/drupal/drush-9.md + - Subfolders: applications/drupal/subfolders.md + - Integrate Drupal & Fastly: applications/drupal/integrate-drupal-and-fastly.md + - PHPUnit and PhpStorm: applications/drupal/phpunit-and-phpstorm.md + - Automatic Updates: applications/drupal/automatic-updates.md + - WordPress: + - Overview: applications/wordpress.md + - Node.js-based: + - Overview: applications/node.md + - PHP-based: + - Overview: applications/php.md + - Python-based: + - Overview: applications/python.md + - Ruby-based: + - Overview: applications/ruby.md + - Other: + - Overview: applications/other.md - Using Lagoon - The Basics: - Overview: using-lagoon-the-basics/index.md - Local Development Environments: using-lagoon-the-basics/local-development-environments.md - Set Up a New Project: using-lagoon-the-basics/setup-project.md - Configure Webhooks: using-lagoon-the-basics/configure-webhooks.md - First Deployment: using-lagoon-the-basics/first-deployment.md - - .lagoon.yml: using-lagoon-the-basics/lagoon-yml.md - - docker-compose.yml: using-lagoon-the-basics/docker-compose-yml.md - - Build and Deploy Process: using-lagoon-the-basics/build-and-deploy-process.md - Lagoon Build Errors and Warnings: using-lagoon-the-basics/lagoon-build-errors-and-warnings.md - Going Live: using-lagoon-the-basics/going-live.md -- Docker Images: - - Commons: docker-images/commons.md - - MariaDB: docker-images/mariadb.md - - MongoDB: docker-images/mongodb.md - - Node.js: docker-images/nodejs.md - - NGINX: docker-images/nginx.md - - OpenSearch: docker-images/opensearch.md - - PHP-CLI: docker-images/php-cli.md - - PHP-FPM: docker-images/php-fpm.md - - Python: docker-images/python.md - - PostgreSQL: docker-images/postgres.md - - RabbitMQ: docker-images/rabbitmq.md - - Ruby: docker-images/ruby.md - - Solr: docker-images/solr.md - - Redis: docker-images/redis.md - - Varnish: docker-images/varnish.md -- Configuring Applications: - - Overview: applications/index.md - - Options: applications/options.md - - Drupal: - - Overview: drupal/index.md - - Services: - - Overview: drupal/services/README.md - - MariaDB: drupal/services/mariadb.md - - NGINX: drupal/services/nginx.md - - PHP-cli: drupal/services/php-cli.md - - Redis: drupal/services/redis.md - - Solr: drupal/services/solr.md - - Varnish: drupal/services/varnish.md - - Step by Step - Getting Drupal ready to run on Lagoon: drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md - - First Deployment of Drupal: drupal/first-deployment-of-drupal.md - - Drush 9: drupal/drush-9.md - - Subfolders: drupal/subfolders.md - - Integrate Drupal & Fastly: drupal/integrate-drupal-and-fastly.md - - PHPUnit and PhpStorm: drupal/phpunit-and-phpstorm.md - - Automatic Updates: drupal/automatic-updates.md - - WordPress: - - Overview: applications/wordpress.md - - Node.js-based: - - Overview: applications/node.md - - PHP-based: - - Overview: applications/php.md - - Python-based: - - Overview: applications/python.md - - Ruby-based: - - Overview: applications/ruby.md - - Other: - - Overview: applications/other.md -- Understanding Logs: - - Logging: logging/logging.md - - Kibana Examples: logging/kibana-examples.md - Using Lagoon - Advanced: - - Service Types: using-lagoon-advanced/service-types.md - - Environment Types: using-lagoon-advanced/environment-types.md - - Environment Variables: using-lagoon-advanced/environment-variables.md - - Base Images: using-lagoon-advanced/base-images.md - - Workflows: using-lagoon-advanced/workflows.md + - Overview: using-lagoon-advanced/index.md - Active/Standby: using-lagoon-advanced/active-standby.md - Triggering Deployments: using-lagoon-advanced/triggering-deployments.md - - Backups: using-lagoon-advanced/backups.md - - GraphQL: using-lagoon-advanced/graphql.md - Private Repositories: using-lagoon-advanced/private-repositories.md - SimpleSAML: using-lagoon-advanced/simplesaml.md - - SSH: using-lagoon-advanced/ssh.md - Project Default Users and SSH Keys: using-lagoon-advanced/project-default-users-keys.md - Node.js Graceful Shutdown: using-lagoon-advanced/nodejs.md - Setting up Xdebug with Lagoon: using-lagoon-advanced/setting-up-xdebug-with-lagoon.md - - Environment Idling: using-lagoon-advanced/environment-idling.md - Custom Tasks: using-lagoon-advanced/custom-tasks.md - DeployTarget Configs: using-lagoon-advanced/deploytarget-configs.md - Blackfire: using-lagoon-advanced/blackfire.md + - Harbor: + - Using Harbor: using-lagoon-advanced/using-harbor/README.md + - Security Scanning: using-lagoon-advanced/using-harbor/security-scanning.md + - Harbor Settings: using-lagoon-advanced/using-harbor/harbor-settings/README.md + - Harbor-Core: using-lagoon-advanced/using-harbor/harbor-settings/harbor-core.md + - Harbor-Database: using-lagoon-advanced/using-harbor/harbor-settings/harbor-database.md + - Harbor-Jobservice: using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice.md + - Harbor-Trivy: using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy.md + - HarborRegistry: using-lagoon-advanced/using-harbor/harbor-settings/harborregistry.md + - HarborRegistryCtl: using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl.md +- Interacting with Lagoon: + - Using the UI: interacting/lagoon-ui.md + - Working with Orgs: interacting/organizations.md + - GraphQL: interacting/graphql.md + - SSH: interacting/ssh.md + - GraphQL API: interacting/graphql-queries.md + - Role-Based Access Control (RBAC): interacting/rbac.md + - Understanding Logs: + - Logging: logging/logging.md + - Kibana Examples: logging/kibana-examples.md - Installing Lagoon: - Requirements: installing-lagoon/requirements.md - EFS Provisioner: installing-lagoon/efs-provisioner.md @@ -108,20 +139,6 @@ nav: - Lagoon Files: installing-lagoon/lagoon-files.md - GitLab: installing-lagoon/gitlab.md - Updating: installing-lagoon/update-lagoon.md -- Administering Lagoon: - - GraphQL API: administering-lagoon/graphql-queries.md - - Role-Based Access Control (RBAC): administering-lagoon/rbac.md - - Feature Flags: administering-lagoon/feature-flags.md - - Harbor: - - Using Harbor: administering-lagoon/using-harbor/README.md - - Security Scanning: administering-lagoon/using-harbor/security-scanning.md - - Harbor Settings: administering-lagoon/using-harbor/harbor-settings/README.md - - Harbor-Core: administering-lagoon/using-harbor/harbor-settings/harbor-core.md - - Harbor-Database: administering-lagoon/using-harbor/harbor-settings/harbor-database.md - - Harbor-Jobservice: administering-lagoon/using-harbor/harbor-settings/harbor-jobservice.md - - Harbor-Trivy: administering-lagoon/using-harbor/harbor-settings/harbor-trivy.md - - HarborRegistry: administering-lagoon/using-harbor/harbor-settings/harborregistry.md - - HarborRegistryCtl: administering-lagoon/using-harbor/harbor-settings/harborregistryctl.md - Contributing to Lagoon: - Documentation: contributing-to-lagoon/documentation.md - Code of Conduct: code-of-conduct.md @@ -221,36 +238,38 @@ plugins: - search - redirects: redirect_maps: + # Shortcut URLs for build and compose errors 'lagoon-build-errors.md': 'using-lagoon-the-basics/lagoon-build-errors-and-warnings.md' 'docker-compose-errors.md': 'using-lagoon-the-basics/lagoon-build-errors-and-warnings.md#docker-compose-errors' + # Redirect existing Gitbooks traffic from lagoon/* prefix 'lagoon/README.md': 'README.md' 'lagoon/getting-started/README.md': 'README.md' 'lagoon/using-lagoon-advanced/deploytarget_configs.md': 'using-lagoon-advanced/deploytarget-configs.md' - 'lagoon/administering-lagoon/feature-flags.md': 'administering-lagoon/feature-flags.md' - 'lagoon/administering-lagoon/graphql-queries.md': 'administering-lagoon/graphql-queries.md' - 'lagoon/administering-lagoon/rbac.md': 'administering-lagoon/rbac.md' - 'lagoon/administering-lagoon/using_harbor/harbor-settings/harbor-core.md': 'administering-lagoon/using-harbor/harbor-settings/harbor-core.md' - 'lagoon/administering-lagoon/using_harbor/harbor-settings/harbor-database.md': 'administering-lagoon/using-harbor/harbor-settings/harbor-database.md' - 'lagoon/administering-lagoon/using_harbor/harbor-settings/harbor-jobservice.md': 'administering-lagoon/using-harbor/harbor-settings/harbor-jobservice.md' - 'lagoon/administering-lagoon/using_harbor/harbor-settings/harbor-trivy.md': 'administering-lagoon/using-harbor/harbor-settings/harbor-trivy.md' - 'lagoon/administering-lagoon/using_harbor/harbor-settings/harborregistry.md': 'administering-lagoon/using-harbor/harbor-settings/harborregistry.md' - 'lagoon/administering-lagoon/using_harbor/harbor-settings/harborregistryctl.md': 'administering-lagoon/using-harbor/harbor-settings/harborregistryctl.md' - 'lagoon/administering-lagoon/using_harbor/harbor-settings/README.md': 'administering-lagoon/using-harbor/harbor-settings/README.md' - 'lagoon/administering-lagoon/using_harbor/README.md': 'administering-lagoon/using-harbor/README.md' - 'lagoon/administering-lagoon/using_harbor/security_scanning.md': 'administering-lagoon/using-harbor/security-scanning.md' + 'lagoon/administering-lagoon/feature-flags.md': 'concepts-advanced/feature-flags.md' + 'lagoon/administering-lagoon/graphql-queries.md': 'interacting/graphql-queries.md' + 'lagoon/administering-lagoon/rbac.md': 'interacting/rbac.md' + 'lagoon/administering-lagoon/using_harbor/harbor-settings/harbor-core.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harbor-core.md' + 'lagoon/administering-lagoon/using_harbor/harbor-settings/harbor-database.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harbor-database.md' + 'lagoon/administering-lagoon/using_harbor/harbor-settings/harbor-jobservice.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice.md' + 'lagoon/administering-lagoon/using_harbor/harbor-settings/harbor-trivy.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy.md' + 'lagoon/administering-lagoon/using_harbor/harbor-settings/harborregistry.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harborregistry.md' + 'lagoon/administering-lagoon/using_harbor/harbor-settings/harborregistryctl.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl.md' + 'lagoon/administering-lagoon/using_harbor/harbor-settings/README.md': 'using-lagoon-advanced/using-harbor/harbor-settings/README.md' + 'lagoon/administering-lagoon/using_harbor/README.md': 'using-lagoon-advanced/using-harbor/README.md' + 'lagoon/administering-lagoon/using_harbor/security_scanning.md': 'using-lagoon-advanced/using-harbor/security-scanning.md' 'lagoon/contributing-to-lagoon/api-debugging.md': 'contributing-to-lagoon/api-debugging.md' 'lagoon/contributing-to-lagoon/code-of-conduct.md': 'code-of-conduct.md' 'lagoon/contributing-to-lagoon/contributing.md': 'contributing.md' 'lagoon/contributing-to-lagoon/developing-lagoon.md': 'contributing-to-lagoon/developing-lagoon.md' 'lagoon/contributing-to-lagoon/tests.md': 'contributing-to-lagoon/tests.md' 'lagoon/docker-images/elasticsearch.md': 'docker-images/opensearch.md' - 'lagoon/docker-images/mariadb/mariadb-drupal.md': 'drupal/services/mariadb.md' + 'lagoon/docker-images/mariadb/mariadb-drupal.md': 'applications/drupal/services/mariadb.md' 'lagoon/docker-images/mariadb/README.md': 'docker-images/mariadb.md' 'lagoon/docker-images/mongodb.md': 'docker-images/mongodb.md' - 'lagoon/docker-images/nginx/nginx-drupal.md': 'drupal/services/nginx.md' + 'lagoon/docker-images/nginx/nginx-drupal.md': 'applications/drupal/services/nginx.md' 'lagoon/docker-images/nginx/README.md': 'docker-images/nginx.md' 'lagoon/docker-images/nodejs.md': 'docker-images/nodejs.md' - 'lagoon/docker-images/php-cli/php-cli-drupal.md': 'drupal/services/php-cli.md' + 'lagoon/docker-images/php-cli/php-cli-drupal.md': 'applications/drupal/services/php-cli.md' 'lagoon/docker-images/php-cli/README.md': 'docker-images/php-cli.md' 'lagoon/docker-images/php-fpm.md': 'docker-images/php-fpm.md' 'lagoon/docker-images/postgres.md': 'docker-images/postgres.md' @@ -258,55 +277,99 @@ plugins: 'lagoon/docker-images/redis/README.md': 'docker-images/redis.md' 'lagoon/docker-images/redis/redis-persistent.md': 'docker-images/redis.md' 'lagoon/docker-images/solr/README.md': 'docker-images/solr.md' - 'lagoon/docker-images/solr/solr-drupal.md': 'drupal/services/solr.md' + 'lagoon/docker-images/solr/solr-drupal.md': 'applications/drupal/services/solr.md' 'lagoon/docker-images/varnish/README.md': 'docker-images/varnish.md' - 'lagoon/docker-images/varnish/varnish-drupal.md': 'drupal/services/varnish.md' - 'lagoon/drupal/drush-9.md': 'drupal/drush-9.md' - 'lagoon/drupal/first-deployment-of-drupal.md': 'drupal/first-deployment-of-drupal.md' - 'lagoon/drupal/integrate-drupal-and-fastly.md': 'drupal/integrate-drupal-and-fastly.md' - 'lagoon/drupal/phpunit-and-phpstorm.md': 'drupal/phpunit-and-phpstorm.md' - 'lagoon/drupal/services/mariadb.md': 'drupal/services/mariadb.md' - 'lagoon/drupal/services/README.md': 'drupal/services/README.md' - 'lagoon/drupal/services/redis.md': 'drupal/services/redis.md' - 'lagoon/drupal/services/solr.md': 'drupal/services/solr.md' - 'lagoon/drupal/services/untitled.md': 'drupal/services/README.md' - 'lagoon/drupal/services/varnish.md': 'drupal/services/varnish.md' - 'lagoon/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md': 'drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md' - 'lagoon/drupal/subfolders.md': 'drupal/subfolders.md' + 'lagoon/docker-images/varnish/varnish-drupal.md': 'applications/drupal/services/varnish.md' + 'lagoon/drupal/drush-9.md': 'applications/drupal/drush-9.md' + 'lagoon/drupal/first-deployment-of-drupal.md': 'applications/drupal/first-deployment-of-drupal.md' + 'lagoon/drupal/integrate-drupal-and-fastly.md': 'applications/drupal/integrate-drupal-and-fastly.md' + 'lagoon/drupal/phpunit-and-phpstorm.md': 'applications/drupal/phpunit-and-phpstorm.md' + 'lagoon/drupal/services/mariadb.md': 'applications/drupal/services/mariadb.md' + 'lagoon/drupal/services/README.md': 'applications/drupal/services/README.md' + 'lagoon/drupal/services/redis.md': 'applications/drupal/services/redis.md' + 'lagoon/drupal/services/solr.md': 'applications/drupal/services/solr.md' + 'lagoon/drupal/services/untitled.md': 'applications/drupal/services/README.md' + 'lagoon/drupal/services/varnish.md': 'applications/drupal/services/varnish.md' + 'lagoon/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md': 'applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md' + 'lagoon/drupal/subfolders.md': 'applications/drupal/subfolders.md' 'lagoon/logging/kibana-examples.md': 'logging/kibana-examples.md' 'lagoon/logging/logging.md': 'logging/logging.md' 'lagoon/resources/faq.md': 'resources/faq.md' 'lagoon/resources/glossary.md': 'resources/glossary.md' 'lagoon/resources/tutorials-and-webinars.md': 'resources/tutorials-and-webinars.md' 'lagoon/using-lagoon-advanced/active_standby.md': 'using-lagoon-advanced/active-standby.md' - 'lagoon/using-lagoon-advanced/backups.md': 'using-lagoon-advanced/backups.md' - 'lagoon/using-lagoon-advanced/base-images.md': 'using-lagoon-advanced/base-images.md' + 'lagoon/using-lagoon-advanced/backups.md': 'concepts-advanced/backups.md' + 'lagoon/using-lagoon-advanced/base-images.md': 'concepts-advanced/base-images.md' 'lagoon/using-lagoon-advanced/custom-tasks.md': 'using-lagoon-advanced/custom-tasks.md' - 'lagoon/using-lagoon-advanced/environment-idling.md': 'using-lagoon-advanced/environment-idling.md' - 'lagoon/using-lagoon-advanced/environment-types.md': 'using-lagoon-advanced/environment-types.md' - 'lagoon/using-lagoon-advanced/environment-variables.md': 'using-lagoon-advanced/environment-variables.md' - 'lagoon/using-lagoon-advanced/graphql.md': 'using-lagoon-advanced/graphql.md' + 'lagoon/using-lagoon-advanced/environment-idling.md': 'concepts-advanced/environment-idling.md' + 'lagoon/using-lagoon-advanced/environment-types.md': 'concepts-advanced/environment-types.md' + 'lagoon/using-lagoon-advanced/environment-variables.md': 'concepts-advanced/environment-variables.md' + 'lagoon/using-lagoon-advanced/graphql.md': 'interacting/graphql.md' 'lagoon/using-lagoon-advanced/installing-lagoon-into-existing-kubernetes-cluster.md': 'installing-lagoon/requirements.md' 'lagoon/using-lagoon-advanced/nodejs.md': 'using-lagoon-advanced/nodejs.md' 'lagoon/using-lagoon-advanced/private-repositories.md': 'using-lagoon-advanced/private-repositories.md' 'lagoon/using-lagoon-advanced/project-default-users-keys.md': 'using-lagoon-advanced/project-default-users-keys.md' - 'lagoon/using-lagoon-advanced/service-types.md': 'using-lagoon-advanced/service-types.md' + 'lagoon/using-lagoon-advanced/service-types.md': 'concepts-advanced/service-types.md' 'lagoon/using-lagoon-advanced/setting-up-xdebug-with-lagoon.md': 'using-lagoon-advanced/setting-up-xdebug-with-lagoon.md' 'lagoon/using-lagoon-advanced/simplesaml.md': 'using-lagoon-advanced/simplesaml.md' - 'lagoon/using-lagoon-advanced/ssh.md': 'using-lagoon-advanced/ssh.md' + 'lagoon/using-lagoon-advanced/ssh.md': 'interacting/ssh.md' 'lagoon/using-lagoon-advanced/triggering-deployments.md': 'using-lagoon-advanced/triggering-deployments.md' - 'lagoon/using-lagoon-advanced/workflows.md': 'using-lagoon-advanced/workflows.md' - 'lagoon/using-lagoon-the-basics/build-and-deploy-process.md': 'using-lagoon-the-basics/build-and-deploy-process.md' + 'lagoon/using-lagoon-advanced/workflows.md': 'concepts-advanced/workflows.md' + 'lagoon/using-lagoon-the-basics/build-and-deploy-process.md': 'concepts-basics/build-and-deploy-process.md' 'lagoon/using-lagoon-the-basics/configure-webhooks.md': 'using-lagoon-the-basics/configure-webhooks.md' - 'lagoon/using-lagoon-the-basics/docker-compose-yml.md': 'using-lagoon-the-basics/docker-compose-yml.md' + 'lagoon/using-lagoon-the-basics/docker-compose-yml.md': 'concepts-basics/docker-compose-yml.md' 'lagoon/using-lagoon-the-basics/first-deployment.md': 'using-lagoon-the-basics/first-deployment.md' 'lagoon/using-lagoon-the-basics/going-live.md': 'using-lagoon-the-basics/going-live.md' 'lagoon/using-lagoon-the-basics/index.md': 'using-lagoon-the-basics/index.md' - 'lagoon/using-lagoon-the-basics/lagoon-yml.md': 'using-lagoon-the-basics/lagoon-yml.md' + 'lagoon/using-lagoon-the-basics/lagoon-yml.md': 'concepts-basics/lagoon-yml.md' 'lagoon/using-lagoon-the-basics/local-development-environments.md': 'using-lagoon-the-basics/local-development-environments.md' 'lagoon/using-lagoon-the-basics/setup_project.md': 'using-lagoon-the-basics/setup-project.md' - 'docker-images/mariadb/mariadb-drupal.md': 'drupal/services/mariadb.md' - 'docker-images/nginx/nginx-drupal.md': 'drupal/services/nginx.md' - 'docker-images/php-cli/php-cli-drupal.md': 'drupal/services/php-cli.md' - 'docker-images/solr/solr-drupal.md': 'drupal/services/solr.md' - 'docker-images/varnish/varnish-drupal.md': 'drupal/services/varnish.md' + # Assorted other redirects + 'docker-images/mariadb/mariadb-drupal.md': 'applications/drupal/services/mariadb.md' + 'docker-images/nginx/nginx-drupal.md': 'applications/drupal/services/nginx.md' + 'docker-images/php-cli/php-cli-drupal.md': 'applications/drupal/services/php-cli.md' + 'docker-images/solr/solr-drupal.md': 'applications/drupal/services/solr.md' + 'docker-images/varnish/varnish-drupal.md': 'applications/drupal/services/varnish.md' + # January 2024 reorganization redirects + 'administering-lagoon/feature-flags.md': 'concepts-advanced/feature-flags.md' + 'administering-lagoon/graphql-queries.md': 'interacting/graphql-queries.md' + 'administering-lagoon/rbac.md': 'interacting/rbac.md' + 'administering-lagoon/using_harbor/harbor-settings/harbor-core.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harbor-core.md' + 'administering-lagoon/using_harbor/harbor-settings/harbor-database.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harbor-database.md' + 'administering-lagoon/using_harbor/harbor-settings/harbor-jobservice.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harbor-jobservice.md' + 'administering-lagoon/using_harbor/harbor-settings/harbor-trivy.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harbor-trivy.md' + 'administering-lagoon/using_harbor/harbor-settings/harborregistry.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harborregistry.md' + 'administering-lagoon/using_harbor/harbor-settings/harborregistryctl.md': 'using-lagoon-advanced/using-harbor/harbor-settings/harborregistryctl.md' + 'administering-lagoon/using_harbor/harbor-settings/README.md': 'using-lagoon-advanced/using-harbor/harbor-settings/README.md' + 'administering-lagoon/using_harbor/README.md': 'using-lagoon-advanced/using-harbor/README.md' + 'administering-lagoon/using_harbor/security_scanning.md': 'using-lagoon-advanced/using-harbor/security-scanning.md' + 'drupal/services/mariadb.md': 'applications/drupal/services/mariadb.md' + 'drupal/services/nginx.md': 'applications/drupal/services/nginx.md' + 'drupal/services/php-cli.md': 'applications/drupal/services/php-cli.md' + 'drupal/services/redis.md': 'applications/drupal/services/redis.md' + 'drupal/services/solr.md': 'applications/drupal/services/solr.md' + 'drupal/services/varnish.md': 'applications/drupal/services/varnish.md' + 'drupal/services/drush-9.md': 'applications/drupal/drush-9.md' + 'drupal/services/first-deployment-of-drupal.md': 'applications/drupal/first-deployment-of-drupal.md' + 'drupal/services/integrate-drupal-and-fastly.md': 'applications/drupal/integrate-drupal-and-fastly.md' + 'drupal/services/phpunit-and-phpstorm.md': 'applications/drupal/phpunit-and-phpstorm.md' + 'drupal/services/README.md': 'applications/drupal/services/README.md' + 'drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md': 'applications/drupal/step-by-step-getting-drupal-ready-to-run-on-lagoon.md' + 'drupal/subfolders.md': 'applications/drupal/subfolders.md' + 'using-lagoon-advanced/backups.md': 'concepts-advanced/backups.md' + 'using-lagoon-advanced/base-images.md': 'concepts-advanced/base-images.md' + 'using-lagoon-advanced/environment-idling.md': 'concepts-advanced/environment-idling.md' + 'using-lagoon-advanced/environment-types.md': 'concepts-advanced/environment-types.md' + 'using-lagoon-advanced/environment-variables.md': 'concepts-advanced/environment-variables.md' + 'using-lagoon-advanced/graphql.md': 'interacting/graphql.md' + 'using-lagoon-advanced/service-types.md': 'concepts-advanced/service-types.md' + 'using-lagoon-advanced/ssh.md': 'interacting/ssh.md' + 'using-lagoon-advanced/workflows.md': 'concepts-advanced/workflows.md' + 'using-lagoon-the-basics/build-and-deploy-process.md': 'concepts-basics/build-and-deploy-process.md' + 'using-lagoon-the-basics/docker-compose-yml.md': 'concepts-basics/docker-compose-yml.md' + 'using-lagoon-the-basics/lagoon-yml.md': 'concepts-basics/lagoon-yml.md' + 'drupal/services/mariadb-drupal.md': 'applications/drupal/services/mariadb.md' + 'drupal/services/nginx-drupal.md': 'applications/drupal/services/nginx.md' + 'drupal/services/php-cli-drupal.md': 'applications/drupal/services/php-cli.md' + 'drupal/services/solr-drupal.md': 'applications/drupal/services/solr.md' + 'drupal/services/varnish-drupal.md': 'applications/drupal/services/varnish.md'