From 51e6838805e9ef8fddca1ca3067570fec37c6c1f Mon Sep 17 00:00:00 2001 From: chadcarlson Date: Thu, 21 Mar 2024 14:22:44 -0400 Subject: [PATCH 01/24] Bump versions for GA docs. --- sites/friday/config/_default/params.yaml | 2 +- sites/platform/config/_default/params.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sites/friday/config/_default/params.yaml b/sites/friday/config/_default/params.yaml index 9ce4abbda3..46691e501f 100644 --- a/sites/friday/config/_default/params.yaml +++ b/sites/friday/config/_default/params.yaml @@ -1,6 +1,6 @@ # Basics -version: "1.0.19" +version: "1.1.0" description: Deploy Friday User Documentation author: Deploy Friday title: User documentation diff --git a/sites/platform/config/_default/params.yaml b/sites/platform/config/_default/params.yaml index 3cc064a3e0..8444b3f0f9 100644 --- a/sites/platform/config/_default/params.yaml +++ b/sites/platform/config/_default/params.yaml @@ -1,6 +1,6 @@ # Basics -version: "1.0.25" +version: "1.1.0" description: Platform.sh User Documentation author: Platform.sh title: User documentation From 4ca7d9f9200f88ae05a6a768c620a72642f4ce25 Mon Sep 17 00:00:00 2001 From: Chad Carlson Date: Mon, 25 Mar 2024 13:26:08 -0400 Subject: [PATCH 02/24] Update trial buttons + CTA banners. (#3840) --- sites/friday/config/_default/params.yaml | 6 +++--- sites/platform/config/_default/params.yaml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sites/friday/config/_default/params.yaml b/sites/friday/config/_default/params.yaml index 46691e501f..8f4b3fea49 100644 --- a/sites/friday/config/_default/params.yaml +++ b/sites/friday/config/_default/params.yaml @@ -23,8 +23,8 @@ vendor: active: true link: https://upsun.com/register/ cta: Get your Upsun free trial - title: Upsun Beta - description: "Access our newest offering - Upsun!

Get your free trial by clicking the link below.

" + title: Sign up + description: "Get your free trial by clicking the link below.

" psh_ref: Platform.sh config: version: 2 @@ -62,7 +62,7 @@ gtm: "GTM-NN9T4G2T" headerActions: headerActionPrimary: destination: https://upsun.com/register/ - linkText: Sign up for Upsun Beta + linkText: Sign up headerActionSecondary: destination: https://console.upsun.com/ linkText: Log in diff --git a/sites/platform/config/_default/params.yaml b/sites/platform/config/_default/params.yaml index 8444b3f0f9..e3d29345ba 100644 --- a/sites/platform/config/_default/params.yaml +++ b/sites/platform/config/_default/params.yaml @@ -20,8 +20,8 @@ vendor: active: true link: https://upsun.com/register/ cta: Get your Upsun free trial - title: Upsun Beta - description: "Access our newest offering - Upsun!

Get your free trial by clicking the link below.

" + title: Sign up for Upsun + description: "Get your free trial by clicking the link below.

" config: version: 1 dir: .platform @@ -58,7 +58,7 @@ gtm: "GTM-KRPJGT4" headerActions: headerActionPrimary: destination: https://auth.api.platform.sh/register - linkText: Free trial + linkText: Sign up headerActionSecondary: destination: https://console.platform.sh/ linkText: Log in From 79e9b637304205e67f51586892cdfd063b1fac37 Mon Sep 17 00:00:00 2001 From: AnouckColson <113913013+AnouckColson@users.noreply.github.com> Date: Mon, 25 Mar 2024 18:32:29 +0100 Subject: [PATCH 03/24] Remove 64 character Let's Encrypt limitation (#3876) --- themes/psh-docs/layouts/shortcodes/lets_encrypt_limitations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/psh-docs/layouts/shortcodes/lets_encrypt_limitations.md b/themes/psh-docs/layouts/shortcodes/lets_encrypt_limitations.md index 3d0f87d665..1d7e60b3b0 100644 --- a/themes/psh-docs/layouts/shortcodes/lets_encrypt_limitations.md +++ b/themes/psh-docs/layouts/shortcodes/lets_encrypt_limitations.md @@ -1,5 +1,5 @@ -Let's Encrypt allows a maximum of 100 hostnames per certificate and 64 characters per hostname. +Let's Encrypt allows a maximum of 100 hostnames per certificate. You can have 1 Let's Encrypt certificate for each of your environments. If you define both a `{default}` and a `www.{default}` route for each domain you use, you can add up to 50 hostnames. From a3e5c3367acf66aa60a2915de6676b0ea8e8d941 Mon Sep 17 00:00:00 2001 From: AnouckColson <113913013+AnouckColson@users.noreply.github.com> Date: Mon, 25 Mar 2024 18:43:33 +0100 Subject: [PATCH 04/24] Revert "Revert instance mounts and temporary alias doc" (#3868) --- sites/friday/src/create-apps/app-reference.md | 16 +--------------- sites/friday/src/create-apps/workers.md | 2 +- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/sites/friday/src/create-apps/app-reference.md b/sites/friday/src/create-apps/app-reference.md index 0f95c7ee29..e85af4de86 100644 --- a/sites/friday/src/create-apps/app-reference.md +++ b/sites/friday/src/create-apps/app-reference.md @@ -188,7 +188,7 @@ See how to [troubleshoot the warning](./troubleshoot-mounts.md#overlapping-folde | Name | Type | Required | Description | | ------------- | -------------------- | -------- | ----------- | -| `source` | `storage`, `tmp`, or `service` | Yes | Specifies the type of the mount:

- By design, `storage` mounts can be shared between instances of the same app. You can also configure them so they are [shared between different apps](#share-a-mount-between-several-apps).

- `tmp` mounts are local ephemeral mounts, where an external directory is mounted to the `/tmp` directory of your app.
The content of a `tmp` mount **may be removed during infrastructure maintenance operations**. Therefore, `tmp` mounts allow you to **store files that you’re not afraid to lose**, such as your application cache that can be seamlessly rebuilt.
Note that the `/tmp` directory has **a maximum allocation of 8 GB**.

- `service` mounts can be useful if you want to explicitly define and use a [Network Storage](/add-services/network-storage.md) service to share data between different apps (instead of using a `storage` mount).| +| `source` | `storage`, `instance`, `tmp` (also called `temporary`), or `service` | Yes | Specifies the type of the mount:

- By design, `storage` mounts can be shared between instances of the same app. You can also configure them so they are [shared between different apps](#share-a-mount-between-several-apps).

-`instance` mounts are local mounts. Unique to your app, they are useful to store files that remain local to the app instance, such as application logs.

- `tmp` (or `temporary`) mounts are local ephemeral mounts, where an external directory is mounted to the `/tmp` directory of your app.
The content of a `tmp` mount **may be removed during infrastructure maintenance operations**. Therefore, `tmp` mounts allow you to **store files that you’re not afraid to lose**, such as your application cache that can be seamlessly rebuilt.
Note that the `/tmp` directory has **a maximum allocation of 8 GB**.

- `service` mounts can be useful if you want to explicitly define and use a [Network Storage](/add-services/network-storage.md) service to share data between different apps (instead of using a `storage` mount).| | `source_path` | `string` | No | Specifies where the mount points **inside the [external directory](#mounts)**.

- If you explicitly set a `source_path`, your mount points to a specific subdirectory in the external directory.

- If the `source_path` is an empty string (`""`), your mount points to the entire external directory.

- If you don't define a `source_path`, {{% vendor/name %}} uses the {{< variable "MOUNT_PATH" >}} as default value, without leading or trailing slashes.
For example, if your mount lives in the `/web/uploads/` directory in your app container, it will point to a directory named `web/uploads` in the external directory.

**WARNING:** Changing the name of your mount affects the `source_path` when it's undefined. See [how to ensure continuity](#ensure-continuity-when-changing-the-name-of-your-mount) and maintain access to your files. | | `service` | `string` | | The purpose of the `service` key depends on your use case.

In a multi-app context where a `storage` mount is shared between apps, `service` is required. Its value is the name of the app whose mount you want to share. See how to [share a mount between several apps](#share-a-mount-between-several-apps).

In a multi-app context where a [Network Storage service](../add-services/network-storage.md) (`service` mount) is shared between apps, `service` is required and specifies the name of that Network Storage. | @@ -334,20 +334,6 @@ Follow these steps: Note that another way to share data between apps through a mount is by explicitly [defining a Network Storage service](/add-services/network-storage.md). -### Local mounts - -If you need a local mount (i.e. unique per container), -{{% vendor/name %}} allows you to mount a directory within the `/tmp` directory of your app. -However, the following limitations apply: - -- Content from `tmp` mounts is removed when your app container is moved to another host during an infrastructure maintenance operation -- The `/tmp` directory has a [maximum allocation of 8 GB](/create-apps/troubleshoot-disks.md#no-space-left-on-device) - -Therefore, `tmp` mounts are ideal to store non-critical data, such as your application cache which can be seamlessly rebuilt, -but aren't suitable for storing files that are necessary for your app to run smoothly. - -Note that {{% vendor/name %}} will provide new local mounts in the near future. - ## Web Use the `web` key to configure the web server running in front of your app. diff --git a/sites/friday/src/create-apps/workers.md b/sites/friday/src/create-apps/workers.md index d317745628..4f0e26afcb 100644 --- a/sites/friday/src/create-apps/workers.md +++ b/sites/friday/src/create-apps/workers.md @@ -264,7 +264,7 @@ and, if appropriate, adjust its behavior accordingly. When defining a [worker](../create-apps/app-reference.md#workers) instance, keep in mind what mount behavior you want. -`tmp` local mounts are a separate storage area for each instance, +`tmp` and `instance` local mounts are a separate storage area for each instance, while `storage` mounts can be shared between instances. For example, you can define a `storage` mount (called `shared_dir`) to be used by a `web` instance, From 58c374bdda0499c3aea902afc111933aeee077fd Mon Sep 17 00:00:00 2001 From: AnouckColson <113913013+AnouckColson@users.noreply.github.com> Date: Mon, 25 Mar 2024 19:02:49 +0100 Subject: [PATCH 05/24] Document billing (#3812) * Document billing * Add info on calculations * Review explanations on estimates * Small fixes * Other small fixes * Fix copy paste * Apply suggestions from review * Add screenshots * Update formula --- .../src/administration/billing/_index.md | 5 + .../administration/billing/billing-admin.md | 29 +++ .../administration/billing/monitor-billing.md | 173 ++++++++++++++++++ .../src/manage-resources/adjust-resources.md | 3 +- .../src/manage-resources/resource-billing.md | 36 ---- .../src/manage-resources/resource-init.md | 2 +- .../images/billing/billing-alert-button.png | Bin 0 -> 6139 bytes .../static/images/billing/invoices-tab.png | Bin 0 -> 11175 bytes .../images/billing/organization-billing.png | Bin 0 -> 315643 bytes .../static/images/billing/project-billing.png | Bin 0 -> 373613 bytes 10 files changed, 210 insertions(+), 38 deletions(-) create mode 100644 sites/friday/src/administration/billing/_index.md create mode 100644 sites/friday/src/administration/billing/billing-admin.md create mode 100644 sites/friday/src/administration/billing/monitor-billing.md delete mode 100644 sites/friday/src/manage-resources/resource-billing.md create mode 100644 sites/friday/static/images/billing/billing-alert-button.png create mode 100644 sites/friday/static/images/billing/invoices-tab.png create mode 100644 sites/friday/static/images/billing/organization-billing.png create mode 100644 sites/friday/static/images/billing/project-billing.png diff --git a/sites/friday/src/administration/billing/_index.md b/sites/friday/src/administration/billing/_index.md new file mode 100644 index 0000000000..4daeac5510 --- /dev/null +++ b/sites/friday/src/administration/billing/_index.md @@ -0,0 +1,5 @@ +--- +title: "Billing" +weight: 2 +description: Keep your billing details up to date and optimize cost management from the Console. +--- \ No newline at end of file diff --git a/sites/friday/src/administration/billing/billing-admin.md b/sites/friday/src/administration/billing/billing-admin.md new file mode 100644 index 0000000000..cd12c03bff --- /dev/null +++ b/sites/friday/src/administration/billing/billing-admin.md @@ -0,0 +1,29 @@ +--- +title: Administer your billing +weight: 1 +description: Keep your billing information up to date and redeem your vouchers from the Console. +--- + +The [Console](/administration/web/_index.md) is where you can keep your billing details up to date and redeem your vouchers. + +## Manage your billing details + +To add or edit billing details for your organization, follow these steps: + +1. Navigate to your organization. +2. Open the user menu (your name or profile picture). +3. Click **Billing**.
+4. Open the **Billing details** tab. +5. Add or update your billing details and click **Save**. +6. Add or update your payment method and click **Submit**. + +## Redeem a voucher + +To redeem a voucher, follow these steps: + +1. Navigate to your organization. +2. Open the user menu (your name or profile picture). +3. Click **Billing**.
+4. Open the **Vouchers** tab. +5. Enter your voucher code. +6. Click **Redeem**. \ No newline at end of file diff --git a/sites/friday/src/administration/billing/monitor-billing.md b/sites/friday/src/administration/billing/monitor-billing.md new file mode 100644 index 0000000000..b17db917f7 --- /dev/null +++ b/sites/friday/src/administration/billing/monitor-billing.md @@ -0,0 +1,173 @@ +--- +title: Monitor your billing information +weight: 2 +description: Manage your costs efficiently by viewing monthly spend estimates and setting spend alerts. +keywords: + - "resources" + - "flexible resources" + - "CPU" + - "RAM" + - "disk storage" + - "costs" + - "invoice" + - "monthly spending" + - "billing" +--- + +To help you manage costs related to your organization, +Upsun provides estimates for the current month and the next. + +You can set billing alerts to ensure you don't overspend, +and track resource usage on each of your projects. + +For details on costs, see the [{{% vendor/name %}} pricing page](https://upsun.com/pricing/). + +## Access your organization billing information + +To access your organization billing information in the [Console](/administration/web/_index.md): + +1. Navigate to your organization. +2. Open the user menu (your name or profile picture). +3. Click **Billing**.
+ The **Overview** tab is displayed. + You can view your current month and next month estimates. + +![Organization billing information in the Overview tab](/images/billing/organization-billing.png "0.6") + +### Current month estimate + +The [**Overview** tab](#access-your-organization-billing-information) shows an estimate of how much you may be charged at the end of this month.
+This estimate is based on: + +- Your organization settings (user management settings, number of projects, potential add-ons, support SLA, etc.) +- Your resource allocation on each project + +The estimate includes the history of changes made since the beginning of the month. +**It cannot be 100% accurate, as it is impossible to know exactly what your future usage will be.**
+However, for maximum accuracy, the current month estimate includes three underlying estimates, +each with its own calculation: + +- A [user management estimate](#user-management-estimate) +- An [accumulated resource usage estimate](#accumulated-resource-usage-estimate) +- An [allocated resource usage estimate](#allocated-resource-usage-estimate) + +#### User management estimate + +The following formula is used to estimate how much user license and user management add-on fees may cost you this month:
+`unit price x prorated quantity`. + +| Item | Description | +| ------------------ | ----------- | +| `unit price` | A fixed unit price. | +| `prorated quantity`| An average of past changes and current settings, applied for all the remaining days in the month. | + +All items used for the calculation are displayed in the **Overview** tab. + +#### Accumulated resource usage estimate + +The resources consumed for builds, bandwidth, and log forwarding are accumulated resources.
+The following formula is used to estimate how much accumulated resource usage may cost you this month:
+`current accumulation + (unit price x daily average x remaining days in the month)`. + +| Item | Description | +| ---------------------- | ----------- | +| `current accumulation` | The amount of accumulated resources you have effectively used so far this month. | +| `unit price` | A fixed unit price. | +| `daily average` | An average based on the accumulated resource usage you've had over the last 30 days. | + +All items used for the calculation are displayed in the [**Overview** tab](#access-your-organization-billing-information). + +#### Allocated resource usage estimate + +The resources consumed by your applications and services (CPU, RAM, and storage) are allocated resources.
+The following formula is used to estimate how much allocated resource usage may cost you this month:
+`unit price x prorated quantity`. + +| Item | Description | +| -------------------- | ----------- | +| `unit price` | A fixed unit price. | +| `prorated quantity` | An average of past changes and current settings, applied for all the remaining days in the month. | + +All items used for the calculation are displayed in the [**Overview** tab](#access-your-organization-billing-information). + +### Next month estimate + +From the [**Overview** tab](#access-your-organization-billing-information), you can also access an estimate for next month. + +Like your [current month estimate](#current-month-estimate), it includes your organization settings and resource allocation on each project. +However, your next month estimate **does not include any history of changes**. + +It is solely based on your current organization settings and resource allocation, +and shows what you may be charged if you don't make any changes until the end of next month. + +The following formulas are used: + +- `unit price x current allocation` to estimate how much user license, user management add-on fees, + and allocated resources may respectively cost you next month. + +- `unit price x daily average x 30 days` to estimate how much accumulated resources may cost you next month. + +### Invoice + +Your invoice provides definitive information on what you will be charged. +It is calculated at month-end close, and includes your actual organization settings and resource usage. + +To access your current invoice and a history of past invoices, open the **Invoices** tab: + +![Invoices tab in the Console](/images/billing/invoices-tab.png) + +## Set a billing alert + +{{% note theme="info" title="Feature availability" %}} + +Billing alerts can only be set and received by the organization owner, +users with the [**Manage Billing** permission](/administration/users.md#organization-permissions), +and identified billing contacts. + +{{% /note %}} + +You can set billing alerts to receive an email when your [current month estimate](#current-month-estimate) reaches a defined threshold. + +{{% note theme="warning" title="Warning"%}} +Current month estimates are computed once a day only. +Therefore, email notifications can only be triggered once a day too. + +You may want to increase your billing alert threshold after receiving an email notification. +However, if the new threshold is reached later on the same day, +**you won't get notified until the following day**, when the current month estimate is computed again. +{{% /note %}} + +To set a billing alert on your organization: + +1. Navigate to your organization. +2. Open the user menu (your name or profile picture). +3. Click **Billing**.
+4. In the **Overview** tab, click **Set alert**. +5. Enter a threshold. +6. Click **Create alert**. + +Note that you can edit or delete a billing alert by clicking the billing alert button in the **Overview** tab: +![Billing alert button in the Console](/images/billing/billing-alert-button.png "0.1") + +## Track resource usage on a project + +{{% note theme="info" title="Feature availability" %}} + +This feature is available to users with the [**Manage Billing** permission](/administration/users.md#organization-permissions) on the organization. + +{{% /note %}} + +You can track costs related to resource usage on a specific project in the [Console](/administration/web/_index.md). +To do so, after you've set or updated resources on your project: + +1. Navigate to your organization. +2. Open the user menu (your name or profile picture). +3. Click **Billing**.
+ Your [current month estimate](#current-month-estimate) shows how much each project in your organization is expected to cost this month. +4. You can select a project to view resource allocation and usage details.
+ To do so, click **{{< icon more >}} More** next to it, and select **Project Billing**.
+ ![Project billing information in the Overview tab](/images/billing/project-billing.png "0.6") + +For information on resource-related costs, see the [{{% vendor/name %}} pricing page](https://upsun.com/pricing/). + + diff --git a/sites/friday/src/manage-resources/adjust-resources.md b/sites/friday/src/manage-resources/adjust-resources.md index 2fd107b118..68335d7c09 100644 --- a/sites/friday/src/manage-resources/adjust-resources.md +++ b/sites/friday/src/manage-resources/adjust-resources.md @@ -32,7 +32,8 @@ You can even scale horizontally if your apps are struggling with high load, or i by adding more instances for your apps and workers. For information on costs related to resource usage, see the [{{% vendor/name %}} pricing page](https://upsun.com/pricing/). -To keep an eye on those costs in the Console, see [Resource Billing](/manage-resources/resource-billing.md). + +Note that you can [monitor these costs](/administration/billing/monitor-billing.md) in the Console. ## Vertical scaling diff --git a/sites/friday/src/manage-resources/resource-billing.md b/sites/friday/src/manage-resources/resource-billing.md deleted file mode 100644 index 68276dd2ee..0000000000 --- a/sites/friday/src/manage-resources/resource-billing.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Resource billing -description: Keep an eye on costs related to resource usage. -weight: -50 -keywords: - - "resources" - - "flexible resources" - - "CPU" - - "RAM" - - "disk storage" - - "costs" ---- - -If you have the [**Manage Billing** permission](/administration/users.md#organization-permissions) on your organization, -you can keep an eye on your costs related to resource usage.
-To do so, after you've set or updated resources on your project, -follow these steps in the [{{% vendor/name %}} Console](/administration/web/_index.md): - -1. Navigate to your organization. -2. Open the user menu (your name or profile picture). -3. Click **Billing**.
- A monthly estimate of how much each project is expected to cost is displayed. -4. You can also view the costs related to every project you've been added to.
- To do so, click **{{< icon more >}} More** next to the project, - and select **Project Billing**.
- A monthly estimate of all the expected costs related to resource allocation on the project is displayed. - -{{< note >}} - -These estimates reflect the expected costs **for a full month** based on the way resources are allocated **at the time of viewing**. -They don't take into account the history of changes you may have made throughout the current month.
-Therefore, if you make changes to resource allocation during the month, your monthly invoice will differ from these estimates. - -{{< /note >}} - -For information on resource-related costs, see the [{{% vendor/name %}} pricing page](https://upsun.com/pricing/). \ No newline at end of file diff --git a/sites/friday/src/manage-resources/resource-init.md b/sites/friday/src/manage-resources/resource-init.md index e3950e2237..abd786b7a5 100644 --- a/sites/friday/src/manage-resources/resource-init.md +++ b/sites/friday/src/manage-resources/resource-init.md @@ -37,7 +37,7 @@ You can also [adjust resources](/manage-resources/adjust-resources.md) after you {{% note %}} For information on costs related to resource usage, see the [{{% vendor/name %}} pricing page](https://upsun.com/pricing/). -Note that you can [keep an eye on those costs](/manage-resources/resource-billing.md) in the Console. +Note that you can [monitor these costs](/administration/billing/monitor-billing.md) in the Console. {{% /note %}} diff --git a/sites/friday/static/images/billing/billing-alert-button.png b/sites/friday/static/images/billing/billing-alert-button.png new file mode 100644 index 0000000000000000000000000000000000000000..a4abd6b4c5ed9194a93710c2d42aed787efa4c74 GIT binary patch literal 6139 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 Ke3`7-tN#TYXi--H literal 0 HcmV?d00001 diff --git a/sites/friday/static/images/billing/organization-billing.png b/sites/friday/static/images/billing/organization-billing.png new file mode 100644 index 0000000000000000000000000000000000000000..735a00e8f1eb5a0d463cf96d45fed6445fd90bc5 GIT binary patch literal 315643 zcmeFYXH-*L*9HoT%CUfmh)7d7ic&?94nYyH0iuLnL_~TGy~PShRS`lDMOx@JKmq|N zL692hgcg#}Atcm<A;4XHH%^$-=^N z=HY|;&sbPaX)yo&&3>Humy6=-k}PcfKOWw{Yv|9qa&Rii(k@+WAH{R-?>DTrQ5xsW z_t_2}vy}C;=N((gzw?fA`qF2v)g0aGn)XwqTT2w{W^{$1fdf~dm6N{Lg^2RI;IbsEu2OD>$QsrGnKMRHK&Mq}od(8f*9J-u|=Ax?ux0d7t@1G4Ef&pQ7|FyEGK~?9}cz{sr?M;Yo>INu6W4rsr_<7fVpLnDE zoV6jmSDE_ju*-7kB_E2$-)Z!`(GJt&U z-=}_mV)5og1}}CGHux+*OP4gQ{JW%K#p{a0zmGWC8NIxhy$Qnp=({o=Ofa>-_U~^6 z+^h?KDefTk^MFOtk9~Mt0n0A```sm5-y5a>*CkPO(~`OgoH(2)UHI!A5-|Jl;A*ZAcpQ>~b@mfMr6ke~cw3K_6CF-_MqtM)KB($ULn z{O3E@Ca&^=?}W@8FqBqn(TUZRwnofX;%Y_)a-{g%{@~0i=TX0-`qc2R8X+OAaVn9a zR2}v8W#J{bJ9VchU$acDZgFRETUa%*l)kU&I3;vy5D>hA0@^r?Cjb1x^5hIpCfa7~ zVfX7NyGm`<#fNL)Glu`~+PqoBuTSm67o8#2X;TNY2N-Jx_BLk4k_x-*#c@sNa(&m| zJDkU%&pBj>Gn-E@Hk7sF7V?&m3r%|gLfVg74+x%3gfsfO3_R}CAhEX|&`9@T+_2n8 zJ_US#oaGv}xGkyJ%*S-R+(t9S(WuNS{c!sK3vbO7QU!RoY;oDx;;ZyNGz#OmJ}%ZX zR#WEFPWat87BBK{|K?-Jd${=fR zDrjBTZ?ZxfTNmiFzYQ--{&w;=F(b%LdGGs(T*s+Di_;uSj)F2oLe{FFx(o(rTVF?@ ziZ~NxH&|ahqe?;A@hoJ0_8!w0J&mdnS#@OWE(F5<$Ltv3Z&J5aB z$Fj!lM=UJycaJT|ngk4VWf+64>O2gTmw#0a>K3`{F~4kO)f4#1TZZ`b-%lT<8+j+7>X2ki4{+X>`_8a0w}70 zHFu;^@U*p2tn~Yy9$xM3ZN%t zNa3Q~n#4VH{W}mQgyTLWnNT@FuYBkITqCf}8Bg9kFgz{cD*SHB6>hp%XBU)TRC?|W z(>&r>ydg}Zz*fERFbuI`TBT!qB#&cuqKtJ$6M1!=QhcfUe~q@)6<(qn-sG^e`mV3% z$^u=aO*I?wP20%Vjptpj_9^waD{KdoZ{-7vnbu-ycnnqDi7(`ZZIEHW!-*|4 zewhR*Ye3q!M*rLHihocabckJY=S*%i)m(K-noW&Tw^V%kZvGeMM=IE$h|_o1>xt5f zyZ}bP5tby$BmI^pjr$$dHmzZD21+!f!%WkN7jV(a@LjBUzX9peAIo_oSXNdz2=W=B z)Ro;xvuIR5|Frimk)AbjX+1ytkvF`BsCQ+-X#FV5lXqjE3@mG%fJ+~Lo&?yF2|Y#P zcTp>NnWB5YxJj$-*732bo1Oo&X<{LucBK`IkFlx3#Mmeg@7NiX#*G4XYE;DoMhMVyCSZk|2y*blv?2|QBwRay6zCI<+w(IsS}IERlRzD z`pmLoqGV!WNJTi5qt=Ydpu&{EF+1PQ4BG34a6~ix6cZNYto(}2A%hS9dhx5)bs|xow)wVtxwH!N?jS>bt}!UIDXZb* zQM$j4Pq$F8KWLv+@?I=srE$k<@mRRJ{e2XtdbN@oWkb|)y)h##qjCq?RxVuDD2lD2 z+YjN6W>j1jq-PVaz0R8$UU`Ou~d`pC6{9l8WNilI^FI?78jJMw1aqjw2yuzO^2>WZKh|BiM zfENdsNQ1`6>V{Rx(!F87BJICDvg5t>Ed9orghd^*Vu5WKKPugT2`y z@*o~!Y3c*f^7CBIYaFpSz;cyIsqB4lvPch`)_dYy&3Uc0!SSA{Kq$u!?WL`cHSsKE-=}KO)%kV4E^3W`cfe-j9S<409WLkhqAH*h zN>`V%+6*`69 z74ZGFUWAJ=hf~f7q)yruL@frgHCeT-;rc&tbtjCK^=?^apaK$>&tF?MMKX!8uuZ|%tn6UQ=BnX5*TVCi`^ z<}qD%i6=$n(*~)fPs!u{F`{Jnw^m#8+B_@&;1@}F5BTZR#w>v*Y=iu>B*W>m-ZTv^ z*6CSczOJ3))=|PL1V9NuN-e-#d1X{=u=j69C-)rs;y*jy_lWLLMiC_JNUx^5v6q4! z*8=So^nmdFcJCxS_{JTdTXUp7@IHdFRi>KM;4&4#O4-s?^$C~V4}r1;?4IyIz==%Ufui0?TP~%7TlPGOLOX-C zEmM-Wo(NMH_C&3MG?ne{_bXHy+YJ{2XVLzv13IjXL%ZypTtw%O@2K zxf+U(U`Kwp_EWi{L&q`1?-)Sc^vq*Bp9T6V0%d=&KDcb{>vyS&p2&&De{RiiU`xd< zRjkVK8kvEq#juy&RWUoioIXH#1#UK$$|DHlmV-RjQ#B{;P}`K%GM3c1FJVTQ<2bId z!U34Z^hTLN{=og$OK03wuVOt~dw^HxjBI8*1GGLXpHy#RykCESv3#P*A+Hl#JS3;J zpyJ1^Y}eT(nc~#bcoiPTLb)#Ql4Nph;p*eW?}Bzy$i~6@E>lP)U7d>7PJ52_SXpS+ z@19tt-n<*FeFn2iy|5d8>J_&m1>GlK?v~ttp==x_Q+Hkq6RDi$B0F1`BncS za;vq!L-(WRbeDjY3h&k>VW7%ac6bxzYB=ZQdPb7Eh=%~&Wun$~u_avSp#o!LSi66F zTV-9yWc!qMaB@UHsO()|`gm)3OJ6@%4aZ%`ERkImx*N7Cp{ny>KLrSabwB^8h*9d@ zo-(BmKvDW&<%5;!KSvW^5v@;zj#d$xYBq*Gd)eC>gkQ+&2Z61*-u14ZX++V%4CzL< zMeO3pj*s<+>k3(?f%?@)DDUjId9}X2&Mk@Cay1@PiWN+pojLne)02M(E zFV!r-O;3wD8|$W2#G8w`l5rpfu}i8Ys3Y*#l|b>n7=bJ2*)d^;z#^!=@nYFr^`P8G{0B z+`km{vOmTXO>W%21fFeb!I^^#j`R$9mIdt}kFAMOJq|Pi$J&~BPA=EpL44<)t~=Nm zo|c_-Rk$*DaoB^Dx2B2NyNJ!R<`fbZD4908vgYd==jdX5Q9M?MfD28JJrfIrqXo=w z#MNj6N@5dyL1`7n*qhgnG<<2ivQX)O?-Q=a@!(BLukYysD)~Uf*xq)qcg?eRBr%HhrS^)0L&$vYsIPg^_ z7w{XXDT_Zc<|#ZOzq<;%Llm^i*YFY4>c4d_YohiH1BY4d{T?9pb#>M2NX-C}23J$x z6rN$9QQufkg`s5*$fB@*ZyAgIts?$7{eU4)(W$7d^$e){11fFcg@#Jg!el5>U%NPG z_Km&dlM}+#b#`Z!hkH`N<+TIbdfNfx&rjs7ZpdMO-(h3=h*q1;f_>HTtNB(z`?Zu= z6hEy(G}J%hb}derP#5=T(1!Gt83pvwEhlV(XBZh1b-#wf)u|I)IHYUOig%A)6+h#% zJsCO-P0T=s*e#tMD!^U91}}iji@*yqd%sGVjeT0`sShFP?*M3k)%O#^q05sUapD8k zPo`6rU*|uT9<2$K8s~z)F6l_sLO?R)yy#XQ!)`IcnkhuhPRL}JnGZK6UFNRu9KW!> zjxeBBxcwhnyJ%_sWznUS%@Uh1OT179;mH9dEYN7Z6SaA$&~~gN1_kFl0l*g`zMlYB z9Z>O^)IpED{n>C~J#JZln)^nQ@ub2DhmmPnfl{^oI@clD62+$4#kZytf_>r=8Zzp2 zTNRy(y(4QT=15+2i`lWyxFlNvi749uJ5pBVG{H8y9vU1iRb1}|c{{P;xzZZDchKxP zFnvc{15N6Cy{BlYzGfOZ;}Z>^C|YcC9-FDlfhtb%w#Lfe;Y46PyCexdlnEyxBeX@`NlMH?F$NT1T_xY;#(KXK_mI2avaqtz=;tVq$)lN_Ire$QirJ=KeHK!l3c zQNP56W-ed$eggWHFL2I1L8lwnIlJO7lw6CM_8j-c;+Mu`qX{gYzj7AJuoP*vwOrtr zK2n6;W<^}awAZLCXHH4Uk)DCP&aoQUzS@BNR^;TRvEsJx%sh}w?og29HKRAZLm90G zI%ke^cBh-=-wx~Axz@lH+YG9=b%w{6{TR?x*>$kb@4ow6*RUz%Zd8?(7kf>*ugaIv zz38oHY%7Wt0^KrP`eW3ejt%|`vpR#Tep8l~OW8^^fwjH%u%&YsdNv!9Tl=^?VtsC{ zrLH#aAjKWjEb(W(Cm|wiA!JTBU5qZ-vl$l77@%3I%STb3>od92++ zkd%G*UblcWxwhblP+O~4Tn@d)nLV>xs}r|Xi;b|Sh5Q6dzp7;v?XNw_*g?MMzdK{@ z#;0b_GfO1Rr)ST3AkMm~d_e_{sL-2S=@Q28-L7_!OX2V}h4D&SjJ@0~3v9%m;Wpr< zzn0I+f*Wb>=%v-DC#K}Os!7WmKRVL$6bLrnw~Yomk_cX-LFxgDD*|NYDR(P%F7>#x z0SNrC(>R)X)l_#k2-P+-dp`~`rWV$>RYnwsd)`Aq zFMRkz*VnXBJ?py0J}|cQ_f1(!qmvKW{P^vIdF}ns$^Cmz7LDxRh2Q!eG%DK)I6p6Z zX|r4}XnOt90Xm2`B)Htn%bOceSAB|VMVZbp)HQa~=ewsqUoLh$?2ckAyPJ&F=C1Dn zdTe%VFn%1WhLsF`(h0bC|FdduMy#h!YT52!+S|np%NhwG)VAw;T#REK9hS9-5+ihX z-tHr-#?Hv>Tznmh+t3$L0fE*}Ybj?qf;{Rxqt|NO`2#F&$5Pv6(K&I; zrTd^8!qljMv*Zd`wAxKqF1J`*%q-J*`5czHMSsi>$^Oie=+;Jnt}fE7nr^wCca6k< zmUxNwoK}_MvI6YyuAZ{N+Zc7j3sY}h#=;)Si)w|5-!iW6@?!HA4FWnz?|i2o{30sA3nkI2z{DaR`+?QUc)fyqtt2b9z#Na)h+oF9Iz(ppTl)Or!nud1}$QD{5&WwFai%D z`X$8io5+Zq8Yw-pW5^6W3s}^C9;UXcb0n1<9;Q6p43lf)xVau|i%U}|-m5&?lhW6= zxc&8bj^oPB6CGnt%Z@eNT8k{a}w1MfP9VEAd}703~F-l8|&{5pjK+3T~lOO|K^W_@S}Yw`j)#kg*>C# z3bA&gpF4lhK?#EvGfZJodI_1LEb5jn`&%0$Un~Uc`9V7Zp~$U)>}--vE8uk-pl>2( z{cTgn*bqs7^GY};gImD%|yf-P_dc%ceaBK;9)bsR>k$ZdG_ z+jfF+TFCN_uq&5Z{yq**~G#d!TuR*fiHD;OnL;BM#7cx~HSy{t$c+xjjoFTwnJrAi7lbwQ;S4wVJ#!ptJ!zK2y;WEHUjoZ1D=VSNFPFSu^7=u8+{+X>~8F`%hIRTKk5o&z#0ls>0q+dZx)qKz_bx$+Owp#m^-8p2*KF z{%%=gYw5@8cU-F$cAAUm^1QHq2Iqf2LxLCbYt9py=#CGv+mL_P%+(Y_oeX0qbvUP| z(YGc%S1ZAVnrSWNeHMkBH#KkC~MinN=%BK3_++` zs3=VeysYEe?`@3@pwl^@=Ssu@VZ zgQJLJ>R`(6>KBX>;3{}O_I6)5y6W-r_IV7Dp83@Gc`xRc z9M%o_$BdpZp2F&s_rDb>?VJHj^*$Y~2QR4GL&@*K2+{y03^$UmqX6dwFb>3c^YH7J zx=g$kS4KxBJLpq_xsq{!7}Z#y(DHt3gj;G{i&o8oOABkdxlx#J)h&y(vJT}7TrO@D zhJ$Yyti=P0b=YSYFHgq%P zl>8Z<*vJi#RZ|b^&X;4U%)-Q%qn%g6)2lj_b-y!hBcZ;CT_q04p{k&=bTvGm6!FGG zx|fgqcX(#^O|Oh_JNSTQZ0@QL}nLn%$9Tw;cecMi-(txxO2Q(mO))0~ zf0cC;@|Kiw252>$X=+hv)3E4m`nDj={J1@6$5#Y1tqzt0tdgtqw(D9t)sB?{hp*wD`Tgy>30WG~zElQ>+4t_wE8=C$C7)dhWsnn+?Gdq~x=* zHUMf*7|VX1=|uf;jhilWt+6*`LVy`pvGqSd5yA@cYB!7QGyHsn4SZ3*G5C9lI)v z?tz0NMVoz&uQKl(sckiu!rCEra9w4_!AgEA{?Rvov@p*XdgyB^AMHhvDrPqMEiW}g zh7>^>3RV;2A#N4UWT?E!{Pn)@y1~`0>9ps9;R27p3{_q`S2ET>83+eFTNn7o{3-P{uw9e^LsX?95kuZSzmnI^1{k5EJ4FFL5w=EDmvvZ zw!=-Hp;Lt%kn)MJzTC=~3RUwn`DxR8p1+FNpAe(14Dn5brFA3BGvM%=&A@IJ)Wg$8?ZhZ+TZe))*JmwurKnlTt;^}C zv-5)bE)-hUvcT2&IO{*&# zy!d{{zRcha-p^k0%zzH)7und!V!7m-Xq6IZ!`T2ie0kTq9IWDjV1CSk%qxZy(M)}yx+dqWDcdn?aCa zv!l+PYVG}w?fo7+t@oXt{bLh)TCy84%qR{F?dwy}D`KIPR-uI~Lbm7ZIV|^IIyVq` z`7vSC&;(}w3`v=3P35-^%YH;@IU$&ohiI^DvTYIOWRL|I--tIi9OUW2yTVh1X3wVI zKw7!1Nrk`B7LsXJUz{pRCKI=g3>fH+u4}J)%Ox-MY{>PUD78S2dva9TH8iVz;*c-ma4{Gg< zfbBtn%RiaRPIaYjkkJ4}G)34N0QUcmS8Q;!1uq4#E60Xtbt(vVM{Y3Vi5jI?`*zv7 z;7QK|!Fc{Ru^UWOTN}PE`7Q1!;mCc@Nphsjx^mvVr`Sl(#%AUV&pyw2f$8^3U%{)yCm1)z zSs1ZdgYGPpyNvxd1g|An@%)f%r+u1DG_A3)R65dQcUDmdU6K+Gk6w`v8xYUmE`>8f z%ut~PsbcE}z)!KW1jkPTX41_{R$OL6x}Z#@;g8~+JME8)9Df1}L1*_xg%6q|mPRn2 zm_9~_CGe!AMcs8NfNOyA4ibbhG+~lWUK?%^pB|4?0c!Q~Pr_bOnsJk^Q(wM8t}Xys z8U%dl_dXw;AnkigGXSRJt4~($zfM#Fg=uz}*ShKY@M6e=5P^&)_`p#}VAKSMq-X+NRkf`t&fzkaLl0@K8432j_FNvlL*K}J%?4)z>!4p4 z-jKU1OXznPFyz{EwlEwTau#E8ER#`k+96KrsfCsAa+`t+KY45tctlr*H6(?GkM zMPqe5SglG4ed?if<3H>F=4ZJj51~@T`}x&{$~n-Q{P7KJk?j9;EEe1+Teh{L4QMB3V+nf@ct_**=PHlHmjM3%l zbb)b>FSh)B$mm)mv#e1N#_bw2m#GBVVWK{?X|E&-<9!ug3rbE%I@b+B-H>9km~?B| z&C8PB4nfHrS9-nbDV2Tj#svG4Z@`>Za)tu(_NR2+dQ3*a?!B`wbA)j{Dw%G**~x_| zewTbjZtL@v$Gq8i;&E8Cm?a*gs;Q-yQ${;hhs2PQg0!@wAE9CfX~)tn89hovfTDB@ zM$cG`@VR?M;MX7^?raN@{RAf?9(fRVg}LPiRvlcE3LG@)_G-O`aU^`RFU{ok@a>B3 zHFqk!0^H8e<Gwq67-JCBD$?fcdq6Au7=PZ+az^nbn=7BULW($peuu1@Az2{}eBHJb`R zyU-P8f>80+${|v*Kw{`?&d1MqH#aoTJ2-Iw!b{8tzeU*kKGvU-7x|E0wxYa<6FPY_ zTroBkGGH>#T-cKhV@wdOke>7(gYffzbg@p*?0_!R=T0|Jq+K)+KZdpy1 zz{p>z3Nn_}o7sm|wf0+0)~(qVpD!gEV}YqO@qgqt2JU z4~yD+A20WM{R{-!HI%+2l9ssXl_x)sfBGe9z_-WDZ9Ax1*G*%dW83A_m`Rx>5^JAD z()MVG8_wv24|CX?=r_UFyb$0vT=aC^2aE?wzq-UXt>`)$@YAyvbYUnl^-KnjDouau z4#bCJn;1F7{YAnUT`uxFT`**F6b68_p2U9WRM`@KOHvJ)u#{gZZ&^DIuIt3srJeuJ zPHlcAE}>@Z)mc|)1_D+DEX+3U(4-r8s-d}lO>6dxpIlvk^nvyV^JSDS3o@1(bvW`L z$nC^@6?Bu!a2Kw~a*~&;82|<3bE+i#xZrySSnMj!(H81jcJAf~m3TNLTM7A|b?wTA= zRl!$xX?Pm)XGnKF8nt6-0A6#s&l32}?Qw~?92$Aa-Cv1!^R%oC`s-U~u_NPl8 zX)a#QD&ffnl~vb7GK2SE-I&Vw#N0Fd^53nxSeLbq;*uV|w6!{(sWWkugBI_HRQ!#06k6ICxobF$3y) zku+Y4=zWM-ZwfN2W2hg+AcIoe+~_Ui<6%%uANkFP6aT5B1_}Y#icuku>fM=X1$q{C ze_e0?M+2Ne&m5nQuDs}JlFm8G}7Q9q5CD=~>6`Jk!W7X!=gwH*Zr+&59Ce<>Z` zFtPS2EOtQKpy^F^p93XdUK}aDg#7m0&H7>=Uze<|Y_wvk@{gZHWDwkG$`F|9C#>8` zjkSbrqrKC%o4!EOy8y@WkF`Gto+g_|!G^o06=>78;0=TYIry_2FCN(V(_nEml!t;P)k4mk9A`6Ebu~)4q zBr#xFjq>m%%xG{LT(aR?>vG9S*>*WJX`Y$heu*~bJ8v`Asgm$^*y=*COR2WN+ev}` zm=z-qbsY}z@UR?2r*}F%7IR6dywgkT<5FBO<>+&>&$o>8drhl9lO21yXeMj&UiNrZ zhtu%RoOW*=u&hir%0HvXGfwCHCX%)(Q6%2;1#C|5xIM^ECw${dC~&XGZ;QwCVtC0) zZJQDAvXvl-Wbc8z>-SSYo~wC|%3sY>_n5)r=&KKzAUrYoLMVq_X5B=$MB8yiV{q&l zpL$G`pw@@XZtUb4C4k4@fpUKZR2$5G~mk6BUzqcTB!zHS$0iIArGh;hS*Yp>QD z3Au;K-G+l+MA2nWP?92*G_C?$o0CtMlgU@MYQilTs~a3(Qjd0X&BcH%L|rBx(YUGO zaJ8w;ThB~sx6?HnTX|w8pa=Yb)5vXC)MH36;o%Uug#@QJoS(&iimXL*Ubdr(bWWCL zZ#jtk4sJ0;00Ay-G{pREMD0o`mXl=zH@lwy=E8QL3AT=g+__8jX#YN5fo;20rf)$>_TtZ8T z?xtz>+Zp6OE5b$Dwd8e>x-NW7N*Vc>6pmAC>Uv=!A1U{mTWWVyG7NYjfwsvjQ{r|d zJd})MpR@9yzc3exPK~lya~SBT%m$g-)SG^Y?xu~-wV$XKe9iVr^t%8nj^KzT{|s`0 zcrF`#NMw*`ao_zKaqC61Xrzlm8i8i&&5tqDbFZ@N)_ZW%^4Fs$_3V<<)%%3%xoE%q zPlt@-LBFPhbUwaN4*ZxT_IPObjHgR<>f<%EhqUF^-jcfSg_5@A^eOkNO=soyr$L;o zcCU+-K(CE?piuC_UB^Xhfjgo<`esYF0Q_}WjK2_uFCl~YYm5$UXMd>Uv$8n<24MA6 zwbXi7DXJ3^ykN?#@!U=o z^9sn@HJEKA(rQyWd?B@wweTVftbo6p-&i?&B&3!6{>VQLpxJc$GY_MEVD-7=7&@ec6J>p zCG7P(HOcA2i-z=`l$xdKYERvGhb)1~D;OJC`40XC^nhD_B*Od&p^c~P{fg?<(#4-D zphimHyymz8zhs20WrF>g*CX32>IkFAnSj%PumQJ>1Xjvqo?bxxf_hl}$}3ifytt-t zdH3X$Wr6-dCciOHpUDh9KSibj*u*tbnfy!a-;E^dAdKsO$UkXJ>mOUXZ-y1PQ|bY$zOj2dOrg;GB`b5xDl^ zatZjl1MMR@G(mm)t#w|-xZgk;W$ZD>gT4a{>En`i=iL>0%NuWN(k?gzmqnrDQwRIj z1%vpP#f4M(*FEcl6Gkew0qJpn4eyyO-|zfVePQThj)-T(8@K#mqgVAJ7#^=gXQa){ zVriO86sPKoXL(h>(Cx^$&!Bvg9C7jWCM|#JwOGe|aaG@wRN<+#z#G0~9U;$GW+9lR z(gy2l2ZNz7a<7`g)*zCJPF20CDyuFp(X1DKdo1|)Cd=#Qpzs|t?awDNIN`Df&s`{C<3`yhrQ2jkaxu1q5#MqhV*uaoY$p1<-n zN*&&)?vs}Ytk5pk@iOy~S*?qGC!oDRHGsXrPaNF=lyD z`IkoAz+qkhjsoeLH8voedVDH8X0xkbwnws+-yRPt6Uz@53jJG+Ns$=TA7)6ZIg@Vd zAca{M3(kd5)BTM5L}>y;*?+_vdH1Ces+8S+-nB1Nn;9WpkmFV8qnw1brpMz9KF}bD z1FNP+oxu(k!z9TYRBqV*WGSjCTckQ0#nOEK>>HtQ=97ou;S9{zx%iEXjS0;spQ9Slj?i zgI;YY`i%oFdb?2+yr+v`eKAy#W7vX6=@Wx?ADvj$}DKw^?o;GkhbIAFr>hXLM?ON zxtn|44jm+fzBlW5Nc0+z(%J}!t9N8F^)P8lpg$^;9VQ5RpKwJVNQ`=W3d2&^mdECCP%xsBVtrkr;d^mY%k>gqHyaC@&XRonvVgS)hGu zB<6->$fFvVOjZjf2m3$Qi*Wyr+jPYegwOJe;d)?R-RZl$Wm~#NL&UsLood?$(bR2o zp~v9@fe!z$%(=a%>WM?Q*czE!>bJEF+kaq}h2=${GCiT}34@GsXOi=%{NQKkvtB&! z*4#s;*GMMo{H_Z!YbR**Pjv5|5uqn&Veq|w+EaT9KTG+dBb01p=^K#3M6rJx3|uzX z*M~D4ocD)$IDvgsuTe!Fn}w_yPvBO-!og42zUrL1^U1ql{15AVsZ>AxGPSMWY%DiT z*)oIvzSl3&>+hGcmI&Rx_TQnhyt(AxAq)_0WE^E&4cS-^{jz4ZGtsg^dOBM7Y-UZ^W5h!oBdzDy+&j3 zHi%&eGz=v!OFw`z+R6qcAZk|yDYSaW^*zLQOJBa^w;AFnut=^hgMQzP$_$Ia^c~$r z1=P4yx@X6UqGov}seL)fft*Nh`)Y@1Lp#oEG;XN^4JuA?6A4J(zv#Y!NO$_-6H*VE8n##eQ9u3rz4VX&Z_y%i z1O3mXq5FSo$Ny7w{*O7Z{GZ(Q{})NGtcvUnw>{G8V%R!1?NDh_9eSWPN{-OY8}>hCb6}%-IWm=1`l@%qYE$(W+06+N#3VHUW2R zB)bbS^0vjR?D+jbH>|snoA9QWG@LVBbw|mTo)(+GS~6Zu7uz}QQYHkmirQ}5=Utw1 zm?%nu%f=xFR)f2sACYII0H>l(jB`(HCV!ty^hRK*!$S-v|G*VcQCx;tqYkMn4WrI3 zPt*2-IE#Z$#5hkI*5Y{32U=)1^uFMCAhp}4W>U`=Lnrw7RBtCvpJ>=~Nx;UvuJ(kG zYfM)#XsS}gHr97JeTXPN{5A<}gPiztLSe}hW?c}9`n-fz4-6H3qdM1^_1T%tR`j$0 z>$HJpambC3y~hwEPSFR{9(T($ZBWY|@11)i!b%%QT@i@jp#)%%4!7&d#WzA1jook# zt)Cp-ct6B0B4)#6k0&s;2px4QJ>5w}E;$bO2l?JSZ+fwQ=P-lflLD-Gulkx(8afLq z!;oi){)go1-tR1w@tS2A%cz40vXZh3F}mA4;4=r@K+JzQ){@~0Eu+l^QU*@||`yWBK1$q#eMl_K25?o~?wz@DO?6>0l3<)Slz?Rew-Ty&%NlkQRuZ5Lwf;~eQK z!s<)OvRz4^uaM{YuG+=+0czIZnT6KV#ulMN5iB$Z5r011LUl+)ZHMnRuuQ#adCRew zd^5^*7~ZrcGi0A%6Ev8T6)&vpT2`xG>+@qGLQ?${FL=v&!d0fL?_NYmr@x+8Qt4ck zb?Hb>NN@LnVev?g&vbw(!0=c+87a8zn`g0|v!yV+e%UmCTcM1(Rds;AAIv!xp0i}iv8-)U3oLJ_KNAy)p{`pp zXtvNP=}ARKVUPl>5ps75R_PS?qtDif_%vy6g)`)(1y6E*QH}Gu09PnSI?P^A0ZRYf z#WhPrPRX6n;`KF9^0Vj8YP52pzO*9tIh+Pn_vsXa_Ns)sovO>disOufSC>j_Il1O( zlzi!w-+c~KuM^%5!cJ~A2RqcPX?>h2JPZAJi#EAd#-OojlF!0& zI3b;3x~wf$q3=%rRZZS1v%Dihvj7^p zlMnucr*8rerS~F}sS@Hk8+#NuwAS*v!W4s<&~jz-!+EmVsT?zd{)hTH#(vBXW+ec8 z*G+HmS+s+e9l>z(V5ooSP$vfn0+iTA)L|9nQNI)wu$CL+W-D}<6CIB&Qd&_n0}@G* zi+uWZ%H#19yyPq(HAQo(B2DzBAnVd=y9L|IJRfC;($0%-GufY5(Gt4(Tl(0g1Vh_S zAxe`FRgpdfLMr$-uzlEV-ouEmImXV1A}doW{oFdT-=>(s#9H0>T;Ntm!CC;eMnN7{ z&k>d<{b-%qyl87?EppL^5I!B>0R!IoS@12OMT395CP2~+u@&2a)6Afzy(Rh?VFYY2 zi}Zj9AK5aM5?DaTKF{(mEMU)3dA|SsxrycWTA6*dl?YzBdx;em%0LIHk@^DpsfVYF ziV5STKS06iD4!ve;j(71wsGj}9HnUonsH4tjs5EgB5AuI8jI}dnka$=`a*^Z(1;jz z{HN2a;uG46s_Li0w;ZTymh)$wT&lcSP#9HfK>5Kh4naG_*_M$_wkRWN{>AB(RPdyt z=ikHa>`?viNHVq-Fgz5)zb5Q=m2S0c*G|{B+_2`4vxRz0xcbS}GKmxh`L0^Optm$a zmzJ$8UDqEC`Q@a(L@0ntzyCQGlvh1tZO{=ZPHpY8!SnVx^QB<@rbA#Fu6+JYGqfmW zj-auhV$m1-99BE?G_~g08}5(popBf7P=zE!r?%4;Yv+8}3actUH0D35kDky4Wi;LD zpM-7taA*_V%#VGyhq2S;!nH*e@5ICQx6SyzBjz@Xv<+XTN4SS9TWf!S+9u!MC}c9) zMUr@08re1Uatl85+59*}%$%>zY?3JTo5D+OH|rEGuEg4gWYBXgfm7c9J-*E=zqN=_UL4+571;hhR*?%C_TiJmf4FFq@xBNs(C7ew`eqy&7GeIL&xzKCnog4vX1Q z5JD@1OrqlD=eBk;Zdx9h{}X*iLs`7zzS&H&3+a4@$Ftuho^@u+S2-4vgK%Tkin-jx z#YN)K1~PmcM*;htiM?1MAX_+UL|xLdNkQ<(R8N=2^P)GVl0^b3GDjy%65YobbLk6T ziMi~sZ$N!NZxcu5sAm1LqwzgJ9#Pd{@oELjwtcUqWyqZjo$}%}rYSFn!;cz#f}gI? zt{Gi)TOKZnL4*9D$gY{&y2WrV!mm=)T8DvVcg|0szh>!=iAQWt$;8*yEKYnzXL5kX zG4VXH>f7xxL}$095SE6?*IJ)%btnmbo5)TlJvxp(zJY!g65OK;a8r%-sj+~Yee&>B ze|Rks?K2VzSbc!s7hYbn(fL)}HO ztz#KU20tdM;pL-!ZTmQA?S5IB}>64rz$3H?Ve}-f7pBT za46gNe_WzO$dgI3wF^lSvW-b-u1KmO&Y@*A-K5$_n(yFn#m7 zvH)~vnXjBsLAp+2hG(H1T1swmK=if+5D{m+{_{dI2D-Nw&4-VdBjbHKkf~EqO?WHs zA!X-!nZBmyyw^YXBqGuiVN*3ThlY^yXC$Aj;?@c6NN=n|>3#q?0tkX*c&CQjF-8*& z{GVg-v(=@U#&+~^>W#P?p;*TO_ujGzm>TaJ0T+$+;RtrV2<7#1rInlSmB1Xzzr$mf z;_UV|LuxLUh|llzWEJ;LI!#C?EzkB@m;h=N$8r*w*(h#`cPK9nU@dQ^Gfe0Y zHb>P?}i}p0iZGJ00QeUzRveIKzXro?A@8p#K;!ouvhfSi1@bIKGEw7dhTx= zJRf4tHp@WN1f3sleo7!rk{h%ns6o>q1@@WxvXBE zi`8chCE(xx7%=jFRT_3r}{t`-pHmaCKAQ&j}C>Ze)I z+m;KrCw=QEwsJ~F<^i}$>SQf_ZeQVMndPaxj?j6BoC)8|L#Qc^2T+DT*a+-5#I9la z_~JX4^SNvqY}UX-_Sb<5=m%>O{a%0*Z4hw}Fg`9ngwByEejM0gMazi1B zldahk44ci&E!3~Zr)M$ObV@IAO=o`D@T~K$;`#lhb*r^i|8tYvG)+GUJzBPzyz~(r zRI+I*E8HX=LLwqp|5)8U{DwSoF5P$C8IyP4JTb8RoaOH=aPu((_H+kbaHV`5XUhiA z=%r^LHD?8Hn_*^=${KaQhkKUXluJ-caZRnsjb4s`gKhx&8k1m0nJ-w*{}LoO7NcI5 zE@qM(e{GlF#(&;5SKf<5i?EfOGvR2yiiLQv6eXr0P7CcHX?Y2&s-jKF9hF-oXh~+f z&sD~X^Xx}mQ}8t(bV40{H5kI$3X}-V#UsK8DKo$4WdCdC) zZjDoE3cjvsuBPw{X)S3|dlh=6oqI;EbsfvI5&ZJ|`y*^1M|cENR>%PDr<{~UL6*A9-vzN+eLAn?A9 zx`vQZH7~!NesYEDPY3wbNNI!ZxSKGC!U6LT?y}AcN5J8v-#Q#f5cs^0g%rextb{%O z1;3h2@d5kUj+U3Om*a$n)zA4J8c;H~FO$6bqhV@YBQ@W_oIY)M)oI!A(Vn>-zttuz z#7Kz1mHnsaK43t0-2Q=%+E~pd?!F+~g_RME$Br@bTlM+uISBtze<|isY;fi!@F>9y zj&a2;X~gc_2AXY#w5Fv8D{fdU-XF^P+jLGk$1hyy#xcRwI@eXTZB_MKH{e6NsfoN{ zVk(6%Fr?e&pjPu`r3mD8={U~ME^Y`lr_PiNu=pqGcy&Om|3Bi zDNy1 zH!wV;(&EXWO$aV&n(}I(y{ao6wb8b4<87l)*pP2X#nQLR2j11O?;hG<0y#$}Jc46n zN5}kk8zvrCvZ=P)Td%Fvb&on#fo9~@*7^VV~819j!?A`j^ znDEiH2UpJicUNZ}zPNF-`0QVg7iF7KQ<1+shG7o$>`^gq^Fc&(XVi~Q9r-J(Pq_5_ zS_q%@r*eLKa;!X#q-=p9advvwkopTzBX*;826ppHU(A(rX#VoebcWl#Uh`8}+cZxK zxLQGFw>F{hj^8L(%g|9yj?mQ4S3hqvCfKr@sEOfqGug770$PLY-gzZtrq<(12<$*HLrusqerqcR!kG z`fy@!;ft#pV6@m=Sm9lhw~2JX;lVVs-h#6CVdUnZ%HeH(i#JEtnB)z<<3!LQ<$?=4 zH{D2BH1P1#hgTHWkw)zn;&j}k^6lF|h4NAzBNi-2$2u4KLGWF}478;rS9#DiCQBnj zyfFN4SEvVN>{U9KP2eA7x4T@MU_K_RHd>8(Dd5)>spn2|&o_I5IqMR#7o9BA+&LAw z)J3`hQNzt?v<%39Kz133Bt5l!QC=)BPGRv{(DQwR=-hbWX&hj0c@QQ^=)!!n zQ#a9dWU4LlVxR+vS*F>}o5exBtmxqEf3Ps@yStv5Bjxou_dHN$wYNtGxBrAf8Uh}q z%#)O`2GGXh%?F~)?F(NOLD^<@d8-HhKPg;K)-a4-ykFLQ1nTP^aNTYj>O8mnNq?T*Wi zhNX(66$%Ci-))Fpv#A5MH+{ixkGAfc8@1E+M@lb^D8>YLytn4X3U%7gZ(Oq+_2Z}c zo;Rw`AC24ICzi)`JQTk+oJbNlyA ze+0Dtl*KRCyUL|}U(DO~~QtY0H7qaY9KSZXBz;d3aEdpHuUnc9HySc*gY+GH zZ@Q!0&ad*oQZk9bsd9EPC(Y|@!P%6g-%R1hQMAqe{=PU$kfO<(8MEg}cW}eyREH76 zNSI+YBK(2B?ak9NoiIpoqrZS4@u?WsmmY{*R* zt}7Fqolujy`gkqOTu=bJLZ32Lb&OMn#>vfjePqTOC9QnFI5_0uv?K6keQ(_^> z*^Bybl(x3Ir+m(5rixrm(Ld#!yG+X0?tYb6@N8L;SNxXm4^K|bhzqa2`J8(6Y&D`{ z*W~n<7S45`)hHWRN_|P;hWv$>OS@Io(|yJlHph(VKp|>lG)(>bjk(;f^CiCdKQ9m; zTSBg$y)Zz>;dM0(Svd=EYeSBQ28fSsHuTC*AbHAKqyDnMgP+1TJ^>!v3dYN@_vP2S zTxBwPs~jkT4Dof+;_VQ(*sO9h>b!}0`7+vC&3DLy`cvtej{Af8Q6AyP5ax*Zqv-9O zPBbzzzS_ySr6Ly5Fh4YMwO1UZB*nAsf)9*0A;QFoR4dw$3a6D5f0&3R?>AP z<{1mtdcddO#(Gah?^PdkqqT&NMwy35yVLIER79c9zDbz_p>5xHq6t`hcD_B}5D5_? z3_ZB|#T=Y0Xxd2H;Nb-O#d%*P!{;c8t|O}{(~C0e139sLvXja+aom6}?G>dun3VZ> zn(NYkg0h+mWO#DBrEQ;!H2+?P@NKx%0s`~>eLZbA^CE(DFxD}Vc{^$9xr^`L?kPo{ z?!UPcKMTR1Ywd3(pF$~U+*o8$Z7)e=xzKoAY{;{icVz#%jXb6M4GUTG(L@k#n5gO^EmU3%0)gkXRkmR^3mRzb5IN|XA`?UtLLzn2^a)&2fMwq@-u&zmH3F$LchDtXJ)Z}#ddG^ z&fof-dLeL5*mOT472Avys9x8zBBq3`ty`V{^=*2Jo8Sm&*CR4sz zU5aKx)YZu4GOkNgeG?H&m4|z`pOt#h(qs1OmSj2O9+>2fv{VPjKuKRWr~U?+t>(Gt zYK{M1PPYH@FzA0PJagi2PSEiOvSgV4$<^te_z4p zDc^c(q6`g-4#3fMG6Pdw=hp}5Dw)&JDG9%Mp|`G^2b}MgQ0S0{jBP6)=wge`Xj<@& z-w}cWhMpw{2JIi~v`p-=kM29JvUi#L0^ zMBQl4L%94(ig5q$8_m4~u?+WPTIh<|N)~=I5acggat@D@EZlld?wtx(K=8m8#gH;~ zNL5zK2%I)q8p9tp{?)}qS8KPGCp}t-8NJXN5WIA>YaXzbKza61>C8W-^0Fr;;k;o!Uitu<5py>9ZKmK0;rv$4V0Y*J8P4JSy0v{rFc*bRql7WdXCC}fLL#$Y z2F^rtJZ%@G+Ji&mmWaQj(HFV=&X&hqJ4+WEl+gL&H4}cMc=dq)_uh?@q_q{!M&WPI zHgr!C{YjY1!z8z$*^oQ~T_wqXtlgy+hF@`^+gQS4E7f9PQfYsHJ`40A4!A}M>s3gh z%Tz?`tteaU4lUy{Snzan9u>KcSW;=*?>z4mBhNH0G`MNwgUN{N`G|R|bqDl%%$l>5 zgiM-7*X30p>E*|NrLCWN(PZrloQ=ACE~+BS2|Go!DjHMjAz6 zx6Y?-1VOjX`7Z8q;QHB#f1+ThHs@KRCW}VbWG00=bFO{5bm|wnHd_Wgziql>&;DfF z@Xh0+^~PWg>?-Cc{@Fzoz~fcXlfl z{dlx-+8JfWq*TZLP=n$AJcySg_SdfeLdFfI?ieoOmiI|Sf_^d8&A$_BhR<#brtH#b zp#Qm=$_n=n@JG8}wwu~a&RoRol;bMru@?QGEerzYE8b)k=+i^6nr_BcTJ`bbD;Fgj zhGhm{T@*~j3ii{@jQNmhi{# zl~sH1CbZJmdlP!Nb;w&M9-7hJ60ex__ltk=Sn^kU1S+j?BI8(3)!WvI=aL$5i!qn5+vYotJF0f`hX-_;SvF1) zL6Y}fLv|n%sOEvA!J7}^^ASByAr@0W^Qn@;4!%UqSs>%6kMusx+WO`D2+eL%ap}OnTj1rOz z9;iqQjrf}DlusY5njK=&_mm5p$BZ*iP;i@7ayZ`cB=|9Q*@Me zz>fF*{b^ZgI5RUJsU*7#rd36s8znPCup21x1v@5Cynr!hT}H$#09LcbcjWwwv`I_q ztVp-xop>)R9^&RrSfRU=YLw>I>hLC|o>DRtd(*Zo%`~ za7$rY2;KWl`pibpnf9PYr|GhVQ7BJkT zrQg|jGnD^u_g38A)N*TT3g_y)XTg&5wC^XI4EZ@}x2d%q*9Eb^-()>b(4NUIZ<{bs zVUt(?On?WyHLQm!vxw|9m8ENsV_`h-P0$(R~yZCoM<-^ zgn`Pj6Ed-2)H&y~bOZvP1G`%TrqEyRBc!XO@*$>s|6)t@`=A27fa(D$<8CrU94e$; zj0Um8D_u$VqBrad%Iphd)Q`9fW3A2UK}DXNzF=J}RFD~9vz+Ie>{xp{mtAhfENX$u z9#p!H^`XvPY!MP?5SVoUgmSKmTKiUX{cd3KX%|dsivtZZfP@)7!mdxJb-TO~dBWAKciB^6iza@OIH??u%@9xaeP)1y z4OAc+YV7z*i}xLQLM;j83iCCEwC`umlPez4VRx<1)7W+G^l~3xj>>i~c&3=Aqxd4em4@{AQGX}bz=|YAK zbiow8ouFm2sxdbe zTrZXp)S!JKFHq%BK2*^_v2&%~92FragMJ?-wdz)XqaN%I;{NeX$4~72L*mH74_fULYuz zXpdsy(HyvWW*5s{DE>SZtCz*?5$>PxY@Ka|2%l&BJ|4~ZTWx1%caz6XDcQ|WaWZL} zDzz85|C0&)CxX+B6=$hHME>w^?fZTkw?`xur{E==XPSioLD{eJNni|_xnc+n;+a>> zxaJ~M74Jf-tTUwj6Sa>YIbhh#ZCer*th38|>xPBi#xS3ncjqey|95KPW88+ZY-}3u z*b*E~o-U-KK5mL=ybeoZECj|McsaJ+16#;gl*>q6FW8|i>8_u}JqF!+Y2Y-zy%oWn z_^1k(`#6>*(_lkS#RbY@@Cq27AR$u5iek*hM3p3ww)>pE0!@QORN*`~Q`(6|GHT3s zaxpuJ5FK_*a`TiaS|s@ytLQhR(9qGc*v{-DF7ONRPwDz#8MVFr9v?RbeOPVp`5p>0 zjFh(%&(`l$Yl<7z9zrAHSR9alZGN9^Z(V!+vhuT+kPOqzV&UBA<(K8uAN_fptw#57 zyAF01Fx_xnI2x<~);6ZT(YoRf1-lS1)j5p)%hV0(9oO`wDk=R{5Y$Ns%m@EwM=QqQ zHH}4-5u#%?Y$!1nL*|A8LDPFplkU{u*Zo%+EUtn8&ol(tcjmReDMH;P zTuq+dnk*76mDyc5#gK~(A8&F`;d}10@IfrA_--chiP*&@ww^Jk9MceJmhP)TRmNUc z+n!WUi#E@fL%yUlrfszgnY-t(u-EvhBF9|D-f^D_17gCO1eD>WaTyNzmWaBD5~WjB zYG&iS6u3jD{x~KulE~6|`IpPwLPml&8orY%hCw`xyU0Lip)O%PzQ)g~Dpu0Vs*F|H zDGZeuxZy=3DzSJlu!}v}dFnzwCeQ5>vzIOg+fl8KyNeMCg zPaTfP-+G3k8~~1-jfQ0c3qx1!#+tCrM>)W+1T8}r^DDpIttO+8=iqi+;E|HT=x5uO zJ`=gXfdz9c{%dvOu;aGU6!=Fj`4KcUWFWtrSJ|0&-)zp(>o=mO(arop+A{t>rvLAc zK`fz^=r$ctVc&wEy?If})`)^%_-x-b8Q#`a*OStaajMV+7P4p`OhX;c8-&1rWO)^$ zEUw~yy(rH?COig5$L5AkpfinMtkv3EpZjf4ro&m?Tp)4qIg?ympBax#A?ovafY}8? zDz{*x&dkM)s?E5jg3Lx*oZPe{>(YX%8gm)oYBzYvY~n6NS(KY-5C_Lx1W{wdvT@#n zKqUpb{3CcrUT4swAHKrr=NesjkoigUV1JY*ZEj+QID=dGZW(kgxB3tZp<2!I-yf z)WCYfLAlMN<9K*tL5r_Ii zd{zPD#=3vh60`6Uhxt`fOKXShM%b#5ZgJK<}MIeGFwh zW%(;e#Z|?*jRylgAevdNk<0uG(!6f{l=mpzk zl1qRbF@z+f0{!>(+P>L%I20;~K2)r^vJ)AZ%YGv*RK5&d5x=+7NS3`N5Kz%IjS3U3 zV>Q@U&9Meu!4zh>7&cW(e*21Dm>L6T-={6Ep>0q^?BiIcxPuIK76|fpMV=FqKETx( zU+6#3x zfa5!)VkVxdJ0bRTcTB%&lxM|Ap@rwtF8RhP->lZTuz1tpXtvGm z1#`oYVAVfmFhkaK(LTuyv0@+4QAmoZb;*}pXjMBGMyUSM7B+mb!n)*y(=a+@h!C_K zB6zR;EYL$31RlNJx2H6Y?_*e3?7DYy~z2a-q-QWuNpPO;}T9; zi>VVE9A+}62}NIFAES^MA%H^+Yw2)QA?@-{pHA7D^#qiDpd2zI;`MT=IZ>dh2L!GJ zGw)}g7Q&n2$O5uW*n3ys5K$cbL*(tl-OnNgK`lR6wNT>$HQh5&V<2!zRlWYoNf3{B z@e_F4@(1*G_{pgW-HCn*?^>z-uBRE%j#9nxooV88w7Cpy+$HF-hGE93UWMJ}uSsD= z2}jEV`JcG;s)qc*-PPB2{0l^zVq@9!mp&zE8w~vX=3!>0?39KFN_hZP@@9n(#eGZ$ zlx1(ExB&-~G(s@<$kGYQq@}D3plPEGQXJLbaKR9T ze{mLu(CMsIPFh$;rP2(kA|~~L^q4c?J%^xp+kr=_WSy89@vmEF%$NhV7C0_()6a)` zr^fsjG``R!UCprR?$Zau`ZeN+U(+#S5}aXSsjG`D&Di}63k+j5jsYDk#1m;?2C#g>)CtQELKVUSO zZIAC}eHd*v1EJ?#0^EF<|k|~C;_rwO=|-D;b4F9a7`^h=&%R(dsyJ+jrDZ^a%g?K z*F*ivtn=Y~)a7#m9Q>&Maj-&lC8b(YeJXo9fl0&{Re4o;!Ih&w+5%_r`pxf z{+2?fcUWYNcPdWg3wK#ugzm_7)SOvby3lon$wK=$3uw*d%7qtYV;~qlH9dd>V{cyH zNY?e=qF*ok#T|pnO4H4fBV_%eCr>-2ov%58u7~?lQm@;ghu;lJi4yqDQx6K%-rP|C zwj9oue3La;^nHLP;8e1f3hftav^Y3j+WAG#5+E42m%sOJA2iWuNiCP{tiDvPio_xN z#WIjBAaHALb7R#7T;op|P54n2oR^kg{SJi`0GySO1#{vT z{^=7kga-7JBXIL2vSLu0Ng|?UW`PHDk+h+2I}h(pk%RDh(&m=d*DXHnTioi;E?Z50 zk&gU=iIqoFB_A~IT6SZ%+1e(*-le6ur>dL(g8v3%`0%?(u~!_s?inq&0dJq znD_iMN0uuz)+;vl>q6?dKXOt)gI-HM3#CS!SwIo<&(~K_BY(`)$1K`pafjW%oFxsJ zvFDKT@RnF;hjW_ENkYRb#@>;j&8T9{k=euF3C!za-}}D;e2nbeNB;cGE3)GFCot)C z2UDNV&AvwdQhez&@5u^8|HRe$>!};Z?>G+(zz?x&56c+`lY8#ZCwD%JH%Px}o@pro z{Uv7{FR+Bsue!8_Xk2wmQ}$@edcc&WrDpvQTBBpQ>AS7OrVSJf*m${4;xWqloj*Jm z7`>2AuM4|apFM5}CVwV|{j&JvO_Wj7LH%0au++;lp3wxml0iT2Jrz<5zduJ-cyap5 zmMOP|ijwc52vT{gM3Ed19onX)Qb# zFXgF^I6d@)$Mg;LVIq160YZTCiamlf&l&fW-ct%bP`?ql?$oG1su0BUiXJWvsHWsY zuF|um@E;jI6T_97ht3i~01Cw`k!2-T z8TUV-%Bu5KT*rlPhRhFGT-l$WmkPXnaC=-?Xm3pU^h90BYThsV@Ep>V+rLGo6KGS3dBW(GiYrH*XY~uAJZ{%*V414Um;0)kZ+Fgy9T8fbN zPZ9oL8>c-yFp(a%VeYoR(#z1pR>Q=j1DLYZPV^~tdO4tKa3^(<{f?NGJ*xO-xy|>q zAEC21lAqn3d+{3U%4eAEh0j#7P)2PPhIz7f-Z;bZw#6?gKbE6$cx3L5Rx*&qQfA75A+3>4;JzE30Fc2l3xXNk}jhreir;R|WMxOLU7#6&OF z!H98L9cX+a#L_iK4ORg=b0=+41a!rHr`k=qf5B2jqNmq>UK39O(V(~Bg3nK95q^xj zRUU;)a9`vd7bZ*$EWr>-pj94ThFe0+=`E&a%9og)Or0ykxdm?K)wh%&Irw>kGY=pL z4n`zv&-mOZa*#N3qyaf+h8BB_JF)1|hh6@lCC=;vc!oF}6Uk3=Frz#_$M?@Wp4C4c zkQ?t$>;~q4e4LTY%Wc_s(}bSC)cAJWwwe3fS1So6j=pOv?zR=oBj=5!61SU^yc7T( zMvEqm3N(ip#}-qA3z&Ntq}KV+HJ@+lQ&i0==B%CRKw>Oz{!N1N-CO)87XP}W9PILZ z?giLDM}Ns!r9z!;efv;nAg=Tw^CCLP-^XazfAhD0{zZX6`FcF`;(6A1R{!Cg2*IGP zV)G9)o@WzY!^Nm)`Z%X=9!_1s002-zZP4d-5(X72tP2>B8AG@2Zl(O)P=yw<7iWec5={-LIU2b@GVRqY+G) z_g^y%mFTNJ+1%TAWV$Szmc{t=Ap`^QF$tE1g8dH5i+WKwR=fdeAn4zHv9&YanMlu$ z?{G(mT>pe6^Rzvyudid>X0{EWpBT1p()M|_RiYBu_@lI&=S|j75056#?6SvU${Oxr zJ_)5b-A@jJlFl&ps$Ze+1J+>?Zj9?xTQNbzs=#Wqs^Y~d6-VaN7OY&N*Qr*^TmTPn z_>#WSwH*-4UH)52K0mAsioNW{S9CWDI|`g08UCmkcCff`$9$QVp}IK(zoIkfoGYs6 z4AtKSLSKSwcW$)@KcE9X4MYC9cLenmg3!sPXYAX+*M~{_^(+G<(1gMW^I!WhtPx3o zdlay84;W@?Z4v$ju^lvhqv6-1RpW9S?~PRBHN1=#B6p^&0^MITo=|x&P=7h3TehB7 z$v!`Y`4Qx{dGMK379#fhP;eJhk;FUQgQMNxH;)f!g#5PQXBhg)6MP~3BcS8#(X>&x z&ZYhOb*SLGgDFbL#%h*_JHNPw^-R#omNXsWFAVeqv?QUq?$=6<@CEhPD z+FKeL;0Ld=;J%>SzfP#xOrK^Y5RO6`Gb+%XDia3^N7U0McocF^JR~I7H%$yk8Hz!) z$5Ox4&a_D|6DET7LxKEA&iV9l{MMAlYWNAH`&xRzpXEBYBjpecy?;3&&;3^CI*dXt z$lfl#yRpXT>eN`>l43986;ULu%N$Bc$_IihbzC}JMkEeE`Bq8^hS=eNnrsX0YH1CJ zea3|yWaO$*u2DMc5>NMRWko-!g5>Y5VLc%hWyY@f^I%98qqIiU;rqam6FqM&W;M}U zD}A3kM5NM9bEztM|B`393Kz@6>#!)AaO z&!-f8N-lva_G7%Mm|fke7MWE-6BoVBC+rmHc+|V!Rpa4QCh?`ELLqEU_)L8p=;H1b zybpwWbex_&T>D`Nb*K$!EPl3QF$na4F;9!-WqJ3>m@SQQCgo!a!mvDo?A=H-!kqG{ z+O)#_;|AjyXs_bIUarrLGarajOF#K}g1#v8^&d?P$bUfvxSbhRrxs$e$wW=&tSZZB z)fp@3&VmPX(2#Hd^zBkJ@9F{uzpcl&N{FDxJt@r5C;k~1@EYejWM*d@Zs|M`@o0Qz zsUNXp&&$w|fR?Xd%wRniPwmuA6FMAd;BBk`q$a#k0&E#N3@)TeSbmT?Fh2`+Hj0$y z|7A2$5aO!2QaQ7X*YCj?r46f3%=1Ahr<2w3A@t(z98(CuFrKZxZYUQOE@3!1z5V$2 zh;t*DK^~&~jx4D(2q7FsGGHcp!;kb03Pl%zV(HlL!# zeK*tH9|;wH9uYpZH&s_yb9tMNv6;&ZK&t}aP68pdUCKvzyr!Ecb26HKVAP>jk#}8F z?YBDB`MQY#q9i>v+GZ2_aj=)EJ_a{+bZao#i$1r^PWSo-cUJ zGU~^kK8rpzOyVMP$AlZyhaI&$hII$)=`qAoCCJv}XsGWHQgjz4(v>PDR`_sbLYJ=Q zek0pz-QuRF@|ktraYD`=A9s<5sAyo&M3?0T24EY%PK zX*0LVhTmL<=X6Xf*yiWaGxb1`!Lebo{xFG^BRcH!jA%!WyTeBYFGFv~)PvLmQF$KK z6KmAq&n8tS0ACXOLloz-2!nX7YJ<^4v;;FCbA2!Qd%i5F#+X`*3>IehMWMMbL97&` z$n62B>;I;i$aXU~Lm39RY2mPGX-C`3W^4QII$_3MS3O9!HFFB|hi8M1kTo4@JA7D{ z;dai;RWsssiTiG?13ad7g>6%!Z@;L7R4R6R1HQ!5KeKR)73$2(3eyNLhP^)|lKSBb z`VUM2*`6gDRhJno>N|p?cK%|`1emdpe5JP*nB@T+hFRr$GEF?CcTvE;YeIW(ua)WR^g;DP%o8o>btKOv>86?0jlz299(bojaON#3@8zYJ~q_a1X&dlj6t7xQGx zvdeygr>;97?9Pu!Te0!v&Q;&8JAuq|=74&Q$A$^X=CHa4D&Fo4JB~x=50|@G4}9Q+ z{k~#?*y!gk`!0qI*uP%cgd3%&^_Dhw?HOT) z4*}pEb5hi@#;R@g0WDT#Xz69h=F{_ek~>Fg4Mu2ZAobb5`{UPm^@!o%FFkQ!IG7E< zLEz}ISU}(A_VIa*Wjzf|(};PTZO`lv+uaKnU)osb5k4-VQeWAJ2TZZ{AzS%5SkeBs zX`kVWpEY8&VD!YlAJ*$d!X>%B7Bo#-^$d>}{=)-hyEVD;7E$GzRy_>v46xIn95ix6 z17&s_*p=z{K(!$2P$PDB5gYN_!?kg7bLH{CEZLh5`CT}%c(44*qK)bosnX9*f_qE- zQILwEE$-{$Z$-HxP^SsO?VnqTISe`bx-**0ihbHA2w!HN@?}9n=J_5%^2Ti_uT>pr ztY-$7X&&tYXV%B`>{bpl*8?pQ1K9RrBH7BEEce#L#$RCFbBsjYoN2$OAB`t>Jk9on zRePLjhXE+JX4|3Mdv$%eX4;>FD4YyCEj)uR^pj>{tn&EY_N2&MRb16~A8t2FDP@AD z+%H|FyRaPKlfQO#G{MzFlv=?&^B3GD6We&5GlJt}kRWZZBdW5%bnMrrG_?Ne?xhh3 z=)_{-28kVdq<=1WIH*bhN8=3P3EBbOaBVPZbaVNW@^6X%Jb)P6@m7LQ^MUyXKWT{4a{xc`ro~5MKsgjs&vC!Phq_D=-(#s{@2j6w|Ifa>4-=cP~?p2QAk*lPD zKV|^4Z}wHz-Lp%ML#LF6(b^HHDW8Q-SY1-Ccf|y#Q~%c3VR05kPI8l*c4rYSw?v+% z#xF$-o2a>q2CT$k*bkPDvAd=FHgi$Z(~jIeM&Yw!2Aq6BMv(_}TuXK_ zf8)!l1_79dOZWKsw9IYk7~zHA?52usu~2JH9)Iju}4Cm zfJDQ0CMuJeEQ3ynDXez{#W&Z0W_IQ&#nbr@J!T8lA>vQc%APSku$0I0yqsrujL%6TSOBg4l1T%!p zMVj!aUU7!@%CCGt&^*UfOIf#rsYiQtF`;!xRnIz616PzS4M$fBD>rMbHpV^pMJNnEAV4Z)g zNZWBo#fSla>f;d3eNlUrP+KuoY*yXJH@vN6Pqpcx*XO~#+et~;8Yz}2jXP<++3>7i zjzI1|I;upcYIu=|Vo?NR+}a^`mBg48JiGI$8`{F6v+wY|<#5^P66+k!ZOg*vlj_8m zP}lNx^p_Q%uL!^le9j@2Lilu;6E@Ss%#R}%KnJ+%@BGA|TB!xbPnFqnYN)m3 z&FyOyc-E=4@5Q!qWKM=EZ52%+==bN$4_mCCh06gLW7!rTgU^;4&W*gYae^N0FH0jh+M~KW!=KCw&EVFqO|0%ys z%!ytkvKoYz2qQD*zcw4pK)xx0FZBSh2Gad>vcM!Lw)al2A673PtBn# zc`x^lFo?`-d^J~ae(^gh7kAFJ#^#vF>=cjgFR#P|4^jj8w!6}FV-0h6!m%Sq^U7Z{ z*-i(galzwFTVV^=%{*{4;9xb9l|`hIykj4Aoc9^pvQ183Miq9n(M$V4 zFpI1`bgn%1KHB|8b2)1GuIu;PB8SjqcP_KhU2=<*rVZ!L*#a;iQMI0)+ao~)Yvw~ z`oSg#0zKuq&DhJbE2>1O@-jI`KQ&5m-y=aOP~HF?*i>v@E<^OCJ6>D*is(%=UwKB1 zIP!Aa*Z^%vJ6VEGIDp%Cz%{X`05cBOe)>&w?>-K zQ&;rCSKS1E%R036COQ6?j0UW{>?f)f$f87w$#g?&OAgJUH*6CY%)7{v>Y4|)3Vt=^oD`WaXC}b%&^(dOrchE2kXLI~R}N`sX(1A_JTcI}AUmw$E%7?KhvwYH2jE z8b77~N?(t`R3#7!SQGwby!# zR4M~XMDOf`FZ6@6=ME&75P{8l1wf}kj7WYwbZV_@p?G_XMTO6EnOEo{cLDl@erdf2 zvYK_fC!?5E7reBqIHbMVu;wN~H z=%ebYhUcQNEqh?b&gWIODrJ6FgyP;nzU7Ug74s$0sfO?LGTj!^EBEZ%Lg7ZmwAPTN zH2*)leY@TOUu?ds{|X}eu&!>3do^)2l_X@2P4~X(v&0j_t8hi?;fj9x9lEHaeR%Lx z2cB=(D@6IFlkY`&CrjL14M|M>++_7xr2;ZQ^P8*e#=(yN<^-|wui|!u>Iq^EZdHUS zD_Voufyr=cZ!PcwvxIxkS~Rw$usdt3-?|ty*0oJx zeNMD~joY7Mwv`&8CU@Q|fFhh0-gFLtKiI7`Z+qfho}5m9-Ro(vPe~hjWZK?~Z79nN z4B*qJ=L|d47Ay2=oH=a?X)+Dq@?O6j_de|*4F zQbziubu)EyR^nc+M)k#Go8j~!AsFtejvVTE?RHgqZ}#Z#<%cr7RFZ{Ez!<{)dl{sT+_mv zgt(ORIzXFaa8xAXj6rOwq!`s-*4*rDI7E4!$sCY1^k~L}*?a`(D%$bZH}_ymc*)&! zRJmLC^lRAM96cDuf8i$kprq;uD0Bi-)(~X&rVl00txlw=_-;ANjfhfcp!hFYq$jV0-xCv zbGH(y&M6e^u>pQ%uT3v@Lihgy)BKMekl*#}jeOP5cWA{A3nYHL(_To54k& zvf#=+L2JjDr77ZPLc)%^xWN&WBzuU1Aa>Qj+mAhtAqL*{(+#KThu6FP3lfLw?~S%| zrbCaAid?F)kwjC^`zeZp=j99>yxr#A&Chj!v&J;87(pY+UnLB0GQg6#O1E7cEi4_i zA`rQ%1XdAzt*AhN(Sy+miHs#=ubC1_k9jTxJC%aRcVznbe%&wlMx3`u=556oT90Fn zTCKxRXU*|wJo=R!d_|y!+_!~Ex_nu}shXUzfh#8PM&5HS}HqE z4f!d^J}1O{HmpT^sP zFAH5xEM{{_O9PDKkOy^i_e?porT2))kHhV9)tK|ORucu5$jjLbmGnS%WnyY|?A6*W z)>A~T%=qS?wP9U&muJfNGuUm!E;h))SbDlchQ`@^ak;9)DJyNCli9Rx(mLdRV#1|m5d#%es51^u$~vQ5&(mZ zU+F0go(fNpZkW$~|FyZ#^S zQuALvc~r)pOFqBE{%yl!D|{6o(@2-cW5+x)yl6V{cp~!fzvto5|NGPXA%9MKK5OBs zptCeYq`_x*WPj}Q!4Ou-h)46R)b`bcwe0{2(7S&Z=Fe79Bk;Kq%_Wq6Pt&yh`bEuNpzGXh z&BE_nD*@|QPa2l|L?}7vUHb39o)@U;9`dUj&RR1Z0SF^^>t1mt9Nh1&KAKtYl65_J zp*K`3EE2lR=5E$-#eA7l1Yb5ZF2*DjZ%7<(J(Ip;^n zD0>3Syw&Ld4X1iS7R|_tpYwAqzI!K!l<$Fxd-QU;{6YNzxNNY-Mj9q?(2H? z^Kr>so=Ge0)dugdxUi}#x7q^~cog%VL@DfB$sS7O)@APhlb29Tw^#eCgEo6BboK`J zLsFa>vX%xLEbf%dm@nx*sU-xhUzL$cjNSUAWHk9ri4Ilrj?`?aZ;&QlEn<&tT!}#m zXRxB$ueT^zucy1kq7=HsjAjnhdc{ss_kYHbs0-|OlS|pFn!hg)S{qy!{8}?BKTt^s zoJo8tn{psqZaJ8KRtv;sfibZUAI$W<%rtvz&XYkUCoX^ot=W%ixBtXlVUxAiT=jYI zCSA~b_jSlm(w@*GW!{R;d|)||Z7u8itMZQ_$Jh%7FarbYwWaSXf%PL&$CJ zw*L^TOZY(}!|ZyT+*#g*HFMzjD^H(%jdkLjbnAnkFg6C? zkLsQCJG+0V{E<408$vhW)|XinANcaplFwZYM7I}NC6?@kE?z-$RY~Wew>xSPj~qPM zwE;g($AsUpW%%w~4gz|54TVaHSvt-e81YNFLGFL8f*wTB5VX#zO)dpZ-TrKnjKa)% zeJTzoj&6^Q?6??2Yr|BnJ0@Bi+@_0+y)s z>EHYSYVs{K`yb5bKYzrpv8JK4*X1?ujU0A4Z>Tu4{#)zflEO?9%6}__X3N~CU>S*B zx=!W1QTmr`tm(a0*?auT5+Mw1yq0L4=^SF3pQ*(Ctvi4Wif%0Z#EB??Znyye zwM{`KQHb8Po$=jx51+_0fwc(<#*E=yVk|G4h77==_;(+~icM%Z{r%uS(1q+~Tpj#- z;r}{cfmX%XRyO0T!#7G@0VXwEmA%(f@v3d`fEHhouqSytYP0F-0&SCgMCT*(8}_VCn%@Teie;K-yn?3eYv%@P1W8) zRhRrdIGy7hZjoOZMsj8`?ZWKU=(NgNDD2k{{J!WKCHdQ7^!Y|K#;X0oW9k zOij!>btW{*X~6%?#wiKgfB6$)Ko#j#^;@qQlesnA)5EWk_wnQD;38XpKY;!MF2jS9 z=z;g8gWlZ%Q!^~JMV&SRHZFlK3*&u18`4Lb#6T~;pWe^?Q~5VixDKj%Y}O@0Wlz7! z8syO_y4~1OLyuCO{K>;9`Rwo3|6bsro(PPL16R73La2O+)+V4y06#??bn~x5pUtvkVf5q zXFvZUFk)A#O*VKA^*nlK#sla;kM{+OMCgx~fUL^K+JAtI&X}mbD+YZr1MMJFs0E_3 z6h)uMM#+{cvtKd4JX&OvZf&cd^SB^!$-A&h440|eqxb)`hN^>zkr1W06W3^d2U313pfNI z=XlIsSO7Uv_J0jA{##f9MF5;3z$##aI==qu%zt`Z^tkq@&I70@Enf-ZWgh#Yp+G_C&v7*{kL|EUxgX;ujqI@_dll`05@{V zAX*^k)(7Ba>LjTc{(EbJK=-WHm}Yqr7@C#E6CN!_>wjN5HvK@aj+_RD6IJry(KGzt zzW^UhU1|G+`&n!P*D8qIiztX}z!re#dz2}a*#~2bVrLP$B$_7@&lBmyJ@;VNmu#;& zxqFOJ%X-381LW#{S9I<`f#7x+E2kVY>$;21L9D7+OjpJ_KGz2<@2j(eW@h6_qp@+P z@n{t-*^NAm*azjS?O$63BhT!U3^8%xDlP#9F~yoMrw@`HbxyMubd}D2+?&u{qf^<8 z%KvKktocG)Br+z~oY9Mq7X5|JVXM5M@5(NGlFJB!qODYxt_1-GYY+Iu+^ZK zo`dd>_DZ)`=&6x|(ih6bOv5{JCPr=|rw&GSvLZQQ55lF%aBno;WV-`n-In{waA{Wmce3_W*D~C!bS5E~msh zw&Sn16CvvK(tGQF0QE<4iVCPSGFk%K`owBwHj#QTa#O8-|6S|$1EM$ETWBIG9|e=% zFBkPxP$dWK>s?Uz;NWe1FSP}RE_^`b99Y*^-1f_XOhW{Am%%I~R~7C37c*@s4a|SS zfifdQqds_iP_7#=Ff42{`F8OzhNiP^*|G{QpPFTCd7Tt2RQ2n@oX<+ob||~jFIE4l z&6?|9wLw+&4l0|y1f^Q&gNFCNeJ>MW^ei61_*T0m%n_z66k<|^ZV2g}IeqNr^yD-s<;d+OHb+a01wa+-S^n3cmk^~PNqOPp)3UXjw{nqdE- zS^!1i0eGB+bZmO{QgF|11aYn47`xuWY7bC2@wwW8nE7{OQN!0k0y>tr`bk_FO02wD z&+$Qd!$NS38TtXhHtwRZ!aH-z|wbY3eX{sbeC>_a5DQKT%J6z)}d&P zQ|K?t)V-(f^N;3pP_ZcnNH~^@HCOf-yTjh!*LT;}4#$CAnVnV0s6MHM_&{BWY%H^_ zM=g*tyt7@bDuO$50^K8hnY&xqIa{o6p-UA!#{`wU6sBZ%-tx;iMICI$zdMbL1<-QM zbpo1#_|o){RaL1g)iMgx6Rd9exw&V8D~eh5s)~#v2RFiPT5tnI08SLO9NZJ`--rJ1 z3V<511hc;nwAjUa0D&ufY*l)@%wwu2gz>Y2to*(n68d zXFP|n_mFur2s!kQe1#DNSM$+D-jT1c9-3m);H=-O(HG=mzV;Pq?7cS)*^^shD_#;L zRG?5xu72+D+q~>olob`fpxRky-fTGM?*>sl3yzftluLHA>yhkeHYe-oD;rre9e8@j zza|R!7&WW|s^tS#={p-_sMo++qD-X55sVCd><^#Wfc|+!SIYcyRJr2`ZXKyV!}e%A zhu41Dj%qID8JqyDyf_5|X)yh^^@MfP=)eG5%*II2-lqz&YNA#B%nqWHy~GMJ4xD_x zLSE?0K6f*jb*VJh!=T##$E)HJ;>bbFYW z(8htqT$pmBJg9I&4gd6n4GWgxE#;*gx2Z3*my}{nXVEVwDi=COeg4k2|7&15amS)6 z{Mfs8nsLc7*y=I0@e$}|R>85G$-5T<>B|q(<9HoyZYSlWTtv$U+JwG1)Fhmh)#N#K z;fm&+&qsW&dLk(W8E$Ogslk`)6@7$Kzr&b*)O5QjPjW`71J{cet~*u54mgRjMb@5Y z?@(i+_&BF5psQ}@=5B?NMuQAZLa6oGc1r)9=C5EdtagSqF8=D_mqe5gkK}n$X}Q;R zD>3xPcc+W=%C6tM=^BMXBEOt$aY#cyHNw zJxw2{>BcT_n{$_DiUrt@kHF6qIY6?))QwJG%ML)H!++(^MAE@Ps+p|&5S9J^_GFgd zB5IkXz$gP!f!>kC52kWsBp(ZM*HnNTdY%iaxBkra3bPyV3mUKQQ&0?G3*$XIRu}Tj zV;m_pwXIkDbbZ9mHDe&zKXs?)x~THah@Xg!a2kaWV0p{ilPGdHLtU-5r6QyH{?VA$ z7cX7_^CTw3t!ETstqY_o(pj}Fl6=t=KdphaE{6BrJ^4I@=y4gc#Rr<^4B8 z6D(HxZ`0esysvXg>JU_89eir&wH4$Fdp}CYbNIb5VxT#DskIyHL*CGAjgUJZI&Rgd zDT)e?B+cOq3nH{+7Xknr{}x>Dh{hkmG96sB@AH=LHVSuElF@#bcW$=Vsa0vQbBY%q zf>IQ%16VR(+l4!%orQ*EiW*C6`@Lmppp@xSn$ps*G6EwPt;7K!bPnTEhyM@zng`Bk zQB(HXnI0pJg3A2;15?8l6WzN)jV+&QYrD9b8lZ(n$R8Bnhg=!(!)r#5x#AX@m3+Q& zUaGD_1%s7`P84_(v(>LGmwp-@3AY;XE5X`xv-?vIO<}PTci|WMqUf4@j^|bW+p3Ni z5Oqs>uh#&q;exFY_%s(DRlRbV2$rEPMGQo;B7f6^x-}|@r0MM1)-=eOW zVJYR?uCEIPJ^^P0KJ8W>)gYDu%j~4*?F5kD$8gIOLBZUXk61as%$g9(8;Vs;q#7Pk zAQNm=v*!MP_s>i1L)`%t9=9V-kA@eAu1fp4WuPO~iO)|>B9hC**2}9ql{1vJ-AZh* zNvY6ikCQV$PsFEZKm7GX{6C5Zpd+4T9@}Hc{c62tMzlvYB#PwGS7(nKkIA1nmk*(E)GdO?cMHAW%GDo(O>EZc*AY0 z$002{FUANvB{s^}EgG+RGXt80TXtYvv4XUD`~Ts4NI>Ie|J_>H#`#AnBFzJ0R1=ES zBYJreD;=xDw||w9Z0+m}Rf|np0LEfie+uBL1-)9Af7$nYx-(IVC z0<5EB@S_VX%G=Mcmi-|^G70TZe@=*((zDK;!^XD`}n<0tH))~zl4}?3u8Z3} zSpZe(0M2FXo%M+0D*bb|205*P9~^vX7J~7jZiwZ00TRwBKV-2@ZkGnJZez!Itt)Kh zY$$D|TGQuRK>@#tQ`8V@>gpSdmP@eC>(|X_e=U(BaRJD0E7MRx9G_GI_>p^G%@M+|6%v-h|XmJko6bE`f7zE-lZRw zta(w@8|kCP@vJQ-!h!eYjv3$ESDg(WXn-A5==#z>%$Zm`y*!Q{LJJP~$N@ZWjKC?V z)M1#d@zE7vmBYm0;XBKi6(-==WIr1qCeB?BUjX(lFu`aPeYclTwvTi;_GlxvvcKTQ z;g9X*&c13nnF@!q2z7}-z#(9t*uRjS%BCf{y#?>Mnsi1!TAVxdv>+;)i(hDO(xo<= zr=+r;iUqhMw8?2J!FpVYX1>z!PMlMzB~Iz`F-8=s*zvZt{wGt~eebod-!kM1BT2&~ zyRn`r9zNs!luErOqn30@0dAQT!1#+tLBj|*cK*^|ekR1l!CBTlFb0|T*sjn(%^X5ltb(SSG zinWCj5svVSBv+OnDQNONSx|^GIZ!62n^(iVrnV64pX%IbVm;O2Si z1deFCeKxRQmICc7seOV8qy>()$b0~uScTDsrX|ek*v_;y*jS@8iq71TRtR^#mK~yG z2@I_Hhz>!CwT97(g;e#8zQ(?&VVgo>oQ{NPY+wVDu)A5Y*%93rRpaea4skLP@23mv zOFh|Fa_5h>tx=v$HT?K3N`@O~S#fHj2{zL}1k3yEdQ^unWEj$zu^+j+X(EVSLz&ZC zu1z>BQ#EAPbWJR16;~;S3$L?ON}f*jXA@B zDyTlwS*@06bzI<1x-mon1cAkHvuk|qKEcYCH1<;PV7{0WNMU>ld+dz)Ixzh(I;6w9 zLqjQdj6vC8O}*Npm-;xh;xJey({gQc}$-&P>X27UiXO| z0mkEuD@ro=hMB-cL6r|+Ij2@93Db=AG1}U1;w&ro>I;MFc2Eo=XWF2Wy;2YCto(lg zbXra$9l~OWKOv2V%x(DP8+DNjLPRZ+SVqvc#;4T$N0*)EM7QZ z)H^(vR#?UpHKwkx-i%gzC309)AbgzedVRiU-x1NrlR$DFn$nKVQKjpv{<}%%z37(W zre4ja%|f0%x$18$^Uufdp+4=Nm@$sAHAejq(YCcCcrD-g52u?ph4$Xr|6?_dDj_#- zD0jYV5lwy9#-n5;t|$PaTwhrNw(yMad_BFl^uYU$Oq>eY0x0vt1M?Q6R=_2?T)n~C zAH~YO=w|GtHUKIDhbAu6(;eF)yki+8p-&}&^jrLt_S+K&Rv5-Z-MKM#)61c!w@r<#$)|TT6O+P+yU!Oz9Plfz!UKRa*uxc64f@aMyfkB611;7@6 z&L7(B#GFIt@({Y4V5I3U_0z#;dEXlY;b~j@GX`jt<6o`106TuhE)2F}qD^UG)meGK zm~E0U$U=PBcB2Nf&tYt z|GRoeBE^wR=_@!5)IDXjU#F?MN;b}GQ^v(HScVpSFMf^!ES6%5^8QHrQi0H~P9VC- zRmm$P z9#}i34HnWjsyl>%Rcd;)sJb_5w*FZ!ShnVCDh}*6uUB7Toyz(NnGF+s!LQzw`ox^; zSI%Yxz<6PjPCJIPop2VAsi%lx7Ca1y%W}}>;qP_ARtIB?c>%zbOAKg%;AJ34NC2ec zErb)V1mX%Bb`5r@W+Z;Uo3pqMdBGPU!5%xozj|f!60$rai==)BW>4{8_Kv+jRw5!3 z>lx4K@jTO&)aBrcFOUu~f;CG!>_mmkHnm|Q1~vp}pP3cM$Cbwwvtk87l4TqQD3xR8E%C}}JwUD~KoYd-w>QQn7LK-wxIj8%ROcp2-CzFtl!h)eI~Lq! zIjW5_;tJ39a|~_7cX@WoK2P&SU(#QgP^+;0+f>blpT0vc9j2nI0 z+3d?*%h(DEeWTpk=eT3!oEH=zRX({8?T5SZ+IJzHMaj#)D{;tghq`4|wgp%+ajFPv z7-2$9_4yG*+XSn5im^WmTwmdW7S0e@=VomjC%PFkmU0oR+BGit!jt#iBp`+EA>SEb zi+T3_S`AlxkeHG9M1?OWs;YTdKjS&Sa#Np1!k+1kzuZHLZb0hP%(nnROhiQr_`ovh_9}N-x$Yi0f&3De z4RZk0(kugKc!M<$Gbo_M$IbnH1nDZXk%u)_HaEA#!|%5yih9mRvnBx{h{wuOSW_zM zem%rzJQsmF0vT|HtV6x|C)*Mm9utp{Cbi*_mjXVKoyfG=0Y4XTDZ$G#Y-llp>abQ= zJ$5u(P{B7!b@kCyM;m>2vG3^DrdRmo`;qv%-T5x3T20|B*NMjHrYg5grIE}BJH;RI zp+s66U*~f57#EhH(WL>cd16<6L0>?yqi9C^8T18aOt=_@!8>XM`V(+==7=HuN5an* z0ttoaGf9W<7_{Hm>?aRydkmKo_ex8%m|{x71kJo^zxD4!E^snkEKDOauPIIQzI?60@$h-2N^!Rg1 zXRQmfQb-^7Z{$>qK5f`nz$-P7ZXT!1LXtKWJn0xD`)Oq<=>4t8vfCdE7TlIQSoY^X zL{ykC`l;K({`Hi>roCQ0z_jw4$MzMEA_GdWolPt>%x+fo{_fVLCgyJvw=rspw>@DU z$N8eHCbs4}abe6~*t;a}Ys^eZ&$y7XvsN)Fjzb>VJEN{9a=|`?stl9{JRPNI_9p=a zo${&nr)lIle^3V1uLjvY?EKCt8hGpHLu7?X;c!8~8h`I#+G=HU3!-p9Ty#<^@?lGX z*q>QTof9D}uL=!oRis{)p(+f#a9P>Y4VlBNCO+G+w6~#&7s{4%y>gZoZfSc)*jkNL zflNKJsJ)TT6lN_;yF~Gt$BO5>Qoj5gb@ZiY4w0*n%9KKPpX)O#Q-_@)K@moDazO7k zBqCXopDJleBDS8z*E9r0k}BZCx#L+{?>_{Jdp+|RYFbEtXuT0g$|@E9^?hT##UXA$ zmf#Obad4Bqj_)(KT;k!HKq(TfGoD z0T7Q{2Tphp?@udJeyuu*qF|}84gZ3O>f!su+A~{dAo}IlBO_ay6~0i4%|}@{tQHo2 z=6Y6=?X{Z_U+*i6>jER)IS#?LmR4Q;tU*~-LYRx4=CG&|As2#y*U@-8=t4z^`;dOz z)(Ma;uH3HLO@oj7iYIzG=S8w7n`p~I={-nDVA$u6OZ~f}bNwdRCZiyA(t9OzQb0Jq z7V(4_e-X+9#C)9s) z@!rZ(MLqCstunK!h`3DhB9Vi z{xwiHUTxeYvQ=5g9K&2ta(|cHyS|BP_OrNc#pJQD+f8v~Z;?sG)7BELsib!Vj}Yv< ziNJc@I!CdR>Yns~*nDPbZKUIt&c;O1@Dldg5`3XJ6d7T(Sv!xy7)ZKI+albQPWi29 z7c>wq_oKr2wh1QA;|N^){k` zIDIKHYsYs<_HqlZf}=H$aLI7Vin0S zqilPtOUgdgwvD{{apm^T+rAaWy}Y&_tV>9ze*07P_~TkW6WJV+KkX9-rYrK>FK3%$ z?(h9sf#rUt=5xZ)EsTCTTuW*$@Ui)92=>-`ykrhB#KU&;P;?$iV07c{k2<3*p?g@W z6yWM-?0}~UEA+X*NI9FfS7;f3=xo>W8q4x(-VC3XR>ZyQGpm@bgf&klfDQ8=uwhf( zHE+8puVTjFex1!4uDyznSsd)O;3$5U{YR z^-l}J262I18G@5?UAb;1Im$4&@oPnf;?LQ-^-M(ii{XN%H^h}xVRVJ<46JyGcg*TR zUqv31J0$}n9gc@Y4*C0&FA%ieW|Mj+1~3G*>T$~t_U#YBhkkv4%E3h zxUb#il*)6Ss=4OWa#>J$#M9yAGH;+W4w>JtY2H5o0Kpbog7(p(H1$Jd_6(sOcD1It9uI`+r0r+ zW$sRo3{;%EPtA(@RH6aaSe`mBYC`kAX^lARZNB~42aSbg!;XM z=mYuh_I^mz?Q-ln8#Hb#4UpcqbfSOS#%&E(bZ@7pwrE;1<7*9QDd?nmKnJvcRP!lnBomnsunprjb9ire@Ana17_k@0PgSRWrCGoaN^4eWx; zxL{b{d(>i~uK7*zRBY_KwZj|8JBic0SNiLqq*wmNV#}%Ehr;dS_mb~rDzkIIl}#IO zBdFg~+`@=?OYhfg=W%3oY|Yw(iglKOZ+m1kDKJK7QVU23;YgrAKm{kcFBkVR* zw!I>q6%_gYp2Ho=H#@)q2!WCZLSRn3yAEW`i^Cjt%JU4^#iX06*Zlx?)ETw&RLYzD zC4a-?r8I>6jp8qNjJLrU$Yi_tgu}ZKtSqjWv#Dd?ElB-Y%VonfCC7ElLu}<0d@KzB zfMa@-od>;OfT_w7G=~=HT9`#b8asqP-zo|ZghXJmR@3j~xPGAfeA2JWK%PmmjRKOO zc~STVkb!%4Xj5_JRu$5I?z3EID;S$KiJE1fB((+W@Z({i1cas4Y zKK`}sh1!-*_9ptT*+`$0sg`nsan86Py=HcD9FXs&l|(NgmzT?xeeakgpe>)_zU?BM z3_$G$j&`Sx@XJg~VH4do}P*BR#N0bPaNj9Nke2<5ESv($u(sg2<_Etn6 zg?%XrFT2tE{`!|7`w6w-@c71lMKu#8^FR{)Bpn;Hr%C@~z+z zveTis#b$VYwPqSc;8sL__7U2#FS+|{z1;`O2X;Hmht^P&_mS-tZ3EqEgY(}5L$+CK z-rV{?O^&_J7K*#6{dUujxg8frC#p7WuZ#^mj-KY~iX?T3zERcLB|D6cm-;~4;S)c% zEWU;K{1R;TH=2@}+7Qi$b)+|-5?Mb45P$gIlMAY4fIGNhUYyL%rj9PdkuMr}8`exEju>^fpP22kAX({-ld?!Ej;2tztX*R__{k z8U3_oX+r(Fv($5pLcJ#8x3RYS=e&cq^WU#Q0y93Zh$n`nl=>NB$$nT;YE}K4OmoAB zm$U&91z4IG|I9)R_f^e-c>3W5w@p2}unyP6a{(Qjl#l`^HShlLktu88y`gR5_3|Hp z7NvJ!`U@QdGKmhK9u^1SNV7-lTEiAvF?!KPS)alDC7&{}S7)0mOe?%&0Xo5|+RW@w z(hDF_A=HEFMzrc4cQ+;u0P(WuD_ z#2xj9r;CJ}C5dodi<>U7u#kknMmKC_$Gv=8nB0)cLK_Zq{8#YU-$io#eX8d<@bQ~h zS(;jwda!TvV*FB3SA*3km67A38OVgm&DX4Uq5wER-$o{{g-Gw_B=pBS$JOq0IZve{CJTS zV`>5u=xysntN*F~(DQF|d!mX24eN8F^kB>DDOX44M#~2m;~w!^1u_pWgUSW(4>T4# zB>I{TmpeIhF%29|p~AJt=PG@-f`8l_9gmmN#Nh0__ZE=e_ZEt<0kF3D7D|Y{D4#bz z<%FYXG3~2yA+*Cfz!ryz-f{ct%fwr#^FcP8AM5#gb|m^x@y1rb>W}T2guaiZ*q!Ao zz^aOS4sYSxk~}M*<@VlXkF3fCwrd_)V>jaqwcFTzrMY*EJAXb^Gkj!OJ(&=`Y#?pk z_G6yS@@ya}pU^hy+%cWKV3twvh@I&%5w2!Z;HPKnnwpJYS=3*XO742%F4&f}_X*LC z6wY2h9N2R8cyIfH7U3QAVqJyzg^`VT9|w-5L~_J&E$v)rzjahjx1Zsp90iswhSg;A zB%Fb$12$XnFkQdCGvQ_1Wqu=NFF&oM8nq1~g>JDzm=4UDv$|@|k!`|$msx`qp1Ekw-SqO$2>jUQWv1WM-tv(~2_vw?5XdiuMd{e$%YO8rz$$? z)6|<;ds_F8+(V9#$wh0w8Z?)r)GxEy@_q&qj^m}KD3_SLHpA*$Szojym5qM?PD)ud zUNvKGc>pb-_!V-*zZs2&bh>4}dE(cCo7}!D-LkzxFC`k?S-xDgn@7}kseMBu+9$G- zaCGcPZnI z(a+XdIPBNOaj>468_DtPiaOsp0xRjTe6{}8Nao7!BiVHkt%ic_pK9Z`C2fIqcsZ<# z@X4`SyvpdQYTHSfVX}YGQ~xcYvWSf=7z;>DVzWklSp}Wh)(v`I3|Cuc*z-(b*AgHA zT(@okxm;DT(V0ya70Y@docW$vI84y|4}cglNmL7?p5n-pJ-Hivp{zCvUkgbix&oRc z!Mok->KsQ}&tDpo4|XG3%{M+g=Tj)47@Yo$HFxCcSJX~|-6f6io1 zIc3MH3iwrjaQZoa_D^rfGDbXOH;6}D7JE_cO$wD3$OUgYzPM;-|3(gg;Y$k2j(t*x zs)2T0$(aL`=H!w7B7FNo1-5E6Ct}f=^AZNH8J**2_Kt5pH&#^?S&7T>8(7mwuT?%`wCxP_5m!5SX9) zZ`>;J`mGO){f9SQMF_2E*bniU)p3I$wb%)geNtF@_%KV3oWb(3lh&F;`DC{lG)(K= zxEr161IcV;O`-PB!TQHRS)@~%-?sl4-##ua72dI;9{Kj?uD;51f&Kz=T{GW9>T}UZ zvjM;PQnKn}Lg;MsOp#a48hDaU@roy-(Q-5yp|i%J**$INAg0lQ4Bu2RR6wDUhs>)ru+yt^IzRLC8!|7r~ZDq#|k{j2BF_BQC zV7Zk(_Sk#<2<+0UvtBX>28um1ERf|qSK;8}qXvVhUrPQ`j?(QAJfef=&# zp*fyd>MzZ%%;Te`DpgfZQKh_n^Qjs4e!I9_H{%v9pOF1(-WqDj;$itFp@MT%*gatw za7BBuaxKDlcGXU5tV5;Eb*xXj0HJ_MNxUe_$NgMGzdu|cj-o5Ustzw9#Fm@*abkBR zQ3(Kwq27N<9eOdBQzaN765trXJyyFk5Q=8XtP<1ZrrZvB zsWxs2nb>1Ujq$ZPrr5P#+1Bq6Qu%sPTaxRgH@>096<Fn?hpe$0nhd;1faEcX!4oe6@({l&o`q^7Nl(ar4T*!$114 zVtWwnb{!k>r;EO6lMT0!$}z)Dz?^tg^7n;zPUN=+d~Sz}M%lkk-snVUra;;OkAA5C z5KMl!JVc9vS^vTYX~pKLLo*@r8H39}b~QF6`d0+gus7 z`z6U)4*Dn}(A`-?x6coHVlDc@h_W}FYojKp18yh?Gaa@ZDfIu)ozP;>I<#!;fyLFX)eVN}Scrl<$>f{YwH)&i};&Nafsihx| zN8lV#k$;Mi-o~BurF)q0>!B)6>z824?)0vmjm;jHn2A|>Xus&tv2kHW=#60Vcv{;w z9CGwKvrc(&H4vIO=yLyL9N?8@KM-RsM28}{7bN=|8$ViV=}h;kNnNM|kiZ>q9!@>V zH5b^gQN4R?UNplBhf|P_>`-lC_5c9X=&*UafF^ZW;wT$_K0wD%cPObea+J4ESn&s^ zPt;)k%L)-0mI!6KcV)q5cS{fgtTQ z0;@dkpUV6Vg<2^6K2jp&#oX=P!0CUeo9&N*DUjuRCX2LaW@=hJmAgQMtz*Ik5?S+y zeeCT-x2!#x1S#@P4PMixRxhTHy=OS;Lo?29)XDGW%)+hIz2llTSNha2ba^< z@&21_)aBS3c8$`Q`}VWud;+reH3|zM4tLAu6w5_Q9%ttLSY_aY%k-iEQ<;lv{xGlB z^#`k4A6dXhMDi`#T5ZQ$k9U^#E!^gLoxPxvOqK=Z=uiSRz>g>; zblwmE;uI_fVGN-_?6b1(d#0iqCf;$7mY5z50PPc;T?UMi=a%Ptw1q!}<{%$j*qb0uA_ zt}bC7w6|w#Q8zv@Fs|l0nawo2NN^mhv7%`YSfA2oHL~#Dq?z+IKw~Z zmC9f&G>1c>gbarU(X2C%y(A8MwKNB+IzQ-7H~AB}O0ft7BJ1&-H)xBwrbu|Dez)~oqiSy*g0|(pHOs3 zN0u53ydOm~28D_N>)LWcpSibMwLizB{)qMIz*2FrTJQ__t2-haK+zTv~UwN0!?nN#`_ogmS% z?A;!IsC(HH$=NAxpj{j7ZIr9j7j~p}ZPrcKhs!iasp$PfET4v~LppRMgeqKFneY*A zUwz38WJ?kn0aX?BOnoy2g)%Hfie%w-!VmNt$h5jib@1v^v7d}vnyq;WkfX2JUlnG) z$_^@e6bhVAK=5!25S48ZkT?8DQDx>~*d+UoF~aSmj*S~U95q%j4t{CS^!=>vWYLLj z2C7+TmvGII_$0V7Qg-giu32t+W%e`M2K%L1BZbsit0=24=QK}>WNW%5qp8`kGu9@% zdFR>4fI~QAbq!VSWkbEv=jA8MsfhqA=X@>HFl=>Df0(4kDU_Gzugjs6Q00p9`ldI6 zN=avT?@O32#6f}@DBk3L8U2$M+}ak3!?%2gwcxmiP-Fk*ra2wo2O~;fVk^NB$S`P^ zdi4-hAZUkyu^un6e!tWUv+(P+eB|c#iNqE9*akFJP)Staw{_O28v@}SjS~xWW{Mxq zUioJoin{YDr{vefAKpoC1?x`an+}d`z znS1HA|t)INs+F=2%b}4vKzoOHGM8{=*7;Y+0_%o#mqtpDm4nH@^k->Cwaa zQb=lvHsv=0624jgJY8afD(H%40{ya1Y+KuYxbiE{MO9ckey)a^_QxJ^YE1agAl~7O zI+0tJQ~%gD^b{VSr@XH&KyKzky1Jd&dutq82IUlyP#DUTAHHypq7<*>c_-z|!sr*a*Guk~-3OHI{2! zP-p<=9_E#uHy@G}>S)=R}ID zo3}h=QZ_kX%8RJwFeSupoSGh)O6x7HZLo$zvf1^B_uTCu7_ZxJMwM<7ZHNvC!e*#@ zXy^4cJ92fw%n-X%n@~%Zr0IA#$UrYPsb>6oQlN^I@vQtXlK5KKMpYB@?t)Prn z7Vgf8?4jJ1kyo6@eZ{n(+~?^rD|sX}$sy5vwYIl1hOf5UY)L9D3uPf1Cm&$>K*taw zi6q{O+zI7(L@LNvOE)jx5GBs3bZS~jS#4G5P2O9q=$YJiM;vT@5Rc^s7u?CZ+lCi% zEkRA{lvs#nK(9TsA(ko4)9qY?IHgm$lgGGM%D(IbRc%#7>$E609HJu@9z$=+J?&~I zeRW(LyJ|G=@zfl*R&A1hILsrN%LIcThOYj|Wws85KWbTzwaV=kTPcvmbpYP@ ze7iIpAj@yrM1#9s9HOa{ClCWA~RV5}QAHFpZNFx>fCxf?-TIRk2zp7eab z3-2aYYyQ|1EDz~$NEOjQ!ZH>J1)|%gkB7=Hmo*LJHI;)`HLW>#bG*K)*CjmgBCIrM zji*MY!$rted-Px8bb=!QCUX9F-xfZWN<~wzO%7=nqnNs+Vdz{($D9bZz3&{9RY+?$ zn*UU|%(}deX3t0Wt;`sif&PyrT@uBImg)J-}#+^J*#QPYpuebF{UP()_gy zgZg?^Pij_itBK~jJP0$~TbxlW$OMApR2NjkupQZ==C5J^AFEeMTGuw3q*m21rvcu{ z{5t3a?(wq~%~~-z4>9Mbh{j!t#X%v% zh`cWGVv`X+I3>789b}=WDS}%_U5fol$YsH5$wD)|OE1SK;saL8G?QiDCUA^S**gG& zdC~w&2UcCgQvRRlsz!b1HgSU2SCvVbId;X>>Q{#FKTRS~y5bYodB!7%+mj};?v7LX zNe>moay~o^CSUN@s*p0r#}Q1#clo641yoE}G?fLj{*m!<{pAv9NY!}}nqU92kdlufThjmlt zcA(}Af21f?X5KpT5e{uptL;BlaFUc-!P%AJYV~xZoCB2OO9|G1%UZe(e9SA+_Th>x z49G07l~LpF%T2w}S*zZye^Y*C=Byfq&b692U)eg=y}rW&YZ`V;@BJ zws)V6jZ5wB7Jn4Ql|ahimXsl@)PWrzN?GM0qFK`nBiL;rjOD4H+2D3_vL8mTOE8je z)Q0_Xd%Zj!5u=La0I)~F!sv`-D~ytj;Ng}8ENFx;^heMUa7=MHY4+_6pBF^1to z2fy127>W$Pr3+l2oNYgDKVB$SDKhMhxNm~xtoB+CG#SR)k~hLu*uW-g(HM&y`mDyQ zF4|{d*!*qFwth7$%BaUh2o?)kM_Pumok3c^a|36Dz3!S$`s3vo-hZs*!DR2?+H-@g zV3x;qC50!pd~(gW$yIdTXH zDBU&22x-RX*ogZ=KcDaSzW;=KKj;J4VArlQj^lNlujkQ{{HOJfcl^t>#>3`@AD(O& zX}o8!0EsO1fHw>(J&rJ*ewjfs7NA2KYd}C?={Lvw;)5|}FL)P$z-k<@HHT*CmYG`7 z2KjzA*w2+#ZMAddH(4mm%@t08z>}j_^?JpQ|5W#l$m4M-arV-D9mnecdacCxn2aa>D41ZhsDqo$Z=TS zw}3te0|one>*y>G{1{SzqZnpGuKJ&8pJt4pb33Iomhs$~+|2kgc=hJ@^68lF7I~jHm8be>*SQpPf|RfM%z$K%= z-xG0Q191Sy=cOxX%X~Kz*RfWpReq)x4{avOjN3N}RwU|u`vMpUC zVEG!z`%T^d=jB;M#61zSRtINY#&nfffq`OpBX+YS>^M0sxelk9kKDf^$Omr3jpYLCq$Yo-ouSeQGK>KmPqO|rS{AJnorZ$%ld z!EE3sH02rIwL%Hfn4mT8G~I(r5qg0jKkcOjKp2OQO$vkTuv2uFwEB5`6nN&Pz z>qu@n&eSL<2b~m{ZO;1fMu}FbtzTo3p&s6oall%UI^}~F>?t6I58f9X$6GfsorX&{ zI3EL^8P`ay8$82fYlRZ>I&%4PC*OPPb|R)oBlt{ZhQ>)z{$fP_ft!9UU)F?rd4tN8 z_GQhqcrP@geHsol)>A#@@H7~hhB(ZauB^AvXYVbqof)iQiZ@BC>YY){KqDf37bho? zkwglpAjQt))xa(1gBmV;*tHp--_-7vva=~b3eYVQf92?K1~_8}?;o~a zU0Scgah^BZ69?7NIw1gaU`TSvu{_JZ9Ny#w+Z_|C+cu_w)KN@@prwRe=I9e&k6xzA z*oQSIQe&L&{mu5Q!> zcXpQoXUjxOUb#;LMn!79Lsf=&-efKYN6AI+54l4%0OG)zHpEr)PoMjOON@MN^G3A-wr15*LZ|TcTI!r zWen=wxn|lV{oIq;ZwLG*@9?~m^xJ~1G%Q439ekiFsH=NaBr!YY(&}t_XYz|NTje}E zNd!w-xl}1#RPe;jmjtoT>a_CLSoj)+D~2meQI%{*Gt;z;p_4M-c+NEM1n|OC0Q;rk zq?R^`k!V0w;oZ7R(-p?~NtAd*7-(Z!#o{1HUOG9iUemG9zo4X7GN}NEO0M)7XT>|e@-)R1ZwAMz4BhsHMsQvg}2S7{8zUd~D@DMPo z08N$4??Q!|X0Hvm^&ODDyBbb+_tCSxJzynf0~itEkFpk9{CszvcOi<^tyA&*vCmGF<6@ z;AueDICu4fV17k4T}-q=qmaXU31l(9>p}A?D;dj3dwD)06!dNv;7x@2i$Rc1x@CsT z7mUTBF#f#EuN}Q`bWTisfhvUI+(dIhy2a^YU<7*#y+E;01y90rDt+L<=T$@j(3Ks5 zenTTiHN;FTLA!#&4mzGwp3=Vcw&XIs+mgl$0MF&qd+3WyDW?zq)@#i+JteMy&y~pr zz`$7HjdLQgr*$TPL+dKRqDSk3?7wGpZ&fq}0wzo6{i6&4(?yL$mI@yrT4n&wygNi- z5J;=NB&+nU{}D)!C`XW}GrFwBfE3yUeU%Ta%ObG;OlOBUsC~#vNln-=qLXq(PgI13 z^b8#Q0{gS4Da6PM@2yeg50(Ouoj$~$v}|+h1C=ci6kUa_vZJXZ-JN^)(G9LuJ*jmKB(WyKwNMCy! zVM0^uEsy9^K&Rqho?+HV@X08v@m9%KmZKmeBby&abQy1XIYcpTc6xmv(dEjCtXD&D zIX$x|oJWAhXUXQc5?#7u@n;GvMFPHll5mac<8Ql%nitEFknlBjEGJVnF`mvhNzZa& zprbFsSOVMfYwF2i(Be9+aNr=%K?!HD;$L_d9^elT(vXE-0G8ie54uExq71+i7=~a0 z>~w1!YC?FVp1r#ktFs2e103?L!hcDC!-*1EQIx>3XK{dafCp;Tv0gSoqfHb9BTDC> z8FHkEy265&dOc1;0|U1HX5T2@B-=;dk&)n9^e(1^3ESCgit zF28HewHjBL5+j?us!07BxjF9aeeOrlz>wLv~*Mo0KFxZ%%W`7?;373y-bCDuNfKZJ(_ zWes`+%61+7X%5trB9LBV+vPq_eiUlxPh-g$2QE%{`$$vl=b`12k_DT^1typ4%k$A) zq~Rf3MhD?O#TN+$%*m58n1PodrOPmw=uF!NyI`G9lHbJC^$j4d@U}o909K)k7w~%B z|%_*$4nx%{gD3R&o@Wj|)XVp#MQPAu9ghgeZ zgy|r55{d#G3XdWnU4z=~qGo>5@f}fyoWAq*CTZ%GgJz9`(&#Ubd;@T=w{lT5S|$b; z3uH_$MjTz6{ObWiPML4(ggEvBSV4!32Yu<3k8Q_2maw{gn)29=@MpX=NvoZQjkV_O z9oeKIIje)24|Kqj%Cx{@uk8(pF_y=sy9@7qk4}D^FqG-tGfSDim^%Q+|1>eCqIiq& zSvfFpID?9ci->jeNH?3Hn|-WnIrLbXz8}LBC$F8+K-X0-Y;jNO^@@3ourr;$v=MM4 z&i2`mbwc$4Y=Y^GS+CN+=Hw8GEWplM^blAYKJlhEE0t;{alo8rEbCoe$>4fKZ;evN z$_k2mJ5MBU{K;lN`14W0uLRwN-hlpW_VJEL0-?p9GQOdWh-o`QpA}of@_!Pxy|9Flf6EZ%SiVuduuXj1Sz|^k z|1BtI(($m_$Tjnu11df{&Y@FO?a}%`I;4+;rbOtt!QCp1)l@?h8|CW*@)?Mlt&r1O zkVejT$HFOYKBRG}Z*Rz+Js__M6SHGZki+`v9XXa22D{>XcIG5EHeAy(tDL?uc8qyh z^%P9G&Nakn9XJeb7MiCP%Qaf>I1!8|+J7^1Nj_g6EM42Nhow!_E-(^L->>D!3Vdgn;R0M8tj$RQ$#T$}<1?Rij{q3vZh^ zY5BcUx7ayP8myy%bbr>Tww`Yr+sdV9L~7m4_SQYzkM#S-nol8nNtok~qtMjZyK;@x zRb<_uN})FE>4C5f@m5RF+4B89A4I;!G5M6Q-pBeI3ewJUqiEDhskYKv91R7mVnS$Q zzI?%W)0XJ-(ZPPMf-}q&d=P6Gf8?ybZgL^wyMrReMLPY?g^Fl!7pOxRjGy17^P3FR z#GC<05&3|sXVpe1J=fDSK@8UP0roZ@NMP!s^bqXQ4YG*e?2I2g$LM~l=>FhSY*tJ8 z94W|FujoSn^ZUySVWmUz`Ci9cNLRFI8|pYx5`5}ju#vYZGlb8IC`Ue6tvi-&Ux0Ci z2%cV3Z4N1b&r=TgJUI`67y)_+?DhdqG=j!dJ)59}uQenkAOB#`QHv*$=kDJownws7 z=Ce*cw8akG3NI%Oah~5d-fa!DgmOJ7V67vsES{~-7ptp7uVW>l7ZKIyFYZ<~oy!gt z__N=S+`@x*u(-*WV`^OPft_Ndm~sKxYi`dS^A{7FI_bF`eqCl zfj2GZe74+~Z7(8`8<%l5;M*)uI`{&nrOu&5rS#T3T z79;|_HzMv$dJ{DBML>Wlt7dFh2G;ZK`a?A^@VUa#g?Z$tmGMpdGQ1oJycwaMGuc)6 zQ!aiQ3V-rwK#3$b)23Xf@5lsI)ZB}$L3?!CX|{X9+IriOEI|y_i0J7Jr;FYN? zJOUU{uPdDpH=9XhbH6pP6~%`%o(+aY*u4I^R+Yc`8`}@Rbeu{Bh;1o`IYZG#uIUh( z22i%7@jI3zZQdL1f3FcbPz=B!0LM=nkc!`es-QQfAq>xDCvVGIRNl}qIlQcGCvJ76 z@w1cq*qn1cELy1mP(|Fb{GkZ`u&DWTrG>(}H}+SW4Ey-C5`jAn5MU1vKUbd+;f zZ0J*0vG*}}UX*rsrlq76sZ-L>_D;6A>NCOLk&O4<4i9}w$zpZca4}$Ru1etK+I9j5 zhI7>4JUTQh|D9_D!~AP-54l<@!z`)JAj zrLPvM!nF1AaUDQW`&C;nr!m1csn{`e_o&g1dzCY3t1eTJ4*8zn?&%9SOuRGGJ)QduU$CUvz#%x4&c*ec zztg=J1P08(6Onjc{L92cONs_iW~WEw``1jXlo#*X^X9C*9+ygF2F<5hR0qwjkVX-i zxEyVHXh*CT;pHIWyV=gJEDS2mEvAA6?MHux;Yf>Y1Fi-#rF(cz2Rm5Lw?-pax5S-9 z616c92OYapgYRLD4+1Um`?7{!_{zaoy1-d4ke^x0g@V6YsH%1Yd8NqJV9Ph>t6=40 z^?vO86PDkcZ~k^UeCAqUwBq3AHI*LNpYDnwBc4AT4&8KTk?YQI+m51_A?p1vd>-S? z{9o%$>3)ETK{#Z;&}?rPe&1*G&RCln%U|=e1=G+JGoaKB0F*(YGF~Jo71&tso;9JJ z5zTPeM2M%ogH+>IU_{eB+Sklkz#If4j?w-QXL zavF;4ujzrkFOyObh_NKw3Hjx2YrU#T?B6x1(f@fhdUdp=3|M4O_y|JfUJnTa=}_U> zd2Fgd&Wr;Xa*sNg7M$D!iPClY0YlR5I(xuR2(yuJrvm{8Ny@yd&#)2w>Gk^b2|$&UPy^A2 zauC;{5UJhM2AF@Jrvm-y$Vx)`##n((%Zqo{Tt}aajM^{7ibgvvn6{AAYt@R~tm0D& zd3GcEOOgFpdo_nz*T7D83gaw=wy4#>*kE&=ch1XKH^dR;0FSSa^jV22qnMLOgd2fh zn!3)e5yBjhN>vcMe!HF$yM^@zRzSj$mcZCQCdT(rzz%^oo*Psmz9qXFET>ar**TQ# z3I-+3zuD&>qqA{wVP5R7klZ?%r2txy!(&wE?s&+}`RK!=`;#%Q{Q{i*ybd*iY|+n; z)K9(L(bvNs4{uMzO=|spy8_Kq^8VJdNz((E3@@nwBz z&Gp*w1h40y?j116h4F`5hbQ#Rti@0=KsS|ZV%KrKn6Uk59xH3Je_t}Ixufbnq4V;S z+ViA}g77|4J?>ux{s@0UniTE6>B`He!uI>`W3zLTt;4;23>p7SoIv$k9gY}0PvrU0 zq$iQwD%^82K2A+i)%afZTGfj4C3k z@y6GaPwHtb?7XUnto(FSR|mvM%cK9*aK8T#n>Q=$@6i-;ugRx#g;Z$M+c1PTurreU ze$EkNIV7o$N4&vrtLz}$*?LOh;vR)3A5fZD5G7r#~t|<~Uu4qAbYieuj-=vcU_)j19m~?HV+?7wQ8vu?_Vo_i5}%%Ei1^ z4MdG>&^!mapX)wi*txShe zF+5&C=M@x3ib&hFg~gIOV5iMJCj%sJcoLn>9l1K2&>ntfJf3uPPH7EfrVg9p@C;7O^c=S(y^@!yAcFKi6DJ+U%- z5s~P%wAYZn#m&Q};YY?M!JXJ`yhH4`Cmi}4%eX+@A~zvcw%jl-)B%ZEY-5?+oG7W8 zRHh3(g&IUDjT@?+9%w4;T4Mj9Q19^-Jrv!g_dJhE_}4@%Tg**{lJzMtq{jgu=|fdzTLXFMb%tE#pZofET+<__;GjO!^9lPUbh$>rF@_BRV6}T(%pk44kzDPNQD$ zh%ja>xb0#!KD^0!PINh5PQE3c5qJ)XlS`R`gRSNi2$z4DE9p;zA&$PT&M z_r0p#vA%nC_l{;i!NYfd$}!vhgWEI0TlSc`6Vt#pRK-;9yn*9@Yw$t3fpFjew%^yA zyMn>&tKQe4i3mu|+F*J*nBbZ868@*4)aZ%zn9K8!R`x(souh;^@CvtCSqA2QA4dH6?q@ck=Q$YmdQWW<=dQNU)U z^~Z%k!ujRzpHqAZzsuvM^eEF+-v7!C^VW=2*Ksqw8XnH}i5&{LGUMxIPH_K7ibKa! zUQd?mhrnE|EO~Ll#eVTm66H^Plqbr+c=4?Vp3^MJ2++P;YT8V1w3DVJhK&V-+Std% zuZGW531%|+R2t1Z*ZQ5gcQe(eeplD#A}(RVV%BF^M={9fTFQ$j_{D7@I|wZpd#RE4 z4P{{n_JBJoB4pVzawrHJT`)#-(&>Fr;n2*uauK8>Twaomdb90#xr2f0p6O5Q*K#OM zoe^=BVd;_z_^(b?BIoGX_I=xMtw|FtMjvC8p&e72{@5YD3%gC7n!ODbei@0Qx~W1zY7nJ-TW=v0!&B)~!U zwo<7)cos;Qy`e9dO$$oA@i->GFf$D~8qy{}c3%Yqq|{=z7V9L+6(Q@K z26o4kR}1om$~{b(v=3VC`b%!W109*oan59MwAn)onrGQ6dqvnJA3UQn2Dz%xyUjSo)%UHVp-TkD+4xhF;!cm~@w>#(hc7EI-Rh7n7B>YM*Y~v-^Ex zy){FBdldZr^g=0A5o4dQ)BKQEhx&va@X>~(i$xZAnLP=)xzO1-#4I(!ilY?kYj$PG zzz@RxSs(I?w5xeFlOXPrE^d2eRtq4xf#J*njR#L5Px1g9iVf@?nM?d2mkDfZ65%q$ zx9~B0@4hV$rig#VU*%}?GtX=OZrksHi|xe~vaQyEX}uI_;?mb2nLuzi?)>XtuDz8N zbdCDOD(L^|q|vwR$U7!&-z9a#qb zy&&Kpb1v;0Y4xQc>p8XFTlJ-eD{m_dZ)rR_erE)89tg(d-QBY@a$hwtF!Q*&2x%0^ zbnj-Qeggt{5`;ZroDB(N>7i!*eDD zr$yWACtp9zp+J!{6kf&2YX;}vZL#|tqy6s(fIwAjJDU|b-V=PLgO6v9?|*&Ssz((m zdo+dDPg!?te%&|GqpV|G#`SpeE(|f0=c_&%ytw zf&ZR~x6b%~scpavLH&OkrC=lfQV;*Q91MLbD!skmCthyh%^~ zp9=!o4q@fwWK4b$@5AChC>0R7!EER8iI$H!g}s}9hYA}o>d%y@d84C4jQ4i zI#D+Nz6l5_hNzp_w*7DH(<%&a;-%bKas{Ys{~qi4@B|9=^yJYu3c!op#XTo~{NL9N zzfSz_vtLSZ7r3|Ep#;?b`=Z0SJd$VX5I%r>EReP2TD6h5#Q*w#fB3lRCAId)=x{{< zg=fWoNv!?91XjGzDj|FJ&ar}gkrN_CU{G2;y*!R?YhQBx7i$2&fSwFj`0^pXgy(90 zt@GZ~|$}_5WdR?N6 z{OV$Gz;D0YJz!uLn4KwUzqh1p-<9fWSL9~*4q=O|8q&ht@eQoqYr68*&HOTo+|iw*{`X5 zvLqc@&t+yxjmz+r?=T_zQYT#ov3lr7o31mp>Luj*Kvw|K|F8 z_?j!N8zg3%v6~fjPW+TQ5Z`%&ViR(^nCBuG~=ppBHhsC(?RVEfmF6ya2>^%IL?no1QIX7X}*U_A5 zC(gKf3MZlqs$(zQCaQcxU_gsN1VAITJWVKgLo9b`e)V=<1d=HI|53r8OR`ij}=( zxX>Gx1`8@9Oh9(g8 zMkP@c#U(wwS<6Z zMVPO8Tocr$nJwI!#w~oCq2`q0YOHl&!el9&r z%4B1|Ihnt$4%D>)CD{NaqV+wR#kJR0+r5Ifsjgq0k#-nYp(0gShd_-4-!Pq znSgm(wSP%6JqfxW{|Vi=cA=)r>krJ5@EnA($*I`$qb2CBOD$DW(ZS_75g1Tf(m*Y8 zSLcfgYb6zz4l6Po|1rJWZb7dr=?wCn2(Qv4Oc22kAXw~TN6fsm{<}tllrzsb>$7QV zI`U?DuGcW(;H^p7uS9>O@5?`qm)P(Dn#jFz#5Bo!TOqOJGtR$X_E;+bV+rr^w+ges z&Xg#KQok@%Eo6O3{^buhDpUAHd~xo@ZN+gNh`MM__aHVmR630d59xR_Xo_=TgHL>7%dI zHOnu#HHWP`a~W@5p$4ni>%)y)nmKUbd7vtCIF_s?nKCScQplN zySKznY3-$p(J{OG83rAG#@{)7f4x0Ed->j}}u-fZ2h{=?9DxE4l`{uQn zT-M1Y3X=|wVccpR+q1I#km$RYqm>cFSWKeP^SgznPhF23z@D1lJsU~bQC(gE8W6k& zZb^SrjXPffy_}1;T!BNHaRy_w(fd|4*_FJ48`UIA^MP04NeL@xnHE^4n$o8g0V6*A zq#x5U7s`Suv+X}%yoqT|vb^cgOTeUW-r@yo+#`IhGTHrUnfw;4eJJ_!ff(ef>;4`^0? z9?uT#@(@ObB&XL*U!B-F}qhwJI!@4`>QER!#*4f8J`C5Jv*ef+f4!r`H_` z1pI@}xFKpkeh%|!OuTtt+WW5D-_xeB(Q_@Y3~?Mmu)LP`0%to2HnFZO;W|HGqH7f> zku!1P>~I_zq7xaUtYZ|3wa0AlGxp+b_NPe-OY3D~AhfYoT}YDQa`;AI_*F&8i`HFh zveAN8+!@e#vejU?AvKBxnF61ZfN$GTeJQWm*yFqz!q2icIS;<7T-HEVd4Q~B%Z>LU zdylBW+#$zzK@i(PdJ<#TnR?7+AVbf%UohyA!+P@HG0XTJ-_1mM&G>yV2M?mOcdw2H z6q$=WiLG?lZBjhi_-;kV56xUXv@WC|+l?gQq9bV8nk=ixgsTz$$Yt;_ko24Txb6sA z*-lI^P1lc~prL8a{q9}G;=Qa_dTuO=g6_rC6J~QJo4$wiIg=?|YrnBs&|y8naXn5l zS`_%|lf9Ze`YRjT4-)f>z6S&fwIuv1!~R|SQ{;|?^ueY-S|O*P+s=~;J=JMrkwbOjXd=AUcW!>dg`~>Sk^3EmMT50d;8+gaYEIaS{-M^5j^QzKtO3=J$_Cw7! zg9-3+ffnh&h78p2Ow&Lfe0mJ=q1%#eC-a9@eSEKwvkiND+q(7NH9ktLHrot1D`n9s zAV~IKw58RV>x^Ty7?sCB@rm-dc=wMM|9Fj0UB0_a#T>%dUb{0uD!dsu9~WH*H{c zIGPFxsdV)kpT27Q1R0rhxnKy%(sM)p&Y?z$&wggh@BjRktGw2x=|xvweJKMD-WT2s zF>|v6OY9YK(B3X?Vp6E`Fz2QW7A2#CpDu()){eYtR6P34d3h7XMV$DY&?F`)*h*fz zob>^n(e1KLX--~KueZm68CLO|CynPzA4pPMPEX>(aVeb)xcUaXTo+VTy~Ye|E{Z(v z_<+@M`@qzDPH;xXDuf=b2WpL%lOJC1Olf{Z zFE}=;x=;Tclrg~et*rN2=wmD^VH18jagOjej4W3(3k}_JZF)J!^kXZ1Y6G);E*xb# zAR8Aw!Ad5J%OydV@x6S=UtK>{9b=>zgAOK%H{0T3H`mv7a6pLmDGaG z2dH3SA&m5GN)(a}-gwx^bmEW-(q}!(-WIDVLj&R={OLp1ENyQ8r8G{v2*3UYFAzkn z7%(p9pNqPnf64108c&{k=`cFzy)R2}_V^C8n+yGjL5G~Si)6vilhip`^Xd9C6O(!5 z%a@0zs$$~%xjsg!aeW*tE!ts%>59q9i9Da|&5VdS;&A$QljYqd9otws8R}lc#vUY} zrq4|LkEA=i(U0n9qivi2?g>dLElZ4meXSlvfA>{xrgdSaP(vFxS3T8@Ez4|4N@+?N zF=@mJ(gQKu-qUwuqO>i}a~p&TrnlI%F$MRB>yfG+VK3RVDgMfEXq=x8@_jh%q4iy8Qo|) zqK_-!HPQL*GCyB0Hd}7i-Q;$b%-1n)glYe+FqjBV~pnKFv?<4o;6P>ro@3Tpx zkQBa)8txj%^2#6|`~|OCdH2f(m$u+q{nqPEA#^7rc=k&U!Gaj0#%TMINJTsD zK>}~;-snnW9m#n6fDQUb=(5K-@qn@6^p0=6q$t`?C>9YZT%Yvwoe;|icSHqr+b(&lo50nI!rmkuF6iYT`EVzByWNlvnmGYQ3m2+-nKm0E? zudK|3IA)7Wl#={e!o1LNcse6zx`(TO-@XOScNQ>^NaeC15!JniNg;c-N?bBMUhd6{ zM&kLLkRUE+)a9GMiIeOaO@;o~ZmkSFzF@qGa?3i%1CyW!h^8p9*dngKRoPaWwb+*HxrYSc+42Lh%UH={`*Wl%|#^>PVy6gx3BqOC0Cq3k5Pmk|Xl%MDnoh-m!< zL^`T%EBut|A@qi+{ysj;jj7XXKO>k5fxt~S-*;^=b0Z5kMX9SrK_$Ygm+GR&j30lY zM`*b`cRHsix?mZS%hIQ2B;;rD@{m`t{Y>)k)aNJ7!A&fc!gP^StNQ`968`VLZ<(`) z9bW;wtNYZaA0Aag9)v%pL{>lFY|k}|NstqIF!={RttHyi)Lsf}P&x>?ITho)Z5IpX zlM9?~@-|AF=&Fv*x0Ja2#D`^=Xp6bAwy!LwxzYS&l?tJ7W+Z9F_)+jd(fCD(p6+zy z=fCn-(Wj{F3OLr${s@|GBqt9QuK*NFdxK@d!3ermn2?__oyd+(zauDD-8Sp2TSRk$ zsG=uVYTr-CfsgnXXBr8BmwfKM=5Z?de76yF+W1NiSz>kpJuFtg^rnrZ(7SLo>+cvv z>L%`VcLHtCidjU}h996L&hB#tE)$v+F8#3$I)YU21Ek zyOHgu&h##+=y+-{aL%RR5d`{5U)zD{l(9kYm{L5m835*M2iPttN7ISw=*HUd0`#P#sEN)M^`=-fpYE zQ!eck7I#adj9#Q%8-(;Vu!8IkOrUgh?AqCV^jZwT`RNi#x%`bx z7@JFnCWX5L^ePSA6T2fcL$~U0ei6y@aGZybdhAb5Sy0;W zHrR#P=6AT5psG%BDX9)kS5Wkr%u$S4!F3L_sVk1|nwndCSCH~JOuCHA{zctDAlVwl zlFW}@nyab}k(KBVjLcxC=Zg@R*_Z{Bs=K!5A=XxDHWsz|^-E&+`jCTS_r~tQa@MCh zIB4_sXy27vqAX|B%>rI+>ISo&i$kz#x+9G{-gm9EjLrI92&kJc#en-t)MZ?DEn@l)QBje8h+FtQ!TAnt%wrYvEv~3J^x1mDhuj_g2ML+Y`va&&jH|X& zPo!2(q6f{=9dO+D$7jl1g3MKr3hBqd%CYNO5*uT%bau9vbB_MBcZvwPx=Q4=mDl0t zBOYB=%v1Z*(`&37aV}bRCD+$Ew4woKB3Nd;vmZTvrhKD}D_g1guMTbaggB?7_1Nfo zmU1cmZX~%1zK%q~9LxWUp<_W#%CHN_iVO$Yi8;T|L0y!SMajxTpY;UoZ+0VzUADq{ zImmY>A+nJ9h3(A!;tJ!sUZ`qdvAz=|E(^byS*S8i( zKS^M5VhA1N)}=rrBFhPek+pO*;26-O7_O&% z5V$Dl2}xFycm7>z&vBaMD1J&3+m^^!F-7Nf79g8b_@YS>awz@IJUTDC*L2PNMc#Dh(VoI_r`XJ>eV`lhYfj8WPAfO=w@Zm zMs)*!g^&qdL)@-w&9J-4RSdf85X81*i5JK-&cD3c-NuohWRV**Yvl((c&Zk=%kcd%*v=O(%|0k!wms=zqm+*u!PWY%FEwU_%S zui7T>#y&xDaj?hVs5=MB;8qgdNtPfHq)(r}xwRS-@9;*OqK7BQ;J~3xv$%?BJ38h| zGYCXe4GKJ19lTHL6yv5=BB0iYOmQsdd(X9voX@L=#a<(|$WqYy%Jz6`rJJ zJyr{4qQ^iuG}6?mhg@lDDKv>{#_ZEJ3MluIwl#Bnfuyj;+LdO9yb!+nvvl+==U7Ii z_&uhvpMG6eDtCXBIaGk~T=wSgcyNM0xXT1~g*e5IaD*e2O6;3vA_MZ7g5%L4%2t^$ z?Jg-SM0)cBQC&qQeV^r{N#1-{Vs70lW|F)0<#~od^VMU?53{eHhn@~L@38oUY#S}H z=lF2FR{2o3=|AE#=g}&W@BkIBpP{lX-G|$k2zGg5aws^vIxurGqgUfCkTvF1q;B>D?vr^Xi z72(_L#P%DQ6c zK=W1gQMCUaL?Yzxk_%uw(oj=IO$uQ!ULtV8oO# zoX%H2$FH;?l?41@b2h4_pvGY$x7DRt@XIs33`8TQhms=8D6QTX%eBI4spC)lVe@z6 zBcR}bR^PeU`w>Co2uRt@8hI0!PmZmClrAnkiWVl>a+5CgUS}!Qba~S!>oK7EVj4ph z??IJ~tUa?$vZ`K0oe)*2V0px)(~SMbp>@ST@FYlYP&s1JXmZZrQ{Q7SYGnKBg}HsE&gRv=$$-B4{vSpDnLEEZio*9+uT3e*D0lO_@;Hs*NfE>3bEv z@h36faaK)7KX@;Of}tAovG*9rMBzh^zh86)+zI8|;fJ{(3#uVo-SawQ_^-U-U#L1Y=rs-qo6FneXPz&*rcqViYP;x@WpYfCz)jk;e30_(7 zImOnYpibOjXl216wMo@EJ-Psvm%jpKR%mj7H!MlhzIJ*?Tya?QmK6Rd@(FQvf?Y-t z(`)|V5we=Z&&!JobgIZrpb(CiI5Abx%GSD4x)M%z(v4eXgnMfPGA~Im4S|V8XPbPo znB3*_u?_ZE(Czzt(&(>;Kw5JDHWKKBfHWv_U!3Am4-_8W4Zw@njWtz z%*V}c&0Q;io~G1M#->=(3RIlG<&h^)=zxN&-Lo#zORlaqrgIbev4?;7v($j<-|)T> zJ>^qg1lo6Qf*#^*kbmw&@Y8+orTd&^P;QgYc8u*{%4adz%NjPTyB2egc*9nZAI{d; zw&)W)*V_C$bOrcyF>-k}xPXQ#my-A-vn!hetCixy3=tCM~Y*W*wl!w&B-h=iap! z%^-9TFbs6(SrisLc7dpXW+TBkpv&B@8PvQo?DOGFr|yCC3%sCpFoNNrSqSuzYidO< zs>lsIh-nqSm~_ob3cfCzx;Q#?bQOxL<>`F1=HVY&bC^`+u>$Egxgd3T)nm;hc^;^l zdRRJ#2If&n{!tEZgFyvAx0&@oMGlX{dV%Wg9&R?^Pt|x?x-0f_0aM}EHLcri3aF4G zra{kutarF=b6(|o=NpT-LN9Mz3wYbdX7jkkZ8>wxk8UOgrtWn!WlT#kp_9=o6^vTe zB3Zte3rZUp$yHM4P@m(V3BI<<`=A4`(zZM;zm&&r6?MF{%`dr?W9c22SzS{FIed84 z(9=We411?|Xz2mLUhVj!8pI+TebWJZ3?Ck9L(Q)PE;&oHOzwR+H0mj@{1G zi4%K=CN;+D?z=zJlyo>*L!h25c^ddW$k#`6AfVKVEB2+y4>;8Cjd)LQ5OX1<{_TIP zGLx?-syr5^0|LTE^8Ttql%)~}m;kdd4=_M(oXNi zO;1L2Ey9OcU{I-F^Gs3^34$sj*tj0+fwbZE?q=_kfLhmc@hwl2XVPISUG_^S4H!T{ zlH@63vSMgoZQ6?o^?F~L&TC~NzuC<{`%%M3dfC^;s`aFoN`-m;wAOne`uuvQD%JAL zw6r_>zz2^m8yogYVsvSETEd#?IEgZS5+XXUpZ5Q-_nu)*Zd({2A_`VSq&I=19O;Pk z5=4pxL4;7Ggd$Cv^q!!iNXJ4^s-S?Ow*a98ML=nxNH3uW2oP!lge3EYbG-M?{G9nQ z&oj^LpCsYi-!5yf^{#il`zHj(2t+qNUbas|dHMtYwoW`7i(>NAe&D)hMamTfe?LzK>K}aX1qU&>w>K91~(nFWH1G%xHRd3@+R1r=DLOaOVY=tSrO$enDSV1KG-7woTX{({S@ z4??fzl@{tv+<|Q&+McLxk*T*2rd(MH&|)!Cp`*{M4tMRT-3oqM{84_Yg%Dn*i(#FLt){9eIAMG7%pHP#4&rdtB9QG?b`I%Xa6V zb{`^SxZ-;brlOX7D*bOoAk)BsC9GjkgLfK%8JxMIGChWa$TVpJ1bUELJ%hc_$vMaI zZB@VOkyNgrI#bvj4@_(_bemX7g^_UzkCU=^0h&aiiRas^9vifIL0d~Q9F3Mr)Xe0{ewQf|y0p!%#;53B>H zJ}{(N&<$bpFROh^J`6o+_bsqFz?$97pWKYuWhFZgIZ9>*w6dAz4;FgpuQ`Lk!8bBO zrpy79TC+p2>21xrYtY=Sfr2SZ5zU?;l}SB;EouLxJvyRlRUCJWn>2OYeP>?j=r}W!8y{@Wp4~_}fOXOLo=H#^YMkRkrKnBCUAd>yFW4mY=B__|keGlLo#q^s6?fxpg8`&^FE#7>%Ghp#bjXx}CZfn>f zDfhhc(uo%SEH!L%(IX%0>Y$OiN@hJ2Ig5g+9st7U`$^>J<@3tU*1@}lkffKH)QvSy z_eW~MML+H|!90uFoic+E#aR4Qqe|mbyf?-VgWUOn&V1sEWKvIPAN~b6uyj@sn4L2YtR)c@fW3t;2KX)1*D@m)WKw3d>(_YXsK&E+<*L>HGOGQgyCxAPzK zyVakGuFSS2+7jBZA5%nY1irj)&8)_>J5c;Fw2uV z(~NZk5P>^1KzS#U#*Dj0BdGm-A)Ii`R3(@#{A6&xsh~5BQfpInN&|px^Z-;>xRO>3 zm@UjNDiBHAAH=V&jVpzl?mrq4^}QwjKTE{DW}R2GaipcoX)SzH`r7ec!`+~9Sru*&jaI5-YH5SO?PCYhM;QxF(#no$ ztvNL<^Xdm|0G=HX30f*&eO|eSc7%n{fDBq|Hv4D{q#$SAV2=44vUJUyoO|Q0x?_z_ z2LE|b`Sq{#y`rGwbg{(^7kBstfob`twf+2jN&`eH>Hwx;PEfO#*5^N;NwZ(orc*vM zxf(2aj80k|pwv#nY3t^wNuLBh3~twFV?0LJmL^JLb04+XmrcwX_|Zy{HDiEcYcsJH zyuQEse`5ABYv}d@LSvg8GfuFyKkv}%3J{HNz5K<@e5f62Z(kEo2<0cS>m)q3f_ zgzF>fZ~!njz+iLw<2P%#{ye^Mka%oKO;etZj`bC)`_EsOs)0`Z={fL6qsafy@U#Cr zD8N4Ye}jcS0y-vL;=eYQ1VwH}(TuMiDm3`s7&0tmt_fSw?$|W~>dsJ8Y23)>_?*%- zKfU96=Dhoag7BZ2r)xHrb2qrPVsGF%nn`!ihgcgQIF3{JoTa)o@U7WLC0==UxPP-< z;;xS)TAz-!@8K{QSTFQuIQ2=4E+LsLo(iZ_C6g&1sB2p{sAa#b2J8675uRxJ z-i#wolpP>FUANPG5Lx-ar{2z5moF&rqil%(AG1Oi{>wS|`BjfYLO|upZ?AErgT-^@ z05UGjh5Uk<*+c4VExsLRlpk;9Yy45hUgx7MsksEM1nRwM!%f#gSRDnnFJK!5SZ5|; zk7`mHv5mt&ztX8a3tMX8_`JW}Ui#dF;gNzT`{OTaL0_H{Myp*-gZJKK<>_~)mwOI3 zRQBoQ^F!y$#TEGkpU^G+UZ1?SRs*5+&W3k2lTIL91q2*Oy&)zlv+sUd03U)hQ-i`t;jk4ZfZfiGE0FcXrs=&TCE{m~T zR$!m_Uf(WKfiO(sm_~jkh8#L~T+;KXKBBE<8;#eW>)saxPMxVVCOq{ZBcSA+R)iO5 zH>&W}M8KqiI)sbRusM$5yZE^0cu5`8f{w+)3YtY+BGMAb{ac`@FLoBBtV~IPeNLqZ z0qO6iD7x6kGjsPODUTie);LjzL4G-8=hBi{?^p|Qiz*`? z4XNV75fg;R_)rx@41=^Y>s4j$fKcNGTar}{%r4=GvM6W}oOS$3tZh+^iGAvmWKt)j z!DFxLip3ff=33k%y zc7C4HkkyKSfS!K4;*t{u)dpjj+LMnX7cRRZ&f-y@um7}wPSsCse%tv_C@Eklw{+p# zxOeL+9IFKp7N02c+}{>@YB`AYPmy3QS2$zD+_Qae_*`L!6(IT|!@$@1@O)!{*uf(% zs3f6MMm~m}Pp;^@U&Oc0XEZj~9_%XAK*a?NubS7P46p}dN&3QH1Fvw$%}F&_>S6T zSW-Yz{6$y!!lIt~C2@8x8SQ`ywaB^xycfmeF}bkT%ie<(trY-`{>;ht%cT*PZep4P zR4m9UZH&dM4hZN@y0b$-^0w+ZD*AsYQU5rUoUwo6PDc9O}JJc)R470Tc!ose{`lYqeJoc{|wNrbrf_Z(uLfiS$mI^DuttY5*8pLguhgI`1oqanJMT z_7-!V`%o+4>~H;)9I+ zq5kQfOX(+VB4`CL{-h2*U_8S!W6CyVRs8d!+K#MQpPV6vx+|8l+OLo^>sgrnRB1Js zj4AE$D2~-BsNsd5_rZ2^`9r|Yb$kozLnpog#T(my$7`zyP9w|X2*GT@l5lQRD5Y2n zuy)pRRd;>Gw|6mS8IxP^@yYnGnw+=WQdv`P+gesN*<9$B+A`ZBEyfX`am7r|xx zjW)%cVVg5Vgp>d0sGt9IN%jq`OUIT@xh+_j{(c2Y1K-Rndi2t?y|Uj^Iz`Cj!f(RUL192a+Mt&f;oZLvtQ7bQgxo7@09`~Tl?F7}#yQ3xZY0u4;1n7XiR)YW*o*137yu zuDXuf!$!t|>T}(t1`x`upZQ4LUF&n9MVh@*YJgw1Aq=`dH}geGN%2^-b0DoZ<`-x=luxvMN?dcOR)WBF+sU zThyqfId-S_)droREj;OqDgo*#nUi&5Yd}b`8>0xSa=^(hhnvf02mm(G*$C7`#fc2C zzB5r`;1RkJGK`u^X}b%)U6Zm6)Xf%r+D5vrCRY!$^9@W@v<6Ehgalb$t!L8IO~Rrr z{em7Hq@iS1H!Z09j4t9`sWQTihd&|r?AHo}p%Q5dbg_AXw+O5887`d&r?!PzexN_$ zP!>H7@vO-Y(CXa}J9=|Yp(AXN7c2L9fQ~h*dzJjv^I>&j zH`M?973y@z_0WZX)&)s#kqBeWz>9qROK6Ep@V8weu?@z}B#^b4H|#{zy{wEXos^IH z)}Ja5zkns`(kYDfh_R-KU5b=~EhFFOodXPxOHQ1%Nx1cXy;w!KpBJy>{)R~9ljgq2 zC3{swkWnrbC(v`i+UeEJ0kYzn&A1IuUOUcV`L_54lVUp=JQvbmDgdeT&>1*vu~uGf zG65q?Ldns%|$1xwUFsXjV^XyudP*N%1`UE4dloxfOSCYkDzTS{48OGIYo zKH3?QC>G<_O|3F3R{H*#<%tAHgyYiy(|4WTYQ=7vFJtRoGajkms@Op0!=C-%1V)hz z2PanV3Qzp}`EoeXh{rjm9*buyw-1R1K=_Q=?W(mgEc zQh$B>I8HzxFyU9ie0Br+k@ClT`v^erLQVSfI3QR6yk0G#CGMFXnh)F2p1ZOp2RZaL zDOP}M*Nj_R6)2C1F@BzFO3j0lnX+^O6%H;W<*J-B4G{WXJ4_~HE6ZQ+4@FUQz_TXb zHlse*x`DU6n$~%;&_laszgkAY_FQ34oYHV6vD%dcdrBW_gwQ5>!8)1o{rI_?2JaEH zEqv5$ay}sP1$WD7;sBXhYShXLTp%g>|BJ@XwfmQi;H?(dgy~5n5H&QPYs3flboz|5k@DeOach=6_qZ z!T(=>{(ry9zMKYZF7;Nq3;@tBK81ks3?3`>N}Jk)P0(NiS~F_RR14`}Z(G~P2IOOB z2@~6+VLO>LXs8#lJdppzT-Nb3mn?xb@ZZSY=57qSn;0{`vkb&r&j2yVV9B+Seao@N zkbs;3+AM}A&)y#|GMDWy;+oR@=NWVw86V=%gL4S`;gX%z%KD2ymLB-z1{*jF+ogW_ zzUk&4>}u?7Sp621l<$sSeQ*xRNRufD=iZc4qse0*wcfg->5*rZ73e80E1gS#!s8{+ zACBnED~B|>V_LK7P!9o>ZI0Go*eSUF5x|44BmuDKQL~xfy4yPtdJ^>HsGqg~44DUD zh5xkJw@f$DAFE+@zDEo0)?-hkW8lD%`X}&(T$iC(t~m6(c7W~+Lm-}hrD$^m^d9{- zw&}y^w{fR)ndsbWfe^ZX@xB2NxI;ebAMDPtHb0hgAFI02k|y!*gO;K`$P(_U`0L*b zA*|lV9B>ZA zkT4(OAW5O2TVBljfl}md%ukPuScTXmGSMgQuYY=^@tl7Qh9dWuSfQ^V72FN7hI^sG zodgEDMj$q1BI?-4LxEHjeG!XgT-G*ohzt8qclNEg3vR}7@mXup1mSs={-~Q1e;rgTt4&lT) z3FvpkYja9`w+~`U3_I5TwEs@K(=)`^0#1{|-d2vsGY^(@%lX;~mTZsWANVrFblSl< zXJ%%hGVrss==-Zt(9(e{%r9tIaLEIk0T%ZVC(1z%d=Xit{T_QtmQ-S4kY&GIsxsa{o{DlW3!idWpjQTs-<<*9(Kdk|vCN71Ni?73d>u0c*vG-$LV|8U^^jRj>tH@D8 zZ4&WsGD`5A1By)nM%Q?PZ9giQ|J$ctBlR=^C0dWZ+k)A&V}y9Cw*pK**HHWROgJP@ zTGpT1jYBN83`valPXzf~)zWC-F(k|GAnmryx)~3^t1-F{gK8UK@n?jDv@G3ZCArN3 zr*!pu@&!^^swcR5xmJoF?}%Yv(}iuV?CduPXJ^!KxI3|ZR5*uvD!2}maOo;Gh!ap^ zrX@cYKfKHr8;f1e(e$6Jn4g(Bq))SsruZWTx)S8H`*b#ivWq_Yv}#}8Y+!=5SF|g~ z?OLfr+frMRUWP3Hz71W~Rk}%CA@L;emB|Ws%R()k%aWxg9~k%Aj2M39+b{IaK4gO=&)na`uc(yNn2A%5s%d zNZ&*Y?kmHdNpp$6Nqn-F;-yYm?l zej$WcBsV&M|1jPwT1Gs<;C0!76ST2D8uRBRrIP>^5Dk_BQIpBo4U34`tR8CC zt#x3-GMzL%k*y2oY%0zOu+N(6QO}W_wm1ulZBS)tlVr@EQv!o)DpxuHHDp1; zCiokE3BnuWBO?!<*A6Cs)%h+NDKJ2LvHGbM4Ch z06Z)Y!hiaQz+g`TpV_C z2fzHS4nS%z$gjg6fteJ)BWRYs<-2#EzwtwNcJ^48Tu;9wo$b5u&2${9T*{K8)AHv7vtb!BRT7GRT(RVnYJa@s+7{sy`TfnCWqVOG*>lJj};x| zVi((ilW1EE!^5y;yDXjDxSZOq*8K=v)8_uSZ2KXf;U`8ww-e%pAO1ahRTOnCo!FaY|R*)uai1pCr58~ zy=WZ{-5hAiBdibG~EB*QIOX9O`PXU)y&J z&RI|n92N+ZK9dsgu#e{|a>SsGQqlm68xC|MHlCeZB(+sIayY~;HWXTKx6n7qbwVuE zkXLK@o?*6{gb5a2FyOM?OnhJ=oWeV^v9-mP(6*@Evp$p{6 zRsZ4zE73roZy2ATg&9kRRiUmVQ)27|?+BZ14eL5@U)fe0Z-#nFY8D4`j|zYNJS@~( z+J-00b*Oa7XktslPL&^p6>Mdip7I+GdoiG8(OPCB^FDpI!*eJttg#yg;7F=hu{NVL7xc{bqFpla;WttysJMAgq6om}I( z>IlO-a%q(3_g;0?|6NMqwL^yP&pLG#s_O5nZX;|fUJnPX9`B4696_FWF!lxo)ojSC zAbZR;!Qt!sO+i(c5(M`f?3=)YaUkE#6Tory}gnU^N>H(oKp8eKt93I|$~DpEjNlYG6Nx5p7NMif}fitT#RR z#^N7G=VrVo@oFym=7OWpSxdKiMJvEF>3C7ga{aKY6n|!x{Z<>xp_u702?U#M#U4z? zjN@iK654hhi;hFYbn*^pZ>$3W^`=c(jUs*zCaLLZ_|^C6Sj)-94+i5=-qdXe_(hyL z%%iK4_fqU-??VvY)yu7L%&l6zP!lhsFOxMQuL*X(cwp5)@C5Lh7aVVmquOWX1kiEA z53Rn;iF&czEIf_cZ{=NE4;TkGFy)Lk*bA8Yy}56Nis5)rmFodf>idrV1i$Xzgpn#N zd@az9fWwDITXoV-0N(LGEgNv@Ss#?cy{wb!IOV%VRTNIOIV8Pv{f_R_m$_|mmL4nA z#o<10JLV6>v%?KpERPG}iCk;*Y#A}fT9%B&vD4QZf_C7UuV(kaFWYksSgd2P+L#Y)Lo2F^#Ydn^(efCq-WgS-e#I1hLv~HE>G$oz|GQ zeR^Nen!0&_`-{m+MD#&BH0Z|Iiq}8~Ydt00(`pwxt8ng8D@6v>#OA=( znlBfxb`NG>_7OT^8o=^P>+JJCnZRZ(VLG*A+JD0(IoXcQ7JMJq1K(CKJzH!7-s24| zdhn})Q_mxh)0qazJ1lhN*!3y`Xp-8;8I+s)%Y}GpFPR6Hq1KX_S-XXsm4Ps;3k@Y( zSm$dA21!iat+flC+yk+nAwk({JTD}U+h5-4GG+lM3ZLZ_#F`BD2>-*PbmRo~#|=JtzP1**esO4cha3_I`Xhiw&9{eZ@=F%}=lEi0N=NCmOEwy zO<7FhZNMr?scA2VqHm5l3Kq`VubJR@FJ7MF$#XT8F;f|vDeZWYZsjar(s=$fd&(yl z(D`wW@c8Lqg=0&pl5h;-blCUD9HrF&xVEp+IwfUo%JsUt)rSTc4bYBL7bfLGaZs`J zWZp{5>Dk?Y9t*1C8KGe?@4B(|p!yH>E2y$h;>ofeEX^M5gf$ZsL#XE=VPlsMT#**l zdstjUvH5x8X7>-IguuJJ;0@kCN9mX#ZQL)5YI@FnO$#4OOkB5>x-XLPTe*lYDX0CR zxTy-;BavGtdOVT^HPdO<@&)cXJ&~me{o;3@V}z=$Xq3hi>mZalld@Lp5{^RIt}aC} z8K-EQ5lZUUJ4Hb$$NN|s;=^22I8asIv`m>2KGk#3yY=M-8H{S8MU7t26{`Pk3q`Ii z7d}ho^7P;jk9UZ|M21_I=eQ~ewlH}vc3w<^)boj@b_reL zElntxusC1Wh7%!VWdKnEhO4GlQ5deC(i*D1jZ4Y5e!ah#lqp8T>G(#3GLtbKxjlZr28R8Q!s6x-@=!)u%A;Pn=9U(=zR% zKQ-9>T_~=JsAF=i&gC47eqa-UMV>Oy4J>=-ViDz^5??W zs9F50R440Ca&7tWXg_gG;;z452(Gw*GZX?uU`g9_C%>0%B13^=>gmXd3mGS~eacZ$ z%N?Y5v$zV=t-I)j;Xva&NkZw}No_7aj#qj+r`!DovsB2AuSRrc*|*C778r)d^W_?@ z(J;`XcC~&v>e?0Nk(WhCET)v7kj?~MupNI2q1LkFgBmUqM-8puOB_pK|6x{WU z(n~n6ioJq$Ze4gZL`eBaEG**utAx9B2~CSDf5&+*;E>HW<9tJ>X4R?{^%&!B)+Db$Z zEvHh>01TXe8ck9&KN|=nnnaUn5$Hg^x)+%JM|9bv2xrg+<=#nwglTt?Po>00YQ_tc zu0_x|OJdCUw5nw7W3%2e-mN&7IVG8}!`PBFJll-^`3 z)1)y39j9H5RR(un518uh^#E%Shb#(j&4F#VMwk;GhXzZiu$x%w8L6trC2y7InQs3% z3;+TF^~ZbGV+f|*#iT@GIt%cqg60!2V0`R8GKcLw|7K%qHU5crCz`6;ivXjdw>tWQ z9>~xmgKjIVC*1uhsM(f6MaNW5d$I>wQ=hW?d*nmbVuw3wN(ze3PsXRpd#cdCXzjHr zmy#*z!-`im?niZOSiZgx40cu<>uA5GncTX7qQRMMey8@st}!o5&j%9Y(*S2F)KaY z>KIlq63IpkDTl-+x_1E%i5*W+^*%D@{#MLw?;y^GhC{<7bpqdJV3j%BMzKY*^=naT z>)oDmDh)SKC|1v4#B_Gxs*=1pRa3yLo~!k_k6?p@f#v@ZAx--as2r=u|NIQgSTvot ztf7)3GlNccE!eLgPy`OCK2ijJ$}u2!=5YX$cLAEz@}f8o_t<=_&z(BXl~xf-mPbnbaTdFxv%H z$!1wgi0ByyB~2Gyr&tls6_#0Ep)YYt-#icxoVarv!Pn=%lYbXluGQzf-Y$G-$#LBp zu(0MoYv0)fh~KN+*mQ;$_DqVOwKgRyiP{9zTc?3fOGR&{|BuG%lH4(8Ws{=EUqz** zKWI(Mc>vpsCAPbzt!C=r#VV1BQMYx9sjclLed7qTPCW}Ju+;ZnGWF$qm&qU8c*G&0 zm8iTpDZa<^ZM8ttitUGF%!W_IS6!9M*7+Xl-HX%(z#RyJNxk?bBk2hvDYd{~{V|4g z#Q;I6|6rGy*+esr&c<3>RucwiIQ|a2ikVGj%-NRqWpF_Qpx*cs;pabSvA`J);uo;c z1)gWv0;Y6yiMPdGX zs$CilPoZzJ4=UH&0S#GrrC0O@-%nNgJ`bLgeY=7N!Tj{x#KfOFc)@(=;jF zoSK~LjtmnWIrLAY3hn9j{>nP|0XClo06xRMS{{~;xMp|g8J3D}kH~5cMDdsighMpwqis`ISO+ zK$RY4Ux6+xF>aO8G;;Z3;F-X52hTW#pO4e|d#|Mam5ErqhQCTubO_h&%-5Kc7d~Mf zld3|lFem+IU>j-Ty1xoT9KquG4^G?*w>0Ss=$z{K6&VL<-UT%-H+<{(K0|}zGJtHL zNa}6l@O954sYKelYv6yO;$u(uRyhcn5E(e{dCjy3LJrHJSRWfqdM?Rict(a28!w&uTfS7pDW^(@QX)$7%c`MObor)i+wC-wp#0Wzhw z#4JGHbijGE!olKEHDvBAFG?NDLLZ(f<$daYr0_X*Uk8PjGrw*Hem6C z=WT)d)tnoHKm4J7wiXF%hf*MN-!(p_qw_P#Z<&MTH|VK9y)%&O13YYN!z;uNu@e2< z1^W~$MMrQdC}7t#a+0{~O1(+HNK}dcL(yWgd>j9CacvB zod}>Z3>4keVivREzAxvqdg=6}J_F0)+C1eK+(Tf`>>BUUoiIkfBxjrsZZi<<(=wFA zj#W7vNf6)x_d(t5+u@J-t#8cG8)QNnCV6s-ToThCIR1#G!V0lk^<%`mV*W=5sU3b0 zDy6ls7^;$BVa)A$B{^WKK?x|d0;(^L7Ln1QPyNN6Bw)4Exf>l7-Cx`T@nLbIHdu!UQYBdwT$MhJ`w3kBGq<|UD zfKg!UIN;WCKsp%Fh#f0-44b5S`5|}u#ZKm{ZFeb*G1I~u=`U*3(C1BC4RkkpkI}&W z@J66qEbV;ZsdGAC#w9Ee=jy3tr!HQPEt_*lu}V#C7%FL0x&Ie#i2QgY%y01Za`AQ# zDPvXM+?Qu3fjliYZ27@PbiBeZWDMyyjZbP>ME!N&F-@K-P72xpRBtOCdu~gc1FCb7 zybPdNfF>jvanBce(T2lnVC%`pz==-bMTQ zNX)(Ecs%nVw8Qhu&d1>|GUXuw^v)I-#_at2X~~3DE^MwG9o>h$@v{e`v#nAF7z$xn zR3PSV4Io~y5$+YSc2L(ZN}lsEg-Os}qFBHm6Vd~-c>d;fn0xtwZ0`p@fXb|bZvvgU zpBX|(8+eRZ$-_H<(3TWr)AzB2_FxA14S3Vg{L%JcOIiP*qFIRvu4=s0!usrQ`64ajboS^;v$4ac_YCu?W=;+B7X zC-o?Ml`MkW`QC*`<>Qa{4&)o$LxZFM!zIn4#}WRj1lS@zj{r?o^MV_tHyQ!kVE%Uq zO}iD)EUrqY^i&hi)&WIEH)zsMV=g&4PrGEH9@mU(GXbICM`bopdHlPS^weYt6^Z&% zo_$qsLmARxqu^*N2H1y@RgT?jG{x#$0IQRq%{^vjD=>5rp4KnnO8MfQKIKCZ@V%si z9`$r|W!@S=uILi-}yGsBU+47C2Lfl-752o~j)Gk4e?-STd zlMa<+@D82&?yhPn?FYa{5a4ZxBMdynJM%&0H)905L%Z>WwVb_!80e3{^rqG7`w&#C ze{^a2MEh6)Qxqsvg44di<=W8L!EZ}9i*D2 zIl%M<{0uX-^zt()MlJ2M9mM%fz|k`7fV7&^U{iJm`RU*Im_o!ic$l>Uscf^1Ch@z{ z_-TN6IMc!4EA@SaS#{?&0V!$$Xjm%m|CmFbH`7@PvdUd!S@%sbuveYZ6NZ#<&~`j|H0r-DqvSSZ>`pemk_Fe&cmZ{nW|aMjE5sVZ6_} zDNKR&+XA5SYd?Y$rZ(4&?(84V$+52)cT@LF`3DAHp2S#^Grr050c9YmqB&dM)+cIN zW8!h@8xvi!;}>%;!=JR9>44Xc=Wpz0FoTfgUQowdo!C~=FKghwC^bjRGTeA~cF4QS zbZTm9)P^x4P`L38O1f{LK@wVGKUNDOPwPg$ywig8V|J(k7dE}?0gRTdEh?wrBQkif zy9G#+N$J!|eNP8(pY6+^Z2-M3=@KPnVzm7*sl#whl#n!c=S8Bf_L?f4*?Y8#W&($m zFO+?$I|~BlLW~SA*{gtG3r7U*4nhjkVRhYr5c;i78@t$rv4rCAxa5Jok)7lN@Cq3>(kP zKAdVOcTFjTRP3foQ~&PP{FEVD8p-sr&GmBfmnR`SOgLzMv3tJiP*7R5$N0p<)3b|@ z8Y#1zwZ$}vpQU(pxif+(5c@jEV@qc1z_B>!>u%qG<3|tQ*%2hD6>I+ZG>8+0Ae@OE zZMa#Wj`@Q-F-ThR`yP0}Bo6E*vJf^a5ho*78dcZ~Xl z-*FxNu@mPY_m=_N?y^66Eo0`O$LkG8nptlkrhfJ;kGyXoVBSdh8pv2Ru8x7Od2bv- z$E^&MkBXJ-VO(D%Y6m?iH)lffbwB^n9cu#aXL_mg_io44XCt#dQjI$uK<(}RvT%xZ zpGlT*Xwd3xZrVwH;a)DZ>oC0NEeg9TT1 zYwG!am~~I`SfX2z=77>NAkXXd_4IO^qU9sQFUSu|M&+8jx90^n{Sh^xX@Lf5H>pfT z@*!$`*5$>&Pn6^4ZI|!IW#N}+=_8QxDx-|^<4%P(9t}FCU_e~*Dojm#W8a6b;i~Sv zeA08y7#}FUvBkQu`>bV`m(O_VixCr!Dkk@Vro9V-qUkzM_346r4?Fn+@`WM(d+*O{ zv=8URKdz6y;N+I(my{YagJzP|yKdUjcO22O zXqqw?t**1Dlov(!gux&m&e?fIgfHc4j2Sg(uMY0*=f%@dS)P#&2tpdw=h*p2#M!4s z$yhuXYnq*XHjDJHe@j!yCMh-6c`?9HnjM z57a+hx2G=uxnF{SfuR_xq)NSk!pfV&;3Ric9BfGuxOV1u-`P3s?8-?x=cOBElj65O zm=>)4Zi*gUi-W0_W^DLu?wk5=9KMO}4a>KGWJwsgN|TA=Y0y?|xErCQ!gh0|@AO2Z zKB8ts9xiHU8a3>}@B-JiS=N7j{^qPcf^3Hp(o^RyX*wuO3Zor{{+rF^a^I%RQvB>$ z$93~(uzl9(jObwv1=90Cz8^17Wi&vQ8=11xhR+Skub$hJQI=mnC$H}(Onxd#|AFO6 zd^LnrBTDwT%^Z}G7kR2m9J0|NGdp!8%F5ieZ|@Ps%&96tk_1yzP! zj^L?jm;Y?YvNlogKh3_TE_)X;dvR@kZD?0cb7ntO#XQqlB~xH9)qX4=*|1pgZXZOr zO$0!uq|*9)OX0DkKoAe6;YQ|cx=}i4^7niiYF5olHGgp1Ms+vr#1az-Jpw~j8L{$ZjC`#)MhaiWk6KuzRBb)6bWDGoF zseq(%4p+bCxH;}S4W+A19h8*11 zHdBO!vB&vl?Y#N;z4q*{BBmVAIZn-*tRff8lACYwh_(#M3>hxV zrw4aLnZKNj%iTC;+U1I!DqFFYNJfEqx)Coq)A9+DrZuH;ee&GnUgdFbBu$$d6~@nR ztFN!l=0w6D`1KhA+S~|K;9AmT2vy^6CHT9Pnzacrb_qSu7!New&uS_&{)yoyO5*p5 zg`~W+Ut$lXlnnO(0-nxFxYF@wqp14ez!S3te>EPizPC2o)V>X&roCU^qcj7TMN&4f z6Fc4Sn}`P2)Qk*6W;fa_-Yr$^AaFTw$Z(q-Z)~D;Kf4)Ae2>i}FLq#yk$~j=ry1E4l*a}c zxaTOAh}zd~^g6%o1F3^PMcSo#>0gz6$h>JC)XFu8xnz<~QG?Zb|Fn1Yuu5xWP9U~8 zmF^{s?kCmuD!?Gt)o1q=a7pM>tv(zIQz==iYS&qB1A)-3^i^72H7BIfF^@x`oo{!5qa+kY#tt+i0(>1#0HS)r*cDMeDGUFx z#Ld_HtrD7jjiEz44AQDyK&VuVPj9D%nmtH{1wJ@T%(+W> zrZZ^juqbd{+|!NN*A^C%^2MyKYLc0GMLqOqzB}7|%w|lJ*2}>yv!PwVOr9BRXr>JL z_?M321prSq=7@KYAXX0|dq`ZJbu)m@R~&H73MDf6Sf@#jf#C__n};O7?bq4!jbC=< z->yCRD@W?cqn~!1jC7lf4)-wb%@}le5CG`bIN>B=5S2WHI`>GZqnHg+HqL)-~vw zkjxf@SD!;@%YO)SnH3Az)De`#mP>JGhDmu%CuNekBV{T^DlP;AW#ve*4f>^V~F0QSHy|ynZ_rhX*E~yZ#Z}XB9 zvNk2`fk-);Zf9qCfLo-P;F*5N2Gsm=GH=$5_zq@$5@T5@gpa6P&e2?zq)70w785YE9(*>MT^l?Cr}JgdD{Q;=y$U?@4Y+X{xU?f_&E&*gMz|O?#a3_! ze)ng$RxR>LSMF&yFr6}d9>G(<`<1gE?ss8sv#t=OEZ*EueYMvz|4Cg7P0gg`d3K%k z3H8Du)1tY8P+o9c%t=ud>gTm4Ek8U>@gs*E)+t~+D%#qC(`NY|clX!Au%aD$4OK-fSt8Hfv!AKctkUq-1Q- zK67oo<-m$z%>!j`vx@Ehka0eZ+P_LvTt)$M@D86UaHcR3;ChBvw$JKQB}-2So0+ir z_Dok9kY`gyt9*DwR<@;Q?9-sh=V=;e?Xy2Zs}yRU3ZXc_5#w*dn!N_dqh<}YeJEiF z;d|SDSH?0n4vN^Gxw+XAxz{TQ-&Wm}sTw|}L`4Gj;Y_SeK2tk~%I_AW0be+&0->e*fvK8y4l zM*#O(Dg%s;G#*k#s{EK4p#B_3l$DJvicuX&Cwl76m50`kRn=4kO4StFDUwfo8NNla z1ydSAm6XeUhI>}A6Lo{_D<`&ftt+mL=Mg;^_Z1^UW4GN2t8K1LCDcuBNd(KYr7hR1 zL)gPM`HQ$4XWa3VQ(Iy8-2M;t-us`e|Nk5B(m_>URdk^`v^6`dT50vA+S(;%t*R|l ztr|&MEn13}qNONmC1NLt5v3?f5P}4uu_J;=kmX8WulM)*yszs|_};Gb z&hxSEkNbld%uaKRd%;z#J>qN7K0+z%%sDaM@mR|*WS}jv$z^lP_EFi1^hP@i$ASjY z0jt-sBRVxQnJ8_gYnX$6vC$E1os9KvGVu0HWB8_wqNC~db>F4D!JV|$+JiNLGIwn% zIe#MW@5WstFprjMCsoYaZ?;y2t=<&bO9}$BU1mSYiU1_w*XQYR584472>ob4R%70? z4ONyXbzbcK`KKHsnWJB<%M#gD^O3<$JCLoWX}WSuPJZ~aeOdWj&UP4*;^{FUe;R9R zGtsI2>kJ(_d}S~BBt0pv?-hBw7wmcraQ>*n7X!;kC99z_`0q31Gt(Qsj)wcwR6A-l zq)6{^JzKC34vnORea*R zJ`p!sw9ve?(})H%9g2In_Qm1L$lJh>^NJ65<-0uG_qA9< zFAl9DTl>pR{EzL^4q40l%Q{jizQrF{tO+Z-+dg)1F~PlHSTi`cr#RA~Khq=k`>Hyo^B$stoEX_RP;+KZSAT6`()8!8@uNAO&#K5v@vMTrv zbNZg;EJ74F4@L;yB=OoBs^gmZlseW{O{noC&a01GXZhq;r{EtfyWjS^T1q8?WcL)b zZ+9NJt*)jU8RtD|-lR#3&{ijvt;438#>>u~(7s9y#r_}W7r7_M^JAXY&yb97veH}0M(P<+Ye4BLi`|r9Y_kB+I$t$#*|%YLuWE>#=%nfYrOOX}E3ymNX^g3+o};(PG@5XTL5oI5kxBi7 zAU=&NzvPNPecZ73{Jt@HY9y9^OXCTXBsayxPOuMKYgbb+k-7ZEEVVuY+xgD&OL`pr z+ID-r3x1N_p~us$UEx9?yz7n3k16}xurdH^iFrG{FYLcwxS#u!E&JAspAEZtpzi@c z?wg^%XV<6Ia~y3C=I$}l<6EKp=7vse8wY`j4;r*aQVB?X&-1@tCq7*=P-@C6df8~Q zx8<*&l5Z1E=PbY`mUb=dv`unfi~&bBn|F-=zI@@Yn&bC0%y^$|67^I{=J!}7>k5Qd zynUS=QSo-G=(kLbseSHe<~V!&Sn?!$9F=lPrzv&%jfB9l>H1W_ea4xn+CvCu|NF-) zkg|L7q>kw!5f{FDr`EHp@w`5cdoQh)M@4Qf>(C)<%O0)2CMj5dE*{gQOKETna#QF& ziPB5LA&B2y>md^nc~D|Aclui^ibZ4^rB2JvB9YNG)!kMk2gj=9fXh!C&U#Fw+mK2d z9Hlf?^;S3ick1C2ndy(DA{PtaC}2QKW!5;w;{+vwY;>A+sd2T!%;9;ZFiP}yWjbTF zzI7lOF}Lkde#&!M?*#;Ka9Txx9W;GbMOyHJ-N9$r6pOZ|kTse5{#BHlMeECu-Fe05 zsyYw>(XG)u8V2XLsp)GMeC=Y;Uo*c$p4+>0VtV(X#N2C_It1Oskw6F7M}&(9@wP;6 z8d828Cd_&8tLe8j2{@`_h%1J5?YPV;UjV=fBS&Q6*dX?~R5`U+n5g_4|I{S0jy_85 zsk;k#U!sQZ=3rxT^mk9{Q`I6@h}Z_l%2|m_W*%cgB14(G(|-RAfD0Z-5RrkG)v0{e z70TTiOT=EveKw(yM_tLZBR-iZ9S9mO`Q{zSe!N~~MBH+jvk88dA7}e8SQ04*eD-~N zEidR zy}}7aLDSf%NyrD$`p$Ns8Z@gestTwddrkQ5-1RodRnzFde8fqUh&iB3t*308L8+C8T~pCty)iGHZ~&W8y|(G{w_{3U{UQpln9%edd( zZI^_ls;r04@i47UrF&OCW*{6LV$za;^HwJ?#PvOe63>A@H|HPy9eL-Q^qEZUJk<%m zFT+bBm6>ND>%o^~0b2EEi@duUq$WhcC4$uhEFTKx^fOiktkiI_y|rZsv<kzk-lbKiQAyc(AGG-X%d zH`$*0`A&H^X{Vi!@}4r$5Rcc5G;!eJmgfBauv))5)TPR8Ws=CDTlpeq$nKx4dq1aG zM(MJ+(skB+50}5vU&E}nKd;{CuU|YUSY{VoZ;x8mQ`ZbnCz_juS<}o@aS53*4i-zl z0@YzISobDh?DX{MprY8^Dn`FtZft?fl zcBQTm)*`s9D*1~No#GVnaD{|8SE;1ZIFvyWppv9l`5iEl+J-b9CoL@tWLibPp|>W8 zKj@7iIC%qjf!|BkPXG8D+#-^t)+J)aWSvWd^)3BQW_|CLPiv61EpRd)KkusH_D&K-Qd23Y>9Yd~KPzd58Jd7>zfM%V@#`&87NyzcjU$EzDvqQ1ctVFG3 z%ODe?gHv&*+*c{$ktn(M?k}6jQc$E8Vj6;HjI~Q*UFDM!1~{9>zoJg3)pb z@*Lmc&&o|R9;byJ3BvnWB@X~$)7Zj~_4lVQ@x^J78J3D-PrJu93Vr?Uq`kp@IH@^h zfe}%pZHwVIN3ZG)iRf07r=NgF8Wo{LY+`M7At|aGiXzkf!r;ntKv!kT2RzEY4X+|+ zGf@J2$(%@9IVp`{Ua5p2iyU4$Q0|M;{}dj7Wm_&j?-lOj{)RqX!R(CvebmnK5Ni=% z!YrS(eAHWSeLRDwt9pu+%xADPRmn6C;ytqbdMlCoiUxXd^5hF~foF+;6`Rm;xKq}? z+#QC~AwB-5K2+cex0a^Mg^mZ57cSkn+IIO@@!6Wz-Y~IT2D@-iKh9;kbyY$&Ozf?j z)7jz(&D>6c!oemFti}Bkns^dQeU!wUeT@+F78Y>IEc;b<`rwxc??D=q7NNO$1J)>Y zjMAg8=i<jwTPTpMClLjuow{Os+V5e!ael`Id(G5YylHvS858SIG=zQ5Jp+ ziMf0VgG#UyiI@BP&;Gh#3N!P)?J1D6vyLgc?Fux9OexJnxSNlh%$$jP`n#|{o48nL z;JU}v=iv;nfd#oMTe@%n+oQ72EoP=oCUx0;@zbRv322;5P%QxX?`g=5t2;p|==*Dshg8ARS+>rbjq;Z4$BcAOJ@9;27k5UP{5 z@7A4-Ni&U*#VVmQn$@MlG0cbU^S)Zrz7?2)p0#^dXByy0&Yf<{n`MvJeg}>pv4)_Z zggO&c9D>`r<0Wz=I8Atln<~2oe+3wXRl+nfVA2ZSNLNq$tJ;xwHg1d`9ylq0Jzgj( zure9MqZCEvmTmsn)9=0(=5bM3z$S;agu8zam}8#$F#4$7@CrKxJr6}n9YpzxgNsa0) zOf0Q?9pB2I@>>|QqjoY2wW#K_EiTCjS|ry`g4P3~e$4ZXPIaf1FCVfl#FMyk1KfvA zr!3k94=pqfLmyaXOY?l{cLgqkNmp)WpQ97?j|~>#njUTGT~^14wFF?{D6i8@Aqa_seCV3nj~(+!O;Zau90 zXOAy`(eW%j6@)srK^NxF$@NKs-AZoUU~R&r80X!d9%H-8-^Xgho(x5IV04e7fjO29 zMpIBoaZgq7aoPq$hphDiP!5>@a zHW#ZsXnUW&pIDVX{Kn(iR=v^1fC#Kn$&`{+R^wZtXnpRulj)q8rLlU5`Nqshwxx~E zcIgchQ`jwxWrc2sI+s~?r6`MKv64yBea~SVBIrx;5Y$fg zh5b)@1NaiO>xC`ZVWc!reWLE#Ay&IyG<$EV3B@XlddX+RQIf+wP;O5{MeKfrjE5bg zjq+AMZYnv1xLj430Oj_hqnaQutZ|4bui}T)AhWL#=xiypIb2w2>D&a2Gzz9bXoVv^8cq%YBM z?=P}-i|%&trNkY!>ZE?^d^4l5Cvd7CFmuFS!g#$EYmgWe()JQ)QTA}Qqo{jeeIlyj zc^2v|+EItO zPpDvYj<-T)Fa>1m)4E(>>@iLYz05$`KWi`a#!b_al=KZtnXHt#0Z~#1cEFyLyHE%Q zJC>J6GALx4Ry`x@?M^dx`MJi;OZZK>QzLzNWHWeD7@dWlK^S&)Zd&?i20{GE)igFA z3EN7@zOa4oeMLF|-j>Os+R^tfJcQO~21)iB&#Jps8s%ZSd9` zdzZ%ui!m3uFJDTnl^Pw}_2vZm$YINUwO5-!MWw>&;FU5vmtgSS)Ro};JE>kw2T}p# zI<6#cA*zKYCirJtZqPiwfHb(#VFSc!9?!@;NRKH`OGPZ?#UF>AU=`Axq&W>hp8*Z- zt>QUz31Cp=biKdy8_1-{NB7hcJ$U@ZSVPNjon+BC%M$}>v3uTFTWUkh4nBv%b;L%G z0I}DwNcn-FJLbb@D56;#aFaHyH%S^LZ|lLhvo+>rGxO0^m ztfb9?-OayZ6o{x9VPcH`ZVIfY$ZyM5JSWuZS+0iv>8~z6tjFp>Lx%u{ zpS!o{cDN_hvZ8-bq@N&yf62GNt$&F*9Q-Tvw>AFeW)UXGq`@&qDgi?acF=IM+GXE{ zT*8Vx7iqI>_Y(3v?>81b-yo^{?S62U6AiMlb{{%YzhIgZfMydhJK?Kz&7xu4`tlhI zm&X9JW$4ak8osWX-wcsVCh+>tTXZncBiSmB_4T5s(qOtik(!(Mo6i-To2G_7)4@mf zpBDS4$kSQeLftS0xOl|xjLuF2_1+Oe#E{|!Z z|49K!zSAHTcnvRZWiD&jHXNPMxLpAoIzRwAJwCo5)>{;FGMpwta9Q2^xdj!KhIg{m zxwK)6LBKTY9bD{QvX?7VjRhUON5iOB%N;)0%gkwVyF~!X_Rk>Kv2OT_IWVp--*HF| z?wpU!Q5`QpOiKv!$^Oh^ZAT}rw|9^ zYT(4$pRMS|K>uNrm@G(Ip#QIW+U7WZaj<+RJJ5fr`atdF$VQ&XU`4>?DPJ5HZ|E@M zxg~^s_T4Mf@6Mev+TtTybzW>U&g`m<`i%I*Y8gF@y)uxlGtxB08M%}@vs{njD zrj`g9E?tG5HzQZkizT-vu#O=G z6b())ln_^llsn+`JV3jVS$ONH3C7|eKf2%?^xexV)e^X(X#d$p;>7WB{8be&Pi1sV z6(D5q#DZRYIN&z85y{@Z5LAq{xxAf83WsRFhHbu9O1$8L7s8sh_Q3Y%zsMye3fdLE z#JG7y2txFOT`R4WWo1*#15IoTFBYdU!UH5AXpVQEo12(ypezmt@joc`|m!_PK^!W4al? zVh;S9*0Ga?SP`v;At5#wA0b55NMpO|o!W``+H>en$UGrn9#+#eS8JutHHG&rxQzv8 zs1MMTAU>8N0Bl@gz%x) zA$(bNF8q9BW<1HE`groh`l34te#`Gy#_2(8{2Bt6D#8h2(dIFWOO6)L#c(1AHsboBl`@a_e1m z@pK}+9pXCvO_E+;kV&ngPWwRsWPa4<8Fq|%MJwX?s8-(ghJ1yKLs0rDJg_g2S1HS`Pjs^hkwb3al-mR5tYJ%Hk zHUZ{?cw?=|tv3zxlLPpwX8A)+9(&QKFA-wiz+fN6^TtW|HXCOfP?g_AgMClaw(}>w z{v7VO19>=`o|Z)54@ys-<#$CB8`w#-YZ`5xG>=Y>U~S(EMd2eNFI(ySyLF?q^(W!Sq;v`uru#%C{Mv10vizTFWQECd1|%#a&Mtsj%;tJmmD}2ci!OJPQR+uU)}?4SV?9JeR;X$|9#Lf^u)Q zJ)8=L7UtCeN>B6_5iXZYs(vxsWe2H5X6v%lO=ZbPdJT?gzIzS1MEE_p2CKx*T9yr0 z4D|^DV$-rZN;+S}q}iW(ljB*mTqCzy62j^Oa06#|)x;nK)kL`Mt}6`)EStWXQm)hG z(EPjgNd~0fyU1o2Vb7%ayK-E)X25u5r!3Vu70Vv}kgwbz58*vl_g^`5-+mi}SR6_C z%U^ScQ2;LzIpq-a=sDraXNY!gv0XANg_Y4-zf?XJeA%C9{r9wseP=U2M3Cab#ua&4 zyx{(>Rr;K!TL?QPsoQ>yei%NJp7y_rQEUXSTV_)|Yl$On^Jfw65^gX1=CI6nA>mTp3P ze_%ByPKLGK_+V>b#~0Oo|1Y6UAoq(Y8P#8<>%{EYac~+tWTt}%f zC?yyTY<+uBaAK$0*!t7`J2M7ar%g_(mG;rzwyS%CleH+=_--^$IR(3k><73rzdGTJAdhCd2>d|XRiAEVn*r}75`gQ zRee0S`D0WetW5i!Y*fjsYZKn&w>-5b+_-;Fcp=Krf<8={RrMrB-5$DsuO!5RyHvf) zO#DwJ4F7nsJ7}s!rWQouT0r={3@)JT@DCZNwq%HA9_4em$&c0uGD{;;PEf`B!e$?pjwsIjqYBM zrq5?hiGSfcnlmF=3okzRvDlojz<yIx z-lJM~>agDg+DGyQugbS;`^YE7KlbeUKl}$9(gMcweW5E0E_(e7BKS)T(OpYt|5G35 z{(4qkDTE*URa*?@zvYyB91yN#8r65;NaF(k-IFP~qVPqiWb5$Pu>YzX{BuX=w5p}X zaDJza%a<>U{P!dL`OW#C0=oa>?A5FP*X{Ygo;dM;4az@v`0#%f2>xe;{rms3T>mxV z-dF!qE%=|)FJ9jMA7Z2boNHzPZ`c2uz5l<+UdOe6yzBmAorvrQ5GBXR z#7qD*n-Ur;A|3ok19KwAs)WXkM&h@1o=%yq53XASS~mKh;nyAOR)=PyyY_?ZhlQ&_ z?AY&ZA*Fzg$M)aV_y}WX_x^x7qa8^Bv&b$CfL-6trsy(^Gxs^mtNnvw_*uSt{c+}q-eV?Lwc*>=P(p@}## z39YY(&;wpU8+{kP5fI!TC@T!Oc^De8CMi;w#2PeKpZv{S4tv&3;;omjoc`%X8ruA_ zpwrB!`*42x-zpm<-RQ@C9{diL(Ri?epGqLVoQW1P4fGi)3u!T`n4bIaM3RW4RL=aC z=4-gx#X8p@72z^v$4DvD`Ca=*fBr=Hh5BSoR&rfxqv(fJp0Js*<0!=DrJa=yh~9k5 z`SbZ*nC(Ol_tPi0ZH_^*0njr0`lYy;B0WBONm^#>&+-O!o%u)iF36*A9b>6qU6?~E zZ<${^*!1-QQ2hDc$R&wfm~V9g;yml^%0n%pYyY(-zW(|B0#ew*!-pIVL=808FO2r~ zo!`&Zwgr~n6kjx*Sg?nzrqZ6HO-)z&;Uhsth|C*LxU0f`&!0OyT(bwTx4WGGEPJ09 zUm3}o{i({`wTrNEujMGXq_opLlu|iwdkU+wnTS%#ZftP{U&}vStF&k7Lu+`=)qYU; zJEYPrO5P3UjgJCUoCDlR!9FB6v-fzAnSHTj-L--UOU6Lr`LP{i5lK@h-(kML@U9b@ zPny7MLd=oU8Y-~EB1eOe**Ba={(b*80ESMT}!mGDG;RtEuTeJS-bGH0RV+6TD@ z6t?Wd>$Xtsi6U~D0AjX;CKcYL_d~F8GkiQa;EU!bjUs-<$ESDyDvJ#nhqL6h@lRes z<_Yg5!`%SD(xdzp#T_YeXpjnC(3PuZ9N6P=VxM4#+>nZWQhLvshATE23zQq|XxUynnN*h?Qc|QshE4y5G`W+gM%;8dlX)Nm6>p!WC^(^nqtF4w+IO zMU=-AZrKifKwaW}0HuB1$NP-230&Zf=60kgNQqlxVrl?be)1(NQR~S_S?43kiE*X3 z%$HeAt{nAS0Cj@?5#Ck^%vdHFgZ6S3;RL6QWuIhJAonXVh+18RGuu3YAfmyISIxUB z2^9@D9Zr=cM)2w8-O1D%l47BNa@nCw3x&V@O>PWVc#~e}c281r_LV z8lMojSk>thPFu+!<}Yg$vCovRtZIRFWZ8+rMZeZF`)2tTX@AnchQck05;P8!A8J~% z{!RHa<0sK3HCJ8vzI1v?=QnrdjYY#XVSafM%!VLvHeb1m!J~{c6+PqAcws;kuwT$d z*_F0G4&lO6RbyJ+x?OG1So8{$XwXqKkV8wz#G8g4_ACXf96_2cSLSB$yEsXEgBN$& zodpzi_BlulmB%TbmYfF!#4svS*{>(Alx|Am$b-F zNBsbeRmo_KXZlNdHO)`Ykp8%_-_^{nZt#;End?#vEv`K#-q>lNs>>DU&%I!nv^q}k zCi*tSr7dP4;Xc-Lf{gnE*YW&BfjX4(S7t#iy(8x*3?qd-m2 zZjYV~|6ba{LKYePJ*bLP^_X5L&i!>i2Pqdb;l|MlW4| zc*~Ib6;#>e#MaK~Krj_=AQsum@Zj-j5$o@@a_l>m;O^Mk@#KxSCj7o1i8fB~^9`mr zbZPoqs!#zAT!E4#K%cNdlW14sUs@f-5%1DEQQTZty&Od%3_LJ*Eu!%&&yCCJFsR677V>jqQD1H4gn1>xm^Js5FPk z`j=UNXw*eFls#TH7n3>$@Yb@M*OKBI6Axvbo<#-@)SH)-GRYCIhIPp`C zzFM~K5ZITtC)ljuy>=n?zjORYZ+d!4S~=OHeDC{YE6FpsuLwVO{Nx&hMI^B*0ZJfx z$^?E^(lx^*(Lzh-?lNAj7oR)Y+(RnrOoN6J6 z^B+svAy3fpJVH4=c=sI%k&S{Xm~Zj#yyoZ4iyiibk2uPC$~|I_kV_ZjiB4wr0#9_* zY;G%pOPpexHAbQj3P*%RpjCX0>CBnDVT&$-hEajHuMpexy+2O%HRAQ(oJY7Q{L+pZ z>bNMB9B(ZlyMvFGYgh=aVB840{j0eS3&9htofdpftrx2PO@+-qp7sFi`p|zO$P%%* z5cHEqE+QdKe4la92e)skXY3Q>#dFk4prcQR035;V=$0bv957`=K78r1>%zHjI!YF8 zeW;|lJ7oT&3wLcOKF~wY%i;=oZasIQ^61N!?J=1K$=l-gPJ@g0JK=6H(y;I?Vt7iH zG^3z#d!P!KQ{h&?(38M#MC{O)NMk}{=*w!y7K(Tt44T>H4kv(b1~t%I$U%iTgx09L z{`5n)(*Z8C21`U2Y+nfs(EgF5OYHE{tpeA1N)AQTn0VQ#=J3N{Mr}7jFSd=>d5xy# zs!95Ai=69$FZ#-oau)~ACxa%K>D3tHun|@D3)6KrPy0zLZnfKZDOTk0(V(K^`^}`q ziSBPneHp0bpwvY+E8_BxT&!nSHS^vbllcof<)BYa6Ws*4(;LDdQBLr!9x@pbzwQS2 z)tSsNU{rFc528*@?(w%(I;<^A%-L@r%MBsEf2|_z2ZF0xI+kVZXPgu&b{`3(u$M9` zz2}0{J^)F$EnjHmWs7Yeb06F7b<`EX+EfS9ouJ)2s9z{0$@w4X{B4nmcTZFRr(z&V zo|{)HXDw@Zvmk6~Il>_#6~45F_n@;LmC_13HEK~wA~4!3?)D*s76CdF{dkiW5gxfC zM#vshDNa~gNzs}vS05t_5FO8mv!h!#PJ#mId-^jx?DIJ1j6s6mQJ#h^8VhK#{}*$tIg#sfE`f6zW>wWW{JfzD#^AIqzBL){{ihW` zOC1!lxKIj_S;pJb&e%Vjc5}7nu|p-AH@D}V?oGl+uuW80C4iNml+d&>_~8m|pkgE2 zhet+FJ@q}21mMklBROrpB$+^<w>=xD( z2^Z#=)o4oRNkG>;gT6qtqB}f5Qr>&%2GAg%r;e(=2>>NOQRCo5rgnT z22g_Ow1gQG5{)}4Ex_(n115@(7c&NV2u_3+rj=fal~+vnke-k)57sYPCL5gZnGDsefg}^z)2BuH45L29?*})r^ow!y%g!n+Zt(|8R=Z`6~^Ov5=}_ zXlF-?L60e2T(fX(1lxbT0vt!UJY@ZYV6M!E204X3W=dsIWe&A8hy>I^WVvr8Lt{a@t&h&m|3c572RQORH3I(9>1c` zrk*>+n+S!<)@5@()GDsUA~w@c7BSu~SB~M=u(7pmVc;%+6w-QN`~C#zGsw^t+=|)` zW~%d*A(Skg5{puFrG^xTJ6bUtakN@}igy;+jX8QrD-ue~n9#K+9n3Nut++$nsOt2? z-<3Y7fLji52(eFb;Gsr2d-tYy2xxGk{yM%*vuAV;o7nZ3{djGYq0f~Wa#X{F zbsoc$mOVT*Dya@kol4OC$+ZWLJM}649Rywg=#Jf*ODP>v~>?VkHQ0YUJ@lUcS65bERi;1zY$|4VG zc0L%42W21)Cqo|KB#1PL-nO4xOfGC8^k&%n8;E_{SoV*?{Dm{5tscc1Cw!geb|OC% zr{eLxY9DtigZ#&1+vSk^K(eiitZ~Vj@-X@cd|y?$11Mi1q8!%j9_!PFlB*6bjnhUA z@$*>s8Q+Sca%#IBH^;Ry?8W-!s(y47k!5@u4;&fJ%v`8F)Th=8+8#7X9MnrZ9kFrQ6|;`K5}Y!xo!n6PsY~m z2g>q37OWM^@eSOKh=?FKu-H3F%3J{!E(+hs=UEnoXB|?s=uJv{$(@7-6`S^G;YaWy zJ9g_dUwdg!>&4{J{Aktk-08_VAX88$W(Xxe#*=|u?4+bHJeO9v4EPcFn{Qt6Ao9>8 ztEup!R)TG~zh`|>(mT`Grb|UjVHWEsD9VxMX$@a5=>@U$_5CB_Am&9PeRZGprnU7p(I^Vgrtjm<3`WPwb zBb7*d<;RqInE#@`K9E3B%C8y}tnxZ7!JsvgU!71ig*t2&&_lj&Rk#k_&22vC-TBtV zC`*l+0@97Kr-~7?hY@K`2Iz8OY3a!4JsmS7yX@TVsoL36t>oIBpC)&F*?!#a#O-je zyvMAt0oOf@OmwGE$Rjfq(io~1l%44MnC;-R=^&P9oPfIRV^8eu55FG9C%5jjMkWcU z_Kk*IMYs?)XAoP1_HFQJ&D0vcPF> z0_nix;bTbZ;!LALQkG#!oU3T(V_V+#1JA7t4=oZQ?IiO%GsMN1qEks9cC<_qp*mGl zp7|01VLPIemA52_BQ~YR^X>|`Xu;bXmG5<4-^Ted4^)BIVoSw zS6pW7m>8U5a8l|ZIeNt(H@JAvzeqOwP2dGI39Hq|NHTFCl23A}rrW7XD zx{}rk$lg3HU4GEZ@t=0z{BP2+j{QN%$l3Y`^{iP?|Vk8XRN1cR3L7&>l+nX<2aOdc`uIWNHmg)4X_j{t%K&WX!abauqF zPDC_0S0isTTR%W=pBIlxh`#4bkd;y=8Lf6nsW)KS;@hto2F@91)}PSb)}#G>tBi#;buMUUZev{|snxv^a`s%&IB-1l`^XKex zNW0R^9Ee?0W}CBc*I6C=x7ly=k#9Dn^wIOncXE2m=;H1@ls1Ct#FdD{#Eo^O-_i#{$?nOG+?E-L zZoTrD?$X8=*GpP>FP289G>Rn4t4f?WdV)AfsJv(HR0R&26pqc>H)w3Z&h$M2PvIs2 z#vNm$Ij+|PiXN*_Mb)1Ig|rFRdx_#UnQs2>86zu66Piwn@+c#2usx`#ch0 z58e4NvOgrhYG?w_2hh^{+Ne7c`hK$FY~NuzO!8u1a8-9Uu24PhwSOcHfAgI`O~nsG z$2U~X4~CP_Uv$TW`I5J+fg}=Z8fjH&;V)-L6Ewm|!)e^I_8pU}$}N)#w0Gn-3N7!u%bql9F`}W_m+Y(g0<*4s3_bT5dRac#@aKkNI-#Egb zWPxtK$U_+CX|FC*prK{NTy#!5=0%Fc>vd%*Bgu~H$*b$~t=lgRcLJFa$b9IU6|GX} zfwy&oCr0a`q_c>U-^rR`?hp3H>42k$QW?Vv) zyTyQ9&P4B8NBt#!?B@}jl4m;A3Aj!C@;d}cZO`>|x)J*{}$i&k>%YXzg&Q)h$} z4(wIrw~n`q$8Wx!9as){E1*R`j)d5Gg&V<1UcbH{n?FgHld?BC zBax0d`HOj8U%er&H<0NijaP37I6@}1tR>2qBZ6^YN#h*DP|B6PVd5jYD=WQfh+o$t z!V^`MH)%2rhEnQ3*Vky&?B0{6^<=8-2J7E#N$cMnEIRLW?nU6S0f|BM!Ef>1;fs5I zWXuF4N`!C(!UhD8*Co!!6@FKW^wbTiEKzd!Wc?}BzXAO|T6s_qF)OFXM^ux(892=w zHwahr*|wtYE$GEcAH8y_uQj^Ji1o$cD&ACR$Ma0c^eK5 zS>jeW_`4JN57Ohpq? z=!FsaEZ=ev@hNd3t4r-7uQ}+mWQpzDS|#|A67O}q2r|p2eyQrASPW$YtQZk}G3bMa z<%BOS`%-dFZa3P1K>fBkWP2dP88_u0>$-Q3urk{JMM z8?&}!mNae=0)>S4f?orA^@%m@I)`tKOdKGtFPby|7c5zDpZ+!-U$Um|;Jw1b>!|LQjs9z^9&jn=co&DWiHlMwG%rVCQCr6%g(F zI}-WMaYEbDqe-C$-{vPRB8E%_a5DYIr@G%5TPXKkqiXG8G;yi3k27qP+!BSgPD7d) zcjiB7;!QCUpTl)2{&e^m+!n}cwh@F0#YKD=O=u!`lqe7LP11Z&P4mtGpRf#07KAS~ zRK2_;@k6DF>v&bT(hozipn6}9<52Of7|euW|FBgq0Zp%Rzau#4St`viaz>H z=mz>{a|1ZQbobE)=W5xo@y9#RdW4Xus{rk-Lx1H|m4K4?^Q6~K=+)M5>*nUjYfT2z zmicOrB58P zHZYf-G?d(GMoEUxGTKa7%~5Y6%ItIA-I=}`O{tj}tWe=0sAoauZvEG(V+o-3AKDV- zmx57-;^+wDx6RJe?e9&}%q1rlNSOwHSsR|7#2h%4@z5r3vB=@|hR;-O-1*56R3FdP z%+vmumZRBL&D*m+M3I{OHBfnRZsC(MUMqo5@HItdR2j9%om;1g~G-Zr;GI zQw+Z{2I^`(M*8dcBC~N=lHX9CkVa{AQkVS3&fSP~V(0c!X*$bV`Ho@6vGY2?eJ{N5esjQ@wO&~o?vX zs8I<@Q{#a&ghP|Y$d3xu!vZ!iLiVFkBju?p%Lt*zV?q|hlz7)|KKc6fWY`8Pbsqr2 zzPB=e#Hx6G>}^--l}k>X0kXU*RNQ@_hVr}y%1&U<`t$Y`Dv{U zD_H3X%@zi}L&?7hu`gxqoUMcu$i27QaYy&BMS=W}KcKn`Oe$cmBY};*gFF{-0w_aA z@($OcCpdtzb+#e9k=%VLpS>I8fmAfP<7%2v+k;}FYh^vO#`zNB*E7h)eqHe|RVLJb zlHSr8WrcCkEYrqAi?hA1Iq-lo_vN}fRWbn#eZ-Ad=m~02Q|V)L?IQ0Qr^$hrm@5jC zf(B|mDW@WIWO~xaZ$(c0ngH+d1SN0)LLjtM-Rjsrf`*5_YjF-b1b^Y9%I&(ugR-`I7 z!{nR{N5vcP-|50m1bvbu_39ho6-wmRoR(FKf>$3ti7QJk3Ds`xFV>YZa*Y#8VC|6=dU|DoL9|4~{-;uI-Dbt+{qYsiEo$#xj~ zk|gU4vM)0uMW=*H$i8JT4B2MvBSLoB84THteH$}lX1=%cIq$Q4KkvWb`}khJn7Q5e zJ+Jk;uGh6ZFHhR7ca@m&v@_-1D@Uh-an1;zdB_CTpoKQd4=)o8_7w+rQ6 z-Yv~V+_}~lh!BHVukKWl(X<2$j5*W2@ka?3?cbhrI9=-ggkxU~PB6qqRTttyx}Wdu z{*aL($y~Y^OJ^s&5aJLAecXdW>9>n&mu%{dhP&Cc&phOV+%1_JJRW5EDaSvRBuJ!P zq-Cyj?5=QK0hc3m9cQy(;G4seg9;F5h0hDYqf`$F0z5{74ka$o(06hWzTLH1+7~)( zGDPvJmPg50_w`RFA*ipTm^Q?Z3Cprn(ps_a>fCNCu1xTPOBIsVhiZA-;=Pr}!B8C` zo_uveJ$D$ZnK+0DG!DGKA&&_RqP1`Yko0hG-v*0UCft3_n40p5!3Oxe@E<&B!DXKz z#~fC?_uQ>m;3pPFf4FI+RsvW|1qLGOo)AiErm1QKVy>=F%+ryiUNqWE9OWz;ByKVr zoGrR@ixfSs0$W0%2HP*yT5(078mTXkrB?Xjtu06;;lqSVt8>-DJCFtPSGmrZKkugz>GBp#>*;izpjQ$Vcn5c|mG+mU=tq@uLH1h-pQY_f(@K+t}b& z23S5CG|*p}UdU2u{jPVzb$586;af?ywVKr36&{XVCyH6Uy;c|d6Zk}&=JMm&XKR^1 z>yjhH$`mc#iByU1d~th8^{J_zaM!fy zhYm~Rz=ZGnVBIeJ`ReQk4nuk)ou@USHm@M#eY=utmnhhiqG{$3bU>_FOf#)6jH~=S z+9c7)sS!3-fr*&^J%FZ-*B4F5mCkMR)i2?v~oDozXq|y9!IR`4V*1mX?c8!zR zC1VW1Ev6@S+S{bNb2oSfkQ{z^CI|-2LVj794K(}KB_d}_uX1ZEP^MS8yS1fCjxW0@ zG%ivNM(odl6>ZB>01s-7fSvlAxBwA_A3kCpV=F6uB31CNF?~W=)qcRR1+}`*gujqI)5PBd*=LVe{Cydj z@eajy)VL^xd#RnuOki9&eGsHGE+6Pv28xWri64G%s(T|krFw>LV>{_bJ*EeiJ_`~6 z7XJ{DE>OJhp|Q|V5}qZ%L$Wz+kbRlcHjV4{YQLoF;$y9a&{yR~6HSWw_i|=)waOgl zt+y}%J!^6jyZ%Gs)gD-TnntT5kMS|<+|nhTL4`Q1@aYNt<<}Q(U<)(`zO;jOWXhB9 zCrY4DJ|H3<1UF%Ipi7k1^i9rmE!?UTzSRmN3aOSK5r}OmumIs^xr8ndbEKp;uXHJ2_L>-7?2K zCP5bjqL?19q9`;v(auy&nKgD-YghC+T#l&4{=R6!+{Mji_!w^$!R>Gw1=!?r$(JxC zLra%B<>K!g=6*7txh(*%K=dN@((-c>I+d=ZFWp&Ahx3Nx{Dh44iItMu( zrF+6F6YaMUHW!+djO?4|bMdEw9hq!@i z%s889;G;W~kQUjgQ_w7Xj^ zN)Xa*@pSp_EtGR+BU+%!Gs-ONHpSJibEgW#t6+qkeKEwT49Gf!&sz=CY!PX{dDVM{ zN4HFhb$CC?Uy=oioP1Yaob!~=8@A6$6`2Gq{5`+0U(&LiKkLlBtx^=2 zC8>BjCE2#0^E`@m^mOx!L-PCE4TgbwF?`=K4MJjQjzd-4IYT$4KIOZ740J}wsxmX9 zB^4LE60gFKr={rWPPe!dtw`4;_?ZW>8Nq{+R>SO~KbnZOE0bsjio;PJpY;!f|ba)%4R$0in~-9Y~e_PTfJCqNHSK<25ijIS)?~hhFh`*AL-(_O zyqR_pj#MCA1zF^FmhFqz1EDBBcWBD4`ZTz?MKmTfgP7_<1cHX-6gjaEO9?@))jlf` z6vzp#BAs24GtbtCj06~MGfz<&kHUuZ;@>+7{$On?}+@ZagmS}8&Sw*JJE$RJeRRjf5eqrI)+xQkYjzJxL-PJ0PwVlGv-x<`vf zlk|-G9BD#O;eN>xL=n@J_%7Q|0c%sB}f6*^sO1E5XWU;S!0=lyE zkdQyjuxhW#{aFB|`L0kOZ!$GA#xm>rTYVLkQ^#9t9(FUHrVJq~7=!-pa4jYoxgi16~XHB`yX< zvjF@g`g)LNOMB2LUCz5kd@!fldeOJ)1P&W^G={!kT1mS&E?%@NO0Zp4{;<56wm;sP zu`BQLv-t=T{DHpu4b1h!QN1OaT6njp#_KFyf5w!9i(&Ijz? z#d|DOI=xc$45xjLCbTzqp47hgh4IMK;@-`5imgj6F~xcdpPTV72I{U!Y79Wt{S4An z8%K`;2@^xxibfnip1g=q(i@<>fSfIS!1tziNj2w+?PnS*8>c>Bl=s)%Jn5|F?1)(f zqRI#3wN^wz;l@Iy8un+TY7XAqK?5(i&Cp#D?edB4_EBpK<*C{$d{iN9Frb{`&s`F$cX6YHXe*eBN>a|J6eWKQUQAK!$M{fZBagD{8x3-3^R!*6k zLYV8N?T{vv1=`fm663eb9Hkd@3MB)opdR*QRDZJ)ZcuL8BSX zH(TK_u19&cqQsO&;zo3BM<^X8VCb99=;qS|WWTvz;-iaI!;ID_d;1nchbTU8FE!k# z{JpK4y`!jM`R<}SmWkZJS-+qyti}b%L(TGC0|5LcpB;U zYqU}Ev~rRpK|wsq3dirg*q1FYLTF`g?L0cKH^L?8hHKyb{F4z8)3B>qG9RDe^`@sz zp<4L3drkw_b0s`-(}fdWdx}G_>wXSxXY- z>CeE!kJf|N*4tt7%ASnlCtrL`y=<>^e7||w^{AZp`FYc^#qg@FzINy3!999FS|MdY zWDwOGxw|g)yQ#VR{vx`nj*^DiqUa6!F-ymX^`5l+h=y12LEjBv5M$clj&LYVO-IxV$Dfo-qp&Ed5fHQ7@c zPjj+{wnieRo2ryX{LJJ?Fd?ar4#YGRZ~M^vM1kA~B?f5+UQxx3XZGSv5 zTy31_?V7f>hKs;z)heFJS4yKJ_D5e{MU}P{-v>kcs^MLOuVKQaJ4xHePm`L(=H|!! zr)+6II-x#DPs6}fE9|QYcr9Fu(S+o7JE_;+kruFMC!bvR*n&Gj3fGPC|b%AC40(|6_5`U2p zcYZ2*>1*KP>X_LqWW;0Z{;vba_q7hk!QV#C>G~bacHPuHVA zb*X|LEMcdCAlyRRC$#%gLiib+Ly-{qBM>0arENsAE}|kQ?D=U^m-Kzl`2{KWc&CA& z%8re{(hr)vEyYZBq3xzr>i^PP*%37u^u(bntBN%}ZN%3d@KnUCk?pr{N7WJIvt`z` zLu=>O+;@4(YVr6CgQFn{S8I!>^9B(Mc@1Qk5XEfMXo&lalxhoLL}jUec!#A*jhZQO z^$en`H;BiHfZbtSNA~gg1U|GW0BtK5CaVNnt8BL9EmlLfSFiV-3mQwE$N|zyM|T!J zbEAr`Ipt_wYYMM*9kPe{k$Ce1CC;3%ouEE0akAo%x~<-`2Tczc#_rV3uvs}Jw_Dh% z6j}M0uf}K3H4C_V0>~|O8e2)$k`Opx0bJnw#YGFAmw^D1`uZx{wdr#Je9v{>C}U;k zktd50`#t;D6sa2ot*dmsXxNQTM=$Uj5v|PngxPJ@9-C@7L|`b zOq0KJ;ULxFPEqcMK)olE?Thyv5^zbu~9rO6AO>?AwSW zKtvTtPmC}28JNK+Z*<1uBm_d!g0?=i+DU@=h~vP7f%`W9wda1?|U#4hFIL8NF(l z8JYbpR()V3J%3Kac6lyr)t=`VUiDP-(7HU1sx5AI?)1_$5CQ4{J7Rzwn76+;*|R4% zmMQf`qwh1K9J}LCiAXd3dV4$JsuLW)*c@3NHw)x-Ug`U7&d|YOUcddRp(`O{=SsfQ zh%?>fN>b)5%46e|C7~F{9P7VOBRV;jdc03TZ6)6awT#t*Kd|LFBjGr1kTFH|-f*ZW zw?c1E*X;Bz=ybdv+$~)WwCmUBX**&t@pn!VFnUY90fluhN?eixycuP%@t~*Qj4D|= zYy$Lswikn>!qO_uYtI4v=t4G$XOxTAn%RSJ8n5yb8Tuokayxn?ReynpH(ekzrVYRa zDYP}kuzhKGi#Fj#r&i$?l{P1;uO<&M$OFdt=@hLz?rr@i6IJ zi|4m4b4m?Wb7_(m0q?$EUR??#TX&~UPOf3xH%9H8^OexZY2IU17+6~GGZSL&XpZqM zTl%lQecHdH+->ruzOfBur27PD{E-tDs5xH=+FQJ*e;e|U7@x<6&b^t#D9o8$crADM z2TR9c(rDPZ?UeYs2rM)e>&K9fp7bg$p$U}N7QQ-06JRNQy{iV2a|M64cdte)ti9@W zwK$x1z-T&D4yOxzFuj56I-Xtkk%K+GPb*AFl+&qIS8auvag-O0Zf&*dqfdcsm%ubn0 z5-i`4UhB3u((k;b^alGJh+AmAIC^jJxL7_j-@?m@=4*L$%RsLFKnAer_E0E5B9Su7 zC(g3YKC)N7iO;U=9b-qD!0s)Ur!oYtKRBwJ220h&VwSQ{Hy=^uYbwbKg(Z#RpeYG6 z|IyD(BESkKX{(if-o1)D4w<1%BNs~N$P+>Cot)QbcKTp(sG29cJnzDZ+f{mB)!F$; zso%uD*Vb4=HKq+USIpj7PP<>aP*e6z+PG3tRxq(^xWwdwQ9EgUDr`!La^CGMuan;lo)2C1(asbYw?gNfbCyILOK6;;$1g;n^Nn z>#TBq>DAr7ceABNsyLNR|2l(#(VMIe?8k?=iXv2D+S9#3vb7lx%0RmV$L|!G1E{vH zx~0N{5KGbTf-Ze1(f$cU5aQT4>f+2arn|Wz!orvI%H0WPn%lOQH~qZR;F$5nj;X7(3Eaa3Eq3hz*oeC!XJ-0pY1+OHH0r7NBC^`TicBL)oFlPZZUA4}eyR1w$GJvfWUPLs_TL6&Y3BKRrQW_S;g4VBL&7>_!CJR^J)T}%Y>&Q2YJ^ayB zpHds=FjOAGSp2c`{^~6KEsJ-2iVgRp6?XQiP0`~+yc|vn*{zGU zsyX}~;s&DQC)M&nFsJiCX1!TusOQ@_qg)Bn;l*lA-d7qc>CWBxyBK^}Llq!}Zt&}0 z%XNt(8}g2eD%{KE5BhynqNv0_)?>5o{xPdYDGT56k3&b_i1xRztrhRSZ6&OJgIOt_ z&E2i>-w60hwrFyJ1pZYW_@I3uBQs}T6$a*Up_fHpnxZmY#ktRMv^6(`ZHXF3LwFzO z7bMnQ9nBwEs+!kiK4qP|yiheN1L7Qv_5_kVW3s>2CtOp|}od??5#U7XxL7XIcN(ex9s)9;z<43aC zBmUobmiyLm&|0ZHi_!cZ&yfpmMNV}J(PRAk1geQ;{BdauWzpO`Zpwv-ofkLTB?e6( zRFfb6Rn{w3JinVRn2`pi!ePn3m#Z13S3gixz($HyFSm({KyFEHsg5t(#rD}}Py?>S zITYv%=6$g`BYQs4^vf-5CwF=G?jY8p2!K%d_1M2w%Asfwu`K9SSl^QeE z{y3An62cQ!2kBTJa`joY*w?ld1aNG)4Cz!x;ZpGp&@y^yV@k-Rd9{T*T@)K0SHza= zz(xYK!zuzk=d29t7IQ-r>I8zizk*m7Yz`;e_jAFjHsT%(gtfoHxl%+|nx>DDzuqKS z$MhKvE@q>|#)MOgdUEvK{i{oTSC*axOq|K(PjgUnf?tKR)o<^(|6_mwsM8~CJ)Eui z>iInu11zI;@a}s|69+TMp>R;g$}!`o6IDBmnQTh`{x|h#F;ifeT5r6T;N-}R35;CFnNSMA%TR{q`Y2HJneKlXh@FqfPKXAXUXMHmXTPld<()b zkap-9L{@?9A)uv@i;UDDcb|VXM>>W(1oj;WVbo-zq_;{O_$ovXQdXNY}4~ewMNk57nrN=zxo^5Csw#=;_2dpz@vrofX+RL7+M;Bk%YO#brv>Q?5DN1K#ik)(eR?C$<&vA2p z{9(`Gu*X|e%h)f$!6UVkZ$1ikXEx2pfy!uor>d_zFza%x#}_Rs)_I1cyp1AlmP9~` z^XwVr;Qs;9{Hw{2u3lsrPmj%)HG7v><_zz3G!{evImD|B`|Y?4}RL1REpm(Swjt!I1p*U36w z>QlhFoO=2OYPsg6j0LOAl0laXEy+TrCgRe8fqGv&_0_oLE}uCWDbb>5&b}kguCRpy z`<8~F@XMS>>8RYBUa_<1Twj=l1(YgtXGTWr7zQ$gj?W zNG6rGq*MQDcZWBirGEZmE$)$HkP_Miatl{4ppFCD)Rnc@VOB-9e$XK?f6={o&X09Z z8OIBa02r4u`}Df|*$~~v-8+x`xt(q9-MjY!N!wdVdhwO`X*kG!DsbmY*jj#@fIbeb zU1T2QvraBfI=Zclk+~Q!5J}S%e^Th+t9VM*^j+N>GY2Rq*f%R|wCurm3&LkJh@z?pj{2z{w#An_$?@Nb0#$ z94FDDC8_|5*6hlLFf?*4o26OqI$#rmlY_=IfS^4RR5sCsG$TYn3TLwY-nNfMoMQo50@G zwTP?sgBNcq-ksVpI6Ds8H{c$@at2xU{e~hcs1bO>Qc6i7b34{UV+MKpi?w}CyMmeU zmQ7y1D}>Od*0P)_FJ0VVnwdYms)6vYaqHm(CLi@KAv7H{G@EzoW|`e?Xv2q$$$S*9 zL)O)TSGD}k);A9+Z(L;_t2RfFMTI+Rq-v+miN*YRd*)T!(lP@8N;YJ2k{!% zw860erQAp#qX)}ZUzWfhkRJIa$y>LfsW;2m-hWe^ZD! zpcQ2HB!{+(Dd*PYg-im-4!bppm}XNs>4fYD-$u}-=x-LjHU)H^-!Z3llR0_TAy*b| z_WQbMl{*f6$(tZLgL5^uOhr7<@8(e^!UC5ejg>BZn9~rA^+rs0tTn^rYpn}1@05)x zzE@Vl-Bf-}e&>2vRX$9ooO6&WlS@dqA>R2DA?eR%)vB{pMeryQ%A9LyfTQ3+Xpe)s z6UXR)5);7d&}R#+JuxAu8r(k)AbbPzD||d^g{xZc4`UV+Cv9VM%?e;=xSmwecHdK% z((-uTnkqL@KaLt+G^y2}a?IYpjKjO%1jjQ7eHf%A+#AstqpJ=ci!>2)XJ zP*QNt3HfW#p{y8`HPsHx*1cLxcbn~i&Uy?(fA!<6B_`?>m$cmo&E*i1cU`Ibai;%(UGqa2M%c0thK!XI2zQx zq~(o207d>@fGi6!bvDs}{_&meIA8dBA5OO}gH*4@By7h9~3$8h|l*gPEXis_mIDM`m94op6-$N&Ax!|BR0f7q1&*~YdP3Rh*+s?5<^YQ7{j}u=W4xzlhH)yTxkkQK zK#Bw=A&r92D&C$nZb zGSD+TJp8HgiETiCr4*v85)Z3A2`Bgrd|bCqi_B?VO#0YeT0bItEL`@vb3K(9RKQ%| z>#Jpmou#96l4)VK+Q`Qr)&&0-6d}NTRufk!FZF&2k=L?)w)&iq9ONNO_fx(hD^He# zEl2W+#GbOfMGIE&9i(VqX}TdQ0>oRYDs2D6Sr#$htJFST5J1k)?T_=NxYExDQr5pk z9s_9r&P(qOT$n?LHV)7Y)OK2lj+DN<#MSUhy_Ta~63QU@NACtXCu zk4_3x=$Qs`%iz=py$*P!7k*uGzOV{0cr@eqor7Y)e^ELC@O3`*J(@1OSJVX$EcMbF z{W`C}&|hsC8oR#$;GT8xgEa6<6B4imccv0u^S56DYrXIukx7_i|Mf*j(z)P-NGRo< z0JV*8{1YQ+S`&Cx@U=hKX~#VcDFzoAt?%Zofh?7wH|052WPtZN3JQ+svLyaXzKjDw zBr>IvEVp;-TT%$SEnR}})=DErByGbT=3BIH8QKkW;pV&)qoa0dB3hCBlj))1rSA`rigmrkbsXxpPKgcX9=Td|PR1!axVjCK8|7d)ZC{uaj0ANS`0uGE{IJ zN~_EmM8Z0CyD+t_ooD{*yIk3N>@8u>R=1e?n`^?%CFY!sIRycLl7&>8qiD816jsUtb~yyaZ2KO9`6G@9Ine5Z!5(&mXY)!;=#4QsNOrFn02A} z=&FakC3uuN^p5re$vAr;y+cku1gU}jUwL8dCH}e{`0z-nql0BTV?Kqpjr2^cJs7H` z<}Sp6L+_5G_rslOS489DSywkpk{PLK{tt-K|2*E~DsvN90{8+Sd#$JnQv{+s$YD0< z0B$ca!#-cQD7Z*KIq+K~e9!Oye(Yf7P-tVr8HWINPzB7g?LjY`2E~TE69;2+b;5U$Ej2rz*yHtF#a^Ud4 zAHA6c%p}*?;#kI^)mS8XYc)0vnRC!Xzqhp;j+R9@CBN-skU#MC|LUAkOGU!Zo-Nq& z7MCLAQt+%P@<78#uePb2J3>a|Yr7(E`^O7ZE!Ao}I6Xr7|9ma-A$|>=U-(QU#rwBy z831Z7nNS<#m))JNQ0Mi%vgr0Lil0b_*Qx|xb#LO?e{S+~GFO4|h;8Wuy+q&hZ&N>5 zrK|iw(>LcWT5ML`$rZqSKGSeTcCyMez2H(^fK|@MY2z*Hf&*Zm%%|qbcqTno^~HpN zKjk!1WrvImO!E@y@X5ZmpDftinse$O3?*byx}}rbo&fXF(C``)11gyS-Cc+jw)Lv* zJFVC(R6}5`Pp33=ZLYz$?SN+dhZauD{K|q^>V9>ysyNMJp?RXB|6nW>K8W^s=|4>S zwh?>#B+HT3cwsTJD&!qw)aW0IZI8&)yDWjrTgu6zTy>jkCI`sN+k;~GvgSpz4)})D zd6w;JnJ%Bzmz9fnUKa$#X~VH@5`siDvj5{H(w$MBGIuPX9#H~8q-O^MGyx2dWpXvn zM|^jvdb|fo6+D_g3}$YDt3^`%8*cASzG%gFYKx@INY-xuhI`U_%5Tuzk@w`ZQ5x0w z=J~Adg{}5@sc6J%<$S6aP^?yn$;>aT5#(6zb~Dio;IwoQ3LcoI|wIWp6VsCy{9KCih}O1_Fm24)JQJ4^atYsYnE zE*=26{||K>ejyy9>Rlfx=we-&q73FF0@u@X4(2SfJgO-DpDkf6ZZ#q(;N*}Qq^TYGn+k)=!hVLM0*L_BiTwyd~ zJ8M-#nA-E1Tt}{56Xd!h#)IjmOf3#qtW``$jdAaK2N7mZvo65d?Vg4`l(?L~?saV@ zDZ75Lk$elc#n=b+#oNw~DHBhh>_OP&cyUdnFldK>dU%$S&UB{rqO`_@Z-N*8nTE>S ze3ruSc)kgf`dtNBE0;KuI@rov9N|=@`USDM)}NX-d_L`rZp&KKM=l>4PcGw|u>L+% zkgJJEtG7N)zcbBW>9rIjR0oFJPCPSCH`_X!IFadVN~_r#U3cWQVKh!{6W42u5+h!TKD1DnJ)E8r4Qk=7^ z#Nr787unP*@gsJxdn9v$Nq+8#tt79;ZU#-Z?ozbM=I?|G&*_irrF&EJykaIi;b|+i zngjVcF=3h#dy7YtHTIXfL3;S$Z@dDo5~S*_L%AiT<^GJBGo}lc-6*wTvpsX32VDYj z3>)K0iRkserx@4_k_wa*Dexj9BTYzRh%Br7@(=&`AH9_Rex#0Vdsv2MITSZv zVakvgIQSo`Q(wXx;1$WV=DI=V{)a={DA9Iv^v8nwFQJXQA2guv(B>km@|QN`WPRT|R+-eMi}Z>RO&GRG0bBJuj*)>&sCTf=e($Pj1o zI$9KrpM5;O9c;Oms-v|9$4Sm6x(|`;w}0maAcq>CHMi! z$3kh`7U6bjIZ;78KM+%2GB?e+;xgzGEd{@U;de8hHRt^V=Z_bzfi&4eevt=_QyYi< zT`NA62~Q5}=TeJNT7Weu#1uK?y;zHGQxOE5(o9x&MA^P^m^pYyp}cbRiEVXl=|zvu z#+4)yhAk2&`h!~2Fz({W*+RXG?Sxz0v%q2tMK1YbE#Cn%Xpix<+# zp?qjRkb?h1(mh91Syoc%fz++#A!Xp&!|38tzRKd_i}N=AYTa`z-0v~z1?YAF{w`rN zRUf`&r2S5jMsu5W4EyX3aQY1Vy{SieKGU3XJ=jx9iu(>@PG}oq!cqkT2~Vdto)v$GKjSb}r0N0nt%8MSl3w zTrRbSr3|jeY7TbF@4m*9pZ*2hnPIo+$G?`4@TOz6|25G(WF!>JC<8A+5GEBgXadU$ zWKFMe7<40|;j7CbTlu?~cV%F(2rfr67A1!W^W{~H4(qGFZV9)Tn%%hL7nF!e(EzX_ zr2R`e+;>JxZ>LdfC8{$o1fQx>z4^=MleOKWh~UImIZ=HLbDF$Bbl;y8f>3DTtU@X- zd>HwpOav}J3VfSF4+K)rwj!hySv*G`bd0>|%=Fk0^c%a8{ia0yhbn!X3rtw!L3c%E zoe2BPTuftJKmLS7L`W+uk0Y8KkzBk0G<1cwp6ex_}(`KYKAG#0wIemAHUjX6?zH_Gk(l_$8ktDN5T6NC zzH6aQw4=VF4f!~8h}Wd4>-0rDBxMinD#DmEoyG_tOmZ#khTXwQ;Rf^zOYOXCe6Jza zanm{`TX2e#MeA@{YDr(lBt{omAX>_#rL`UQDOH=(^3yB)vO@Ztl9*XfRwho5<+!Kp zrLb)T=7FuAC3v|<7_)aDNvGS*)Z(0MB0^VNWpUK?7k;|?T_|&29PggH(sv+h9&W!0pm{s>crk>N#q8qj@55Ze>zc0IFQ@FtHuEuk+T7R;Y4Ac}1R!rwXIF^4*BySits+5uRDs{+Kmd%qp0W(m`sWRKN8ZUT{K zrI3|5eS^otk}!`8(W+uBn91BQ6W+6(`E|+J-HfUAne>gH9K9}mpgz%LbUa({$b+xr znVu^($e&C(LC`fqa7ys#T_@#xye}a?Mnk6pi$-;~GS@4>c+l`uF;2&P0et1S5M6Hz z6W`D{a-obte+~9sC19|$Sb?972IUJk+YTqU8+gzFo~tqX-kGtQQD*T+MYTV=E1i3w zZ+09oj;cscd;X{I(in?rshi4SL0h5%uh_m8bAJia)q z8Fw^4v~g2RP3%6Vo1EC3AFn=|u{g*SyKq~u&*W8T6&IF?@mK?RY0r=qb`-Mtx-+J+ z97i^Co4f%A%xIziU`&m6Km;y$tO z)z+8J8Epw{xK9YBtG}{DCS2t4M$Ej|dIrv_f988u6Y_2+6;R3G+D$VCkM@#?`*WYk zRGz3*y+jz~B@mR;{t*a4nWR5pHOQ~Y7i|Jns4h#ip)XqJpO-*CQyFJ90(VH@d)3aG zW)NSk=`b;m_KqTgewJ_8chMK&Q$Q)c;I6oSw3i0%CQ_n$5f5kNvror7Xfo z!OV>12Sgek3!Lf7<4wy6s`{((A$lDlGwbIS?)Cr&pLDJho>t-KG$8S%Q?r(^$}4$p z=br)ErrvS7#q3jC@v{Y<&U@yFrg?yAyYv!yLL@Dw?YP=EEHK0T3@ zbs@u-_rNLgP%5fjy7bzx02P337yD4Z)eIzb(uhn1d3305@IaML*qkuXoG70tnNH3b|}H6Hs!{Ej7F?#jp7z@4QhW@iirJ$O_ZGa}%Gw_4M#msl{AfiK&A zX|PrX{>h;qbUof@o$+-GbjCB&1mWOuzGJt32p7vWpl?A-hIo2?g-U2)AuHO=8ceJBiH=TgIxSxgbsiLUo}jagIu{zL7E@~ z6K=UfMP^oUXf}e!_SWg7z6ZUV;~HHnHDJyfm*f=V3xzjttLk<;nCiZ?pL%$cg0Y8X^B(T9TBJMsGqcfap*tay^(j>$4N7zc79U}udem}e4Z zIglsUZ9*|`6h=gQxmONXPS2y-?_8Y9TR-B`q8MZti{sBo_#Qt(%P=yNX}C) zL%R@ygesI%h&qxwud?id$xYr$JH307_)(v`)4j5;doC}U+!M{Z64%_m-&XGY&j_*9 zUr0Du9=jaCmA;7Sn;k0EzAF#V;_=7DBf>r^b6#;(BomR$k3`psVwWHEOH%ve-DhkS zZ?VwlBJ$bYJC6?HMkm8xhph0i4aD;5m6Lsv8k#`Ag2z_%v}b1tSMgdIvs@=|6JE9m zhk4@gyCZ2^4UNm!X?u|-IGqp96=Sb^T-k$ z`P&y!%GT+vE<(FB`mQ;?uvT?2!Rb z$)Movk6A(@ge%18xX>EVcHKp8 z8+tVr2INo7pE-FO#AN2%)VJ=IW7ie;6OH)&zg6v}Mk|W}0eF z*SIv7ObuNPty>FL7zqDc$>wJ3Nx9X`sUlPgSXp|66(tXaBs3RY64#uX7l#M}O!`j> zL3Mf_f^~3S0j$?74{^87$FtU-AeZNCG8vQOrw7tzIr;u5rS(6zJB^*lWx<>ve*$c4 z_1*%{jGrF~Nzmj?<9&>s+!8*iOvbh+SI=y|CLc7>9UN2F!gU|NH9jDA4|w2Dx^qtE z0ub&DG$CC$mnx&>z#_dB{0Pn;%;?J4X5!a9sBdoB6?(1J3|6)S@z8(K0*I{#{*y#Y z^PyQv5eZVY-#gR53eyM_4+<(LeXAe?8zjnDqje?u(Ae zB*6Nh_o7?G!vetb_>zj7mE03*H=B-Hmon+ODPvS6oo&C|KV@=?dp<13GcY z>JQHmpu-(1Ahja%cm{1Ys|!9Kww)8&CDNh8{D%>%_NE5l3a#((Td79&0g(WgDdZLy z{SXcaJ2}ZhZSU~Ed6eZsntHcmD(OEh0F;bLKX zWXz}e9pyUzfWdshbjDbIxqwva_%-@rM|-B`e8mvXCi6jM5EjSd1m-l`0>x2f4S!T*MK6ki-2ZAB~|7?4xYZFm$fOR|}jA+jh6f zDRRN;tt28G{#3QGv$Iyl@2X5|#|*`(<%A4*ZGNKCZ#88IZo5My&nAr1DqE2=A2&9g;0MV@H2w6?J{M(4{Ydv#(Dt zW-$Kbn%7U956RaE5^#43D9OOeazaq@;oqA8FilVW5+cNkb(^q*)m3(eOEnf)R)1wc za<{Ov3aHSED5|Tgt1x%H_o}P@ODT6t#z2ojZfG3_BWA?3DHr{v--;B8gK7rhVUDQ^ zw|!ZvpiQ;%XO~d$fpOgE6h^nJyM8fvSb&U?cjA|aX>Ik6jXhb)(FMWrwE!klY3{DE z$58oe0b7GFx-gd;Pk(-kP8xK8%6kiZ-pCfPNnZRwtAX(}Lt!@Dx6YSGR_Q1tUy$gA zoOWL!C(dbXO~<{r)zZpL^welHM+IzzvXX$pAFmWXkE)ZtO$(T`*uV_8CYuR06|J)J zT{jJ7I}O_#IDfTPhAsOK(rV75hxeCJKJq+*JGc7FTmogS5le%eItE_^`{RHDTqp3L zKF5Eq?~n#j%1ttaX(73gIOMGjW zbv4vXLHxUt@ABCg4hT+<58>Na;W5SeetOq0C*8$w=y?wr@{6KP(A8!>x$}68rSGRO zQ}`8G50dc2&JghwrH&2jiPB+(>YAG23ZW&(!LNQiGxHzd%$RZnhrKSJc*38?ak<4D zhQ5~SEVNxWD%N4+PH{=m$BBO{w@;qUXYoRH+nH4;i|(IbY07V)2@~7@*&PEjhYtoB zAn%V~?tDRilka$F9I<0+nM#y(yn_RMJEBprF%s5x3;FQPt z!ruzB7C{1W>Lm=%{G>0dvNf-MZRqz3j(ssuGAf0MV^z zylmpInCmNDowKF^=9zItafHsgwo$`&(@~8Mh&|fXe_9E<>?QT^TR*l(%F2gyyq^VH;I)VmL`%ztOrb98A4?I zXDs=(Dbd~$XN3IDu+cT!eQBojMWHZ%7m~hQ_a{OMN6KADWO=!momsNXjnkLk)-kPU z8*G@-QE)YF`who84mG79@>5f2Q>qy_@Y~IjtuN?FGcd-~*VJeZ zF$OBaM;U9Qf$hW9j%JM3g|i~@aGdA%C<``IbMDd6kt)8+yif3KEX*_t4tM$qGYb>Y z(y;o~^$BzItBE<1F7Hekjp%q0W;Hi>lNAr^P9`e`$WTR=bNg*eWXGflu#lSK;#*xH z4e#P}jNjep|K|z|mx|c&ip)LgTWynLe5ZGJSNKV z=7Xl>k{N2Wpdx*e#*+eAN=Cx>%7h!-+$<&hG}efEjt}ftcQVVxdtK#jR@Cy8o2SV# zT~`cR3A*9i{37v8KRA@*twEW1y+wHUWdTLgNLS#N!!oV5?(s!kq9P{w6+!ig#)iOY z6>%;b77gd(%6}*0!Zal#UUx}o@hv&EZXl3TG8O?5&X%K!=Z=e3E1mSnl$-fDuonIb zU)hDa!x7PEV01}^ANfs~t6fs9)W&;5!PFL8q4HQyDg7K0<(E+T&BxSq(N>}F7W|uQ z+NgoDeZIT)ONs*3YwrXnD4gaLzw>uoPMGNS4Ns-D6m?Rrns00bxoe+O68Na^*qtm|JM;x7Va*qu zAKqpQL9~ypbc^=mI3|GDBHl7kMS-F5)QS`nH6zaKvy|N~UX7u~@j8!U- z4aaL6MvgBoUiKltTs2v~$PAaB^WC0hEv|Gm;2D8eUH5l8tn^;BH6g-N?rGZ!Ux= z=cQ|j+@OV+b^Culf<)7e;~FFr63pSxSR+3ZA!5&sUCiZl3PpkCXlcCWK=agwhk0l| z9r|>{w%O$E%#$k~1@o=PIl-bH#r z&5}y;i_(*m9jadZk}f`1g}fkjOw?hqXBilli49K(gnCdR6y+yNspj7#9tB1H&)K5? zeY`VPg2!^~KVJ1yIDe-bHc8Xd)AI#YHM-i=5QBx?*Rdsl#`)ST15cfVl1O&?1+f+<+I39c-yzJ_7V(diBy zL7MlrMJj2V_>2Y(E|qa^YmG)$?(V;0M<;#q3d(KYvu!tp_)6P>G%O03ng8?ypdS_U zECaA#IeNudA>WY*y8oKWnY%ps)2?0uso@9?O{Ja;55%Z}B5Bm4@{SX_e2wl9E|@K3 zWzbJ5-a8YosORu~WiuOnL1k;Kb3*T|@f6fT~u`eD@Ay?3o1JC4%D( zn^wVIO~rLrtjBS3i@OdjOoR0LL?PFbOzFdF?Z_9wu$jr?SJOm*NE@Y?cSsS7 z_%_WdSMe#E*mt9R5JsQ&tNrF*8Z~7?E!E@KtR`NVnWecyoFj>t$kq1IIld`WnseqG zGlS^A5W#J)8F$<*|4eko%^vIKyp!t-l2BjRZ2tGqm2pXGd@?9#9e-Elwlr>VhbWy6 zO~Ii~yJ-M3j2=h%-E+#Rc5W?Tv1*(S4^$j}26q3ecst6_JY683%FAh5B3w9_F2<@s zpELV9e^xkSRBohf%E-xV2KP=_DYZG+T8YW{R(HcBPe#Xf`}0BpWgwX2O&y`p;U~)% zNKz7=QD&ca&d2D+bosK`sXtP9^LM3oCrB-R&(e#9iDmLhbYe5g;cc-P>9$L}klfqp zpi;ltt?u&c(vSEHM#0>Tjlt;g2KiG+s4Zy*p=e&e5jBh+Nv7@{B5onnpB6#pzIN1h9w%+!v_5*)CEn*fnE|2@jTVJZx=)VD$rsM&r`f5I?y6uyB z-Kt#XFOH`8vZf|iXh$gD1@6;@aKoQN)<>`=FK+`vB z*Y2-rE^6hrgbsx{KL*_rKqScPA*WZZO;uDB$M1cNimGbzTOSI&vsAhJ^vGnS>13k6 z@(+#eifJ_ZwgOqHuKcD_dQvW38@9If%MvtW9hz2t2}`)~8FK`b3Q2iM_4pT@m^EhG zlaQ^*>9s8JAoFYXY3JUDyvocjrKAJw@&VaebR%dk<5}^;wu_m#`!i#@W@cwoi+4Zt zJT`Pv!l>jsTl+y5{T_7(0Z!qvOk{q=UZj_3Str9~wm>_(P`Nu$q9N`SC};nF4)*wX%NGCowJ?!La$Fs%Xi&n9;*kg#*kltQg#=WjTv(l+ls>m&0 zh+oTh3gQzhE51s2Se=G0a>1v;rB!P%JyHATXG7}U58k~ey+U+L6R6IEt*dKmEVT~- zrm;WGZFQ1{8vkm44~?zPQrno${DPgk?JMIXn*Y&mHiwm;K4G%Tz9|(bq9^?upMvGU@(goand#WaN}X3)aAH?ive7 zBOD1n{pz2#uVI_?`-tU;LbA&HTth9-oCxgvvfC?2zaud?NY{a!R{wfsGzs7G89z;xLdX1F#KOPYXz3TNy$_Gmp8aT zKiU3I6cb?oN7!XIU=HLC@BYi^at0o%gDhLiMu8!VJ;q<~&yma70N$It_c!}{NweB^nXn+s|g!l&WYa%)-%x@YkmLxP5>ImaSZSsa|hmx68*Q5 zoh#B1F}w@;vjms|kWIj{s^Iy56+N6WS-ui2C28z&68La?Z|If(o~Qx*_xt)!Yzbd&G5t}OPBwYcg3`KfnPpI{50o%?%?Rwe&$Oe6)cIRAa< z%ra2#|G{V`fqx%G{rK4b?_+dOH4?n{d&IdK4PX4PrY-DRGf?dBuwFrs^K2fmr!d!` zi#7%oFg+gdp_e=gIrR2m8?4kRVr1u%0PbsH108&$uosm6Mia1nH@4qvqrIfx>mQ5c zB(^n6tZF;*Q%^T~RhN|~Vu$LvyFa9&EOY)fxj(gY+cIU>6!D?dreBfaZ-R7h&H2&*spc3XC*xx%2=)Bqa{kacfD}3P zPf7phd}IlM9Dp-17QMzQz^CnYNZKy$;5c`&7A&EZuluWHgJCcR%!kcBL_qU@88Hpz zNM39xF{bG?uTi_&68Cna!I&+J#u?yK_X@bxcxE5WUs1P3cE(>XD4$paNM*n! zs8d#9y%UVG#?@`_D_KtEjf;=i4n{Dv^1!ud@J(R%U+n1*?f96d8ObXec@mA^tab)| zPVY>#xW{7)6otIk=Sgq+jGYO=A8hmYPVO<&VWCv#!c-|Dy-YABIh3v#JY{6&`Sdxm zq%$qVju!C}LOtRH5nR3K{Cf?qQjO`U>-G}v{q&7a1V+^`vuqpf6<;it&irr+6gIT= z-KalhZS8x^it|*0z?=(H(tU5QluKYGVEP&%-&HhHA33aD;!k_>m0Z}*`@nCQz*yUJ zAjUQJew5c&x_IZRJAcLQ=*;b4xP3N(l!;fFRP9t4Y9@=48v6Zuk25mK2mDqWeNyX6 zk!^s*mF@ucOI`Viy$7sTTSqC4?Pjh5_bO=K>aW7A>*Hxo@PI1-R=t=>InOvv5o8(I zV+OATo!I_P*+3s<-HGcBOlGPA2`vv4o<&r~ zPreujOJ65u2FKrVD5xf|gS6v(7*9GwePj=WeHQo*ZuedDx16Mn^(R%jp-cArgZKR| z$?8@V%am{La)?QWrMx>)7_XGAKIgj)UPpWSH*fsK&DT-jow@bJ+o2kpwNU=CHqNpo z%+>R|irUAn83EfO_3a-h_m~JWZ`Y)R(eM7#fF-j29e_#*aoF@X?`sOTjV7qt*6B6T z```-lvJJzf&zMD5{fV#{5p%vmM9|w?aJD;2APH0Ik(T9^A1rPCb8aKGM(h?A+CQrI zjjtQh=)LCf7a-7rUh6=x39}K}1N|g;HH&$`=?^YkK}zU(x0KXxi%@xr8gH=qwNRu~ zxuEw-pa12)|M+qi#oK3pCOZ9M3GyWpK|SP@75wu|xBq5WAY3@mO~j#i8xVjs%Dw^u8*+5?!d4`rsI4V@-lkT>3+B`D-P&BLHG zaTaTD%ygqx$us92;Ma{6Vy|nuJ2jR6$Q2Hr4Dl>rV;vPcLw$4#B#GYd#I%pmLqB7=b^Dn|9YTu)PZ@DsR#6Zoo_jgVK0attI+6 zTPO@F_lG!l@TBwQEX662&@tPoCVOkWU0@?pstBA@Kggf!xet-V|IlssC;t4pY>HW{ z^|U3PoU;l@^gw-0C5B|ka|NwM<8^B%eCvG@y!$FV`ep*Uq$9qo-1L7;^kxUl|86+I z6_}=QJp8=^xEfp3TRz&(4?Xxy^>Hj<&^K0sFB-g2u&h${d-CAQRG;deh_I$l-ICen zu89#b^QReg*ON>6;Il_X+TM?!AO2MF&X09g5zKe)LRbSVTZ7{+IyHEW38h7ROD%CR78ojP-wW=e}yNKkVbEoJuQdI!!8wx2NRj+v!6 zukoC)#T4zGvEnT8IGu5izVXKdvtgOCE>&Z|IrXKrH$AF&!=f_tW_$xbvp4L3L%6WL z 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
X8$G;!lNBC5V=l1g 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 z⪼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 (#PKmOR(N~>eL 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

AYqb3Lgy6Mw*iQXlf! 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%0DbJ zZ1Q)W9Fz_kjU^7D_XDlM^rNgNY+mqhu8RH-S0eS#l{l$rctLlwmYY9Vl5PK466*}trF0Lk-7_yY4d zFDEu3>>R}tRfY`X{1A@2!*Ra5+{xVwP0K*l?|;T>B<^VD50Q^@wWwgPhIMQ$rMYS= zu=i>sB3XzsUtJQUpB6rfc0)V~?`A963lU6W;U>{W^v0XJ^7gl4rgaWVYeN3}fYPk4&pp0$rpnl;~}*3+3p4(|yKvI1l1)Is|R@>ELB7;2fGblYqi&KzPv2^#!Rt zPew|QAL}}LfsX3e^{uBvU_iUM^HmeLgFH&!mN$cjXf5HAt7}n+p&O?g$~#tI8e!d7vsRc z7V+x;6#;_(&k>9NCs3KYpx(3p^Skmd-|zpG?fl;#JSqbI>*xP+*8kTR=gHC#FiNbx z{r&wvaB0L(!lgfVd&f*TeO18C2v zfD{kakdWxCm_>8$IAE|uy zxvrbevpX1saOhh5!nbJQ`)-3}x^5Qm6Q_7`JWwN-mm4TOE*RRjRI_v(X)Kh0BJ}tX zJZh!$3iV93hNt1EB>Iafa&B~Ey{V@RQ#xD3C+>kPlf$*LEMI>%TSp7`!+!s-8X@`G zqwW=G>$MTU&R5N$%tIKcYkXlDBX+bHq3 zD##(Lv<{e_joU`9B%bt%?0ddP!Dnt9i0rNxAs#@$A4Vjd8L^1GsdR{&>zj>BM>mr(2wo&4GWH^Ws+c9@1U}JJEH%%kx62h zh~~l$VsFSQKaT6LYJ%QeE5y=w?+vMH*{CyQ(e#|zj!3*Nik?p7j$lf;!%^KVD*}?qz=*7?E{u2oL ztwrs8B!*8^ZDA%bpIJD#U?Wu|r?{+1I-LmEg_JIcaY-lAe5Zcq4<-VoJ^>ZyXc@lH z=8~KqxT1vE2rudp9b6rQA6Tg@y-^h7`^W2*tw?OK@9G(`xq7Y(D#x>0CquG@j-{*c zP6YzJm#sR4`fe{AAb*hBs6G2+d$YcK7Ya`Ix^w!+p7(>w2GRCO?M23Aha)nvbQ?^& z=Yl?)itUmz26ni&d6yi>d0;iRZ>838;Wvx*c(c8u+dhJqzPh%!EN1w@vMNA}LsHzH zjj$Y8BFWUrE17~wYIeEDIU`+8G$J-Ov$&8dOpKP2-`?D9+$2Sdj0WrjW1VOgD5Gp3 zFa!Wu?s@vL*tpg$M5~&}`C%fjwX!(SD5h3Ydj7Sy8Rs=ODKY8iu7T@kKo9d%>9gB! zw`(98^#Nyixn^CarL}$XqXOnU8eEP=ESz-+G>}q0)*{EoYkyi=SdIxr?kRUm*b#ci zrn=cJ)V@6$4M%r&Cd{&`tnhY%7l)_Yi!^k0gE6!_&-*1XJ2d~TnxO=Bl8tAx&+pmq zn^1x5$J_l{hc~25>ncp|#7APUO(-3OZXg>n4DNzxF(2iqIY4g&T*!nLXP2V);=A-d0qR&G{I!d zEVOBUfWWI+l&a$;agd0Tk~r4EX`7hocRZz&rpL# zb47u6NR>1`!Eejf$=iK7p2_`hAa@6oaZkq!jJ2Buo zZ8gMMIK_h39zX0q_cTx2_~ zhd#!OZNUv3`48dti+6ItR{Kd)%IjkV6=UTruSsi^Po;ZpLT;U%SE4JX%c^EoC!Zn9 zH&R?7!jm5`YI04>!_%=XkK`_^e5z3R@TY|!tC_Zx+=?47yOT%~4B6~s9Jdyq6A;@+ zFC8=>9ZAJ449*!aw9}>E0xy0JoNSjnFG!S8o{z{<@v}-1Z+U!5^|YXlvn!z#CE09^ z4zSNHLo&?owXWU__pg2qIqk{&VpiTh)m}Aw3KI2=`O~3es+V=BRl0CQ{q!d%gwUy{ z+Dg#jFOvn5LJcnwViJR@#J=;RSQ{`k^*HFdW2@C)bGb)cB;CP%Bt?JH3G^(Q&!KaY zRB%ghIz%}%bmN{_p3x5Ree*c~`?xHfXkeL;t{q0ap)04f=M}N!Z2_Tn^3Zhlw^T9|I+KiiHrSr6cX(PBeI*L$4sa;-MG~uR$75Ib7^yrn{HlsfKf@{{aDw|87 zxxCQ!2<=h@$KlBtXT(Ji&r~AQseGksBhQ@;Uk2ODGp8b^rqb-HVLnb-zgL(*T|B6< zV2gEFJef9~%RBVyRp2<3lvU6Nwhq2WSjXrf`2LbX93+e7dDUY75_?h_G#P=P2qnBi zwiFbN=^2_N#)W8MzD+TU1Ur|sY}!RP*Dq7-0Yfy%1IN?XZw;a1%iN;62(K4*V6Dxf zl)B~G1XFZrx^ zf?;0X4Iyzzw2$jyn3JmIEBt*xb_#!@8fG<19$nCBodI>J!!e*VK_0pWf;ep|25h z{lNXf)rTU#fO%qr1MqyX+U{?yHoBbNh)c<}Igu|bk4)0*->YJFULea=$Ny3k4ES;P z=6(_Z%bY0^H2;N_GVDc6q$q8^(dz#ZeE8M$iq@a< zcHWJCyAmcB<6H;dTRDL~i=k{Lfs3HAUBw&@C?uQ~f-hPz?Q?qA#{~GRh#Sw%o?wsz zJ-bz%>XXRN+qZ&Rop9mnAi4S+p7RK-hR&)=fxh~8+D!{;WORk97+qh{maeS^FztLz zH6?z@MA<+^H1K4IgwD4YiooGz4iAY^1x=mOqMb3z;&2y@wcl{D5*=0M56AkU^si6< zL1n~jgqnx~+v&B7xJhKYfam0jZi&zCHr92l(Nx+z(N5g{mF?~5_ zA^YDAPeA+M5Nc_Mr8P@MQVK8^fLE~Mz>Q(*lWH_7(-5LwFljpsyP7tBZ*K>n()KKW zV3Z^-&qzoOJR z^l$&ljr7+o$S7AwwYtiW@|!X^{EwcUoB+UZNwM)P=>R~rB;-$dFYo$|H5@sfA=yNdQ3)fQa6`4&R3 z4h95r9uI@4%;~HzcGfXmyx6%897SQgy3YA(oPuo6OA%AFxcUYKf$FiLyN|6h*cPR2 z0PjF?c~cq7dop$9v0f57uUcvk@Cd5f6b!^V^8G1E?{|nT5gr03Au?Ln6%rmA zS|Tc{q6%`ZEhvBtrzYjl%o)2lgZF!4KWYz)N5h#5P4~K-W5mB#FBb)9gCyrHc-^h> z{3(fFP1zg(n&7z0Pt6unP?t0Y7JeyHP?N+QzTxfDr!QZ@9ccMua^87pv?dHcD`C@Q z51=7To%T(KIRg`SA_PErcp!5(vb>#&(~Q14ih42uxdnXAN}zGy33HcTHDIih8Z-c= z!Tmc_^}PcDFA&Qp?{c&&RE6$m!*}WyX&tqz5i7EcBK{&W1S~t}0=8d_*+xml7`S(U znx4kOcmEZgL+S1)%OlSfe<*@Gu%>jTHl*;P72CaX&WL9$f0iTfC*T5?+Pp(sg;Pg5 zR_V55M!$U|%Bm*7A)f6gzRujf3!MZi7zvoS$-Wku`0fSUmFC3zrZmHnc!p`O1N>GS z#i6%>@D+mAoHa$HD9mw1B9GJ(wrEosOkb$y3Z$c(nbr>|O(v;Kw$nVki`B)(=R8JV zfT4ADKb*I4u(tsV>n&LY2ZH#6aN62vYD2Be%J+)-fpYPd(PK8ChbZUNse|j)=oh`R z)o#;StYh|Z$$9j{1h+T^#U9OQp%$hH70zF@mJ^73PBqxEi!5QC9z^M5?Q+69%~gjD zK|Mf`XcYfb*N7t+$hW1R56iLD(FL}pj$xG#1S02|E#SaSY_m_7Zd%%~r)dz)oif3H zFb9v*)WHXRKi~GVyTVXJfr;M580G9`k1~*RGc>hFqUg!W(QpEo=udV&F^6to%8Xm1 zDC)G}%83rBFQ@t1)$G@lPoLouvU)WkLQ zjVhZQ8+D31ZrQ9_msaaEe)~k%;x&-%zAB4ujj8AHFWDy{)kDBndzdd6 zl_=i13Z|6Dt!6KJmo*Dc2XH>lDB|$%+8NFk>j@bG{-eU}!eRa@>oZT{A_7YE$1VgY zz`2szbpdpp{F%tUDku>AM>g!yR6bYR+i)dMx2x4UOZbUhU@BHCgu zHy>hT(6_f|f3v~ru6Q(Jn$7~I1L7Jvb}^6`M{FpyFuZ;tFLm2cj&c-G{FSF$JC(f$ zJ@)0ZBdb%a+a5;LleAM41*yf$chkr8)NC4p@=}vM*87buw%mQ>`YRqf{f5$l1Mh<} zs|LW-HdEE))tiP+-Oi5|-XdtBlGSG;XMu`agY|)@XpIf1s~RN|W(d5M*|8PtN7bl7 znDX*~_EL%1!ab ziKh$%1RVdl0rz7cZ8%4_+-;kigi`x-c!eZDy>Y&~%E$1nWgoTZ&tP=2%7^8J2ZQEb9R-zjnB|qTc7=Mpt*6iAjXop4 z-IkmanXK@zAmTmG&7y>NhSdr422t3*YL6 zt8ec{EdP3D|typm-xM@Pv(F?1$d?XNtZ6`{~4vQ$0#nP3Zu8z zr!J|f2xd*&<*}N73hw?~Q$qpSx|Rr)T8WGLG-r)Jz%JfOYGeOW7#1>KSIO$B~TQ-WSJ;Fi=q%t$AoM(n0y=r$qGAyIQ+vV zIz+~ds--xCdPrWa%^dPJ=h5EZp8W-S7H1VOBD;-x#>Cirp(m0O{9(D0LXP$6U>4r@ z83MR2ck&jz9{SDf4Q&~^>__%Fx~F*F9$QxUzU$bP|HP5hE==I4HfH#27j(oLv`x#6 zZiX(Ai_7YzyP0P7B78|V73*6?RXlkBZ0TWr!Nl&za_hIv8#NNK7N>Q3p*5zH7%dCkL!l#S!I`t^-1sEzXuBXx*kMXvt#^268Im&#(%= zUT2zT)SAnesD+`$pUy7uu8wG|F@41X6Ew?)2O=IWXmK3p@xv|Wf+EEIk9|z5DBRQ( zxu&$1y3H-YTy#nObRQcDEjKo{ztpQ+&r1B_`-Kzq^b`rFk8TdgFM|u#1p_oqA?iry zecr4)z+QNa@7c-NH-tu#4GljsMQEy97p17-Peg49MHZ3YYGIqA-irvb-dk;;kRO8s z#vNz&lpDvO=R_S64el1X)BAVWlWz4xjKk^FHhTSr{KKR_<#C%`wBR)!CEJcEzh=pwzab!X2@}>%{DkU)=}A;hupWi3F;Dxvsl*ke1cimAJS*B z)=quP*!rUSoPkkra^D+B^@vT=;^-8;;k>`3s`SC@Q&D*>c3%92z2^x2Ms615B+5gw z(>hwuLkV>H4-ztpXrQzziAmagHRs0B7Zu9@cIv6XtR|+2!m}49jzBQ=m)@9ue)=ik z<^2`U!_g6#%{qW=w5+&VTZ}h#e28f6q?)w+9A5%(NNrUi74Da@dqe;YYR|hGCpUnU z>$1S4tNf(Q2daNb|3fe4N~6A|tELBSpySG?=|E{$2f23m>c;yc$g`9!QRM7V==zgH zmQPc_2S_*^667Bu4QfTU&86l82}O&ub_en7g`yy}-S^RW5p#Nyp#RNLPjcz##DqqX z%G|eUzPp|#f7h3o|E&VBho=QAG8Db=7X@h#uRh|&|6;uf-rs$txm-|WR>~oSZ`+=I zGssiwczd8?;~*O!iU}jXFymB;3#0soo3P$c2l;7LJG3`@m>to(d6%`0muKn5W>U({ zm+`Wr@wr~+@2smA^4d<^chix%*zk95mPc$+SD!*D9IX`pDl7SL;oV=nGOVpxCYT~; zn`ytB)#W}H9@h)Ox2{BYCJ9z!IL?9aS)t*ktSY=7B)E?BoemGDv=D3?W-nBUzJeqA znjVWNtbMjT>OW93#0_VW*O8xLAz^W?1EmO^$?TeJV*6^I>w#oa--8Mj>_#PRTL8@V z=|vmV(wknq*nSnW!JZ6P2WH>|)hBn@)ixh-KAb4qr5Q|z^OA#r+CBG_2K}Wy@hCeT zEZZ5#_1^qhN-`7*{&Ar#7~2dFGjFc);K6iGC$$?7GBRz6Xp90a3RxygBg z{*ezkFJFFd;Y49UreOM3-_?yEa!%;CmJ@AK1#<}#SxPhaJ8h`@8`aKzZrJfGaTO(L zp{7_h@dv97oxf3ju@Xf9rnQPn+PU5L`pr=O*lUhXG*t&IUgnLV!NO3xX8t!MJ){I8 z7PulO042zciv=|_3DkofwY5j1Ghp|}$MZWp?hY&>=vk|a?~w6=k3HqBT;A&{Tz&o+ zLmgkm7TunXkdwXGzr1RXcPXl;4x?=*wZ*{$Q zxt^5{_$t%)z;v-vvmMKISQnY3t!zxx4tY%Uj zha5wq)vE_Z2La-_XKJF-X1Bxg70|=M7unotourSBvy@ia&fc`ovTZef1`S5i7k5JCQCE4K^E^!-!Pw!#Mx4A0CBOHUgJ1vlJw@>PB) z#MpCc&TCLEB0WE3>2*Gk13?&n8|^9lXzGCt16aG_2SQDu`}M5K%~c%<<5zVY1>@-g zd5@v$&s>E-w!rAX!Y8M2{MJFmn5Qy|(KfHm)EpS^>RlU^cZ-#)VVM;U_>mgtQ^g|7 zK2_iVmzaYr_37ju!KoP;sclLVwFGyok|%~aJw^puC}bm$21$nPI?y3YR8xA24phTn zZ|@Wd7Ti)j>(kNeS#s^zh}U#1X;6a? zv&+F79_?Dn|64y7GIg7FfD8Ll_ZZDD+cR}3{3uD%IDCr{2<+Eb0{I63FH7D7`lLu) zaT9saG1*w`yBQ3Et&>#%T?aY~b=R9Rw`4rc{*b)BZq_Z1l4D&voto)k+8<{$x40qz zeLq}$qEu3Aj~T`RiW&>B;Cx<|_yikjpL$fW)#9;Aju|V_f#E2RU8M|4^I-VCbuP;j zNl|eyqTl=udd&|iESJYWkXcMI1p+I+zSQTJCnd%0c&3=nQC4^Vc;<;r^iPunr}{IS z53LFl7liy}k=!oq zAjDjlVwE0^?A-p>-}_I0J0d~LQ2($4Y-v4~yEU8**OLXfp!$hN>A(k;o2UM(llaw; zDYN3+XGr{WhT}I8TS6j30BHW9+zlrnqth>up~~EZbT6Z@-WG z>aq36|NYZQw$jD=Y6E=Q4P8D|Dy|=zT_v{;Ln~`Y$7Z0@i0qt2PM%_uw;QD(_|Kzk3b^T;I^k3 zZHp+>QxT#Ab50qZgA)OOJJCY_(nhCrcSLLSpR(ZP7P}`OR82|tjg+;&=3sF`szSo? zo|bo5H70(Fy(^*K&7^j3gtXD#nG~SGk)%PY&reJ1R-OIeer;(St!R_qjZ;enCqhoI zhkaIeGp@Bg9NF8L_W3xaP;)J0uq%{C2-8snQ{5e`y*6pY!r!-vafx_@=6;nYNch~kaf5-=(2|i z4}Z`Jjp9Q;!yQa7edkKVwO3Vcf%nV^F3isk?6zToVg3qkgCXL8AA9)sVXkRg%TEOd zR0-^_6Hei_mKb&b=p^i6y%U}ujyO3@zjeK2pl{YoYP1&?5D5u2EERKAmC%3~W%u~q zZ+BUR*|rue*sEW@_A7l*2FMNg)RLR9^+H5lsZ#FkKLQ%p?`$LC zmXFWbuiT&wCR_I$df+mW@QmIw3xR5<<#ZnkP*~(@)BF#7M9bMBayX^GuIk+pe}%m$ z8)oR277P9E<`XhIFhq$kD`%KX2?!kH$74XlSgllQPet9d!Z!X;%*CW@3Y2Mk|(JynazH3JPhi)+B71 z*Dsb=iV26^Ef6t}Ip%lvbDU;j7PCtu5lH;+%La2>wdWJ1s97^s9 zWlhfriG4ZdT^D1n&IwydJ3!BC8O=ahC_WgD+`Z*5t>O6XWqL4M9N7331j zBV2mO{fT=j?u1(PRP~T&owK}T1G(jcz1B%`o$Ea9=+(jnxhlwojbd3GWX$}-6=aoC zWR9A@oyqHcbJxt5%k6jTmEh^Bfe9r}Q6=)jb{GHn{8r1Md_YeL+q_l4Teo#KLXY`c z|K`ImpWlD8eT^EB01s`1`FvdhwEBOtr)ZxKD)9bP`MPr30!5l6aWEH8p#!%zip_=V zVrSd`Zev0#RX`{SHl9#hfLy>l^@_A(Da>MHwHOr!aj+U3hnO5@sA2+lQidWWS4UHh z{SeFW4z+%o2zs(RtRwTYRk!cnwUd2f^42mEfeWz_hEcT&3Z%Y!CtY$gP0YGvAp83R z;HKVd5mtYrVIMw*qF=y38#!NAa?I4ad@T~Hs3t`)FiLK z_<=s%20XVYDD!^2u1LMJkAla3b%&g6MjX;(oPD)>qNm(;vr@VjB*>HXt?Tn0p?t{! z)2wDL`8Rc}3gI$6&F(IIXOV<(997 zKKfUfqeV{($$zFKTi)>1?whX|D`t6}zvgEtR5N`3N|M28yY_)Qo!x%7mWt1YOXEau zdn{ykYGe#OJlepf>p*^-nahnZ&mgjkus~~zU8X=cEjzACS~T3q7M|+bmysd@9W|Hl-dsCXLHpC6^%_Qok-=$2-FMM5-TrRx^>Q~p|)ug2mLDEVs2#h zfiQvujG6t>3t89wW2E1!ccVwXsT{(xjJ`@hJ|-p(Sv;Vu2JF{K`VEgx?=yJsUV%q9 zF;&KjEpKv#CoU+01Apga1x%7&Z|A@C7;kdYX9Ce;i^Zx17#-YG)hTdFJ325B_VENL zrRZW;Y735%Di0?NhF_dECp;OO>`2D*a@YJxtuEctEHcH zfT0_5GZ4~MTrHuzm!JO$RRTVLm7HZ7-yNQ|(tY1^m=V%(b!4nw%&94ck&D33e0vI{ z8&!Zxn0{wI-jl!E?5Q=eJXnu_o}FdZxNJ)ev3hp06h%HvtCeCi91kZeZZIlv34s!? z6ScZj*}7`bo1;%-W^-RSs|Ge1>}3?Ej`uncR^5ev9b*fsI%oJXe*UnHF%8~V1yFjZ|a<&@fbm=!@iFus3sb)qJ>MWZ@U#Tjq{p3XI>I z_(!QCd$i33{OGHA(eEDzuOB0fGnL{G;L3Sn5ql{PuUdz^l2l@H7gVLZo(5aVFeEzD z5~D99Xf6~nH;oQ136Fb41gpi0aR?FYx=uu_-^bvYnAlc=m_hF^3>44Ju_o?go|B~9 zJb%3CUq05fe7jU^06i){;o?N7oxH4RAmM5v6T2J_(H;M!I(M~SS;%_#| z9FW^_7Yj(QRO}7{Gc)y8cB2HV8P9Tvl?vYlC_rV+;g?LuI|i3!=2q_|Z^yFzl7rW= z%OUD4O^yfQsrJx?FiNVERXcU62I8SY#eR!7CDm;j7ef+XoL|qV2Ahxc1*w->jAG<4 z{$J-7TOvPuHn7rh=vPE8a=%A}k`xMmqxIX$Pe7;j*QfKhWe*;W4DL$5RJu9b@v@ut zXo(GUI(6u@xi;yi4VZo_K$cZr)rhTYKJ>Q|BzfuYg7jlQ)8}A@RThqmX`ga{F}z;w z>nFOiw6>bVsMkRA+VMgzUH46H$B=59H+>!4C*BcNtQamdX=HE&fbG@kLr?Tca8eUJ zj9ERD_3PWe)6WX%sZH*l1}#dTa77p5AfNRylcYx_V$#hOn1;s<_g&HEy6;>g3!Cw! zR^9u04~bXf)dE){gB_4^{evDdiDq!)o~y@m29i=(RF3cm|3^y!=#`MbStljbJ83EI z$$`o9%YH&6%v_$uhR7Z=4gDZ_x&tjq3k$|v zCf8IJ`*4T@QdlOl+ z)bmvr5kUCzfpnv74nDwgr6f5KNNQB4H=k6M$~33(zC(n%`UzK#Vqh=@kI`!P%G`=I z1H7t?M3WP}nPyh5(hUoq+!|(Q>|PrrbZ-gFbIgf1H6EUVy|T;rlbD9oEy+RpMWykpvaIQU_}c!H8$bovcy29{N-~`?f!LVO;5vH|4VcRt;mn zx8Y9eQQRo&x?0z0M{9DZ70rOZ(B!t%1(z7OkU73+*YeI ztg>o^K}9-wV9|ZwG{3vsHXtg>;>5=%(etJOD5qaLzAj}y&r(CYs!ov`@2UN+@*u=< zcZL_Q(}o9jr9C^q<-;(}aL>TsE&&s{A$K&EYg;sqSE`kum$H+e;%=P$3FT(snsR8_Y5#aD8%P-m`g0Cr=kgH>*SZN-8G_XzxYbHx8z^BCvbG8fU*IZEp z?vEI@eYcyR2Z51gjA+%gG`ismDeTk#HQBI`sn+*+{L-x+1N!T^>wyYx{@Mm^uk-F0 z$yXc3k$-(sKFyZMCbl#B)TtuQ@$_k7r8!l@;l$0l;w{O>{6?8fkv}vDE7QvP=kB`K zm(E=v6!p|C_!|2>`a;la`6raM6IskmUNbT!%QW4vASgY;OGgM9+w9aQb>2_TJ1K`T zro?zyjf7f4wjohZTO*~129l(#J~Ja6(ucsiwuDDPUB%^Exy;-$&DxB5Y(W@LY8t9(i|%b9lMI zlMP>pezU#ac!S=>{#2E?o4h2FF`CAlDSCxlv)EWjj3Ht@B!nLMJ^*->a3hs)%XiF~ zaZ|CZ`WjpQ!iTYM{NsN%We9G1g>1+B_ecu3$8VJ$>qSb>ZoTFR@PCy^pi_Qe4~Qop z@Y9p7VAw&IZyhKk_{d7Cd1)RB@POEu4G1xF>U~{eC%!yU|NAflU*Og@U@S%zPitH0 z_L&`U#=c(+yWo1u03QoM2W)Na5u>N>r@E*!ql^CHF1v!RlCvr_9Ma`ouwQn$3;O)m zS`T2a8<9B03_TvKEmeFLJ?N=l2cWj{%g|Rb4t0LwR@~^lvvw zRme4~(8&{KV!YDkztUFfYn^-p@p7sS_oJ08Fs{}}&xP~GD4{wnA8SbcFJr;FIL2p2 zs7-bEzolOoLrx)OE;_>oVlnPi^#_lKjyo-Axf$F}yg5+qg5OAd-)AJDqBLd4ep^sXRA_*Ym?gRiRO-Ue=Age{ z1dM0mm24UzqJv^dR*h0>t7&QlG$Oe623_^AwBk?<+^L^)EaLUqNs@>>Hig4MZ(W=P ztIHkM3Z)T>rvHg-gxfFW?|;YUFpqvIn9cB4N-wn-_*u`Fv!WAK#CxOs{M*A)j&IJO z6qa?1B{6odu5z_EdMykQtwtwr>98mt!>tGYy1t=;f6;0po8Z~^zK>O9fNpPwj4x_< zXpW%=_dr|4z9}qPDiW0-0$XQOC%ZD#tERTr<=Y~{|4CwUm6VXbmnM6D&Pt>E-YRy1 z(bUdo+&D@23rU}f+ySX$gtrK=~Xc!-So?Ll8 zDR|+l)s3JS0N$8gUF?ONXN#ecy=;UasWFWH>q3~2@jxAj;CvqAbGF{zR2GZei+=uT zf?lYZEdPmEN?w<*L3>#J#bd%%Gi?z)ne6`5%AkSkHl5D*kMe}4cAx~Ixo=y4LDxLr%IZeZ zNWI@s%0h#j1p5WB;^N7Q(j_U&FSUG?dYW^dw|=#G2nq@ke|B>C|Iz39Hqd?EIUHKT ztS|!?4HWL!GGkQYlqPMvt zi#X^A1zCqFwoNvkxt&xK8#llQr*V7#$Mi3|N`b1+tF&&n@|rMWqE+j-xW3wCU2`5? zw~8<)_Yx!k@|S4oa0vwvV1O$~eMZSii|ps-JlxdR6M!Df6TzQ^+(S;8Xn`Wuk5&x% zcwXtW?k)Ap5aS8?#8Ld%6TO~Qw9DuBuFB&I7Ah6-i))aNr7wdGe3Yx4*oS7b$_89C zR0D-s%*mkc+kd)B^P0!ipD@oQq`uNZ?SR*8!-;NAbGvqk*roBPhxyN;-7loR@ZI#x z4U&Co4QIA8Hv>k+!$q9tqLotKHE{3XBhf(-vyWaSwpMnsmC#Fx4eF|f4dd(!U(;V0 zdVlSmKvk;3y!8V}?5jT&G}fOA`-cNiXC;lg<3!zF?aT;WT)?{R%;B_^$TAv@N~z8i zy>Odw#H~Ri1@KPsp5iUxp&fo>kV>VM;YK>GWq6n z2anaOO+}UsSL2J(uZ9QfxeOI&eq8?Zh-VuOS)~%&9g!M z0zR@AU)DYWHKtQV1Xtb(F>75edf<&b6)1S+9u+ghHg-?ty1L+^bZ;M2S?CIX^X6#P z$d@(e>yLy-g(B`V?ELx(`cavkr{Ae6+dj)G`a>X+gwWV9-QI2vgU&0ytho50W=S;p zX}jL7=xG)=?H@{m7j6x=^_r+9Lhdt6?>Qw%g?k-P#i~RO=OfjAGy#p5b6e(7we;$9 zOmUtmvqRIX_I1G(zs6Pa5U{y(d()AR1p)5EWNci`^f)ODSj<#*N;i%tO?_eEicl+PrkD$Vc}4$pxT1)qqJK zYo_^sOX%I4b2OP@mdTo4?FQ7sbRm6_&}9!4iTUbO#DgWcIDnMz{9s59SGkUQ*Wlf* znXUBZ9oy5bkcynKf&E7apNwX%$s+Edr>K(p3+RK&*92JlccGHFhIy-q|qd8q}tCITzLwPTaLQUO3kksxSQGvm|FytoPPF;y{w! zN;4~)2FCy?ZuSCkv<^VmM$d&o=RMVVsd5}@n~*tYrbCN#49 z0`{kIWa&{uh^R=g4y`W-8eal?LA!m}pj{wVOg~5)=5jEP52FwA5gUa3fG!h`^2j&s z`v*Pg(GnhJ|5|zVnKdTMMgIok9_#C=n()s85K;NY*XG8*EO|=G%W}1| zKmD4|w|wy6+ms%qjuH|GZ^RTCJdzY$bn)95(vcC}eo{njYkqzCwo&97_0;4%clRA_ zZ6Fc+P!4E44Cfok~kF#M2S(bsE~&j5fevP1Y(pYDItRVhk6)V6^5#v54- z$u9#jYlVt=Hm`T?O)IhRUZ6fm4pSrIjED*TbM)ScFJ*HWKa#*+Xa{OId0j{q_Ong2 z(*^QI{I+T6({z&R6OoRKw%qAr+1`R*NG|w1M|{364(-V*7h6Z(z>HZAH%9?Iuiy9^sEN-|DsH8x51Xt&r9|sE5A+6PG44AZZYx@!c_hPyx2o9{H|~ zcbl$7+pZyYm03Z;!a;dK&-QI8r^!>1uN)t+)6VrFJpnL6)tBQETgsR>MQZQUW*?`A z4h8f$=7rGu#OtI6@BFaqp*#m8W|*m)4+PH#SFfKNOA-p^tblu%`{8X!1f|f|)stU+ zidXNTj1|yHfoGTpjLY4}_kQ>3rrsHJQlkpb>xI`(?O@9DT{e1$bfka2ntF`wPFx0N z63>23^nBlURYm0v>XdbEk1glH$-WbQwpfwG{Vv)Ut}V9);)j zOhRu51-ESgLw~=HJI$=7dp$KP%;BOguRw_1jDtv`d8w1yP?@J;i4ZodOR+&O8MOth z@(Pfi>$`&>V8lw6mfj+lJN-1?>ha&wwexIvg;eb>8jA@{0YDECeP-LmAS>~)ORh37U+{!bER zO-sB`SVH>azy~0~l|uHg4EPUv1yJb89JYF8TSGf$Bqf z)D1+6^y0lEC8L}HR^@9=(>tu^K%h5AM1d;Nk>By)A4;3C%*Su3D9L^F@OV|*`pulk zVqI=2Ki0jQtWOUe>kK6p=97dTi-G{WCTzs;$)R=BFV=lq7&w-y!S?J=l?HtChuVdC zNY~jKsOj#btIW@{Rej6te%tGiJjp%__p_^p35f$IH+L0ltf7sVviu;sbPmZK$n^M^^wHVBN5EprP6#;$u}M zD*rs*H2p({`~!WBtUWLGWEG&`B_NbVVCh`IZ2%yIQ4LUzto7liptk4y#{cA9(g99U zNApn=jT6-4)Q8mRGWlq@Jz(3M;|s~UJ;zE|*PzALSp_d6aV@}ysF(J&V@n%BPE-Jh z42#oB1OrOXXjg8sZikZ;W_8+)P>pbmVNVvdB$v&KjhB=+n*e#x(RJtg(eSr0mSLv6 zaXD%2fL?YUQei`Cbh~!*4tZ^DkrS5Qt3oby+o$Ecr4`~gnC~`H`g#0KwAk}Cva8fT zza(6JmK)~z3-Awd7|7PU7TJOPoN|6aWl@^ipBTC;oky?fV{RHZj_28f|2#jRLABF;r_`ME z_o1`;{K9#7kEB-415zu0eXcJ04ZcZU9@MDjmB_&hGgUu(eQqcUE2jcq7`aJL%^58Oyr3*Ws9+&k4|gm6o+3L;c=91>)qI z7tl-{+nKMAbw^Q#5Pu^E&7Gm6xFh_9@fZBO*ML$lnL%BfVQ4ED0p>sQb?WK_{aTT5bhVRXUHsx@>hb4ra$)I zSpc_nyb5?hKuf8fRFvsdkP+;%K!!BiYwt`m&SI8wxLz!C)VXm70l$8H9QYg4P!^G1 z{yJ%_%@UmiCMC+f+tSjX4)@3PZ3j~hlMDtsgP};r0|42uCjqRGH6ZntSmB>)IxL?T zq!qC?))zSWV68KPvwO{-*MBp*Lw>(*ytla_%y^aaDp7c2Pl-6K;4<|mfDJSHK!@>c=?liz>W1>?RBC=$G`(8Y2^SoYSB8<6gfkS`Yf? zU9<tRrpgLODW*~Nxg zENnhILKwq_kKUdfID5JN!ZEbZmD?kH$1%{IfiNP)ohJr6ER#vnu~(Uv-6WQy+A>g( z?8=IRy7TkrJom|mvW`=Bwuil-wuD;CdhxJX!p&E0sDnOkl9Tb-iKM(I0md}VNc^Mb zeHQNC=uF)WUor8L$$iR)4p220L&k>o;j{S-C*?5Ro$U&+43iY3bVH6knE>wqlm2kD zNw`b|+LA&n@?0kV_u6PMhx25D9D$XJDO`EXmHpdB^Ss}EA&tqEurqz+nG{^FF?c$~ z)Oc4;W1Wx_t*q!cU6y2v+v2o%qlJvzj{NEe;DrR~{RZnm)$x7Hb752O_PJin`Rq1w zsm6!9g@Uo)>zt?Tz^L*-+qEJyr2hz{@kgx$RzfCR&qQjNIKqcOs*MLK0URTtCvIe zGTv=&L0uDV&SQO`zshbM-@Uq%*g=j)URX7smaU8#D{p|eM0L#)Qbs#1+&qI&?Db{I z_$7^ZVXUa_;%!k}E~`%Y<85mpeEe9QI_a;$(HM3&-vU-tOGEJ1@kHkEn^CwX@8~D< z$!+T-$rs(5A>C?26=B;V<4!93%O7BdL^LZGfY=oA-cWi556YlAqe(|IgMlV7gb)glNS4hlm3)g_J+R9l^j3j?g|p3IpJ9EZLW zn(YPBXSa6A^I>L43yiBN4m0QbuHXFv@>AVm`~&Vh^-wYRGe*#rwwx-YR}ir6- z)SZ4-m&l-|4Vo*K@Fq1Ho`HHr>xn2Georbh7hsll=lG~xG0xUBwfE^qC%n9Ms(7Uk z`OvGTMX!?4xC57ab38C?zr@y=b5|^)G#43=NKD!>r;9gCMvrAKAg;>aMkryox)^6Q zH!O^a7-3^F1^?hF`ghXzp0e)O|7 zJPSacL141c!px~LanuRb)>meoM;yE0ry=eUzKlFlSFI zwC!W-)Rx3UHy-lE3tY=WI)}*%MSQV`K3;0%0>_c40b*Pu&@=hilKQ1vSjR)%p*>C0 z`2c8KF2U<{0Boc947h#Ul zZtlD*etvIkd^R%UPe0QtywfyPcbZ09bu0cPeN|+?kX!1s?{p(3?zDo+*7^^UFL5#i zRY=SL;pE1RBtDRzx7b-nWlwFCTE6yB@rJXF1JN1Y;_IDQ5sGzaBsU7f5QBzyrpQ78PWqDsA?w2R&E*Ub}EU zc(-e`P5DB@el9zCrzI+=lUVMuPnPsMPusr?OZMPeLHyl`DFB@h@T2_+DlRM%v0okK zX2|P5;vMLbfNZR^FazgP1VGt;ndRGbHap4qjcIPTU%lP9ChYk@Eb-BuvKkM4-TtOL zu{oqoAh_q&wHY$f(R4$OO>M6@%QrB4jB|oCuKn-Z zA7w$O%Sk;>o47t;g+06D8jRHj?5^CAA7a;BZ!nzk&1uGKh2L&c<=(5FTK@miuZTZ+FrcacLXmHdqfMK14_{ua!JkOiEN4OaYOqg(8O0&1M;<#;V{Pjj>j)B@d!?M3X=7+$Txhr0@PwRM1zFZra1Q$VRYwELjn`_4)BwTZ0lD|G>>~ zGU_R5SFsC~I0mRW1=Xx>G5)hfxGeBpz`vdsrS<)^6@FvP_v=j#RE%!F+8 z|6sz@>&+1a--e>Aqx-%59_Yzqk+b+Ijt)g$wcWYUKP`-lZE@`(rRp0BW8I*IwvdCJ z_u#+s;O#>>)C#x#jt0YSmq__V0>w!gSYzu@rZ>fL?b$BS5dVpyfP)oKlvssnrA@r_NCm1t%uPLXlyTv| z@A+>^!5kWswcuRP=Ss?8c&hctkLp9A?#Nz|>A~_eH$@2G9b!c8P3jHrX|_up&ttjz za>$v}GBWIv+6K|&wQcjb_SKz%QOh3tDhPy z*)+%1rCpDow~AXpeQR+9hRRHIm@z(b`yE1Hngyw7ZkMTXuXzx{v=H|BCkXop^4|sd zKjir6@a*jDwR(ksdE$LKKJvNQwy)2+Q-byfW@gluT|&MZx!a4AU4`+vn@wu#{T1>V>&-%=wB57pRUx=&iH=|4eg(8n)QDd zWs;f{Q?Hf(AGJ66$J0W<$=Fb|?cb;Gz#kt!HT}kc(=ni00OScu0P;| zF&&W!_qLYDjU=bH(^io5?L)Q1vU=cn(7}A&r7;7ZG`nd@ahqW>V6Iva|iE?1GF6u0Fhbmq#i+LvVCtsdGX)UVMf9+dvhh)qW4;@!1sgo(wWRSPaP{F~I+ZP$ zXq`)c($V2eA4T;xejm?CnCO5(ZXx&Py3NJyl%o;0V}sI_acK}zNvM*cnt~j93m7Pa zw2*g$o0sjw*fZ)?&tDEtqT-zEHX;QGos#?=?uvGzd)oxdO-bn!CEbpQQ2pD)d1CBk zh<&=vVM3;Ho63pSxqyz$^rUk=DF&oA=>QlDM!)1Uei>R17*U!@hP>~n59p?_#ab9v^<1GUAeX5u^? z1+YdJG^YSPT3<(-l$)UTiB=3~T%Tt;FstNQ?wG=u;Ccu7?PWwOP(9$M>o@yNC*x(; zhw%aXGuljXrD#B%OQ{NM&~UI#5O+|R4&)=7vRTF0Al!R+Cwq9qvT?)UFpj0E9``aPpcVT>1sUUqzN|ICf@>wz&(2+ z55k-kPh>Ifu%~ivyY%YTJFMa^Gm45^1}`_z_SfHDiE{=MIBVen$Cmt2%?i!ibx49g zFSgNb{}tz^wt>ABfD1E+*-e|4?RIxrECJ9yOgDf~;~ocqK+X!8fIuFC&m|j}i>cQI z4xG58!+K<~x4Tq^&{_8=68cVpoyT630cMMkW@4yO@RhSklW|=v#MHS%Br~qeoG;t_#@YCg7okT5qZBvrs+{|53VjVD6rztF0dP13}@)W4prDmdOK(7=Qc{YP8#NU1ZYr3Zbb4sg4qtY@VL{!EAAm3 zaDEv_r+sU3I!prZ#|_Qu*2JeMzZ|&wy%(Bq3($|7RB0uy-PM;oSg;>esQMsT#4Du1 zW~XSi^WmXI9BiNNdz{?f6bbtU9q$_B3Q2CgG+WlOX*U(?PQ!IpvfO(5BC5-jM>q=Q ze>k=q%MN4ehKV;nRXp)TI4bV9khImOR3^J zNF5&@wnIi*JhAe>ts$^H^sO;*YdWYP{Z{^q$3xdmLtTP+g!QabO+#0TGtxxi@>J}4 zVQ!k=h1H9zT*sFEYA5Cry%NSuivS&E?S`gG8(!<3jTT9xAq~EJWtUi4W}(#Skv%J- zE$-E2XrERb5#ZLseuknW4uFlsW4<%iZFcMt$KkI2k7FpoUr7pF+Vx$#Apj1_ z!4$ID)ivkYyiWKPa`G)oYRC!Gy_CTg-0HU;=SaUA@NIc4f2?mQkXvmPoUa0Ca}zoj zmXF=>;a=Liqm%|2*%c2v%ms+5Fg)wXQ;FcFYDqnu(kAElf!|4F&#a)7RZ&2Dje=7$yBR5_tW4rj`FERRLb(ae=EqaKBRb%#S z!q#+g(9b4RE3TP@9?Rcms$l}F*Z*zJ^OA)qllos9IW~Skw!0GfAVlAAK-}o6{Np#{ z)xj`7ulgM;AT7&LQjfY1bQYZ%@xm0dauru}mc9ZLo$HJxAN8ZITOD z!yr@KiM_EoX+F|2dk0PUy3#{zp#7adF78B#)k+H>;(Q8qIP*62^S}+cH)+iS<$7`% zmlx}>NbM1O>P`=}UF)n#kIlR6`1)rqt^d3CLCxD%UOVPL2xB!uuOk1^=e^(*QNT+s zF$H`4`GNQi@c-f!0f25++sRZ-RCa5E;d=my1H+U(MJ4|Vhs_{ zC$Num=6#~Pm@>=Q=ZQP8Uf6<)g(%(%lhR>q|8P@YMY~_9oacS{6^RV*oy5gca@nH^ zFFIT&YNk7EXi{_}+jhw0KhzNWX~orhczEM=lBc<^`m{M|QAXB*eW!>BljOG4v*0CKE}li1=niJ!_-!EKu?PW&^B(N0#Q1sPSg(tT1T3XO zM(C?-@>Dn5V|L)La#P_;KBnbcL<8=ZqeZ@ERuh4WQ{~4BVHcb2bYi_LGAm2E(n8+8 zvXPA23BJ`In8Xp6s(h0+yyyzpbsr$yhaI*_XB?Mc%j+lfS$jI5nF-FLy$zIQiENC0n~Y#~rRVImKZ%e?p^r z2hUV+sP}uy{^+6QPO=USv*jf-hW}8HxeCbsI~)Z5j$n^-T@#*|I{S#*cdNPj)zw(o z{_AdOC1pt~vD7@L7yi=Dw`$}kp?|Ykp?^R^IiQb}I+p-_gmv(+mLhwL20S4iA7d$H9s6+j%@)tFq3J zA<)-%Z?lCXo%Dh-Qew2uxbN4$2GD}q=}rvM+^K?_T|}G4gs@!ldmu2+B?Fv_Wj`6C zmsokunX+H)%i%!dC1|wY7K3v4KJKXk6MseBtxGEaz=QrJUsec!B6C{hjK^g7ETuB$ zZ8HEMu(WOAl{d_8HUOy0iBnc71C?~MRhlWdGc>pSQuZ7mNg!E1G4~__hj{vAyZ})wHq} z8`hUHygzqZkX8Z?H{(z%lXlee2OZ307(h5G!p{px?2iYXsbbN;10asovvICq0O(MYBssSo)QOobN1W+X7HI}}2F<5=O~)HucUNkr=(3_$Gi`_KKGoy$qy4;< zBIvR{(;PL@=zs46NG~PAT6Jzl^g|OiaTYduRg;RA+q5(5=he{Pw5|pL`KilLDkPK2 zY@v8_6~+NA+iH2BUJx#bJ?`j}{c zcz|oxrS;m4^uFHF{gnzdX1OVE+!1--6Q9<#J&cn(dFP3QSSj z(v`z3x={tjF@U8TGY_?fVP&g_V^b{wxmZ`9*B^3uK-iU40#SowVdM43X6Ej=XMHN< zHSggAJ03v3L&YcW+tNV`ustZ=LzhMYnBo`DGdjjc&wNv7D=&HOibj%>Daiu7j&4H4 zu5KF9=(tm%nP>V0xFJ?MgW5dZ3hLS)8k3Lv(iIzq%dr(T3mq@`>gPB6j!3_mx!Z7CVuhYwtt%4vk-u=h}t^ime0;+zh_;@`vQ1KWJ*oD#FtN;I{t~v-Q^H zc^MZpHIiaFbODVYT98lLUdrzzxLdaX^tCG1)qKEjmj;H-9q7_b9UWvSC}=b1oC7G| zUMe>4eI;0#-q16+HeS7nfhL~wntx~K!}@vjaNddZEF#xz($zrrE<$LC(&bv=GFBq?S_M^#spvgrewCv#tb$0z%Bavr8ahc4<< zbGR%IG23A0y0xl@g!c6bN6;dJmZurS_Vx$6Hp#=U!3&tZ@?#yLk9UKng$m}MVqZ9N zSC1|1{ds137F6%y)*a7@k7OK}0+e(dm9dXFWCrx`%lYN`Lzn+h+E3HOn2Kl5u!7@o2*LziUbCdrNXRA$JH6jrheu8czKm!v@-`5D z4@w7vwgF7%!SpobN=(gmUNTUK5;IT>_2=!aWsfbHOGR{6GX!fscU3gizF5J!b$KP* z(4^_{_nPJMk2LMOY!F)<3Kb?e7I<2fTl1XPc9&~)t9l55vDbjAcB`7L_9w6mz{j=p zU7Sk6Ab4>jRyW?fK!2H@3wbQDJK}gx;h@bG$WvA?R%lA>QEqT75Tc(EFD&tROm11( z%X#{R;-|A|(QcL5MiwY4Zw1T6<(Eg_@sA2FRea}}0`FwvAp@!|EJWYwfqoKL!I0@3 zwk#bWhx1wQ)mx7iFWuT+#nhjLc|OsyeWN2S_Itb$2YsHp3JG z&VgtYDu?7sk;}l#UM1~IYQq$0XMSCnErMgj*LK@_5&OctOnmFum>&5@%Hd)r%+**EhI`bDXc)`cZaJ;k~jj;X9_{|Lf^V(aaz2s ziLSdn;=AS7yMW-asV}t6Zx0Yr0JTZFv_5S)8m~xneLN$6F{tI>#kp~#M~V!O6z}x^ zu3P-}?v9rfkgiEA=OBlmDh&e7gb1PoXJ+6nCV3#WbOp$N92E~QI`!e8pue|s_e#4zU7a-)5-qBnoX49O|ugG!v9B~{c(MQ!=fyY>---mhc1 zu@D8nDpE463y;2DobW*4@-bDFru{H;M_}vp1z<(}u4UwGR~w;M^9=@DzK1lOl8V=n zCC*cn-y}DiXFk7fT$8mw27%`1>~gA2GbkQXWuxNEnD=5;{a9ZE z*#O|qV}!)CM@#K!8btGBgYxaLFQrua>wcK{b)F4+RNAd)!^ye2{)1QPJ$<90cIow` z?SfvtKb7TF)<{6NDElvagO?WO+#Fiy@G&2j3`d!VPR_pY&Z80S4W- zaNf(fKyLI5K!Pask!$8ez+HvDupgeJ2@l}kBR*q83(*+fe;sIA-qcod9tVxxvo)*R z`g6+j3M+SdbK^~q5!|&$=^02s(&+=~th7D_%irIUyPjbqFQV-wf3v{au+S`Gs5jU~ zsDZ1Sv*@YvNE_Newe#iUcbE6J%c+D_Nh$+i+*qXiH*e?u)GF>d<)Vs$!Y47<+8@dv zV{ZTji>#(b<(++3kEUnyS@#Nv$0a0z(spSLXdiy&u*w~45@%AzcT?q1#_^nomVwi9 zzwp+pHO)D-pmW$suvkyKQl!@th5z2+mF6@ zw3!zBEdSvtfy$n-HX|ct{*g-W_lixncn|gzbXHKwGp!ejJH2&U-x@QQk3Go|CG~$_ zD+GwHET1+dcOwO=W6hJ|bq6$Wb>xS6vqdb9HP2JtDEW7+jZop&@fFOf(Hk;)8V?Q` z87g_;>l5Dz?DGPrkEtra0q4yr0=5JSiz;sFYQy`dTgUeRXm34(3_@XHUNM~$5kcle zXrpsmdtvC>--Vg}oT_3cD@yVsv%H7s>_bdsN2;wKks-HfrwAf1;gRhS~wcb~* zC2_7Ao^|YO>Ua@jhVSjgA<7t~X(WQKNn4#|JX{2{w8(n!VZnBfgM|u$ojYp;ASAm(Y>CeUQ6Z6Md=sQFy(L^8mKC+;6Q1?WZeJvF!z?_ZpH z05mnaiRu;5PMR!UZ=c7n+YUBJH%WjY<8hBWf3arB=ffNBFx$DsZwCUkL=dQF3m-lw z-;+V=j3w@m-ai!!XyAP2g>_#>TgC`5>%>`Z5Es_R{!HP!^{9E#iC3``)^y?Ml|ln? z&hi8$+0Ee7sKsoQmJ)tt!BjVph>2v~ZtacTb0{{PuEoVkZnur)F9k#Eu=Wo-PevzK zG&s(0n^!xCKwDlw)LWfwDod(SNnx@$*)-j^%JQ}acByd5uBbck$ zpJry=`zyruvi`9|kjG;?#oR!wVYQcKR$Kfu#{ zjvcKnDMvIv)_zXzT*a4!>No1iO@49KvMHDx9%~!x`%=trR%-axq_&G%5{~i`Zy&b4 z-x-MO*ebFQP~`CMH_6@r^p{Td=C1mA^B5pvf}T(MwI5CGju=T3?`ThWU*YTXh?D9V zjNjSK&H$H2yjV0}NZ5a+lvJJVecl0(t8-ihj;nC9B(!Tu?sDNjBkwR&?g7cETr_96 zI-eMv9M^Fe%=~6t-5@>oc;FE^LddOUkhWbz-Z9GWRl4x%vG&>7Cr5>`m!KxJ)Qp$f zQKaoRP*|0vgcfQ*eE^?c#p%&>qr#A#7IELt$itW=rs>(_V{Y$nlxpE*mOr5{0p z%`NF33XTO{zC%WQW6+mN&ODXeRC>fGT$Aqp5nK9%yy_~=)cuXl;Cs+4rs2(hDrVBEs9LF z-6Q`e*gYc?r>uJyjxs$pUImn8RDp$WM%Mr&J~e^3Bnp02M7+=#3 zNHM+;)QOE~_>qPCX!i3G^n&1%E)k*Gbb}9P9nz()9D5l@d)-PaAd+tW*QfWdyW39+ zoYHY`pBRjk(cEOh?6F8|TDo!n89JzTGwy&E7>SvIz47PnkfP@fdfWz)yb6`~_gh=JdX z#$cymyPue1mm6sAG*GsiwwKGAymLO-Og>>1k#P&!G+ih@7m~K-JDpDaLh9sBh!boZ zi8tJs4wUvC%f{a>;d)1gCH-|TO8lHkJk!D<%3cL8-x4}31E>rcor~`LdXC?e($;6|Z9v+N61SP& ztd)Gq0z;nzp{x%`QNzhZMH=o-?|qPmP8x4$;iRq9s)w~L*gAAYX!&g|ibp1h6-J`uWYMR%FIu@>U0@Cu771S;}sK^J32> z&2J#Ragy+9SlLf9t^rfP{pRy3O7;Uzun!%Zlf})bvemz7buv0k3pkX8ApV8BqBTjm z)h=l8{8k`}seP;e{%%l4baH+_Khd8&t zfjZ7Bhpv%69J9Yb!v)B$?yn8pEHVXhEv_{ms3R!Gx%QE#)YQT%4hT=);p2PeYYVaN3v$G>orzt=Q29 zJuKL1r8dszKsTGKG{@t@cB+}&?a|jc{JuTknLZ(MC3T0abE>^-opnmT$kj*dbyj9N z#(D)X;dl#>?!HfU#yWq9R5XfBnOj~38F-6zC#5GkGM)W`MP}ao(d~Tzu^Q^YjeCU* zp7)cXSWR`{zJ05~jlgc!djo3siJd{SC%Rc;{=q??sWckeamo}?9#a`JrjbW+Ls5t! zjs&qFJEz_iap|xrD9ByMls!R8l9}zrjM--CsM^vBodI188b6&UBJOZwexNHx5s|+hyUX$^nwF#?{+V zunml0pVl#1d0Wi^*}MJPy#5Y9+!Y_QdS?a)yOI<+;&Vg%1Wt;;SC>jBA9^ze$;~my zj&juGhPSSjN_E?Ztt>nJxzB5MC+9r(iB$-Xaz%ngn~JR-Hq&4~$b@ew8N;{LU>iBQyn&kBFmxnF zQZQbZBsFbz5pcm~nmGQ?825V=Vg;sdctoI9g7*RF7tbO)@=4=P)ERJ4(O zFHTC;96k>xIB+1>wCGxVV?|BwaSvQCypvyOxX_^roZ&fDcv3#wYPiM(8RbQY9fi35 zL;&#QXH5>nnTbzVL@M@6YPQmEq^?PL;B|m#BF)Cz@uQ!vgN3_QKzXJ!g80?0u{oKn zsWbLEMb#x>G^mBYiLdjzQHvw`Eiyz|js=3)q%+`p=w}`mnQual9EGE5^ByLB*#IPP z`sL2OdC23r4r)8=P{Fl#2ye0+mBrqp8MI~;6Th>QQZvWG%WE(hOJmBYdAKZ)EGtUU znhhiq4j;3F_|9@wa8C{fX_s?dOndirEY5;{l_B@$^Qs=N+AQujOU2NN1Iyr&JFvjR z`vMvLJNv^63CB`wrYD*!DDu7?J<`lRnC|mv{|e8`E{k97R4S{~FM4+B(kz*5=Z~0q zI}tNBVl@H45TlmCs%7I!Rn^H0GAV^njaGgQLM}($K~rd{Ey%FRi$q#ZIQOy}S{#tv zmZLWK8LAKgz74{qOB>{L`@fqB$YpzszC8IgK(K$Z)bX;e|E6n2^GeA%qAz;FbJQer z%=-5Di;bgZ@$;u@l93;NWTo*27UmLv(jT5rpd(;-lbe`%ckP!;Q`X*{_gCaC(W^HM zvo5%bH|bPNayNos*B9@DA;T8?gG+D-(xlySVVo5LL?%A=d%{?WO?i|y3cujodY;_P zodd!J*Uq|%mHDg7s-5UvVC;$DzFqg-lP(ibM2IKp-tB;T6pRK8AODS&4_L?ng@p$J z8N>(}{Jfh8gN2!bHzMk({w7`DgO8P3E++)<@b}PtouX zauX>vEz5Nr=uDuw{%SZshd)LAw?T<>O_k%2caEg)>)qOD5YY;&Mus z$8Yb9Mjp^|*I~)>>fB{f%~$lq$o=p@>l;6tpAQu2+SY@on7Zy~ zZ3I|&wU?scz70&%1X!4uY9s5MjeDiGCKuViL#OAu1;Ml|N zm0g^CC^tDJ)*d?cR9ywK-z%#fdblkcQGUOf#$PNQWWESFY>rOp?Pb&vs;ae0@t;Myk5RqEjgWHgBtjm7K-vG?DN zX@&NZoswhhXJ-68)!{&vySd-Ljrk^WG9_wwY?2!b#GIK6f9kxyBnlj z7aC?CQVBf)ue7!}We57>zU%419jwdsupr@a5DYsl#k!V}vhF)ZX@B(tVH#uKShF#4 zu-5NjDvBQIk*i%j56PU^k9#T~d}x3dfq8@+yxAHWM11*uds5POq_nEql(hjE8@`T5 zBhVkt^kAF34=@(t3UPT&UwpujW(j2b+MzThwB_L~+Wt(Rjji{Wq(YQ4TDLYu7DgGu zbpz_VxRj%Z-%d=Or=w}TV6PveCV3#LwAwRthUza&d|hjExc)!|8`(K(o3yO+)fw#( z(5x#vbrv)VD?Zp27XpT9m`)&Q@N1$oqiGO+&g#pdhpzg9~ zPH4y5LrI|%Fr8s>q{m^gYq^NPDLa+b(J5)Wm$_?Ip+9059s_4K59Ao8>V<2Zm*E+Z zyCbhHq9XTgDUEPgtvA8_$X9N`yeRJOS; z;fDT}AImhZHpQ)b^y_e~O+erH4``jN%K9T@+^ob@y5HRQob!~lD)I(jyvKcgrB)eW zvMR2d#C1AkBN6rK>RRxC_1+hz^!Mys$gqfVz?vlO9lJ+m$U$w412>uniLhFbZK_gZ ztshN(cqA91SoX~J#B^AQHn->NMs#QZpjjD=?nNc3l`&-M2AG`G!AH5s>%fIwcQ6sBn^m5t`Gvy`~K)iX&f3kZ)Rc4USOD9MffvXFuQW;e27>3r{M zE~mjg!9DnnFgD)yfwkt^ks8#CGva18C%w=EZgTm%S-i)lvPVJeZBvh0l=VHVK*Ofm zC%o+EW|~UMb>dYHx_!t4jX@i47q3n=s8c59wzo~ntjzVUX_zi@Sxp0pwE>116@T7` z?xU|nAb1KoAveZl#~J&wsS-A}vm$a3D%cP@+L1r%;8aGtRcmT%-csTH?slB>!<#AG zS7#m77ACLC@3d~E_sPqc3Or*Mm%qU+=-uiY(HsEkjMw%Ts@^A08&dY)Mb^=GqfD(} z3@QjuZ!SWY*i>~F(WAmj{mHMM&r*X?`k|$3_t<7JltcXb4+Wg?4-0M9HxuJ5MqgqN zAzJOb*g%^#K9FnNoZsuJ+(#{>S?xcDFff1ECJV24e7$8v&GL*Dn{_6ku}$V}92AY+ zJf#XLj&q9O4PIJbIkt@+-@(}2gZSa(tYe*m6jP_>7}G97?6^Dw+)n=AL2U*fJ`nT%a^6@h8B z-dK6xJ3s7*HrsTm8t->0?#yHBP6k<}m5%C0td4KbE*NTiAh;tlIoV#uzIPi#Ei_f8xJAzRauMD(<2~dyE+Adl!HnKY zzGJtW&dD~n#gBsNy&0j?+ihhR7c^z9EOm^O9gpM;F;GogyGRY5QyJHbFRLpWmZeEILlUc zq|)9mqKqgV6T2p!AxiU@V%)Pq6{U{{OOtu0X!27N^te`VlOBrE-T~bS`fO<2+|a|y z<7#fO4@-B(MZdDCVejk|GeFJ(N4Es;$I1?>sI6l`ScCEVdK*6}M(pvy;kfpVjJ$`J zL9!mTP+$etAl5)>QT7s07FN7kxs_gRsDNSZ9543`Seh^2S`y~Iy1takJqiO`dIM#8 zL0a=<38)T{+1}UP%4&UV^QT!WLjvmS4pJATQ2+bqX!+a(y!M?dCD8k3?rK0YEO`KX z<#>PdR5sI1_~RB@O*K%rIK=p5mVMB4AkSfj7ITAvK|M#R|Fy< z&%xPq$_ceFLD$Zbidt@3 zr@oZ&TkqJ^Y8oVkBfh<^qe&5zbcACN=VjaUjOrbZVzf+&xcI7=L2@L&qJnGfCo6F) zpgw=5n~&`Gt|b$4G|OBinLL~7OJ8V)Vcz-p_hs*yacTP%OnZ%XR5`MCvO|l}+tr=@ z>zH@6=hNT*lSM8)q66FCvS0F85zuPvYf!Xb;MlaK9NPlA`eqvuy+g5O0;T@2_5gB%`*ij zEXpolGsmm&?%;e%FS|+R!^gN}#f;s>I`HoBT_qk#9ELM{j@f?G;SfYaGpHUTB{>Zb z9LMTbKqUYm8n?#OGVn)=t=<>N+?k!-Go#2|rhyYZS`I9AO@qr!u?JkoRsy!`3Tac5LwIaIgQ<=+&Abz0Sk-sG!DKR7`2MX!igib`urxgAw zerOD*yYF|~W9OZ!i+HR*spQ+YeYH`&<3FnDcj!kf-Z&^sn8EeiJV%i?jOGgOc*r^4X6r+kWA1E6pj8 zv;GAW%^=&x*La8M?_RGz5G4JCBRwOPRt}^f2ThO}}g9gg)aX?O)FcKjNiB*T%LjNU0pQ;Agub z;%o>7DvVb?RRN?Iyjhu9z&QdgDYQNp`^MCUY|1_Q0N3JrcskQG=4#>OJ-^~U|C~;un0V0!EK z>Ws(qwI!KZp^*__dU7*Wq!e{?+LF*=Q%U7*&am%i`0ZE_V zpGbi(w0X9NX*A(Q*s`wO3-;Cu8<%cE^r9t9V-m4IA)V3(Ogn8x{QJaLObnzZjfMfokp?}{np9zQ?FXB zzY8Bn7=#NY*N0M)e;ixtWjgB*!R6C}TA>LIHKtPD6b1ZrVjX~`dKbR$0Axl#D{G|4 zG$6#=BK{^DO>Im-_ZgL)dBcU#U6A{=q-!1mNkY@smiY~7@4dymv>D|4YR5197;qQu zNh8poLuD$wmI;BlsZcPqUhXtYyu%x7>tY?%LB7+5%62W|oAVWa2H?BWpG6prJn5?b z9HU{m+R>Qj1RdY;M`ng(b1|W-C&=-^wxm|QP9wm74O-XB6j>RbZCyD?_h-3Vo@%KO zp||3Itiv;ziWf=;SV$Z;%wifHCwkt|Y_-Up>Oe!Om0KKqUJcjYLi(27kA;G!tijki zDc{gt#6x@k3%8)B*|}hl<9x?|Vckm7M_)23Sk+g%EOc$UPQrQYa;}3!cplQ@R<8Hp zXj`OBYo*$^QH_$^f>4_X>)QLmprs%8Jh4;B2e`QAKfMr;Wuu?h>o9xL3~&ljq6%bw zp!3gRwa5PY$M3vyVczoRHy{6!WaqXP@iA?+Vg2ZvRVo~XjOa->57>?Jb^S7NHTau% zXTbi!m?xtuLIsyX2S}}s3I7aax7U$n&!l8;y2jk6c5!}qd*)C|ckwSIlF%o^_0IOB zCQ^IN$WB#v@GXy?UexL$zcqEi%{*VaxT0x$1LC%7t1dDLIFi5oVx{Jq^{He5Hs zRbWBuW~$=Gp7XZyA4%88ZG0i!EHE9=bZsTYVjnEKNl$J-lT{-;6(pszC5>2rA6qxU zmEJ_NvBNUNx zZy*XoXJjTJa>*&zZntj@Ee9rfF8!V@@%VW$0mXqHYwil%$o~a#M+|=aAH;h9xjtoC+H1DT8kjmAY zA2wBQUf)F5rcS+yDT&td60isSpnm!5~zcv;?N)=B;ajrrqm{X^# z=5lWJaB@Q`TKBr7hc)RJshd~t%g=ee>Qhjl1(WD~MaRwS59l(1x~6}9YH=!H zrf;R$0-@3lO2fcdW%A^rCkZH^Md z8pP6vDq-H2#x9FSRc;(63if+Y6Rz`qqH3WU23InEEd=F`rN4s9sVV}3H@9?5tgqdP z8WMm8elH}#Y=U&twZj*6K#We{{R$MKf8)omQj0mHc{>vw0WI_ zpS8f{2@PHByQyVyo;@b^SZS)H=kP6j}=XZ29}@Y=cKo)w9y8vy;Q}QBpyF7F45PETcC2!+yY^ z#P}fW-TQqYL)Qa9YWmUav5XU)u6A=SUc@KbNK_+XxW*T^q&F)0v_6bny}USq`q96H zw==;W2jKQ&-!Wcaqx;uex-xA;NwUwrfpQcKxgWDa`R;Jd&W)l%tDjV?Tk*jSsc;J{#SQ>6H$FymMupU4C)uY$UBjEgbM5 z#xX3+;l;cNpRD5Hz>%T`NdXgwK+131Jnm*25h91IxXfjBCSaCg2Z2cBvvJL(0QuyH zIOUbF1#+1WP5ZZ>0HxsDbr(?3_DFW(J>saw+si-K#9kppqV}H9{V(?3GpecX`}d8C zf&~x}L8^j+N=J}R5C!xRMMMOt3M##qP!kjsqy!s9DM5LpLqu9=p%bMAq?ZsNLZ}I$ z1xP~f4*I+If6jS#?-=)Yp*reoZs(f!p2l?#^`z#I~F};yzI|&$|x%c z#Q*Y5`fzn=2maGUEM~wZt4&}!P;lV)gW_tpK&CIT>onh;;=x^DAN1szE6yE)4t=RmKwVT!7-}^*HLr&s5_Kl`A0I@yQ zV@7U#d(`iHnT53CMP6Rb)EImt=X^tKcvzZgWF|p)O=Ru!2tNK!QL(?Qrxf6N^6-4t z7s1UXh7By%?y2H92sx1fw_mv_B_|_h;#M5stMl*H$kIb*-ctqj>*2u@Y3fhekq=sb zk2^~@b?}f#ezdw^Fo+!~aCB8oagb6d_!v_hSct8qeoiH4@74kgTu$;cXMJe%dc|9qreXm`B4F zHIG{<0Sn(o-?cfYOi+Pph7dMzkehZOJmM`Y)7$vs`=-)KHuzmnw#=-n#=EvsK3Sk}OI@|1gWEK=ktMID)YwhS#k?)w+*PKd{PQB8)n@^iB zBPBO?nSeX}D{IpO?fO4h76AyNV9eM{0F(RS5S4EDsr%3~hV67i0irhgW_X?s&$pse zqg?O(Yk6vI!&>jE5~Rdv+bC*KXA^G+*B}oFNW2(2=Q}IsCDvRu-oz&?lqbBF*~_#6 z@kqo&Qe16rt_02(v~Z(@=^{lOx2bw>a9ur8+Y@L%?xL~LIO9=mL-i5rYxKiP{i#yj zXTh=hz}=Pswn3G_GV^>QWf*Ca0aoN|2v4p~N-LY4QIbgRO`W~+d-%_j{%_~twU2fw z^P@nXh*g99LjdJt5kS|YICKm_8smYCN}v!cV_f$pqRzDZ==%Mh#qP1a4*)5M08}ol zCNJ>Q`o~nyhj!5T6?Y_nM+0iPm+IS;9$94siYwleF|XLvyk_$qxivil^c>i`8usl8 z75jBwHvvc1TfLZ8@tXBHVp;}L! z2RI3TcHWff0Me)mJ#-UL1$6Pt8w2U~cYi(>lmcau{lkxlWcr6cbBO`@0VlC^t3RU# zz@tBM{nv5&`yPc}woD9>6-xf+$~69;Q-<;9@6-K%Q~B}#gRiWW2IkP+;MI9^)^ulG zyyV}!#B&1Df1lXB--V+o@XDjWB)9;iu@aQiIXidifaPKDGAd+EKKcLl<^K!Hc>er1 z|9k#`{(m6J`d{N-Qi_3RNY^w0fX6v64i?RSEE@X-7tw4di+H#2%tyXF`m5>X(LTT* zkn!jL0fqnEBU$(8MyAWt#)%yuKZ(i#w1I$zUJstWGxV#WLHF+#0+LMHV?v~JfaNvG z4$UHnvAQdIzv7#)lv3Z=;8!C-48 z$BiMHt*mf5Cl^=tm`8nBiz`sInXn3DT(+v@gvoD;;Igr_IYU!vp6+fU4>=F5qc=jG zfWWF4D_uxfQRr<3T7pfKCR%t9ea$+8_mrGd(0F=Ub4Wspste-m{@HDfN{x)#bhRY4 zN`tY#BQ`m?@jona$~gT;)bH3ZXbZJMd(H23FzI^aO9CU^54O8YMW^om2Ka`d^83*+ zN@Be*Us7?*3dIh(E&r?4pWKDsjQ9K(2_vL7!zMP6^%t)-*~wMVaAX*)#g$5@F$Mcd z42KqxCow%Y(ylGlL+zGZHWzA~4c};WOR*ysTg$iTj`GsYbAN}PVP8$;ZQCO=hsPM; zA|)b)(%)(JI)|g)a-3n^VhIgH)exH{M+`ju_O%~o-dX?>&OzkhJ5B9Pj`K{~ch0<2_-LTj*fzhr!&nb`NJqPSzgUQMtZiiR-!LX+=a0WZd|l}5 zSTN60I;`ondqfWvPfKvd)-#bjSEr9Z$8AA3C{h3-j=mN`uJODd4w-6tIbUK3vpp0= z*ia24*JL&IT*D=>n@SH5ie5zvr8`ExA<(=>J+N+`9g9{74Es^rtH}BT zr0r7m!?iZ?g$`H#-YjF2cOy++Ev;R*+ zAmAM5xidkvJoLGqo>*^0=ye~OrVbv=)SPd(#$T*@3rxyvWo9IAAFw{ff0x*>sMa2W z`qJDo!(#otzwFndW11sv{r&Ee(PDsqjlB-j9#6oziS3m1-90=fxCf5=)uG_572Lo-4j?u1B5|v8*#GXs8M|zLZaR;rn!dmH+nkdZ zb=|6-)3OoMg>!Wg%*66_$XNg`5*!7vFOEN6VGYr0P~=B2>oFt1i99C~2<~OeOVJXu z@msz+#Jrx1LVrdl{JQYoA8Rz7j3jtr~Ug3n2&C(PqxF?a9MOQuK1 zGtiU`{FXjpHpca^32v;@&H7Ui|1Fo;i<=SGW+{V((AX{?J7cz z&1#9jJ}AGTC)_b4jr%I`D0K9+maq2yhqaGaL44NRm){qI5;p7&&Lb7X;mF0o}E z%sgGw>KGb$ok*O!hs*a}t0IQEU2mwd`A_4D$wy~dT`gGp%ANyOi`CX*z1dd&B&Bo) z`cC)X0rb;ly*fNYAeSu#00qAV3`%6xP#eFn-TqeCJ+x%(w{;*m`_D64w)Qu6xJ^C( zjFl~UQL;0tihhgUjrW9a*|MeLt>)Q8J`;Dku{>!Lz{5Qj5cij`u4Z9G1-f^z61BQ7 zL1iFi2UUPb&RRu)c+g4{Y8;tCMlF;5VSitr&9~Q`1eh%0qS1G{f&PJOeyj-v?AT>V zNKIfF$QHwGQk`j+jgNx=F6cdctc@a5kKIWmbG`_ME0I{fAbPf1o4MPddm2ay>|H7U zX9tkn|JniM^!@L3j1#mdH)|8FaG>N|NF%DzfWvHqVE5xRVe)M=1yw;Z9qFA z`zIV#fRg_KX4rZ;P@6IaY#j<+;N301-*yniyUsuFZB|6!q;eR2{PpYfb(&ZEAc|NR@tJ zqrJiraoZ|m>uIp&J}-sW@ZJQi>hpkrCRG9r4%sX$TjItVth*R8k#Cv-t@hno^1sDRPAnJCcQy2S;pM&;4hhcH*qn@sPZiqKCa<|7 zTkBMbiM0%6Cdxt37O}|O$$l2~<{9>r*-5b&LrVDwZC{FDg*H=fln&TT)*cYdax?%~ zk99QVv&NlPi@GTc*nMk9cr^xdQ%vo%u%qAz-8kU`Eq)of)q*jVS`C@DuwP;eH?WUe z2sr*%g=JeG%-b!s|3Pqw%QHObV8_@RURZOfg=`iw??XL8m?nl-Lct&- ze-rFtcE#|IZkw9+zAnRZvy1Q z&rW9pt}TOy;c(>IZ0E&@J6+XwX0d3K-(8Q#ha9Y0&-u7HJ~a7|fj=iRPC~UwOfUht zpD0(f2z2iAOwh4YF!*%v$r?!Qj?2z(DV+%u4vmTTNNlem8ad@E{^8V6R`8O^oX)=$ zj9~~}rnsvDC;tJzc%?xYb37s4`GN)iOXg*)MPY$*!%1G|1JCWJG@&4k^13ZmrelJK zvszm%pTjNp+E~h^w$y_n@Vb(^Ky1%2s$A--J18Z8B5-9I+0uu>_>YWzRNdWXa*S_l=JH)~w07wH34s@sJ^(to*>QfKxuQM8eg0qG%6J zx;C>LTc_ywv^h&mSRJZynIdj&J4?Zwu5+kHWx+P*9OfCo$SsDGCcA(YXP4GTW!4)d5(i5jSOGPqm4 zTdp21g0%7bXOUqL)wLrYB3%_p6E>#BO&IR>a0$Ay$E z#!p6S-&a_0iIDlel0dc{likYEgi8z3X(F$vJYt}C}>_q?&b5#yjmAJ z`eGzM&&nEWnaCYX1aH})XK(2@K7v?oe7q%yhO(*&vHa=x?mRQ%SNwcH0e9VN^R1zn zGy?Oz)`TAa?ZMV>F<7mPTs0 z#hDip4dq3r4B(8xsOYS4k@UQ*YyN&OJWh%iT&j68RKb7i%uuZB+h%Nh)AR;S6mX}& zHGKzTz5KOUMY31PF{IzZpcE}dxt4nDO#KG=Mzg~Yi~F8xF^Z~s54v7hC{Fl~*(fDQ zd-rv}5@R|9`QBcVhvQKD8=hRyRDdYVE?sCF6B3wt91yk3HDmLv=&p zE}@J*?aAKS&Pnd`u%<2h=!wJLBzW}j#CdFFr1Yn7O>6wVDH1;a8v&~;rwi`OnM0Y$ zk_;x*c0*Z;RhGt~xrq$7xn}dl>R_s`h1&jVhXMC3^`%_@Z}6so(oF9(Q#VciFIGW- z1pJsMa@VpS(&WJhC6!xiCHT($>mUf?^@Q=ye00}jK&Ig#P)n#gKfqH|n*f#>Yn=q| z^BU&+8}6Sd;EOCNgsznuR{EU;-b}B$TuXUX!WW)*F$$6O3I)g&=9vWt(+F63H-`Uq zG}#VCrvp2sojWQ%7of1N9x0{ld?m`1LjZY2aU@eTNEW zaFb8Bihg>xx@Ku^TC{F^%6EfF0tssgu3CeK->W61y!koi;xD@fy;iX1`Ya?UXLk$g zxq;El@MY(Un_Cf>?OH|`3<$M`NKBfc>-EhG=OnAtm$~l&D|U@(jt~1>$(ERW{XMAm zw003zw)&MmWMS^tNItJQi8Ow}$Y!}c=ohw0&4Ql9d!EwbDv1xgUU$*ut%>}?#zH}Qf2RG*v2xWVu%y3q_L05KOEmg*6p9wK z%&D3*HGq<+fi_L=kjE`{wImM;$~u_UN1D|I+R3>3191zm=DfSlGN$Ulocii!C;^wc z&+Fm3;I4Dy@;CWyy`bAfR;V+?PyConiCNo;po*$YYnvCMYpsOI?>#^jYX!x((G#Gx;+bN?*8NP_iJ7`7D1Wm!Uq)muk+_$Xo8=2 z(n8T7fS+Ts;*zML>d#sP$8892cz0vLg;NO|TU?rj8@pVZOFgTLi?SNtt=>z8{vWzU ziVAFlw^f06Ss4eM4f_@lFV3bA@(zfkoV-nq;)HlQ+ouXC<2~=2Ezf#f`ebzZS*H<5 z!R$8)E0vB?@L$ZcBip@o`i|*aF>p6~+3bn{?|XFV^((!H1>wG$fJj9?^~CKBzGqoM z_wHiszwaq!)_=qt?Up~#eU`LDdZs7QgmjeE^i6@m1)h*ZV8^QuCm4LL zVL4Psy{NdX%|tBtMI%cx>qpqYU)n6!DnEgH?|VVrQ(m+t21r~Y2wT(ifT1Q{-wuxs zUxPHeCDkPU*h#;vpI=>2p(YefyNch1t3iG*ptavmS}Z|!DVRiFvjhHPuU!RbPU|#S z?XiC5cRG#d)|)Q!G?iUg;3!-(`Iu?t+8d-;|+9|kgCqzT}&9tv?YTgTSUqF(ptvqEbHq2*sJ<(4Yxy1udsdJWF z>QH>|;hNo@wDP5_rwtm_5Y>fX5#&R_%(zOmvuP^aS>rI|wu$KYbg1Nco`i;@dx%Hw z8~Tqdt6!$Zp0{b6%eO8+^AinRI47)9y7>ub!*Xd8YlY)n|Q zWGgF}F7*uch{e96;5ihtP;;{(7+IM=e9EV2;jYVRh3n&a@X}P z8}Fa{74@arGc;4I(0_ILzTXxnYYmxVyAdj%RJC9LXcJob<;fa!;pgMyb!roMrx*4z z7&H0Jx7S)q5FB9DQDe4(tfM})I^FJowP)WP&_5VhukzBR1tZ^;nn{}{;c5v~-myY% z1y7VKVTCdfg`mP;hAXNu zKTV!MDT(I4VvOks38<}DlE+sYsd)}TqOW_|eZXC$IWl-le@YYbwV40v`ZJp!yW8_c zc^{j(waboykLK^R z3Kd*Dax^_IM^RK~;5Tq2oNyZq($F#VEXJ{!$?FiqzHQY~-(J3R3s~m#Z_6$in_y$i zbRAyyc`W*w>i1`VnKH2`-8p*Oj@RCQKy8RllyM0#F|;b1`+(+parsZXqxHL7hsh)* zkVtxiy?s4Y?@=L8=7`s8#SNnwRY@Yr7zdo}VicnC6aBR-%`W!m+X7@=@v(D5kc?vf z$J4eJ_m?C#hvp#F1)H=Ou8}U8T-;&Aftd|JL*@$U!n7Ed-bAQjhYf`>gw~*(b0AJr z8$Yb&PLyM|z7#B1<`R=?SoxuKYVHl6{`eLI++T1l}@cwV+cIn*-h)#`TF&C>8C$x-yX!M-~*N*0XB~F0#R8V z7S<8K>zz-RSp^J!`u8$>{{35U2MxrNGm}(|2PVgwA#2l z(!d6teT^*&Iv*KaLVo7p5Xam=Bolm>fW!OOA$(wIZQcf8kuXJPi|uOe11xVtvx7Jv zS9L1t^C@w-4LQ{itC+YD1YH4pxo(m-XEpoWXEDp(^KDt{>Haf$ z)D4NVfP~!PlQ2GxXUrwQX4XKpr;^ItE()W?xYxfMea*PCcuw%_91KN%uEY@r99}*F zsEKWq-YCdVes>wbaTK!7^GN-ib^+qVg1vu4fM9%BNqz%M#ol3d81(3SYf7T$Irq(v zg}lHVFF9fo_D20h$8y``mJIIFFr8%@H5A3&dsRSKbJ*}z0U4b)$%>r?1AFKN#%+`O z*l;i9&esZlT3@&zfDX`jr1%G5sJ98~1gr#r*Do7cLt2pTbJkCnw&f?j!%B6lG+|4= zxcI$=yE7;;vA?uiD+WN%-cSu^tWbRedk2_}a@%_KdK| zOU&4IRj{?UV}P)gTWRvG`^)3yrS$5|h}Uo}?-Q8PI<=u^ZA#83#$+_Lxk++lG~On} z&67usbnXMdUiFoL*Y#qXHt?s9d{kX?a~Io2J*y0qRZ!_lQ!JICi-!HC0U#5xBf|hd z*fO_kD%Yc0a|og&ioBqV1#i}W=r~CZ-M|~rW%yB62h$8i>}&$JTP;g8;WZCAsz#r? zc|q1de%4qQMQz)$o1p5%VJcuTlqsUsjCEuNTeFL_f+WptHx^W|Z?v z%k+~07VDSsx7**Yal7yQxe1ihkokv>K#IB$#fyl-Naz@ni~N(}m_T#>{o$`qmVdq# z`^iRYce2hfaU(sKeWtqqXHJ+J%YpRNa4zrMgH#*HV$Y>w)ndkjvFgcR=WiK=dFGD% z%A1ksCNDiDCaM&3Jn$S}$zmhyRsVagse^FtAXQ0DmVWZ|3*6nB1HsL>npY7$KtSd> z78ZmhX*^rV;yldWODS5PDvG zVaK4cVsuIkqBBvK!{Ai$tlb{tAjb9v zK)AsPO_AJ=>!|$_>9?o9*|xa0!{x^W)L7Z%eFvy%PPSc(rUj z5ciBNi;F;qYhp_ly1b*1`I47cYAd7C3jjDmJ`Q2L)6k?WO8J;KL~vHM|N8PcqJW)B zmlKf#aq1$XSJvJqFluve<81nqcF9w-H%xp#T`EW92AP?sx}WqQJy6z*nZ3=EFDG;& z&%gJ;Ud2cIgjj!Nza9oi8s5akaBmOUYWqb|lcX|kEP8B@DOm`O#Tgn!mRTNhwJMVE zVS6uOWEBvBo~`ytCGgN{N`}dw>|aR0rH$KKbf$T3L0WYrUEkSfMy21u+EMbR@FQPP z2kHh#G@!6;E;>uJk8ZBB4Z;Mwf0vYeF}-trOM9ZG0A*0}??ZZB^v(2u`lu~jfJ;N< zapAJr0lmhJ#<^fhsjyzRKK`dy%Q*EzD_|+wa_<+XQ;=%imKX1V1tT8sVAcQJ)_36P~gjZOG=5MFVUP$JZC6 z(fvL*bCq=KR^KUY3G;GLENbWal}>8g4iNGu5;JO~68!V>FQBetDqK{5KL`L=5cJ^d z{5BavuMejQLp@ZU_sI>54261l%b44R;JhsAb|!`cWLyWGGzZA~IpiRMmegcJ$1P^X z!v51QM=qR5MoRB;7NP?(H;Kb{{L12UTiChiro49iQ%;4?OSipAc0v3M_I~di_jr44@wtF8J9Vi($SIqI1+C{TTq=kV8T={v>-sB1 z^U`w$A}FV6`xkTKBamMgsN^8G{i|C6&>Zsk?WYMDoZw4RrFd9;OgoI8>q zC!DaIYBiKRH4`u7Va)AbT^ZW45%hQw+2O8w)I>f7HXgkUV#rqmuD0f}JqHsjgZ;E; z`)jh@O;$i2LS4R{ptWN`DIMz|>p$NF*fAO|LPz033r&g1=RMBp*-gz!7(%Mz!u?MR zPxJ*z{mfr@_hT(VXoN>*zeChXjED$&T3GP4M|u!`!$u9UvvHZTa_mOrh|h(kw?G_p zcJAki`pO~KvnzMteBl$Xg`Rwocv@qKzDZoUhS#Ro1x~ych~Q5Ty|=C9QTEzEvok!E-I&*Mx}LK(cs1WhYce+Pc6q0zSWK_vAx=$Mv-%6*DF%1O$BB*QwHe zyc-cq2-RSCfWLHN+vcDz|p-L$6JZ=yq#T z+2;#dhQ~D_(VgPTW}Fv>Vu$eFSmO?2eA0Dz!!Ua+;b`wv0hC4|T1Uz?J15E|4craL zu_?$p;6#c%JynJh-Jlf;8kcCZV+ew+DqMBP4gsnDmiGPIlF0%>Fw_)j)ivwP`dv(? z`LD&+VJ)7d-Ko2nMS&>$W1eM*E%J-4hv=Jm{OOv&TAs19(euxB!&;)Y_F{^#YVoY% z#kPEotCc&Q>JvincA)@=aWsK66(+z7bkiBceMh^8U39rs1?5-yYO7){80)gN4T#G# z-T;`5^~s2tAvHYZipGl-mO!u}MPGF`~G%xbzjH6fe_e>rmd!E%DF-vei?>~es_^{PfS`>4DcY@B#d*dj_K z*r}Qopzq7(kYARKz=rf~5}D`!#+tVb`;!iPNFM2B603;EUZ%w~k>EqN(h)6}9lI}7 z&^((D5-zNADGztUZD1dRuzx(5_Ltt>BFu}CLNb?r2m@6Ycg^jsYfB-Xej}uB zDWVwMowRF_{jy(=d97G(0_Tov&pI!7-i^UZcxQFZmciok#O#vN{bwWnQaYzf1hO1L z88rZs0fVSTs=*ghptGlA4RQanfr{<}1a*&pMG}N{;odR{IiEF>W>Q~h);X)RHM2@! z70Any`xVUGp(~A3qfm&vd2j>AC_eTu;S4g(wvLc7pYonZ9V zt~aL?QXC}8t5Xuc20-l&%{lDP-x*cQ(7IY4XhNYr`8jepW%Nt4cXBRvaOL3R^iKW%Q#8q$_{D%ZtV5*+_ShRs8+QxF7SSA^^yXr+-`Vjh5@HLSKPQ zr15Ojx&V!Cu_kLVpR6^nNvClQa1yM)*a~bE>Fc|H+qL%TTAsD!RDeQT`K7X(mHV*& zqrB!CD?<0Dj|xxP09DK+WbAP-znysQO=F$SH6E}gP$l9v);V@t@YwAM!%12EK2h=O z*7b-E>74PL(;-0iui`STTGHJtEOp*kvWI>kyV)+A`2y5 zYG~n0g`#-4<9{=wP#T80|Q;Jt=A-C7&FKz3@`hIn~2 z^!u)Hdjbp+0E^6d>Lr2hX%y)@b})pn!Gbt_FZC^b;}`8UWR(d2neJBe*189N=VPfO zBj@H}&LJ_{6OvGPgcY(4V=Ibzu5kz?P{0AMx2^ho0jcvu>%gPx*Mh%_E#m!%#orZM zN550Lm&%~H+Y)*$xM)88tde_Mm9Vg?8P_cINtGXk=(hVs#sLz7d^2bK*|M|R5?j?p zOy&b@>}WC6J5MHS@O$!|KW6-|wMJ%s>+v470FX~R`*2J?bLZo&U-)isatAzZ=KcX{lnlB8KStcTY z>v^{-Uh5~%P_ga!Y0-VZ{VVD2qqa*0yYMYw`<>+X>)ltAxFw=fJCF9e>8%ZrhX}F0 zv6-s?pzk7rI0>m6KdN=N%SVgz$%9PYi&jud){7(iL}?F-%$v}fvpEJ1=AiOC0RHuI(X zfMxF2=0-10owS5ldM*1$J;YTDwx#5KzvBl0;-okLr`Q^6&jtC(LgF&OOq9pOGiUj| zSB5*!Wn7Vt+>Z-l3H3nLR{)8{>f+`ywmi%|@++C;^9pUG;0|X06*CLm+>@KNJ!+(2 zlI@TH7_$s0rGG+ubnqJg%UUE~WoFUV`0Q%6{=PvWfE-x!29S0An#^F{=o?}AzH}YM zd(tAh9#4!{wL09{R&j%ER+VLKjQ|z$C>V6HI`vgV-=F`ZVO<5ccKFXJd(Y?A6VCzm z3|{%Xt_qyexb)2RF+?DSMkL9qOBbOY1#LV2c^?Q+lkor&uyCN9w9iSPU~WB4Q^&9; zC^PW42MZj`x`6I6|HVM}=Xaq0Z4BERi2rFQ#D8wf{~a;h`^gPeSZV-z$MTOA;!)^C zBJgQyPU-d20PVsI@$h4koI0Q}nxy|mcR5otw4J+PH8TFv6RM~Xs)o`^32s{kJ<3 zfC!5WUii^}w1j~eXX-v=vjY;q&buX;vM}S?%{?BmOSrVmg$WoC+tnQL!2zee_UWx( z_ROQ7mcV4+F<@0MQ4CS9JjN*0ShxNy(S>n#@+eJ%zBKvv9zJyEaW#;f+uS<$b%1K%l8+s()|0mB z*vFDWfic^1Ivf3EPQ4c$bRbTDx@JBfFb~bk8fuMNXX&I0bbN1O#OV6~iOuKjc-0AE zE=~6>ig6!M%Z_Miz}bPJe18e{7ic@y6J$Yl%lST1=RQW zSar3~2wRX-Sc330gC&^J@Y!#)Pw~z;aGXnh6;;E>oWQ81R`NTvPeqAnlp*b9g6afP zt3|M%)Q>w1TX+}%2_Ig>2-Mmt{z41txN665tS6v^p*Z>~N|Hu5EQ78sShVWcyA{1E zbbwuU?7X0P+fZsQRCp%EOzT1X)U#~5y7Gh=q6iE~jYM!QM}cBYjS} zlB!PrD3C&&-x2aK5>g$XDE0DQBGdW!6YZL7?ZF0~5G+74wdZjfze9A&)DAn#CLFfV?7ZAuutv zk)?lIT?DjG7N^__zFYv>PxcO6s@66?V5D9qoRF2E;bSC%oJNUX*S@bTdg&jC;3a?; z(yKnfzi-OrhIGuFka*^Ula-ZP+xJhSU8G(-K3grvt*n;paznHFz5ZNCV+r%={ak7G zZ&{a}tScV~`d7o(V2pTtcCu~I*QK6^uL!&IZ>NQmB|%(i3n_vQcd|%{xZt{gwcBp; z)wYA|aEa@5d~8@-;N}gAf8q0Q0*3b1M|w+E0l47ZfFuuWu!1U zL(H=4ab~OIh(UpN%cew`2(HjhM#q#pEC5AdE}(4Od@?WtGuaw}F$7 z@md17cxifE=7}|@guKo7bF$jRrPXZ!bbbS<(tD|W8;?EiC+ymp6kAdi;wz_2lzVT|5FdW;WS9h-$iCU&s#{MY!;%?Oa}8#0@{rD*0VLuy zU#3US=s}sy5`eR7%=E$^0Ek=!74R%cc#w{GunUd@QC&XcBt_PWbNR4~}%CF(HUswRhRt>Mj zD=F@_<{zlz(8Y8qADF4%HoQU)iaTH9`h1$-F6exERVB@%oiYKWA^n<72LdtQILt8; zZQoFh7k90mjICk$hnCJc2s9|4B6Q?~>vCr-?lMBF>I5{aIdw6PEnA@PFiGXXkS3U1VAV>n;P)lY*qTVStf%OAGV|?|#sm2umLO7%%T~l+eC0;h5b% zV>wTYt*+;j@9$U-`-xSdgwjhFYK$t^raO?wAa!(LiF#^6FXE~!$vUMG`}I}o%d-4~ z%kJfq=9hb)%CMI#9$g;z=D#HU!r?vNbbi2~FwkX|t>JfU@sBYCGkJ=S-F_*=)ehod zE8W$EeJFZV++twaqQ~i2s?5<#m^z^AGh4&@;7`X~VGB5)cQqfu2L17h4zuD2n0jw~ zi&xd)CCVAV2!0WU!ZXPL5L&wK+s4ogRYE}+OW?6dmA8gMErFUYXC+TT&npg1^JeTr zx5d!{qzr;6*MW`C>j?4pYH7UD5CP~r^Bsun|Xe)U5F^(Ua<&_o-lpH#pcdD)L!@W#p z_Kn|WFZ#^&iR>XncX?ti3&MH8N*Lq%g^5fG3+yT}(HD4e)~)yA`?0RYHy$bIhdPL9#0z?D*^SNn8T4?TmZPP91=h4#6IcBd^- zG!la9YOfvv1wRGC>SIxFS+wW*rlUy-!MFR_vnmD((PlUUzq=mKM&6yD&mS2|R6Xbp zhz3#~6yi!;9Uta&09~>;??LVn3NnZmFGla~nV}w~R%~*|EO{b^im{mudLa%E+TgRhguuMBDw34TM>2qe zWKchrRXSN6Cv4gKWQ_z}7odMCs2^4OAxw_{S|Vr@@olT$H0EYzBCCf3Z^LsRK#%kE z>{h&@A6Br?uh?ZkUAj6@Uv+*MyXc7?**MYUa2RZ!AP*S@INHsxprV*TBVigVsS>)| z$epIJK&;{o@cW*&q_@Ki^<|PhzH6lHQy6{BzJi|&y>@RdKqfHn3c8h3=e_nT&Rw7@ zh}D~M^K_}L16M8B6!U`{diK3L7Wg>s{+F`~t~Of7T}PA7e|juqZB`sEqmHNG${8T`{Vi6 z)Oy&=O{R3>$Ha%K19m&1(Q%#abo}L+bJ*<+e4ZF25=oQu_7VUioVY0QodA|Zpz-|?35{XX%7$JE+=?0e97z;t=3 zquoOFWAXhhr6N$SkVP{@)~NseIypr1l!T!RaXYzH5m!!-kL_KVafl)MdIc{IsqznH zKD4eE;1r8j1||R65M$gh*;dRK152}N+u@D96B ze7ctQsc@1?i*N+&`^XkoETfhBfX;+pmS>;?N!iB5g$(A~2|YKE^~7|I?4hzYNZVpL zJ_lL5>Y}l|RDTj?7#_IMrMe+(-;EEt%mdYdO@%7vqTI@$bj6g-M02~;b?*ZWZWg5r zNo94LsS4=&3O7dEzdO@DiZQO$7M{IdN}hfZlcO@bRAxTwO~HVYSiRH3gB zw6ex5$z_3ugB{u9MvtdfE&Dfy<=$F!l7Xy{@K#LM_kf7r7mIiRa;n2RcQVNuKrjpX*bo&4Vzdp zG->$O+3xetf;qiKX6pio1TSFNS8NxkwDDJax&sxc`>S@_bvXP9Oo2=dY%)~(udU3HO<|8=c2%u zCbHzAyS^gLuE4|0#c1Z$PwdTUYfI#kZ-=f5U$3jf^I z1N{>iC(fe|UPfU@p67x@@FI%GrMSoIps$`a1Tp9@;q@b>?*A}l2o-C#@^XJB5(8%L2lPcWmF5@bo?wBSWi7biMFralS zdRG<3>}rLUrI+grsTHdw&sn{k-|O1mbCu5FIgsmBv3WrI1*-S1V(5aONw1pV#q940 zg?nN@ZIYz#8Y%?l+s70Ey7^r>K(&-z`pF4VS!`*>mYEvSJ(JfY-V$~ZF7`-CJbcV< zu}3?2+EE{*kxh)pQ1GR5Y#sx7LIwsk$c500*));m&kKG9prKetO#T(v$|(20d4bdc zvhdJjQITz|HnS;mF)X(N|NM%`GS8Wi>7QAx0blH?=4g~{__4_&Jov8W9GFccf*s7P zx(LIZy1H;>>;ijllV4a=t8M{@9&<7Z{Eyvf>l`IX(8~v+A%dg~1TD4A7FAgU^ z)cA&?1fp#7G|E0*lF^&$^-@k;QEzbTNbfeWQGzIA@ak#(&I^;z)X#;PB_~SeT#H0i z9|k8U2Zi)ew5fDYp+uE2Gulp80e&QqUT+&zv5gi<<2@k0>pz}bX}jqd46+>I!FbV-o_hjjpIGX#Z` z;lRa^d$hi(d6*m?%@hO8=Fct0>=vTxh+#vg!fYAkR_l;f*(1yrnQvW;I7S#lgk8|A z@me{$KfQ)}GJ!z4DgRPaWbd!c&Aroz)V*wNKbn zrk2b3vO<*t%feYTS>9QRKKgSW*_AG=2VF4!=+tlt@BFx=lz0tAv*A8t zhH_D^c{BW!wc0z^f{ zLK6X{DqI^KrMFlpUQrO~5}HV_p|>O!kP-qa(n}Deg(lKl5EP>H-ir_+K!5-t1OkM4 zgMPE-H?!9KF>7Y6SukS4apuCCm9#pegiBk#d-q)s6bSC1=;+n69~n=K^NA(6|1z zbB~Ru{FHade&$eeH69qBC<+C{EfpP|I)KH0pcroMRrgiCt@67tUOYfy!%L z>D2y7xyCRVPAvX;wy?8o{X4@*Y`0EPCdr^;7s<@vHM(S25UKXf#eaLVdYIIK7UtMY z3+2|nyhyuo-Y{8WZjA&)PR_E`W^WF9cumY?;=;chkd#Ayoq}~YXeh|XM|>p-SB&S3 z%hSL59i<_JS#i$jPX}%!@5*;I0njGysc@U6e6&ydko!Z&6kB28N!Q$z6UiGl5nSR9 zbrS%kE%NjP#G=j*>O8@;1B6;#hJ-c~shx^b2|>X8p~zj#nBQ$h2Sb)ez}`FKItNW+Dj!TKdNb~aQtvY!V*vt zOlu$PAP6}t$`yP3zBlgn2xr-pX?v5*I2fK~ED^}le#Yj5`$W|CqXhVH3&m0X*2PD; z#t#}BQtSnezCecy{aX`L5RlUkzU{a@uz0E}wm@AA^?dpY%WZjp9lg9~^eXA_n3rPK z)YOs)lxS`Vi%~IBu>kTHp|yzuhqZ+QKND7zQruN%LVPFLm7EPFzx&-A{>8fAxZiuh zZmFo}(Xq~-eG6M|nt517=3+Br#tyGzdIqmgR2x`;;FtGTSOs)g_g4J+X8^FJdvDfQ ziMZUMl)UIO9OA|9(=O;qrXbrXN9lc;cfcslWa%kf$7qd)1a}u9L|rQm}Ip8TYlOs zRa0Z`3jsuZ*D42aTUKvJ``Dx?j+8$eZMie+-@s%I$JZg*h~7^j-^gUIojHwuKCR=$ z_hLYLD$yRkHSg_GwbWMKlym9nnw&_0#(h^HIa%`8(O+?i$p9~3n<``DUmS)n$8azV zdTk4)JM2Oezjc%5&Etmlem+_hcU)Hf)L&#=;Eu^(2XYj=w3Jg0=G(^E^AH_frq@Rv zb5EaH=PjS~dl(G=P5i#LKIYzQagwpc?-2`tMKuWyz{*;P-*tAEWm0<7pG{tPyq7lS z7d)l4x5fCP=4vFFFFnIulG-WfMt!=jaGF+#A;&{Xv|a+>V^)mMgw86jXvwW{p}l(F zwe}WVk>zx%uS=t7)5AbBx6KHDSC+K%ri@6 z;&iO*t5n(z4*-Wt;8I5-b{gu$Ryh5Hrvv zt9ys$Id-{PZL=9rzT<0|Wdxg9-TuLNyOL$Md z6S%y>H{fP}RpixCsUV=AK&Ds++y5qh$}>u8G`{*}r4cGl7Q%pLmBmh?Z~!NnZ-f8D zSC{Y?Yd@*K61QDB8%0Te-wp!FgJXn)p>0}(=`pqapS=Cgzq|KuHv}#N2if%3Fv7Hc z0BVLTv>p7Ba0FC3(RDyuDc+jwJbRBpYCKv%Ib8tVZNk$M0T_4nEHp+6J*X<&abdr} z0)!w;**vYtUya(HNpu+oIJ})jRp+~95tu5MmPiERW($l3L^aX-k#BA}Z!ov!wP~+8 zJzpuF!qFjfC}U&M)Y5wTCIMGt1FYA}$vx_?+6vs=?=`O=A+IT`Vz*;s+6aAz+L%R3&q@8)_MjIB^Jau$oUF&WLw^esG)-)%*k zS}rX%Fx-_ULl=omM9nbwscSX;?-e&w(Q6Qag49t5@XVdp{g_+Yq7KD?ST zUA2mF)-P6@EMm&Rk`d$t*!HxgHw%M-7JRzVxkE)te>#jq;M-p5CC{p9>y`s}qE&{0 zGUgkD0~cr7y*&YBh8Mtya7+R>1)z`F+hn)|pX3js+PAnjGD+c~azTD8K>@w5DCPT) z#{Ug&?5tZtZ+--Ti$eFxV?ZL7eGJiGinG~wVP{b@6}fsI`f7)ms3B+PW@hHY;14#(HcPmRzh=--kdU@meI$wG;n^#S*5DL4RM&UfNYzH|j z-K-)w-joB?!l|dDMTlO#&Bt5T8%>nsN8DAonQ!f=zz<5gEz40AuPsH6PE-|{89Og4 zPAS9$t9GSA^Vh-PZwfK4@YER@lX>#XSH3{Erq*a_SNVI@leviWFcemhFaO^1Q3>_xN52Ug-}7? zcA%_FxC^Y1>B%oiG}?`W=+4@G)iVqUu?q-gGr}=tuX&esbH2FLER^%Xlsh-nx=2Jx zo>$4kY9gwbJHh^jVQax%lr?!1&~8oMn6LN9Hc|y5^(jIdcqbl zHey8iXb{>0yRmOB(-l(nNxlyk1_MWF#@zPW3Hjf`OPZTZsxrw6L$%1gP*((Mk>WuUVjg09sBGVYHCmu zoJaQ#3tQFe}F3dC3`)EW^2bp(ljA^eWC*>a9960;{DeYRoc<=o9 zl96RhR&Sm3=!$tH>Cb%Q7x^Zo!J{7{sSk6mKNbU3>s-Dp0Xpm@{b|rM+**G3k$BB2 zuwM2r?}Pqxga0|S`{Muh4{qE355L{G^>}%wbAXZJ1w~4j_Z0%_Ae!-(_4Yu%%uS_a zE^)BQ#NQ7per_D7W_?Ix&rqimVgCNyE}3C-;Q#Wc{|{qVga0wg`SJhhW&igN|3jw% z*5QA@rvEqHoYryR!C(l@g|9#PL*-zwnx95%Mbh~wtUm-<$K_C+Gh!yW`h;B>C2==NI4jGs+?PNgXd}2J9s&g9e?^VN zL8kB+$>0=1D48IEbD%?f^ni7yVVrNCfI-H`O37(gzp4&xVn3$=_Ap6(_JiH zIdD%sFsr4~W)jE-B?O35 zD}f#IJsIY67IG6^1g$qgYMX0KnYzN?eKSG0O0sjmcLbCVwpsd2umL@ zqNpEe_~uMi^&(AtaXBTNP$68}eW3HiwSTSX^ta7G7ipYbfm+u$EdkN3QaG`y|8`MK zPHbYR7ZI~BUd4{(KJIE%QhTMzy__r}z^IA3#QJkU|wC3tVIUyH){*xvA}3h&nbT>Vz$|8|=(4X>1(P+H`GI!#tkW zs#ELov~&#MweL!G<+Bed6fP`cV=jAiXjXyTV5M&NHUc^K7|kO_kfL{^_B3c2XOea2 zDv!RBX@iqtAT=MALwlOl_MF!!Bi6y{jGk$R`M0NgDap%tsd)Hak8a=nqRXC(jDu&a zL^4G-e%b>! z4hsoMz$s{Ta~>g-*~5n`Ydu2J4_1kS{KjO(Rh!8KU_fBrW4@TWA|1Z*_F?>Co%)_W zywQJO>pqI)0{nRh)mAu@jWT(G0NyfQd zGjz^E!_tZcH|Uel(dlVfri>Fm#P z4-b>a+h=;OKV|{x%Cs2N%K@o9`jt^XxI#ZJa>$^6R1^1WFS`BFoYw_{!~-d>^qrQH z$V(m}A!Q`Iq>RW_5YX&E?8d-1g%|r#^`!-_G+e9}B4e$t7-p~cGT`R3{Sh6$;jgoV zzTAUvZ9?^_8lj7Dbb|n;hR2&k4HJMr>myX%1e?hPFB}uRP*o(V7i_1g*?s5)!*ILh zcaMie`uXD~#k)VSk&VL3fSn7yx8v;AFqcWjk@Hgdgu*A#)lXcUf!>=V0D5S^Z5cCz zn7N3xa9tb0&ZfEg7zLUFYC+k>aN!0TjJGv&6^?d1m}-;|vE)9U=!CBaQ2SGMh(k}@ zGc|e{DQjMmK#|46pp&j-UgDq(e_)tpV@wjf3# zyXw=wCo>RB9r!NJgR8@PKU+AHZFcubc%NO4r(RZ*ZEB)oER?Quj*zK9!jaI@?Fzzp^=mzDy+-n@ZKGyA=U!u zlUys-j3X^Jy3Xa_pcNEzpDI0zW4 zFu@E43E=zDLU;HGz=Ov}F;y`dKM0!gbG1q0tZ?4A4@Fl57k?bYe~wjX^@rcxDNCE{ z)|Z)Rk&Uz&Gfeg^E}U#E_>vd$xva8bp3tjPg8w!_>INMcLIkaU4a&!`p3lRrvCg>-9wefpN{;*;|*X#+hFq6n9N%f8NfwxmK&zwa^_Q(%(DH z0lhL>?PXqCh?8?OuRz06uSKez)38nyKP;0U(Mc5R{wJ|9~A5(|J ziG$Z|&hLmjZ*enUw!v3^VyX^hs^q#eIvEs+{yz66HtF1vp)~SaZwDWhl&VQZuBYjj zCREa}@24qy0>3GuQw2=JI-1f#jawMEkP5Gx11S_w`l-S@+pPryft&R==!u2wHnU} zh`KBh9=ws?3KL$#kQ(7Z6I=8Sef*L25m>4_NwI4D&{|t+pG!QjtWlWCb@diu!9&#~ zb@#OL#k`Xlw`Uk-XCt^ck7eeN|j#ub~bZuf2Lsk zqp25`cUO6EsSp5^T?z)hP3Xj#nV%+hKt7X=W!bOBZ3$)Y2xEvfyD8kRqDNC}UacHs zT@^Hbw+&Y#_s^;s?;+9sb$*ixIU>dz$ai=>)0&C5=dkQE6GGJu?r`bOq32rP{er|4 zzw-zW3455sSP@okE4ANCzk5OoZ^?2Rv%tcbo?C8gkPxo?v-#6TAbOZqAx*2A!#u~qRv>Vq6^>0S@5ad zmg#*7XlW(PGK?*786@ajya}v55MzUO6llgb45pa6Cr>J^idOPt z#TX9_{%>8Q4pj~ax{p$kpf+iQx?)6OvZ^nu{PjTS7D zcs3t-tm&$8#4o@TyX=px)IWFAvdC=1vifI1VN6x?ni0N(X(s`iMtV$!H=~%a!q|;V z7uzcf?gHZ@Y_QSX)?HyNe5r96w&1cnt9qMVbMYA2yH)ZN+xfG^nWtIUhbJytcQsK=0iOi!52rVqtFtcJ$WW_fJ;r2itm>kKcx<4H?fswwIyOCch8~_pO=xpia=-F<%^6qQgRjOL%!lO+s4V1+u zoUGJt9{^Z}eX#FP>3`PRb!wRSOc0tqYOS?&%P(Hg&nGq8R#SWYMbg#~psTxmZzpWO z*%25dpfSsa6inl}BJ`owb7y4pG3(&4 zjA5**H1&0bqYY_Cn;U-I8NDUhFaW8+TljyRBN5TYzUj+U+r|J|RSPtCsoOLpIHlyy z9{&HPFlt(Q(m?IUYF=#h8F%F$m$40Q<+T|}0f(w}JDXxp}lw)ydKL5F~)omAT+BCu&)E9Mor z#q&mRKh@i6H=A~+k=qiBo1@#mDg>{uTEgZk==x2Dj(Xr;!xpYBrq>ajHU-aX__6Rk z1S%GnBFhEs$d6ye4zVZ)8}!T0jq8h{h^s8R65_{GuAN4AU73v9OK09mesrFx>qLB% zIZ@>_thU900){H`)Ce*1Gh48#275gH_LbxK?6=53hDJm3Y^!hl!}_$1iluok|3@`W zU-{e@2zIBdd_60+b@2Y4+uk-Hua#*jeU8f`gK$s%u}z?6r+3%&UTysX?mIKNIsr{7FHF?Te0j2STF_?#(996cVRNR2^tpC-S=O8I0}zqR9-$ z?G|#0Kkb<%=W_?VND?|6=kz4~v=jRB;5)DE6R#zX#?0AjYRX)FXjJubdC#Kzxs;#B zWNqe*=*hQPP0plB<^BT;=gmmRp7|%&t5Y0%x>5s3{&lC$CKL#C&)w+GIR|5TO&I2) ztkYI&;oTY~*xfy#70aVIT$o(#DK~ij@*vZWh0ma&#wFS29%uzV6Qa=k4d9w2;NoLE zR(d%=q5`Y{{nGL3Sr`o@ht}8fP>i-&Hi5;j_^Cg7a2$Rw=WL!%LuO@+F~AUHI)Vjo9cmi# z*M^s_n&Cuag9hh}+YpGfX%b#%XgEJzzcvm8C6b1TeBqR%Wvp-?Jm3!DZ&gS)$S`@YUzp*NJd zUSDfFc73*1>xXJia~=5J?{cm?lS~S%`)gW@dpl<|ekqEuX&L@z(g*`zu8rd+wC~OD zaP#z^1w6!AEp}fHAecJM|K|6!Pk-Iua=5z>nl0yY;ZPAjOGFGyfHBX%F@=j?>}dNKCui- zxg6Lj#4*0aRHj+orbGQszseGHruk=B=QXnmWz7RE-0+)6mPKj(i$aX5qYU0PdiiNH zfx=HMrw24ACCzWrZmCvdNci#zhf44F$4;Sz)coLO?(lWRsKu2Hd`Y8)p+K93ewNaJQv{O0?53{n21( zxPCIG#BnKX=}Kzqu3y{!tx1!o#H{73^{Km4nYRr_+xn(UALhD#??}8%)jT0VqFtJg zKO}j!(m^tu)*e8!N(u%tE7zy8<3ou*@W+8h3OwoP0 zxfwXP9h=QqIJJH$g5=F-@E!odDjV&3^T@pNAgjm4_Dj^FbK_U|WzvO%8+`Z8G~Ty%wVo z3tdiM(|zuk54skq>Z3FitkxOoGCM+ov4X~SQb}@wsyc}xhXfifI`OO($6TQq`SVT2 z$zk}%Y7l^TV_nbkE0~CJ2;EkU^<=9^$*-{c*7qcPSqCZAn>XMn6C9%B^{p+wXnNs- z$W*{VdMj@JO|H~q!G8sh;C04F4ad5kM@2=s28qo4+Me*Pm6-Dq5Bq)%0K7_jd}Zu> zs1FmSOLQ)i+BH}vDP+s3JML35Hv=V9*V2eNhe_2MPWSvBJU$(M*}U50a$2K@8bH$1 zuNcM{t8iZ)16ajNt+nh-7StKS)q3(UZ(i1E2&@?VPT}Yf`}|4{8d7E=c{0&>swXIP zKJR|ov4Nr?_&mN*Z1p6UWy1U`e^$@?%7T8P5OGTtWv;gvT9)9yw-$r*&neJvu@prE zl9)J2QYF^O74h#qS@+*nrErxX2dJ@brle7CI*WpOHj`*SJ>_m`a6Ow(Y;~Y}^L7#H ziX?oT>cib2up6$H5%zSms0HH%*Et{LG(2o*Q8oB5yK3kRKnt*|!{lu^za~f?01qzL zpH;{_y*X6kE+L?m^>wUClAF^)cx`mz{#z|Atz%lGm;(p!59=|eCsj@%;TaBYe2&B6 z(rKQCOBWO|Ra5?+H{!HDY6(9i$wm>(!CCwio$8{!^cJ~URp*ML>Y1 zJ63$UKCN^Go^P|JpeDL=tACZ;I4bYE55&o*Qi@#_0ic}`Qr@mZb#k=RcfSvn9Ct{S zs72~7Cz1FNo`Zh{zG%Ix3OAMU*UYjZt*kM=3`Eb-VE_@OnCNuvYp8u6c7Ix3BV48d zMhgbWZg<(kqhEN2xY3JwNYmWn#`l9D8D`+@)L;wBM7Nsq=`+5tX;@pQBd=SfPgiYwTB;{a|WLdvQ&=`rk$Zkk&?F+hfvR3-_G`5tL4wZZZZ)}_q( z;P?_G0?PV)0(c=7X1N}nIKIr6B5F1PpiWd#^@)|P3ggn4?Ns00r0As+#z4~uQ@|c6 zse5r)toUcn7{1#4^_9W(;(`(#zu>uUgw#rV3C4)=HBN4Cx$%>{(?Q*0tbC3$SA7-J zzuh0e`3mLeqx_er6)-fabksonPb?1rm)~nD`i&lHCS zbV`zk!NXmjU%#qdLod9*Pz$4X%8)(^ky#6pjr$nYP`p? zKL>FQUq6ul=Y+u7vtsFMx9-cTzpVhzZOeBbR8|wS(Hqan*k93sYl?R(IyDI&r*38A z=Q~r3`G{@2YSPv|^Gr&*cKi6HVJoZk4$IdTExYHi{FfIppO6<)n${JnvIS|BLj}}D zRyQrST~vB7db|ENf%7og2dXO9-jfE!t9(ZmfcB1d9efk10oRsb8<>#ixNAIyOW;TgnDG+oHusT&zyb#PKT;{K-N{D*%bQD z3x41D3vGvZ-`j|$C+K-)!KexE`)q$Be8FNU&CP4k8;cZclqRDc#vxY zX6K-oK*rZ@?3kmy5EQAf&$#`?lzW_I^hVi>RXVd#?zGS&%^LT@aacS!)ec}GnjbI8 z&0@_D;MHIJX44UuuKOoWUuS>8_2P{PFd5TstK|cv_eV7VOKD_>M5u>`pO~3yz3+p(?m0t;fVFF`r6%6Wi2u=V39Q>cp{&%#2fYJOM@GYk#N8=3l zklUHaT`52`7FfD9wy@x^?x)h|PORcB`Qz5a&~Vr$W=QFh>GDj419t@DFhPQl6`897NMWLXrw8ADJ zv+n;U7S?}Baddg{e_nC_y{rFE5dYRI=|=-+6@jL@2<%k4zOZF_SPYzaB3?{~-qQGU z|9?IB3=}qt9iwH7zj`Pf;MGI8@aY95kIyU40H5amJ{0O`_4B=qF+D>DI6LZNfReEs z=u0np`nD%`=fvjfAcG`m>C^I{Kl|uwoDlV-FoP;*R#w(x&pT`+7TC1!sZRTu9E!oe z@AF(#m7nqK?FLZY4aWXEhlGgG3;e3@fHNWo5M*@Jynx6!spB-m(LWLZf%B^+K>UQi zNYo1HPdV26=b}Bb!)eV6?aPLnrLGg36`J9JbNZka5r&43l{)f9VwUj&7tg)03q0Js z-fYar&TvaypiHa*ci;zpd!`YJZEyrgD)cXWbue6tLx_P7dk$OW+44nZ_&Y@7YjFPx zZ~u~E)u;Rs0M?pStK=9gz9o$P^YyCFsl!bTth$cBZ>Ecnt1WAv|I1_YMWG1eGZ?b( zS(>)63tU%<-I;3(k}E`%!b9fCbBDriD?m5p=&?VBNRMf2t6QD!Pt+7S+Hf)qgPMPJ zA(a2+^1G)%zUkB<3+bHo9k2CqM86@#r62!$W>vpe7qm5Sc9Xs3#Q3gz$RcKV)_38D z&Ejw)HK2V({Y3zfuP41>;k!;(z0_{@d^`E1O7p>y1+DqVz1Jn+hmb)m+spB|d+q%| z;URmpfxVSKQTQd!!Nlale2xXrL#3bk?x7k8F5on!zp9@U^6z=}T5`3#10b8rlckV* zwE>;>2s{lBK!2|~0m=K`f=zzOqq#Yg%K9{ZziC5)J-A07K2@!zJY#S7j!s(mdfsK9 zI`3URbe#=Qhx8gUDDm(<```mFV*gm;4#O_B^jgtFg0v^_^GGX_j6C1>_0$`hFHjQE zH@5nn-`3G{TRo@}&x5wiciAfYLk2O*&Qsm$gcj+CbIEdzl0{vde=gVV?s>bmCY);p ztqpjHz~v7&%{evFlr}XqEr)+B-0wB61cD7htt9ajH~MgLtJUfF_*czyi)qb0FJC*h z4*@wVu;Tkc2enL7^u{dY$S=SS1<)8sxOvkbgL1!V8bmm!EUv=Gmsne3<3It*#>(pH zT3fH)h295zy36>NV=&E>Xw^!7;d5x}oir z$_TSj;sJR_=AFX)H?8RN)&v(<)sXa+sQ^nJaHH>p7dr;Cn;v9#;xo{_5^rASIQ}uK z$=-M+IQPrnkenFl+4y{uU&m;3P6K5X^6A<*)@OcMyQM+xrd`V6tv`zp+@D*_YHogd z>^9?@T{8pbsV`(+$AzyW3Q0v;;q z;`Dfthytw=nH=1w0_|;fUS>Wc?X~V`ny3~N0G3^aYih(VQrBb<&#oKHvUc=u5PxV0 z=%=aVz_iH<7XS{H;k57iO=~@V%I>dNHMQ_0^c%no6HkcfaW(iix;2c6!+rcqjq95H z-Acv138zuMhXQIoO0Lrocb>eJvi@?zmEUV#j6Qxu>QJ@ochWeqriuwL*47d$gY*wa zdLeLie!KGhOJ>GM<)MvDlLF%+5x2|6xzQdzUUBnod)>LPF@-lwufkLx;d_D$fdeRO z#D-ezdAo-1M9l7C#Ywp~h3A9O_u6c5d%L>E(uh{EHy|k5JSwC}&i+Bgb2)&GaCcuwdsZ(O4A2%pfz zgrfl&KpP^Ry3&>b!X|EgsHDnLjz`AR%I~K2c$k1%k3x>`k+~7A^i`29cD$Ky;TAYN zW2^7R!+hEP*=kZyxof*+IWz{CV#g3<;3dJU=Hmpms!yx7P?Ujf_hJu;h(J;C0oc-9 zP~(~d(a1|08VhXJ3!@?rd06-@d(_7oJrxg}2o3~5(A`&> z)B18oKNlgmWNH9Pzdo_o;^W+}zQIakx~eOqVW{ZMXFYBqA}&}ImM~oSbP!VW@})e5 z9m%P93CzM+0*DS}68HgH<$86nTG3fCQ*i3|&#_&zEdxj1v|=xrRk5elc_W&b);}kZ zlz!%I-HA6&(BvS&JwYU`mFXTbR*{m?&0FK$(}TRV=9y(yY;K9i@_yCz5`;{Y?Yy+JRc6gnV2;*Q^qj zwV*ozpfmv2(p0ysO(!>T(ihMo(F3-IpzUUzVLs|z&7pN_#_REC<(p@9PWjwuxlYtD z4=ch0iM`wMl#gX{Wc7*3=qTc_)t^uJdgZ(|9=LpMIwdiat$#*KuHm z0*_=QwjnB7!q~HmKyf-0oNC3S-S-;J)NoHH{`@!H9fM)lX&hj__h+?w5bt{5&0>h> zx~-IyJd4*yT+k0s9^#3LvqOOXeV6GfDk_ULJFlK%l!v@3HEx1}Cu8U)+ZMYWjn@Ffd4DH&mzA21;iEQePFfoRP)8mF0X$J?kLi)*MX! zFTkxR)Lc96gk+srdx!0dFY>cEUx{pe2{5_cROnROCnbPihqH{>GBAmG4tAF@MflRB zNE8&i!pmd5!kmH``cms@(P&z8lD=mbnk-kcc#v#2_!RX?&NiT{y za&DGdr8Mm?K7>4R^|Iri6|#HKVU@hwn0X*Y&C7hNTf7zg#p1jJ;Hf}QGW!4>E1><{ zpP(~~F=a;kHZ_;@H%mel=8G&*Nj5WWr2m6r>w6-lo;WrOqW~Q$tA=NuB|^V=XJ*%c zuIoymfltW$_NE!W3u*vA2Eu$&c@-n-I#&G=x9(mfYv9lVQ z@SPvgiJH_eTf}|eUcVt@;x0ksJagO2xd>`~Tl<@lY1wRA**vDkf_k)s@lb(wcw#5& zKV#g=3_a5aq^^MA^qLd%$!o0*0>Twl(0xgz6R>ONkgNbB?_cSa!9$^9@CDb?>#aAB zX~%y$2n-^;CHIXv_uelh(NvK)3fhnt0`~2Iu>L?9;K~Ed>4WR>?rM!mkJW~%b4sV@ z^%fxY>{}K!ndEXa$V80b(@dbe*gJhR7TZ!I8cvaPa0RU0+yX z=X@X?>tyf(NH>6^vwbkPYy$3!ZDo!<{rsLX-8JiW#OWT9+ugErny*xz0rtx;BSdb? zJF_rqy{H;ybB|iK?#b2HpF+&&BL?k!p?e7oXbSD_A2v zr~WGbN949H@-+R(^)g{}%6+m}W7glhEtP~zMS3~gIwINz5}y5C1}XCsC*nVap5gwa zZCy!~z5EAI`SZ?s)%&c$%1v>zhrVa+4<1U!ktyUWfBuo7I`wc@gYCA|svFn+=OS(Y zW-$yB*W9&%Uosd2%+vdUcp)PGv|0)o6)h)nyTqbGgjvk={onWa<#`AJdL)Hk@~)&0 z9Kfx*U;WSfPt?yLlYx5lyk^(_W%Hj@e50`5BR%p?OCSR^IrNOarKROx^vKGswvTj5 z|B$qM%ofie^rU} z+work<^SvV`3uG6k72AiK(6rs=+w*hP67BfByH9gsQv#QSOEH=w<)NB;`Im!pqrFr z6lGy!a=*o>88Nzar>dH%R5{Ev%X|i)qzfjgbS95oAEE*(pbEEbpI5%G`bHT3gA7dV>-k!`P_x=Dq($_37b4dkKhelm<;d@Dz{ zK-unsO;mxqxqb>UzNxhJf<4&3c`v&4qRp}=X};**JU1>pH~ovlcU=5VwL^#en5u2t z2k+Te$4Be60Gn3QJP+{`;c%@*z6;LTqk?EwdA@o6B?l7g+xPb0BP8yh;qK7=b3%Om z&S5>F^43h3(XXVQnmkY(pw;AWeOFUPQx8Yxg?ZAie$@OPm#IrWG4wV%3xP%KilKBl&xvPzs27&YF8Zm`BFhMxbT6BPup*?`xEGu zY%4E4wW-9gV&P?An0(pa@cHrX2UwMGo|YJ z!Ky*|Evne}>V=3i(YpFMI*%x>BZ+b@^&n?lkW>Ez6z{iW1d(`yLXbu(U4tr%rDHDS zg3G8mdhlk6U6#W#;(gv;Y8a{nv$3%(bT_V=jSap@X~QM2j(fn{W44##1FmtcMC#d^9#dfg32Jjx6d@$(jFuw!r zwHJ4GG-BA`1H)%PVTxsT*>mmjITjE+fTk9@=J^|N{aFxivycGbea$-fvn*e#?n?>#OEEsFK-PU}TX1 z6(p2Xhh$IH{=vO7O!EDw7-4%)zzU{yZcyKM)}*iIqe%77b^TJF!E*8J+{g{v%4aLJ zKCk1-$Ky&YG4*PkpZ;W~4puAX`zM;l1@8g>PuRXuB2BCC%~*TP znA*Mp&}`xDGYgqlayL(A?4FTf7K9_-`dDZviHQ1{MPcV`0?z0rTKd&4VCw;^=L*=5 z?o6n3IyVnzbY!<6bYOxO5OuHj>XyzfJy{g-;i(l@+gMr>l@P4=?{yigKGQHNjNZV4 zFLMB3z|4WCzj8RQPX-8)DXAZw4_pvV(Ux+pV5J+x6LhsL#EjMheXOEWI`8GW9 z>=myn&KGw!ma{W7)KHSN_;3!|rk^}?TANcIhP$^(AMPb@y37EP`KuZAL-V)*W0^9QXS|#y*zcZl%`io^X(YWl) zX=xObINlG6#oIqb#X}ndE@h-z{to};yPnzphMBj_w)N)5nMeKF+_pKa9R(v@+3npO z)Q0-{m5Kn{m~XYNk9_a^UR7?yy<+Ojn_w4R@TG9y)|Pj9EUG2G>z5j}l_mK0JTm$= zMBzl)(P96+fdFQKSi`d*tVT*fNxjR6`E-GMow%9Z!!nm0Q^)5F@#hbKU_RID)! zlk-eKqf|{0P2MG@4_hwQ1eabP5=Gy`ZeW7<(Qj7%SfW@>bKssyTX5Mp0i$SFuSZ=2 zyhB;98h3)4n*y3pMrb*_4NUJvUY^Bgg(30u93@#%f0-J`xp~cv2ZI5<*_t^z0!ng8 zRX14ms>+Hl59u-_zYC-*3a!Ff(@MS9Vm9+UgZCnc_eD!AWtY1MrCi)cBx=@PSz9kV z5YTbM%$14~3sK)WkKMts4W<=Hq>7o=E121Z*Nx!xEQL9_BZMZ*eO~@E)h)7UX?JaB;?soM8-ig4A`2Y8EGqo657Wl(e)hMTDA}%gT-e3;tZ?J) zx2X?Evvla{&Sv|>bXkU(F@b}PYZAsfUx>zW{$cA{U44swJde4 z8w_12I9uwru4LV`=fWpBRyJEtQWkmpA*QC{+zW~5i*DnUSsA$OJKCs0c4-1-}5!{O=Kp?))tPXfz*W-tG{C$vdL0%XIUF#;yTy5UIxQ`gcm^Bzvj4^)d7ZiCFmItK z%YPzDc0xmYhr}3Ees>XAh!&DlrIUG7uT{fPM>*Hg_vFF*Kq0)J?{07DOYxij>P(9N zPm!7Y^L3A2h2qifbz<QX9YGFO?4S@EMj%uY{FK&;z*e?RZh&GuV7UK?gz2tjEAdvBB~qJXrhAXq^* zT}lL`cj+aGD2P&3dJRSCMS4#tLKKA1TYyLnEkG!N^t-@)?*E?Wd*AL^FZ^I-kz}p! zn{A9S=blQh_-UP(%S?XX9*~g0zgWo>$8ct1TE!Ktg3mq}pZb~Oui)M2Ln1t$vvCwYGZkGoR&M{p!Q{m9HJL(J zOlqq6{=3sM9v^KT3DsK^gK<&h?|qSJ?w_QXaTk~hQgZU`c3$G!?Oulcpw0ZVKThC7 zgS%Y5GgYCKs@&})xxmF=d&*e0+d7zu0C>q+2;Ov({8?*!9S92xGV*! zsVe$U!zDA7shgt@pYMmu7lH9Q&Mr1VGVDT_D<{&opL?j06fW6f!eRD=Dg*ku$d{5KzzdWJPY_)VSV6MS)4@lpR?PvI3@y{oz7FqH2S86~2#6*VDSsUHz2{pNc zxSM^9y8HbOp^G%D??oxcyA<3U1i$}YQ-JxkehGxzut&m^GPtkeRM?N%ds0U5-aNOC zPr;d9RbO!~Te0Cn_FL^k>AY8_U#&0fh{!11Ba3O(I&ty{J_-Hy zZ(kS)YV*tLaeUpr$3n}ABsNhagS=iGc6$EYx*n_a^f&Y6DCzv-(h@ifPdTuGQwyP* z@uk~HN3SFH3%fe&`jlB1ba$|!H(9bJVp ztDMcGI?H?MW8rVNC8Jq2_v?rA+BI+DgJ`Q=cV9IWE7lm5zT>~M7<$b5gB^lOY?yn| zLF_DiPRx}ut>D;`;y!{m?%cBJuGlad=@ee&_7R8qkT13)76aOVd}efs898cef_@#tbnA3ZSm{b7 zJNI;qe_Wy-zfqbIAIMCRBkAqOfa#5cZe<_F>sKKINavM#P#)C$cxG8sfc^7Z(jnjO z#j;6&HiDw}MvIXSV>uajZ^iKs_FiP;cEcjAH|YivWltn}RZ;Rd^YNywYwq=`9!BJy zi-WA~LuAo{SoGye2Z8Gv)gEp(|K2}wR0?9)?cP0&u=-|Ti{Nr_-l+u*mhWgR0&lJ#$XL1 z-7mn7oSAmWh-gg3P{*_?`-qXt5PRc~x7>^-&kBHUl+tLRw;>toDm)U4qf61t#)ijB zML+O^gu)30j_^q`V}Z}m#`X@0(LZ;{p_g>hSJa%pPPE&n+_d7}QV8qmX zXJ3<#ahI%Oj!k?y3Q$ZgnQza)x6jSu8CPmB&eqgf<={C%us*dB*2|$9maY8`BnA5+N3T0cc(neVX*a|mj?V7f3Q#P&=vf9@>Rxv zvFUdHyWN`I|K9R{H}?O<@>x414cd>F;u!KSwBfP=k{#lSDV0(IM~@Pilro2j2#Yv1 z@1-mUhJ?k(-%IjUKd}in{3i>`_7KDzyf=;0P;xqV09YkFWbab#`m;|OyWG>*ddk1p=~euLYAzc+y6 zI&-&dkdl}2(5c4FO?k)c2H~E}!{4uISvt&oSx63?L5#MX7+XlAWdqBNGsGboczj0S zdi@Qc0(Zk^YyNl(GH(!ff|$JToFq%gyrJto=bMf@{MrQngDCKoU?mXkI`n_q`vR01 zANLiosi2s_tQAJJZ5Ye0(-t2xGgQ7;yP#voB^XnMNb|-D%(qdCtsdo(+~Hcdgj1kN zlP~TVJ84o$wmd$jQbnIF5)p`myOA274~}R}P$n^gfhyF=bYEO-Cl(m1_yA0yBJ?wK zF40S!4Dz4{CVvTAW%Ed0+Pec^_Mqik)`1bc9YLW`2B3T!ItR5sD9VLOTBBdp%l&+D zFfT6$FA#5wNlAucmcmazDVJK=^)?F$N0b5H=vm!!*z0U_6y2p^v0rNtqRQ~QbXLw_ zE$7eI{{U|scCtOmMlbiVww92;MvCW>us4|5gF-rex3iwG#szpyz?pOjFjw%b41CvV zyb0_@p$=+r2iMp;L2#v2oBP&WUWMZxJm-SO9}Uj91*iv16|oDd`1p*Fn&TBVpltJ?Ix z!^^r&n_1_3r5`p^;v%vJO!hbXOi|X@cLNNkfvEQqh_@8E^%DLqCbsVDC&-y+ful-C z?B9+N%a|#>6k^Qah;FgGa*>ZL`%4|>meDdvdE}g-V)X5WZU|}MhWFNdRVB$nKR0UA zEu?VP>3CN6I=K~Uk|}o=Gngk7CrBsHnQ(U{8HHpP(R%hax{-!GZX)B&fxaZ~0Y>ck zDK6^w%0@&HUm*?~7gNd6ItyA9#!pZ=Eh3jiynskFK!N>&4dUXy8NX+bs|pLr0;5(N zxEY8C7WgaZXzzrgrQnLopSkbzl414oKE`g&vYp)4k{&%PsVmV}U8kFFrUS)?0&XLS zhySye5ACdD`#XUEv-pfDdVdM{Yph{OlYCFc&7zqgX<(*AD{){;#Y#Y?e(C6(k5~NR zJv-*%A;QSV$Y_5%5w$-D>n%=x15(JoL?jWE2Nowrzm|}iH@Ekb^{{IFOir_yYf3pA zT^LBL`A)=XBQ6ttm>L1tCmcKWDWq)BU*GS2Rk(}ftc$$%(f|Me&N~bKl+@-5?tNk^ z^h5j>p8Jz%$i?AwpbQNz=-J-1yi?5Ps7BdF4>&1 zo&Ty}V;v%E$ZP%fk+#VVN#29n67SZZ<9|gs4gOq55k{B5Qt_y$u3* z5ytQ{{Mfu=d-C}Pj{?uZo_2fpYx_i^nNo3pr7L{}G`SNMj__4K-t=FUe9D?&h zblL92#km~+{d$#{&8!LD)xd-%8JFpbo2GcSe{^Is9)b?zBK>#ZApjMqMC&Zf;vezI zXh)*Pc;wDo3rEKzk>(EBrj^!O&zM7c4plwSACJz*-8==xi|BL5XXI48(A7^rTc)^a zqdpCG|AkY2gofzn6ZrDAZ+V|--{-tNRll0tD&AC5?5S*(zUA%W%jm##;=8yj8=IS4 zooe0Sq;2$|eT{I{M2tZOWudI$I)cMska{vYS#t*O`i>8fR|(A4t$ktfl0diIkD1Yq zuB@0v>XyOh@UrIbJ}~3tYyA}_#(T(Krd6xscpp3Z&;w?Om5^_ROjU(IqcHB|95j0U zoAI7*<$_lOIA-3r-JXfc5+GFBd}ij^=f#90oc1aK-|}6f&-b9TjYIqCg(RtmywU+m z=ckp?H-P7%yzvZiU`oIGOG0WS18<(U4tH`w#1sys);O1>QMY(fXR`1A z=j_o3W@GQV`Va6#(+3LDFTdRjHq0#%Tjcch05U$&RP>sOoU%o&Rb$SIRjrWGFq~-b zWccIO$j!oAzEs!E+3QNngD?50)G9K5yNe}V+P5lhRP6L8g)y*|>Q=-vzz{(XB7ofT zYkD0=mEyv}p2f4Ob}L+-A4cGNR7Ijf?R`V;&Ka16?Kg7>udzkRS5Qc9Hp5=l4O>;a zivl7nH>@WlDs7rbH_J+$jY6yyRB3~jh#r{TaKg#xILl4g;kljh*cs5E1v73J}t*sL#Y3A{*14@QlduaMmuijZ7$kpdW4pArDkr*4V+bj zV!9Z10J{5qKHP^(KQMu06)o|_-6f2W6Ez5A1s{hqA5?qxR=kByb|E>iUnkM!0+79x zH^$8=O(P3|~6RRJSaKf>{pB(_UCj zWJ;GzB;=v?;w)RIwWDzyRMViErm_&lTnmHMRC_H00^>K*-e<4%Z{rvoWbub8Y zQo7#Wo;BLTwGI?HEhVd|^8?E`r^bHW6!VVbSv zGi;5TUEe$?Z$@bxuaarl9}osmaWXomGR1#kqxo-Yz%F-U-e25MJvV`u091|{skX>( z?8o!D#Ma&B@f|QKF_pkxN6D#CvS^CcKDkjo-_j}NKUvr57VT;=5xPY37DIRa&Dm)e;*^k&+7;8hB;TKM;+vYkd`Veh@-9ZlBeT!1 zcwz{>Y9Is-KCs!>myT-|a}i`4>a?>^dupRR@|POdOa%dpSbO-qJQ<-%@@v3T_iVBX znjpUCj=SYZ`Qv!7pNvjp)JqHuB=-mb?e{yMC;!hQet z-qxDo-Dm zHA>YvPN`fNt#L!jBJY>Up1G!>D=bqAee2ggZ9{d_B(~;IL4vL}%ANJH6s1MIG%cjmw*QTl95=?U zxrx2pH&XN~+v&GsAegQbBrQx!grb7OH~33mlz`AFCF2a9F6ae1^INol=z0z^7^(!e zu)5`e>>>>g_&1CbO*d#6LX{o6Y-B*JQU0^g)g)ZOBB2q>%z<22v4;S zUmd`$XQ9Ma=?IZ|d}d)yv=$SHj;3N`IOQeI54srKdsV|;Wkb1AJvV(euroA;TPeI8 zkjj*Iu_=SlN3A0r+y%E6<x*@7E;o?y)BAvkx zlx$Bj>tc)`hTgtQCnA%iUl(FeffTc^yS;nZOt!9@b!vX@?k`wb`LK)rriSxb)M+lx zgyzNY?g60kS&Ch+J52*f9zD{o`aNQ&9Ys{Js;O9SQde(km0Ua7V7sa7+Cg`sk_5&vIVfvLGqrc)%s6<%tk!k2P2U47eaYcn zj%jBh#WP8QeY<_+H4#R76AhH;b0tR5$$D;ZyZslSP5+ujrT1wzlp>9T3ygIC#R zG)@e?#6}2b_}sg8eIu4lKH=Du|31;X?3Uk{-FD_b&0SxK^@TNySqdDnf6+;&fIh% z%O7kirARtcTgY$Ys`p-b4?FV)_0skgqt#yZ2F}Y7^jedS&FnnHI(v|&afvQVqbcR& z(XWf5D$U&5kC~Q5$tm*FG3?r%4IQEzqm> z$!u1zrJa@VM*rRA!c&`jLCk4q#1i`{wG0>hAgFCAt`sIE)uF-HulUr`p1GnH})1zVS7063-X+(dQF9-#8zllO}a?r z)N;LBm4?v5DmVpt;m)?A?QPhW(T37prA#{B^hcd3)4?>=+n>q7F zDL2l&eh?C*J}E39ycz)F7AfWfvCQHDR*CZb`f73E_VDP7BP07tWj_6xE9+}2H2&3> zyYY!YZ^>h5jF>{7BEr{0y=+1aw^AG*o*37*sbi)tUv7Sy(O?CoH20@knYYk@b`4uk!{%h+c7PhS#+hmxhD7TPs!UFB*77WKFWMg&u>9 zK)xu#zXb^X>=7bnMEo+P6`OJ&t2|YC><%&~My2Wc3+|cRSuetvS|7>Y*Wl)=pW8}S zdr_Wdi#U6M;fXx;`VxP?>yX58?(KBBO^Xn3(R`lPf&Oz-BTn!gr{jGYB`zCmPrW5H zOya_@+Z;arsP{hUev?9iEt{>e#gJ|9?SK%02|Ky2=NXN*ta2HeW%DeBNnU0OSb}H{t5)sx8xU2 zMyrio`7;f-raK(X0p%z&Jl0nR-EA!}UF3g;`n1#Uc1z^6Rj1D+kaO&8DWQ&4ST~E% z_(e3BU?=EB>})?;Pzd(sdyCRN<-((>L<>pOAfHwE3PEQ4RzZyn9!0(6@}``JI%>SD zdpv)2N-<7?VNvQ!lfFexcUXv0utB>4ZKSa@=aQ&$p?R0me-yl+aQdbvqrQCdtt@j) z5WYWRy`n8Qz|^b4qI9^AZW2f`K)ZhP(>hCKUi{XgvL~-Uo4ZNoeZK!RJzE7^v+*67 zfX>b}yzpiD+hXuaPs!va*n6u_etu?w5E?$-a{TtwfbLBU`%l`!Knq3@YDf)xE zq%~087}&CTv}%$0?y~b^KI!I7z4o>O58;`V1Am!!{qJG#YV$0Tn{%l{s=s0|~WVCpR^ z!JZbTN&otSxG6rNdsB(&?;N&uFLU45V`{eT*)%9eswQw4$(bNynxHL^{~8I%Nrxh8 z&V=w>df&ID1))ydU~-o&Dbo0Po}?yZeq{Tm@l{NmkHqRA^pL8P5_cka<%E;PL4d54 z?gsO-f2YVU(@bkgJoh$vmY?4;BM|0}d+vUvEea@RTz~3M)G9C)>Epd*@c3*c-|_8B z?_qxs43%g^+^$h>F(|F{Q`sZC8HEmIKarY#Rb@NM zOklY=QOF;{WUU1`H%s!y{r_Soqo15Ns5z@&!_GM=c$#?p6^N&>dt|%t&B~sxhiTki zsG`yQ>J2wnIv?+r7+0izGySh`KE0#fA_hOEYUYGGt71~pbHa6u^L=TZ@|YN00CZei z2(%Y#i@gTk8&ZyLDCj4#rJioxHN;R$(u5-Dz*Gr~pii$KVgMZh(yD2GNRNWnv`Ujc zb=DxNwb~Ke5^FgZ&%II*)zJec3XB^+wcxOud3_=tF*RN*M-8xX30gTI@K}%o%YJ06 zT*9H9fcmdZ=qJs>_)~*=xjY#^Z*KlMI=feLydt7|S>oq0r9=I~)2FmI&ErBV{?)ib zBN*CCmD9_G=c@$}@T@uMXRGbTb$I7>A1l=L2WU~3QJ1-brviK}&;g4e!!2=)cj8U= z*1YMUE$@k;7xbbFLfh5utw1VrfKwId>E-#rEN#4JjtLfn~G~d zedZTeywmo>U`}!0z2eoy-a-}id@ImjJ5KfkGq{B_NIHO=XPQ38!Xr-NbO6|=uE9HsS&*g=V zW(&*DgciBgQmd^y@6hj5H$8M;xFKa&wB|JPHeQ^wZ6l%X)(ns!PyAYC*1jD6;JC6Y zo~W(CDnI7qpHFY$*{hst49ig1y6stMZR=>!%1A^xDm{r0!pff#)K1Yy71H&NwYJ$( zpYLcP%e1QL0hdlFw5LtfD;=%#P|;5p-QqI=5Zp$WfzONR`<0%y&2y4qeCI}*=BoY~ z-58BZmt-9OKL(sZP4h1A=UgNyS6tH^=a++_P22y9?@*^KaDH~~NkuE(%lxc4D%KY#b5AE|z7eAIR( zi_Poa<;`*VH>3W$E7W!PwLp!aZs)O~3DN@=Ex1bf188-KvBXlm)l=46_^HX_&dcY5)lK0oKGTYt-fSji?^D`y)Q;Zb-sxbL~g=?kSEAMZ?Ijj(u#AW0}hBNg>#D(g7E<*hM$VetfHPfTE0weGWO)a$W13 zozq^auNx^Q;{v*ASV^r-gEa7G+*%*(8_Xx7x z_N{=WCtVN6dW(c-zSM_iC_gQ!=bOQQwSVTu+Hn!gd8u2Xi|37W2a8^ikU<)LI5z@! zmQ$o#{SADZ9#~n%ne>P9_O)kMHxt7K8w4g@{z~E<)`bYPc@r5ze@~vZspnvk3AUQD=SP_S2(MmvF=UPafC(pQX5Tml$UZ7j!x!yA=fmT z=M*T4ZS--)s;@FC9c(d6lut0}p2=IP?mLcK|{CA0VptM;)&_TrT* zZ-Z(T{Pp$CHtTZr7j7M`?h%w7e)yqIF^2K5gL%2xMlqW06>e`jIYn`Y6WAPyDT%sGJ>u*19cgLw>jBIt&5Von`Uh#gbC0Y5twYI;TiXl!QzK@ z62Z0F{7DA$Yv7X&+@B&&m8Ac)gRpgi7Vxq8KD4lEYfrbnk{0L5D$X)RoqHTgsMZA_ zoasg)*N4ko10Gk4lc?AY<5Z~Xrj1Nb%{_zAvF5*6=#%S<*ekf`<_ir%GMwKqZW${Y z4E=~Y2U~RlQ$}}21*WCBJG-BE{rGC%w#b0c3$rLOHx5V4?w->qy7xrurv{ zZ_gGEgfajpyM*~5pt_83Jag`9rYvLl3V()^{1eFOZQk?Q>zOa*;|?qD7v_hP=VItj zOlxxAKPO*aA*;=++>@kF!zf*SyVXDA#x^ICleuV9Evn<_^&_*gm+8g`HQuDW5? zM`F+^_fWoXZg200yKm*4Q@ueawz9JOqkzZvb+)?f$+dqvZcnaHm7E~1H!@q-R-5Xr zg*__JK+n;Jm=T(ejh5u#7&P}-T* z1mb!u&$;?Lw#APf=9Z6&mXr!0+pASiO&}#zU5ET1QeCrC? zTnT24ipbNSzcV#9I`_7eX8Y>HUaOuCvv8T_6Yb9TcB)ZpI;O+ZQyJgTzlHaRYx|MTxTUAykd1Ezd&!Q<>&Xq#~Sw&s54CXU`cC4J!06t z-|^QG-D#?F>qp&~9tL`18}<9{J54#y&gsU4&4zw5T;~Adt`8T=#(Fv5Mx&!T_COXd z9Y%6z&A0roAx&&H1AJ=gEUfDp)Ytj@X2lf#hKn#mda|p7!u?A#iTjU3)FQHKRd@|$ zHWeI>2WMwDQCtN#i^N`kpCV0+@~53B%Q-cx7fMDq;DgZ+6?*rL#tyA-pwTZTb<*P3 zNN`*GrF>qbtA5me0Ysi19#zZccF$mKEUbnw)_?8!u7)Kw#+yT8qCRh6U1uOIIV{q& zy6@tk#jSm)^IV~Llg%#ai$!0rtXxL+Cz!rvbn4&d;B$N{+90$uOggnc6t{c;67wAI zQSbBTc-hsWhLs|d|BP-9n8EievVxjbu%MJM=A505ca~I7bQ$E#ap%=1gOcAV5xR<6 zLVnNTLLD`{5o(ST8NqXV1%DG9j0A_G=A>Zo3sj}H1`o-am$CPc2dU?w9~LR7R*5hL zDocEju6xW2IsGUAQvPE(Lc+*qb+k9i0x;Mp-qViNU7ke=L!BQ0NKZ)syDanbhPC_S zm&Lm=0;LWP>Fkd(_i6)3wO%^9YcJlI;|f8 z)`oh{yuPb!i^;gPPlxiY>u{NrKYU4?)l$Va260}YC=1@KvE6<024prXYpI^M%>J#) z^r8xi?E(n)tez#oZR6v~5%k<$6PYF3{ag8r$F=jrchoCyKMDyHxqksA)-|lLjY%l- zSiDp3YLMEK$Tcj!{q>)Cd%S%86hm(rt@i@gi zWFd#`hW;9Rr4uwxh6+EICW^no_O$bsQmzaB@AtIM2u*`GTC4nN5u41@tkHDMZpt_S zW4n$uRabj@Aqk#kS7;V4RWkGVD%V4L%AlH~ZB-1eFjZ-mmb7;#$A-sE^NL$LZ85FS zo=?+e$Mpwh^&nx6X6VQo9t8JQ(w*>?W+e|?r>eEvl;5SLUd{{Of1nW)F6gx2@^30l zllRqNH_LWzOw0nz@hAsP+3cotu6lQ_=0nO~=4X_+J5y*?!p->RK6>9cRc z^1}NOvwHw+X+UE{+cZZe92DO$70oVfngWHuCP$ls(a{|psXjI6_hLVVXt3Q9r%T#c z$omHPRJ64D?Nj8?B3n>vr!|7Gn(B9?q{1}}!QB7##sHpMz^3l%$k7>iqsr6aS+o6{VQ#8_ zE0eMXAm&ihg_niVd%)ze+%R~G;poU;7RqA3Hb!Sag4eTYwo&PG7iOgqd4&_a zgzj1`g*Pj%X&Go#rAmM@w0;UhENQ; z^)ob!~-XBX#cj8&>`HMhm6Bi9yGcx3!W>6!&OV zjtkxe+~iP%GvDM_@uF)M8|P>eC#4fY3tetD`pk$+hjcV$r|&L$+E}XPxUAgf`#Ydx z8CYI++8JpFcT00@M9owSS&rUb48j8mGbfnc_;lNcb}r(p zJuK%TEPC3cZaimY@2>RSf_|hu#t0}u!*^GLJ*|oS^tlN&x^t}fI>B*BOXmzNdRM-uDpxqX?$7^ zsN9_3Nw|arNsBa~53=$a`(D!D(wEoPu*nU79c?*)(bwNbN1Q8l?b%_E$ZZUm`jZPTzWO4CrQoa zJMBP}?L~VpW&`qxJ}6FheBHu}(1N;M=%5cP=KSHO@7A8tKOV#3v!m;;c93Z67JV?c z0c2%wx}zhU@d>2X_s?&%Vc_IN1u^@Mru-$^9{aA5Ky=F^LN!29U>lt`a5nuziAMrG z!Uc}Ft$o~0P=Jl4qp8vSi$a^iqv`F^D&g0UO{qoa7gu>!<5^E(3+z(@2}O|fi~x#} ziE*(aE@+xFBx1MV6w5vPB^1(^_`ESg+CVev`C42!Mu0kEJrK-_lq?cSaVwg=F4{7Z zkIRX{(Mh3ihVOOLIa`+{FWls?5_(c@zU5BI3FR=BL>ctQ?AEveNUfUFUr$vhtQs|z zq$U6Wh4I0dAs#^PwvaC*M7_enRlmY<5u4@~-VOQjbE;*Frlsy`{qyLbG0gR>R_p3~ zrZJTMoI8ui;iA~=qgGee3gf4051;)@lv^Ql9y)Mktf_J%S(xBpP;APd!nt`lE@&C+W1=Z%;V|qi;LZ zH@KL+u-7NcOY3VaRbM$;NG5|VYeKz!kY0L$(I4!pO< z-F|n-zY#wyT^eM)+f(q-C%5E0D3k{vc>H?qS0&f>jkqD^NQh*-bEjO5z{N^8%*%OG zx8hNIDQm04MrLaB(pz#~#Ek;i zKD*D^;D_T__v2a?>B_gF1+K}`aV97ewD(-nNR`kA?f z+}PQk`c$UXNH;W`Mv5kn8eefmU7J8ZlOWjV;Y#;stH($4Un}WK+)nfkD2}TBD2OGz zJ5|d$6!~zP=|Zk(7`$gJceks&WYqxaVw;`jc~@|UpWxYXzt_#WUP%99k(#4{7}|}j z!YBO8XC$ZYr*=)NJsp*kZ1tgj*ymrv%sB^Obm!-!WZ%Zcz&q;DY2i;jiJs)Thwq5_ z`AD;ye_s&cIA}B=z~dhMix?l8eOs3CDTX}(uj}S~wbM1*%DdE&Chq1L3Fk(C?dpEN zXZ5(i!h3bg?*($Y!~e!5IM#@;N)GvW{TU#f>bpG|%-%y!3v00<^)3l|k}WcXw|hwN)uTb^F6+qMLC%@+FixHEIyNUYFB6h<5UR zWTsM2?NzSG+y%|_%=ARv302t$7C#}5`r*6rg^z6m3OJ;uVW5PiNba zKLrk>U9If!Xx>VC`pzS3TaDD;aL-XBpMOruiM6w;f|w|e?}t>`QhwDv(f?dpTiQXa zw+aMc?(RhHxqD6m zRn~(o9SI+QT1&>sMDE}OaLo}SQ%hklSsGAjMrj_t~vlu9K!Eo z%wvV5f>8IJeAe!pI?_k4oKZc%2@2Ivd8DJS`g!7C<%n#y&BZ+NJV#LB=-v+xXF?b& zqZJ#e23yhLI8Hxi-}1&mKbV$paYo*ydpAY`tj^?_mE0eNL_o!@2(pG7% z?B}`@;UXQ4xp_LM_IiwK43Y2z=;3y#%)G(@G~7Q)I#*`i=rb0`39|qOOif=h7=}}^ zRdW!g_hxf)tXQ6d49p{?0ug3+tkJl4C59Lp1_AxdnQE=cPj%2cYaKNpxjNW()Pi_89$8W+sE0cfbv5129h@QwZ08b&}=PQSM9w;3tbc z`XKXD-R*|hwBi#{YhN5lKh;AJ2k&72@Wj%`1F_7jqetuy7>$PquL~e*+ot{2>mUB5 zPxODXv;T?f{{N|3JZLuYN^rXo_hlz_>MEU7dzEfV*xg`GGX?+MFVtwfs>~NW82p8~ zDfG|8#)+%V&;MZtuF(%R&8rN~gNav99QHhq9_~)yB5DJ#0;3kb3MWjP2hJh%Qf^%R z0z%e-d3&ZG9hi!w&Dod{J7zVQb~qUuxMEj>L&<`=ff$HjSX;>)<~EP*ftHHNNJiPe zpQ0}upYdo}0rg<{)z!i~8&S^x06kIK!qFH001VCH(f7XT*9eL(U!HiVkNf-czWNTr z_y3%(cU~i3w8jMT9aw_rZRDv9eb~Q^C^D6|9`?!d^h_VNGD>pKpc?`9=l9Vd)|rW* zCw{ZId-&O(&c^ft-}m2>eFhlSJl@gif6q;N05!COqs3nLgVV<4gQ1a+c~MmJhmF2s zzt6DnayKGYg;H~C53Ac;oo>Hv6>ygK9w$s*eu{c{U;mh^MLqcUl52%9Dpn)r5V-m~ z5>BoCkL}7?!5z;G%s5aqU9+T7H_rciL1ZDEx%YoxfFq0kI|t;IE=jqgKH%_ze_zV- zKg})6|7XhLPS~N~bIfUNnr=pcV1;ya)OKG`cEOD6gn-55Dyjm;2AsO{nm#yx?A(1B zGDhZ6SrGZo@~>sqya%zQ1OE>k&GY`KBH-EIw#ApiA5bd_Vj*drgJ8PS5f%a9znCv) zX~8}LY(2!elNqMOhEe`c=MbJ6O21zH_$@ajaWj|yaxgoLOAmO-|9Zcro4Q2*K~eTE zLg1a}m)YI2IAvRFKsh=v(eZHBM@v$p6J20=dz5xBMU4)$)V6*>C5cs(_2Z}dMr-8) z@4ZvCxR&zU!)CJH+b1jI=!OA{2;VQR@BKSeLIEoRm>>(#ok`P?N#J9Q$H`AJ-?X~B zO5a7{i}we;y0QmP;u@>v=|Ci$`!Pky#<5}PHKyigUDy0e) zV699>%NlBGqQT!OpY2J-?G;ExO9mEuN(0?AQo>xV@}Ud730~nivgGdx2d97iMNp^k zHZ1(-jzi$zejbQ==avz$bkZeuaK&HH_3%ewO?%@JGCG6jQZkgv=Y9~DJ5vp9w$CCI zH(q-!30IzPo{I&gBV5pvrsu%ofJlb>{h}2P{;M_0VYC$KHCcXoU^!3fNmbcO)4bV0 z0~S^NH*_0YdzKNnHGg$E!pJc>YNn`ef4#Ahk8|_S;B1S!?Q!du>4LQc<3@VrEaoH=+Dm5IHF)>*ID8hl-82&j z$9Xjv640Z=L5#)1%P}*=D%b?}cAU5~IPg)6KOTy!EppS?7N-t)kG_~`oLuhKdBh&Hv2ngx zloV#gLdiVWzDZ4CQ-iN>Jvz-qf(3TEmY4Uf@nREt-WK6|_D{&Z->N*+-fGFw_^qZ_ zQ7HLzugS)N&kv}F_VJZ#ILEpHu#y^pC8b_?J#61s-%2{-wrizh+bGW6rD5eXT+KOy ztG}dnDou@^tP}abGzX=lN=TQIlE|h1N`}X|)-PkvzQLEgMW{Ptq)dgn7H{?6?c0$) zRJ0u7bdC^jP7mnj^c;*jc4Wy_;-sCrep}RDr}8V-96;%;{I(esA9*5kJdwVi#j16a zmPQ>0mc2{BeAdold-VN-{lYRe;IOICHlW*4XTj2tetX?MRjJef)$^+SF0VD*PBBDD!X6zjMmvA6>*vhLmRg709Yst zj@c>SAenxsu1T|Vb{Hap+F@igU1cO#r2A1#d@yW|@f=3^Mh1N@-@*0Xk^@j;ClVc0 z)*vqs@V&UI%nvXPCM*pCp6660Ps?shH!HgY?2DP?*Bg`<1Cv!gc(ojfJ@f-D_wRYn zc&ahrx!UO!`%rJZsmupuw{=+uV7CkuPdHI_jLsra{@d!~)O(zybTz1^Bbr3OzHL@; z8cEYHOUI`%XR2lxLZ8deTP_&8j;|$$eUVE@k1yFaUtQ0C;=BC;q4iwp?gX%TD=iUG zD^mt)HM2UEY6NV(T&gWKI;%U1oL;_DEQ~$!n_Jj-Ozq`JxFj28Q`EGw3@y-jSr#e6 zLfO2{65H=N&#CnVi(;e~quM>ty@)=`QC7jpI-NBTjz)5M6TeK&Sbk)EH6d_Mb(NJl zRqN!O2%d%w0TAHNTk~ff22PVO7MvljVk`pk^c}I~dBoLcNO;}nfu(6DgA5v@*21YZJMDLO7oOgn z0_@v>y%O0xf{RP*_-!q#t|K{(sI?~|o3!`afjMm(3aIA42?UW>wA;&RiV0iSXh{3L zb^HJz!2h$_Y2ftV+>7PP)vI}6_@B-Gy_^mMpXvWD1$_gx={;3vHQ6x(sI7c;t97(9gOpk zV%@nGHQ61{n>p3&dXPvzQtq`CGw}6CkCF@RPc_3QiA(k75;|`da0!fa@seByD!W0e zhdy|BZ+NcPX7LArWNLO4`1qJ9+l9Kh4=!O=cF2q}r}XCwGeAeghDyYNE1(-6#f+AZ zZ~MG1AQ?zdI#GgbPizd0AI8cD_TpKI^X0v`mG}d~ZR^VKCJG}|FB0lI{d$7;n!VHHhCa;x~RjR-7 z9RS0I+ucm!O+7B+q^V;lZ+#0a^P3Ob8-aaCRO&a}faBSAgb@RAm zYm`dC$@LX!+5XxdWz^z;>he>ur1Hy*DpAE~inc7Vbv~(JU+eNacClujsMt!gw=*qJ z$x58CD!z?DT_UDavw@NfCcR z>oT<6G%LrwDaEwHn(aHE#o@@!uvM?2^Fm-$_T7*7Pr#8e)Zy@Jz^MAxwg1T*LbG>% zl@ks*oJ%O*K}znKzhI%v$6TuWj7mFoJWcjM`e%uZ6}O~^J$@stZhm@!>dIFn z8aO>*V*9POsIV?qF-Umw`_p;(tn&x9PqopSNrnH;fuWrf_5@a!?t+wk!Oep3uQuY^ zQTL{OqPMJS>ibjWtpYk@t~rhOf0z>_B4kpwyPC~Z*93)AK+ZJ|IAURyl9N8SJt^$# zw6s%Nk*S;VO6>>z`p5ny>~*UC3tDM{wRunB`-X?4R+RUZ#c2ndo?0iUJp`7L@a#GY>f1zLsEOWdjK4B=o-EGO$m`^J{ zsmOkac#+)^gBTc*&j4Y}ovgv2Su%1bssWX4W!*}YvJ@q09ucraddD-*>_Ff}&qc0~ z2IL_F2smS@IRQ*H9@~`NkH!*Px2vL987Ra9?^k!&^m7%C^?$QoVz>7Vxj1_|T}yCZ|hOJ<>&hB_ZALg zw`Osjo%$w-=}o@-+13NNH^afE9(oDb`Jb?=-KOgeh-!IV)CgN}bx}p+gY2~U$ESBi zyOy?uLZ-IumYVS7*XU#qlNuI@a4W^(=(e1^G^*PhW!9#YHup{#u0dWLi8C0v$$gTt zmsoAHfAJ8P+`Q3ng<2P-ZAWH|V25DV=YGPE^SagdK6 z%jQA_5F=mmah_nP%QS+os3%gL8pN<8*+YygZ^t%X;27~0j&k-SDGPNi{^$y8fWETV zm)=*@>N><(XJ5x9wJS^Q#N#X8qmJmmnIMl;W*R;Ot7@U{Mfo<(r=|h#JucWBG=1F*6`{Aaz8uh>?cGdle>ua$(k&nI zt)Km;`UYIN_ZrmAtR&h0Q{U4GbdRSB5D78M+}vBR$&lBsHqNa0_|#Wr_@NJc0D`~o zfEFyEPTmYIuYUSwT#qDjebnyco7M=hhfNJ?)uY}kio6|mKa=RK1B#=?RsNt-czE?^ zXWVrOIUSbc6?6k0@JJo1Q%V!L?w!zx>sihp_Ry`(qpmsl$TDx0hWCFy!=UW*(w_CA zHS>Z}QwC~g8|~qqtIWZ8w?^G$k!h#u=)A6M!RA85c-+-X#O_8wj+Qf6Vacx;c^qEI z4{yKBR=i5o=Jfbuf_r-g4cverB_^RwYfnvBD!VSP*zXzfa}BV$x>@FvRg}-b=C^y+ zO)>dX>H0&st7hX9?kntX#eccJ4*lHgAyqlLO}+$>E%V4FfZrs0JjgbLszyV_xD)bF z1^^J0k8>vmSL7!iB{(4Azk1Tnb2m@B0Z4RyN!v`+E#g>}( zd5MJoPuT+8i^> zvaY)&2|_*Ks&3XewxW0W}uh=_)jQWhVG4?%5U>2r9jdicJ z8EM)Pv$laqJ%g-lIfEObB@n$MA#(D;O+EUX55=&v9#8s8L{;tudd+qY(Mkv{vK3y{ zN4#X?utxBKseE@oxk?Qv!fWweh^UX7++1tB4jNFUGY$VE;<;)q{ZqCO8#stv zsO* zlRtsoKC{wlXV8)?VQgf&lQE)vdJdcpy3e!}hj$Sru9MNyX```vcP;@zdYaj370!d6 zU~uus=JHD}$BX>d39!oMgEKv*0%+XcnsS&-!!e?<3q`t%`6I?FYL-y7KKF#lCKFsR z>n?o_R^zzo`t^n*F9$Pn%pp5>fjXbEJNMzFz(SUV!v{e3OQMDM5oc}A=nQHMpUhx^ zTiYMyE)J|$D+~)y&Sb3nBOh{O^MZSOQUNvOTMSKn$I+*&QLuRr+YRTY?AW`rYkPRC z0r8?I^a9}9&^J;qmoUtHs=*y(6Dj1Xcb~oC2gLnE zhYGTT>)7J{^x6WH;+3*pBjMx7_l>aX>db3a(l0R|LpwwPKBDu;+Xb@+OUK-|OL#-- zedbB_d;u%_gh(j|E{lY%+Voh+eDC{&y6q$@xjrp}a>nI5m|6?(`=BdOlYh_#X(D0> zC$7T7XA|-S0cZGy+>h=#_4zVER^=ESu8O(_kQ|g|@?JJwg2DJ0hmYIGFz!?nZXGLL z#32+gvT>Cp`ebwn^?|4`xG!Ux<$kYju)iSs(3oA%GKwy0Mm&Df0L)@6`0C0Ik^>vB0{e)Qa z*wA;`fL5YawUNJ3B7{hUrD#EY6x92rb(l=1CKjU5 zpF$soD)Os7p4o%txv5uGB6?~G6$D$TaYCoR;O5T@jwOftJ=}jIZ#?gyx{Mzkk!68Y`9B`|l-*ln?909Y z-J-bvQv>>HF;*#%D8F3U6VH=fQF@`BdFP>bDjkD4TW;gjtVN4AK71(Q)wdGyf(mv1 zW_@ciu*tRI7RMedl)e$+uPH!TlTvu|h6kb+iIR--E`QLM35D3blv?jiy@_h)bwqM9 zeA5V*x%T2~MCZze1hdLbYx$3;HPaW?Y>*#TCxWL!K6 zteOglHp6uo%`X{iC+@IMr>r;lWRWv*qcwALaxr7!d^C1Cnn3}S6FCDN8*ooGM8GgK z_WmBgF8x@3tvRnS&%*4A_G@DS#y-HbK_F}E_Pt8v{-BRSO}Tx(=3M(}`TV<9P@9Th zdlQeK_mQuzD(A+}{eWC4YWVYrp%|ITva@(26J=E^Z4|`PD#JI3u@%<2Jd-I% z^#$mHhpA=a8*;#vZBeWBw+UHm>%DH4%A5nN*e6MoRP5O|%hpUOS<27Cr+Vy!mZCbN zbTWxNw-XvM0#yx*;qrV*T63mC&kNV-d7-9=RG%N01S=SnAIh&M{lo$$uDW zp3U>XX4rdf7!^{;H(^JpQ2nBcS_qkYG&{0b8xHT14Y)(zR-tTOF5O90^mDIa zx(;MZ#LLVZ=^UuvPUpm?ylrWeb;9o2){pa=-J`F|XL@uoSBsx_3Yb{c?jSuEGw^5x z?gJI|D&*#)B3jaG9%9^4#%D%XLa_^qaTcWm?!3B8KuSEUs(6~%th}?=>uW+ zVIPpV6GS>oQMYM2e35v-`v|Njs-iT;$&Km{nA-qVqu>@`7)X4A4+JLuSx>GS8Sden z=T2&m)qA^V#&fLLag8}+JQLy@?L5qt>cnG`KfH(gmOJ+vKdGtWPu>Rf4?&`J%&@Ug z4Pk8tsg#%{p#*JU~a zlS6*4fKZ6%$2aj`V~=mV!haE7O7mvVRV(!$F1)aNz18FVjwB{?p-{acVXl5Ns`23D z(S0~@+-niAu=uUn$-Kf7RxCA?K^oe3>W}oiejg?k>Xl8f5-_?c|-%Vk|dKImF_e2DYWD6 zA+T$b>jm(^G-|t};};+X*QpI7HE1sXp7}L8q=MAlYp-rL-Uu3dI}8^30h`bl!8>#ltQm=^FPYYIcD z--?!a18uwOor%;+&S=8+@7*sT%FRr07n<*hWRve(x zskXuAm@ft&6!>{eemTVjSZXBf}nzdjl?YE?X45+1SFKJa!SltkFMK* zfT5Ikuy*=iu_6Dsyp{$gBtj3yLTSIxmIqycJ^R~1947v$19iJ}`b==0G=?T-#?~FA z{fih(ZSWGdHeWhhS3kM= zfw`|l^EnGKD$#*MzIo*B{LTT-(dg9eT-XdBbVFM`AOWNAZN*T3%n7!F#nDJ_ee0G$ zt$?*z$9aGLqEs>Fl5`g!3~Ny%wgPvm=SlvoADFZiM_OaFbEk|nVW;5A(6%9bAQiSf zGpuEOSf$n72I1_P@A=$L8K=2t?t^PGBBRL0tOU6RYmjf|JI=3BMO;Ia7?!}=Tiw-; zinXrK^p+@BPYp6DvRdz;Ox25@i=Hy)V58Qy0XY9w#f)eQOD=edW87$T;r`IZvD@R5 z_|;EwjK&r_9m``lK9d*lxsTNTEAc|uU3cAle176OHR%so8U5qR-C%}C_)rsjBtoC3M)WiWF#VTP`T3Ns5sl?H7?(^B8|%;4jz$aQAWi*J z!Qa-xx?PvVer}sb1Y{y#JgZ9#ODF0GOAZ?)({eYeWwkDES-lp{Lp2=(QDQIUc#D1N z`}dtR|DOhW=crP|WVNl8N>Kr@pR~y=*^VXr@`uZtR;eKW^#G%jz51P098bG9dYh+N z@0@CIzOKM(;X%Iv!Rw1WM}%Khkws077pm&4o9e=ux_+#Tv21ySwFT>;iO?6McS5Dt z#sd|ZIQ`=qduMb7WEx8TasX{?mWGtcQwyf}_)^5NYjEzyh`4GSE1=)ECGoR+=6Q+| z8YfFedlr*Q6p1m7z3gGCFQX5{LT4@@w!5RzxVwPw8L-_;=YstPffF7$%~wbZS8Ge5;Hg&V%cRG!=f#`GlS=nzC)!|Om%EIX(cC+oh*ci zZ^3`}se|6c=t_*b<10hoR10??0(7|;SxTS#<+J7dt@}fbp-g-ly{Xt%=W87hoT7t6 z)ms-X2X?iBk_&5=?wIjh1$adh;Aq7rczb~19RPdC@%k-2IHjQ)D?3HV?1Yfxt+&KFjYjb{YC*TK}FA8K48?!XM z)*Rzl9$@J3e8Q0H)hfkp(XL1SCbLWdIr)fUN^W+&M=@pv#e>vWH#C#uGVs|o2`}vj zxP-tdQbA_8>jw;Q+F1e{q%#8HQ3^8_i?5H{q);|bV!3R%uae%Bem1~M-}|5_GXkf+ z#mdUc5m`Pq1<@j8P)ggY{1Vsx5oK4ksT}7-m)Av73J97Q!O35)Nl{7;(wAj2oJ=!& zC|vmb#&-U5`kEDYDt4;g4tt1x$+CR3Zmbo&Ew?hwvrmGvi{6|C;;CDom3aUzv5JJ3BkkxT ze0|NGCMVCo%gz#r*Na;%ZqEWzsfPP_J z*;p_w8C+)}F{HS);%L_GzWu5N*!V|Q!ACl4xiAa+mvr0z$O%etQY^qaW zsH%?og}SW{(8_H>HPd2f0JyLS0e3WCt$6bj$n`ZR;$X{&k47wTlh-NUWtUN3SCb*t zy|og|`LwK|QvN%o_TurZ+CDmLwFA^XHx$kT8sG&JGv2zXIg3t``3P+0j|;|Obini6 z+--Ze=)!csW`Y2zW>w5pgbIJ%jBy_ukO6rN)TsBW5fN32ry<8AH}fvCR}8Y58<}Z2 z`7w}VlN&|@jDQR?`6H0>wRAm_5K9nS3vAqRpfnZQhkUe$I?0CwRmmhd!5aKXSx-O_ z$|*Hlu!YD>L~j|U^%a+=E62S4)2}}$vShGlUc}WrPRoa$d1G8KDCD{Eeuh53<_7>H zpl`l&_jQUj4O6cr=G`Xp5Vk9ow}4glcIz6SQA3Flg_7+%HRL*TI&1sFd+R3(H+`Ow zh9s1<3JSa;o{zv_>ZPWEF5{yF31fl|$aQ2*$7r(>Xut?3Xou_WUx2*{Hq2;?m&<3Z z8dW}fvWy0l_1j-x2t3{aA+IWTs&CJ4Y*n=4K^i}S5He(cJJVrS5)tiqYE^?C^zXtM zHa&A8Jwf6<+_mMKjMlEa7yw+4b(qAqa~XEx;1QPk!gw@%9&ito%HRUr5SL4Sa=#1e zy-ve;j$QFW>@53SxcyGr=+-rufCHT6bogH&LJ>&yQ-F2+bV|*98F%+Cry*Cmv<`Sa zI=TAPt|HDAkOnYI+sOx+{Hn3#{lD)3H=a7YPBvT#njDNB(FpLUMGzbzOf97*VqKS8KRE?y+0Gye^PUBBN4p62S zSF$iJ{S%PI{BM9LJLekOFC-T4*~|?MMCPxG6vCf6Cyt*r=i=H%kjI8xk{Dn>$0EoiUvJ^a{+Q$L$k%f8e$&r%4K6u7u&(H##9vi(%)IazGI*E70ggR- zpEU9-JIHKwe82499Dv0!+fsq+KPL&7LOnWS{G7e%HymK`kTayW7JS;ZV*($W`(A8g z3|4&PEr8c~?1qw=qL>N*o78TajvMnBx?U>o&MAv+=VB~G@a&2@!2f8a0anr=09jG| zXr$oIE?NipPaTdjOGF3QL7s6K*fZi@ZeT0_`A_Rq&a2O%oxEQ-rFa9KTl@kn%h&~?jt9=vu z&VTb5l5+JCsHK#GEE{ZC+(1LFUB$77FYy0*X0=3h_185PoSZL`oWA*;djGoitA{u_ zjy$_~p`V38N}RfWr)wwo{#vV?oWJ?@{O%&)S4;?J5PqkdH#igFcl!U=?e@g~turn8 z8i6IZo4y7v&9w@02F(;E@jEZlf6s;kXM845q}pGZTyuD@!go<;IHO&7$n00Hf_yD~ zjWe!a!2yd;S5dzw-3NoA&dW&7FjmQ|dEif${d)fKVS@no56*jcD}R#({XJPeSdAqI z|E!1?20C8#`|+ope!>JAOd*w1m2alY@O-`dfnSAZjghfpBCgL;!*>g9kB4m0UmX3t zLciWT1K*)P0+FXa?oOwz&x%2s|NNeh6Jx2~E76VNRZ%P^Eim++ps+v zmL@H|TatU|83Cc8H Date: Mon, 25 Mar 2024 19:43:23 +0100 Subject: [PATCH 06/24] Document configurable build resources (#3782) * Document build resources * Add note * Add notes * Apply feedback from review --------- Co-authored-by: chadcarlson --- .../src/manage-resources/adjust-resources.md | 2 +- .../src/manage-resources/build-resources.md | 34 ++++++++++++++++++ .../src/manage-resources/resource-billing.md | 36 +++++++++++++++++++ .../src/manage-resources/resource-init.md | 2 +- .../platform/src/create-apps/hooks/_index.md | 1 + .../src/create-apps/multi-app/_index.md | 1 + sites/platform/src/create-apps/timezone.md | 1 + .../src/create-apps/troubleshoot-disks.md | 1 + .../src/create-apps/troubleshoot-mounts.md | 1 + sites/platform/src/create-apps/upgrading.md | 1 + sites/platform/src/create-apps/web/_index.md | 1 + sites/platform/src/create-apps/workers.md | 1 + 12 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 sites/friday/src/manage-resources/build-resources.md create mode 100644 sites/friday/src/manage-resources/resource-billing.md diff --git a/sites/friday/src/manage-resources/adjust-resources.md b/sites/friday/src/manage-resources/adjust-resources.md index 68335d7c09..756c811955 100644 --- a/sites/friday/src/manage-resources/adjust-resources.md +++ b/sites/friday/src/manage-resources/adjust-resources.md @@ -1,7 +1,7 @@ --- title: Resource configuration description: Configure CPU, RAM, and disk storage on a per-environment basis so your apps and services can run smoothly. -weight: -100 +weight: -200 keywords: - "resources" - "flexible resources" diff --git a/sites/friday/src/manage-resources/build-resources.md b/sites/friday/src/manage-resources/build-resources.md new file mode 100644 index 0000000000..c559712d24 --- /dev/null +++ b/sites/friday/src/manage-resources/build-resources.md @@ -0,0 +1,34 @@ +--- +title: Build resources +description: Find out how build resources work on {{% vendor/name %}}. +weight: -50 +--- + +When you push changes to your app through Git, your app is built then deployed. + +During the build phase, {{% vendor/name %}} collects your entire app configuration and creates a build image into a dedicated build container. +The duration of the build phase is directly linked to the amount of resources (CPU and RAM) allocated to that build container. + +As a user, you get the following fixed amount of resources **per project for free**: + +- 2.5 CPU hours +- 5 RAM hours + +If you consume more CPU or RAM, you get charged for them by the hour. +For more information on the costs incurred, see the [{{% vendor/name %}} pricing page](https://upsun.com/pricing/). + +You can adjust build resources through the {{% vendor/name %}} API to mitigate potential overuse, +or influence the duration of your builds. +To do so, run a command similar to the following: + +```bash {location="Terminal"} +{{% vendor/cli %}} project:curl settings -X PATCH -d '{"build_resources": {"cpu": 4.0, "memory": 2048}}' +``` + +{{% note %}} + +Before adding more CPU and RAM to shorten the duration of your builds, +check that your build process supports using such extra resources. +Otherwise, the duration of your builds will remain the same despite adding more resources. + +{{% /note %}} \ No newline at end of file diff --git a/sites/friday/src/manage-resources/resource-billing.md b/sites/friday/src/manage-resources/resource-billing.md new file mode 100644 index 0000000000..639fc28477 --- /dev/null +++ b/sites/friday/src/manage-resources/resource-billing.md @@ -0,0 +1,36 @@ +--- +title: Resource billing +description: Keep an eye on costs related to resource usage. +weight: -100 +keywords: + - "resources" + - "flexible resources" + - "CPU" + - "RAM" + - "disk storage" + - "costs" +--- + +If you have the [**Manage Billing** permission](/administration/users.md#organization-permissions) on your organization, +you can keep an eye on your costs related to resource usage.
+To do so, after you've set or updated resources on your project, +follow these steps in the [{{% vendor/name %}} Console](/administration/web/_index.md): + +1. Navigate to your organization. +2. Open the user menu (your name or profile picture). +3. Click **Billing**.
+ A monthly estimate of how much each project is expected to cost is displayed. +4. You can also view the costs related to every project you've been added to.
+ To do so, click **{{< icon more >}} More** next to the project, + and select **Project Billing**.
+ A monthly estimate of all the expected costs related to resource allocation on the project is displayed. + +{{< note >}} + +These estimates reflect the expected costs **for a full month** based on the way resources are allocated **at the time of viewing**. +They don't take into account the history of changes you may have made throughout the current month.
+Therefore, if you make changes to resource allocation during the month, your monthly invoice will differ from these estimates. + +{{< /note >}} + +For information on resource-related costs, see the [{{% vendor/name %}} pricing page](https://upsun.com/pricing/). \ No newline at end of file diff --git a/sites/friday/src/manage-resources/resource-init.md b/sites/friday/src/manage-resources/resource-init.md index abd786b7a5..70e0a712f6 100644 --- a/sites/friday/src/manage-resources/resource-init.md +++ b/sites/friday/src/manage-resources/resource-init.md @@ -1,7 +1,7 @@ --- title: Resource initialization description: Learn how resources are allocated by default upon first deployment, and how you can define a resource initialization strategy that better fits your needs. -weight: -200 +weight: -300 keywords: - "resources" - "flexible resources" diff --git a/sites/platform/src/create-apps/hooks/_index.md b/sites/platform/src/create-apps/hooks/_index.md index 28b9d9409d..fecf1f895d 100644 --- a/sites/platform/src/create-apps/hooks/_index.md +++ b/sites/platform/src/create-apps/hooks/_index.md @@ -2,6 +2,7 @@ title: Use build and deploy hooks description: Add custom scripts at different stages in the build and deploy process. layout: single +weight: 13 --- As your app goes through the [build and deploy process](/learn/overview/build-deploy.md), diff --git a/sites/platform/src/create-apps/multi-app/_index.md b/sites/platform/src/create-apps/multi-app/_index.md index 78ade6159d..f8e673c246 100644 --- a/sites/platform/src/create-apps/multi-app/_index.md +++ b/sites/platform/src/create-apps/multi-app/_index.md @@ -6,6 +6,7 @@ banner: title: Feature availability type: tiered-feature body: This page applies to Grid and {{% names/dedicated-gen-3 %}} projects. To ensure you have enough resources to support multiple apps, you need at least a [{{< partial "plans/multiapp-plan-name" >}} plan](/administration/pricing/_index.md#multiple-apps-in-a-single-project). To set up multiple apps on {{% names/dedicated-gen-2 %}} environments, [contact Sales](https://platform.sh/contact/). +weight: 8 --- {{% multi-app-intro %}} diff --git a/sites/platform/src/create-apps/timezone.md b/sites/platform/src/create-apps/timezone.md index 56a955a716..2d70565fdd 100644 --- a/sites/platform/src/create-apps/timezone.md +++ b/sites/platform/src/create-apps/timezone.md @@ -1,6 +1,7 @@ --- title: "Timezones" description: Learn more about the different timezones on {{% vendor/name %}} and when you can customize them. +weight: 9 --- On {{% vendor/name %}}, there are several timezones you might want to keep in mind. diff --git a/sites/platform/src/create-apps/troubleshoot-disks.md b/sites/platform/src/create-apps/troubleshoot-disks.md index f1b8ea40b7..cb438016a5 100644 --- a/sites/platform/src/create-apps/troubleshoot-disks.md +++ b/sites/platform/src/create-apps/troubleshoot-disks.md @@ -1,5 +1,6 @@ --- title: "Troubleshoot disks" +weight: 10 --- {{% troubleshoot %}} diff --git a/sites/platform/src/create-apps/troubleshoot-mounts.md b/sites/platform/src/create-apps/troubleshoot-mounts.md index 30ddee39bb..384d24d269 100644 --- a/sites/platform/src/create-apps/troubleshoot-mounts.md +++ b/sites/platform/src/create-apps/troubleshoot-mounts.md @@ -1,5 +1,6 @@ --- title: "Troubleshoot mounts" +weight: 11 --- {{% troubleshoot %}} diff --git a/sites/platform/src/create-apps/upgrading.md b/sites/platform/src/create-apps/upgrading.md index c54acafd6f..52102c58b3 100644 --- a/sites/platform/src/create-apps/upgrading.md +++ b/sites/platform/src/create-apps/upgrading.md @@ -1,5 +1,6 @@ --- title: "Upgrading" +weight: 12 --- ## Changes in version 2022.02 diff --git a/sites/platform/src/create-apps/web/_index.md b/sites/platform/src/create-apps/web/_index.md index cd141d0a93..a36e6ec076 100644 --- a/sites/platform/src/create-apps/web/_index.md +++ b/sites/platform/src/create-apps/web/_index.md @@ -1,5 +1,6 @@ --- title: Configure what's served +weight: 7 --- How you should configure your web server depends a lot on what you want to serve. diff --git a/sites/platform/src/create-apps/workers.md b/sites/platform/src/create-apps/workers.md index 6c20760c56..26a84ae99f 100644 --- a/sites/platform/src/create-apps/workers.md +++ b/sites/platform/src/create-apps/workers.md @@ -1,6 +1,7 @@ --- title: "Work with workers" description: Interact with your worker instances to handle background tasks for your apps. +weight: 15 --- Workers are instances of your code that aren't open to connections from other apps or services or the outside world. From e65881dbf1ee9a617b5d861355736d546085e557 Mon Sep 17 00:00:00 2001 From: Chad Carlson Date: Mon, 25 Mar 2024 15:04:35 -0400 Subject: [PATCH 07/24] Update secondary vendor site name (#3841) * Rename secondary vendor site to upsun. * Not found error + timeout. * Update scope. * again. --- .../workflows/generate-cli-commands-page.yaml | 2 +- .platform/applications.yaml | 10 ++++---- .platform/routes.yaml | 4 +-- README.md | 14 +++++----- search/index_external_sites.sh | 6 ++--- search/main.py | 4 +-- search/post_deploy.sh | 24 +++++++++--------- sites/{friday => upsun}/.eslintrc.yaml | 0 sites/{friday => upsun}/.gitignore | 0 sites/{friday => upsun}/.htmltest.yml | 0 sites/{friday => upsun}/.hugo_build.lock | 0 sites/{friday => upsun}/ABOUT.md | 0 sites/{friday => upsun}/build_docs.sh | 2 +- .../config/_default/config.yaml | 0 .../config/_default/params.yaml | 8 +++--- sites/{friday => upsun}/deploy.sh | 2 +- sites/{friday => upsun}/index.js | 0 .../layouts/shortcodes/community-buttons.html | 0 .../layouts/shortcodes/home.html | 0 sites/{friday => upsun}/local_docs.sh | 0 sites/{friday => upsun}/marker.sh | 0 sites/{friday => upsun}/package-lock.json | 0 sites/{friday => upsun}/package.json | 0 sites/{friday => upsun}/src/_index.md | 0 .../src/add-services/_index.md | 0 .../src/add-services/clickhouse.md | 0 .../src/add-services/elasticsearch.md | 0 .../src/add-services/headless-chrome.md | 0 .../src/add-services/influxdb.md | 0 .../src/add-services/kafka.md | 0 .../src/add-services/memcached.md | 0 .../src/add-services/mongodb.md | 0 .../src/add-services/mysql/_index.md | 0 .../add-services/mysql/mysql-replication.md | 0 .../src/add-services/mysql/troubleshoot.md | 0 .../src/add-services/network-storage.md | 0 .../src/add-services/opensearch.md | 0 .../src/add-services/postgresql.md | 0 .../src/add-services/rabbitmq.md | 0 .../src/add-services/redis.md | 0 .../src/add-services/solr.md | 0 .../src/add-services/varnish.md | 0 .../src/add-services/vault.md | 0 .../src/administration/_index.md | 0 .../src/administration/billing/_index.md | 0 .../administration/billing/billing-admin.md | 0 .../administration/billing/monitor-billing.md | 0 .../src/administration/cli/_index.md | 0 .../src/administration/cli/api-tokens.md | 0 .../src/administration/cli/reference.md | 0 .../src/administration/organizations.md | 0 .../src/administration/pricing.md | 0 .../src/administration/servers.md | 0 .../src/administration/teams.md | 0 .../src/administration/users.md | 0 .../src/administration/web/_index.md | 0 .../web/configure-environment.md | 0 .../administration/web/configure-project.md | 0 .../src/administration/web/mfa.md | 0 .../{friday => upsun}/src/changelog/_index.md | 0 .../src/create-apps/_index.md | 0 .../src/create-apps/app-reference.md | 0 .../src/create-apps/hooks/_index.md | 0 .../hooks/hooks-and-dependencies.md | 0 .../src/create-apps/hooks/hooks-comparison.md | 0 .../hooks/vary-hooks-by-environment.md | 0 .../src/create-apps/multi-app/_index.md | 0 .../multi-app/project-structure.md | 0 .../create-apps/multi-app/relationships.md | 0 .../src/create-apps/multi-app/routes.md | 0 .../src/create-apps/runtime-operations.md | 0 .../src/create-apps/source-operations.md | 0 .../src/create-apps/timezone.md | 0 .../src/create-apps/troubleshoot-disks.md | 0 .../src/create-apps/troubleshoot-mounts.md | 0 .../src/create-apps/web/_index.md | 0 .../src/create-apps/web/custom-headers.md | 0 .../src/create-apps/web/php-basic.md | 0 .../src/create-apps/web/rewrite-requests.md | 0 .../web/serve-different-directories.md | 0 .../src/create-apps/web/static.md | 0 .../src/create-apps/workers.md | 0 .../src/define-routes/_index.md | 0 .../src/define-routes/cache.md | 0 .../src/define-routes/https.md | 0 .../src/define-routes/proxy.md | 0 .../src/define-routes/redirects.md | 0 .../src/define-routes/ssi.md | 0 .../src/development/_index.md | 0 .../src/development/access-site.md | 0 .../src/development/email.md | 0 .../src/development/file-transfer.md | 0 .../src/development/headers.md | 0 .../src/development/local/_index.md | 0 .../src/development/local/ddev.md | 0 .../src/development/local/tethered.md | 0 .../src/development/local/untethered.md | 0 .../src/development/private-repository.md | 0 .../src/development/regions.md | 0 .../src/development/sanitize-db/_index.md | 0 .../src/development/sanitize-db/mariadb.md | 0 .../sanitize-db/postgresql-symfony.md | 0 .../src/development/sanitize-db/postgresql.md | 0 .../src/development/ssh/_index.md | 0 .../src/development/ssh/ssh-keys.md | 0 .../src/development/ssh/troubleshoot-ssh.md | 0 .../src/development/submodules.md | 0 .../src/development/troubleshoot.md | 0 .../src/development/variables/_index.md | 0 .../development/variables/set-variables.md | 0 .../development/variables/use-variables.md | 0 sites/{friday => upsun}/src/domains/_index.md | 0 .../src/domains/cdn/_index.md | 0 .../src/domains/cdn/cloudflare.md | 0 .../src/domains/cdn/fastly.md | 0 .../src/domains/steps/_index.md | 0 .../custom-domains-preview-environments.md | 0 .../src/domains/steps/dns.md | 0 .../src/domains/steps/subdomains.md | 0 .../src/domains/steps/tls.md | 0 .../src/domains/troubleshoot.md | 0 .../src/environments/_index.md | 0 .../src/environments/backup.md | 0 .../src/environments/cancel-activity.md | 0 .../src/environments/change-parent.md | 0 .../environments/deactivate-environment.md | 0 .../src/environments/default-environment.md | 0 .../src/environments/http-access-control.md | 0 .../src/environments/restore.md | 0 .../environments/search-engine-visibility.md | 0 .../{friday => upsun}/src/feedback/_index.md | 0 .../src/feedback/report.html | 0 .../src/get-started/_index.md | 0 .../src/get-started/here/_index.md | 0 .../src/get-started/here/configure/_index.md | 0 .../src/get-started/here/configure/nodejs.md | 0 .../src/get-started/here/configure/php.md | 0 .../src/get-started/here/configure/python.md | 0 .../src/get-started/here/create-project.md | 0 .../src/get-started/here/local/_index.md | 0 .../src/get-started/here/local/tethered.md | 0 .../src/get-started/here/make-changes.md | 0 .../src/get-started/here/set-resources.md | 0 .../src/get-started/here/setup.md | 0 .../src/get-started/here/support.md | 0 .../src/get-started/here/third-party.md | 0 .../src/get-started/stacks/_index.md | 0 .../src/get-started/stacks/django.md | 0 .../src/get-started/stacks/express.md | 0 .../src/get-started/stacks/flask.md | 0 .../src/get-started/stacks/laravel.md | 0 .../src/get-started/stacks/nextjs.md | 0 .../src/get-started/stacks/strapi.md | 0 .../src/get-started/stacks/symfony/_index.md | 0 .../get-started/stacks/symfony/blackfire.md | 0 .../src/get-started/stacks/symfony/crons.md | 0 .../stacks/symfony/environment-variables.md | 0 .../src/get-started/stacks/symfony/faq.md | 0 .../get-started/stacks/symfony/get-started.md | 0 .../get-started/stacks/symfony/integration.md | 0 .../src/get-started/stacks/symfony/local.md | 0 .../src/get-started/stacks/symfony/workers.md | 0 .../{friday => upsun}/src/glossary/_index.md | 0 .../src/increase-observability/_index.md | 0 .../application-metrics/_index.md | 0 .../application-metrics/blackfire.md | 0 .../application-metrics/cont-prof.md | 0 .../application-metrics/go.md | 0 .../application-metrics/nodejs.md | 0 .../application-metrics/understanding.md | 0 .../src/increase-observability/logs/_index.md | 0 .../logs/access-logs.md | 0 .../logs/forward-logs.md | 0 .../increase-observability/metrics/_index.md | 0 .../metrics/http-metrics.md | 0 .../metrics/understand-metrics.md | 0 .../src/integrations/_index.md | 0 .../src/integrations/activity/_index.md | 0 .../src/integrations/activity/discord.md | 0 .../src/integrations/activity/reference.md | 0 .../src/integrations/activity/slack.md | 0 .../src/integrations/activity/utility.md | 0 .../src/integrations/activity/webhooks.md | 0 .../src/integrations/notifications.md | 0 .../src/integrations/overview.md | 0 .../src/integrations/source/_index.md | 0 .../src/integrations/source/bitbucket.md | 0 .../src/integrations/source/github.md | 0 .../src/integrations/source/gitlab.md | 0 .../src/integrations/source/troubleshoot.md | 0 .../{friday => upsun}/src/languages/_index.md | 0 .../{friday => upsun}/src/languages/dotnet.md | 0 .../{friday => upsun}/src/languages/elixir.md | 0 sites/{friday => upsun}/src/languages/go.md | 0 .../src/languages/java/_index.md | 0 .../src/languages/java/migration.md | 0 .../src/languages/java/tuning.md | 0 sites/{friday => upsun}/src/languages/lisp.md | 0 .../src/languages/nodejs/_index.md | 0 .../src/languages/nodejs/debug.md | 0 .../src/languages/nodejs/node-version.md | 0 .../src/languages/php/_index.md | 0 .../src/languages/php/composer-auth.md | 0 .../src/languages/php/extensions.md | 0 .../src/languages/php/fpm.md | 0 .../src/languages/php/redis.md | 0 .../src/languages/php/swoole.md | 0 .../src/languages/php/troubleshoot.md | 0 .../src/languages/php/tuning.md | 0 .../src/languages/php/xdebug.md | 0 .../src/languages/python/_index.md | 0 .../src/languages/python/dependencies.md | 0 .../src/languages/python/python-version.md | 0 .../src/languages/python/server.md | 0 sites/{friday => upsun}/src/languages/ruby.md | 0 sites/{friday => upsun}/src/languages/rust.md | 0 sites/{friday => upsun}/src/learn/_index.md | 0 .../src/learn/bestpractices/_index.md | 0 .../learn/bestpractices/clean-repository.md | 0 .../src/learn/bestpractices/http-caching.md | 0 .../src/learn/bestpractices/oneormany.md | 0 .../src/learn/overview/_index.md | 0 .../src/learn/overview/build-deploy.md | 0 .../src/learn/overview/get-support.md | 0 .../src/learn/overview/philosophy.md | 0 .../src/learn/overview/structure.md | 0 .../src/learn/overview/yaml/_index.md | 0 .../learn/overview/yaml/platform-yaml-tags.md | 0 .../src/learn/overview/yaml/what-is-yaml.md | 0 .../src/learn/overview/yaml/yaml-structure.md | 0 .../src/learn/tutorials/_index.md | 0 .../src/learn/tutorials/dependency-updates.md | 0 .../src/learn/tutorials/exporting.md | 0 .../src/learn/tutorials/migrating/_index.md | 0 .../src/learn/tutorials/migrating/from-psh.md | 0 .../tutorials/restrict-service-access.md | 0 .../src/manage-resources/_index.md | 0 .../src/manage-resources/adjust-resources.md | 0 .../src/manage-resources/build-resources.md | 0 .../src/manage-resources/resource-billing.md | 0 .../src/manage-resources/resource-init.md | 0 .../{friday => upsun}/src/projects/_index.md | 0 .../src/projects/change-project-timezone.md | 0 .../src/projects/delete-project.md | 0 .../src/projects/region-migration.md | 0 .../{friday => upsun}/src/registry/_index.md | 0 .../src/registry/images/.gitignore | 0 sites/{friday => upsun}/src/search.md | 0 .../{friday => upsun}/src/security/_index.md | 0 .../{friday => upsun}/src/security/backups.md | 0 .../src/security/data-retention.md | 0 .../src/security/project-isolation.md | 0 sites/{friday => upsun}/src/security/waf.md | 0 .../static/files/fetch/.gitignore | 0 .../files/fetch/examples/golang/memcached | 0 .../files/fetch/examples/golang/mongodb | 0 .../static/files/fetch/examples/golang/mysql | 0 .../files/fetch/examples/golang/postgresql | 0 .../files/fetch/examples/golang/rabbitmq | 0 .../static/files/fetch/examples/golang/solr | 0 .../files/fetch/examples/java/elasticsearch | 0 .../static/files/fetch/examples/java/kafka | 0 .../files/fetch/examples/java/memcached | 0 .../static/files/fetch/examples/java/mongodb | 0 .../static/files/fetch/examples/java/mysql | 0 .../files/fetch/examples/java/postgresql | 0 .../static/files/fetch/examples/java/rabbitmq | 0 .../static/files/fetch/examples/java/redis | 0 .../static/files/fetch/examples/java/solr | 0 .../files/fetch/examples/nodejs/elasticsearch | 0 .../files/fetch/examples/nodejs/memcached | 0 .../files/fetch/examples/nodejs/mongodb | 0 .../static/files/fetch/examples/nodejs/mysql | 0 .../files/fetch/examples/nodejs/postgresql | 0 .../static/files/fetch/examples/nodejs/redis | 0 .../static/files/fetch/examples/nodejs/solr | 0 .../files/fetch/examples/php/elasticsearch | 0 .../static/files/fetch/examples/php/influxdb | 0 .../static/files/fetch/examples/php/memcached | 0 .../static/files/fetch/examples/php/mongodb | 0 .../static/files/fetch/examples/php/mysql | 0 .../files/fetch/examples/php/postgresql | 0 .../static/files/fetch/examples/php/rabbitmq | 0 .../static/files/fetch/examples/php/redis | 0 .../static/files/fetch/examples/php/solr | 0 .../files/fetch/examples/python/elasticsearch | 0 .../static/files/fetch/examples/python/kafka | 0 .../files/fetch/examples/python/memcached | 0 .../files/fetch/examples/python/mongodb | 0 .../static/files/fetch/examples/python/mysql | 0 .../files/fetch/examples/python/postgresql | 0 .../files/fetch/examples/python/rabbitmq | 0 .../static/files/fetch/examples/python/redis | 0 .../static/files/fetch/examples/python/solr | 0 .../examples/relationships/elasticsearch | 0 .../examples/relationships/headlesschrome | 0 .../fetch/examples/relationships/influxdb | 0 .../files/fetch/examples/relationships/kafka | 0 .../fetch/examples/relationships/memcached | 0 .../fetch/examples/relationships/mongodb | 0 .../files/fetch/examples/relationships/mysql | 0 .../fetch/examples/relationships/opensearch | 0 .../fetch/examples/relationships/oraclemysql | 0 .../fetch/examples/relationships/postgresql | 0 .../fetch/examples/relationships/rabbitmq | 0 .../files/fetch/examples/relationships/redis | 0 .../files/fetch/examples/relationships/solr | 0 .../fetch/examples/relationships/vault-kms | 0 .../images/billing/billing-alert-button.png | Bin .../static/images/billing/invoices-tab.png | Bin .../images/billing/organization-billing.png | Bin .../static/images/billing/project-billing.png | Bin .../static/images/console/create-project.png | Bin .../static/images/console/first-fail.png | Bin .../images/console/settings-access-users.png | Bin .../images/console/settings-general.png | Bin .../console/upsun-console-main-view.png | Bin .../static/images/favicon.ico | Bin .../flexible-resources/apps-services-tree.png | Bin .../check-container-profile.png | Bin .../configure-button-project-card.png | Bin .../configure-flexible-resources.png | Bin .../static/images/guides/laravel-ify.png | Bin .../images/guides/resources-cli-picker.gif | Bin .../{friday => upsun}/static/images/logo.svg | 0 .../static/images/logo_vertical.svg | 0 .../observability/cont-prof-color-code.png | Bin .../images/observability/filtering-upsun.png | Bin .../observability/flame-graph-clicked.png | Bin .../observability/flame-graph-hover.png | Bin .../images/observability/flame-graph.png | Bin .../observability/metrics/mysql-container.png | Bin .../observability/metrics/redis-container.png | Bin .../metrics/service-container-minimized.png | Bin .../images/observability/sandwich-view.png | Bin .../images/observability/table-view.png | Bin .../static/scripts/xss/.babelrc | 0 .../static/scripts/xss/.eslintrc.json | 0 .../static/scripts/xss/.gitignore | 0 .../static/scripts/xss/.gitkeep | 0 .../static/scripts/xss/README.md | 0 .../static/scripts/xss/dist/.gitkeep | 0 .../static/scripts/xss/dist/config/.gitkeep | 0 .../static/scripts/xss/package.json | 0 .../static/scripts/xss/src/App.js | 0 .../scripts/xss/src/components/Suggestions.js | 0 .../xss/src/components/SuggestionsPrimary.js | 0 .../scripts/xss/src/containers/Search.js | 0 .../static/scripts/xss/src/index.js | 0 .../static/scripts/xss/webpack.common.js | 0 .../static/scripts/xss/webpack.dev.js | 0 .../static/scripts/xss/webpack.prod.js | 0 sites/{friday => upsun}/utils/common.mjs | 0 .../utils/fetch-examples.mjs | 0 .../utils/fetchTemplates.mjs | 0 .../utils/updateExampleConfigFiles.js | 0 .../layouts/shortcodes/version/specific.html | 2 +- 357 files changed, 39 insertions(+), 39 deletions(-) rename sites/{friday => upsun}/.eslintrc.yaml (100%) rename sites/{friday => upsun}/.gitignore (100%) rename sites/{friday => upsun}/.htmltest.yml (100%) rename sites/{friday => upsun}/.hugo_build.lock (100%) rename sites/{friday => upsun}/ABOUT.md (100%) rename sites/{friday => upsun}/build_docs.sh (98%) rename sites/{friday => upsun}/config/_default/config.yaml (100%) rename sites/{friday => upsun}/config/_default/params.yaml (96%) rename sites/{friday => upsun}/deploy.sh (98%) rename sites/{friday => upsun}/index.js (100%) rename sites/{friday => upsun}/layouts/shortcodes/community-buttons.html (100%) rename sites/{friday => upsun}/layouts/shortcodes/home.html (100%) rename sites/{friday => upsun}/local_docs.sh (100%) rename sites/{friday => upsun}/marker.sh (100%) rename sites/{friday => upsun}/package-lock.json (100%) rename sites/{friday => upsun}/package.json (100%) rename sites/{friday => upsun}/src/_index.md (100%) rename sites/{friday => upsun}/src/add-services/_index.md (100%) rename sites/{friday => upsun}/src/add-services/clickhouse.md (100%) rename sites/{friday => upsun}/src/add-services/elasticsearch.md (100%) rename sites/{friday => upsun}/src/add-services/headless-chrome.md (100%) rename sites/{friday => upsun}/src/add-services/influxdb.md (100%) rename sites/{friday => upsun}/src/add-services/kafka.md (100%) rename sites/{friday => upsun}/src/add-services/memcached.md (100%) rename sites/{friday => upsun}/src/add-services/mongodb.md (100%) rename sites/{friday => upsun}/src/add-services/mysql/_index.md (100%) rename sites/{friday => upsun}/src/add-services/mysql/mysql-replication.md (100%) rename sites/{friday => upsun}/src/add-services/mysql/troubleshoot.md (100%) rename sites/{friday => upsun}/src/add-services/network-storage.md (100%) rename sites/{friday => upsun}/src/add-services/opensearch.md (100%) rename sites/{friday => upsun}/src/add-services/postgresql.md (100%) rename sites/{friday => upsun}/src/add-services/rabbitmq.md (100%) rename sites/{friday => upsun}/src/add-services/redis.md (100%) rename sites/{friday => upsun}/src/add-services/solr.md (100%) rename sites/{friday => upsun}/src/add-services/varnish.md (100%) rename sites/{friday => upsun}/src/add-services/vault.md (100%) rename sites/{friday => upsun}/src/administration/_index.md (100%) rename sites/{friday => upsun}/src/administration/billing/_index.md (100%) rename sites/{friday => upsun}/src/administration/billing/billing-admin.md (100%) rename sites/{friday => upsun}/src/administration/billing/monitor-billing.md (100%) rename sites/{friday => upsun}/src/administration/cli/_index.md (100%) rename sites/{friday => upsun}/src/administration/cli/api-tokens.md (100%) rename sites/{friday => upsun}/src/administration/cli/reference.md (100%) rename sites/{friday => upsun}/src/administration/organizations.md (100%) rename sites/{friday => upsun}/src/administration/pricing.md (100%) rename sites/{friday => upsun}/src/administration/servers.md (100%) rename sites/{friday => upsun}/src/administration/teams.md (100%) rename sites/{friday => upsun}/src/administration/users.md (100%) rename sites/{friday => upsun}/src/administration/web/_index.md (100%) rename sites/{friday => upsun}/src/administration/web/configure-environment.md (100%) rename sites/{friday => upsun}/src/administration/web/configure-project.md (100%) rename sites/{friday => upsun}/src/administration/web/mfa.md (100%) rename sites/{friday => upsun}/src/changelog/_index.md (100%) rename sites/{friday => upsun}/src/create-apps/_index.md (100%) rename sites/{friday => upsun}/src/create-apps/app-reference.md (100%) rename sites/{friday => upsun}/src/create-apps/hooks/_index.md (100%) rename sites/{friday => upsun}/src/create-apps/hooks/hooks-and-dependencies.md (100%) rename sites/{friday => upsun}/src/create-apps/hooks/hooks-comparison.md (100%) rename sites/{friday => upsun}/src/create-apps/hooks/vary-hooks-by-environment.md (100%) rename sites/{friday => upsun}/src/create-apps/multi-app/_index.md (100%) rename sites/{friday => upsun}/src/create-apps/multi-app/project-structure.md (100%) rename sites/{friday => upsun}/src/create-apps/multi-app/relationships.md (100%) rename sites/{friday => upsun}/src/create-apps/multi-app/routes.md (100%) rename sites/{friday => upsun}/src/create-apps/runtime-operations.md (100%) rename sites/{friday => upsun}/src/create-apps/source-operations.md (100%) rename sites/{friday => upsun}/src/create-apps/timezone.md (100%) rename sites/{friday => upsun}/src/create-apps/troubleshoot-disks.md (100%) rename sites/{friday => upsun}/src/create-apps/troubleshoot-mounts.md (100%) rename sites/{friday => upsun}/src/create-apps/web/_index.md (100%) rename sites/{friday => upsun}/src/create-apps/web/custom-headers.md (100%) rename sites/{friday => upsun}/src/create-apps/web/php-basic.md (100%) rename sites/{friday => upsun}/src/create-apps/web/rewrite-requests.md (100%) rename sites/{friday => upsun}/src/create-apps/web/serve-different-directories.md (100%) rename sites/{friday => upsun}/src/create-apps/web/static.md (100%) rename sites/{friday => upsun}/src/create-apps/workers.md (100%) rename sites/{friday => upsun}/src/define-routes/_index.md (100%) rename sites/{friday => upsun}/src/define-routes/cache.md (100%) rename sites/{friday => upsun}/src/define-routes/https.md (100%) rename sites/{friday => upsun}/src/define-routes/proxy.md (100%) rename sites/{friday => upsun}/src/define-routes/redirects.md (100%) rename sites/{friday => upsun}/src/define-routes/ssi.md (100%) rename sites/{friday => upsun}/src/development/_index.md (100%) rename sites/{friday => upsun}/src/development/access-site.md (100%) rename sites/{friday => upsun}/src/development/email.md (100%) rename sites/{friday => upsun}/src/development/file-transfer.md (100%) rename sites/{friday => upsun}/src/development/headers.md (100%) rename sites/{friday => upsun}/src/development/local/_index.md (100%) rename sites/{friday => upsun}/src/development/local/ddev.md (100%) rename sites/{friday => upsun}/src/development/local/tethered.md (100%) rename sites/{friday => upsun}/src/development/local/untethered.md (100%) rename sites/{friday => upsun}/src/development/private-repository.md (100%) rename sites/{friday => upsun}/src/development/regions.md (100%) rename sites/{friday => upsun}/src/development/sanitize-db/_index.md (100%) rename sites/{friday => upsun}/src/development/sanitize-db/mariadb.md (100%) rename sites/{friday => upsun}/src/development/sanitize-db/postgresql-symfony.md (100%) rename sites/{friday => upsun}/src/development/sanitize-db/postgresql.md (100%) rename sites/{friday => upsun}/src/development/ssh/_index.md (100%) rename sites/{friday => upsun}/src/development/ssh/ssh-keys.md (100%) rename sites/{friday => upsun}/src/development/ssh/troubleshoot-ssh.md (100%) rename sites/{friday => upsun}/src/development/submodules.md (100%) rename sites/{friday => upsun}/src/development/troubleshoot.md (100%) rename sites/{friday => upsun}/src/development/variables/_index.md (100%) rename sites/{friday => upsun}/src/development/variables/set-variables.md (100%) rename sites/{friday => upsun}/src/development/variables/use-variables.md (100%) rename sites/{friday => upsun}/src/domains/_index.md (100%) rename sites/{friday => upsun}/src/domains/cdn/_index.md (100%) rename sites/{friday => upsun}/src/domains/cdn/cloudflare.md (100%) rename sites/{friday => upsun}/src/domains/cdn/fastly.md (100%) rename sites/{friday => upsun}/src/domains/steps/_index.md (100%) rename sites/{friday => upsun}/src/domains/steps/custom-domains-preview-environments.md (100%) rename sites/{friday => upsun}/src/domains/steps/dns.md (100%) rename sites/{friday => upsun}/src/domains/steps/subdomains.md (100%) rename sites/{friday => upsun}/src/domains/steps/tls.md (100%) rename sites/{friday => upsun}/src/domains/troubleshoot.md (100%) rename sites/{friday => upsun}/src/environments/_index.md (100%) rename sites/{friday => upsun}/src/environments/backup.md (100%) rename sites/{friday => upsun}/src/environments/cancel-activity.md (100%) rename sites/{friday => upsun}/src/environments/change-parent.md (100%) rename sites/{friday => upsun}/src/environments/deactivate-environment.md (100%) rename sites/{friday => upsun}/src/environments/default-environment.md (100%) rename sites/{friday => upsun}/src/environments/http-access-control.md (100%) rename sites/{friday => upsun}/src/environments/restore.md (100%) rename sites/{friday => upsun}/src/environments/search-engine-visibility.md (100%) rename sites/{friday => upsun}/src/feedback/_index.md (100%) rename sites/{friday => upsun}/src/feedback/report.html (100%) rename sites/{friday => upsun}/src/get-started/_index.md (100%) rename sites/{friday => upsun}/src/get-started/here/_index.md (100%) rename sites/{friday => upsun}/src/get-started/here/configure/_index.md (100%) rename sites/{friday => upsun}/src/get-started/here/configure/nodejs.md (100%) rename sites/{friday => upsun}/src/get-started/here/configure/php.md (100%) rename sites/{friday => upsun}/src/get-started/here/configure/python.md (100%) rename sites/{friday => upsun}/src/get-started/here/create-project.md (100%) rename sites/{friday => upsun}/src/get-started/here/local/_index.md (100%) rename sites/{friday => upsun}/src/get-started/here/local/tethered.md (100%) rename sites/{friday => upsun}/src/get-started/here/make-changes.md (100%) rename sites/{friday => upsun}/src/get-started/here/set-resources.md (100%) rename sites/{friday => upsun}/src/get-started/here/setup.md (100%) rename sites/{friday => upsun}/src/get-started/here/support.md (100%) rename sites/{friday => upsun}/src/get-started/here/third-party.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/_index.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/django.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/express.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/flask.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/laravel.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/nextjs.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/strapi.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/symfony/_index.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/symfony/blackfire.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/symfony/crons.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/symfony/environment-variables.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/symfony/faq.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/symfony/get-started.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/symfony/integration.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/symfony/local.md (100%) rename sites/{friday => upsun}/src/get-started/stacks/symfony/workers.md (100%) rename sites/{friday => upsun}/src/glossary/_index.md (100%) rename sites/{friday => upsun}/src/increase-observability/_index.md (100%) rename sites/{friday => upsun}/src/increase-observability/application-metrics/_index.md (100%) rename sites/{friday => upsun}/src/increase-observability/application-metrics/blackfire.md (100%) rename sites/{friday => upsun}/src/increase-observability/application-metrics/cont-prof.md (100%) rename sites/{friday => upsun}/src/increase-observability/application-metrics/go.md (100%) rename sites/{friday => upsun}/src/increase-observability/application-metrics/nodejs.md (100%) rename sites/{friday => upsun}/src/increase-observability/application-metrics/understanding.md (100%) rename sites/{friday => upsun}/src/increase-observability/logs/_index.md (100%) rename sites/{friday => upsun}/src/increase-observability/logs/access-logs.md (100%) rename sites/{friday => upsun}/src/increase-observability/logs/forward-logs.md (100%) rename sites/{friday => upsun}/src/increase-observability/metrics/_index.md (100%) rename sites/{friday => upsun}/src/increase-observability/metrics/http-metrics.md (100%) rename sites/{friday => upsun}/src/increase-observability/metrics/understand-metrics.md (100%) rename sites/{friday => upsun}/src/integrations/_index.md (100%) rename sites/{friday => upsun}/src/integrations/activity/_index.md (100%) rename sites/{friday => upsun}/src/integrations/activity/discord.md (100%) rename sites/{friday => upsun}/src/integrations/activity/reference.md (100%) rename sites/{friday => upsun}/src/integrations/activity/slack.md (100%) rename sites/{friday => upsun}/src/integrations/activity/utility.md (100%) rename sites/{friday => upsun}/src/integrations/activity/webhooks.md (100%) rename sites/{friday => upsun}/src/integrations/notifications.md (100%) rename sites/{friday => upsun}/src/integrations/overview.md (100%) rename sites/{friday => upsun}/src/integrations/source/_index.md (100%) rename sites/{friday => upsun}/src/integrations/source/bitbucket.md (100%) rename sites/{friday => upsun}/src/integrations/source/github.md (100%) rename sites/{friday => upsun}/src/integrations/source/gitlab.md (100%) rename sites/{friday => upsun}/src/integrations/source/troubleshoot.md (100%) rename sites/{friday => upsun}/src/languages/_index.md (100%) rename sites/{friday => upsun}/src/languages/dotnet.md (100%) rename sites/{friday => upsun}/src/languages/elixir.md (100%) rename sites/{friday => upsun}/src/languages/go.md (100%) rename sites/{friday => upsun}/src/languages/java/_index.md (100%) rename sites/{friday => upsun}/src/languages/java/migration.md (100%) rename sites/{friday => upsun}/src/languages/java/tuning.md (100%) rename sites/{friday => upsun}/src/languages/lisp.md (100%) rename sites/{friday => upsun}/src/languages/nodejs/_index.md (100%) rename sites/{friday => upsun}/src/languages/nodejs/debug.md (100%) rename sites/{friday => upsun}/src/languages/nodejs/node-version.md (100%) rename sites/{friday => upsun}/src/languages/php/_index.md (100%) rename sites/{friday => upsun}/src/languages/php/composer-auth.md (100%) rename sites/{friday => upsun}/src/languages/php/extensions.md (100%) rename sites/{friday => upsun}/src/languages/php/fpm.md (100%) rename sites/{friday => upsun}/src/languages/php/redis.md (100%) rename sites/{friday => upsun}/src/languages/php/swoole.md (100%) rename sites/{friday => upsun}/src/languages/php/troubleshoot.md (100%) rename sites/{friday => upsun}/src/languages/php/tuning.md (100%) rename sites/{friday => upsun}/src/languages/php/xdebug.md (100%) rename sites/{friday => upsun}/src/languages/python/_index.md (100%) rename sites/{friday => upsun}/src/languages/python/dependencies.md (100%) rename sites/{friday => upsun}/src/languages/python/python-version.md (100%) rename sites/{friday => upsun}/src/languages/python/server.md (100%) rename sites/{friday => upsun}/src/languages/ruby.md (100%) rename sites/{friday => upsun}/src/languages/rust.md (100%) rename sites/{friday => upsun}/src/learn/_index.md (100%) rename sites/{friday => upsun}/src/learn/bestpractices/_index.md (100%) rename sites/{friday => upsun}/src/learn/bestpractices/clean-repository.md (100%) rename sites/{friday => upsun}/src/learn/bestpractices/http-caching.md (100%) rename sites/{friday => upsun}/src/learn/bestpractices/oneormany.md (100%) rename sites/{friday => upsun}/src/learn/overview/_index.md (100%) rename sites/{friday => upsun}/src/learn/overview/build-deploy.md (100%) rename sites/{friday => upsun}/src/learn/overview/get-support.md (100%) rename sites/{friday => upsun}/src/learn/overview/philosophy.md (100%) rename sites/{friday => upsun}/src/learn/overview/structure.md (100%) rename sites/{friday => upsun}/src/learn/overview/yaml/_index.md (100%) rename sites/{friday => upsun}/src/learn/overview/yaml/platform-yaml-tags.md (100%) rename sites/{friday => upsun}/src/learn/overview/yaml/what-is-yaml.md (100%) rename sites/{friday => upsun}/src/learn/overview/yaml/yaml-structure.md (100%) rename sites/{friday => upsun}/src/learn/tutorials/_index.md (100%) rename sites/{friday => upsun}/src/learn/tutorials/dependency-updates.md (100%) rename sites/{friday => upsun}/src/learn/tutorials/exporting.md (100%) rename sites/{friday => upsun}/src/learn/tutorials/migrating/_index.md (100%) rename sites/{friday => upsun}/src/learn/tutorials/migrating/from-psh.md (100%) rename sites/{friday => upsun}/src/learn/tutorials/restrict-service-access.md (100%) rename sites/{friday => upsun}/src/manage-resources/_index.md (100%) rename sites/{friday => upsun}/src/manage-resources/adjust-resources.md (100%) rename sites/{friday => upsun}/src/manage-resources/build-resources.md (100%) rename sites/{friday => upsun}/src/manage-resources/resource-billing.md (100%) rename sites/{friday => upsun}/src/manage-resources/resource-init.md (100%) rename sites/{friday => upsun}/src/projects/_index.md (100%) rename sites/{friday => upsun}/src/projects/change-project-timezone.md (100%) rename sites/{friday => upsun}/src/projects/delete-project.md (100%) rename sites/{friday => upsun}/src/projects/region-migration.md (100%) rename sites/{friday => upsun}/src/registry/_index.md (100%) rename sites/{friday => upsun}/src/registry/images/.gitignore (100%) rename sites/{friday => upsun}/src/search.md (100%) rename sites/{friday => upsun}/src/security/_index.md (100%) rename sites/{friday => upsun}/src/security/backups.md (100%) rename sites/{friday => upsun}/src/security/data-retention.md (100%) rename sites/{friday => upsun}/src/security/project-isolation.md (100%) rename sites/{friday => upsun}/src/security/waf.md (100%) rename sites/{friday => upsun}/static/files/fetch/.gitignore (100%) rename sites/{friday => upsun}/static/files/fetch/examples/golang/memcached (100%) rename sites/{friday => upsun}/static/files/fetch/examples/golang/mongodb (100%) rename sites/{friday => upsun}/static/files/fetch/examples/golang/mysql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/golang/postgresql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/golang/rabbitmq (100%) rename sites/{friday => upsun}/static/files/fetch/examples/golang/solr (100%) rename sites/{friday => upsun}/static/files/fetch/examples/java/elasticsearch (100%) rename sites/{friday => upsun}/static/files/fetch/examples/java/kafka (100%) rename sites/{friday => upsun}/static/files/fetch/examples/java/memcached (100%) rename sites/{friday => upsun}/static/files/fetch/examples/java/mongodb (100%) rename sites/{friday => upsun}/static/files/fetch/examples/java/mysql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/java/postgresql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/java/rabbitmq (100%) rename sites/{friday => upsun}/static/files/fetch/examples/java/redis (100%) rename sites/{friday => upsun}/static/files/fetch/examples/java/solr (100%) rename sites/{friday => upsun}/static/files/fetch/examples/nodejs/elasticsearch (100%) rename sites/{friday => upsun}/static/files/fetch/examples/nodejs/memcached (100%) rename sites/{friday => upsun}/static/files/fetch/examples/nodejs/mongodb (100%) rename sites/{friday => upsun}/static/files/fetch/examples/nodejs/mysql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/nodejs/postgresql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/nodejs/redis (100%) rename sites/{friday => upsun}/static/files/fetch/examples/nodejs/solr (100%) rename sites/{friday => upsun}/static/files/fetch/examples/php/elasticsearch (100%) rename sites/{friday => upsun}/static/files/fetch/examples/php/influxdb (100%) rename sites/{friday => upsun}/static/files/fetch/examples/php/memcached (100%) rename sites/{friday => upsun}/static/files/fetch/examples/php/mongodb (100%) rename sites/{friday => upsun}/static/files/fetch/examples/php/mysql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/php/postgresql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/php/rabbitmq (100%) rename sites/{friday => upsun}/static/files/fetch/examples/php/redis (100%) rename sites/{friday => upsun}/static/files/fetch/examples/php/solr (100%) rename sites/{friday => upsun}/static/files/fetch/examples/python/elasticsearch (100%) rename sites/{friday => upsun}/static/files/fetch/examples/python/kafka (100%) rename sites/{friday => upsun}/static/files/fetch/examples/python/memcached (100%) rename sites/{friday => upsun}/static/files/fetch/examples/python/mongodb (100%) rename sites/{friday => upsun}/static/files/fetch/examples/python/mysql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/python/postgresql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/python/rabbitmq (100%) rename sites/{friday => upsun}/static/files/fetch/examples/python/redis (100%) rename sites/{friday => upsun}/static/files/fetch/examples/python/solr (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/elasticsearch (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/headlesschrome (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/influxdb (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/kafka (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/memcached (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/mongodb (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/mysql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/opensearch (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/oraclemysql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/postgresql (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/rabbitmq (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/redis (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/solr (100%) rename sites/{friday => upsun}/static/files/fetch/examples/relationships/vault-kms (100%) rename sites/{friday => upsun}/static/images/billing/billing-alert-button.png (100%) rename sites/{friday => upsun}/static/images/billing/invoices-tab.png (100%) rename sites/{friday => upsun}/static/images/billing/organization-billing.png (100%) rename sites/{friday => upsun}/static/images/billing/project-billing.png (100%) rename sites/{friday => upsun}/static/images/console/create-project.png (100%) rename sites/{friday => upsun}/static/images/console/first-fail.png (100%) rename sites/{friday => upsun}/static/images/console/settings-access-users.png (100%) rename sites/{friday => upsun}/static/images/console/settings-general.png (100%) rename sites/{friday => upsun}/static/images/console/upsun-console-main-view.png (100%) rename sites/{friday => upsun}/static/images/favicon.ico (100%) rename sites/{friday => upsun}/static/images/flexible-resources/apps-services-tree.png (100%) rename sites/{friday => upsun}/static/images/flexible-resources/check-container-profile.png (100%) rename sites/{friday => upsun}/static/images/flexible-resources/configure-button-project-card.png (100%) rename sites/{friday => upsun}/static/images/flexible-resources/configure-flexible-resources.png (100%) rename sites/{friday => upsun}/static/images/guides/laravel-ify.png (100%) rename sites/{friday => upsun}/static/images/guides/resources-cli-picker.gif (100%) rename sites/{friday => upsun}/static/images/logo.svg (100%) rename sites/{friday => upsun}/static/images/logo_vertical.svg (100%) rename sites/{friday => upsun}/static/images/observability/cont-prof-color-code.png (100%) rename sites/{friday => upsun}/static/images/observability/filtering-upsun.png (100%) rename sites/{friday => upsun}/static/images/observability/flame-graph-clicked.png (100%) rename sites/{friday => upsun}/static/images/observability/flame-graph-hover.png (100%) rename sites/{friday => upsun}/static/images/observability/flame-graph.png (100%) rename sites/{friday => upsun}/static/images/observability/metrics/mysql-container.png (100%) rename sites/{friday => upsun}/static/images/observability/metrics/redis-container.png (100%) rename sites/{friday => upsun}/static/images/observability/metrics/service-container-minimized.png (100%) rename sites/{friday => upsun}/static/images/observability/sandwich-view.png (100%) rename sites/{friday => upsun}/static/images/observability/table-view.png (100%) rename sites/{friday => upsun}/static/scripts/xss/.babelrc (100%) rename sites/{friday => upsun}/static/scripts/xss/.eslintrc.json (100%) rename sites/{friday => upsun}/static/scripts/xss/.gitignore (100%) rename sites/{friday => upsun}/static/scripts/xss/.gitkeep (100%) rename sites/{friday => upsun}/static/scripts/xss/README.md (100%) rename sites/{friday => upsun}/static/scripts/xss/dist/.gitkeep (100%) rename sites/{friday => upsun}/static/scripts/xss/dist/config/.gitkeep (100%) rename sites/{friday => upsun}/static/scripts/xss/package.json (100%) rename sites/{friday => upsun}/static/scripts/xss/src/App.js (100%) rename sites/{friday => upsun}/static/scripts/xss/src/components/Suggestions.js (100%) rename sites/{friday => upsun}/static/scripts/xss/src/components/SuggestionsPrimary.js (100%) rename sites/{friday => upsun}/static/scripts/xss/src/containers/Search.js (100%) rename sites/{friday => upsun}/static/scripts/xss/src/index.js (100%) rename sites/{friday => upsun}/static/scripts/xss/webpack.common.js (100%) rename sites/{friday => upsun}/static/scripts/xss/webpack.dev.js (100%) rename sites/{friday => upsun}/static/scripts/xss/webpack.prod.js (100%) rename sites/{friday => upsun}/utils/common.mjs (100%) rename sites/{friday => upsun}/utils/fetch-examples.mjs (100%) rename sites/{friday => upsun}/utils/fetchTemplates.mjs (100%) rename sites/{friday => upsun}/utils/updateExampleConfigFiles.js (100%) diff --git a/.github/workflows/generate-cli-commands-page.yaml b/.github/workflows/generate-cli-commands-page.yaml index 4d425e1b8f..c61ec01cf1 100644 --- a/.github/workflows/generate-cli-commands-page.yaml +++ b/.github/workflows/generate-cli-commands-page.yaml @@ -16,7 +16,7 @@ env: BRANCH_TITLE: cli-commands-doc-page DEFAULT_BRANCH: "main" PLATFORMSH_CLI_DOC_PATH: "sites/platform/src/administration/cli/reference.md" - UPSUN_CLI_DOC_PATH: "sites/friday/src/administration/cli/reference.md" + UPSUN_CLI_DOC_PATH: "sites/upsun/src/administration/cli/reference.md" permissions: contents: write diff --git a/.platform/applications.yaml b/.platform/applications.yaml index b4a0c539bb..3fc37c361e 100644 --- a/.platform/applications.yaml +++ b/.platform/applications.yaml @@ -66,7 +66,7 @@ size: S - # The name of this application, which must be unique within a project. - name: 'friday' + name: 'upsun' # The type key specifies the language and version for your application. type: 'nodejs:20' @@ -75,7 +75,7 @@ variables: env: HUGOVERSION: 0.116.0 - SITE_DIR: 'sites/friday' + SITE_DIR: 'sites/upsun' build: flavor: none @@ -111,7 +111,7 @@ locations: '/': # The public directory of the application relative to its root. - root: 'sites/friday/public' + root: 'sites/upsun/public' passthru: true index: ['index.html'] scripts: false @@ -124,8 +124,8 @@ disk: 1024 mounts: - "sites/friday/public/scripts/xss/dist/config": + "sites/upsun/public/scripts/xss/dist/config": source: local - source_path: "sites/friday/config" + source_path: "sites/upsun/config" size: S diff --git a/.platform/routes.yaml b/.platform/routes.yaml index d96c8e739d..2cd0694739 100644 --- a/.platform/routes.yaml +++ b/.platform/routes.yaml @@ -272,8 +272,8 @@ https://{default}/: https://docs.upsun.com/: type: upstream - upstream: friday:http - id: friday + upstream: upsun:http + id: upsun cache: enabled: true ssi: diff --git a/README.md b/README.md index ebb3638236..09314f9ce9 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ but if you don't, the search field doesn't appear in the sidebar. 1. To run the docs alone, clone this repository and install dependencies: ```bash - cd sites/platform # or cd sites/friday + cd sites/platform # or cd sites/upsun npm install ``` @@ -161,15 +161,15 @@ When you add a white label documentation, you want vendor-specific values, such For example, if you add a white label documentation for a product called MyGreatProduct, you want every instance of `Platform.sh` and `Platform.sh CLI` to be automatically substituted by `MyGreatProduct` and `MyGreatProduct CLI` respectively. -To achieve that result, use the settings placeholders defined in the `sites/friday/config/_default/params.yaml` file: +To achieve that result, use the settings placeholders defined in the `sites/upsun/config/_default/params.yaml` file: ```yaml # Vendorization vendor: - name: Deploy Friday - cli: friday - env_prefix: FRIDAY - config_dir: .friday + name: Upsun + cli: upsun + env_prefix: PLATFORM + config_dir: .upsun ``` Each of them can be used in any templates (HTML or MarkDown) using shortcodes: @@ -207,7 +207,7 @@ To do so, you could implement the following file structure: ```bash sites -├── friday +├── upsun │ └── src │ └── tutorials │ └── migrating diff --git a/search/index_external_sites.sh b/search/index_external_sites.sh index c24e9e08ba..12a7dd131b 100755 --- a/search/index_external_sites.sh +++ b/search/index_external_sites.sh @@ -3,7 +3,7 @@ cleanup(){ echo "* CLEANING UP OLD DOCS INDEX" rm -f output/platform_index.json - rm -f output/friday_index.json + rm -f output/upsun_index.json } @@ -27,9 +27,9 @@ update_index(){ POETRY_LOCATION=/app/.local/bin/poetry # Update indexes $POETRY_LOCATION run python createPrimaryIndex.py platform - $POETRY_LOCATION run python createPrimaryIndex.py friday + $POETRY_LOCATION run python createPrimaryIndex.py upsun $POETRY_LOCATION run python main.py platform - $POETRY_LOCATION run python main.py friday + $POETRY_LOCATION run python main.py upsun } # scrape diff --git a/search/main.py b/search/main.py index c5a5d526a5..1e4fd1c2b9 100644 --- a/search/main.py +++ b/search/main.py @@ -129,13 +129,13 @@ def update(self): # Create a new index create_index_task = client.create_index(uid=self.docs_index, options={'primaryKey': self.primaryKey, 'uid': self.index_name}) - timeout = 5000 + timeout = 10000 if "friday" == docs_index_name: timeout = 15000 try: client.wait_for_task(create_index_task['taskUid'], timeout) - except MeilisearchTimeoutError as merror: + except meilisearch.errors.MeilisearchTimeoutError as merror: print('Failed waiting {0} milliseconds for Meilisearch to create the index. Error message: {1}'.format(timeout, merror)) return diff --git a/search/post_deploy.sh b/search/post_deploy.sh index c6f1aa1931..d729c0d3c4 100755 --- a/search/post_deploy.sh +++ b/search/post_deploy.sh @@ -3,20 +3,20 @@ cleanup(){ echo "* CLEANING UP OLD DOCS INDEX" rm -v output/platform_docs.json && echo "output json for platform deleted" || echo "failed to delete output json for platform" - rm -v output/friday_docs.json && echo "output json for upsun deleted" || echo "failed to delete output json for upsun" + rm -v output/upsun_docs.json && echo "output json for upsun deleted" || echo "failed to delete output json for upsun" } getDocsData() { # Get the frontend URLs PLATFORM_DOCS_URL=$(echo $PLATFORM_ROUTES | base64 --decode | jq -r 'to_entries[] | select(.value.primary) | .key') - FRIDAY_DOCS_URL=$(echo $PLATFORM_ROUTES | base64 --decode | jq -r 'to_entries[] | select(.value.id=="friday") | .key') + UPSUN_DOCS_URL=$(echo $PLATFORM_ROUTES | base64 --decode | jq -r 'to_entries[] | select(.value.id=="upsun") | .key') printf "URL for platform docs: %s\n" "${PLATFORM_DOCS_URL}" - printf "URL for upsun docs: %s\n" "${FRIDAY_DOCS_URL}" + printf "URL for upsun docs: %s\n" "${UPSUN_DOCS_URL}" # Delete docs index in the mount if it exists rm -v data/platform_index.json && echo "data json for platform deleted" || echo "failed to delete data json for platform" - rm -v data/friday_index.json && echo "data json for upsun deleted" || echo "failed to delete data json for upsun" + rm -v data/upsun_index.json && echo "data json for upsun deleted" || echo "failed to delete data json for upsun" # remove the previous headers log if [ -f "data/platform-headers.txt" ]; then @@ -34,17 +34,17 @@ getDocsData() { # curl --user-agent "request-to-upsun-docs" -s -D - -o foobar.json "https://docs.upsun.com/index.json" >> headers.txt curl --user-agent "request-search-index-for-platform-docs" -s -D - -o data/platform_index.json "${PLATFORM_DOCS_URL}index.json" >> data/platform-headers.txt #curl -s "${PLATFORM_DOCS_URL}index.json" >> data/platform_index.json && echo "retrieved psh index" || echo "failed to retrieve psh index" - curl --user-agent "request-search-index-for-upsun-docs" -s -D - -o data/friday_index.json "${FRIDAY_DOCS_URL}index.json" >> data/upsun-headers.txt - #curl -s "${FRIDAY_DOCS_URL}index.json" >> data/friday_index.json && echo "retrieved upsun index" || echo "failed to retrieve upsun index" + curl --user-agent "request-search-index-for-upsun-docs" -s -D - -o data/upsun_index.json "${UPSUN_DOCS_URL}index.json" >> data/upsun-headers.txt + #curl -s "${UPSUN_DOCS_URL}index.json" >> data/upsun_index.json && echo "retrieved upsun index" || echo "failed to retrieve upsun index" # How many times does Platform.sh appear in the platform index? Should be 3815 pshOccurrenceInPsh=$(cat data/platform_index.json | grep -o -i Platform.sh | wc -l) # How many times does Platform.sh appear in the Upsun index? should be 33 - pshOccurrenceInUpsun=$(cat data/friday_index.json | grep -o -i Platform.sh | wc -l) + pshOccurrenceInUpsun=$(cat data/upsun_index.json | grep -o -i Platform.sh | wc -l) #How many times does Upsun appear in the platform index? Should be 0 upsunOccurrenceInPsh=$(cat data/platform_index.json | grep -o -i Upsun | wc -l) #how many times does Upsun appear in the upsun index? Should be 4616 - upsunOccurrenceInUpsun=$(cat data/friday_index.json | grep -o -i Upsun | wc -l) + upsunOccurrenceInUpsun=$(cat data/upsun_index.json | grep -o -i Upsun | wc -l) printf "Upsun appears %d times in the platform index.\nUpsun appears %d times in the Upsun index.\n" "${upsunOccurrenceInPsh}" "${upsunOccurrenceInUpsun}" printf "Platform appears %d times in the platform index.\nPlatform appears %d times in the Upsun index.\n" "${pshOccurrenceInPsh}" "${pshOccurrenceInUpsun}" @@ -62,13 +62,13 @@ getDocsData() { # Delete templates index in the mount if it exists rm -f data/platform_templates.yaml - rm -f data/friday_templates.yaml + rm -f data/upsun_templates.yaml # Get the updated index for templates curl -s "${PLATFORM_DOCS_URL}files/indexes/templates.yaml" >> data/platform_templates.yaml # @todo: For now, reuse the same index. To be removed entirely. - cp data/platform_templates.yaml data/friday_templates.yaml + cp data/platform_templates.yaml data/upsun_templates.yaml } update_index(){ @@ -76,11 +76,11 @@ update_index(){ POETRY_LOCATION=/app/.local/bin/poetry # Create indices for templates and docs $POETRY_LOCATION run python createPrimaryIndex.py platform - $POETRY_LOCATION run python createPrimaryIndex.py friday + $POETRY_LOCATION run python createPrimaryIndex.py upsun # Update indexes $POETRY_LOCATION run python main.py platform - $POETRY_LOCATION run python main.py friday + $POETRY_LOCATION run python main.py upsun } save_headers() { diff --git a/sites/friday/.eslintrc.yaml b/sites/upsun/.eslintrc.yaml similarity index 100% rename from sites/friday/.eslintrc.yaml rename to sites/upsun/.eslintrc.yaml diff --git a/sites/friday/.gitignore b/sites/upsun/.gitignore similarity index 100% rename from sites/friday/.gitignore rename to sites/upsun/.gitignore diff --git a/sites/friday/.htmltest.yml b/sites/upsun/.htmltest.yml similarity index 100% rename from sites/friday/.htmltest.yml rename to sites/upsun/.htmltest.yml diff --git a/sites/friday/.hugo_build.lock b/sites/upsun/.hugo_build.lock similarity index 100% rename from sites/friday/.hugo_build.lock rename to sites/upsun/.hugo_build.lock diff --git a/sites/friday/ABOUT.md b/sites/upsun/ABOUT.md similarity index 100% rename from sites/friday/ABOUT.md rename to sites/upsun/ABOUT.md diff --git a/sites/friday/build_docs.sh b/sites/upsun/build_docs.sh similarity index 98% rename from sites/friday/build_docs.sh rename to sites/upsun/build_docs.sh index 3b5c9d0f04..125dd8ac4b 100755 --- a/sites/friday/build_docs.sh +++ b/sites/upsun/build_docs.sh @@ -39,7 +39,7 @@ else fi echo "Moving the hugo binary from cache into the application." -cp "${PLATFORM_CACHE_DIR}/hugo_${HUGOVERSION}/hugo" "${PLATFORM_APP_DIR}/sites/friday" +cp "${PLATFORM_CACHE_DIR}/hugo_${HUGOVERSION}/hugo" "${PLATFORM_APP_DIR}/sites/upsun" # Build the Hugo site ./hugo diff --git a/sites/friday/config/_default/config.yaml b/sites/upsun/config/_default/config.yaml similarity index 100% rename from sites/friday/config/_default/config.yaml rename to sites/upsun/config/_default/config.yaml diff --git a/sites/friday/config/_default/params.yaml b/sites/upsun/config/_default/params.yaml similarity index 96% rename from sites/friday/config/_default/params.yaml rename to sites/upsun/config/_default/params.yaml index 8f4b3fea49..10f7f78576 100644 --- a/sites/friday/config/_default/params.yaml +++ b/sites/upsun/config/_default/params.yaml @@ -1,12 +1,12 @@ # Basics -version: "1.1.0" -description: Deploy Friday User Documentation -author: Deploy Friday +version: "1.0.19" +description: UPSUN User Documentation +author: Upsun title: User documentation issuerepo: "https://github.com/platformsh/platformsh-docs/" repo: "https://github.com/platformsh/platformsh-docs/" -folder: "sites/friday" +folder: "sites/upsun" editPageButton: true theme: diff --git a/sites/friday/deploy.sh b/sites/upsun/deploy.sh similarity index 98% rename from sites/friday/deploy.sh rename to sites/upsun/deploy.sh index 3f77970283..7a4d395371 100755 --- a/sites/friday/deploy.sh +++ b/sites/upsun/deploy.sh @@ -4,7 +4,7 @@ MEILI_CONFIG_DEST=public/scripts/xss/dist/config/config.json # The index won't be built until the post_deploy hook, so we hardcode it here. -MEILI_INDEX="friday_docs" +MEILI_INDEX="upsun_docs" createSearchConfig() { # Use the shared PLATFORM_PROJECT_ENTROPY var as MEILI_MASTER_KEY to retrieve the public key for our autocomplete app. diff --git a/sites/friday/index.js b/sites/upsun/index.js similarity index 100% rename from sites/friday/index.js rename to sites/upsun/index.js diff --git a/sites/friday/layouts/shortcodes/community-buttons.html b/sites/upsun/layouts/shortcodes/community-buttons.html similarity index 100% rename from sites/friday/layouts/shortcodes/community-buttons.html rename to sites/upsun/layouts/shortcodes/community-buttons.html diff --git a/sites/friday/layouts/shortcodes/home.html b/sites/upsun/layouts/shortcodes/home.html similarity index 100% rename from sites/friday/layouts/shortcodes/home.html rename to sites/upsun/layouts/shortcodes/home.html diff --git a/sites/friday/local_docs.sh b/sites/upsun/local_docs.sh similarity index 100% rename from sites/friday/local_docs.sh rename to sites/upsun/local_docs.sh diff --git a/sites/friday/marker.sh b/sites/upsun/marker.sh similarity index 100% rename from sites/friday/marker.sh rename to sites/upsun/marker.sh diff --git a/sites/friday/package-lock.json b/sites/upsun/package-lock.json similarity index 100% rename from sites/friday/package-lock.json rename to sites/upsun/package-lock.json diff --git a/sites/friday/package.json b/sites/upsun/package.json similarity index 100% rename from sites/friday/package.json rename to sites/upsun/package.json diff --git a/sites/friday/src/_index.md b/sites/upsun/src/_index.md similarity index 100% rename from sites/friday/src/_index.md rename to sites/upsun/src/_index.md diff --git a/sites/friday/src/add-services/_index.md b/sites/upsun/src/add-services/_index.md similarity index 100% rename from sites/friday/src/add-services/_index.md rename to sites/upsun/src/add-services/_index.md diff --git a/sites/friday/src/add-services/clickhouse.md b/sites/upsun/src/add-services/clickhouse.md similarity index 100% rename from sites/friday/src/add-services/clickhouse.md rename to sites/upsun/src/add-services/clickhouse.md diff --git a/sites/friday/src/add-services/elasticsearch.md b/sites/upsun/src/add-services/elasticsearch.md similarity index 100% rename from sites/friday/src/add-services/elasticsearch.md rename to sites/upsun/src/add-services/elasticsearch.md diff --git a/sites/friday/src/add-services/headless-chrome.md b/sites/upsun/src/add-services/headless-chrome.md similarity index 100% rename from sites/friday/src/add-services/headless-chrome.md rename to sites/upsun/src/add-services/headless-chrome.md diff --git a/sites/friday/src/add-services/influxdb.md b/sites/upsun/src/add-services/influxdb.md similarity index 100% rename from sites/friday/src/add-services/influxdb.md rename to sites/upsun/src/add-services/influxdb.md diff --git a/sites/friday/src/add-services/kafka.md b/sites/upsun/src/add-services/kafka.md similarity index 100% rename from sites/friday/src/add-services/kafka.md rename to sites/upsun/src/add-services/kafka.md diff --git a/sites/friday/src/add-services/memcached.md b/sites/upsun/src/add-services/memcached.md similarity index 100% rename from sites/friday/src/add-services/memcached.md rename to sites/upsun/src/add-services/memcached.md diff --git a/sites/friday/src/add-services/mongodb.md b/sites/upsun/src/add-services/mongodb.md similarity index 100% rename from sites/friday/src/add-services/mongodb.md rename to sites/upsun/src/add-services/mongodb.md diff --git a/sites/friday/src/add-services/mysql/_index.md b/sites/upsun/src/add-services/mysql/_index.md similarity index 100% rename from sites/friday/src/add-services/mysql/_index.md rename to sites/upsun/src/add-services/mysql/_index.md diff --git a/sites/friday/src/add-services/mysql/mysql-replication.md b/sites/upsun/src/add-services/mysql/mysql-replication.md similarity index 100% rename from sites/friday/src/add-services/mysql/mysql-replication.md rename to sites/upsun/src/add-services/mysql/mysql-replication.md diff --git a/sites/friday/src/add-services/mysql/troubleshoot.md b/sites/upsun/src/add-services/mysql/troubleshoot.md similarity index 100% rename from sites/friday/src/add-services/mysql/troubleshoot.md rename to sites/upsun/src/add-services/mysql/troubleshoot.md diff --git a/sites/friday/src/add-services/network-storage.md b/sites/upsun/src/add-services/network-storage.md similarity index 100% rename from sites/friday/src/add-services/network-storage.md rename to sites/upsun/src/add-services/network-storage.md diff --git a/sites/friday/src/add-services/opensearch.md b/sites/upsun/src/add-services/opensearch.md similarity index 100% rename from sites/friday/src/add-services/opensearch.md rename to sites/upsun/src/add-services/opensearch.md diff --git a/sites/friday/src/add-services/postgresql.md b/sites/upsun/src/add-services/postgresql.md similarity index 100% rename from sites/friday/src/add-services/postgresql.md rename to sites/upsun/src/add-services/postgresql.md diff --git a/sites/friday/src/add-services/rabbitmq.md b/sites/upsun/src/add-services/rabbitmq.md similarity index 100% rename from sites/friday/src/add-services/rabbitmq.md rename to sites/upsun/src/add-services/rabbitmq.md diff --git a/sites/friday/src/add-services/redis.md b/sites/upsun/src/add-services/redis.md similarity index 100% rename from sites/friday/src/add-services/redis.md rename to sites/upsun/src/add-services/redis.md diff --git a/sites/friday/src/add-services/solr.md b/sites/upsun/src/add-services/solr.md similarity index 100% rename from sites/friday/src/add-services/solr.md rename to sites/upsun/src/add-services/solr.md diff --git a/sites/friday/src/add-services/varnish.md b/sites/upsun/src/add-services/varnish.md similarity index 100% rename from sites/friday/src/add-services/varnish.md rename to sites/upsun/src/add-services/varnish.md diff --git a/sites/friday/src/add-services/vault.md b/sites/upsun/src/add-services/vault.md similarity index 100% rename from sites/friday/src/add-services/vault.md rename to sites/upsun/src/add-services/vault.md diff --git a/sites/friday/src/administration/_index.md b/sites/upsun/src/administration/_index.md similarity index 100% rename from sites/friday/src/administration/_index.md rename to sites/upsun/src/administration/_index.md diff --git a/sites/friday/src/administration/billing/_index.md b/sites/upsun/src/administration/billing/_index.md similarity index 100% rename from sites/friday/src/administration/billing/_index.md rename to sites/upsun/src/administration/billing/_index.md diff --git a/sites/friday/src/administration/billing/billing-admin.md b/sites/upsun/src/administration/billing/billing-admin.md similarity index 100% rename from sites/friday/src/administration/billing/billing-admin.md rename to sites/upsun/src/administration/billing/billing-admin.md diff --git a/sites/friday/src/administration/billing/monitor-billing.md b/sites/upsun/src/administration/billing/monitor-billing.md similarity index 100% rename from sites/friday/src/administration/billing/monitor-billing.md rename to sites/upsun/src/administration/billing/monitor-billing.md diff --git a/sites/friday/src/administration/cli/_index.md b/sites/upsun/src/administration/cli/_index.md similarity index 100% rename from sites/friday/src/administration/cli/_index.md rename to sites/upsun/src/administration/cli/_index.md diff --git a/sites/friday/src/administration/cli/api-tokens.md b/sites/upsun/src/administration/cli/api-tokens.md similarity index 100% rename from sites/friday/src/administration/cli/api-tokens.md rename to sites/upsun/src/administration/cli/api-tokens.md diff --git a/sites/friday/src/administration/cli/reference.md b/sites/upsun/src/administration/cli/reference.md similarity index 100% rename from sites/friday/src/administration/cli/reference.md rename to sites/upsun/src/administration/cli/reference.md diff --git a/sites/friday/src/administration/organizations.md b/sites/upsun/src/administration/organizations.md similarity index 100% rename from sites/friday/src/administration/organizations.md rename to sites/upsun/src/administration/organizations.md diff --git a/sites/friday/src/administration/pricing.md b/sites/upsun/src/administration/pricing.md similarity index 100% rename from sites/friday/src/administration/pricing.md rename to sites/upsun/src/administration/pricing.md diff --git a/sites/friday/src/administration/servers.md b/sites/upsun/src/administration/servers.md similarity index 100% rename from sites/friday/src/administration/servers.md rename to sites/upsun/src/administration/servers.md diff --git a/sites/friday/src/administration/teams.md b/sites/upsun/src/administration/teams.md similarity index 100% rename from sites/friday/src/administration/teams.md rename to sites/upsun/src/administration/teams.md diff --git a/sites/friday/src/administration/users.md b/sites/upsun/src/administration/users.md similarity index 100% rename from sites/friday/src/administration/users.md rename to sites/upsun/src/administration/users.md diff --git a/sites/friday/src/administration/web/_index.md b/sites/upsun/src/administration/web/_index.md similarity index 100% rename from sites/friday/src/administration/web/_index.md rename to sites/upsun/src/administration/web/_index.md diff --git a/sites/friday/src/administration/web/configure-environment.md b/sites/upsun/src/administration/web/configure-environment.md similarity index 100% rename from sites/friday/src/administration/web/configure-environment.md rename to sites/upsun/src/administration/web/configure-environment.md diff --git a/sites/friday/src/administration/web/configure-project.md b/sites/upsun/src/administration/web/configure-project.md similarity index 100% rename from sites/friday/src/administration/web/configure-project.md rename to sites/upsun/src/administration/web/configure-project.md diff --git a/sites/friday/src/administration/web/mfa.md b/sites/upsun/src/administration/web/mfa.md similarity index 100% rename from sites/friday/src/administration/web/mfa.md rename to sites/upsun/src/administration/web/mfa.md diff --git a/sites/friday/src/changelog/_index.md b/sites/upsun/src/changelog/_index.md similarity index 100% rename from sites/friday/src/changelog/_index.md rename to sites/upsun/src/changelog/_index.md diff --git a/sites/friday/src/create-apps/_index.md b/sites/upsun/src/create-apps/_index.md similarity index 100% rename from sites/friday/src/create-apps/_index.md rename to sites/upsun/src/create-apps/_index.md diff --git a/sites/friday/src/create-apps/app-reference.md b/sites/upsun/src/create-apps/app-reference.md similarity index 100% rename from sites/friday/src/create-apps/app-reference.md rename to sites/upsun/src/create-apps/app-reference.md diff --git a/sites/friday/src/create-apps/hooks/_index.md b/sites/upsun/src/create-apps/hooks/_index.md similarity index 100% rename from sites/friday/src/create-apps/hooks/_index.md rename to sites/upsun/src/create-apps/hooks/_index.md diff --git a/sites/friday/src/create-apps/hooks/hooks-and-dependencies.md b/sites/upsun/src/create-apps/hooks/hooks-and-dependencies.md similarity index 100% rename from sites/friday/src/create-apps/hooks/hooks-and-dependencies.md rename to sites/upsun/src/create-apps/hooks/hooks-and-dependencies.md diff --git a/sites/friday/src/create-apps/hooks/hooks-comparison.md b/sites/upsun/src/create-apps/hooks/hooks-comparison.md similarity index 100% rename from sites/friday/src/create-apps/hooks/hooks-comparison.md rename to sites/upsun/src/create-apps/hooks/hooks-comparison.md diff --git a/sites/friday/src/create-apps/hooks/vary-hooks-by-environment.md b/sites/upsun/src/create-apps/hooks/vary-hooks-by-environment.md similarity index 100% rename from sites/friday/src/create-apps/hooks/vary-hooks-by-environment.md rename to sites/upsun/src/create-apps/hooks/vary-hooks-by-environment.md diff --git a/sites/friday/src/create-apps/multi-app/_index.md b/sites/upsun/src/create-apps/multi-app/_index.md similarity index 100% rename from sites/friday/src/create-apps/multi-app/_index.md rename to sites/upsun/src/create-apps/multi-app/_index.md diff --git a/sites/friday/src/create-apps/multi-app/project-structure.md b/sites/upsun/src/create-apps/multi-app/project-structure.md similarity index 100% rename from sites/friday/src/create-apps/multi-app/project-structure.md rename to sites/upsun/src/create-apps/multi-app/project-structure.md diff --git a/sites/friday/src/create-apps/multi-app/relationships.md b/sites/upsun/src/create-apps/multi-app/relationships.md similarity index 100% rename from sites/friday/src/create-apps/multi-app/relationships.md rename to sites/upsun/src/create-apps/multi-app/relationships.md diff --git a/sites/friday/src/create-apps/multi-app/routes.md b/sites/upsun/src/create-apps/multi-app/routes.md similarity index 100% rename from sites/friday/src/create-apps/multi-app/routes.md rename to sites/upsun/src/create-apps/multi-app/routes.md diff --git a/sites/friday/src/create-apps/runtime-operations.md b/sites/upsun/src/create-apps/runtime-operations.md similarity index 100% rename from sites/friday/src/create-apps/runtime-operations.md rename to sites/upsun/src/create-apps/runtime-operations.md diff --git a/sites/friday/src/create-apps/source-operations.md b/sites/upsun/src/create-apps/source-operations.md similarity index 100% rename from sites/friday/src/create-apps/source-operations.md rename to sites/upsun/src/create-apps/source-operations.md diff --git a/sites/friday/src/create-apps/timezone.md b/sites/upsun/src/create-apps/timezone.md similarity index 100% rename from sites/friday/src/create-apps/timezone.md rename to sites/upsun/src/create-apps/timezone.md diff --git a/sites/friday/src/create-apps/troubleshoot-disks.md b/sites/upsun/src/create-apps/troubleshoot-disks.md similarity index 100% rename from sites/friday/src/create-apps/troubleshoot-disks.md rename to sites/upsun/src/create-apps/troubleshoot-disks.md diff --git a/sites/friday/src/create-apps/troubleshoot-mounts.md b/sites/upsun/src/create-apps/troubleshoot-mounts.md similarity index 100% rename from sites/friday/src/create-apps/troubleshoot-mounts.md rename to sites/upsun/src/create-apps/troubleshoot-mounts.md diff --git a/sites/friday/src/create-apps/web/_index.md b/sites/upsun/src/create-apps/web/_index.md similarity index 100% rename from sites/friday/src/create-apps/web/_index.md rename to sites/upsun/src/create-apps/web/_index.md diff --git a/sites/friday/src/create-apps/web/custom-headers.md b/sites/upsun/src/create-apps/web/custom-headers.md similarity index 100% rename from sites/friday/src/create-apps/web/custom-headers.md rename to sites/upsun/src/create-apps/web/custom-headers.md diff --git a/sites/friday/src/create-apps/web/php-basic.md b/sites/upsun/src/create-apps/web/php-basic.md similarity index 100% rename from sites/friday/src/create-apps/web/php-basic.md rename to sites/upsun/src/create-apps/web/php-basic.md diff --git a/sites/friday/src/create-apps/web/rewrite-requests.md b/sites/upsun/src/create-apps/web/rewrite-requests.md similarity index 100% rename from sites/friday/src/create-apps/web/rewrite-requests.md rename to sites/upsun/src/create-apps/web/rewrite-requests.md diff --git a/sites/friday/src/create-apps/web/serve-different-directories.md b/sites/upsun/src/create-apps/web/serve-different-directories.md similarity index 100% rename from sites/friday/src/create-apps/web/serve-different-directories.md rename to sites/upsun/src/create-apps/web/serve-different-directories.md diff --git a/sites/friday/src/create-apps/web/static.md b/sites/upsun/src/create-apps/web/static.md similarity index 100% rename from sites/friday/src/create-apps/web/static.md rename to sites/upsun/src/create-apps/web/static.md diff --git a/sites/friday/src/create-apps/workers.md b/sites/upsun/src/create-apps/workers.md similarity index 100% rename from sites/friday/src/create-apps/workers.md rename to sites/upsun/src/create-apps/workers.md diff --git a/sites/friday/src/define-routes/_index.md b/sites/upsun/src/define-routes/_index.md similarity index 100% rename from sites/friday/src/define-routes/_index.md rename to sites/upsun/src/define-routes/_index.md diff --git a/sites/friday/src/define-routes/cache.md b/sites/upsun/src/define-routes/cache.md similarity index 100% rename from sites/friday/src/define-routes/cache.md rename to sites/upsun/src/define-routes/cache.md diff --git a/sites/friday/src/define-routes/https.md b/sites/upsun/src/define-routes/https.md similarity index 100% rename from sites/friday/src/define-routes/https.md rename to sites/upsun/src/define-routes/https.md diff --git a/sites/friday/src/define-routes/proxy.md b/sites/upsun/src/define-routes/proxy.md similarity index 100% rename from sites/friday/src/define-routes/proxy.md rename to sites/upsun/src/define-routes/proxy.md diff --git a/sites/friday/src/define-routes/redirects.md b/sites/upsun/src/define-routes/redirects.md similarity index 100% rename from sites/friday/src/define-routes/redirects.md rename to sites/upsun/src/define-routes/redirects.md diff --git a/sites/friday/src/define-routes/ssi.md b/sites/upsun/src/define-routes/ssi.md similarity index 100% rename from sites/friday/src/define-routes/ssi.md rename to sites/upsun/src/define-routes/ssi.md diff --git a/sites/friday/src/development/_index.md b/sites/upsun/src/development/_index.md similarity index 100% rename from sites/friday/src/development/_index.md rename to sites/upsun/src/development/_index.md diff --git a/sites/friday/src/development/access-site.md b/sites/upsun/src/development/access-site.md similarity index 100% rename from sites/friday/src/development/access-site.md rename to sites/upsun/src/development/access-site.md diff --git a/sites/friday/src/development/email.md b/sites/upsun/src/development/email.md similarity index 100% rename from sites/friday/src/development/email.md rename to sites/upsun/src/development/email.md diff --git a/sites/friday/src/development/file-transfer.md b/sites/upsun/src/development/file-transfer.md similarity index 100% rename from sites/friday/src/development/file-transfer.md rename to sites/upsun/src/development/file-transfer.md diff --git a/sites/friday/src/development/headers.md b/sites/upsun/src/development/headers.md similarity index 100% rename from sites/friday/src/development/headers.md rename to sites/upsun/src/development/headers.md diff --git a/sites/friday/src/development/local/_index.md b/sites/upsun/src/development/local/_index.md similarity index 100% rename from sites/friday/src/development/local/_index.md rename to sites/upsun/src/development/local/_index.md diff --git a/sites/friday/src/development/local/ddev.md b/sites/upsun/src/development/local/ddev.md similarity index 100% rename from sites/friday/src/development/local/ddev.md rename to sites/upsun/src/development/local/ddev.md diff --git a/sites/friday/src/development/local/tethered.md b/sites/upsun/src/development/local/tethered.md similarity index 100% rename from sites/friday/src/development/local/tethered.md rename to sites/upsun/src/development/local/tethered.md diff --git a/sites/friday/src/development/local/untethered.md b/sites/upsun/src/development/local/untethered.md similarity index 100% rename from sites/friday/src/development/local/untethered.md rename to sites/upsun/src/development/local/untethered.md diff --git a/sites/friday/src/development/private-repository.md b/sites/upsun/src/development/private-repository.md similarity index 100% rename from sites/friday/src/development/private-repository.md rename to sites/upsun/src/development/private-repository.md diff --git a/sites/friday/src/development/regions.md b/sites/upsun/src/development/regions.md similarity index 100% rename from sites/friday/src/development/regions.md rename to sites/upsun/src/development/regions.md diff --git a/sites/friday/src/development/sanitize-db/_index.md b/sites/upsun/src/development/sanitize-db/_index.md similarity index 100% rename from sites/friday/src/development/sanitize-db/_index.md rename to sites/upsun/src/development/sanitize-db/_index.md diff --git a/sites/friday/src/development/sanitize-db/mariadb.md b/sites/upsun/src/development/sanitize-db/mariadb.md similarity index 100% rename from sites/friday/src/development/sanitize-db/mariadb.md rename to sites/upsun/src/development/sanitize-db/mariadb.md diff --git a/sites/friday/src/development/sanitize-db/postgresql-symfony.md b/sites/upsun/src/development/sanitize-db/postgresql-symfony.md similarity index 100% rename from sites/friday/src/development/sanitize-db/postgresql-symfony.md rename to sites/upsun/src/development/sanitize-db/postgresql-symfony.md diff --git a/sites/friday/src/development/sanitize-db/postgresql.md b/sites/upsun/src/development/sanitize-db/postgresql.md similarity index 100% rename from sites/friday/src/development/sanitize-db/postgresql.md rename to sites/upsun/src/development/sanitize-db/postgresql.md diff --git a/sites/friday/src/development/ssh/_index.md b/sites/upsun/src/development/ssh/_index.md similarity index 100% rename from sites/friday/src/development/ssh/_index.md rename to sites/upsun/src/development/ssh/_index.md diff --git a/sites/friday/src/development/ssh/ssh-keys.md b/sites/upsun/src/development/ssh/ssh-keys.md similarity index 100% rename from sites/friday/src/development/ssh/ssh-keys.md rename to sites/upsun/src/development/ssh/ssh-keys.md diff --git a/sites/friday/src/development/ssh/troubleshoot-ssh.md b/sites/upsun/src/development/ssh/troubleshoot-ssh.md similarity index 100% rename from sites/friday/src/development/ssh/troubleshoot-ssh.md rename to sites/upsun/src/development/ssh/troubleshoot-ssh.md diff --git a/sites/friday/src/development/submodules.md b/sites/upsun/src/development/submodules.md similarity index 100% rename from sites/friday/src/development/submodules.md rename to sites/upsun/src/development/submodules.md diff --git a/sites/friday/src/development/troubleshoot.md b/sites/upsun/src/development/troubleshoot.md similarity index 100% rename from sites/friday/src/development/troubleshoot.md rename to sites/upsun/src/development/troubleshoot.md diff --git a/sites/friday/src/development/variables/_index.md b/sites/upsun/src/development/variables/_index.md similarity index 100% rename from sites/friday/src/development/variables/_index.md rename to sites/upsun/src/development/variables/_index.md diff --git a/sites/friday/src/development/variables/set-variables.md b/sites/upsun/src/development/variables/set-variables.md similarity index 100% rename from sites/friday/src/development/variables/set-variables.md rename to sites/upsun/src/development/variables/set-variables.md diff --git a/sites/friday/src/development/variables/use-variables.md b/sites/upsun/src/development/variables/use-variables.md similarity index 100% rename from sites/friday/src/development/variables/use-variables.md rename to sites/upsun/src/development/variables/use-variables.md diff --git a/sites/friday/src/domains/_index.md b/sites/upsun/src/domains/_index.md similarity index 100% rename from sites/friday/src/domains/_index.md rename to sites/upsun/src/domains/_index.md diff --git a/sites/friday/src/domains/cdn/_index.md b/sites/upsun/src/domains/cdn/_index.md similarity index 100% rename from sites/friday/src/domains/cdn/_index.md rename to sites/upsun/src/domains/cdn/_index.md diff --git a/sites/friday/src/domains/cdn/cloudflare.md b/sites/upsun/src/domains/cdn/cloudflare.md similarity index 100% rename from sites/friday/src/domains/cdn/cloudflare.md rename to sites/upsun/src/domains/cdn/cloudflare.md diff --git a/sites/friday/src/domains/cdn/fastly.md b/sites/upsun/src/domains/cdn/fastly.md similarity index 100% rename from sites/friday/src/domains/cdn/fastly.md rename to sites/upsun/src/domains/cdn/fastly.md diff --git a/sites/friday/src/domains/steps/_index.md b/sites/upsun/src/domains/steps/_index.md similarity index 100% rename from sites/friday/src/domains/steps/_index.md rename to sites/upsun/src/domains/steps/_index.md diff --git a/sites/friday/src/domains/steps/custom-domains-preview-environments.md b/sites/upsun/src/domains/steps/custom-domains-preview-environments.md similarity index 100% rename from sites/friday/src/domains/steps/custom-domains-preview-environments.md rename to sites/upsun/src/domains/steps/custom-domains-preview-environments.md diff --git a/sites/friday/src/domains/steps/dns.md b/sites/upsun/src/domains/steps/dns.md similarity index 100% rename from sites/friday/src/domains/steps/dns.md rename to sites/upsun/src/domains/steps/dns.md diff --git a/sites/friday/src/domains/steps/subdomains.md b/sites/upsun/src/domains/steps/subdomains.md similarity index 100% rename from sites/friday/src/domains/steps/subdomains.md rename to sites/upsun/src/domains/steps/subdomains.md diff --git a/sites/friday/src/domains/steps/tls.md b/sites/upsun/src/domains/steps/tls.md similarity index 100% rename from sites/friday/src/domains/steps/tls.md rename to sites/upsun/src/domains/steps/tls.md diff --git a/sites/friday/src/domains/troubleshoot.md b/sites/upsun/src/domains/troubleshoot.md similarity index 100% rename from sites/friday/src/domains/troubleshoot.md rename to sites/upsun/src/domains/troubleshoot.md diff --git a/sites/friday/src/environments/_index.md b/sites/upsun/src/environments/_index.md similarity index 100% rename from sites/friday/src/environments/_index.md rename to sites/upsun/src/environments/_index.md diff --git a/sites/friday/src/environments/backup.md b/sites/upsun/src/environments/backup.md similarity index 100% rename from sites/friday/src/environments/backup.md rename to sites/upsun/src/environments/backup.md diff --git a/sites/friday/src/environments/cancel-activity.md b/sites/upsun/src/environments/cancel-activity.md similarity index 100% rename from sites/friday/src/environments/cancel-activity.md rename to sites/upsun/src/environments/cancel-activity.md diff --git a/sites/friday/src/environments/change-parent.md b/sites/upsun/src/environments/change-parent.md similarity index 100% rename from sites/friday/src/environments/change-parent.md rename to sites/upsun/src/environments/change-parent.md diff --git a/sites/friday/src/environments/deactivate-environment.md b/sites/upsun/src/environments/deactivate-environment.md similarity index 100% rename from sites/friday/src/environments/deactivate-environment.md rename to sites/upsun/src/environments/deactivate-environment.md diff --git a/sites/friday/src/environments/default-environment.md b/sites/upsun/src/environments/default-environment.md similarity index 100% rename from sites/friday/src/environments/default-environment.md rename to sites/upsun/src/environments/default-environment.md diff --git a/sites/friday/src/environments/http-access-control.md b/sites/upsun/src/environments/http-access-control.md similarity index 100% rename from sites/friday/src/environments/http-access-control.md rename to sites/upsun/src/environments/http-access-control.md diff --git a/sites/friday/src/environments/restore.md b/sites/upsun/src/environments/restore.md similarity index 100% rename from sites/friday/src/environments/restore.md rename to sites/upsun/src/environments/restore.md diff --git a/sites/friday/src/environments/search-engine-visibility.md b/sites/upsun/src/environments/search-engine-visibility.md similarity index 100% rename from sites/friday/src/environments/search-engine-visibility.md rename to sites/upsun/src/environments/search-engine-visibility.md diff --git a/sites/friday/src/feedback/_index.md b/sites/upsun/src/feedback/_index.md similarity index 100% rename from sites/friday/src/feedback/_index.md rename to sites/upsun/src/feedback/_index.md diff --git a/sites/friday/src/feedback/report.html b/sites/upsun/src/feedback/report.html similarity index 100% rename from sites/friday/src/feedback/report.html rename to sites/upsun/src/feedback/report.html diff --git a/sites/friday/src/get-started/_index.md b/sites/upsun/src/get-started/_index.md similarity index 100% rename from sites/friday/src/get-started/_index.md rename to sites/upsun/src/get-started/_index.md diff --git a/sites/friday/src/get-started/here/_index.md b/sites/upsun/src/get-started/here/_index.md similarity index 100% rename from sites/friday/src/get-started/here/_index.md rename to sites/upsun/src/get-started/here/_index.md diff --git a/sites/friday/src/get-started/here/configure/_index.md b/sites/upsun/src/get-started/here/configure/_index.md similarity index 100% rename from sites/friday/src/get-started/here/configure/_index.md rename to sites/upsun/src/get-started/here/configure/_index.md diff --git a/sites/friday/src/get-started/here/configure/nodejs.md b/sites/upsun/src/get-started/here/configure/nodejs.md similarity index 100% rename from sites/friday/src/get-started/here/configure/nodejs.md rename to sites/upsun/src/get-started/here/configure/nodejs.md diff --git a/sites/friday/src/get-started/here/configure/php.md b/sites/upsun/src/get-started/here/configure/php.md similarity index 100% rename from sites/friday/src/get-started/here/configure/php.md rename to sites/upsun/src/get-started/here/configure/php.md diff --git a/sites/friday/src/get-started/here/configure/python.md b/sites/upsun/src/get-started/here/configure/python.md similarity index 100% rename from sites/friday/src/get-started/here/configure/python.md rename to sites/upsun/src/get-started/here/configure/python.md diff --git a/sites/friday/src/get-started/here/create-project.md b/sites/upsun/src/get-started/here/create-project.md similarity index 100% rename from sites/friday/src/get-started/here/create-project.md rename to sites/upsun/src/get-started/here/create-project.md diff --git a/sites/friday/src/get-started/here/local/_index.md b/sites/upsun/src/get-started/here/local/_index.md similarity index 100% rename from sites/friday/src/get-started/here/local/_index.md rename to sites/upsun/src/get-started/here/local/_index.md diff --git a/sites/friday/src/get-started/here/local/tethered.md b/sites/upsun/src/get-started/here/local/tethered.md similarity index 100% rename from sites/friday/src/get-started/here/local/tethered.md rename to sites/upsun/src/get-started/here/local/tethered.md diff --git a/sites/friday/src/get-started/here/make-changes.md b/sites/upsun/src/get-started/here/make-changes.md similarity index 100% rename from sites/friday/src/get-started/here/make-changes.md rename to sites/upsun/src/get-started/here/make-changes.md diff --git a/sites/friday/src/get-started/here/set-resources.md b/sites/upsun/src/get-started/here/set-resources.md similarity index 100% rename from sites/friday/src/get-started/here/set-resources.md rename to sites/upsun/src/get-started/here/set-resources.md diff --git a/sites/friday/src/get-started/here/setup.md b/sites/upsun/src/get-started/here/setup.md similarity index 100% rename from sites/friday/src/get-started/here/setup.md rename to sites/upsun/src/get-started/here/setup.md diff --git a/sites/friday/src/get-started/here/support.md b/sites/upsun/src/get-started/here/support.md similarity index 100% rename from sites/friday/src/get-started/here/support.md rename to sites/upsun/src/get-started/here/support.md diff --git a/sites/friday/src/get-started/here/third-party.md b/sites/upsun/src/get-started/here/third-party.md similarity index 100% rename from sites/friday/src/get-started/here/third-party.md rename to sites/upsun/src/get-started/here/third-party.md diff --git a/sites/friday/src/get-started/stacks/_index.md b/sites/upsun/src/get-started/stacks/_index.md similarity index 100% rename from sites/friday/src/get-started/stacks/_index.md rename to sites/upsun/src/get-started/stacks/_index.md diff --git a/sites/friday/src/get-started/stacks/django.md b/sites/upsun/src/get-started/stacks/django.md similarity index 100% rename from sites/friday/src/get-started/stacks/django.md rename to sites/upsun/src/get-started/stacks/django.md diff --git a/sites/friday/src/get-started/stacks/express.md b/sites/upsun/src/get-started/stacks/express.md similarity index 100% rename from sites/friday/src/get-started/stacks/express.md rename to sites/upsun/src/get-started/stacks/express.md diff --git a/sites/friday/src/get-started/stacks/flask.md b/sites/upsun/src/get-started/stacks/flask.md similarity index 100% rename from sites/friday/src/get-started/stacks/flask.md rename to sites/upsun/src/get-started/stacks/flask.md diff --git a/sites/friday/src/get-started/stacks/laravel.md b/sites/upsun/src/get-started/stacks/laravel.md similarity index 100% rename from sites/friday/src/get-started/stacks/laravel.md rename to sites/upsun/src/get-started/stacks/laravel.md diff --git a/sites/friday/src/get-started/stacks/nextjs.md b/sites/upsun/src/get-started/stacks/nextjs.md similarity index 100% rename from sites/friday/src/get-started/stacks/nextjs.md rename to sites/upsun/src/get-started/stacks/nextjs.md diff --git a/sites/friday/src/get-started/stacks/strapi.md b/sites/upsun/src/get-started/stacks/strapi.md similarity index 100% rename from sites/friday/src/get-started/stacks/strapi.md rename to sites/upsun/src/get-started/stacks/strapi.md diff --git a/sites/friday/src/get-started/stacks/symfony/_index.md b/sites/upsun/src/get-started/stacks/symfony/_index.md similarity index 100% rename from sites/friday/src/get-started/stacks/symfony/_index.md rename to sites/upsun/src/get-started/stacks/symfony/_index.md diff --git a/sites/friday/src/get-started/stacks/symfony/blackfire.md b/sites/upsun/src/get-started/stacks/symfony/blackfire.md similarity index 100% rename from sites/friday/src/get-started/stacks/symfony/blackfire.md rename to sites/upsun/src/get-started/stacks/symfony/blackfire.md diff --git a/sites/friday/src/get-started/stacks/symfony/crons.md b/sites/upsun/src/get-started/stacks/symfony/crons.md similarity index 100% rename from sites/friday/src/get-started/stacks/symfony/crons.md rename to sites/upsun/src/get-started/stacks/symfony/crons.md diff --git a/sites/friday/src/get-started/stacks/symfony/environment-variables.md b/sites/upsun/src/get-started/stacks/symfony/environment-variables.md similarity index 100% rename from sites/friday/src/get-started/stacks/symfony/environment-variables.md rename to sites/upsun/src/get-started/stacks/symfony/environment-variables.md diff --git a/sites/friday/src/get-started/stacks/symfony/faq.md b/sites/upsun/src/get-started/stacks/symfony/faq.md similarity index 100% rename from sites/friday/src/get-started/stacks/symfony/faq.md rename to sites/upsun/src/get-started/stacks/symfony/faq.md diff --git a/sites/friday/src/get-started/stacks/symfony/get-started.md b/sites/upsun/src/get-started/stacks/symfony/get-started.md similarity index 100% rename from sites/friday/src/get-started/stacks/symfony/get-started.md rename to sites/upsun/src/get-started/stacks/symfony/get-started.md diff --git a/sites/friday/src/get-started/stacks/symfony/integration.md b/sites/upsun/src/get-started/stacks/symfony/integration.md similarity index 100% rename from sites/friday/src/get-started/stacks/symfony/integration.md rename to sites/upsun/src/get-started/stacks/symfony/integration.md diff --git a/sites/friday/src/get-started/stacks/symfony/local.md b/sites/upsun/src/get-started/stacks/symfony/local.md similarity index 100% rename from sites/friday/src/get-started/stacks/symfony/local.md rename to sites/upsun/src/get-started/stacks/symfony/local.md diff --git a/sites/friday/src/get-started/stacks/symfony/workers.md b/sites/upsun/src/get-started/stacks/symfony/workers.md similarity index 100% rename from sites/friday/src/get-started/stacks/symfony/workers.md rename to sites/upsun/src/get-started/stacks/symfony/workers.md diff --git a/sites/friday/src/glossary/_index.md b/sites/upsun/src/glossary/_index.md similarity index 100% rename from sites/friday/src/glossary/_index.md rename to sites/upsun/src/glossary/_index.md diff --git a/sites/friday/src/increase-observability/_index.md b/sites/upsun/src/increase-observability/_index.md similarity index 100% rename from sites/friday/src/increase-observability/_index.md rename to sites/upsun/src/increase-observability/_index.md diff --git a/sites/friday/src/increase-observability/application-metrics/_index.md b/sites/upsun/src/increase-observability/application-metrics/_index.md similarity index 100% rename from sites/friday/src/increase-observability/application-metrics/_index.md rename to sites/upsun/src/increase-observability/application-metrics/_index.md diff --git a/sites/friday/src/increase-observability/application-metrics/blackfire.md b/sites/upsun/src/increase-observability/application-metrics/blackfire.md similarity index 100% rename from sites/friday/src/increase-observability/application-metrics/blackfire.md rename to sites/upsun/src/increase-observability/application-metrics/blackfire.md diff --git a/sites/friday/src/increase-observability/application-metrics/cont-prof.md b/sites/upsun/src/increase-observability/application-metrics/cont-prof.md similarity index 100% rename from sites/friday/src/increase-observability/application-metrics/cont-prof.md rename to sites/upsun/src/increase-observability/application-metrics/cont-prof.md diff --git a/sites/friday/src/increase-observability/application-metrics/go.md b/sites/upsun/src/increase-observability/application-metrics/go.md similarity index 100% rename from sites/friday/src/increase-observability/application-metrics/go.md rename to sites/upsun/src/increase-observability/application-metrics/go.md diff --git a/sites/friday/src/increase-observability/application-metrics/nodejs.md b/sites/upsun/src/increase-observability/application-metrics/nodejs.md similarity index 100% rename from sites/friday/src/increase-observability/application-metrics/nodejs.md rename to sites/upsun/src/increase-observability/application-metrics/nodejs.md diff --git a/sites/friday/src/increase-observability/application-metrics/understanding.md b/sites/upsun/src/increase-observability/application-metrics/understanding.md similarity index 100% rename from sites/friday/src/increase-observability/application-metrics/understanding.md rename to sites/upsun/src/increase-observability/application-metrics/understanding.md diff --git a/sites/friday/src/increase-observability/logs/_index.md b/sites/upsun/src/increase-observability/logs/_index.md similarity index 100% rename from sites/friday/src/increase-observability/logs/_index.md rename to sites/upsun/src/increase-observability/logs/_index.md diff --git a/sites/friday/src/increase-observability/logs/access-logs.md b/sites/upsun/src/increase-observability/logs/access-logs.md similarity index 100% rename from sites/friday/src/increase-observability/logs/access-logs.md rename to sites/upsun/src/increase-observability/logs/access-logs.md diff --git a/sites/friday/src/increase-observability/logs/forward-logs.md b/sites/upsun/src/increase-observability/logs/forward-logs.md similarity index 100% rename from sites/friday/src/increase-observability/logs/forward-logs.md rename to sites/upsun/src/increase-observability/logs/forward-logs.md diff --git a/sites/friday/src/increase-observability/metrics/_index.md b/sites/upsun/src/increase-observability/metrics/_index.md similarity index 100% rename from sites/friday/src/increase-observability/metrics/_index.md rename to sites/upsun/src/increase-observability/metrics/_index.md diff --git a/sites/friday/src/increase-observability/metrics/http-metrics.md b/sites/upsun/src/increase-observability/metrics/http-metrics.md similarity index 100% rename from sites/friday/src/increase-observability/metrics/http-metrics.md rename to sites/upsun/src/increase-observability/metrics/http-metrics.md diff --git a/sites/friday/src/increase-observability/metrics/understand-metrics.md b/sites/upsun/src/increase-observability/metrics/understand-metrics.md similarity index 100% rename from sites/friday/src/increase-observability/metrics/understand-metrics.md rename to sites/upsun/src/increase-observability/metrics/understand-metrics.md diff --git a/sites/friday/src/integrations/_index.md b/sites/upsun/src/integrations/_index.md similarity index 100% rename from sites/friday/src/integrations/_index.md rename to sites/upsun/src/integrations/_index.md diff --git a/sites/friday/src/integrations/activity/_index.md b/sites/upsun/src/integrations/activity/_index.md similarity index 100% rename from sites/friday/src/integrations/activity/_index.md rename to sites/upsun/src/integrations/activity/_index.md diff --git a/sites/friday/src/integrations/activity/discord.md b/sites/upsun/src/integrations/activity/discord.md similarity index 100% rename from sites/friday/src/integrations/activity/discord.md rename to sites/upsun/src/integrations/activity/discord.md diff --git a/sites/friday/src/integrations/activity/reference.md b/sites/upsun/src/integrations/activity/reference.md similarity index 100% rename from sites/friday/src/integrations/activity/reference.md rename to sites/upsun/src/integrations/activity/reference.md diff --git a/sites/friday/src/integrations/activity/slack.md b/sites/upsun/src/integrations/activity/slack.md similarity index 100% rename from sites/friday/src/integrations/activity/slack.md rename to sites/upsun/src/integrations/activity/slack.md diff --git a/sites/friday/src/integrations/activity/utility.md b/sites/upsun/src/integrations/activity/utility.md similarity index 100% rename from sites/friday/src/integrations/activity/utility.md rename to sites/upsun/src/integrations/activity/utility.md diff --git a/sites/friday/src/integrations/activity/webhooks.md b/sites/upsun/src/integrations/activity/webhooks.md similarity index 100% rename from sites/friday/src/integrations/activity/webhooks.md rename to sites/upsun/src/integrations/activity/webhooks.md diff --git a/sites/friday/src/integrations/notifications.md b/sites/upsun/src/integrations/notifications.md similarity index 100% rename from sites/friday/src/integrations/notifications.md rename to sites/upsun/src/integrations/notifications.md diff --git a/sites/friday/src/integrations/overview.md b/sites/upsun/src/integrations/overview.md similarity index 100% rename from sites/friday/src/integrations/overview.md rename to sites/upsun/src/integrations/overview.md diff --git a/sites/friday/src/integrations/source/_index.md b/sites/upsun/src/integrations/source/_index.md similarity index 100% rename from sites/friday/src/integrations/source/_index.md rename to sites/upsun/src/integrations/source/_index.md diff --git a/sites/friday/src/integrations/source/bitbucket.md b/sites/upsun/src/integrations/source/bitbucket.md similarity index 100% rename from sites/friday/src/integrations/source/bitbucket.md rename to sites/upsun/src/integrations/source/bitbucket.md diff --git a/sites/friday/src/integrations/source/github.md b/sites/upsun/src/integrations/source/github.md similarity index 100% rename from sites/friday/src/integrations/source/github.md rename to sites/upsun/src/integrations/source/github.md diff --git a/sites/friday/src/integrations/source/gitlab.md b/sites/upsun/src/integrations/source/gitlab.md similarity index 100% rename from sites/friday/src/integrations/source/gitlab.md rename to sites/upsun/src/integrations/source/gitlab.md diff --git a/sites/friday/src/integrations/source/troubleshoot.md b/sites/upsun/src/integrations/source/troubleshoot.md similarity index 100% rename from sites/friday/src/integrations/source/troubleshoot.md rename to sites/upsun/src/integrations/source/troubleshoot.md diff --git a/sites/friday/src/languages/_index.md b/sites/upsun/src/languages/_index.md similarity index 100% rename from sites/friday/src/languages/_index.md rename to sites/upsun/src/languages/_index.md diff --git a/sites/friday/src/languages/dotnet.md b/sites/upsun/src/languages/dotnet.md similarity index 100% rename from sites/friday/src/languages/dotnet.md rename to sites/upsun/src/languages/dotnet.md diff --git a/sites/friday/src/languages/elixir.md b/sites/upsun/src/languages/elixir.md similarity index 100% rename from sites/friday/src/languages/elixir.md rename to sites/upsun/src/languages/elixir.md diff --git a/sites/friday/src/languages/go.md b/sites/upsun/src/languages/go.md similarity index 100% rename from sites/friday/src/languages/go.md rename to sites/upsun/src/languages/go.md diff --git a/sites/friday/src/languages/java/_index.md b/sites/upsun/src/languages/java/_index.md similarity index 100% rename from sites/friday/src/languages/java/_index.md rename to sites/upsun/src/languages/java/_index.md diff --git a/sites/friday/src/languages/java/migration.md b/sites/upsun/src/languages/java/migration.md similarity index 100% rename from sites/friday/src/languages/java/migration.md rename to sites/upsun/src/languages/java/migration.md diff --git a/sites/friday/src/languages/java/tuning.md b/sites/upsun/src/languages/java/tuning.md similarity index 100% rename from sites/friday/src/languages/java/tuning.md rename to sites/upsun/src/languages/java/tuning.md diff --git a/sites/friday/src/languages/lisp.md b/sites/upsun/src/languages/lisp.md similarity index 100% rename from sites/friday/src/languages/lisp.md rename to sites/upsun/src/languages/lisp.md diff --git a/sites/friday/src/languages/nodejs/_index.md b/sites/upsun/src/languages/nodejs/_index.md similarity index 100% rename from sites/friday/src/languages/nodejs/_index.md rename to sites/upsun/src/languages/nodejs/_index.md diff --git a/sites/friday/src/languages/nodejs/debug.md b/sites/upsun/src/languages/nodejs/debug.md similarity index 100% rename from sites/friday/src/languages/nodejs/debug.md rename to sites/upsun/src/languages/nodejs/debug.md diff --git a/sites/friday/src/languages/nodejs/node-version.md b/sites/upsun/src/languages/nodejs/node-version.md similarity index 100% rename from sites/friday/src/languages/nodejs/node-version.md rename to sites/upsun/src/languages/nodejs/node-version.md diff --git a/sites/friday/src/languages/php/_index.md b/sites/upsun/src/languages/php/_index.md similarity index 100% rename from sites/friday/src/languages/php/_index.md rename to sites/upsun/src/languages/php/_index.md diff --git a/sites/friday/src/languages/php/composer-auth.md b/sites/upsun/src/languages/php/composer-auth.md similarity index 100% rename from sites/friday/src/languages/php/composer-auth.md rename to sites/upsun/src/languages/php/composer-auth.md diff --git a/sites/friday/src/languages/php/extensions.md b/sites/upsun/src/languages/php/extensions.md similarity index 100% rename from sites/friday/src/languages/php/extensions.md rename to sites/upsun/src/languages/php/extensions.md diff --git a/sites/friday/src/languages/php/fpm.md b/sites/upsun/src/languages/php/fpm.md similarity index 100% rename from sites/friday/src/languages/php/fpm.md rename to sites/upsun/src/languages/php/fpm.md diff --git a/sites/friday/src/languages/php/redis.md b/sites/upsun/src/languages/php/redis.md similarity index 100% rename from sites/friday/src/languages/php/redis.md rename to sites/upsun/src/languages/php/redis.md diff --git a/sites/friday/src/languages/php/swoole.md b/sites/upsun/src/languages/php/swoole.md similarity index 100% rename from sites/friday/src/languages/php/swoole.md rename to sites/upsun/src/languages/php/swoole.md diff --git a/sites/friday/src/languages/php/troubleshoot.md b/sites/upsun/src/languages/php/troubleshoot.md similarity index 100% rename from sites/friday/src/languages/php/troubleshoot.md rename to sites/upsun/src/languages/php/troubleshoot.md diff --git a/sites/friday/src/languages/php/tuning.md b/sites/upsun/src/languages/php/tuning.md similarity index 100% rename from sites/friday/src/languages/php/tuning.md rename to sites/upsun/src/languages/php/tuning.md diff --git a/sites/friday/src/languages/php/xdebug.md b/sites/upsun/src/languages/php/xdebug.md similarity index 100% rename from sites/friday/src/languages/php/xdebug.md rename to sites/upsun/src/languages/php/xdebug.md diff --git a/sites/friday/src/languages/python/_index.md b/sites/upsun/src/languages/python/_index.md similarity index 100% rename from sites/friday/src/languages/python/_index.md rename to sites/upsun/src/languages/python/_index.md diff --git a/sites/friday/src/languages/python/dependencies.md b/sites/upsun/src/languages/python/dependencies.md similarity index 100% rename from sites/friday/src/languages/python/dependencies.md rename to sites/upsun/src/languages/python/dependencies.md diff --git a/sites/friday/src/languages/python/python-version.md b/sites/upsun/src/languages/python/python-version.md similarity index 100% rename from sites/friday/src/languages/python/python-version.md rename to sites/upsun/src/languages/python/python-version.md diff --git a/sites/friday/src/languages/python/server.md b/sites/upsun/src/languages/python/server.md similarity index 100% rename from sites/friday/src/languages/python/server.md rename to sites/upsun/src/languages/python/server.md diff --git a/sites/friday/src/languages/ruby.md b/sites/upsun/src/languages/ruby.md similarity index 100% rename from sites/friday/src/languages/ruby.md rename to sites/upsun/src/languages/ruby.md diff --git a/sites/friday/src/languages/rust.md b/sites/upsun/src/languages/rust.md similarity index 100% rename from sites/friday/src/languages/rust.md rename to sites/upsun/src/languages/rust.md diff --git a/sites/friday/src/learn/_index.md b/sites/upsun/src/learn/_index.md similarity index 100% rename from sites/friday/src/learn/_index.md rename to sites/upsun/src/learn/_index.md diff --git a/sites/friday/src/learn/bestpractices/_index.md b/sites/upsun/src/learn/bestpractices/_index.md similarity index 100% rename from sites/friday/src/learn/bestpractices/_index.md rename to sites/upsun/src/learn/bestpractices/_index.md diff --git a/sites/friday/src/learn/bestpractices/clean-repository.md b/sites/upsun/src/learn/bestpractices/clean-repository.md similarity index 100% rename from sites/friday/src/learn/bestpractices/clean-repository.md rename to sites/upsun/src/learn/bestpractices/clean-repository.md diff --git a/sites/friday/src/learn/bestpractices/http-caching.md b/sites/upsun/src/learn/bestpractices/http-caching.md similarity index 100% rename from sites/friday/src/learn/bestpractices/http-caching.md rename to sites/upsun/src/learn/bestpractices/http-caching.md diff --git a/sites/friday/src/learn/bestpractices/oneormany.md b/sites/upsun/src/learn/bestpractices/oneormany.md similarity index 100% rename from sites/friday/src/learn/bestpractices/oneormany.md rename to sites/upsun/src/learn/bestpractices/oneormany.md diff --git a/sites/friday/src/learn/overview/_index.md b/sites/upsun/src/learn/overview/_index.md similarity index 100% rename from sites/friday/src/learn/overview/_index.md rename to sites/upsun/src/learn/overview/_index.md diff --git a/sites/friday/src/learn/overview/build-deploy.md b/sites/upsun/src/learn/overview/build-deploy.md similarity index 100% rename from sites/friday/src/learn/overview/build-deploy.md rename to sites/upsun/src/learn/overview/build-deploy.md diff --git a/sites/friday/src/learn/overview/get-support.md b/sites/upsun/src/learn/overview/get-support.md similarity index 100% rename from sites/friday/src/learn/overview/get-support.md rename to sites/upsun/src/learn/overview/get-support.md diff --git a/sites/friday/src/learn/overview/philosophy.md b/sites/upsun/src/learn/overview/philosophy.md similarity index 100% rename from sites/friday/src/learn/overview/philosophy.md rename to sites/upsun/src/learn/overview/philosophy.md diff --git a/sites/friday/src/learn/overview/structure.md b/sites/upsun/src/learn/overview/structure.md similarity index 100% rename from sites/friday/src/learn/overview/structure.md rename to sites/upsun/src/learn/overview/structure.md diff --git a/sites/friday/src/learn/overview/yaml/_index.md b/sites/upsun/src/learn/overview/yaml/_index.md similarity index 100% rename from sites/friday/src/learn/overview/yaml/_index.md rename to sites/upsun/src/learn/overview/yaml/_index.md diff --git a/sites/friday/src/learn/overview/yaml/platform-yaml-tags.md b/sites/upsun/src/learn/overview/yaml/platform-yaml-tags.md similarity index 100% rename from sites/friday/src/learn/overview/yaml/platform-yaml-tags.md rename to sites/upsun/src/learn/overview/yaml/platform-yaml-tags.md diff --git a/sites/friday/src/learn/overview/yaml/what-is-yaml.md b/sites/upsun/src/learn/overview/yaml/what-is-yaml.md similarity index 100% rename from sites/friday/src/learn/overview/yaml/what-is-yaml.md rename to sites/upsun/src/learn/overview/yaml/what-is-yaml.md diff --git a/sites/friday/src/learn/overview/yaml/yaml-structure.md b/sites/upsun/src/learn/overview/yaml/yaml-structure.md similarity index 100% rename from sites/friday/src/learn/overview/yaml/yaml-structure.md rename to sites/upsun/src/learn/overview/yaml/yaml-structure.md diff --git a/sites/friday/src/learn/tutorials/_index.md b/sites/upsun/src/learn/tutorials/_index.md similarity index 100% rename from sites/friday/src/learn/tutorials/_index.md rename to sites/upsun/src/learn/tutorials/_index.md diff --git a/sites/friday/src/learn/tutorials/dependency-updates.md b/sites/upsun/src/learn/tutorials/dependency-updates.md similarity index 100% rename from sites/friday/src/learn/tutorials/dependency-updates.md rename to sites/upsun/src/learn/tutorials/dependency-updates.md diff --git a/sites/friday/src/learn/tutorials/exporting.md b/sites/upsun/src/learn/tutorials/exporting.md similarity index 100% rename from sites/friday/src/learn/tutorials/exporting.md rename to sites/upsun/src/learn/tutorials/exporting.md diff --git a/sites/friday/src/learn/tutorials/migrating/_index.md b/sites/upsun/src/learn/tutorials/migrating/_index.md similarity index 100% rename from sites/friday/src/learn/tutorials/migrating/_index.md rename to sites/upsun/src/learn/tutorials/migrating/_index.md diff --git a/sites/friday/src/learn/tutorials/migrating/from-psh.md b/sites/upsun/src/learn/tutorials/migrating/from-psh.md similarity index 100% rename from sites/friday/src/learn/tutorials/migrating/from-psh.md rename to sites/upsun/src/learn/tutorials/migrating/from-psh.md diff --git a/sites/friday/src/learn/tutorials/restrict-service-access.md b/sites/upsun/src/learn/tutorials/restrict-service-access.md similarity index 100% rename from sites/friday/src/learn/tutorials/restrict-service-access.md rename to sites/upsun/src/learn/tutorials/restrict-service-access.md diff --git a/sites/friday/src/manage-resources/_index.md b/sites/upsun/src/manage-resources/_index.md similarity index 100% rename from sites/friday/src/manage-resources/_index.md rename to sites/upsun/src/manage-resources/_index.md diff --git a/sites/friday/src/manage-resources/adjust-resources.md b/sites/upsun/src/manage-resources/adjust-resources.md similarity index 100% rename from sites/friday/src/manage-resources/adjust-resources.md rename to sites/upsun/src/manage-resources/adjust-resources.md diff --git a/sites/friday/src/manage-resources/build-resources.md b/sites/upsun/src/manage-resources/build-resources.md similarity index 100% rename from sites/friday/src/manage-resources/build-resources.md rename to sites/upsun/src/manage-resources/build-resources.md diff --git a/sites/friday/src/manage-resources/resource-billing.md b/sites/upsun/src/manage-resources/resource-billing.md similarity index 100% rename from sites/friday/src/manage-resources/resource-billing.md rename to sites/upsun/src/manage-resources/resource-billing.md diff --git a/sites/friday/src/manage-resources/resource-init.md b/sites/upsun/src/manage-resources/resource-init.md similarity index 100% rename from sites/friday/src/manage-resources/resource-init.md rename to sites/upsun/src/manage-resources/resource-init.md diff --git a/sites/friday/src/projects/_index.md b/sites/upsun/src/projects/_index.md similarity index 100% rename from sites/friday/src/projects/_index.md rename to sites/upsun/src/projects/_index.md diff --git a/sites/friday/src/projects/change-project-timezone.md b/sites/upsun/src/projects/change-project-timezone.md similarity index 100% rename from sites/friday/src/projects/change-project-timezone.md rename to sites/upsun/src/projects/change-project-timezone.md diff --git a/sites/friday/src/projects/delete-project.md b/sites/upsun/src/projects/delete-project.md similarity index 100% rename from sites/friday/src/projects/delete-project.md rename to sites/upsun/src/projects/delete-project.md diff --git a/sites/friday/src/projects/region-migration.md b/sites/upsun/src/projects/region-migration.md similarity index 100% rename from sites/friday/src/projects/region-migration.md rename to sites/upsun/src/projects/region-migration.md diff --git a/sites/friday/src/registry/_index.md b/sites/upsun/src/registry/_index.md similarity index 100% rename from sites/friday/src/registry/_index.md rename to sites/upsun/src/registry/_index.md diff --git a/sites/friday/src/registry/images/.gitignore b/sites/upsun/src/registry/images/.gitignore similarity index 100% rename from sites/friday/src/registry/images/.gitignore rename to sites/upsun/src/registry/images/.gitignore diff --git a/sites/friday/src/search.md b/sites/upsun/src/search.md similarity index 100% rename from sites/friday/src/search.md rename to sites/upsun/src/search.md diff --git a/sites/friday/src/security/_index.md b/sites/upsun/src/security/_index.md similarity index 100% rename from sites/friday/src/security/_index.md rename to sites/upsun/src/security/_index.md diff --git a/sites/friday/src/security/backups.md b/sites/upsun/src/security/backups.md similarity index 100% rename from sites/friday/src/security/backups.md rename to sites/upsun/src/security/backups.md diff --git a/sites/friday/src/security/data-retention.md b/sites/upsun/src/security/data-retention.md similarity index 100% rename from sites/friday/src/security/data-retention.md rename to sites/upsun/src/security/data-retention.md diff --git a/sites/friday/src/security/project-isolation.md b/sites/upsun/src/security/project-isolation.md similarity index 100% rename from sites/friday/src/security/project-isolation.md rename to sites/upsun/src/security/project-isolation.md diff --git a/sites/friday/src/security/waf.md b/sites/upsun/src/security/waf.md similarity index 100% rename from sites/friday/src/security/waf.md rename to sites/upsun/src/security/waf.md diff --git a/sites/friday/static/files/fetch/.gitignore b/sites/upsun/static/files/fetch/.gitignore similarity index 100% rename from sites/friday/static/files/fetch/.gitignore rename to sites/upsun/static/files/fetch/.gitignore diff --git a/sites/friday/static/files/fetch/examples/golang/memcached b/sites/upsun/static/files/fetch/examples/golang/memcached similarity index 100% rename from sites/friday/static/files/fetch/examples/golang/memcached rename to sites/upsun/static/files/fetch/examples/golang/memcached diff --git a/sites/friday/static/files/fetch/examples/golang/mongodb b/sites/upsun/static/files/fetch/examples/golang/mongodb similarity index 100% rename from sites/friday/static/files/fetch/examples/golang/mongodb rename to sites/upsun/static/files/fetch/examples/golang/mongodb diff --git a/sites/friday/static/files/fetch/examples/golang/mysql b/sites/upsun/static/files/fetch/examples/golang/mysql similarity index 100% rename from sites/friday/static/files/fetch/examples/golang/mysql rename to sites/upsun/static/files/fetch/examples/golang/mysql diff --git a/sites/friday/static/files/fetch/examples/golang/postgresql b/sites/upsun/static/files/fetch/examples/golang/postgresql similarity index 100% rename from sites/friday/static/files/fetch/examples/golang/postgresql rename to sites/upsun/static/files/fetch/examples/golang/postgresql diff --git a/sites/friday/static/files/fetch/examples/golang/rabbitmq b/sites/upsun/static/files/fetch/examples/golang/rabbitmq similarity index 100% rename from sites/friday/static/files/fetch/examples/golang/rabbitmq rename to sites/upsun/static/files/fetch/examples/golang/rabbitmq diff --git a/sites/friday/static/files/fetch/examples/golang/solr b/sites/upsun/static/files/fetch/examples/golang/solr similarity index 100% rename from sites/friday/static/files/fetch/examples/golang/solr rename to sites/upsun/static/files/fetch/examples/golang/solr diff --git a/sites/friday/static/files/fetch/examples/java/elasticsearch b/sites/upsun/static/files/fetch/examples/java/elasticsearch similarity index 100% rename from sites/friday/static/files/fetch/examples/java/elasticsearch rename to sites/upsun/static/files/fetch/examples/java/elasticsearch diff --git a/sites/friday/static/files/fetch/examples/java/kafka b/sites/upsun/static/files/fetch/examples/java/kafka similarity index 100% rename from sites/friday/static/files/fetch/examples/java/kafka rename to sites/upsun/static/files/fetch/examples/java/kafka diff --git a/sites/friday/static/files/fetch/examples/java/memcached b/sites/upsun/static/files/fetch/examples/java/memcached similarity index 100% rename from sites/friday/static/files/fetch/examples/java/memcached rename to sites/upsun/static/files/fetch/examples/java/memcached diff --git a/sites/friday/static/files/fetch/examples/java/mongodb b/sites/upsun/static/files/fetch/examples/java/mongodb similarity index 100% rename from sites/friday/static/files/fetch/examples/java/mongodb rename to sites/upsun/static/files/fetch/examples/java/mongodb diff --git a/sites/friday/static/files/fetch/examples/java/mysql b/sites/upsun/static/files/fetch/examples/java/mysql similarity index 100% rename from sites/friday/static/files/fetch/examples/java/mysql rename to sites/upsun/static/files/fetch/examples/java/mysql diff --git a/sites/friday/static/files/fetch/examples/java/postgresql b/sites/upsun/static/files/fetch/examples/java/postgresql similarity index 100% rename from sites/friday/static/files/fetch/examples/java/postgresql rename to sites/upsun/static/files/fetch/examples/java/postgresql diff --git a/sites/friday/static/files/fetch/examples/java/rabbitmq b/sites/upsun/static/files/fetch/examples/java/rabbitmq similarity index 100% rename from sites/friday/static/files/fetch/examples/java/rabbitmq rename to sites/upsun/static/files/fetch/examples/java/rabbitmq diff --git a/sites/friday/static/files/fetch/examples/java/redis b/sites/upsun/static/files/fetch/examples/java/redis similarity index 100% rename from sites/friday/static/files/fetch/examples/java/redis rename to sites/upsun/static/files/fetch/examples/java/redis diff --git a/sites/friday/static/files/fetch/examples/java/solr b/sites/upsun/static/files/fetch/examples/java/solr similarity index 100% rename from sites/friday/static/files/fetch/examples/java/solr rename to sites/upsun/static/files/fetch/examples/java/solr diff --git a/sites/friday/static/files/fetch/examples/nodejs/elasticsearch b/sites/upsun/static/files/fetch/examples/nodejs/elasticsearch similarity index 100% rename from sites/friday/static/files/fetch/examples/nodejs/elasticsearch rename to sites/upsun/static/files/fetch/examples/nodejs/elasticsearch diff --git a/sites/friday/static/files/fetch/examples/nodejs/memcached b/sites/upsun/static/files/fetch/examples/nodejs/memcached similarity index 100% rename from sites/friday/static/files/fetch/examples/nodejs/memcached rename to sites/upsun/static/files/fetch/examples/nodejs/memcached diff --git a/sites/friday/static/files/fetch/examples/nodejs/mongodb b/sites/upsun/static/files/fetch/examples/nodejs/mongodb similarity index 100% rename from sites/friday/static/files/fetch/examples/nodejs/mongodb rename to sites/upsun/static/files/fetch/examples/nodejs/mongodb diff --git a/sites/friday/static/files/fetch/examples/nodejs/mysql b/sites/upsun/static/files/fetch/examples/nodejs/mysql similarity index 100% rename from sites/friday/static/files/fetch/examples/nodejs/mysql rename to sites/upsun/static/files/fetch/examples/nodejs/mysql diff --git a/sites/friday/static/files/fetch/examples/nodejs/postgresql b/sites/upsun/static/files/fetch/examples/nodejs/postgresql similarity index 100% rename from sites/friday/static/files/fetch/examples/nodejs/postgresql rename to sites/upsun/static/files/fetch/examples/nodejs/postgresql diff --git a/sites/friday/static/files/fetch/examples/nodejs/redis b/sites/upsun/static/files/fetch/examples/nodejs/redis similarity index 100% rename from sites/friday/static/files/fetch/examples/nodejs/redis rename to sites/upsun/static/files/fetch/examples/nodejs/redis diff --git a/sites/friday/static/files/fetch/examples/nodejs/solr b/sites/upsun/static/files/fetch/examples/nodejs/solr similarity index 100% rename from sites/friday/static/files/fetch/examples/nodejs/solr rename to sites/upsun/static/files/fetch/examples/nodejs/solr diff --git a/sites/friday/static/files/fetch/examples/php/elasticsearch b/sites/upsun/static/files/fetch/examples/php/elasticsearch similarity index 100% rename from sites/friday/static/files/fetch/examples/php/elasticsearch rename to sites/upsun/static/files/fetch/examples/php/elasticsearch diff --git a/sites/friday/static/files/fetch/examples/php/influxdb b/sites/upsun/static/files/fetch/examples/php/influxdb similarity index 100% rename from sites/friday/static/files/fetch/examples/php/influxdb rename to sites/upsun/static/files/fetch/examples/php/influxdb diff --git a/sites/friday/static/files/fetch/examples/php/memcached b/sites/upsun/static/files/fetch/examples/php/memcached similarity index 100% rename from sites/friday/static/files/fetch/examples/php/memcached rename to sites/upsun/static/files/fetch/examples/php/memcached diff --git a/sites/friday/static/files/fetch/examples/php/mongodb b/sites/upsun/static/files/fetch/examples/php/mongodb similarity index 100% rename from sites/friday/static/files/fetch/examples/php/mongodb rename to sites/upsun/static/files/fetch/examples/php/mongodb diff --git a/sites/friday/static/files/fetch/examples/php/mysql b/sites/upsun/static/files/fetch/examples/php/mysql similarity index 100% rename from sites/friday/static/files/fetch/examples/php/mysql rename to sites/upsun/static/files/fetch/examples/php/mysql diff --git a/sites/friday/static/files/fetch/examples/php/postgresql b/sites/upsun/static/files/fetch/examples/php/postgresql similarity index 100% rename from sites/friday/static/files/fetch/examples/php/postgresql rename to sites/upsun/static/files/fetch/examples/php/postgresql diff --git a/sites/friday/static/files/fetch/examples/php/rabbitmq b/sites/upsun/static/files/fetch/examples/php/rabbitmq similarity index 100% rename from sites/friday/static/files/fetch/examples/php/rabbitmq rename to sites/upsun/static/files/fetch/examples/php/rabbitmq diff --git a/sites/friday/static/files/fetch/examples/php/redis b/sites/upsun/static/files/fetch/examples/php/redis similarity index 100% rename from sites/friday/static/files/fetch/examples/php/redis rename to sites/upsun/static/files/fetch/examples/php/redis diff --git a/sites/friday/static/files/fetch/examples/php/solr b/sites/upsun/static/files/fetch/examples/php/solr similarity index 100% rename from sites/friday/static/files/fetch/examples/php/solr rename to sites/upsun/static/files/fetch/examples/php/solr diff --git a/sites/friday/static/files/fetch/examples/python/elasticsearch b/sites/upsun/static/files/fetch/examples/python/elasticsearch similarity index 100% rename from sites/friday/static/files/fetch/examples/python/elasticsearch rename to sites/upsun/static/files/fetch/examples/python/elasticsearch diff --git a/sites/friday/static/files/fetch/examples/python/kafka b/sites/upsun/static/files/fetch/examples/python/kafka similarity index 100% rename from sites/friday/static/files/fetch/examples/python/kafka rename to sites/upsun/static/files/fetch/examples/python/kafka diff --git a/sites/friday/static/files/fetch/examples/python/memcached b/sites/upsun/static/files/fetch/examples/python/memcached similarity index 100% rename from sites/friday/static/files/fetch/examples/python/memcached rename to sites/upsun/static/files/fetch/examples/python/memcached diff --git a/sites/friday/static/files/fetch/examples/python/mongodb b/sites/upsun/static/files/fetch/examples/python/mongodb similarity index 100% rename from sites/friday/static/files/fetch/examples/python/mongodb rename to sites/upsun/static/files/fetch/examples/python/mongodb diff --git a/sites/friday/static/files/fetch/examples/python/mysql b/sites/upsun/static/files/fetch/examples/python/mysql similarity index 100% rename from sites/friday/static/files/fetch/examples/python/mysql rename to sites/upsun/static/files/fetch/examples/python/mysql diff --git a/sites/friday/static/files/fetch/examples/python/postgresql b/sites/upsun/static/files/fetch/examples/python/postgresql similarity index 100% rename from sites/friday/static/files/fetch/examples/python/postgresql rename to sites/upsun/static/files/fetch/examples/python/postgresql diff --git a/sites/friday/static/files/fetch/examples/python/rabbitmq b/sites/upsun/static/files/fetch/examples/python/rabbitmq similarity index 100% rename from sites/friday/static/files/fetch/examples/python/rabbitmq rename to sites/upsun/static/files/fetch/examples/python/rabbitmq diff --git a/sites/friday/static/files/fetch/examples/python/redis b/sites/upsun/static/files/fetch/examples/python/redis similarity index 100% rename from sites/friday/static/files/fetch/examples/python/redis rename to sites/upsun/static/files/fetch/examples/python/redis diff --git a/sites/friday/static/files/fetch/examples/python/solr b/sites/upsun/static/files/fetch/examples/python/solr similarity index 100% rename from sites/friday/static/files/fetch/examples/python/solr rename to sites/upsun/static/files/fetch/examples/python/solr diff --git a/sites/friday/static/files/fetch/examples/relationships/elasticsearch b/sites/upsun/static/files/fetch/examples/relationships/elasticsearch similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/elasticsearch rename to sites/upsun/static/files/fetch/examples/relationships/elasticsearch diff --git a/sites/friday/static/files/fetch/examples/relationships/headlesschrome b/sites/upsun/static/files/fetch/examples/relationships/headlesschrome similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/headlesschrome rename to sites/upsun/static/files/fetch/examples/relationships/headlesschrome diff --git a/sites/friday/static/files/fetch/examples/relationships/influxdb b/sites/upsun/static/files/fetch/examples/relationships/influxdb similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/influxdb rename to sites/upsun/static/files/fetch/examples/relationships/influxdb diff --git a/sites/friday/static/files/fetch/examples/relationships/kafka b/sites/upsun/static/files/fetch/examples/relationships/kafka similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/kafka rename to sites/upsun/static/files/fetch/examples/relationships/kafka diff --git a/sites/friday/static/files/fetch/examples/relationships/memcached b/sites/upsun/static/files/fetch/examples/relationships/memcached similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/memcached rename to sites/upsun/static/files/fetch/examples/relationships/memcached diff --git a/sites/friday/static/files/fetch/examples/relationships/mongodb b/sites/upsun/static/files/fetch/examples/relationships/mongodb similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/mongodb rename to sites/upsun/static/files/fetch/examples/relationships/mongodb diff --git a/sites/friday/static/files/fetch/examples/relationships/mysql b/sites/upsun/static/files/fetch/examples/relationships/mysql similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/mysql rename to sites/upsun/static/files/fetch/examples/relationships/mysql diff --git a/sites/friday/static/files/fetch/examples/relationships/opensearch b/sites/upsun/static/files/fetch/examples/relationships/opensearch similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/opensearch rename to sites/upsun/static/files/fetch/examples/relationships/opensearch diff --git a/sites/friday/static/files/fetch/examples/relationships/oraclemysql b/sites/upsun/static/files/fetch/examples/relationships/oraclemysql similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/oraclemysql rename to sites/upsun/static/files/fetch/examples/relationships/oraclemysql diff --git a/sites/friday/static/files/fetch/examples/relationships/postgresql b/sites/upsun/static/files/fetch/examples/relationships/postgresql similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/postgresql rename to sites/upsun/static/files/fetch/examples/relationships/postgresql diff --git a/sites/friday/static/files/fetch/examples/relationships/rabbitmq b/sites/upsun/static/files/fetch/examples/relationships/rabbitmq similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/rabbitmq rename to sites/upsun/static/files/fetch/examples/relationships/rabbitmq diff --git a/sites/friday/static/files/fetch/examples/relationships/redis b/sites/upsun/static/files/fetch/examples/relationships/redis similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/redis rename to sites/upsun/static/files/fetch/examples/relationships/redis diff --git a/sites/friday/static/files/fetch/examples/relationships/solr b/sites/upsun/static/files/fetch/examples/relationships/solr similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/solr rename to sites/upsun/static/files/fetch/examples/relationships/solr diff --git a/sites/friday/static/files/fetch/examples/relationships/vault-kms b/sites/upsun/static/files/fetch/examples/relationships/vault-kms similarity index 100% rename from sites/friday/static/files/fetch/examples/relationships/vault-kms rename to sites/upsun/static/files/fetch/examples/relationships/vault-kms diff --git a/sites/friday/static/images/billing/billing-alert-button.png b/sites/upsun/static/images/billing/billing-alert-button.png similarity index 100% rename from sites/friday/static/images/billing/billing-alert-button.png rename to sites/upsun/static/images/billing/billing-alert-button.png diff --git a/sites/friday/static/images/billing/invoices-tab.png b/sites/upsun/static/images/billing/invoices-tab.png similarity index 100% rename from sites/friday/static/images/billing/invoices-tab.png rename to sites/upsun/static/images/billing/invoices-tab.png diff --git a/sites/friday/static/images/billing/organization-billing.png b/sites/upsun/static/images/billing/organization-billing.png similarity index 100% rename from sites/friday/static/images/billing/organization-billing.png rename to sites/upsun/static/images/billing/organization-billing.png diff --git a/sites/friday/static/images/billing/project-billing.png b/sites/upsun/static/images/billing/project-billing.png similarity index 100% rename from sites/friday/static/images/billing/project-billing.png rename to sites/upsun/static/images/billing/project-billing.png diff --git a/sites/friday/static/images/console/create-project.png b/sites/upsun/static/images/console/create-project.png similarity index 100% rename from sites/friday/static/images/console/create-project.png rename to sites/upsun/static/images/console/create-project.png diff --git a/sites/friday/static/images/console/first-fail.png b/sites/upsun/static/images/console/first-fail.png similarity index 100% rename from sites/friday/static/images/console/first-fail.png rename to sites/upsun/static/images/console/first-fail.png diff --git a/sites/friday/static/images/console/settings-access-users.png b/sites/upsun/static/images/console/settings-access-users.png similarity index 100% rename from sites/friday/static/images/console/settings-access-users.png rename to sites/upsun/static/images/console/settings-access-users.png diff --git a/sites/friday/static/images/console/settings-general.png b/sites/upsun/static/images/console/settings-general.png similarity index 100% rename from sites/friday/static/images/console/settings-general.png rename to sites/upsun/static/images/console/settings-general.png diff --git a/sites/friday/static/images/console/upsun-console-main-view.png b/sites/upsun/static/images/console/upsun-console-main-view.png similarity index 100% rename from sites/friday/static/images/console/upsun-console-main-view.png rename to sites/upsun/static/images/console/upsun-console-main-view.png diff --git a/sites/friday/static/images/favicon.ico b/sites/upsun/static/images/favicon.ico similarity index 100% rename from sites/friday/static/images/favicon.ico rename to sites/upsun/static/images/favicon.ico diff --git a/sites/friday/static/images/flexible-resources/apps-services-tree.png b/sites/upsun/static/images/flexible-resources/apps-services-tree.png similarity index 100% rename from sites/friday/static/images/flexible-resources/apps-services-tree.png rename to sites/upsun/static/images/flexible-resources/apps-services-tree.png diff --git a/sites/friday/static/images/flexible-resources/check-container-profile.png b/sites/upsun/static/images/flexible-resources/check-container-profile.png similarity index 100% rename from sites/friday/static/images/flexible-resources/check-container-profile.png rename to sites/upsun/static/images/flexible-resources/check-container-profile.png diff --git a/sites/friday/static/images/flexible-resources/configure-button-project-card.png b/sites/upsun/static/images/flexible-resources/configure-button-project-card.png similarity index 100% rename from sites/friday/static/images/flexible-resources/configure-button-project-card.png rename to sites/upsun/static/images/flexible-resources/configure-button-project-card.png diff --git a/sites/friday/static/images/flexible-resources/configure-flexible-resources.png b/sites/upsun/static/images/flexible-resources/configure-flexible-resources.png similarity index 100% rename from sites/friday/static/images/flexible-resources/configure-flexible-resources.png rename to sites/upsun/static/images/flexible-resources/configure-flexible-resources.png diff --git a/sites/friday/static/images/guides/laravel-ify.png b/sites/upsun/static/images/guides/laravel-ify.png similarity index 100% rename from sites/friday/static/images/guides/laravel-ify.png rename to sites/upsun/static/images/guides/laravel-ify.png diff --git a/sites/friday/static/images/guides/resources-cli-picker.gif b/sites/upsun/static/images/guides/resources-cli-picker.gif similarity index 100% rename from sites/friday/static/images/guides/resources-cli-picker.gif rename to sites/upsun/static/images/guides/resources-cli-picker.gif diff --git a/sites/friday/static/images/logo.svg b/sites/upsun/static/images/logo.svg similarity index 100% rename from sites/friday/static/images/logo.svg rename to sites/upsun/static/images/logo.svg diff --git a/sites/friday/static/images/logo_vertical.svg b/sites/upsun/static/images/logo_vertical.svg similarity index 100% rename from sites/friday/static/images/logo_vertical.svg rename to sites/upsun/static/images/logo_vertical.svg diff --git a/sites/friday/static/images/observability/cont-prof-color-code.png b/sites/upsun/static/images/observability/cont-prof-color-code.png similarity index 100% rename from sites/friday/static/images/observability/cont-prof-color-code.png rename to sites/upsun/static/images/observability/cont-prof-color-code.png diff --git a/sites/friday/static/images/observability/filtering-upsun.png b/sites/upsun/static/images/observability/filtering-upsun.png similarity index 100% rename from sites/friday/static/images/observability/filtering-upsun.png rename to sites/upsun/static/images/observability/filtering-upsun.png diff --git a/sites/friday/static/images/observability/flame-graph-clicked.png b/sites/upsun/static/images/observability/flame-graph-clicked.png similarity index 100% rename from sites/friday/static/images/observability/flame-graph-clicked.png rename to sites/upsun/static/images/observability/flame-graph-clicked.png diff --git a/sites/friday/static/images/observability/flame-graph-hover.png b/sites/upsun/static/images/observability/flame-graph-hover.png similarity index 100% rename from sites/friday/static/images/observability/flame-graph-hover.png rename to sites/upsun/static/images/observability/flame-graph-hover.png diff --git a/sites/friday/static/images/observability/flame-graph.png b/sites/upsun/static/images/observability/flame-graph.png similarity index 100% rename from sites/friday/static/images/observability/flame-graph.png rename to sites/upsun/static/images/observability/flame-graph.png diff --git a/sites/friday/static/images/observability/metrics/mysql-container.png b/sites/upsun/static/images/observability/metrics/mysql-container.png similarity index 100% rename from sites/friday/static/images/observability/metrics/mysql-container.png rename to sites/upsun/static/images/observability/metrics/mysql-container.png diff --git a/sites/friday/static/images/observability/metrics/redis-container.png b/sites/upsun/static/images/observability/metrics/redis-container.png similarity index 100% rename from sites/friday/static/images/observability/metrics/redis-container.png rename to sites/upsun/static/images/observability/metrics/redis-container.png diff --git a/sites/friday/static/images/observability/metrics/service-container-minimized.png b/sites/upsun/static/images/observability/metrics/service-container-minimized.png similarity index 100% rename from sites/friday/static/images/observability/metrics/service-container-minimized.png rename to sites/upsun/static/images/observability/metrics/service-container-minimized.png diff --git a/sites/friday/static/images/observability/sandwich-view.png b/sites/upsun/static/images/observability/sandwich-view.png similarity index 100% rename from sites/friday/static/images/observability/sandwich-view.png rename to sites/upsun/static/images/observability/sandwich-view.png diff --git a/sites/friday/static/images/observability/table-view.png b/sites/upsun/static/images/observability/table-view.png similarity index 100% rename from sites/friday/static/images/observability/table-view.png rename to sites/upsun/static/images/observability/table-view.png diff --git a/sites/friday/static/scripts/xss/.babelrc b/sites/upsun/static/scripts/xss/.babelrc similarity index 100% rename from sites/friday/static/scripts/xss/.babelrc rename to sites/upsun/static/scripts/xss/.babelrc diff --git a/sites/friday/static/scripts/xss/.eslintrc.json b/sites/upsun/static/scripts/xss/.eslintrc.json similarity index 100% rename from sites/friday/static/scripts/xss/.eslintrc.json rename to sites/upsun/static/scripts/xss/.eslintrc.json diff --git a/sites/friday/static/scripts/xss/.gitignore b/sites/upsun/static/scripts/xss/.gitignore similarity index 100% rename from sites/friday/static/scripts/xss/.gitignore rename to sites/upsun/static/scripts/xss/.gitignore diff --git a/sites/friday/static/scripts/xss/.gitkeep b/sites/upsun/static/scripts/xss/.gitkeep similarity index 100% rename from sites/friday/static/scripts/xss/.gitkeep rename to sites/upsun/static/scripts/xss/.gitkeep diff --git a/sites/friday/static/scripts/xss/README.md b/sites/upsun/static/scripts/xss/README.md similarity index 100% rename from sites/friday/static/scripts/xss/README.md rename to sites/upsun/static/scripts/xss/README.md diff --git a/sites/friday/static/scripts/xss/dist/.gitkeep b/sites/upsun/static/scripts/xss/dist/.gitkeep similarity index 100% rename from sites/friday/static/scripts/xss/dist/.gitkeep rename to sites/upsun/static/scripts/xss/dist/.gitkeep diff --git a/sites/friday/static/scripts/xss/dist/config/.gitkeep b/sites/upsun/static/scripts/xss/dist/config/.gitkeep similarity index 100% rename from sites/friday/static/scripts/xss/dist/config/.gitkeep rename to sites/upsun/static/scripts/xss/dist/config/.gitkeep diff --git a/sites/friday/static/scripts/xss/package.json b/sites/upsun/static/scripts/xss/package.json similarity index 100% rename from sites/friday/static/scripts/xss/package.json rename to sites/upsun/static/scripts/xss/package.json diff --git a/sites/friday/static/scripts/xss/src/App.js b/sites/upsun/static/scripts/xss/src/App.js similarity index 100% rename from sites/friday/static/scripts/xss/src/App.js rename to sites/upsun/static/scripts/xss/src/App.js diff --git a/sites/friday/static/scripts/xss/src/components/Suggestions.js b/sites/upsun/static/scripts/xss/src/components/Suggestions.js similarity index 100% rename from sites/friday/static/scripts/xss/src/components/Suggestions.js rename to sites/upsun/static/scripts/xss/src/components/Suggestions.js diff --git a/sites/friday/static/scripts/xss/src/components/SuggestionsPrimary.js b/sites/upsun/static/scripts/xss/src/components/SuggestionsPrimary.js similarity index 100% rename from sites/friday/static/scripts/xss/src/components/SuggestionsPrimary.js rename to sites/upsun/static/scripts/xss/src/components/SuggestionsPrimary.js diff --git a/sites/friday/static/scripts/xss/src/containers/Search.js b/sites/upsun/static/scripts/xss/src/containers/Search.js similarity index 100% rename from sites/friday/static/scripts/xss/src/containers/Search.js rename to sites/upsun/static/scripts/xss/src/containers/Search.js diff --git a/sites/friday/static/scripts/xss/src/index.js b/sites/upsun/static/scripts/xss/src/index.js similarity index 100% rename from sites/friday/static/scripts/xss/src/index.js rename to sites/upsun/static/scripts/xss/src/index.js diff --git a/sites/friday/static/scripts/xss/webpack.common.js b/sites/upsun/static/scripts/xss/webpack.common.js similarity index 100% rename from sites/friday/static/scripts/xss/webpack.common.js rename to sites/upsun/static/scripts/xss/webpack.common.js diff --git a/sites/friday/static/scripts/xss/webpack.dev.js b/sites/upsun/static/scripts/xss/webpack.dev.js similarity index 100% rename from sites/friday/static/scripts/xss/webpack.dev.js rename to sites/upsun/static/scripts/xss/webpack.dev.js diff --git a/sites/friday/static/scripts/xss/webpack.prod.js b/sites/upsun/static/scripts/xss/webpack.prod.js similarity index 100% rename from sites/friday/static/scripts/xss/webpack.prod.js rename to sites/upsun/static/scripts/xss/webpack.prod.js diff --git a/sites/friday/utils/common.mjs b/sites/upsun/utils/common.mjs similarity index 100% rename from sites/friday/utils/common.mjs rename to sites/upsun/utils/common.mjs diff --git a/sites/friday/utils/fetch-examples.mjs b/sites/upsun/utils/fetch-examples.mjs similarity index 100% rename from sites/friday/utils/fetch-examples.mjs rename to sites/upsun/utils/fetch-examples.mjs diff --git a/sites/friday/utils/fetchTemplates.mjs b/sites/upsun/utils/fetchTemplates.mjs similarity index 100% rename from sites/friday/utils/fetchTemplates.mjs rename to sites/upsun/utils/fetchTemplates.mjs diff --git a/sites/friday/utils/updateExampleConfigFiles.js b/sites/upsun/utils/updateExampleConfigFiles.js similarity index 100% rename from sites/friday/utils/updateExampleConfigFiles.js rename to sites/upsun/utils/updateExampleConfigFiles.js diff --git a/themes/psh-docs/layouts/shortcodes/version/specific.html b/themes/psh-docs/layouts/shortcodes/version/specific.html index ec10ff864a..96441acb4d 100644 --- a/themes/psh-docs/layouts/shortcodes/version/specific.html +++ b/themes/psh-docs/layouts/shortcodes/version/specific.html @@ -5,7 +5,7 @@ - + {{- $page := .Page -}} {{- $version := .Site.Params.vendor.config.version -}} From 77bf5964f682fe3b0f022d41b5f9abf80c111cdc Mon Sep 17 00:00:00 2001 From: Chad Carlson Date: Mon, 25 Mar 2024 15:21:17 -0400 Subject: [PATCH 08/24] Update regions.md (#3892) --- sites/upsun/src/development/regions.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/sites/upsun/src/development/regions.md b/sites/upsun/src/development/regions.md index 906bcf3bb1..b613f0e35b 100644 --- a/sites/upsun/src/development/regions.md +++ b/sites/upsun/src/development/regions.md @@ -29,6 +29,23 @@ For example, to get a list of the regions and their carbon intensities, run the See all available information in the [API documentation](https://api.platform.sh/docs/#tag/Regions). +### Greener Region Discount + +You can get a 3% discount on your resource usage if you host your project in one of Upsun's eco-friendly regions: + +- Quebec, Canada (`ca-central-1`), +- Stockholm, Sweden (`eu-north-1`), +- Paris, France (`francecentral`), +- OVH (`gra7`), +- Quincy, Washington (`westus2`), +- Zurich, Switzerland (`europe-west6`). + +The 3% discount covers application CPU, application memory, service CPU, service memory, and build resources. +It **doesn’t** apply to the project fee or other billing aspects. +It can be combined with other offers or discounts. + +See [more information on the greener region discount](https://platform.sh/company/press/a-first-for-cloud-industry-platformsh-greener-region-discount/). + ## Region availability The regions listed here may be different from those available to you when you create a new project. From 6d8576845454e4729d70f9a13ede8044624f4524 Mon Sep 17 00:00:00 2001 From: chadcarlson Date: Mon, 25 Mar 2024 15:53:17 -0400 Subject: [PATCH 09/24] allow checks & environments for PRs against ga-staging --- .github/workflows/build-from-fork.yaml | 2 +- .github/workflows/check-labels.yaml | 2 +- .github/workflows/get-pr-info.yaml | 2 +- .github/workflows/linting.yaml | 2 +- .github/workflows/manage-environment.yaml | 2 +- .github/workflows/pr-check-links.yaml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-from-fork.yaml b/.github/workflows/build-from-fork.yaml index 0cb9cfa2a8..c72309ba44 100644 --- a/.github/workflows/build-from-fork.yaml +++ b/.github/workflows/build-from-fork.yaml @@ -2,7 +2,7 @@ name: Build from fork on: pull_request_target: - branches: [main] + branches: [main, ga-staging] types: [labeled,unlabeled,synchronize] env: diff --git a/.github/workflows/check-labels.yaml b/.github/workflows/check-labels.yaml index 320ad730f1..d7dce15438 100644 --- a/.github/workflows/check-labels.yaml +++ b/.github/workflows/check-labels.yaml @@ -1,7 +1,7 @@ name: Check labels on: pull_request_target: - branches: [main] + branches: [main, ga-staging] types: [labeled,opened,reopened,synchronize] env: diff --git a/.github/workflows/get-pr-info.yaml b/.github/workflows/get-pr-info.yaml index f6e7037cca..69e90e3221 100644 --- a/.github/workflows/get-pr-info.yaml +++ b/.github/workflows/get-pr-info.yaml @@ -1,7 +1,7 @@ name: Get info on PR on: pull_request_target: - branches: [main] + branches: [main, ga-staging] types: [labeled,opened,reopened,synchronize] env: diff --git a/.github/workflows/linting.yaml b/.github/workflows/linting.yaml index 2fb604ae2a..4d4a0efbcb 100644 --- a/.github/workflows/linting.yaml +++ b/.github/workflows/linting.yaml @@ -1,7 +1,7 @@ name: Linting on: pull_request_target: - branches: [main] + branches: [main, ga-staging] types: [labeled,opened,reopened,synchronize] jobs: diff --git a/.github/workflows/manage-environment.yaml b/.github/workflows/manage-environment.yaml index 71c97afd75..5a6e07f61c 100644 --- a/.github/workflows/manage-environment.yaml +++ b/.github/workflows/manage-environment.yaml @@ -1,7 +1,7 @@ name: Manage environment on: pull_request_target: - branches: [main] + branches: [main, ga-staging] types: - opened - reopened diff --git a/.github/workflows/pr-check-links.yaml b/.github/workflows/pr-check-links.yaml index 757701a731..be07b60438 100644 --- a/.github/workflows/pr-check-links.yaml +++ b/.github/workflows/pr-check-links.yaml @@ -1,7 +1,7 @@ name: Check internal links on: pull_request: - branches: [main] + branches: [main, ga-staging] types: [opened,reopened,synchronize,labeled,unlabeled] From 8b104d71b5000376d8b51e2cdcc2b4249d5e5c73 Mon Sep 17 00:00:00 2001 From: Chad Carlson Date: Tue, 26 Mar 2024 09:24:29 -0400 Subject: [PATCH 10/24] Add framework section landing page.' (#3894) --- .../layouts/shortcodes/frameworks-landing.md | 22 +++++++++++++++++++ sites/upsun/src/_index.md | 6 +---- sites/upsun/src/get-started/stacks/_index.md | 11 +++++++++- 3 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 sites/upsun/layouts/shortcodes/frameworks-landing.md diff --git a/sites/upsun/layouts/shortcodes/frameworks-landing.md b/sites/upsun/layouts/shortcodes/frameworks-landing.md new file mode 100644 index 0000000000..bb648d02d4 --- /dev/null +++ b/sites/upsun/layouts/shortcodes/frameworks-landing.md @@ -0,0 +1,22 @@ +{{ $python := "[Django](/get-started/stacks/django.md)
[Flask](/get-started/stacks/flask.md)" }} +{{ $php := "[Symfony](/get-started/stacks/symfony/_index.md)
[Laravel](/get-started/stacks/laravel.md)" }} +{{ $nodejs := "[Express](/get-started/stacks/express.md)
[Next.js](/get-started/stacks/nextjs.md)
[Strapi](/get-started/stacks/strapi.md)" }} + + + + + + + + + + + + + + + + + + +
LanguageFrameworks
{{ "[Python](/languages/python/_index.md)" | .Page.RenderString }}{{ $python | .Page.RenderString }}
{{ "[PHP](/languages/php/_index.md) " | .Page.RenderString }}{{ $php | .Page.RenderString }}
{{ "[Javascript/Node.js](/languages/nodejs/_index.md)" | .Page.RenderString }}{{ $nodejs | .Page.RenderString }}
diff --git a/sites/upsun/src/_index.md b/sites/upsun/src/_index.md index 4be45ecf1d..0d9d761b8b 100644 --- a/sites/upsun/src/_index.md +++ b/sites/upsun/src/_index.md @@ -48,11 +48,7 @@ After going through the **Get started** section, you may want to know more about Now that you understand the basic rules of {{% vendor/name %}}, you're likely ready to deploy your own custom code in a chosen framework. The **Frameworks** section is a collection of framework-specific how-to guides - from best practices to configuration, local development, and more. -| Language | Frameworks | -| :---------------- |:----------------------------------------------------------------------------------------------------------------------------| -| [Python](/languages/python/_index.md) | [Django](/get-started/stacks/django.md)
[Flask](/get-started/stacks/flask.md) | -| [PHP](/languages/php/_index.md) | [Symfony](/get-started/stacks/symfony/_index.md)
[Laravel](/get-started/stacks/laravel.md) | -| [Javascript/Node.js](/languages/nodejs/_index.md) | [Express](/get-started/stacks/express.md)
[Next.js](/get-started/stacks/nextjs.md)
[Strapi](/get-started/stacks/strapi.md) | +{{< frameworks-landing >}} ### Reference diff --git a/sites/upsun/src/get-started/stacks/_index.md b/sites/upsun/src/get-started/stacks/_index.md index cfa814898d..18a7dbeb22 100644 --- a/sites/upsun/src/get-started/stacks/_index.md +++ b/sites/upsun/src/get-started/stacks/_index.md @@ -6,4 +6,13 @@ layout: single # - /get-started/_index.md --- -{{< get-started/steps >}} +Upsun aims to provide sane defaults out-of-the-box, while exposing a high degree of flexibility when you are configuring your projects, environments, and applications. +Because of this, you can deploy most frameworks on Upsun. +Below are some common examples sorted by programming language. + +{{< note theme="info" >}} +Before you start, check out the [Upsun demo app](https://console.upsun.com/projects/create-project) and the main [Getting started guide](/get-started/here). +They provide all the core concepts and common commands you need to know before using the following materials. +{{< /note >}} + +{{< frameworks-landing >}} From a264a2c8fd5f629a762e03a9e151b947f31aa3f8 Mon Sep 17 00:00:00 2001 From: Chad Carlson Date: Thu, 28 Mar 2024 08:48:00 -0400 Subject: [PATCH 11/24] Update GS link + wrongly inherited content. (#3897) --- sites/upsun/config/_default/config.yaml | 54 ------------------- .../src/learn/overview/yaml/yaml-structure.md | 2 +- 2 files changed, 1 insertion(+), 55 deletions(-) diff --git a/sites/upsun/config/_default/config.yaml b/sites/upsun/config/_default/config.yaml index d792a4a3d0..bd82a350bb 100644 --- a/sites/upsun/config/_default/config.yaml +++ b/sites/upsun/config/_default/config.yaml @@ -50,60 +50,6 @@ module: - source: "../../shared/data" target: "data" - - source: "../platform/src" - target: "content" - excludeFiles: - - "_index.md" - - - "add-services/*" - # - "add-services/network-storage.md" - - - "administration/*" - - - "changelog/*" - - - "create-apps/*" - # - "create-apps/upgrading.md" - # - "create-apps/workers.md" - # - "create-apps/flexible-resources.md" - - - "dedicated-gen-2/*" - - - "dedicated-gen-3/*" - - - "define-routes/*" - - - "development/*" - - - "domains/*" - - - "environments/*" - - - "feedback/*" - - - "get-started/*" - - - "glossary/*" - - - "guides/*" - - - "increase-observability/*" - - - "integrations/*" - - - "languages/*" - #- "languages/java/frameworks.md" - - - "learn/*" - - - "projects/*" - - - "registry/*" - - - "security/*" - - lang: "en" - - source: "../platform/static/images" target: "static/images" - source: "../platform/static/videos" diff --git a/sites/upsun/src/learn/overview/yaml/yaml-structure.md b/sites/upsun/src/learn/overview/yaml/yaml-structure.md index 9c3723655e..7954f23ea3 100644 --- a/sites/upsun/src/learn/overview/yaml/yaml-structure.md +++ b/sites/upsun/src/learn/overview/yaml/yaml-structure.md @@ -9,7 +9,7 @@ In addition to the [basic functions you should be familiar with](./what-is-yaml. ## YAML file location -When you run the [`upsun project:init` command](/get-started/express/_index.md#configure-your-project), a default ``config.yaml`` file is generated in the `.upsun` folder. It contains the minimum default configuration based on your detected local stack. +When you run the [`upsun project:init` command](/get-started/here/configure/_index.md), a default ``config.yaml`` file is generated in the `.upsun` folder. It contains the minimum default configuration based on your detected local stack. This YAML file is located in your ``.upsun`` directory, at the root of your project source code, and is a good starting point before customization. ```bash From 15fcf3186443eb2a561465d7139fc7c469487b6d Mon Sep 17 00:00:00 2001 From: AnouckColson <113913013+AnouckColson@users.noreply.github.com> Date: Thu, 28 Mar 2024 13:51:12 +0100 Subject: [PATCH 12/24] [WordPress] review Anouck (#3891) * init commit * adds additional files section * adds locations and mounts sections * corrects issue with the header information formatting * final change sections, adds documentation, community content, blogs sections * spelling, grammatical updates/corrections * Review * Fix description and snippets * Update table and apply suggestions. --------- Co-authored-by: Paul Gilzow Co-authored-by: chadcarlson --- .../layouts/shortcodes/frameworks-landing.md | 2 +- .../upsun/src/get-started/stacks/wordpress.md | 276 ++++++++++++++++++ 2 files changed, 277 insertions(+), 1 deletion(-) create mode 100644 sites/upsun/src/get-started/stacks/wordpress.md diff --git a/sites/upsun/layouts/shortcodes/frameworks-landing.md b/sites/upsun/layouts/shortcodes/frameworks-landing.md index bb648d02d4..9d4cd6af19 100644 --- a/sites/upsun/layouts/shortcodes/frameworks-landing.md +++ b/sites/upsun/layouts/shortcodes/frameworks-landing.md @@ -1,5 +1,5 @@ {{ $python := "[Django](/get-started/stacks/django.md)
[Flask](/get-started/stacks/flask.md)" }} -{{ $php := "[Symfony](/get-started/stacks/symfony/_index.md)
[Laravel](/get-started/stacks/laravel.md)" }} +{{ $php := "[Laravel](/get-started/stacks/laravel.md)
[Symfony](/get-started/stacks/symfony/_index.md)
[WordPress](/get-started/stacks/wordpress.md)" }} {{ $nodejs := "[Express](/get-started/stacks/express.md)
[Next.js](/get-started/stacks/nextjs.md)
[Strapi](/get-started/stacks/strapi.md)" }} diff --git a/sites/upsun/src/get-started/stacks/wordpress.md b/sites/upsun/src/get-started/stacks/wordpress.md new file mode 100644 index 0000000000..265529c5ab --- /dev/null +++ b/sites/upsun/src/get-started/stacks/wordpress.md @@ -0,0 +1,276 @@ +--- +title: Deploy WordPress on Upsun +sidebarTitle: WordPress +weight: -55 +description: | + Complete the last required steps to successfully deploy WordPress on Upsun. +--- + +{{< note theme="info" >}} + +Before you start, check out the [{{% vendor/name %}} demo app](https://console.upsun.com/projects/create-project) +and the main [Getting started guide](/get-started/here/_index.md). +They provide all the core concepts and common commands you need to know before using the following materials. + +{{< /note >}} + +For WordPress to successfully deploy and operate, after completing the [Getting started guide](/get-started/here/_index.md), +you still need to add some required files and make a few changes to your Upsun configuration. + +## Before you begin + +There are many ways you can set up a WordPress site or Upsun project. +The instructions on this page were designed based on the following assumptions: + +- You are building a composer-based WordPress site using John P Bloch's [WordPress Composer Fork](https://github.com/johnpbloch/wordpress). +- You do not have a `composer.json` file, or are comfortable making changes to your existing version. +- You selected PHP as your runtime, and MariaDB as a service during the Getting Started guide. It's also assumed that while using the Getting Started guide you named the project `myapp`, which you will notice is the top-level key in all configuration below. + +## 1. Add required files + +To ensure you have all the required files and directories in your project, follow these steps: + +1. Copy the following files from the [Platform.sh WordPress Composer template](https://github.com/platformsh-templates/wordpress-composer/) + and add them to the root of your project: + + - The [composer.json](https://raw.githubusercontent.com/platformsh-templates/wordpress-composer/61da65da21039b280b588642cd329a2eb253e472/composer.json) file declares project dependencies and specifies project settings and metadata for [Composer](https://getcomposer.org/) to use + - The [wp-cli.yml](https://github.com/platformsh-templates/wordpress-composer/blob/61da65da21039b280b588642cd329a2eb253e472/wp-cli.yml) file contains the configuration values, related to your site, for the [WordPress CLI](https://wp-cli.org/) to use + - The [wp-config.php](https://github.com/platformsh-templates/wordpress-composer/blob/61da65da21039b280b588642cd329a2eb253e472/wp-config.php) file contains your site's base configuration details, such as database connection information + +2. Optional: To support non-public plugins, add a `plugins` directory to your project. +To ensure Git tracks empty folders, add a `plugins/.gitkeep` file as well. + +3. Add and commit your changes. + + ```bash {location="Terminal"} + git add . + git commit -m "Add files and directory" + git push + ``` + +Now that you have pushed all the necessary files and directories to Upsun, +make the following changes to your `./.upsun/config.yaml` file. + +## 2. Configure your root location + +Locate the `web:locations` section and update the root (`/`) location as follows: + +```yaml {location="./.upsun/config.yaml"} +applications: + myapp: + source: + root: "/" + type: 'php:8.3' + web: + locations: + "/": + passthru: "/index.php" + root: "wordpress" + index: + - "index.php" + expires: 600 + scripts: true + allow: true + rules: + ^/license\.text$: + allow: false + ^/readme\.html$: + allow: false +``` + +{{< note theme="info" >}} +If you're migrating your site, you may already have a `composer.json` file. +You may even have generated your own instead of starting from the Platform.sh template version.
+If so, you may also have added a [`wordpress-install-dir` property](https://github.com/johnpbloch/wordpress-core-installer?tab=readme-ov-file#usage) for `extras` in your `composer.json` file.
+In this case, set `root:` to the name of the directory where you are installing WordPress. +{{< /note >}} + +## 3. Set up a location for uploads + +WordPress needs a writable location to store uploaded media. +To set one up, follow these steps: + +1. Create the location.
+ To do so, add a `/wp-content/uploads` location as follows: + + ```yaml {location="./.upsun/config.yaml"} + applications: + myapp: + source: + root: "/" + type: 'php:8.3' + web: + locations: + "/": + passthru: "/index.php" + root: "wordpress" + index: + - "index.php" + expires: 600 + scripts: true + allow: true + rules: + ^/license\.text$: + allow: false + ^/readme\.html$: + allow: false + "/wp-content/uploads": + root: "wordpress/wp-content/uploads" + scripts: false + allow: false + rules: + '(? + To do so, locate the `mounts:` section that is commented it out, and update it as follows: + + ```yaml {location="./.upsun/config.yaml"} + applications: + myapp: + source: + root: "/" + type: 'php:8.3' + ... + mounts: + "wordpress/wp-content/uploads": + source: storage + source_path: "uploads" + ``` + + {{< note theme="info" >}} + If you have designated a different directory through the `wordpress-install-dir` property in your `composer.json` file, update the + mount location accordingly. + {{< /note >}} + +## 4. Install dependencies during the build hook + +To ensure your Composer dependencies are installed during the [build stage](/learn/overview/build-deploy.md#the-build), +locate the `build:` section (below the `hooks:` section).
+Update the `build:` section as follows: + +```yaml {location="./.upsun/config.yaml"} +applications: + myapp: + source: + root: "/" + type: 'php:8.3' + ... + hooks: + build: | + set -eux + composer install --prefer-dist --optimize-autoloader --apcu-autoloader --no-progress --no-ansi --no-interaction + rsync -a plugins/ wordpress/wp-content/plugins/ +``` + +You can adjust the `composer install` command to meet your specific requirements. + +If you aren't using the `plugins` directory to manage non-public plugins, remove the `rsync` command. + +## 5. Launch tasks during the deploy hook + +Some tasks need to be performed after the images for our application are built, +but before the newly built application can receive requests. +Therefore, the best time to launch them is during the [deploy hook](/learn/overview/build-deploy.md#deploy-steps). + +Such tasks include: + +- Flushing the object cache, which might have changed between current production and newly deployed changes +- Running the WordPress database update procedure, in case core is being updated with the newly deployed changes +- Running any due cron jobs + +To launch these tasks during the deploy hook, +locate the `deploy:` section (below the `build:` section).
+Update the `deploy:` section as follows: + +```yaml {location="./.upsun/config.yaml"} +applications: + myapp: + source: + root: "/" + type: 'php:8.3' + ... + hooks: + deploy: | + set -eux + # Flushes the object cache + wp cache flush + # Runs the WordPress database update procedure + wp core update-db + # Runs all due cron events + wp cron event run --due-now +``` + +## 6. Configure your default route + +Next, instruct the [router](learn/overview/structure.md#router) how to handle requests to your WordPress app. +To do so, locate the `routes:` section, and beneath it, the `"https://{default}/":` route. + +Update the route as follows: + +```yaml {location="./.upsun/config.yaml"} +applications: + myapp: + source: + root: "/" + type: 'php:8.3' + ... + +routes: + "https://{default}/": + type: upstream + upstream: "myapp:http" + cache: + enabled: true + cookies: + - '/^wordpress_*/' + - '/^wp-*/' +``` + +Matching the application name `myapp` with the `upstream` definition `myapp:http` is the most important setting to ensure at this stage. +If these strings aren't the same, the WordPress deployment will not succeed. + +## 7. Update your MariaDB service relationship + +You need to update the name used to represent the [relationship](/create-apps/app-reference.md#relationships) between your app and your MariaDB service. +To do so, locate the `relationships:` top-level property. +Update the relationship for the database service as follows: + +```yaml {location="./.upsun/config.yaml"} +applications: + myapp: + source: + root: "/" + type: 'php:8.3' + ... + relationships: + database: "mariadb:mysql" +``` + +You can now commit all the changes made to `.upsun/config.yaml` and push to Upsun. + + ```bash {location="Terminal"} + git add . + git commit -m "Add changes to complete my Upsun configuration" + git push + ``` + + +## Further resources + +### Documentation + +- [PHP documentation](/languages/php/) +- [Authenticated Composer repositories](/languages/php/composer-auth.md) + +### Community content + +- [PHP topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=php) +- [WordPress topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=wordpress) + +### Blogs + +- [To Upsun, a WordPress migration story](https://upsun.com/blog/to-upsun-a-wordpress-migration-story/) + + From a01ca65a37d34f406c66b002fd3a32248e44fd91 Mon Sep 17 00:00:00 2001 From: Thomas di Luccio Date: Thu, 28 Mar 2024 14:16:42 +0100 Subject: [PATCH 13/24] Add PHP and Python continuous profiling documentation (#3895) * Add PHP and Python continuous profiling documentation * Add CPU support for the node.js cont profiler * Doc review --------- Co-authored-by: Anouck Colson Co-authored-by: chadcarlson --- .../application-metrics/go.md | 11 +-- .../application-metrics/nodejs.md | 12 ++-- .../application-metrics/php.md | 36 ++++++++++ .../application-metrics/python.md | 72 +++++++++++++++++++ 4 files changed, 123 insertions(+), 8 deletions(-) create mode 100644 sites/upsun/src/increase-observability/application-metrics/php.md create mode 100644 sites/upsun/src/increase-observability/application-metrics/python.md diff --git a/sites/upsun/src/increase-observability/application-metrics/go.md b/sites/upsun/src/increase-observability/application-metrics/go.md index c155b77757..e0bf156a12 100644 --- a/sites/upsun/src/increase-observability/application-metrics/go.md +++ b/sites/upsun/src/increase-observability/application-metrics/go.md @@ -13,10 +13,13 @@ It is available directly from the Console under the `Profiling` tab of your envi The GO continuous profiling is currently made accross 6 dimensions: - **Allocations**: Number of objects allocated - **Allocated Memory**: Number of bytes allocated -- **CPU**: Time spent running on the CPU +- **CPU**: Time spent running on the CPU - **Goroutines**: Number of goroutines (both on-CPU and off-CPU) -- **Heap Live Objects**: Number of objects allocated that are not yet garbage collected. -- **Heap Live Size**: Number of bytes allocated that are not yet garbage collected. +- **Heap Live Objects**: Number of objects allocated that are not yet garbage collected +- **Heap Live Size**: Number of bytes allocated that are not yet garbage collected + +The default sampling frequency is 100 Hz. This means the Go continuous profiler is +collecting information 100 times per second. ## Prerequisites @@ -63,7 +66,7 @@ The `Start` function accepts the following options: - `WithCPUDuration`: specifies the length at which to collect CPU profiles. The default is 45 seconds. Can also be set via the environment variable `BLACKFIRE_CONPROF_CPU_DURATION`. -- `WithCPUProfileRate`: sets the CPU profiling rate to Hz samples per second. +- `WithCPUProfileRate`: sets the CPU profiling rate in Hz (number of samples per second). The default is defined by the Go runtime as 100 Hz. Can also be set via the environment variable `BLACKFIRE_CONPROF_CPU_PROFILERATE`. diff --git a/sites/upsun/src/increase-observability/application-metrics/nodejs.md b/sites/upsun/src/increase-observability/application-metrics/nodejs.md index a5841533a3..c5412516ec 100644 --- a/sites/upsun/src/increase-observability/application-metrics/nodejs.md +++ b/sites/upsun/src/increase-observability/application-metrics/nodejs.md @@ -2,7 +2,7 @@ title: Continuous profiling for Node.js sidebarTitle: "Node.js continuous profiler" description: Configure and use the NodeJS continuous profiler. -weight: 40 +weight: 30 --- ## Continuous profiling on {{% vendor/name %}} @@ -10,9 +10,13 @@ weight: 40 {{< vendor/name >}} Continuous Profiling is powered by [Blackfire](../../../increase-observability/application-metrics/blackfire.md). It is available directly from the Console under the `Profiling` tab of your environments. -The Node.js continuous profiling is currently made accross 2 dimensions: -- **wall-time**: elapsed time per function call -- **heap**: memory allocation and reserved space over time +The Node.js continuous profiling is currently made accross 3 dimensions: +- **CPU Time**: Time spent running on the CPU +- **Wall-time**: Elapsed time per function call +- **Heap**: Memory allocation and reserved space over time + +The default sampling frequency is 100 Hz. This means the Node.js continuous profiler is +collecting information 100 times per second. ## Prerequisites diff --git a/sites/upsun/src/increase-observability/application-metrics/php.md b/sites/upsun/src/increase-observability/application-metrics/php.md new file mode 100644 index 0000000000..ca25a050c0 --- /dev/null +++ b/sites/upsun/src/increase-observability/application-metrics/php.md @@ -0,0 +1,36 @@ +--- +title: Continuous profiling for PHP +sidebarTitle: "PHP continuous profiler" +description: Configure and use the PHP continuous profiler. +weight: 30 +--- + +{{< vendor/name >}} [Continuous Profiler](./cont-prof.md) is powered by [Blackfire](../../../increase-observability/application-metrics/blackfire.md). +It is available directly the [Console](/administration/web/_index.md), under the **Profiling** tab of your environments. + +The PHP continuous profiling is currently made accross 4 dimensions: +- **CPU Time**: Time spent running on the CPU +- **Wall-time**: Elapsed time per function call +- **Allocated Memory**: Number of bytes allocated in memory +- **Allocations**: Time spent running on the CPU + +The default sampling frequency is 100 Hz. This means the PHP continuous profiler is +collecting information 100 times per second. + +## Prerequisites + +{{< vendor/name >}} Continuous Profiler requires [`PHP >=8.2`](/languages/php/_index.md). + +## Installation + +The Blackfire Continuous Profiler PHP library is included by default in all +PHP images matching its requirements. There is no installation required. + +## Configuration + +The PHP continuous profiler is enabled by default without configuration. + +Optionally, you can override the following environment variables: + +- `DD_PROFILING_ENABLED=true`: forces the PHP continuous profiler activation/deactivation +- `DD_PROFILING_LOG_LEVEL=off`: controls the PHP continuous profiler log level \ No newline at end of file diff --git a/sites/upsun/src/increase-observability/application-metrics/python.md b/sites/upsun/src/increase-observability/application-metrics/python.md new file mode 100644 index 0000000000..d44d4505ed --- /dev/null +++ b/sites/upsun/src/increase-observability/application-metrics/python.md @@ -0,0 +1,72 @@ +--- +title: Continuous profiling for Python +sidebarTitle: "Python continuous profiler" +description: Configure and use the Python continuous profiler. +weight: 30 +--- + +{{< vendor/name >}} [Continuous Profiler](./cont-prof.md) is powered by [Blackfire](../../../increase-observability/application-metrics/blackfire.md). +It is available directly from the [Console](/administration/web/_index.md), under the **Profiling** tab of your environments. + +The PHP continuous profiling is currently made accross 4 dimensions: +- **CPU Time**: Time spent running on the CPU +- **Wall-time**: Elapsed time per function call +- **Heap Live Size**: Number of bytes allocated that are not yet garbage collected +- **Allocated Memory**: Number of bytes allocated in memory +- **Allocations**: Time spent running on the CPU + +The default sampling frequency is 100 Hz. This means the Python continuous profiler is +collecting information 100 times per second. + +## Prerequisites + +{{< vendor/name >}} Continuous Profiler requires [`Python >=3.7.0`](/languages/python/_index.md). + +## Installation + +The [Blackfire Continuous Profiler Python library](https://github.com/blackfireio/python-continuous-profiling) is included by default in all +Python images matching its requirements. There is no installation required. + +## Python continuous profiler API + +The Python profiler API (`profiler`) can be initiated with the following options: + +- `application_name`: the application name. +- `period`: specifies the length at which to collect CPU profiles. The default is 45 seconds. +- `upload_timeout`: observability data upload timeout. The default is 10 seconds. +- `labels`: a dict containing the custom labels specific to the profile payload that is sent. + +The Python continuous profiler API has two functions: + +``` python +def start(): +def stop(): +``` + +| Function | Description | +| ---------------------- | ----------- | +| `def start():` | The `start` function starts the continuous profiler probe.
It collects profiling information in the background and periodically uploads it to the Blackfire Agent until the ``stop`` function is called. | +| `def stop():` |Stops the continuous profiling probe. | + +## Example + +Here is an example of how you can initiate the Python `profiler` on a basic app: + +1. Create `example.py` with the following code: + + ``` python + def foo(): + import time + time.sleep(1.0) + + profiler = Profiler(application_name="my-python-app", labels={'my-extra-label': 'data'}) + profiler.start() + foo() + profiler.stop() + ``` + +2. Run the app: + + ``` bash + python example.py + ``` \ No newline at end of file From 69403696708d158f983c9740e1d9bf46869c2cf7 Mon Sep 17 00:00:00 2001 From: remilejeune2 Date: Thu, 28 Mar 2024 14:37:19 +0100 Subject: [PATCH 14/24] [Upsun] Custom backup schedules (#3890) * Draft for the self-service automated-backup configuration * Doc review * Multi-line PATCH calls. --------- Co-authored-by: remi Co-authored-by: Anouck Colson Co-authored-by: chadcarlson --- sites/upsun/src/environments/backup.md | 127 ++++++++++++++++++--- sites/upsun/src/security/backups.md | 29 ----- sites/upsun/src/security/data-retention.md | 10 +- 3 files changed, 116 insertions(+), 50 deletions(-) delete mode 100644 sites/upsun/src/security/backups.md diff --git a/sites/upsun/src/environments/backup.md b/sites/upsun/src/environments/backup.md index 53e607a738..0c5f55fbd7 100644 --- a/sites/upsun/src/environments/backup.md +++ b/sites/upsun/src/environments/backup.md @@ -57,20 +57,123 @@ To avoid this downtime, use [live backups](#live-backups). For consistent backups, create the backups during non-peak hours for your site. -## Retention +## Data retention -For information on how long backups are retained, see the [data retention policy](../security/data-retention.md). +### Manual backups -## Use automated backups +[Manual backups](../environments/backup.md#create-a-manual-backup) are retained until you delete them or replace them with another backup. -{{< vendor/name >}} provides 1 automated backup a day for your production environment, -with a [2-day retention](/security/data-retention.md) (2 days worth of backups are retained at any given point). +You can configure the maximum number of manual backups. Once that number is reached, any new manual backup automatically replaces the oldest backup. + +### Automated backups -For more information on the backups {{< vendor/name >}} provides, -see the [{{< vendor/name >}} backup policy](/security/backups.md). +[Automated backups](#use-automated-backups) are retained for 2 days when you use the [default backup policy](#default-backup-policy) +(meaning, 2 days worth of backups are retained at any given point). + +When you [configure your own automated backup policy](#configure-a-backup-policy), +the retention time varies based on that configuration. Automated backups are always [live](#live-backups). +## Backup policy + +### Default backup policy + +By default, {{< vendor/name >}} provides 1 automated backup a day for your production environment, +with a [2-day retention](/security/data-retention.md) (2 days worth of backups are retained at any given point). + +You can [configure your own backup policy](#configure-a-backup-policy). +The default backup policy is equivalent to a custom backup policy using a `1d` interval and a count of `2` (see below). + +### Configure a backup policy + +{{< vendor/name >}} allows you to fully configure your own backup policy. +You can setup a different automated backup schedule per environment type (production, staging, and development environments). + +On a given environment type, you can configure: + +- The total number of backups (manual and automated) +- The total number of manual backups specifically +- Multiple schedules for automated backups + +An automated backup schedule is composed of an interval and a count.
+The interval defines the frequency of the backups. +An interval can be a couple of hours, days, weeks, months, or years. +To configure an interval, use the following values: + +- ``h`` for hour +- ``d`` for day +- ``w`` for week +- ``M`` for month +- ``y`` for year + +The count defines the number of backups to retain. + +### Configuration examples + +To take a backup every day and keep up to 7 backups, +run the following command: + +```bash {location="Terminal"} +{{% vendor/cli %}} project:curl settings -X PATCH \ + -d '{ + "data_retention": { + "production": { + "default_config": { + "schedule": [ + {"interval": "1d", "count": 7}, + ] + } + } + } + }' +``` + +#### Configure multiple automated backup schedules + +You can use multiple schedules to implement you own backup policy. +For instance, you may want to keep multiple recent backups and fewer older backups, +using a command similar to the following: + +```bash {location="Terminal"} +{{% vendor/cli %}} project:curl settings -X PATCH \ + -d '{ + "data_retention": { + "production": { + "default_config": { + "schedule": [ + {"interval": "1d", "count": 7}, + {"interval": "1w", "count": 4}, + {"interval": "1M", "count": 12} + ] + } + } + } + }' +``` + +The command results in: + +- A backup every day for 7 days +- A backup every week for 4 weeks +- A backup every month for 12 months + +#### Set a limit for backups + +To configure the maximum number of backups (automated and manual backups alike) on your production environment, +run a command similar to the following: + +```bash {location="Terminal"} +{{% vendor/cli %}} project:curl /settings -X PATCH -d '{"data_retention": {"production": {"max_backups": 10}}}' +``` + +To configure the maximum number of manual backups on the production environment, +run a command similar to the following: + +```bash {location="Terminal"} +{{% vendor/cli %}} project:curl /settings -X PATCH -d '{"data_retention": {"production": {"default_config": {"manual_count": 1}}}}' +``` + ## Live backups You can create backups without any downtime. @@ -105,10 +208,6 @@ When [creating the backup](#create-a-manual-backup), select **Run live backup** ## Create a manual backup -{{< vendor/name >}} provides up to 2 manual backups of your production environment, -plus 2 manual backups you can use for your [preview environments](/glossary/_index.md). -For more information, see the [{{< vendor/name >}} backup policy](/security/backups.md). - You can create a manual backup using the [CLI](../administration/cli/_index.md) or in the [Console](../administration/web/_index.md). {{< codetabs >}} @@ -129,6 +228,8 @@ title=In the Console {{< /codetabs >}} +See more information on [backup policies](#backup-policy) and [data retention](#data-retention). + ### Automate manual backups You can also automate the process of creating manual backups through [cron jobs](../create-apps/app-reference.md#crons). @@ -136,8 +237,8 @@ The cron job uses the CLI command to back up the environment. It requires you to [set up the CLI on the environment with an API token](../administration/cli/api-tokens.md#authenticate-in-an-environment). Although this process is automated, -backups created in this way count as manual for the [backup schedule](#backup-schedule). -They don't affect the automated backups taken as part of the schedule. +backups created in this way count as [manual backups](#manual-backups). +They don't affect the automated backups taken as part of [a schedule](#configure-a-backup-policy). ## Physical storage location diff --git a/sites/upsun/src/security/backups.md b/sites/upsun/src/security/backups.md deleted file mode 100644 index 3e1aa07253..0000000000 --- a/sites/upsun/src/security/backups.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "Backup and restore" -description: See backup policies and the recovery point objective (RPO) and recovery time objective (RTO) for various schedules. ---- - - -The following standard backup policy is applied to your projects and defines how many backups you can take advantage of. - -**Production environments:** -- 1 automated backup per day, with a [2-day retention](/security/data-retention.md) (2 days worth of backups are retained at any given point). - Automated backups are always [live](/environments/backup.md#live-backups). -- 2 manual backups maximum at any given point (the third manual backup replaces the oldest manual backup). - -**Preview environments (development and staging):** -- No automated backups. -- 2 manual backups maximum at any given point (the third manual backup replaces the oldest manual backup). - -Note that the number of backups is limited per [environment **type**](/glossary/_index.md#preview-environment) and not per project. -Therefore, a {{< vendor/name >}} project can have up to 6 backups at once (2 automated backups and 2 manual backups of the production environment, -plus 2 manual backups of any preview environments). - -{{< note >}} - -This policy applies during the beta phase of {{< vendor/name >}}, -during which backups are provided free of charge. -In the future, you'll be able to customize your backup policy depending on your needs and budget. - -{{< /note >}} - diff --git a/sites/upsun/src/security/data-retention.md b/sites/upsun/src/security/data-retention.md index 7726e61a43..2346a28a0a 100644 --- a/sites/upsun/src/security/data-retention.md +++ b/sites/upsun/src/security/data-retention.md @@ -26,15 +26,9 @@ See how to [access logs](../increase-observability/logs/access-logs.md). When an environment is deleted, its application logs are deleted as well. - ## Backups -[Automated backups](../environments/backup.md#use-automated-backups) are retained for 2 days -(meaning, 2 days worth of backups are retained at any given point). - -[Manual backups](../environments/backup.md#create-a-manual-backup) are retained until you delete them or replace them with another backup.
-As {{< vendor/name >}} provides a maximum of [2 manual backups per environment type](/security/backups.md), -the third manual backup automatically replaces the oldest backup. +The backups retention depends on the [automated backup policy](../environments/backup.md#automated-backups). ## Tombstone backups @@ -51,4 +45,4 @@ We have configured our Google Analytics account to store data for 14 months from ## Trials User data - which includes pushed code and data contained within services - is retained for a shorter period during trials. -See [Trial details](/glossary#trial). \ No newline at end of file +See [Trial details](/glossary#trial). \ No newline at end of file From 1166929ca54e94c05ab7d3926688df5a5049ccc6 Mon Sep 17 00:00:00 2001 From: Chad Carlson Date: Thu, 28 Mar 2024 12:43:08 -0400 Subject: [PATCH 15/24] Update teams feature availability for GA/self-service. (#3908) --- themes/psh-docs/layouts/partials/user-mgt-sellable/body.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/psh-docs/layouts/partials/user-mgt-sellable/body.md b/themes/psh-docs/layouts/partials/user-mgt-sellable/body.md index e58addc31b..a07e1906c6 100644 --- a/themes/psh-docs/layouts/partials/user-mgt-sellable/body.md +++ b/themes/psh-docs/layouts/partials/user-mgt-sellable/body.md @@ -1,4 +1,4 @@ {{ $content := `This feature is available as part of the Standard User Management add-on. -To add it to your project, [contact Sales](https://platform.sh/contact/).`}} +To add it to your project, [administer your organization's billing](/administration/billing/billing-admin).`}} {{ partial "premium-features/banner" ( dict "context" . "content" $content "title" "Feature Availability" )}} From dd3dc1130215fffe1444927c88d19d2bc00a6c07 Mon Sep 17 00:00:00 2001 From: Chad Carlson Date: Fri, 29 Mar 2024 11:56:23 -0400 Subject: [PATCH 16/24] [Laravel] Resubmit: Adding the "Getting started" guide for Laravel (#3899) * Clone the Symfony Getting Started. The page is done. * Correct typo on get-started * WIP: First version of the laravel getting started guide * First version of the Laravel Get Started Guide * Update sites/friday/src/get-started/stacks/laravel/_index.md Co-authored-by: Thomas di Luccio * Update sites/friday/src/get-started/stacks/laravel/blackfire.md Co-authored-by: Thomas di Luccio * Update sites/friday/src/get-started/stacks/laravel/crons.md Co-authored-by: Thomas di Luccio * Update sites/friday/src/get-started/stacks/laravel/environment-variables.md Co-authored-by: Thomas di Luccio * Update sites/friday/src/get-started/stacks/laravel/faq.md Co-authored-by: Thomas di Luccio * Update sites/friday/src/get-started/stacks/laravel/faq.md Co-authored-by: Thomas di Luccio * Update sites/friday/src/get-started/stacks/laravel/faq.md Co-authored-by: Thomas di Luccio * Update sites/friday/src/get-started/stacks/laravel/faq.md Co-authored-by: Thomas di Luccio * Doc review --------- Co-authored-by: Guillaume Moigneu Co-authored-by: Guillaume Moigneu Co-authored-by: Thomas di Luccio Co-authored-by: Anouck Colson --- sites/upsun/config/_default/params.yaml | 1 + sites/upsun/src/get-started/stacks/laravel.md | 43 --- .../src/get-started/stacks/laravel/_index.md | 48 ++++ .../get-started/stacks/laravel/blackfire.md | 23 ++ .../src/get-started/stacks/laravel/crons.md | 76 ++++++ .../stacks/laravel/environment-variables.md | 251 ++++++++++++++++++ .../src/get-started/stacks/laravel/faq.md | 97 +++++++ .../get-started/stacks/laravel/get-started.md | 198 ++++++++++++++ .../stacks/laravel/laravel-horizon.md | 96 +++++++ .../stacks/laravel/laravel-telescope.md | 77 ++++++ .../get-started/stacks/laravel/setup-redis.md | 97 +++++++ .../src/get-started/stacks/symfony/_index.md | 2 +- sites/upsun/src/languages/php/_index.md | 2 +- .../guides/laravel/horizon-dashboard.png | Bin 0 -> 257594 bytes .../guides/laravel/horizon-resources.png | Bin 0 -> 211492 bytes .../guides/laravel/telescope-dashboard.png | Bin 0 -> 126587 bytes 16 files changed, 966 insertions(+), 45 deletions(-) delete mode 100644 sites/upsun/src/get-started/stacks/laravel.md create mode 100644 sites/upsun/src/get-started/stacks/laravel/_index.md create mode 100644 sites/upsun/src/get-started/stacks/laravel/blackfire.md create mode 100644 sites/upsun/src/get-started/stacks/laravel/crons.md create mode 100644 sites/upsun/src/get-started/stacks/laravel/environment-variables.md create mode 100644 sites/upsun/src/get-started/stacks/laravel/faq.md create mode 100644 sites/upsun/src/get-started/stacks/laravel/get-started.md create mode 100644 sites/upsun/src/get-started/stacks/laravel/laravel-horizon.md create mode 100644 sites/upsun/src/get-started/stacks/laravel/laravel-telescope.md create mode 100644 sites/upsun/src/get-started/stacks/laravel/setup-redis.md create mode 100644 sites/upsun/static/images/guides/laravel/horizon-dashboard.png create mode 100644 sites/upsun/static/images/guides/laravel/horizon-resources.png create mode 100644 sites/upsun/static/images/guides/laravel/telescope-dashboard.png diff --git a/sites/upsun/config/_default/params.yaml b/sites/upsun/config/_default/params.yaml index 10f7f78576..efb94ded87 100644 --- a/sites/upsun/config/_default/params.yaml +++ b/sites/upsun/config/_default/params.yaml @@ -35,6 +35,7 @@ vendor: services: .upsun/config.yaml app: .upsun/config.yaml apps: .upsun/config.yaml + env: .environment prefix: apps: applications services: services diff --git a/sites/upsun/src/get-started/stacks/laravel.md b/sites/upsun/src/get-started/stacks/laravel.md deleted file mode 100644 index 1601c1bcea..0000000000 --- a/sites/upsun/src/get-started/stacks/laravel.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Deploying Laravel on Upsun -sidebarTitle: Laravel -sectionBefore: PHP -weight: -70 -description: | - Welcome to the Upsun documentation specific to the Laravel framework on Upsun. - It includes common reference materials useful for deploying Laravel, but also external community and blog resources that cover more advanced topics relevant for the framework. ---- - -{{< note title="Hello, there!" theme="info" >}} - -{{% description %}} - -Before you proceed, be sure to checkout the [{{% vendor/name %}} demo app](https://console.upsun.com/projects/create-project) and the main [Getting started guide](/get-started/here/_index.md). These two resources provide all of the core concepts and common commands you'll need to know before using the materials below. - -{{< /note >}} - -## Getting started - -- [Upsun demo application](https://console.upsun.com/projects/create-project) -- [Upsun Getting started guide](/get-started/here/_index.md) -- [What is Upsun?](/learn/overview) - -## Documentation - -- [PHP documentation](/languages/php/) -- [Extensions](/languages/php/extensions) -- [Performance tuning](/languages/php/tuning) -- [PHP-FPM sizing](/languages/php/fpm) -- [Swoole on Upsun](/languages/php/swoole) -- [Authenticated Composer](/languages/php/composer-auth) - -## Community content - -- [Laravel topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=laravel) -- [PHP topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=php) - -## Blogs - -- [Upsun: the missing PaaS to scale Laravel applications](https://upsun.com/blog/paas-to-scale-laravel-apps/) - - diff --git a/sites/upsun/src/get-started/stacks/laravel/_index.md b/sites/upsun/src/get-started/stacks/laravel/_index.md new file mode 100644 index 0000000000..7e55a06b10 --- /dev/null +++ b/sites/upsun/src/get-started/stacks/laravel/_index.md @@ -0,0 +1,48 @@ +--- +title: Deploying Laravel on Upsun +sidebarTitle: Laravel +sectionBefore: PHP +layout: single +weight: -65 +description: | + Complete the last required steps to successfully deploy Laravel on {{% vendor/name %}}. +--- + +{{< note theme="info" >}} + +Before you start, check out the [{{% vendor/name %}} demo app](https://console.upsun.com/projects/create-project) and the main [Getting started guide](/get-started/here/_index.md). +They provide all of the core concepts and common commands you need to know before using the materials below. + +{{< /note >}} + +{{< get-started/steps >}} + +## Further resources + +### Documentation + +- [PHP documentation](/languages/php/) + +- [Extensions](/languages/php/extensions) + +- [Performance tuning](/languages/php/tuning) + +- [PHP-FPM sizing](/languages/php/fpm) + +- [Swoole on {{% vendor/name %}}](/languages/php/swoole) + +- [Authenticated Composer](/languages/php/composer-auth) + +### Community content + +- [Laravel topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=laravel) + +- [PHP topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=php) + +### Blogs + +- [_Upsun: the missing PaaS to scale Laravel applications_](https://upsun.com/blog/paas-to-scale-laravel-apps/) + + + +{{< guide-buttons next="Get started" nextLink="/get-started/stacks/laravel/get-started.md" type="*" >}} \ No newline at end of file diff --git a/sites/upsun/src/get-started/stacks/laravel/blackfire.md b/sites/upsun/src/get-started/stacks/laravel/blackfire.md new file mode 100644 index 0000000000..20f6f43365 --- /dev/null +++ b/sites/upsun/src/get-started/stacks/laravel/blackfire.md @@ -0,0 +1,23 @@ +--- +title: "Continous Observability with Blackfire" +sidebarTitle: "Blackfire" +weight: -90 +description: Set up a continuous observability strategy for your Laravel app with Blackfire. +--- + +[Blackfire.io](/increase-observability/application-metrics/blackfire.md) is the recommended solution +for monitoring and profiling web sites and apps. +Blackfire works seamlessly with any app built with Laravel. + +Blackfire PHP SDK provides the following [integrations with +Laravel](https://docs.blackfire.io/php/integrations/laravel/index): + +- [Laravel Artisan](https://docs.blackfire.io/php/integrations/laravel/artisan) +- [Laravel Horizon and queue services](https://docs.blackfire.io/php/integrations/laravel/horizon) +- [Laravel Tests](https://docs.blackfire.io/php/integrations/laravel/tests) +- [Laravel Octane](https://docs.blackfire.io/php/integrations/laravel/octane) + +Please refer to the [Blackfire documentation](https://docs.blackfire.io/testing-cookbooks/tests#the-code-blackfire-yaml-code-file) to set up a `.blackfire.yml` configuration to enable custom [performance tests](https://docs.blackfire.io/testing-cookbooks/index) +and automated [builds](https://docs.blackfire.io/builds-cookbooks/index). + +{{< guide-buttons previous="Back" next="Debug with Telescope" nextLink="/get-started/stacks/laravel/laravel-telescope.md" type="*" >}} \ No newline at end of file diff --git a/sites/upsun/src/get-started/stacks/laravel/crons.md b/sites/upsun/src/get-started/stacks/laravel/crons.md new file mode 100644 index 0000000000..59eeadeda7 --- /dev/null +++ b/sites/upsun/src/get-started/stacks/laravel/crons.md @@ -0,0 +1,76 @@ +--- +title: "Set up cron jobs" +weight: -105 +description: | + Understand how to configure Laravel cron jobs. +--- + +Cron jobs allow you to run scheduled tasks at specified times or intervals. + +While you can run your own custom tasks, Laravel provides a scheduler to simplify the implementation. +To implement it, see the Laravel [Task Scheduling documentation](https://laravel.com/docs/master/scheduling). + +## Set up a cron job + +To set up a cron job, update your {{% vendor/name %}} configuration as follows: + +```yaml {configFile="app"} +applications: + myapp: + [...] + crons: + snapshot: + spec: * * * * * + cmd: | + php artisan schedule:run >> /dev/null 2>&1 +``` + +## Run cron jobs based on environment type + +To run a command in a cron hook for specific environment types, +use the `PLATFORM_ENVIRONMENT_TYPE` environment variable: + +```yaml {configFile="app"} +applications: + myapp: + [...] + crons: + snapshot: + spec: 0 5 * * * + cmd: | + # only run for the production environment, aka main branch + if [ "$PLATFORM_ENVIRONMENT_TYPE" = "production" ]; then + php artisan schedule:run >> /dev/null 2>&1 + fi +``` + +## Run the Laravel scheduler every minute + +Cron job execution on the default {{< vendor/name >}} offering are limited to once every 5 minutes. +For more information, see the [documentation on crons](/create-apps/app-reference.html#crons). + +However, you can add a [worker](/create-apps/app-reference#workers) +and specify a start command that [runs the scheduler every minute](https://laravel.com/docs/11.x/scheduling#running-the-scheduler-locally). +To do so, use the following configuration: + +```yaml {configFile="app"} +applications: + [...] + {{< variable "APP_NAME" >}}: + [...] + workers: + scheduler: + commands: + start: | + php artisan schedule:work +``` + +{{< note title="Warning" theme="warning" >}} + +Web and worker containers don't share mount targets. +You can't share files between those containers using the filesystem. +To share data between containers, use [services](/add-services/_index.md). + +{{< /note >}} + +{{< guide-buttons previous="Back" next="Manage observability with Blackfire" nextLink="/get-started/stacks/laravel/blackfire.md" type="*" >}} \ No newline at end of file diff --git a/sites/upsun/src/get-started/stacks/laravel/environment-variables.md b/sites/upsun/src/get-started/stacks/laravel/environment-variables.md new file mode 100644 index 0000000000..0de9ac3f82 --- /dev/null +++ b/sites/upsun/src/get-started/stacks/laravel/environment-variables.md @@ -0,0 +1,251 @@ +--- +title: "Environment Variables" +weight: -120 +description: | + Learn about the environment variables added by the {{% vendor/name %}} CLI. +--- + +By default, {{% vendor/name %}} exposes some [environment variables](/development/variables/use-variables#use-provided-variables). + +Laravel relies heavily on environment variables to configure application services (such as the database or the mailer). +Therefore, the default configuration generated by `{{% vendor/cli %}} project:init` includes +the [environment variables for all the services](#service-environment-variables) connected to your app in the `.environment` file. + +{{< note title="Tip" theme="info" >}} + +You can tweak the `.environment` configuration to fit your needs and add specific project-level variables.
+You may need a variable to change per environment. If so, use the `{{% vendor/cli %}} variable` command to add all the needed per-environment variables. + +{{< /note >}} + +## Default environment variables + +{{% vendor/name %}} automatically exposes [environment variables](/development/variables/use-variables#use-provided-variables) +about the app and its infrastructure. + +Assuming that MySQL, PostgreSQL, and Redis services have been added to your environment, +and that the app has been granted access to those services via the following [relationships](/create-apps/app-reference.md#relationships): + +```yaml {location=".upsun/config.yaml"} +applications: + myapp: + ... + relationships: + mysql: ... + postgresql: ... + redis: ... +``` + +You can transpose these variables to set up Laravel's default configuration in a `.environment` file: + +```bash {configFile="env"} +# Set MySQL database environment variables +export DB_HOST="$MYSQL_HOST" +export DB_PORT="$MYSQL_PORT" +export DB_PATH="$MYSQL_PATH" +export DB_USERNAME="$MYSQL_USERNAME" +export DB_PASSWORD="$MYSQL_PASSWORD" +export DB_SCHEME="$MYSQL_SCHEME" +export DATABASE_URL="${DB_SCHEME}://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_PATH}" + +# Or for PostgreSQL +export DB_HOST="$POSTGRESQL_HOST" +export DB_PORT="$POSTGRESQL_PORT" +export DB_PATH="$POSTGRESQL_PATH" +export DB_USERNAME="$POSTGRESQL_USERNAME" +export DB_PASSWORD="$POSTGRESQL_PASSWORD" +export DB_SCHEME="$POSTGRESQL_SCHEME" +export DATABASE_URL="${DB_SCHEME}://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_PATH}" + +# Set Laravel-specific environment variables +export DB_CONNECTION="$DB_SCHEME" +export DB_DATABASE="$DB_PATH" + +# Set Cache environment variables +export CACHE_HOST="$REDIS_HOST" +export CACHE_PORT="$REDIS_PORT" +export CACHE_SCHEME="$REDIS_SCHEME" +export CACHE_URL="${CACHE_SCHEME}://${CACHE_HOST}:${CACHE_PORT}" + +# Set Redis environment variables +export REDIS_URL="$CACHE_URL" +``` + +## Service environment variables + +Each exposed environment variable is prefixed by the relationship name. +For example, if you have the following relationships in your configuration: + +```yaml {configFile="app"} +relationships: + database: "securitydb:postgresql" +``` + +The environment variables for the database service is prefixed by `DATABASE_`, +which is the upper-cased version of the key defined in the relationship. +For example, you could have a `DATABASE_URL` environment variable. + +{{< note theme="warning" >}} + +Environment variables aren't exposed when the build hook script is running, +as services aren't available during the [build process](/learn/overview/build-deploy.md#the-build).
+To add specific variables available during the build, run `{{% vendor/cli %}} variable:create`. + +{{< /note >}} + +### Emails + +{{% vendor/name %}} provides a SMTP service for sending emails. +To configure email in Laravel, add the following mapping to your `.environment` file: + +```bash {configFile="env"} +# Email +export MAIL_MAILER="smtp" +export MAIL_HOST="${PLATFORM_SMTP_HOST}" +export MAIL_PORT="25" +``` + +### HTTP + +If your project has multiple apps, +the configuration is exposed via the following environment variables +(where `SOME_SERVICE` is the upper-cased version of the key defined in the relationship): + +- `SOME_SERVICE_URL`: The full URL of the service +- `SOME_SERVICE_IP`: The HTTP service IP +- `SOME_SERVICE_PORT`: The HTTP service port +- `SOME_SERVICE_SCHEME`: The HTTP service scheme +- `SOME_SERVICE_HOST`: The HTTP service host + +### MySQL/MariaDB + +The [MySQL/MariaDB](/add-services/mysql) configuration is exposed via the following environment variables +(where `DATABASE` is the upper-cased version of the key defined in the relationship above): + +- `DATABASE_URL`: The database URL (in PHP or Go format depending on your app) +- `DATABASE_SERVER`: The database server +- `DATABASE_DRIVER`: The database driver +- `DATABASE_VERSION`: The database version +- `DATABASE_HOST`: The database host +- `DATABASE_PORT`: The database port +- `DATABASE_NAME`: The database name +- `DATABASE_DATABASE`: Alias for `DATABASE_NAME` +- `DATABASE_USERNAME`: The database username +- `DATABASE_PASSWORD`: The database password + +{{< note title="Tip">}} + +The database version and a default charset are included in the database URL. +To override them, use the `DATABASE_VERSION` and `DATABASE_CHARSET` environment variables respectively. + +{{< /note >}} + +### PostgreSQL + +The [PostgreSQL](/add-services/postgresql) configuration is exposed via the following environment variables +(where `DATABASE` is the upper-cased version of the key defined in the relationship): + +- `DATABASE_URL`: The database URL (in PHP or Go format depending on your app) +- `DATABASE_SERVER`: The database server +- `DATABASE_DRIVER`: The database driver +- `DATABASE_VERSION`: The database version +- `DATABASE_HOST`: The database host +- `DATABASE_PORT`: The database port +- `DATABASE_NAME`: The database name +- `DATABASE_DATABASE`: Alias for `DATABASE_NAME` +- `DATABASE_USERNAME`: The database username +- `DATABASE_PASSWORD`: The database password + +{{< note title="Tip">}} + +The database version and a default charset are included in the database URL. +To override them, use the `DATABASE_VERSION` and `DATABASE_CHARSET` environment variables respectively. + +{{< /note >}} + +### Redis + +The [Redis](/add-services/redis) configuration is exposed via the following environment variables +(where `REDIS` is the upper-cased version of the key defined in the relationship): + +- `REDIS_URL`: The Redis URL +- `REDIS_HOST`: The Redis host +- `REDIS_PORT`: The Redis port +- `REDIS_SCHEME`: The Redis scheme + +You can specify the Redis client in your `.environment` file: + +```bash {configFile="env"} +export REDIS_CLIENT="phpredis" +``` + +### Memcached + +The [Memcached](/add-services/memcached) configuration is exposed via the following environment variables +(where `CACHE` is the upper-cased version of the key defined in the relationship): + +- `CACHE_HOST` +- `CACHE_PORT` +- `CACHE_IP` + +### Elasticsearch + +The [Elasticsearch](/add-services/elasticsearch) configuration is exposed via the following environment variables +(where `ELASTICSEARCH` is the upper-cased version of the key defined in the relationship): + +- `ELASTICSEARCH_URL`: The full URL of the Elasticsearch service +- `ELASTICSEARCH_HOST`: The Elasticsearch host +- `ELASTICSEARCH_PORT`: The Elasticsearch port +- `ELASTICSEARCH_SCHEME`: The Elasticsearch protocol scheme (`http` or `https`) + +### RabbitMQ + +The [RabbitMQ](/add-services/rabbitmq) configuration is exposed via the following environment variables +(where `RABBITMQ` is the upper-cased version of the key defined in the relationship): + +- `RABBITMQ_URL`: The RabbitMQ standardized URL +- `RABBITMQ_SERVER`: The RabbitMQ server +- `RABBITMQ_HOST`: The RabbitMQ host +- `RABBITMQ_PORT`: The RabbitMQ port +- `RABBITMQ_SCHEME`: The RabbitMQ scheme +- `RABBITMQ_USER`: The RabbitMQ username +- `RABBITMQ_USERNAME`: The RabbitMQ username +- `RABBITMQ_PASSWORD`: The RabbitMQ password + +### MongoDB + +The [MongoDB](/add-services/mongodb) configuration is exposed via the following environment variables +(where `MONGODB` is the upper-cased version of the key defined in the relationship): + +- `MONGODB_SERVER` +- `MONGODB_HOST` +- `MONGODB_PORT` +- `MONGODB_SCHEME` +- `MONGODB_NAME` +- `MONGODB_DATABASE` +- `MONGODB_USER` +- `MONGODB_USERNAME` +- `MONGODB_PASSWORD` + +### InfluxDB + +The [InfluxDB](/add-services/influxdb) configuration is exposed via the following environment variables +(where `TIMEDB` is the upper-cased version of the key defined in the relationship): + +- `TIMEDB_SCHEME` +- `TIMEDB_HOST` +- `TIMEDB_PORT` +- `TIMEDB_IP` + +### Kafka + +The [Apache Kafka](/add-services/kafka) configuration is exposed via the following environment variables +(where `KAFKA` is the upper-cased version of the key defined in the relationship): + +- `KAFKA_URL` +- `KAFKA_SCHEME` +- `KAFKA_HOST` +- `KAFKA_PORT` +- `KAFKA_IP` + +{{< guide-buttons previous="Back" next="Set up Redis" nextLink="/get-started/stacks/laravel/setup-redis.md" type="*" >}} \ No newline at end of file diff --git a/sites/upsun/src/get-started/stacks/laravel/faq.md b/sites/upsun/src/get-started/stacks/laravel/faq.md new file mode 100644 index 0000000000..58c48c2ffc --- /dev/null +++ b/sites/upsun/src/get-started/stacks/laravel/faq.md @@ -0,0 +1,97 @@ +--- +title: "FAQ" +weight: 200 +description: | + Troubleshoot issue you might encounter using [Laravel](https://laravel.com/), a PHP framework on {{% vendor/name %}}. +--- + +## How can I access my application logs? + +To display the application log file (`app` file), run the following command: + +```bash +{{% vendor/cli %}} log app --tail +``` + +All the log messages generated by your app are sent to this `app` file. +This includes language errors such as PHP errors, warnings, notices, +as well as uncaught exceptions. + +The file also contains your application logs if you log on `stderr`. +This log doesn't include the default `laravel.log` located in `/storage`. + +{{% note %}} + +{{% vendor/name %}} manages the `app` file for you. +This is to prevent disks from getting filled and using very fast local drives instead of slower network disks. +Make sure your apps always output their logs to `stderr`. + +{{% /note %}} + +With Laravel, you can change your logging configuration to use `memory` and stream `php://stderr`. +In your `config/logging.php` file, add or update the following configuration: + +```php {location="config/logging.php"} +'memory' => [ + 'driver' => 'monolog', + 'handler' => Monolog\Handler\StreamHandler::class, + 'with' => [ + 'stream' => 'php://stderr', + ], + 'processors' => [ + // Simple syntax... + Monolog\Processor\MemoryUsageProcessor::class, + + // With options... + [ + 'processor' => Monolog\Processor\PsrLogMessageProcessor::class, + 'with' => ['removeUsedContextFields' => true], + ], + ], +], +``` + +{{< note theme="warning" title="Warning">}} + +If you log deprecations, make sure you **also** log them on `stderr`. + +{{< /note >}} + +## What's this "`Oops! An Error Occurred`" message about? + +The `Oops! An Error Occurred` message comes from your app and is automatically generated based on the Laravel error template. + +### The server returned a "`500 Internal Server Error`" + +If your app's working as expected locally but you see the previous error message on {{% vendor/name %}}, +it usually means you have a configuration error or a missing dependency. + +To fix this issue, search your application logs. +They likely contain an error message describing the root cause: + +```bash +{{% vendor/cli %}} logs all + [app] [14-Aug-2020 10:52:27 UTC] [critical] Uncaught PHP Exception Exception: [...] + [app] + [php.access] 2020-08-14T10:52:27Z GET 500 2.386 ms 2048 kB 419.11% / + [access] 78.247.136.119 - - [14/Aug/2020:10:52:27 +0000] "GET / HTTP/1.1" 500 843 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36" +``` + +If the error occurs on a preview environment, +or on the main environment of a non-production project, +you can also enable Laravel's dev/debug mode to inspect the cause of the error +via the `APP_DEBUG` [environment variable](./environment-variables.md) in your +`.environment` file or via [{{% vendor/cli %}} console](/development/variables): + +```bash +# Enable debug mode +export APP_DEBUG=1 +# Disable debug mode +export APP_DEBUG=0 +``` + +## Other issues + +For other issues unrelated to Laravel, see [Troubleshoot development](/development/troubleshoot.html). + +{{< guide-buttons previous="Back" >}} \ No newline at end of file diff --git a/sites/upsun/src/get-started/stacks/laravel/get-started.md b/sites/upsun/src/get-started/stacks/laravel/get-started.md new file mode 100644 index 0000000000..7f45387e60 --- /dev/null +++ b/sites/upsun/src/get-started/stacks/laravel/get-started.md @@ -0,0 +1,198 @@ +--- +title: Get started +weight: -255 +description: | + See how to get started deploying Laravel on {{% vendor/name %}}. +--- + +This guide provides instructions for deploying and working with Laravel on {{% vendor/name %}}. + +{{% guides/requirements name="Laravel" %}} + +## 1. Create your Laravel app + +1. To create a new Laravel project, run the following commands: + + ```bash {location="Terminal"} + composer create-project laravel/laravel:^11.0 {{< variable "PROJECT_NAME" >}} + cd {{< variable "PROJECT_NAME" >}} + git init . + ``` + + Alternatively, you can deploy an **existing Laravel project**. To do so, `cd` into your Laravel repository root folder. + +2. To generate a sensible default {{% vendor/name %}} configuration, + run the following command from within the project's directory: + + ```bash {location="Terminal"} + {{% vendor/cli %}} project:init + ``` + + The {{% vendor/name %}} CLI detects a PHP & Laravel stack. + Follow the prompts to specify a name for your project and select the needed services. + While optional, it is recommended to add [Redis](/add-services/redis.md) to your project to handle Laravel cache, queues & sessions. + + The `{{< vendor/configfile "app" >}}` and `.environment` configuration files are generated. + +3. Enable the PHP extensions required by the services you selected.
+ For example, `pdo_mysql` is enabled by default, but you may need to enable others like `redis` or `pdo_pgsql`: + + ```yaml {configFile="app"} + applications: + myapp: + ... + runtime: + extensions: + - redis + - pdo_pgsql + ``` + See all the [available PHP extensions](/languages/php/extensions.html). + +3. Laravel requires an [encryption key](https://laravel.com/docs/master/encryption#gracefully-rotating-encryption-keys).
+ To generate the key locally, run `php artisan key:generate`. + Copy the key from your local `.env` file into `.environment` as follows: + + ```bash {configFile="env"} + export APP_KEY="base64:{{< variable "APP_KEY" >}}" + ``` + +4. Add and commit your changes: + + ```bash {location="Terminal"} + git add {{< vendor/configfile "app" >}} .environment + git commit -m "Add {{% vendor/name %}} configuration" + ``` + +## 2. Create your {{% vendor/name %}} project + +To create a project on {{% vendor/name %}}, run the following command from within the project's directory: + +```bash {location="Terminal"} +{{% vendor/cli %}} project:create --title {{< variable "PROJECT_TITLE" >}} --set-remote +``` + +The `--set-remote` flag sets the new project as the remote for this repository. + +{{< note title="Tip" >}} + +You can link any repository to an existing {{% vendor/name %}} project using the following command: + +```bash {location="Terminal"} +{{% vendor/cli %}} project:set-remote {{< variable "PROJECT_ID" >}} +``` + +{{< /note >}} + +## 3. Deploy your project + +To deploy your project, run the following command: + +```bash {location="Terminal"} +{{% vendor/cli %}} push +``` + +During deployment, the logs from the {{% vendor/name %}} API are displayed in your terminal so you can monitor progress. +To stop the display of the logs **without interrupting the deployment**, +use `CTRL+C` in your terminal. +To go back to displaying the logs, run `{{% vendor/cli %}} activity:log`. + +Congratulations, your first Laravel app has been deployed on {{% vendor/name %}}! + +{{< note title="Tip" theme="info" >}} + +Now that your app is deployed in production mode, +you can [set up a custom domain](http://localhost:53846/domains/steps.html). +{{< /note >}} + +## 4. Configure write access + +The {{% vendor/name %}} default configuration stipulates three writable folders in `{{< vendor/configfile "app" >}}`: + +- `"/.config"` +- `"bootstrap/cache"` +- `"storage"` + +If your application writes content outside of these default ones, +you can [set up mounts](/create-apps/app-reference.html#mounts). + +## 5. Make changes to your project + +Now that your project is deployed, you can start making changes to it. +For example, you might want to fix a bug or add a new feature. + +In your project, the main branch always represents the production environment. +Other branches are for developing new features, fixing bugs, or updating the infrastructure. + +To make changes to your project, follow these steps: + +1. Create a new environment (a Git branch) to make changes without impacting production: + + ```bash {location="Terminal"} + {{% vendor/cli %}} branch feat-a + ``` + + This command creates a new local `feat-a` Git branch based on the main Git branch, + and activates a related environment on {{% vendor/name %}}. + The new environment inherits the data (service data and assets) of its parent environment (the production environment here). + +2. Make changes to your project. + + For example, edit the `resources/views/welcome.blade.php` template and make the following visual changes: + + ```html {location="resources/views/welcome.blade.php"} + + - Laravel + + Laravel On {{% vendor/name %}} + + ``` + +3. Add and commit your changes: + + ```bash {location="Terminal"} + add . + git commit -a -m "Update title" + ``` + +4. Deploy your changes to the `feat-a` environment: + + ```bash {location="Terminal"} + {{% vendor/cli %}} deploy + ``` + + Note that each environment has its own domain name. + To view the domain name of your new environment, run the following command: + + ```bash {location="Terminal"} + {{% vendor/cli %}} url --primary + ``` + +5. Iterate by changing the code, committing, and deploying. + When satisfied with your changes, merge them to the main branch, deploy, + and remove the feature branch: + + ```bash {location="Terminal"} + git checkout main + git merge feat-a + {{% vendor/cli %}} environment:delete feat-a + git branch -d feat-a + {{% vendor/cli %}} deploy + ``` + + Note that deploying to production is fast because the image built for the `feat-a` environment is reused. + + For a long running branch, keep the code up-to-date with the main branch by using `git merge main` or `git rebase main`. + Also, keep the data in sync with the production environment by using `{{% vendor/cli %}} env:sync`. + +## 6. Optional: Use a third-party Git provider + +When you choose to use a third-party Git hosting service, +the {{% vendor/name %}} Git repository becomes a read-only mirror of the third-party repository. +All your changes take place in the third-party repository. + +Add an integration to your existing third-party repository: + +- [BitBucket](/integrations/source/bitbucket.md) +- [GitHub](/integrations/source/github.md) +- [GitLab](/integrations/source/gitlab.md) + +{{< guide-buttons previous="Back" next="Environment variables" nextLink="/get-started/stacks/laravel/environment-variables.md" type="*" >}} \ No newline at end of file diff --git a/sites/upsun/src/get-started/stacks/laravel/laravel-horizon.md b/sites/upsun/src/get-started/stacks/laravel/laravel-horizon.md new file mode 100644 index 0000000000..81a69a138b --- /dev/null +++ b/sites/upsun/src/get-started/stacks/laravel/laravel-horizon.md @@ -0,0 +1,96 @@ +--- +title: "Handle queues with Horizon" +weight: -118 +description: | + Setting up Laravel Horizon +--- + +[Laravel Horizon](https://laravel.com/docs/master/horizon#main-content) provides an appealing dashboard and code-driven configuration +for your Laravel powered Redis queues. +Horizon allows you to easily monitor key metrics of your queue system, +such as job throughput, runtime, and job failures. + +## 1. Add Laravel Horizon + +{{% note theme="warning" %}} +This procedure assumes you have followed the steps on [how to configure Redis and queues](./setup-redis.html#using-redis-for-laravel-queues). +{{% /note %}} + +1. To add Laravel Horizon, run the following command: + + ```bash {location="Terminal"} + composer require laravel/horizon && php artisan horizon:install + ``` + +2. Add the `install` command to your `build` hook in your app configuration, so it's run on every deploy. + + ```yaml {configFile="app"} + applications: + myapp: + [...] + hooks: + build: | + set -eux + composer --no-ansi --no-interaction install --no-progress --prefer-dist --optimize-autoloader --no-dev + php artisan horizon:install + ``` + +## 2. Create a worker to run Horizon + +To run Horizon on your project, you need to add a separate [worker](/create-apps/app-reference#workers). +To do so, use the following configuration: + +```yaml {configFile="app"} +applications: + [...] + {{< variable "APP_NAME" >}}: + [...] + workers: + horizon: + commands: + start: | + php artisan horizon +``` + +To enable the worker, push your changes to {{< vendor/name >}}: + +```bash {location="Terminal"} +git add . +git commit -m "Enable Laravel Horizon" +{{< vendor/cli >}} push +``` + +A new container is started automatically. +It will spawn the Horizon process after the next deploy. + +## 3. Access your Horizon dashboard + +If you have restricted access to Horizon in your `HorizonServiceProvider.php`, +log in to your app through the web. +Then, go to `/horizon` to access your Horizon dashboard. + +![Laravel Horizon Dashboard](/images/guides/laravel/horizon-dashboard.png "0.5") + +## 4. Optional: Customize Horizon + +Horizon handles jobs that are populated by the queue. +If you need to customize how Horizon works (queues, processes, etc.), +see the official [Laravel Horizon documentation](https://laravel.com/docs/master/horizon#main-content). + +{{< note title="Warning" theme="warning" >}} + +Web and worker containers don't share mount targets. +You can't share files between those containers using the filesystem. +To share data between containers, use [services](/add-services/_index.md). + +See more information on [workers](/create-apps/app-reference#workers). + +{{< /note >}} + +Note that you can customize the resources of your Horizon worker container from the {{% vendor/name %}} Console. + +![Laravel Horizon Resources](/images/guides/laravel/horizon-resources.png "0.5") + +For more information, see how to [configure resources](/manage-resources/adjust-resources.md). + +{{< guide-buttons previous="Back" next="Set up cron jobs" nextLink="/get-started/stacks/laravel/crons.md" type="*" >}} \ No newline at end of file diff --git a/sites/upsun/src/get-started/stacks/laravel/laravel-telescope.md b/sites/upsun/src/get-started/stacks/laravel/laravel-telescope.md new file mode 100644 index 0000000000..d4d1208979 --- /dev/null +++ b/sites/upsun/src/get-started/stacks/laravel/laravel-telescope.md @@ -0,0 +1,77 @@ +--- +title: "Debug with Laravel Telescope" +weight: -87 +description: | + Setting up Laravel Telescope for debugging Laravel +--- + +Laravel Telescope complements your local Laravel development environment. +With Telescope, get insight into the requests coming into your app, exceptions, log entries, database queries, queued jobs, mail, notifications, cache operations, scheduled tasks, variable dumps, and more. + +To set up Laravel Telescope on your **non-production** environments, +follow these steps. + +## 1. Create the APP_DEBUG variable + +To add the `APP_DEBUG` & `TELESCOPE_ENABLED` variables on your project, run the following commands: + +```bash {location="Terminal"} +{{< vendor/cli >}} variable:create --level environment --name env:APP_DEBUG --value false +{{< vendor/cli >}} variable:create --level environment --name env:TELESCOPE_ENABLED --value false +``` + +Note that the default values for your main environment are set to `false`. +To override them on other non-production environments, run the following commands: + +```bash {location="Terminal"} +{{< vendor/cli >}} variable:update -e {{< variable "ENVIRONMENT" >}} --value true env:APP_DEBUG +{{< vendor/cli >}} variable:update -e {{< variable "ENVIRONMENT" >}} --value true env:TELESCOPE_ENABLED +``` + +## 2. Add Telescope to your project + +1. Run the following Composer command: + + ```bash {location="Terminal"} + composer require laravel/telescope && php artisan telescope:install + ``` + +2. Add the `install` command to your `build` hook in your app configuration, + so it's run on every deploy. + + ```yaml {configFile="app"} + applications: + myapp: + [...] + hooks: + build: | + set -eux + composer --no-ansi --no-interaction install --no-progress --prefer-dist --optimize-autoloader --no-dev + php artisan telescope:install + ``` + +For more options and information on how to manage authentication for the dashboard, +see the [Laravel Telecope documentation](https://laravel.com/docs/master/telescope#installation). + +## 3. Deploy the new release + +To enable Telescope, push your changes to {{% vendor/name %}}: + +```bash {location="Terminal"} +git add . +git commit -m "Enable Laravel Horizon" +{{< vendor/cli >}} push +``` + +You can now access the `/telescope` endpoint of your app. + +![Laravel Horizon Dashboard](/images/guides/laravel/telescope-dashboard.png "0.5") + +{{< note theme="tip" >}} + +Telescope uses a gate defined in `TelescopeServiceProvider.php` to authorize access to the dashboard. +Check that the logic here matches your needs. + +{{< /note >}} + +{{< guide-buttons previous="Back" next="FAQ" nextLink="/get-started/stacks/laravel/faq.md" type="*" >}} \ No newline at end of file diff --git a/sites/upsun/src/get-started/stacks/laravel/setup-redis.md b/sites/upsun/src/get-started/stacks/laravel/setup-redis.md new file mode 100644 index 0000000000..114280874a --- /dev/null +++ b/sites/upsun/src/get-started/stacks/laravel/setup-redis.md @@ -0,0 +1,97 @@ +--- +title: "Set up Redis" +weight: -119 +description: | + Setting up Redis for cache, sessions & queues +--- + +With Laravel, you can use Redis to handle session storage, cache storage, and queues. + +## 1. Add the Redis service + +1. [Add the service](/add-services.md#add-a-service) to your app configuration using the `services` top-level key: + + ```yaml {configFile="app"} + services: + [...] + redis: + type: redis:7.0 + ``` + +2. To connect the service to your app, add the following relationship: + + ```yaml {configFile="app"} + applications: + myapp: + [...] + relationships: + redis: "redis:redis" + + services: + [...] + redis: + type: redis:7.0 + ``` + +## 2. Configure your Redis service + +The [Redis](/add-services/redis) configuration is exposed via the following environment variables +(where `REDIS` is the upper-cased version of the key defined in the relationship): + +- `REDIS_URL`: The Redis URL +- `REDIS_HOST`: The Redis host +- `REDIS_PORT`: The Redis port +- `REDIS_SCHEME`: The Redis scheme + +If the relationship is named `redis`, Laravel automatically detects these variables and configure its own Redis driver the right way. +If not, you can map the variables in the `.environment` file. + +You can specify the Redis client in your `.environment` file: + +```bash {configFile="env"} +export REDIS_CLIENT="phpredis" +``` + +{{< note theme="warning" >}} + +If using `phpredis`, make sure you add `redis` in the list of PHP `runtime` extensions in your `{{< vendor/configfile "app" >}}`: + +```yaml {configFile="app"} +applications: + myapp: + [...] + runtime: + extensions: + - redis +``` + +{{< /note >}} + +## 3. Store the Laravel cache in Redis + +To enable cache storage in Redis, add the following environment variable to your `.environment` file: + +```bash {configFile="env"} +export CACHE_STORE="redis" +``` + +## 4. Store Laravel sessions in Redis + +Laravel relies on the `SESSION_DRIVER` variable to store sessions. Therefore, add the following environment variable to your `.environment` file: + +```bash {configFile="env"} +export SESSION_DRIVER="redis" +``` + +## 5. Use Redis for Laravel queues + +For a basic queueing system, configure the `QUEUE_CONNECTION` in your `.environment` file as follows: + +```bash {configFile="env"} +export QUEUE_CONNECTION="redis" +``` + +For more information, see the [Laravel Queues documentation](https://laravel.com/docs/master/queues) +and {{% vendor/name %}}'s [Horizon configuration page](./laravel-horizon). + +{{< guide-buttons previous="Back" next="Handle queues with Horizon" nextLink="/get-started/stacks/laravel/laravel-horizon.md" type="*" >}} \ No newline at end of file diff --git a/sites/upsun/src/get-started/stacks/symfony/_index.md b/sites/upsun/src/get-started/stacks/symfony/_index.md index 9d335d990f..90537626b1 100644 --- a/sites/upsun/src/get-started/stacks/symfony/_index.md +++ b/sites/upsun/src/get-started/stacks/symfony/_index.md @@ -2,7 +2,7 @@ title: Deploying Symfony on Upsun sidebarTitle: Symfony layout: single -weight: -65 +weight: -60 description: | Welcome to the Upsun documentation specific to the [Symfony](https://www.symfony.com/) framework on Upsun. It includes common reference materials useful for deploying Symfony, but also external community and blog resources that cover more advanced topics relevant for the framework. diff --git a/sites/upsun/src/languages/php/_index.md b/sites/upsun/src/languages/php/_index.md index 115cb88eb8..8fe64653e0 100644 --- a/sites/upsun/src/languages/php/_index.md +++ b/sites/upsun/src/languages/php/_index.md @@ -620,5 +620,5 @@ applications: All major PHP web frameworks can be deployed on {{% vendor/name %}}. See dedicated guides for deploying and working with them: -- [Laravel](/get-started/stacks/laravel.md) +- [Laravel](/get-started/stacks/laravel) - [Symfony](/get-started/stacks/symfony/_index.md) diff --git a/sites/upsun/static/images/guides/laravel/horizon-dashboard.png b/sites/upsun/static/images/guides/laravel/horizon-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..7a4286153391d79aeb93a24da5286970bd3a40dd GIT binary patch literal 257594 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

p3}n;WLo)Q|<;9m6_EEDp13vJs%yiHPrD5-~9N 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 P{**3WxsY|<@ZSFeT>Si; literal 0 HcmV?d00001 diff --git a/sites/upsun/static/images/guides/laravel/horizon-resources.png b/sites/upsun/static/images/guides/laravel/horizon-resources.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba06b38be0a86bb5648dfec6ed664c41f68a0d2 GIT binary patch literal 211492 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

O+ck3hgy}n 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⋼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%0AZx`elX^L1(p1MVI_5hx+l`7tcIhrs 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 C1z&Lh literal 0 HcmV?d00001 diff --git a/sites/upsun/static/images/guides/laravel/telescope-dashboard.png b/sites/upsun/static/images/guides/laravel/telescope-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e303236d4b2b2ef8e73add6fa9fdc9e2418847 GIT binary patch literal 126587 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

NPQv#?vN44LSNqE+I2JKFww2J4MzroNS!#}X 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 Date: Fri, 29 Mar 2024 13:30:08 -0400 Subject: [PATCH 17/24] [Express] Getting started guide (#3904) * Reinstate Express GS guide. * Fix express links. add add-database page. * Doc review --------- Co-authored-by: Anouck Colson --- sites/upsun/src/get-started/stacks/express.md | 40 -- .../src/get-started/stacks/express/_index.md | 344 ++++++++++++++++++ .../stacks/express/add-database.md | 234 ++++++++++++ sites/upsun/src/languages/nodejs/_index.md | 2 +- 4 files changed, 579 insertions(+), 41 deletions(-) delete mode 100644 sites/upsun/src/get-started/stacks/express.md create mode 100644 sites/upsun/src/get-started/stacks/express/_index.md create mode 100644 sites/upsun/src/get-started/stacks/express/add-database.md diff --git a/sites/upsun/src/get-started/stacks/express.md b/sites/upsun/src/get-started/stacks/express.md deleted file mode 100644 index b0e2d9c4e7..0000000000 --- a/sites/upsun/src/get-started/stacks/express.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Deploying Express on Upsun -sidebarTitle: Express -sectionBefore: Javascript/Node.js -weight: -100 -description: | - Welcome to the Upsun documentation specific to the Express framework on Upsun. - It includes common reference materials useful for deploying Express, but also external community and blog resources that cover more advanced topics relevant for the framework. ---- - -{{< note title="Hello, there!" theme="info" >}} - -{{% description %}} - -Before you proceed, be sure to checkout the [{{% vendor/name %}} demo app](https://console.upsun.com/projects/create-project) and the main [Getting started guide](/get-started/here/_index.md). These two resources provide all of the core concepts and common commands you'll need to know before using the materials below. - -{{< /note >}} - -## Getting started - -- [Upsun demo application](https://console.upsun.com/projects/create-project) -- [Upsun Getting started guide](/get-started/here/_index.md) -- [What is Upsun?](/learn/overview) - -## Documentation - -- [JavaScript/Node.js documentation](/languages/nodejs/) -- [Managing dependencies](/languages/nodejs#dependencies) - -## Community content - -- [ExpressJS topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=express) -- [Node.js topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=node) -- [JavaScript topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=js) - -## Blogs - -- [A quick-start guide on hosting Express on Upsun](https://upsun.com/blog/setting-up-express-on-upsun/) - - diff --git a/sites/upsun/src/get-started/stacks/express/_index.md b/sites/upsun/src/get-started/stacks/express/_index.md new file mode 100644 index 0000000000..d0139a78ee --- /dev/null +++ b/sites/upsun/src/get-started/stacks/express/_index.md @@ -0,0 +1,344 @@ +--- +title: Deploying Express on Upsun +sectionBefore: Javascript/Node.js +sidebarTitle: Express +weight: -100 +layout: single +description: | + Complete the last required steps to successfully deploy Express on {{% vendor/name %}}. +--- + +{{< note title="Note" theme="info" >}} + +Before you start, check out the [{{% vendor/name %}} demo app](https://console.upsun.com/projects/create-project) and the main [Getting started guide](/get-started/here/_index.md). +They provide all of the core concepts and common commands you need to know before using the materials below. + +{{< /note >}} + +{{% guides/requirements name="Express" %}} + +## 1. Create an Express app + +To create your Express app, follow these steps. + +1. Follow the Express [installation guide](https://expressjs.com/en/starter/installing.html). + To fast track the process, run the following commands: + + ```bash {location="Terminal"} + mkdir my-express-app && cd my-express-app + npx express-generator + ``` + +2. To initialize the local Git repository and commit local files, run the following commands: + + ```bash {location="Terminal"} + git init + echo "node_modules" >> .gitignore + git add . + git commit -m "Init Express application." + ``` + +{{< note theme="info" >}} +You can view your running app locally by installing dependencies (`npm install`) and running `npm run dev`. +The local server is visible at `localhost:3000`. +{{< /note >}} + +## 2. Create a new project + +To create a project on {{% vendor/name %}}, +follow these steps. + +{{< note title="Remember" >}} +After creating your {{% vendor/name %}} project, copy your new **project ID** for later use. +{{< /note >}} + +{{< codetabs >}} ++++ +title=Using the CLI ++++ +To create a new project with the {{% vendor/name %}} CLI, use the following command and follow the prompts: + +```bash {location="Terminal"} +{{% vendor/cli %}} project:create +``` + +{{< note >}} + +When creating a new project using the {{% vendor/name %}} CLI command `project:create`, +you are asked if you want to set the local remote to your new project. Enter **Yes (y)**. + +Your local source code is automatically linked to your newly created {{% vendor/name %}} project +through the creation of a `.{{% vendor/cli %}}/local/project.yaml`. +This file contains the corresponding `` for the {{% vendor/name %}} CLI to use, +and sets a Git remote to `{{% vendor/cli %}}`. + +{{< /note >}} + +<---> ++++ +title=Using the Console ++++ + +1. Create an organization or select an existing one. + +2. Click **Create from scratch**. + +3. Fill in details like the project name and [region](/development/regions.md). + + {{% note %}} + + You can define resources for your project later on, after your first push. + + {{% /note %}} + +4. To link your local source code to your new {{% vendor/name %}} project, + run the following command: + + ```bash {location="Terminal"} + {{% vendor/cli %}} project:set-remote + ``` + + This command adds a new remote called `{{% vendor/cli %}}` to your local Git repository, + which is equivalent to the following commands: + + ```bash {location="Terminal"} + git remote + origin + {{% vendor/cli %}} + ``` + + It also creates a new `.{{% vendor/cli %}}/local/project.yaml` file that contains the `` + for the `{{% vendor/cli %}}` CLI to use. + + {{< note theme="info" title="Tip" >}} + + If you forget your ``, run the following command and find your project in the list: + + ```bash {location="Terminal"} + {{% vendor/cli %}} project:list + ``` + {{< /note >}} + +{{< /codetabs >}} + +## 3. Choose your Git workflow + +You can use {{% vendor/name %}} projects as a classic Git repository, +where you are able to push your source code in different ways, +using either the Git CLI or the {{% vendor/name %}} CLI. +You can choose which way —or Git workflow— you want to use for your project from the following options: + +- Your project source code is **hosted on a {{% vendor/name %}} Git repository** +- Your project source code is **hosted on your own GitHub repository** + +{{< codetabs >}} ++++ +title={{% vendor/name %}} Git repository ++++ +For the rest of this guide, you will use the normal Git workflow (`git add . && git commit -m "message" && git push {{% vendor/cli %}}`) to commit your source code changes to Git history. +You will also use the {{% vendor/name %}} CLI to deploy your [{{% vendor/name %}} environment](/environments.html) with the latest code updates. + +<---> ++++ +title=GitHub repository ++++ +{{% vendor/name %}} provides a [Github integration](integrations/source/github.md) that allows your {{% vendor/name %}} project to be fully integrated with your Github repository. +This enables you, as a developer, to use a normal Git workflow (`git add . && git commit -m "message" && git push`) to deploy your environment—with no need to connect to the {{% vendor/name %}} Console. + +{{< note >}} +Make sure you complete the following steps before adding a [Github integration](integrations/source/github.md): + +1. Create a Git repository in your own organization following the relevant [Github repository creation guide](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-new-repository). +2. Create a [Github integration](integrations/source/github.md). +3. Add a Git remote to your local project, from the root of your Express directory.
+ To do so, run the following commands: + + ```bash {location="Terminal"} + git remote add origin + git add . && git commit -m "init express" + git push origin + ``` +{{< /note >}} + +{{< /codetabs >}} + +## 4. Configure your project + +To host your Express application on {{% vendor/name %}}, +you need to have a few YAML configuration files at the root of your project. +These files manage your app's behavior. +They are located in a `.{{% vendor/cli %}}/` folder at the root of your source code +and structured in a similar way to this: + +```txt +my-express-app +├── .{{% vendor/cli %}} +│ └── config.yaml +├── [.environment] +└── +``` + +To generate these files, run the following command at the root of your project: + +``` {location="Terminal"} +{{% vendor/cli %}} project:init +``` + +Follow the prompts. + +To commit your new files, run the following commands: + +```bash {location="Terminal"} +git add . +git commit -m "Add {{% vendor/name %}} config files" +``` + +## 5. Deploy + +And just like that, it’s time to deploy! + +Depending on the Git workflow you chose at the beginning of this tutorial, +there are two ways to deploy your source code changes. + +{{< codetabs >}} + ++++ +title=Using {{% vendor/name %}} Git repository ++++ + +You can push your code using the normal Git workflow (`git add . && git commit -m "message" && git push`). This pushes your source code changes to your `{{% vendor/cli %}}` remote repository. Alternatively, you can use the following {{% vendor/name %}} CLI command: + +```bash {location="Terminal"} +{{% vendor/cli %}} push +``` + +<---> ++++ +title=Using a third-party Git repository ++++ + +When you choose to use a third-party Git hosting service, the {{< vendor/name >}} Git +repository becomes a read-only mirror of the third-party repository. All your +changes take place in the third-party repository. + +Add an integration to your existing third-party repository: + +- [BitBucket](/integrations/source/bitbucket.md) +- [GitHub](/integrations/source/github.md) +- [GitLab](/integrations/source/gitlab.md) + +If you are using an integration, on each code updates, +use the normal Git workflow (`git add . && git commit -m "message" && git push`) to push your code to your external repository. +To do so, run the following command: + +```bash {location="Terminal"} +git push origin +``` + +Your GitHub, GitLab, or Bibucket integration process then automatically deploys changes to your environment. +If you're pushing a new Git branch, a new environment is created. + +{{< /codetabs >}} + +{{% vendor/name %}} then reads your configuration files, +and deploys your project using [default container resources](/manage-resources/resource-init.md). +If you don't want to use those default resources, +define your own [resource initialization strategy](/manage-resources/resource-init.md#define-a-resource-initialization-strategy), +or [amend those default container resources](/manage-resources/adjust-resources.md) after your project is deployed. + +Et voilà, your Express application is live! + +{{< note title="Tip" theme="info" >}} + +Each environment has its own domain name. +To open the URL of your new environment, run the following command: + + ```bash {location="Terminal"} + {{% vendor/cli %}} environment:url --primary + ``` +{{< /note >}} + +## 6. Make changes to your project + +Now that your project is deployed, you can start making changes to it. +For example, you might want to fix a bug or add a new feature. + +In your project, the `main` branch always represents the production environment. +Other branches are for developing new features, fixing bugs, or updating the infrastructure. + +To make changes to your project, follow these steps: + +1. Create a new environment (a Git branch) to make changes without impacting production: + + ```bash {location="Terminal"} + {{% vendor/cli %}} branch feat-a + ``` + + This command creates a new local `feat-a` Git branch based on the main Git branch, + and activates a related environment on {{< vendor/name >}}. + The new environment inherits the data (service data and assets) of its parent environment (the production environment here). + +2. Make changes to your project. + For example, edit the `views/index.jade` file and make the following changes: + + ```diff + diff --git a/views/index.jade b/views/index.jade + index 3d63b9a..77aee43 100644 + --- a/views/index.jade + +++ b/views/index.jade + @@ -2,4 +2,4 @@ extends layout + + block content + h1= title + - p Welcome to #{title} + + p Welcome to #{title} on Upsun + `` + +3. Commit your changes: + + ```bash {location="Terminal"} + git add views/index.jade + git commit -m "Update index page view." + ``` + +4. Deploy your changes to the `feat-a` environment: + + ```bash {location="Terminal"} + {{% vendor/cli %}} push + ``` + +5. Iterate by changing the code, committing, and deploying. + When satisfied with your changes, merge them to the main branch, + and remove the feature branch: + + ```bash {location="Terminal"} + {{% vendor/cli %}} merge + Are you sure you want to merge feat-a into its parent, main? [Y/n] y + {{% vendor/cli %}} checkout main + git pull {{% vendor/cli %}} main + {{% vendor/cli %}} environment:delete feat-a + git fetch --prune + ``` + + Note that deploying to production is fast because the image built for the `feat-a` environment is reused. + + For a long running branch, to keep the code up-to-date with the main branch, use `git merge main` or `git rebase main`. + You can also keep the data in sync with the production environment by using `{{% vendor/cli %}} env:sync`. + +## Further resources + +### Documentation + +- [JavaScript/Node.js documentation](/languages/nodejs/) +- [Managing dependencies](/languages/nodejs#dependencies) +- [Add a database to Express](/get-started/stacks/express/add-database) + +### Community content + +- [ExpressJS topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=express) +- [Node.js topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=node) +- [JavaScript topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=js) + +### Blogs + +- [A quick-start guide on hosting Express on Upsun](https://upsun.com/blog/setting-up-express-on-upsun/) diff --git a/sites/upsun/src/get-started/stacks/express/add-database.md b/sites/upsun/src/get-started/stacks/express/add-database.md new file mode 100644 index 0000000000..0291816904 --- /dev/null +++ b/sites/upsun/src/get-started/stacks/express/add-database.md @@ -0,0 +1,234 @@ +--- +title: "Add a database" +weight: -130 +description: | + Once your Express app has been deployed on {{% vendor/name %}}, you might want to add a service to it. +--- + +{{% description %}} + +{{% vendor/name %}} projects already include a [variety of managed services](/add-services.html#available-services), so you don’t have to subscribe to an external cache or search-engine services. + +As these services are included in your project, you can manage them through Git. +They’re backed up along with the rest of your project. +You can add new services and manage existing service configurations from your `.{{% vendor/cli %}}/config.yaml` file. + +For example, to add a [MariaDB database engine](/add-services/mysql.html) to your Express project, complete the following steps: + +## 1. Create a new branch for testing + +To create a new branch, run the following command: + +```bash {location="Terminal"} +{{% vendor/cli %}} environment:branch add-mysql-database +``` + +## 2. Add a MariaDB service + +Configure the MariaDB service by adding a `database` service to your `.{{% vendor/cli %}}/config.yaml` file: + +```yaml {location=".upsun/config.yaml"} +applications: + my-express-app: + source: + root: "/" + type: "nodejs:20" + + [...] + +{{< code-link destination="/add-services.html#available-services" text="services" title="Click to see the complete list of all available services" >}}: + database: + type: mariadb:{{% latest "mariadb" %}} +``` + +To connect the service to your application (``app``), add the following relationship: + +```yaml {location=".upsun/config.yaml"} +applications: + my-express-app: + source: + root: "/" + type: "nodejs:20" + + [...] + + relationships: + database: "database:mysql" + +{{< code-link destination="/add-services.html#available-services" text="services" title="Click to see the complete list of all available services" >}}: + database: + type: mariadb:{{% latest "mariadb" %}} +``` + +Commit your change: + +```bash {location="Terminal"} +git commit -am "adding MariaDb database service" +{{% vendor/cli %}} push +``` + +{{% vendor/name %}} now reads your configuration files and deploys your project using [default container resources](/manage-resources/resource-init.md). +If you don't want to use those default resources, +define your own [resource initialization strategy](/manage-resources/resource-init.md#define-a-resource-initialization-strategy), +or [amend those default container resources](/manage-resources/adjust-resources.md) after your project is deployed. + +## 3. Connect to the service + +To configure your Express app so it uses your new database, +you need a Node.s module named `mysql2`. +To install it, run the following command: + +```bash {location="Terminal"} +npm install mysql2 +``` + +Wherever your application code attemps to connect to the database service, +Upsun will automatically generate environment variables containing connection credentials as a function of the relationship name. + +In this example, the MariaDB service access is granted to the application container via the relationship `database`. +Upsun will therefore generate the variable `DATABASE_HOST` (among many others), using this name. + +Here's an example of how this credential variable naming convention is used to connect to a MariaDB service: + +```javascript {location="index.js"} +const express = require('express') +const app = express() +const mysql = require("mysql2/promise"); +const port = (process.env.PORT || '3000'); + +function openConnection() { + return mysql.createConnection({ + host: process.env.DATABASE_HOST, + port: process.env.DATABASE_PORT, + user: process.env.DATABASE_USERNAME, + password: process.env.DATABASE_PASSWORD, + database: process.env.DATABASE_DATABASE + }); +} + +function createTable(connection) { + return connection.execute( + `CREATE TABLE IF NOT EXISTS {{% vendor/cli %}}info ( + uid INT(10) NOT NULL AUTO_INCREMENT, + username VARCHAR(64) NULL DEFAULT NULL, + departname VARCHAR(128) NULL DEFAULT NULL, + created DATE NULL DEFAULT NULL, + PRIMARY KEY (uid) + ) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;` + ); +} + +function insertData(connection) { + return connection.execute( + "INSERT INTO {{% vendor/cli %}}info (username, departname, created) VALUES ('{{% vendor/cli %}}', 'Deploy Friday', '2023-09-29')" + ); +} + +function readData(connection) { + return connection.query("SELECT * FROM {{% vendor/cli %}}info"); +} + +function dropTable(connection) { + return connection.execute("DROP TABLE {{% vendor/cli %}}info"); +} + +// Define the main route. +app.get('/', async function(req, res){ + + // Connect to MariaDB. + const connection = await openConnection(); + + await createTable(connection); + await insertData(connection); + + const [rows] = await readData(connection); + + const droppedResult = await dropTable(connection); + + // Make the output. + const outputString = `Hello, World! - A simple Express web framework template for {{% vendor/name %}} + +MariaDB Tests: + +* Connect and add row: + - Row ID (1): ${rows[0].uid} + - Username ({{% vendor/cli %}}): ${rows[0].username} + - Department (Deploy Friday): ${rows[0].departname} + - Created (2023-09-29): ${rows[0].created} +* Delete row: + - Status (0): ${droppedResult[0].warningStatus}`; + + res.set('Content-Type', 'text/plain'); + res.send(outputString); +}); + +// Get PORT and start the server +app.listen(port, function() { + console.log(`Listening on port ${port}`) +}); +``` + +Commit and deploy your changes: + +```bash {location="Terminal"} +git add package.json package-lock.json index.js && git commit -m "adding MariaDb database service" +{{% vendor/cli %}} push +{{% vendor/cli %}} environment:url --primary +``` + +## 4. Merge to production + +When satisfied with your changes, merge them to the main branch: + +```bash {location="Terminal"} +{{% vendor/cli %}} merge +``` + +{{< note >}} +You can [adjust your project resources](/manage-resources/adjust-resources.md) at any time. +{{< /note >}} + +## 5. Remove the feature branch + +Then, remove the feature branch: + +```bash {location="Terminal"} +{{% vendor/cli %}} checkout main +git pull {{% vendor/cli %}} main +{{% vendor/cli %}} environment:delete add-mysql-database +git fetch --prune +``` + +{{< note >}} +When the `environment:delete` CLI command is run, the CLI suggests you deactivate and delete your `add-mysql-database` environment. +Make sure you opt in. +{{< /note >}} + +## Tips & Tricks + +You can get your project's relationship information using the following command: + +```bash {location="Terminal"} +{{% vendor/cli %}} relationships + ... + database: + - + username: user + scheme: mysql + service: mariadb + fragment: null + ip: 198.12.123.45 + hostname: abcdefghijklm1234567890123.mariadb.service._..{{< vendor/urlraw "hostname" >}} + public: false + cluster: abcdefgh1234567-add-mysql-database-abcd123 + host: mariadb.internal + rel: mysql + query: + is_master: true + path: main + password: '' + type: 'mariadb:10.6' + port: 3306 + host_mapped: false + url: 'mysql://user:@mariadb.internal:3306/main' +``` diff --git a/sites/upsun/src/languages/nodejs/_index.md b/sites/upsun/src/languages/nodejs/_index.md index 12a61a6cee..00032730af 100644 --- a/sites/upsun/src/languages/nodejs/_index.md +++ b/sites/upsun/src/languages/nodejs/_index.md @@ -377,6 +377,6 @@ highlight=js All major Javascript/Node.js web frameworks can be deployed on {{% vendor/name %}}. See dedicated guides for deploying and working with them: -- [Express](/get-started/stacks/express.md) +- [Express](/get-started/stacks/express) - [Next.js](/get-started/stacks/nextjs.md) - [Strapi](/get-started/stacks/strapi.md) From 7d00362594e02b87c184c97dfcec083200ea9239 Mon Sep 17 00:00:00 2001 From: Chad Carlson Date: Tue, 2 Apr 2024 08:01:22 -0400 Subject: [PATCH 18/24] Restore simplified relationships (updated) (#3881) * Update registry to use service names for relationship names. * add-services/_index.md * add-services/headless-chrome.md * themes/../partials/examples/relationships.html * themes/../partials/examples/servicedefn.html * themes/../shortcodes/endpoint-description.md * themes/../shortcodes/v2connect2app.md * add-services/influxdb.md * Fix usage example indents and comment spacing. * add-services/kafka * add-services/memcached. * Fix double = typo. * add-services/mongodb.md * endpoint-description > oracle-mysql fix * add-services/mysql/_index.md * add-services/mysql/mysql-replication. * add-services/network-storage * add-services/opensearch.md * add-services/postgresql * add-services/rabbitmq.md * add-services/redis * add-services/solr.md * add-services/varnish * Fix random character mistake. * create-apps/_index.md * create-apps/app-reference * guides/drupal/redis. * languages/elixir. * languages/java/migration * languages/lisp. * languages/ruby. * learn/tutorials/restrict-service-access * create-apps/workers. * [guides|get-started/stacks]/symfony/environment-variables --- shared/data/registry.json | 38 +-- sites/platform/src/add-services/_index.md | 72 ++--- .../src/add-services/headless-chrome.md | 6 +- sites/platform/src/add-services/influxdb.md | 34 ++- sites/platform/src/add-services/kafka.md | 4 +- sites/platform/src/add-services/memcached.md | 6 +- sites/platform/src/add-services/mongodb.md | 9 +- .../platform/src/add-services/mysql/_index.md | 29 +- .../add-services/mysql/mysql-replication.md | 17 +- .../src/add-services/network-storage.md | 25 +- sites/platform/src/add-services/opensearch.md | 51 ++-- sites/platform/src/add-services/postgresql.md | 64 ++-- sites/platform/src/add-services/rabbitmq.md | 6 +- sites/platform/src/add-services/redis.md | 63 ++-- sites/platform/src/add-services/solr.md | 56 ++-- sites/platform/src/add-services/varnish.md | 94 +++--- sites/platform/src/create-apps/_index.md | 9 +- .../platform/src/create-apps/app-reference.md | 183 ++++++++++-- sites/platform/src/create-apps/workers.md | 16 +- sites/platform/src/guides/drupal/redis.md | 64 +--- .../guides/symfony/environment-variables.md | 6 +- sites/platform/src/languages/elixir.md | 11 +- .../platform/src/languages/java/migration.md | 14 +- sites/platform/src/languages/lisp.md | 4 +- sites/platform/src/languages/ruby.md | 14 +- .../tutorials/restrict-service-access.md | 12 +- sites/upsun/src/add-services/_index.md | 109 +++---- .../upsun/src/add-services/headless-chrome.md | 59 ++-- sites/upsun/src/add-services/influxdb.md | 72 +++-- sites/upsun/src/add-services/kafka.md | 22 +- sites/upsun/src/add-services/memcached.md | 55 ++-- sites/upsun/src/add-services/mongodb.md | 78 ++--- sites/upsun/src/add-services/mysql/_index.md | 257 ++++++++-------- .../add-services/mysql/mysql-replication.md | 74 +++-- .../upsun/src/add-services/network-storage.md | 254 +++++++++------- sites/upsun/src/add-services/opensearch.md | 127 ++++---- sites/upsun/src/add-services/postgresql.md | 276 ++++++++++-------- sites/upsun/src/add-services/rabbitmq.md | 91 +++--- sites/upsun/src/add-services/redis.md | 260 ++++++++++------- sites/upsun/src/add-services/solr.md | 261 +++++++++-------- sites/upsun/src/add-services/varnish.md | 134 +++++---- sites/upsun/src/create-apps/_index.md | 12 +- sites/upsun/src/create-apps/app-reference.md | 274 +++++++++++++++-- sites/upsun/src/create-apps/workers.md | 228 +++++++-------- .../stacks/symfony/environment-variables.md | 6 +- sites/upsun/src/languages/elixir.md | 16 +- sites/upsun/src/languages/java/migration.md | 25 +- sites/upsun/src/languages/lisp.md | 4 +- sites/upsun/src/languages/ruby.md | 13 +- .../tutorials/restrict-service-access.md | 13 +- .../partials/examples/relationship.html | 55 ++-- .../partials/examples/servicedefn.html | 9 +- themes/psh-docs/layouts/partials/snippet.html | 23 +- .../shortcodes/endpoint-description.md | 90 ++---- .../layouts/shortcodes/v2connect2app.md | 4 +- 55 files changed, 2211 insertions(+), 1597 deletions(-) diff --git a/shared/data/registry.json b/shared/data/registry.json index 9d70e28fce..f1400c9aa5 100644 --- a/shared/data/registry.json +++ b/shared/data/registry.json @@ -3,8 +3,8 @@ "description": "", "disk": false, "docs": { - "relationship_name": "chromeheadlessbrowser", - "service_name": "chromeheadless", + "relationship_name": "chrome-headless", + "service_name": "chrome-headless", "url": "/add-services/headless-chrome.html" }, "endpoint": "http", @@ -100,7 +100,7 @@ "description": "A manufacture service for Elasticsearch", "disk": true, "docs": { - "relationship_name": "essearch", + "relationship_name": "elasticsearch", "service_name": "elasticsearch", "url": "/add-services/elasticsearch.html" }, @@ -276,7 +276,7 @@ "description": "", "disk": true, "docs": { - "relationship_name": "influxdbdatabase", + "relationship_name": "influxdb", "service_name": "influxdb", "url": "/add-services/influxdb.html" }, @@ -355,7 +355,7 @@ "description": "", "disk": true, "docs": { - "relationship_name": "kafkaqueue", + "relationship_name": "kafka", "service_name": "kafka", "url": "/add-services/kafka.html" }, @@ -431,7 +431,7 @@ "repo_name": "mariadb", "disk": true, "docs": { - "relationship_name": "mariadbdatabase", + "relationship_name": "mariadb", "service_name": "mariadb", "url": "/add-services/mysql.html" }, @@ -491,7 +491,7 @@ "repo_name": "mariadb", "disk": true, "docs": { - "relationship_name": "mysqldatabase", + "relationship_name": "mysql", "service_name": "mysql", "url": "/add-services/mysql.html" }, @@ -547,7 +547,7 @@ "repo_name": "memcached", "disk": false, "docs": { - "relationship_name": "memcachedcache", + "relationship_name": "memcached", "service_name": "memcached", "url": "/add-services/memcached.html" }, @@ -573,7 +573,7 @@ "repo_name": "mongodb", "disk": true, "docs": { - "relationship_name": "mongodbdatabase", + "relationship_name": "mongodb", "service_name": "mongodb", "url": "/add-services/mongodb.html" }, @@ -598,8 +598,8 @@ "repo_name": "mongodb", "disk": true, "docs": { - "relationship_name": "mongodbdatabase", - "service_name": "mongodb", + "relationship_name": "mongodb-enterprise", + "service_name": "mongodb-enterprise", "url": "/add-services/mongodb.html" }, "endpoint": "mongodb", @@ -712,7 +712,7 @@ "description": "A manufacture service for OpenSearch", "disk": true, "docs": { - "relationship_name": "ossearch", + "relationship_name": "opensearch", "service_name": "opensearch", "url": "/add-services/opensearch.html" }, @@ -754,7 +754,7 @@ "repo_name": "oracle-mysql", "disk": true, "docs": { - "relationship_name": "oracledatabase", + "relationship_name": "oracle-mysql", "service_name": "oracle-mysql", "url": "/add-services/mysql.html" }, @@ -844,7 +844,7 @@ "repo_name": "postgresql", "disk": true, "docs": { - "relationship_name": "postgresqldatabase", + "relationship_name": "postgresql", "service_name": "postgresql", "url": "/add-services/postgresql.html" }, @@ -946,7 +946,7 @@ "repo_name": "rabbitmq", "disk": true, "docs": { - "relationship_name": "rabbitmqqueue", + "relationship_name": "rabbitmq", "service_name": "rabbitmq", "url": "/add-services/rabbitmq.html" }, @@ -1002,7 +1002,7 @@ "repo_name": "redis", "disk": false, "docs": { - "relationship_name": "rediscache", + "relationship_name": "redis", "service_name": "redis", "url": "/add-services/redis.html" }, @@ -1150,7 +1150,7 @@ "repo_name": "solr", "disk": true, "docs": { - "relationship_name": "solrsearch", + "relationship_name": "solr", "service_name": "solr", "url": "/add-services/solr.html" }, @@ -1206,7 +1206,7 @@ "repo_name": "varnish", "disk": false, "docs": { - "relationship_name": "varnishstats", + "relationship_name": "varnish", "service_name": "varnish", "url": "/add-services/varnish.html" }, @@ -1236,7 +1236,7 @@ "description": "", "disk": true, "docs": { - "relationship_name": "vault_secret", + "relationship_name": "vault-kms", "service_name": "vault-kms", "url": "/add-services/vault.html" }, diff --git a/sites/platform/src/add-services/_index.md b/sites/platform/src/add-services/_index.md index c553c372d1..25fad846de 100644 --- a/sites/platform/src/add-services/_index.md +++ b/sites/platform/src/add-services/_index.md @@ -28,27 +28,27 @@ All service configuration happens in the `{{< vendor/configfile "services" >}}` Configure your service in the following pattern: ```yaml {configFile="services"} -{{% snippet name="SERVICE_NAME" config="service" %}} +# The name of the service container. Must be unique within a project. +SERVICE_NAME: type: {{}}:{{}} # Other options... -{{% /snippet %}} ``` An example service configuration for two databases might look like this: ```yaml {configFile="services"} -{{% snippet name="database1" config="service" %}} +# The name of the service container. Must be unique within a project. +mariadb: type: mariadb:{{% latest "mariadb" %}} disk: 2048 -{{% /snippet %}} -{{% snippet name="database2" config="service" globKey="false" %}} +# The name of the service container. Must be unique within a project. +postgresql: type: postgresql:{{% latest "postgresql" %}} disk: 1024 -{{% /snippet %}} ``` This YAML file is a dictionary defining all of the services you want to use. -The top-level key is a custom service name ({{}}; in the example, `database1` and `database2`), which you use to identify the service in step 2. +The top-level key is a custom service name ({{}}; in the example, `mariadb` and `postgresql`), which you use to identify the service in step 2. You can give it any name you want with lowercase alphanumeric characters, hyphens, and underscores. @@ -70,7 +70,7 @@ The following table presents the keys you can define for each service: | `disk` | `integer` | For some services | The size in [MB](/glossary.md#mb) of the [persistent disk](#disk) allocated to the service. Can't be set for memory-resident-only services such as `memcache` and `redis`. Limited by your plan settings. | | `size` | `string` | | How many CPU and memory [resources to allocate](#size) to the service. Possible values are `AUTO`, `S`, `M`, `L`, `XL`, `2XL`, and `4XL`. Limited by your plan settings.

When `AUTO` applies, available resources are automatically balanced out based on the number of containers on your plan, so that no container is oversized compared to the others. To view the actual sizes of your containers, check the **Environment Configuration** section in your deployment [activity logs](../increase-observability/logs/access-logs.md#activity-logs). | | `configuration` | dictionary | For some services | Some services have additional specific configuration options that can be defined here, such as specific endpoints. See the given service page for more details. | -| `relationships` | dictionary | For some services | Some services require a relationship to your app. The content of the dictionary has the same type as the `relationships` dictionary for [app configuration](../create-apps/app-reference.md#relationships). The `endpoint_name` for apps is always `http`. | +| `relationships` | dictionary | For some services | Some services require a relationship to your app. The content of the dictionary has the same type as the `relationships` dictionary for [app configuration](/create-apps/app-reference.md#relationships). The `endpoint_name` for apps is always `http`. | ##### Disk @@ -90,46 +90,46 @@ Note that service containers in preview environments are always set to size `S`. ### 2. Connect the service -Once you have configured a service, you need to create a relationship to connect it to an app. -This is done in your [app configuration for relationships](../create-apps/app-reference.md#relationships). - -The relationship follows this pattern: +To connect the service, use the following configuration: ```yaml {configFile="app"} -{{% snippet name="" config="app" root="false"%}} - # Other options... # Relationships enable an app container's access to a service. +# The example below shows simplified configuration leveraging a default service (identified from the relationship name) and a default endpoint. +# See the Application reference for all options for defining relationships and endpoints. relationships: - {{< variable "RELATIONSHIP_NAME" >}}: "{{< variable "SERVICE_NAME" >}}:{{< variable "ENDPOINT" >}}" -{{% /snippet %}} -{{% snippet name="SERVICE_NAME" config="service" placeholder="true"%}} - type: {{}}:{{}} - # Other options... -{{% /snippet %}} + {{}}: ``` +You can define `` as you like, so long as it's unique between all defined services +and matches in both the application and services configuration. + +The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. +That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) +(the network address a service is accessible from) that is identical to the _name_ of that service. + +Depending on your needs, instead of default endpoint configuration, +you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). + An example relationship to connect to the databases given in the [example in step 1](#1-configure-the-service): ```yaml {configFile="app"} -{{< snippet name="" config="app" root="false">}} - # Other options... -# Relationships enable an app container's to a service. +# Relationships enable an app container's access to a service. relationships: - mysql_database: "database1:mysql" - postgresql_database: "database2:postgresql" -{{% /snippet %}} -{{% snippet name="database1" config="service" placeholder="true" %}} + mariadb: + postgresql: +``` + +```yaml {configFile="services"} +mariadb: type: mariadb:{{% latest "mariadb" %}} disk: 2048 -{{% /snippet %}} -{{% snippet name="database2" config="service" globKey="false" placeholder="true" %}} +postgresql: type: postgresql:{{% latest "postgresql" %}} disk: 1024 -{{% /snippet %}} ``` As with the service name, you can give the relationship any name you want @@ -201,17 +201,17 @@ To get the credentials for a given service, run the following command: You get output like the following: ```yaml -database: +mariadb: - username: user scheme: mysql - service: database + service: mariadb fragment: null ip: 198.51.100.37 - hostname: abcdefghijklm1234567890123.database.service._.eu.{{< vendor/urlraw "hostname" >}} + hostname: abcdefghijklm1234567890123.mariadb.service._.eu.{{< vendor/urlraw "hostname" >}} public: false cluster: abcdefgh1234567-main-abcd123 - host: database.internal + host: mariadb.internal rel: mysql query: is_master: true @@ -220,10 +220,10 @@ database: type: 'mariadb:10.6' port: 3306 host_mapped: false - url: 'mysql://user:@database.internal:3306/main' + url: 'mysql://user:@mariadb.internal:3306/main' ``` -With this example, you can connect to the `database` relationship +With this example, you can connect to the `mariadb` relationship with the user `user`, an empty password, and the database name `main` (from the `path`). The `url` property shows a full database connection that can be used from your app. diff --git a/sites/platform/src/add-services/headless-chrome.md b/sites/platform/src/add-services/headless-chrome.md index e545d4315b..a6684f4589 100644 --- a/sites/platform/src/add-services/headless-chrome.md +++ b/sites/platform/src/add-services/headless-chrome.md @@ -42,7 +42,7 @@ Puppeteer can be used to generate PDFs and screenshots of web pages, automate fo "ip": "123.456.78.90", "hostname": "azertyuiopqsdfghjklm.chromeheadless.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "cluster": "azertyuiop-main-7rqtwti", - "host": "chromeheadlessbrowser.internal", + "host": "chromeheadless.internal", "rel": "http", "scheme": "http", "type": "chrome-headless:{{< latest "chrome-headless" >}}", @@ -103,7 +103,7 @@ Using the [Node.js Config Reader library](../development/variables/use-variables const platformsh = require('platformsh-config'); const config = platformsh.config(); -const credentials = config.credentials('chromeheadlessbrowser'); +const credentials = config.credentials('chromeheadless'); ``` and use them to define the `browserURL` parameter of `puppeteer.connect()` within an `async` function: @@ -112,7 +112,7 @@ and use them to define the `browserURL` parameter of `puppeteer.connect()` withi exports.getBrowser = async function (url) { try { // Connect to chrome-headless using pre-formatted puppeteer credentials - const formattedURL = config.formattedCredentials('chromeheadlessbrowser', 'puppeteer'); + const formattedURL = config.formattedCredentials('chromeheadless', 'puppeteer'); const browser = await puppeteer.connect({browserURL: formattedURL}); ... diff --git a/sites/platform/src/add-services/influxdb.md b/sites/platform/src/add-services/influxdb.md index 74c27fba3f..a57129ef5f 100644 --- a/sites/platform/src/add-services/influxdb.md +++ b/sites/platform/src/add-services/influxdb.md @@ -65,7 +65,7 @@ See more information on [how to upgrade to version 2.3 or later](#upgrade-to-ver ```json { - "host": "influxdbdatabase.internal", + "host": "influxdb.internal", "hostname": "azertyuiopqsdfghjklm.influxdb.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "cluster": "azertyuiopqsdf-main-bvxea6i", "service": "influxdb", @@ -93,29 +93,33 @@ See more information on [how to upgrade to version 2.3 or later](#upgrade-to-ver {{% endpoint-description type="influxdb" /%}} ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} +# The name of the app container. Must be unique within a project. +name: myapp + +[...] + # Relationships enable an app container's access to a service. relationships: - influxdbdatabase: "influxdb:influxdb" -{{% /snippet %}} -{{% snippet name="influxdb" config="service" placeholder="true" %}} + influxdb: +``` + +```yaml {configFile="services"} +influxdb: type: influxdb:{{% latest "influxdb" %}} - disk: 256 -{{% /snippet %}} ``` -{{% v2connect2app serviceName="influxdb" relationship="influxdbdatabase" var="INFLUX_HOST"%}} +{{% v2connect2app serviceName="influxdb" relationship="influxdb" var="INFLUX_HOST"%}} ```bash {location="myapp/.environment"} # Decode the built-in credentials object variable. export RELATIONSHIPS_JSON=$(echo ${{< vendor/prefix >}}_RELATIONSHIPS | base64 --decode) # Set environment variables for common InfluxDB credentials. -export INFLUX_USER=$(echo $RELATIONSHIPS_JSON | jq -r ".influxdbdatabase[0].username") -export INFLUX_HOST=$(echo $RELATIONSHIPS_JSON | jq -r ".influxdbdatabase[0].host") -export INFLUX_ORG=$(echo $RELATIONSHIPS_JSON | jq -r ".influxdbdatabase[0].query.org") -export INFLUX_TOKEN=$(echo $RELATIONSHIPS_JSON | jq -r ".influxdbdatabase[0].query.api_token") -export INFLUX_BUCKET=$(echo $RELATIONSHIPS_JSON | jq -r ".influxdbdatabase[0].query.bucket") +export INFLUX_USER=$(echo $RELATIONSHIPS_JSON | jq -r ".influxdb[0].username") +export INFLUX_HOST=$(echo $RELATIONSHIPS_JSON | jq -r ".influxdb[0].host") +export INFLUX_ORG=$(echo $RELATIONSHIPS_JSON | jq -r ".influxdb[0].query.org") +export INFLUX_TOKEN=$(echo $RELATIONSHIPS_JSON | jq -r ".influxdb[0].query.api_token") +export INFLUX_BUCKET=$(echo $RELATIONSHIPS_JSON | jq -r ".influxdb[0].query.bucket") ``` {{% /v2connect2app %}} @@ -134,7 +138,7 @@ To export your data from InfluxDB, follow these steps: This opens an SSH tunnel to your InfluxDB service on your current environment and produces output like the following: ```bash - SSH tunnel opened to influxdbdatabase at: http://127.0.0.1:30000 + SSH tunnel opened to {{}} at: http://127.0.0.1:30000 ``` 3. Get the username, password and token from the [relationship](#relationship-reference) by running the following command: @@ -167,7 +171,7 @@ If you're relying on any other attributes connecting to InfluxDB, they remain ac ```json { - "host": "influxdbdatabase.internal", + "host": "influxdb.internal", "hostname": "azertyuiopqsdfghjklm.influxdb.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "cluster": "azertyuiopqsdf-main-bvxea6i", "service": "influxdb", diff --git a/sites/platform/src/add-services/kafka.md b/sites/platform/src/add-services/kafka.md index 1c72c366c3..e8c0eeb495 100644 --- a/sites/platform/src/add-services/kafka.md +++ b/sites/platform/src/add-services/kafka.md @@ -41,7 +41,7 @@ It is a framework for storing, reading and analyzing streaming data. See the [Ka "ip": "123.456.78.90", "hostname": "azertyuiopqsdfghjklm.kafka.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "cluster": "azertyuiop-main-7rqtwti", - "host": "kafkaqueue.internal", + "host": "kafka.internal", "rel": "kafka", "scheme": "kafka", "type": "kafka:{{< latest "kafka" >}}", @@ -80,7 +80,7 @@ highlight=ruby # Producer require "kafka" -kafka = Kafka.new(["kafkaqueue.internal:9092"], client_id: "my-application") +kafka = Kafka.new(["kafka.internal:9092"], client_id: "my-application") kafka.deliver_message("Hello, World!", topic: "greetings") # Consumer diff --git a/sites/platform/src/add-services/memcached.md b/sites/platform/src/add-services/memcached.md index 1bd7b2d8b3..7374bdf2e7 100644 --- a/sites/platform/src/add-services/memcached.md +++ b/sites/platform/src/add-services/memcached.md @@ -51,7 +51,7 @@ Both Memcached and Redis can be used for application caching. As a general rule, "ip": "123.456.78.90", "hostname": "azertyuiopqsdfghjklm.memcached.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "cluster": "azertyuiopqsdf-main-afdwftq", - "host": "memcachedcache.internal", + "host": "memcached.internal", "rel": "memcached", "scheme": "memcached", "type": "memcached:{{% latest "memcached" %}}", @@ -108,11 +108,11 @@ highlight=python ## Accessing Memcached directly To access the Memcached service directly you can use `netcat` as Memcached doesn't have a dedicated client tool. -Assuming your Memcached relationship is named `memcachedcache`, the host name and port number obtained from `{{< vendor/prefix >}}_RELATIONSHIPS` would be `memcachedcache.internal` and `11211`. +Assuming your Memcached relationship is named `memcached`, the host name and port number obtained from `{{< vendor/prefix >}}_RELATIONSHIPS` would be `memcached.internal` and `11211`.
Open an [SSH session](/development/ssh/_index.md) and access the Memcached server as follows: ```bash {location="Terminal"} -netcat memcachedcache.internal 11211 +netcat memcached.internal 11211 ``` {{% service-values-change %}} diff --git a/sites/platform/src/add-services/mongodb.md b/sites/platform/src/add-services/mongodb.md index e41d074cec..63ec4979af 100644 --- a/sites/platform/src/add-services/mongodb.md +++ b/sites/platform/src/add-services/mongodb.md @@ -91,7 +91,7 @@ If you want to experiment with a later version without committing to it use a pr "ip": "123.456.78.90", "hostname": "azertyuiopqsdfghjklm.mongodb.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "cluster": "azertyuiop-main-7rqtwti", - "host": "mongodbdatabase.internal", + "host": "mongodb.internal", "rel": "mongodb", "query": { "is_master": true @@ -162,13 +162,13 @@ Get the `host` from your [relationship](#relationship-reference). Then run the following command: ```bash -mongo {{< variable "MONGODBDATABASE_HOST" >}} +mongo {{< variable "MONGODB_HOST" >}} ``` With the example value, that would be the following: ```bash -mongo mongodbdatabase.internal +mongo mongodb.internal ``` {{% service-values-change %}} @@ -187,8 +187,7 @@ First, open an SSH tunnel with the {{% vendor/name %}} CLI: That opens an SSH tunnel to all services on your current environment and produce output like the following: ```bash -SSH tunnel opened on port 30000 to relationship: database -SSH tunnel opened on port 30001 to relationship: redis +SSH tunnel opened on port 30000 to relationship: mongodb ``` The port may vary in your case. diff --git a/sites/platform/src/add-services/mysql/_index.md b/sites/platform/src/add-services/mysql/_index.md index 01774f71aa..9da1106e20 100644 --- a/sites/platform/src/add-services/mysql/_index.md +++ b/sites/platform/src/add-services/mysql/_index.md @@ -166,7 +166,8 @@ You can configure your MySQL service in the [services configuration](../_index.m Example configuration: ```yaml {configFile="services"} -{{% snippet name="mariadb" config="service" %}} +# The name of the service container. Must be unique within a project. +mariadb: type: mariadb:{{% latest "mariadb" %}} disk: 2048 configuration: @@ -179,7 +180,6 @@ Example configuration: main: admin properties: max_allowed_packet: 64 -{{% /snippet %}} ``` {{% relationship-ref-intro %}} @@ -198,7 +198,7 @@ Example configuration: "hostname": "azertyuiopqsdfghjklm.mariadb.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 3306, "cluster": "azertyuiop-main-7rqtwti", - "host": "mariadbdatabase.internal", + "host": "mariadb.internal", "rel": "mysql", "path": "main", "query": { @@ -223,7 +223,7 @@ Example configuration: "hostname": "azertyuiopqsdfghjklm.oracle-mysql.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 3306, "cluster": "azertyuiop-main-afdwftq", - "host": "oracledatabase.internal", + "host": "oraclemysql.internal", "rel": "mysql", "path": "main", "query": { @@ -251,13 +251,13 @@ mysql -h {{< variable "HOST" >}} -P {{< variable "PORT" >}} -u {{< variable "USE Assuming the values from the [MariaDB reference](#mariadb-reference), that would be: ```bash -mysql -h mariadbdatabase.internal -P 3306 -u user main +mysql -h mariadb.internal -P 3306 -u user main ``` If your database relationship has a password, pass the `-p` switch and enter the password when prompted: ```bash -mysql -p -h mariadbdatabase.internal -P 3306 -u user main +mysql -p -h mariadb.internal -P 3306 -u user main ``` ## Define permissions @@ -290,7 +290,8 @@ You can also specify multiple `endpoints` for [permissions](#define-permissions) If neither `schemas` nor `endpoints` is included, it's equivalent to the following default: ```yaml {configFile="services"} -{{% snippet name="mariadb" config="service" %}} +# The name of the service container. Must be unique within a project. +mariadb: type: mariadb:{{% latest "mariadb" %}} disk: 2048 configuration: @@ -301,7 +302,6 @@ If neither `schemas` nor `endpoints` is included, it's equivalent to the followi default_schema: main privileges: main: admin -{{% /snippet %}} ``` If either `schemas` or `endpoints` are defined, no default is applied and you have to specify the full configuration. @@ -323,7 +323,8 @@ Access to the database is defined through three endpoints: * `importer` has SELECT/INSERT/UPDATE/DELETE (but not DDL) access to `legacy` but no access to `main`. ```yaml {configFile="services"} -{{% snippet name="mariadb" config="service" %}} +# The name of the service container. Must be unique within a project. +mariadb: type: mariadb:{{% latest "mariadb" %}} disk: 2048 configuration: @@ -343,22 +344,20 @@ Access to the database is defined through three endpoints: default_schema: legacy privileges: legacy: rw -{{% /snippet %}} ``` Expose these endpoints to your app as relationships in your [app configuration](../../create-apps/_index.md): ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} +name: myapp -# Other options... +[...] # Relationships enable an app container's access to a service. relationships: database: "mariadb:admin" reports: "mariadb:reporter" imports: "mariadb:importer" -{{% /snippet %}} ``` These relationships are then available in the [`{{< vendor/prefix >}}_RELATIONSHIPS` environment variable](#relationship-reference). @@ -388,7 +387,8 @@ It offers the following properties: An example of setting these properties: ```yaml {configFile="services"} -{{% snippet name="db" config="service" %}} +# The name of the service container. Must be unique within a project. +mariadb: type: mariadb:{{% latest "mariadb" %}} disk: 2048 configuration: @@ -396,7 +396,6 @@ An example of setting these properties: max_allowed_packet: 64 default_charset: utf8mb4 default_collation: utf8mb4_unicode_ci -{{% /snippet %}} ``` You can also change a table's character set and collation through `ALTER TABLE` commands: diff --git a/sites/platform/src/add-services/mysql/mysql-replication.md b/sites/platform/src/add-services/mysql/mysql-replication.md index 947620d7a3..7c359dc146 100644 --- a/sites/platform/src/add-services/mysql/mysql-replication.md +++ b/sites/platform/src/add-services/mysql/mysql-replication.md @@ -18,7 +18,8 @@ To set up replication you need to create a replication-enabled user. For each database that you'd like to replicate, you need to assign a `replication` permission/role, under a corresponding `endpoint`: ```yaml {configFile="services"} -{{% snippet name="mariadb" config="service" %}} +# The name of the service container. Must be unique within a project. +mariadb: type: mariadb:{{% latest "mariadb" %}} disk: 1024 configuration: @@ -33,7 +34,6 @@ For each database that you'd like to replicate, you need to assign a `replicatio replicator: privileges: main: replication -{{% /snippet %}} ``` This creates a `replicator` user, and grants read-only and table locking rights on the `main` database (namely `Select_priv`, `Show_view_priv`, `Create_tmp_table_priv`, `Lock_tables_priv` privileges) along with global replication rights (namely `Repl_slave_priv` and `Repl_client_priv` privileges) and flushing rights (`Reload_priv` used for flushing before reading the binary log position). If there is at least one `replication` permission defined, the bin-logging is enabled on the primary server, which is essential for the replication. @@ -44,15 +44,18 @@ Even if you won't be accessing the replication endpoint from your application, y Add a new relationship to your application container: ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} +name: myapp -# Other options... +[...] # Relationships enable an app container's access to a service. relationships: - database: mariadb:mysql - replication: mariadb:replicator -{{% /snippet %}} + database: + service: mariadb + endpoint: mysql + replication: + service: mariadb + endpoint: replicator ``` ## Getting the Primary's Binary Log Co-ordinates diff --git a/sites/platform/src/add-services/network-storage.md b/sites/platform/src/add-services/network-storage.md index 763ce3bc4b..f45729142e 100644 --- a/sites/platform/src/add-services/network-storage.md +++ b/sites/platform/src/add-services/network-storage.md @@ -82,15 +82,15 @@ the files are shared between the two applications even if the mount location is It's also possible to have one app mount a `source_path` that's a subdirectory of another application's mount. For example: -`app1`: - ```yaml {configFile="apps"} # The name of the app container. Must be unique within a project. app1: # The location of the application's code. source: - root: "/" - ... + root: "app1" + + [...] + mounts: 'web/uploads': source: service @@ -101,8 +101,10 @@ app1: app2: # The location of the application's code. source: - root: "/" - ... + root: "app2" + + [...] + mounts: 'process': source: service @@ -140,6 +142,8 @@ You can then use this service to define a `network_dir` network mount and a `lo to be used by a `web` instance and a `queue` worker instance: ```yaml {configFile="app"} +name: myapp + # The type of the application to build. type: "nodejs:20" @@ -166,9 +170,6 @@ mounts: source: local source_path: my_stuff -# Define how much space is available to local mounts -disk: 512 - # Define a web instance web: locations: @@ -201,11 +202,13 @@ For example, the following `{{< vendor/configfile "app" >}}` file (fragment) kee (This assumes a Network Storage service named `files` has also been defined in `{{< vendor/configfile "services" >}}`.) ```yaml {configFile="app"} +name: myapp + # The type of the application to build. -"php:{{% latest "php" %}}" +type: "php:{{% latest "php" %}}" relationships: - mariadbdatabase: "mariadb:mysql" + mariadb: disk: 1024 diff --git a/sites/platform/src/add-services/opensearch.md b/sites/platform/src/add-services/opensearch.md index 08798a787a..8c50c4322e 100644 --- a/sites/platform/src/add-services/opensearch.md +++ b/sites/platform/src/add-services/opensearch.md @@ -80,7 +80,7 @@ switch to [a supported version](#supported-versions). "hostname": "azertyuiopqsdfghjklm.opensearch.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 9200, "cluster": "azertyuiopqsdf-main-7rqtwti", - "host": "ossearch.internal", + "host": "opensearch.internal", "rel": "opensearch", "path": null, "query": [], @@ -100,31 +100,28 @@ switch to [a supported version](#supported-versions). To use the configured service in your app, add a configuration file similar to the following to your project. ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} -# Relationships enable an app container's access to a service. +name: myapp + +[...] + relationships: - ossearch: "opensearch:opensearch" -{{% /snippet %}} -{{% snippet name="opensearch" config="service" placeholder="true" %}} - type: opensearch:{{% latest "opensearch" %}} - disk: 256 -{{% /snippet %}} + opensearch: ``` -{{% v2connect2app serviceName="searchopen" relationship="searchopen" var="OPENSEARCH_HOSTS" %}} +{{% v2connect2app serviceName="opensearch" relationship="opensearch" var="OPENSEARCH_HOSTS" %}} ```bash {location="myapp/.environment"} # Decode the built-in credentials object variable. export RELATIONSHIPS_JSON=$(echo ${{< vendor/prefix >}}_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export OS_SCHEME=$(echo $RELATIONSHIPS_JSON | jq -r ".ossearch[0].scheme") -export OS_HOST=$(echo $RELATIONSHIPS_JSON | jq -r ".ossearch[0].host") -export OS_PORT=$(echo $RELATIONSHIPS_JSON | jq -r ".ossearch[0].port") +export OS_SCHEME=$(echo $RELATIONSHIPS_JSON | jq -r ".opensearch[0].scheme") +export OS_HOST=$(echo $RELATIONSHIPS_JSON | jq -r ".opensearch[0].host") +export OS_PORT=$(echo $RELATIONSHIPS_JSON | jq -r ".opensearch[0].port") # Surface more common OpenSearch connection string variables for use in app. -export OPENSEARCH_USERNAME=$(echo $RELATIONSHIPS_JSON | jq -r ".ossearch[0].username") -export OPENSEARCH_PASSWORD=$(echo $RELATIONSHIPS_JSON | jq -r ".ossearch[0].password") +export OPENSEARCH_USERNAME=$(echo $RELATIONSHIPS_JSON | jq -r ".opensearch[0].username") +export OPENSEARCH_PASSWORD=$(echo $RELATIONSHIPS_JSON | jq -r ".opensearch[0].password") export OPENSEARCH_HOSTS=[\"$OS_SCHEME://$OS_HOST:$OS_PORT\"] ``` @@ -147,35 +144,35 @@ You may optionally enable HTTP Basic authentication. To do so, include the following in your `{{< vendor/configfile "services" >}}` configuration: ```yaml {configFile="services"} -{{% snippet name="opensearch" config="service" %}} +# The name of the service container. Must be unique within a project. +opensearch: type: opensearch:{{% latest "opensearch" %}} disk: 2048 configuration: authentication: enabled: true -{{% /snippet %}} ``` That enables mandatory HTTP Basic auth on all requests. The credentials are available in any relationships that point at that service, in the `username` and `password` properties. + {{% service-values-change %}} This functionality is generally not required if OpenSearch isn't exposed on its own public HTTP route. However, certain applications may require it, or it allows you to safely expose OpenSearch directly to the web. To do so, add a route to `{{< vendor/configfile "routes" >}}` that has `opensearch:opensearch` as its upstream (where `opensearch` is whatever you named the service). + For example: ```yaml {configFile="routes"} -{{% snippet name="opensearch:opensearch" config="route" subDom="os" / %}} -{{% snippet name="opensearch" config="service" placeholder="true" %}} - type: opensearch:{{% latest "opensearch" %}} - disk: 2048 - configuration: - authentication: - enabled: true -{{% /snippet %}} +"https://www.os.{default}/": + type: redirect + to: "https://os.{default}/" +"https://os.{default}/": + type: upstream + upstream: "opensearch:opensearch" ``` ## Plugins @@ -184,14 +181,14 @@ OpenSearch offers a number of plugins. To enable them, list them under the `configuration.plugins` key in your `{{< vendor/configfile "services" >}}` file, like so: ```yaml {configFile="services"} -{{% snippet name="opensearch" config="service" %}} +# The name of the service container. Must be unique within a project. +opensearch: type: "opensearch:{{% latest "opensearch" %}}" disk: 1024 configuration: plugins: - analysis-icu - lang-python -{{% /snippet %}} ``` In this example you'd have the ICU analysis plugin and the size mapper plugin. diff --git a/sites/platform/src/add-services/postgresql.md b/sites/platform/src/add-services/postgresql.md index 4b1ffbb0b4..8062298f88 100644 --- a/sites/platform/src/add-services/postgresql.md +++ b/sites/platform/src/add-services/postgresql.md @@ -79,7 +79,7 @@ For more details, see how to [upgrade to PostgreSQL 12 with `postgis`](#upgrade- "hostname": "azertyuiopqsdfghjklm.postgresql.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 5432, "cluster": "azertyuiopqsdf-main-afdwftq", - "host": "postgresqldatabase.internal", + "host": "postgresql.internal", "rel": "postgresql", "path": "main", "query": { @@ -154,7 +154,7 @@ psql -U {{< variable "USERNAME" >}} -h {{< variable "HOST" >}} -p {{< variable " Using the values from the [example](#relationship-reference), that would be: ```bash -psql -U main -h postgresqldatabase.internal -p 5432 +psql -U main -h postgresql.internal -p 5432 ``` {{% service-values-change %}} @@ -170,7 +170,7 @@ The easiest way to download all data in a PostgreSQL instance is with the {{< ve If you have multiple SQL databases it prompts you which one to export. You can also specify one by relationship name explicitly: ```bash -{{% vendor/cli %}} db:dump --relationship postgresqldatabase +{{% vendor/cli %}} db:dump --relationship postgresql ``` By default the file is uncompressed. If you want to compress it, use the `--gzip` (`-z`) option: @@ -205,7 +205,7 @@ That works for any SQL file, so the usual caveats about importing an SQL dump ap As with exporting, you can also specify a specific environment to use and a specific database relationship to use, if there are multiple. ```bash -{{% vendor/cli %}} sql --relationship postgresqldatabase -e {{< variable "BRANCH_NAME" >}} < my_database_backup.sql +{{% vendor/cli %}} sql --relationship postgresql -e {{< variable "BRANCH_NAME" >}} < my_database_backup.sql ``` {{< note >}} @@ -236,7 +236,8 @@ Under the `configuration` key of your service there are two additional keys: Consider the following illustrative example: ```yaml {configFile="services"} -{{% snippet name="postgresql" config="service" %}} +# The name of the service container. Must be unique within a project. +postgresql: type: "postgresql:{{% latest "postgresql" %}}" disk: 2048 configuration: @@ -256,7 +257,6 @@ Consider the following illustrative example: default_database: legacy privileges: legacy: rw -{{% /snippet %}} ``` This example creates a single PostgreSQL service named `postgresql`. The server has two databases, `main` and `legacy` with three endpoints created. @@ -270,34 +270,16 @@ If a given endpoint has access to multiple databases you should also specify whi Once these endpoints are defined, you need to expose them to your application as a relationship. Continuing with the above example, your `relationships` in `{{< vendor/configfile "app" >}}` might look like: ```yaml {configFile="app"} -{{% snippet name="false" config="app" root="false" %}} relationships: - database: "postgresql:admin" - reports: "postgresql:reporter" - imports: "postgresql:importer" -{{% /snippet %}} - -{{% snippet name="postgresql" config="service" placeholder="true" %}} - type: "postgresql:{{% latest "postgresql" %}}" - disk: 2048 - configuration: - databases: - - main - - legacy - endpoints: - admin: - privileges: - main: admin - legacy: admin - reporter: - default_database: main - privileges: - main: ro - importer: - default_database: legacy - privileges: - legacy: rw -{{% /snippet %}} + database: + service: postgresql + endpoint: admin + reports: + service: postgresql + endpoint: reporter + imports: + service: postgresql + endpoint: importer ``` Each database is accessible to your application through the `database`, `reports`, and `imports` relationships. @@ -306,7 +288,8 @@ They'll be available in the `{{< vendor/prefix >}}_RELATIONSHIPS` environment va A service configuration without the `configuration` block defined is equivalent to the following default values: ```yaml {configFile="services"} -{{% snippet name="postgresql" config="service" %}} +# The name of the service container. Must be unique within a project. +postgresql: type: "postgresql:{{% latest "postgresql" %}}" disk: 2048 configuration: @@ -317,26 +300,26 @@ A service configuration without the `configuration` block defined is equivalent default_database: main privileges: main: admin -{{% /snippet %}} ``` If you do not define `database` but `endpoints` are defined, then the single database `main` is created with the following assumed configuration: ```yaml {configFile="services"} -{{% snippet name="postgresql" config="service" %}} +# The name of the service container. Must be unique within a project. +postgresql: type: "postgresql:{{% latest "postgresql" %}}" disk: 2048 configuration: databases: - main endpoints: -{{% /snippet %}} ``` Alternatively, if you define multiple databases but no endpoints, a single user `main` is created with `admin` access to each of your databases, equivalent to the configuration below: ```yaml {configFile="services"} -{{% snippet name="postgresql" config="service" %}} +# The name of the service container. Must be unique within a project. +postgresql: type: "postgresql:{{% latest "postgresql" %}}" disk: 2048 configuration: @@ -349,7 +332,6 @@ Alternatively, if you define multiple databases but no endpoints, a single user firstdb: admin seconddb: admin thirddb: admin -{{% /snippet %}} ``` {{% databases-passwords %}} @@ -363,14 +345,14 @@ To change the timezone for the current session, run `SET TIME ZONE {{< variable {{% vendor/name %}} supports a number of PostgreSQL extensions. To enable them, list them under the `configuration.extensions` key in your `{{< vendor/configfile "services" >}}` file, like so: ```yaml {configFile="services"} -{{% snippet name="postgresql" config="service" %}} +# The name of the service container. Must be unique within a project. +postgresql: type: "postgresql:{{% latest "postgresql" %}}" disk: 2048 configuration: extensions: - pg_trgm - hstore -{{% /snippet %}} ``` In this case, you have `pg_trgm` installed, providing functions to determine the similarity of text based on trigram matching, and `hstore` providing a key-value store. diff --git a/sites/platform/src/add-services/rabbitmq.md b/sites/platform/src/add-services/rabbitmq.md index d875d3995a..79ef814be9 100644 --- a/sites/platform/src/add-services/rabbitmq.md +++ b/sites/platform/src/add-services/rabbitmq.md @@ -71,7 +71,7 @@ and your messages a safe place to live until they're received. "hostname": "azertyuiopqsdfghjklm.rabbitmq.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 5672, "cluster": "azertyuiopqsdf-main-afdwftq", - "host": "rabbitmqqueue.internal", + "host": "rabbitmq.internal", "rel": "rabbitmq", "path": null, "query": [], @@ -184,14 +184,14 @@ which can be useful for separating resources, such as exchanges, queues, and bin To create virtual hosts, add them to your configuration as in the following example: ```yaml {configFile="services"} -{{% snippet name="rabbitmq" config="service" %}} +# The name of the service container. Must be unique within a project. +rabbitmq: type: "rabbitmq:{{% latest "rabbitmq" %}}" disk: 512 configuration: vhosts: - host1 - host2 -{{% /snippet %}} ``` ## Upgrading diff --git a/sites/platform/src/add-services/redis.md b/sites/platform/src/add-services/redis.md index 9ab413d268..2c459dcad7 100644 --- a/sites/platform/src/add-services/redis.md +++ b/sites/platform/src/add-services/redis.md @@ -122,13 +122,22 @@ To define the relationship, use the `redis` endpoint : ```yaml {configFile="app"} # Relationships enable access from this app to a given service. +# The example below shows simplified configuration leveraging a default service +# (identified from the relationship name) and a default endpoint. +# See the Application reference for all options for defining relationships and endpoints. relationships: - : ":redis" + : ``` -You can define `` and `` as you like, but it’s best if they’re distinct. -With this definition, the application container now has access to the service via the relationship ``. -For PHP, enable the extension for the service: +You can define `` as you like, so long as it’s unique between all defined services and matches in both the application and services configuration. + +The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) (the network address a service is accessible from) that is identical to the name of that service. + +Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). + +With the above definition, the application container now has [access to the service](#use-in-app) via the relationship `` and its corresponding [`PLATFORM_RELATIONSHIPS` environment variable](/development/variables/use-variables#use-provided-variables). + +For PHP, enable the [extension](/languages/php/extensions) for the service: ```yaml {configFile="app"} # PHP extensions. @@ -152,7 +161,7 @@ redis: ```yaml {configFile="app"} relationships: - rediscache: "redis:redis" + redis: ``` ### Use in app @@ -229,13 +238,22 @@ To define the relationship, use the `redis` endpoint : ```yaml {configFile="app"} # Relationships enable access from this app to a given service. +# The example below shows simplified configuration leveraging a default service +# (identified from the relationship name) and a default endpoint. +# See the Application reference for all options for defining relationships and endpoints. relationships: - : ":redis" + : ``` -You can define `` and `` as you like, but it’s best if they’re distinct. -With this definition, the application container now has access to the service via the relationship ``. -For PHP, enable the extension for the service: +You can define `` as you like, so long as it’s unique between all defined services and matches in both the application and services configuration. + +The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) (the network address a service is accessible from) that is identical to the name of that service. + +Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). + +With the above definition, the application container now has [access to the service](#use-in-app) via the relationship `` and its corresponding [`PLATFORM_RELATIONSHIPS` environment variable](/development/variables/use-variables#use-provided-variables). + +For PHP, enable the [extension](/languages/php/extensions) for the service: ```yaml {configFile="app"} # PHP extensions. @@ -259,7 +277,7 @@ redis: ```yaml {configFile="app"} relationships: - rediscache: "redis:redis" + redis: ``` ### Use in app @@ -320,7 +338,7 @@ Use the Redis [`select` command](https://redis.io/commands/select): ```php connect(getenv('CACHE_HOST'), getenv('CACHE_PORT')); +$redis->connect(getenv('REDIS_HOST'), getenv('REDIS_PORT')); $redis->select(0); // switch to DB 0 $redis->set('x', '42'); // write 42 to x @@ -342,8 +360,8 @@ the Python library suggests using separate client instances for each database: import os from redis import Redis -database0 = Redis(host=os.getenv('CACHE_HOST'), port=os.getenv('CACHE_PORT'), db=0) -database1 = Redis(host=os.getenv('CACHE_HOST'), port=os.getenv('CACHE_PORT'), db=1) +database0 = Redis(host=os.getenv('REDIS_HOST'), port=os.getenv('REDIS_PORT'), db=0) +database1 = Redis(host=os.getenv('REDIS_HOST'), port=os.getenv('REDIS_PORT'), db=1) ``` <---> @@ -382,7 +400,7 @@ const value = await client.get('x'); // returns 42 "hostname": "azertyuiopqsdfghjklm.redis.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 6379, "cluster": "azertyuiopqsdf-main-7rqtwti", - "host": "rediscache.internal", + "host": "redis.internal", "rel": "redis", "path": null, "query": [], @@ -402,11 +420,11 @@ it triggers a cache cleanup. To customize those cache cleanups, set up an eviction policy such as the following: ```yaml {configFile="services"} -{{% snippet name="redis" config="service" %}} +# The name of the service container. Must be unique within a project. +redis: type: "redis:{{% latest "redis" %}}" configuration: maxmemory_policy: allkeys-lfu -{{% /snippet %}} ``` The following table presents the possible values: @@ -458,18 +476,17 @@ which means Redis stores and retrieves the data saved into sessions. To set up Redis as your session handler, add a configuration similar to the following: ```yaml {configFile="services" v2Hide="true"} -{{% snippet name="data" config="service" %}} +# The name of the service container. Must be unique within a project. +redissessions: type: "redis-persistent:{{% latest "redis" %}}" disk: 256 -{{% /snippet %}} ``` ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="false" %}} type: "php:{{% latest "php" %}}" relationships: - sessionstorage: "data:redis" + redissessions: variables: php: @@ -481,10 +498,4 @@ web: '/': root: 'web' passthru: '/index.php' -{{% /snippet %}} - -{{% snippet name="data" config="service" placeholder="true" %}} - type: "redis-persistent:{{% latest "redis" %}}" - disk: 256 -{{% /snippet %}} ``` diff --git a/sites/platform/src/add-services/solr.md b/sites/platform/src/add-services/solr.md index a6e9a8826a..24202dc7f2 100644 --- a/sites/platform/src/add-services/solr.md +++ b/sites/platform/src/add-services/solr.md @@ -70,7 +70,7 @@ Solr search with generic schemas provided, and a custom schema is also supported "hostname": "azertyuiopqsdfghjklm.solr.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 8080, "cluster": "azertyuiopqsdf-main-afdwftq", - "host": "solrsearch.internal", + "host": "solr.internal", "rel": "solr", "path": "solr\/collection1", "query": [], @@ -134,12 +134,12 @@ For Solr 4, {{% vendor/name %}} supports only a single core per server called `c You must provide your own Solr configuration via a `core_config` key in your `{{< vendor/configfile "services" >}}`: ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} +# The name of the service container. Must be unique within a project. +solr: type: "solr:4.10" disk: 1024 configuration: core_config: !archive "{{< variable "DIRECTORY" >}}" -{{% /snippet %}} ``` {{< variable "DIRECTORY" >}} points to a directory in the Git repository, in or below the `{{< vendor/configdir >}}/` folder. This directory needs to contain everything that Solr needs to start a core. At the minimum, `solrconfig.xml` and `schema.xml`. @@ -147,12 +147,12 @@ You must provide your own Solr configuration via a `core_config` key in your `{{ For example, place them in `{{< vendor/configdir >}}/solr/conf/` such that the `schema.xml` file is located at `{{< vendor/configdir >}}/solr/conf/schema.xml`. You can then reference that path like this - ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} +# The name of the service container. Must be unique within a project. +solr: type: "solr:4.10" disk: 1024 configuration: core_config: !archive "solr/conf/" -{{% /snippet %}} ``` ## Solr 6 and later @@ -160,7 +160,8 @@ For example, place them in `{{< vendor/configdir >}}/solr/conf/` such that the ` For Solr 6 and later {{% vendor/name %}} supports multiple cores via different endpoints. Cores and endpoints are defined separately, with endpoints referencing cores. Each core may have its own configuration or share a configuration. It is best illustrated with an example. ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} +# The name of the service container. Must be unique within a project. +solr: type: solr:{{% latest "solr" %}} disk: 1024 configuration: @@ -174,7 +175,6 @@ For Solr 6 and later {{% vendor/name %}} supports multiple cores via different e core: mainindex extra: core: extraindex -{{% /snippet %}} ``` The above definition defines a single Solr {{% latest "solr" %}} server. That server has 2 cores defined: @@ -187,29 +187,19 @@ It then defines two endpoints: `main` is connected to the `mainindex` core while Each endpoint is then available in the relationships definition in `{{< vendor/configfile "app" >}}`. For example, to allow an application to talk to both of the cores defined above its configuration should contain the following: ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="false" %}} +name: myapp + type: "php:{{% latest "php" %}}" -relationships: - solrsearch1: 'solr:main' - solrsearch2: 'solr:extra' -{{% /snippet %}} +[...] -{{% snippet name="solr" config="service" placeholder="true" %}} - type: solr:{{% latest "solr" %}} - disk: 1024 - configuration: - cores: - mainindex: - conf_dir: !archive "core1-conf" - extraindex: - conf_dir: !archive "core2-conf" - endpoints: - main: - core: mainindex - extra: - core: extraindex -{{% /snippet %}} +relationships: + solrsearch1: + service: solr + endpoint: main + solrsearch2: + service: solr + endpoint: extra ``` That is, the application's environment would include a `solrsearch1` relationship that connects to the `main` endpoint, which is the `mainindex` core, and a `solrsearch2` relationship that connects to the `extra` endpoint, which is the `extraindex` core. @@ -242,7 +232,8 @@ The relationships array would then look something like the following: For even more customizability, it's also possible to define Solr configsets. For example, the following snippet would define one configset, which would be used by all cores. Specific details can then be overridden by individual cores using `core_properties`, which is equivalent to the Solr `core.properties` file. ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} +# The name of the service container. Must be unique within a project. +solr: type: solr:8.4 disk: 1024 configuration: @@ -262,7 +253,6 @@ For even more customizability, it's also possible to define Solr configsets. For core: english_index arabic: core: arabic_index -{{% /snippet %}} ``` In this example, `{{< vendor/configdir >}}/configsets/solr8` contains the configuration definition for multiple cores. There are then two cores created: @@ -281,7 +271,8 @@ Note that not all core properties features make sense to specify in the `core_pr If you don't specify any configuration, the following default is used: ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} +# The name of the service container. Must be unique within a project. +solr: type: solr:{{% latest "solr" %}} configuration: cores: @@ -290,7 +281,6 @@ If you don't specify any configuration, the following default is used: endpoints: solr: core: collection1 -{{% /snippet %}} ``` The example configuration directory is equivalent to the [Solr example configuration set](https://github.com/apache/solr/tree/main/solr/server/solr/configsets/sample_techproducts_configs/conf). @@ -302,7 +292,8 @@ You are strongly recommended to define your own configuration with a custom core If you don't specify any configuration, the following default is used: ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} +# The name of the service container. Must be unique within a project. +solr: type: solr:{{% latest "solr" %}} configuration: cores: @@ -310,7 +301,6 @@ If you don't specify any configuration, the following default is used: endpoints: solr: core: collection1 -{{% /snippet %}} ``` The default configuration is based on an older version of the Drupal 8 Search API Solr module that is no longer in use. diff --git a/sites/platform/src/add-services/varnish.md b/sites/platform/src/add-services/varnish.md index 12307cb4b9..46ab7cc48b 100644 --- a/sites/platform/src/add-services/varnish.md +++ b/sites/platform/src/add-services/varnish.md @@ -114,25 +114,35 @@ your VCL templates needs logic to determine where each request is forwarded. For example, you might have the following configuration for two apps: ```yaml {configFile="services"} -{{% snippet name="varnish" config="service" %}} +varnish: type: varnish:{{% latest "varnish" %}} relationships: - blog: 'blog:http' - main: 'app:http' + blog: + service: blog + endpoint: http + main: + service: app + endpoint: http configuration: vcl: !include type: string path: config.vcl -{{% /snippet %}} -{{% snippet name="blog" config="apps" placeholder="true" root="backends/blog" %}} -# The type of the application to build. -type: "php:{{% latest "php" %}}" -{{% /snippet %}} - -{{% snippet name="app" config="apps" globKey="false" placeholder="true" root="backends/main" %}} -# The type of the application to build. -type: "nodejs:{{% latest "nodejs" %}}" -{{% /snippet %}} +``` + +```yaml {configFile="apps"} +blog: + # The location of the application's code. + source: + root: "backends/blog" + # The type of the application to build. + type: "php:{{% latest "php" %}}" + +app: + # The location of the application's code. + source: + root: "backends/main" + # The type of the application to build. + type: "nodejs:{{% latest "nodejs" %}}" ``` You could then define that all requests to `/blog/` go to the `blog` app and all other requests to the other app: @@ -155,10 +165,11 @@ Also disable the router cache as Varnish now provides caching. To forward all incoming requests to Varnish rather than your app, you could have the following: ```yaml {configFile="routes"} -{{% snippet name="varnish:http" config="route" redirect="false" %}} -cache: - enabled: false -{{% /snippet %}} +"https://{default}/": + type: upstream + upstream: "varnish:http" + cache: + enabled: false ``` Varnish forwards requests to your app based on the specified VCL template. @@ -277,43 +288,42 @@ To access the stats, create a **separate app** (`stats-app`) with a relationship Define [app configuration](../create-apps/app-reference.md) similar to the following: ```yaml {configFile="apps"} -{{% snippet name="stats-app" config="apps" root="stats" %}} -# The type of the application to build. -type: "python:{{% latest "python" %}}" -# Unique relationship _to_ Varnish from 'stats-app', where no relationship -# is defined _from_ Varnish to the same app, to avoid circular relationships. -relationships: - varnishstats: "varnish:http+stats" -{{% /snippet %}} -{{% snippet name="main-app" config="apps" globKey="false" root="backends/main" %}} -# The type of the application to build. -type: "nodejs:{{% latest "nodejs" %}}" -{{% /snippet %}} -{{% snippet name="varnish" config="service" placeholder="true" %}} - type: varnish:{{% latest "varnish" %}} - # Unique relationship _from_ Varnish _to_ 'main-app', where no relationship - # is defined _to_ Varnish to the same app, to avoid circular relationships. +# The name of the app container. Must be unique within a project. +stats-app: + # The location of the application's code. + source: + root: "stats" + # The type of the application to build. + type: "python:{{% latest "python" %}}" + # Unique relationship _to_ Varnish from 'stats-app', where no relationship + # is defined _from_ Varnish to the same app, to avoid circular relationships. relationships: - main: 'main-app:http' - configuration: - vcl: !include - type: string - path: config.vcl -{{% /snippet %}} + varnishstats: + service: varnish + endpoint: "http+stats" +# The name of the app container. Must be unique within a project. +main-app: + # The location of the application's code. + source: + root: "backends/main" + # The type of the application to build. + type: "nodejs:{{% latest "nodejs" %}}" ``` ```yaml {configFile="services" v2Hide="true"} -{{% snippet name="varnish" config="service" %}} +# The name of the service container. Must be unique within a project. +varnish: type: varnish:{{% latest "varnish" %}} # Unique relationship _from_ Varnish _to_ 'main-app', where no relationship # is defined _to_ Varnish to the same app, to avoid circular relationships. relationships: - main: 'app:http' + main: + service: "main-app" + endpoint: http configuration: vcl: !include type: string path: config.vcl -{{% /snippet %}} ``` diff --git a/sites/platform/src/create-apps/_index.md b/sites/platform/src/create-apps/_index.md index cdd75080c3..673182730d 100644 --- a/sites/platform/src/create-apps/_index.md +++ b/sites/platform/src/create-apps/_index.md @@ -134,11 +134,12 @@ dependencies: php: composer/composer: '^2' -# The app's relationships (connections) with services or other applications. -# The key is the relationship name that can be viewed in the app. -# The value is specific to how the service is configured. +# Relationships enable an app container's access to a service or another app. +# The example below shows simplified configuration leveraging a default service +# (identified from the relationship name) and a default endpoint. +# See the Application reference for all options for defining relationships and endpoints. relationships: - database: 'mysqldb:mysql' + mysql: # Scripts that are run as part of the build and deploy process. hooks: diff --git a/sites/platform/src/create-apps/app-reference.md b/sites/platform/src/create-apps/app-reference.md index 6e3c2a4dbb..f6ce920653 100644 --- a/sites/platform/src/create-apps/app-reference.md +++ b/sites/platform/src/create-apps/app-reference.md @@ -104,34 +104,181 @@ The default is size **S**, but you can increase it by editing your plan. ## Relationships -To access another container within your project, you need to define a relationship to it. +To allow containers in your project to communicate with one another, +you need to define relationships between them. +You can define a relationship between an app and a service, or [between two apps](/create-apps/multi-app/relationships.md). -![Relationships Diagram](/images/management-console/relationships.png "0.5") +The quickest way to define a relationship between your app and a service +is to use the service's default endpoint.
+However, some services allow you to define multiple databases, cores, and/or permissions. +In these cases, you can't rely on default endpoints. +Instead, you can explicitly define multiple endpoints when setting up your relationships. -You can give each relationship any name you want. -This name is used in the `PLATFORM_RELATIONSHIPS` environment variable, -which gives you credentials for accessing the service. +{{< note >}} +App containers don't have a default endpoint like services. +To connect your app to another app in your project, +you need to explicitly define the `http` endpoint as the endpoint to connect both apps.
+For more information, see how to [define relationships between your apps](/create-apps/multi-app/relationships.md). +{{< /note >}} + +{{< note title="Availability" theme="info">}} + +New syntax (default and explicit endpoints) described below is supported by most, but not all, image types +(`Relationship 'SERVICE_NAME' of application 'app' ... targets a service without a valid default endpoint configuration.`). +This syntax is currently being rolled out for all images. +If you encounter this error, use the "legacy" Platform.sh configuration noted at the bottom of this section. + +{{< /note >}} + +To define a relationship between your app and a service: -The relationship is specified in the form `service_name:endpoint_name`. -The `service_name` is the name of the service given in the [services configuration](../add-services/_index.md) -or the name of another application in the same project specified as the `name` in that app's configration. +{{< codetabs >}} -The `endpoint_name` is the exposed functionality of the service to use. -For most services, the endpoint is the same as the service type. -For some services (such as [MariaDB](../add-services/mysql/_index.md#multiple-databases) and [Solr](../add-services/solr.md#solr-6-and-later)), -you can define additional explicit endpoints for multiple databases and cores in the [service's configuration](../add-services/_index.md). ++++ +title=Using default endpoints ++++ -The following example shows a single MySQL service named `mysqldb` offering two databases, -a Redis cache service named `rediscache`, and an Elasticsearch service named `searchserver`. +Use the following configuration: ```yaml {configFile="app"} relationships: - database: 'mysqldb:db1' - database2: 'mysqldb:db2' - cache: 'rediscache:redis' - search: 'searchserver:elasticsearch' + {{% variable "SERVICE_NAME" %}}: ``` +The `SERVICE_NAME` is the name of the service as defined in its [configuration](/add-services/_index.md). +It is used as the relationship name, and associated with a `null` value. +This instructs {{% vendor/name %}} to use the service's default endpoint to connect your app to the service. + +For example, if you define the following configuration: + +```yaml {configFile="app"} +relationships: + mariadb: +``` + +{{% vendor/name %}} looks for a service named `mariadb` in your `{{% vendor/configfile "services" %}}` file, +and connects your app to it through the service's default endpoint. + +For reference, the equivalent configuration using explicit endpoints would be the following: + +```yaml {configFile="app"} +relationships: + mariadb: + service: mariadb + endpoint: mysql +``` + +You can define any number of relationships in this way: + +```yaml {configFile="app"} +relationships: + mariadb: + redis: + elasticsearch: +``` + +{{< note title="Tip" theme="info" >}} + +An even quicker way to define many relationships is to use the following single-line configuration: + +```yaml {configFile="app"} +relationships: {{{< variable "SERVICE_NAME_A" >}}, {{< variable "SERVICE_NAME_B" >}}, {{< variable "SERVICE_NAME_C" >}}} +``` + +where + +```yaml {configFile="services"} +{{< variable "SERVICE_NAME_A" >}}: + type: mariadb:{{% latest "mariadb" %}} + disk: 256 +{{< variable "SERVICE_NAME_B" >}}: + type: redis:{{% latest "redis" %}} + disk: 256 +{{< variable "SERVICE_NAME_C" >}}: + type: elasticsearch:{{% latest "elasticsearch" %}} + disk: 256 +``` + +{{< /note >}} + +<---> + ++++ +title=Using explicit endpoints ++++ + +Use the following configuration: + +```yaml {configFile="app"} +relationships: + {{% variable "RELATIONSHIP_NAME" %}}: + service: {{% variable "SERVICE_NAME" %}} + endpoint: {{% variable "ENDPOINT_NAME" %}} +``` + +- `RELATIONSHIP_NAME` is the name you want to give to the relationship. +- `SERVICE_NAME` is the name of the service as defined in its [configuration](/add-services/_index.md). +- `ENDPOINT_NAME` is the endpoint your app will use to connect to the service (refer to the service reference to know which value to use). + +For example, to define a relationship named `database` that connects your app to a service called `mariadb` through the `db1` endpoint, +use the following configuration: + +```yaml {configFile="app"} +relationships: + database: # The name of the relationship. + service: mariadb + endpoint: db1 +``` + +For more information on how to handle multiple databases, multiple cores, +and/or different permissions with services that support such features, +see each service's dedicated page: + + - [MariaDB/MySQL](/add-services/mysql/_index.md#multiple-databases) (multiple databases and permissions) + - [PostgreSQL](/add-services/postgresql/_index.md#multiple-databases) (multiple databases and permissions) + - [Redis](/add-services/redis/_index.md#multiple-databases) (multiple databases) + - [Solr](add-services/solr/_index.md#solr-6-and-later) (multiple cores) + - [Vault KMS](add-services/vault/_index.md#multiple-endpoints-example) (multiple permissions) + + You can add as many relationships as you want to your app configuration, + using both default and explicit endpoints according to your needs: + +```yaml {configFile="app"} +relationships: + database1: + service: mariadb + endpoint: admin + database2: + service: mariadb + endpoint: legacy + cache: + service: redis + search: + service: elasticsearch +``` + +{{< /codetabs >}} + +{{< note theme="info" title="Legacy" >}} + +The following legacy syntax for specifying relationships is still supported by {{% vendor/name %}}: + +```yaml +relationships: + : ":" +``` + +For example: + +```yaml +relationships: + database: "mariadb:mysql" +``` + +Feel free to use this until the default and explicit endpoint syntax is supported on all images. + +{{< /note >}} + ## Available disk space The maximum total space available to all apps and services is set by the storage in your plan settings. diff --git a/sites/platform/src/create-apps/workers.md b/sites/platform/src/create-apps/workers.md index 26a84ae99f..b4fb19c592 100644 --- a/sites/platform/src/create-apps/workers.md +++ b/sites/platform/src/create-apps/workers.md @@ -93,7 +93,7 @@ mounts: source: local source_path: test relationships: - database: 'mysqldb:mysql' + mysql: workers: queue: commands: @@ -118,7 +118,7 @@ workers: source: local source_path: test relationships: - database: 'mysqldb:mysql' + mysql: mail: commands: start: | @@ -129,7 +129,7 @@ workers: source: local source_path: test relationships: - database: 'mysqldb:mysql' + mysql: ``` In both cases, there are two worker instances named `queue` and `mail`. @@ -146,10 +146,10 @@ while `variables` lets you instruct the application to run differently as a work For example, consider the following configuration: ```yaml {configFile="services"} -mysqldb: +mysql: type: "mariadb:{{% latest "mariadb" %}}" disk: 2048 -rabbitqueue: +rabbitmq: type: rabbitmq:{{% latest "rabbitmq" %}} disk: 512 ``` @@ -163,8 +163,8 @@ hooks: pip install -e . pip install gunicorn relationships: - database: 'mysqldb:mysql' - messages: 'rabbitqueue:rabbitmq' + mysql: + rabbitmq: variables: env: type: 'none' @@ -211,7 +211,7 @@ workers: disk: 256 mounts: {} relationships: - emails: 'rabbitqueue:rabbitmq' + rabbitmq: ``` There's a lot going on here, but it's all reasonably straightforward. diff --git a/sites/platform/src/guides/drupal/redis.md b/sites/platform/src/guides/drupal/redis.md index 1b67ddb07f..e201cf71d6 100644 --- a/sites/platform/src/guides/drupal/redis.md +++ b/sites/platform/src/guides/drupal/redis.md @@ -41,69 +41,7 @@ to [persistent Redis](../../add-services/redis.md#persistent-redis) (`redis-pers ## Add a Redis service -### 1. Configure the service - -To define the service, use the `redis-persistent` type: - -```yaml {configFile="services"} -# The name of the service container. Must be unique within a project. -: - type: redis-persistent: -``` - -Note that persistent Redis requires `disk` to store data. -For more information, refer to the [dedicated Redis page](../../add-services/redis.md). - -If want to use ephemeral Redis instead, use the `redis` type: - -```yaml {configFile="services"} -# The name of the service container. Must be unique within a project. -: - type: redis: -``` - -Note that changing the name of the service replaces it with a brand new service and all existing data is lost. -Back up your data before changing the service. - -### 2. Add the relationship - -To define the relationship, use the `redis` endpoint : - -```yaml {configFile="app"} -# Relationships enable access from this app to a given service. -relationships: - : ":redis" -``` - -You can define `` and `` as you like, but it’s best if they’re distinct. -With this definition, the application container now has access to the service via the relationship ``. - -For PHP, enable the extension for the service: - -```yaml {configFile="app"} -# PHP extensions. -runtime: - extensions: - - redis -``` - -### Example Configuration - -#### [Service definition](../../add-services/_index.md) - -```yaml {configFile="services"} -# The name of the service container. Must be unique within a project. -cacheredis: - type: redis-persistent:7.0 -``` - -#### [App configuration](../../add-services/_index.md) - -```yaml {configFile="app"} -# Relationships enable access from this app to a given service. -relationships: - rediscache: "cacheredis:redis" -``` +{{% endpoint-description type="redis-persistent" noApp=true /%}} ### 3. Add the Drupal module diff --git a/sites/platform/src/guides/symfony/environment-variables.md b/sites/platform/src/guides/symfony/environment-variables.md index da99627ddb..730d94ebef 100644 --- a/sites/platform/src/guides/symfony/environment-variables.md +++ b/sites/platform/src/guides/symfony/environment-variables.md @@ -99,11 +99,13 @@ symfony ssh -- symfony var:export --multiline ``` Each exposed environment variable is prefixed by the relationship name. -For example, if you have the following relationships in your configuration: +For example, if you have the following [relationships](/create-apps/app-reference.md#relationships) in your configuration: ```yaml relationships: - database: "securitydb:postgresql" + database: + service: securitydb + endpoint: postgresql ``` The environment variables for the database service is prefixed by `DATABASE_` diff --git a/sites/platform/src/languages/elixir.md b/sites/platform/src/languages/elixir.md index 5930cc1920..51223460ea 100644 --- a/sites/platform/src/languages/elixir.md +++ b/sites/platform/src/languages/elixir.md @@ -147,12 +147,17 @@ See [Config Reader Documentation](../development/variables/use-variables.md#acce The services configuration is available in the environment variable `PLATFORM_RELATIONSHIPS`. -Given a relationship defined in `{{< vendor/configfile "app" >}}`: +Given a [relationship](/create-apps/app-reference.md#relationships) defined in `{{< vendor/configfile "app" >}}`: ```yaml {configFile="app"} +# Relationships enable an app container's access to a service. +# The example below shows simplified configuration leveraging a default service +# (identified from the relationship name) and a default endpoint. +# See the Application reference for all options for defining relationships and endpoints. relationships: - postgresdatabase: "dbpostgres:postgresql" + postgresql: ``` + Assuming you have in `mix.exs` the Poison library to parse JSON: ```elixir @@ -167,7 +172,7 @@ And assuming you use `ecto` you could put in `config/config.exs`: ```elixir relationships = Poison.decode!(Base.decode64!(System.get_env("PLATFORM_RELATIONSHIPS"))) -[postgresql_config | _tail] = relationships["postgresdatabase"] +[postgresql_config | _tail] = relationships["postgresql"] config :my_app, Repo, database: postgresql_config["path"], diff --git a/sites/platform/src/languages/java/migration.md b/sites/platform/src/languages/java/migration.md index ba94c44408..34a004dd7e 100644 --- a/sites/platform/src/languages/java/migration.md +++ b/sites/platform/src/languages/java/migration.md @@ -122,7 +122,7 @@ This variable is a base64-encoded JSON object with keys of the relationship name {{% vendor/name %}} supports the [`jq` tool](https://stedolan.github.io/jq/), which allows to extract information from this JSON. ```shell -export DB_HOST=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".database[0].host"` +export DB_HOST=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".postgresql[0].host"` ``` | Article | Source | @@ -138,10 +138,10 @@ you have the option to move the variable environment to another file: a [`.envir E.g.: ```shell -export DB_HOST=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".database[0].host"` -export DB_PASSWORD=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".database[0].password"` -export DB_USER=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".database[0].username"` -export DB_DATABASE=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".database[0].path"` +export DB_HOST=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".postgresql[0].host"` +export DB_PASSWORD=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".postgresql[0].password"` +export DB_USER=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".postgresql[0].username"` +export DB_DATABASE=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".postgresql[0].path"` export JDBC=jdbc:postgresql://${HOST}/${DATABASE} export JAVA_MEMORY=-Xmx$(jq .info.limits.memory /run/config.json)m export JAVA_OPTS="$JAVA_MEMORY -XX:+ExitOnOutOfMemoryError" @@ -156,7 +156,7 @@ disk: 1024 hooks: build: ./mvnw package -DskipTests -Dquarkus.package.uber-jar=true relationships: - database: "db:postgresql" + postgresql: web: commands: start: java -jar $JAVA_OPTS $CREDENTIAL -Dquarkus.http.port=$PORT jarfile.jar @@ -170,7 +170,7 @@ This library provides a streamlined way to interact with a {{% vendor/name %}} e import Config; Config config = new Config(); -MySQL database = config.getCredential("database", MySQL::new); +MySQL database = config.getCredential("postgresql", MySQL::new); DataSource dataSource = database.get(); ``` diff --git a/sites/platform/src/languages/lisp.md b/sites/platform/src/languages/lisp.md index 4530242ec8..a7881c2dc1 100644 --- a/sites/platform/src/languages/lisp.md +++ b/sites/platform/src/languages/lisp.md @@ -134,7 +134,7 @@ Given a relationship defined in `{{< vendor/configfile "app" >}}`: ```yaml {configFile="app"} relationships: - pg: postgresql:postgresql + postgresql: ``` The following would access that relationship, and provide your Lisp program the credentials to connect to a PostgreSQL instance. Add this to your `.asd` file: @@ -149,7 +149,7 @@ Then in your program you could access the PostgreSQL instance as follows: (defvar *pg-spec* nil) (defun setup-postgresql () - (let* ((pg-relationship (first (jsown:val (relationships) "pg"))) + (let* ((pg-relationship (first (jsown:val (relationships) "postgresql"))) (database (jsown:val pg-relationship "path")) (username (jsown:val pg-relationship "username")) (password (jsown:val pg-relationship "password")) diff --git a/sites/platform/src/languages/ruby.md b/sites/platform/src/languages/ruby.md index a3ae5d74b4..efae1572be 100644 --- a/sites/platform/src/languages/ruby.md +++ b/sites/platform/src/languages/ruby.md @@ -208,6 +208,7 @@ mounts: Here is a complete `{{< vendor/configfile "app" >}}` file: ```yaml {configFile="app"} +# The name of the app, which must be unique within a project. name: 'app' type: "ruby:3.0" @@ -216,8 +217,11 @@ dependencies: nodejs: yarn: "*" +# Relationships enable an app container's access to a service. +# The example below shows simplified configuration leveraging a default service (identified from the relationship name) and a default endpoint. +# See the Application reference for all options for defining relationships and endpoints. relationships: - database: "database:mysql" + mysql: disk: 2048 @@ -311,7 +315,7 @@ This example assumes there is a MySQL instance. To configure it, [create a service](../add-services/_index.md) such as the following: ```yaml {configFile="services"} -database: +mysql: type: mysql:{{% latest "mariadb" %}} disk: 2048 ``` @@ -321,7 +325,7 @@ Once you have a service, link to it in your [app configuration](../create-apps/_ ```yaml {configFile="app"} relationships: - database: "database:mysql" + mysql: ``` By using the following Ruby function calls, you can obtain the database details. @@ -335,7 +339,7 @@ This should give you something like the following: ```json { - "database" : [ + "mysql" : [ { "path" : "main", "query" : { @@ -344,7 +348,7 @@ This should give you something like the following: "port" : 3306, "username" : "user", "password" : "", - "host" : "database.internal", + "host" : "mysql.internal", "ip" : "246.0.241.50", "scheme" : "mysql" } diff --git a/sites/platform/src/learn/tutorials/restrict-service-access.md b/sites/platform/src/learn/tutorials/restrict-service-access.md index 5498a194cd..eaf981a8f1 100644 --- a/sites/platform/src/learn/tutorials/restrict-service-access.md +++ b/sites/platform/src/learn/tutorials/restrict-service-access.md @@ -46,8 +46,12 @@ Edit your app configuration and add new relationships to your new endpoints: ```yaml {configFile="app"} relationships: - database: maindb:website - reports: maindb:reporting + database: + service: maindb + endpoint: website + reports: + service: maindb + endpoint: reporting ``` ## 3. Create a worker with access to the read-only endpoint @@ -68,7 +72,9 @@ workers: start: | sleep infinity relationships: - reports: maindb:reporting + reports: + service: maindb + endpoint: reporting access: ssh: viewer ``` diff --git a/sites/upsun/src/add-services/_index.md b/sites/upsun/src/add-services/_index.md index 609b7bb8f6..d53962222e 100644 --- a/sites/upsun/src/add-services/_index.md +++ b/sites/upsun/src/add-services/_index.md @@ -26,26 +26,28 @@ All service configuration happens in the `{{< vendor/configfile "services" >}}` Configure your service in the following pattern: ```yaml {configFile="services"} -{{% snippet name="SERVICE_NAME" config="service" %}} - type: {{}}:{{}} - # Other options... -{{% /snippet %}} +# The name of the service container. Must be unique within a project. +services: + SERVICE_NAME: + type: {{}}:{{}} + # Other options... ``` An example service configuration for two databases might look like this: ```yaml {configFile="services"} -{{% snippet name="database1" config="service" %}} - type: mariadb:{{% latest "mariadb" %}} -{{% /snippet %}} -{{% snippet name="database2" config="service" globKey="false" %}} - type: postgresql:{{% latest "postgresql" %}} -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + mariadb: + type: mariadb:{{% latest "mariadb" %}} + # The name of the service container. Must be unique within a project. + postgresql: + type: postgresql:{{% latest "postgresql" %}} ``` This YAML file contains a dictionary defining all of the services you want to use. The top-level key `services` defines an object of all of the services to be provisioned for the project. -Below that, come custom service names ({{}}; in the example, `database1` and `database2`), which you use to identify services in step 2. +Below that, come custom service names ({{}}; in the example, `mariadb` and `postgresql`), which you use to identify the service in step 2. You can give it any name you want with lowercase alphanumeric characters, hyphens, and underscores. @@ -65,7 +67,7 @@ The following table presents the keys you can define for each service: | --------------- | ---------- | ----------------- | ----------- | | `type` | `string` | Yes | One of the [available services](#available-services) in the format `type:version`. | | `configuration` | dictionary | For some services | Some services have additional specific configuration options that can be defined here, such as specific endpoints. See the given service page for more details. | -| `relationships` | dictionary | For some services | Some services require a relationship to your app. The content of the dictionary has the same type as the `relationships` dictionary for [app configuration](../create-apps/app-reference.md#relationships). The `endpoint_name` for apps is always `http`. | +| `relationships` | dictionary | For some services | Some services require a relationship to your app. The content of the dictionary has the same type as the `relationships` dictionary for [app configuration](/create-apps/app-reference.md#relationships). The `endpoint_name` for apps is always `http`. | ##### Resources (CPU, RAM, disk) @@ -78,44 +80,51 @@ For more information, see how to [manage resources](/manage-resources.md). ### 2. Connect the service -Once you have configured a service, you need to create a relationship to connect it to an app. -This is done in your [app configuration for relationships](../create-apps/app-reference.md#relationships). - -The relationship follows this pattern: +To connect the service, use the following configuration: ```yaml {configFile="app"} -{{% snippet name="" config="app" root="false"%}} - -# Other options... - -# Relationships enable an app container's access to a service. -relationships: - {{< variable "RELATIONSHIP_NAME" >}}: "{{< variable "SERVICE_NAME" >}}:{{< variable "ENDPOINT" >}}" -{{% /snippet %}} -{{% snippet name="SERVICE_NAME" config="service" placeholder="true"%}} - type: {{}}:{{}} - # Other options... -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + {{}}: + + # Other options... + + # Relationships enable an app container's access to a service. + # The example below shows simplified configuration leveraging a default service (identified from the relationship name) and a default endpoint. + # See the Application reference for all options for defining relationships and endpoints. + relationships: + {{}}: +services: + # The name of the service container. Must be unique within a project. + {{}}: + type: {{}}:{{}} + # Other options... ``` +You can define `` as you like, so long as it's unique between all defined services +and matches in both the application and services configuration. + +The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. +That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) +(the network address a service is accessible from) that is identical to the _name_ of that service. + +Depending on your needs, instead of default endpoint configuration, +you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). + An example relationship to connect to the databases given in the [example in step 1](#1-configure-the-service): -```yaml {configFile="app"} -{{% snippet name="" config="app" root="false" %}} - -# Other options... - -# Relationships enable an app container's to a service. -relationships: - mysql_database: "database1:mysql" - postgresql_database: "database2:postgresql" -{{% /snippet %}} -{{% snippet name="database1" config="service" placeholder="true" %}} - type: mariadb:{{% latest "mariadb" %}} -{{% /snippet %}} -{{% snippet name="database2" config="service" globKey="false" placeholder="true" %}} - type: postgresql:{{% latest "postgresql" %}} -{{% /snippet %}} +```yaml {configFile="apps"} +applications: + # The name of the app container. Must be unique within a project. + {{}}: + relationships: + mariadb: + postgresql: +services: + mariadb: + type: mariadb:{{% latest "mariadb" %}} + postgresql: + type: postgresql:{{% latest "postgresql" %}} ``` As with the service name, you can give the relationship any name you want @@ -187,17 +196,17 @@ To get the credentials for a given service, run the following command: You get output like the following: ```yaml -database: +mariadb: - username: user scheme: mysql - service: database + service: mariadb fragment: null ip: 198.51.100.37 - hostname: abcdefghijklm1234567890123.database.service._.eu.{{< vendor/urlraw "hostname" >}} + hostname: abcdefghijklm1234567890123.mariadb.service._.eu.{{< vendor/urlraw "hostname" >}} public: false cluster: abcdefgh1234567-main-abcd123 - host: database.internal + host: mariadb.internal rel: mysql query: is_master: true @@ -206,10 +215,10 @@ database: type: 'mariadb:10.6' port: 3306 host_mapped: false - url: 'mysql://user:@database.internal:3306/main' + url: 'mysql://user:@mariadb.internal:3306/main' ``` -With this example, you can connect to the `database` relationship +With this example, you can connect to the `mariadb` relationship with the user `user`, an empty password, and the database name `main` (from the `path`). The `url` property shows a full database connection that can be used from your app. diff --git a/sites/upsun/src/add-services/headless-chrome.md b/sites/upsun/src/add-services/headless-chrome.md index 7e7f52ca70..e5de35e5ca 100644 --- a/sites/upsun/src/add-services/headless-chrome.md +++ b/sites/upsun/src/add-services/headless-chrome.md @@ -27,15 +27,15 @@ title= Service environment variables {{% service-values-change %}} ```bash -CHROMEHEADLESSBROWSER_SERVICE=chromeheadless -CHROMEHEADLESSBROWSER_IP=123.456.78.90 -CHROMEHEADLESSBROWSER_HOSTNAME=azertyuiopqsdfghjklm.chromeheadless.service._.eu-1.{{< vendor/urlraw "hostname" >}} -CHROMEHEADLESSBROWSER_CLUSTER=azertyuiop-main-7rqtwti -CHROMEHEADLESSBROWSER_HOST=chromeheadlessbrowser.internal -CHROMEHEADLESSBROWSER_REL=http -CHROMEHEADLESSBROWSER_SCHEME=http -CHROMEHEADLESSBROWSER_TYPE=chrome-headless:{{< latest "chrome-headless" >}} -CHROMEHEADLESSBROWSER_PORT=9222 +CHROMEHEADLESS_SERVICE=chromeheadless +CHROMEHEADLESS_IP=123.456.78.90 +CHROMEHEADLESS_HOSTNAME=azertyuiopqsdfghjklm.chromeheadless.service._.eu-1.{{< vendor/urlraw "hostname" >}} +CHROMEHEADLESS_CLUSTER=azertyuiop-main-7rqtwti +CHROMEHEADLESS_HOST=chromeheadless.internal +CHROMEHEADLESS_REL=http +CHROMEHEADLESS_SCHEME=http +CHROMEHEADLESS_TYPE=chrome-headless:{{< latest "chrome-headless" >}} +CHROMEHEADLESS_PORT=9222 ``` <---> @@ -53,7 +53,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain "ip": "123.456.78.90", "hostname": "azertyuiopqsdfghjklm.chromeheadless.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "cluster": "azertyuiop-main-7rqtwti", - "host": "chromeheadlessbrowser.internal", + "host": "chromeheadless.internal", "rel": "http", "scheme": "http", "type": "chrome-headless:{{< latest "chrome-headless" >}}", @@ -68,7 +68,7 @@ Here is an example of how to gather [`PLATFORM_RELATIONSHIPS` environment variab export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_HEADLESSCHROME_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.chromeheadlessbrowser[0].host')" +export APP_HEADLESSCHROME_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.chromeheadless[0].host')" ``` {{< /codetabs >}} @@ -123,27 +123,34 @@ yarn add puppeteer Configuration for a project looks similar to the following: ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} -type: "nodejs:{{% latest "nodejs" %}}" - -# Other options... - -# Relationships enable an app container's access to a service. -relationships: - chromeheadlessbrowser: "chromeheadless:http" -{{% /snippet %}} -{{% snippet name="chromeheadless" config="service" placeholder="true" %}} - type: chrome-headless:{{% latest "chrome-headless" %}} -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + type: "nodejs:{{% latest "nodejs" %}}" + + [...] + + # Relationships enable an app container's access to a service. + relationships: + chromeheadless: + service: chromeheadless + endpoint: http +services: + # The name of the service container. Must be unique within a project. + chromeheadless: + type: chrome-headless:{{% latest "chrome-headless" %}} ``` -{{% v2connect2app serviceName="chromeheadless" relationship="chromeheadlessbrowser" var="CHROME_BASEURL"%}} +{{% v2connect2app serviceName="chromeheadless" relationship="chromeheadless" var="CHROME_BASEURL"%}} ```bash {location="myapp/.environment"} # Set environment variables for individual credentials, # For more information, please visit {{< vendor/urlraw "docs" >}}/development/variables.html#service-environment-variables. -export CHROME_IP=${CHROMEHEADLESSBROWSER_IP} -export CHROME_PORT=${CHROMEHEADLESSBROWSER_PORT} +export CHROME_IP=${CHROMEHEADLESS_IP} +export CHROME_PORT=${CHROMEHEADLESS_PORT} # Combine into a single base URL to be used within app. export CHROME_BASEURL="http://${CHROME_IP}:${CHROME_PORT}" diff --git a/sites/upsun/src/add-services/influxdb.md b/sites/upsun/src/add-services/influxdb.md index cfbb9886bc..fa36097dbf 100644 --- a/sites/upsun/src/add-services/influxdb.md +++ b/sites/upsun/src/add-services/influxdb.md @@ -39,22 +39,22 @@ title= Service environment variables {{% service-values-change %}} ```bash -INFLUXDBDATABASE_HOST=influxdbdatabase.internal -INFLUXDBDATABASE_HOSTNAME=azertyuiopqsdfghjklm.influxdb.service._.eu-1.{{< vendor/urlraw "hostname" >}} -INFLUXDBDATABASE_CLUSTER=azertyuiopqsdf-main-bvxea6i -INFLUXDBDATABASE_SERVICE=influxdb -INFLUXDBDATABASE_TYPE=influxdb:{{< latest "influxdb" >}} -INFLUXDBDATABASE_REL=influxdb -INFLUXDBDATABASE_SCHEME=http -INFLUXDBDATABASE_USERNAME=admin -INFLUXDBDATABASE_PASSWORD=ChangeMe -INFLUXDBDATABASE_PORT=8086 -INFLUXDBDATABASE_PATH= -INFLUXDBDATABASE_QUERY={'org': 'main', 'bucket': 'main', 'api_token': 'azertyuiopqsdfghjklm1234567890'} -INFLUXDBDATABASE_FRAGMENT= -INFLUXDBDATABASE_PUBLIC=false -INFLUXDBDATABASE_HOST_MAPPED=false -INFLUXDBDATABASE_IP=123.456.78.90 +INFLUXDB_HOST=influxdb.internal +INFLUXDB_HOSTNAME=azertyuiopqsdfghjklm.influxdb.service._.eu-1.{{< vendor/urlraw "hostname" >}} +INFLUXDB_CLUSTER=azertyuiopqsdf-main-bvxea6i +INFLUXDB_SERVICE=influxdb +INFLUXDB_TYPE=influxdb:{{< latest "influxdb" >}} +INFLUXDB_REL=influxdb +INFLUXDB_SCHEME=http +INFLUXDB_USERNAME=admin +INFLUXDB_PASSWORD=ChangeMe +INFLUXDB_PORT=8086 +INFLUXDB_PATH= +INFLUXDB_QUERY={'org': 'main', 'bucket': 'main', 'api_token': 'azertyuiopqsdfghjklm1234567890'} +INFLUXDB_FRAGMENT= +INFLUXDB_PUBLIC=false +INFLUXDB_HOST_MAPPED=false +INFLUXDB_IP=123.456.78.90 ``` <---> @@ -68,7 +68,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain ```json { - "host": "influxdbdatabase.internal", + "host": "influxdb.internal", "hostname": "azertyuiopqsdfghjklm.influxdb.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "cluster": "azertyuiopqsdf-main-bvxea6i", "service": "influxdb", @@ -98,7 +98,7 @@ Here is an example of how to gather [`PLATFORM_RELATIONSHIPS` environment variab export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_INFLUXDB_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.influxdbdatabase[0].host')" +export APP_INFLUXDB_HOST="$(echo $RELATIONSHIPS_JSON | jq -r '.influxdb[0].host')" ``` {{< /codetabs >}} @@ -108,14 +108,22 @@ export APP_INFLUXDB_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.influxdbdatabase {{% endpoint-description type="influxdb" /%}} ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} -# Relationships enable an app container's access to a service. -relationships: - influxdbdatabase: "influxdb:influxdb" -{{% /snippet %}} -{{% snippet name="influxdb" config="service" placeholder="true" %}} - type: influxdb:{{% latest "influxdb" %}} -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + # Relationships enable an app container's access to a service. + relationships: + influxdb: + +service: + influxdb: + type: influxdb:{{% latest "influxdb" %}} ``` {{% v2connect2app serviceName="influxdb" relationship="influxdbdatabase" var="INFLUX_HOST"%}} @@ -123,11 +131,11 @@ relationships: ```bash {location="myapp/.environment"} # Set environment variables for common InfluxDB credentials. # For more information, please visit {{< vendor/urlraw "docs" >}}/development/variables.html#service-environment-variables. -export INFLUX_USER=${INFLUXDBDATABASE_USERNAME} -export INFLUX_HOST=${INFLUXDBDATABASE_HOST} -export INFLUX_ORG=$(echo $INFLUXDBDATABASE_QUERY | jq -r ".org") -export INFLUX_TOKEN=$(echo $INFLUXDBDATABASE_QUERY | jq -r ".api_token") -export INFLUX_BUCKET=$(echo $INFLUXDBDATABASE_QUERY | jq -r ".bucket") +export INFLUX_USER=${INFLUXDB_USERNAME} +export INFLUX_HOST=${INFLUXDB_HOST} +export INFLUX_ORG=$(echo $INFLUXDB_QUERY | jq -r ".org") +export INFLUX_TOKEN=$(echo $INFLUXDB_QUERY | jq -r ".api_token") +export INFLUX_BUCKET=$(echo $INFLUXDB_QUERY | jq -r ".bucket") ``` {{% /v2connect2app %}} @@ -146,7 +154,7 @@ To export your data from InfluxDB, follow these steps: This opens an SSH tunnel to your InfluxDB service on your current environment and produces output like the following: ```bash - SSH tunnel opened to influxdbdatabase at: http://127.0.0.1:30000 + SSH tunnel opened to {{}} at: http://127.0.0.1:30000 ``` 3. Get the username, password and token from the [relationship](#relationship-reference) by running the following command: diff --git a/sites/upsun/src/add-services/kafka.md b/sites/upsun/src/add-services/kafka.md index 6f08bd07c7..16610c8d10 100644 --- a/sites/upsun/src/add-services/kafka.md +++ b/sites/upsun/src/add-services/kafka.md @@ -26,15 +26,15 @@ title= Service environment variables +++ ```bash -KAFKAQUEUE_SERVICE=kafka -KAFKAQUEUE_IP=123.456.78.90 -KAFKAQUEUE_HOSTNAME=azertyuiopqsdfghjklm.kafka.service._.eu-1.{{< vendor/urlraw "hostname" >}} -KAFKAQUEUE_CLUSTER=azertyuiop-main-7rqtwti -KAFKAQUEUE_HOST=kafkaqueue.internal -KAFKAQUEUE_REL=kafka -KAFKAQUEUE_SCHEME=kafka -KAFKAQUEUE_TYPE=kafka:{{< latest "kafka" >}} -KAFKAQUEUE_PORT=9092 +KAFKA_SERVICE=kafka +KAFKA_IP=123.456.78.90 +KAFKA_HOSTNAME=azertyuiopqsdfghjklm.kafka.service._.eu-1.{{< vendor/urlraw "hostname" >}} +KAFKA_CLUSTER=azertyuiop-main-7rqtwti +KAFKA_HOST=kafka.internal +KAFKA_REL=kafka +KAFKA_SCHEME=kafka +KAFKA_TYPE=kafka:{{< latest "kafka" >}} +KAFKA_PORT=9092 ``` <---> @@ -52,7 +52,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain "ip": "123.456.78.90", "hostname": "azertyuiopqsdfghjklm.kafka.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "cluster": "azertyuiop-main-7rqtwti", - "host": "kafkaqueue.internal", + "host": "kafka.internal", "rel": "kafka", "scheme": "kafka", "type": "kafka:{{< latest "kafka" >}}", @@ -67,7 +67,7 @@ Here is an example of how to gather [`PLATFORM_RELATIONSHIPS` environment variab export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_SOLR_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.kafkaqueue[0].host')" +export APP_SOLR_HOST="$(echo $RELATIONSHIPS_JSON | jq -r '.kafka[0].host')" ``` {{< /codetabs >}} diff --git a/sites/upsun/src/add-services/memcached.md b/sites/upsun/src/add-services/memcached.md index e21d0d5f2b..01f7b0b823 100644 --- a/sites/upsun/src/add-services/memcached.md +++ b/sites/upsun/src/add-services/memcached.md @@ -34,15 +34,15 @@ title= Service environment variables {{% service-values-change %}} ```bash -MEMCACHEDCACHE_SERVICE=memcached -MEMCACHEDCACHE_IP=123.456.78.90 -MEMCACHEDCACHE_HOSTNAME=azertyuiopqsdfghjklm.memcached.service._.eu-1.{{< vendor/urlraw "hostname" >}} -MEMCACHEDCACHE_CLUSTER=azertyuiopqsdf-main-afdwftq -MEMCACHEDCACHE_HOST=memcachedcache.internal -MEMCACHEDCACHE_REL=memcached -MEMCACHEDCACHE_SCHEME=memcached -MEMCACHEDCACHE_TYPE=memcached:{{% latest "memcached" %}} -MEMCACHEDCACHE_PORT=11211 +MEMCACHED_SERVICE=memcached +MEMCACHED_IP=123.456.78.90 +MEMCACHED_HOSTNAME=azertyuiopqsdfghjklm.memcached.service._.eu-1.{{< vendor/urlraw "hostname" >}} +MEMCACHED_CLUSTER=azertyuiopqsdf-main-afdwftq +MEMCACHED_HOST=memcachedcache.internal +MEMCACHED_REL=memcached +MEMCACHED_SCHEME=memcached +MEMCACHED_TYPE=memcached:{{% latest "memcached" %}} +MEMCACHED_PORT=11211 ``` <---> @@ -60,7 +60,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain "ip": "123.456.78.90", "hostname": "azertyuiopqsdfghjklm.memcached.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "cluster": "azertyuiopqsdf-main-afdwftq", - "host": "memcachedcache.internal", + "host": "memcached.internal", "rel": "memcached", "scheme": "memcached", "type": "memcached:{{% latest "memcached" %}}", @@ -75,7 +75,7 @@ Here is an example of how to gather [`PLATFORM_RELATIONSHIPS` environment variab export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_MEMCACHED_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.memcachedcache[0].host')" +export APP_MEMCACHED_HOST="$(echo $RELATIONSHIPS_JSON | jq -r '.memcached[0].host')" ``` {{< /codetabs >}} @@ -85,17 +85,22 @@ export APP_MEMCACHED_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.memcachedcache[ {{% endpoint-description type="memcached" php=true python=true /%}} ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} - -# Other options... - -# Relationships enable an app container's access to a service. -relationships: - memcachedcache: "memcached:memcached" -{{% /snippet %}} -{{% snippet name="memcached" config="service" placeholder="true" %}} - type: memcached:{{% latest "memcached" %}} -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + # Relationships enable an app container's access to a service. + relationships: + memcached: + +service: + memcached: + type: memcached:{{% latest "memcached" %}} ``` {{% v2connect2app serviceName="memcached" relationship="memcachedcache" var="CACHE_URL"%}} @@ -103,7 +108,7 @@ relationships: ```bash {location="myapp/.environment"} # Surface a Memcached connection string for use in app. # For more information, please visit {{< vendor/urlraw "docs" >}}/development/variables.html#service-environment-variables. -export CACHE_URL="${MEMCACHEDCACHE_HOST}:${MEMCACHEDCACHE_PORT}" +export CACHE_URL="${MEMCACHED_HOST}:${MEMCACHED_PORT}" ``` {{% /v2connect2app %}} @@ -111,11 +116,11 @@ export CACHE_URL="${MEMCACHEDCACHE_HOST}:${MEMCACHEDCACHE_PORT}" ## Accessing Memcached directly To access the Memcached service directly you can use `netcat` as Memcached doesn't have a dedicated client tool. -Assuming your Memcached relationship is named `memcachedcache`, the host name `MEMCACHEDCACHE_HOST` and port number `MEMCACHEDCACHE_PORT` obtained from the [service environment variable](#relationship-reference) would be `memcachedcache.internal` and `11211`. +Assuming your Memcached relationship is named `memcached`, the host name `MEMCACHED_HOST` and port number `MEMCACHED_PORT` obtained from the [service environment variable](#relationship-reference) would be `memcached.internal` and `11211`.
Open an [SSH session](/development/ssh/_index.md) and access the Memcached server as follows: ```bash {location="Terminal"} -netcat memcachedcache.internal 11211 +netcat memcached.internal 11211 ``` {{% service-values-change %}} diff --git a/sites/upsun/src/add-services/mongodb.md b/sites/upsun/src/add-services/mongodb.md index c52616a151..83f2d767bd 100644 --- a/sites/upsun/src/add-services/mongodb.md +++ b/sites/upsun/src/add-services/mongodb.md @@ -55,19 +55,19 @@ title= Service environment variables {{% service-values-change %}} ```bash -MONGODBDATABASE_USERNAME=main -MONGODBDATABASE_SCHEME=mongodb -MONGODBDATABASE_SERVICE=mongodb -MONGODBDATABASE_IP=123.456.78.90 -MONGODBDATABASE_HOSTNAME=azertyuiopqsdfghjklm.mongodb.service._.eu-1.{{< vendor/urlraw "hostname" >}} -MONGODBDATABASE_CLUSTER=azertyuiop-main-7rqtwti -MONGODBDATABASE_HOST=mongodbdatabase.internal -MONGODBDATABASE_REL=mongodb -MONGODBDATABASE_QUERY={'is_master': True} -MONGODBDATABASE_PATH=main -MONGODBDATABASE_PASSWORD= -MONGODBDATABASE_TYPE=mongodb-enterprise:{{% latest "mongodb-enterprise" %}} -MONGODBDATABASE_PORT=27017 +MONGODB_USERNAME=main +MONGODBBASE_SCHEME=mongodb +MONGODB_SERVICE=mongodb +MONGODB_IP=123.456.78.90 +MONGODB_HOSTNAME=azertyuiopqsdfghjklm.mongodb.service._.eu-1.{{< vendor/urlraw "hostname" >}} +MONGODB_CLUSTER=azertyuiop-main-7rqtwti +MONGODB_HOST=mongodbdatabase.internal +MONGODB_REL=mongodb +MONGODB_QUERY={'is_master': True} +MONGODB_PATH=main +MONGODB_PASSWORD= +MONGODB_TYPE=mongodb-enterprise:{{% latest "mongodb-enterprise" %}} +MONGODB_PORT=27017 ``` <---> @@ -87,7 +87,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain "ip": "123.456.78.90", "hostname": "azertyuiopqsdfghjklm.mongodb.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "cluster": "azertyuiop-main-7rqtwti", - "host": "mongodbdatabase.internal", + "host": "mongodb.internal", "rel": "mongodb", "query": { "is_master": true @@ -106,7 +106,7 @@ Here is an example of how to gather [`PLATFORM_RELATIONSHIPS` environment variab export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_MONGODBDATABASE_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.mongodbdatabase[0].host')" +export APP_MONGODBDATABASE_HOST="$(echo $RELATIONSHIPS_JSON | jq -r '.mongodb[0].host')" ``` {{< /codetabs >}} @@ -122,30 +122,35 @@ export APP_MONGODBDATABASE_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.mongodbda {{% endpoint-description type="mongodb" php=true /%}} ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} - -# Other options... - -# Relationships enable an app container's access to a service. -relationships: - mongodbdatabase: "mongodb:mongodb" -{{% /snippet %}} -{{% snippet name="mongodb" config="service" placeholder="true" %}} - type: mongodb-enterprise:{{% latest "mongodb-enterprise" %}} -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + # Relationships enable an app container's access to a service. + relationships: + mongodb: + +service: + mongodb: + type: mongodb-enterprise:{{% latest "mongodb-enterprise" %}} ``` -{{% v2connect2app serviceName="mongodb" relationship="mongodbdatabase" var="DATABASE_URL"%}} +{{% v2connect2app serviceName="mongodb" relationship="mongodb" var="DATABASE_URL"%}} ```bash {location="myapp/.environment"} # Set environment variables for individual credentials. # For more information, please visit {{< vendor/urlraw "docs" >}}/development/variables.html#service-environment-variables. -export DB_CONNECTION=="${MONGODBDATABASE_SCHEME}" -export DB_USERNAME="${MONGODBDATABASE_USERNAME}" -export DB_PASSWORD="${MONGODBDATABASE_PASSWORD}" -export DB_HOST="${MONGODBDATABASE_HOST}" -export DB_PORT="${MONGODBDATABASE_PORT}" -export DB_DATABASE="${MONGODBDATABASE_PATH}" +export DB_CONNECTION=="${MONGODB_SCHEME}" +export DB_USERNAME="${MONGODB_USERNAME}" +export DB_PASSWORD="${MONGODB_PASSWORD}" +export DB_HOST="${MONGODB_HOST}" +export DB_PORT="${MONGODB_PORT}" +export DB_DATABASE="${MONGODB_PATH}" # Surface connection string variable for use in app. export DATABASE_URL="${DB_CONNECTION}://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_DATABASE}" @@ -160,13 +165,13 @@ Get the `host` from your [relationship](#relationship-reference). Then run the following command: ```bash -mongo {{< variable "MONGODBDATABASE_HOST" >}} +mongo {{< variable "MONGODB_HOST" >}} ``` With the example value, that would be the following: ```bash -mongo mongodbdatabase.internal +mongo mongodb.internal ``` {{% service-values-change %}} @@ -185,8 +190,7 @@ First, open an SSH tunnel with the {{% vendor/name %}} CLI: That opens an SSH tunnel to all services on your current environment and produce output like the following: ```bash -SSH tunnel opened on port 30000 to relationship: database -SSH tunnel opened on port 30001 to relationship: redis +SSH tunnel opened on port 30000 to relationship: mongodb ``` The port may vary in your case. diff --git a/sites/upsun/src/add-services/mysql/_index.md b/sites/upsun/src/add-services/mysql/_index.md index 89a178ce6e..83e656f119 100644 --- a/sites/upsun/src/add-services/mysql/_index.md +++ b/sites/upsun/src/add-services/mysql/_index.md @@ -71,23 +71,23 @@ title= Service environment variables {{% service-values-change %}} ```bash -MARIADBDATABASE_USERNAME=user -MARIADBDATABASE_SCHEME=mysql -MARIADBDATABASE_SERVICE=mariadb -MARIADBDATABASE_FRAGMENT= -MARIADBDATABASE_IP=123.456.78.90 -MARIADBDATABASE_HOSTNAME=azertyuiopqsdfghjklm.mariadb.service._.eu-1.{{< vendor/urlraw "hostname" >}} -MARIADBDATABASE_PORT=3306 -MARIADBDATABASE_CLUSTER=azertyuiop-main-afdwftq -MARIADBDATABASE_HOST=mariadbdatabase.internal -MARIADBDATABASE_REL=mysql -MARIADBDATABASE_PATH=main -MARIADBDATABASE_QUERY={'is_master': True} -MARIADBDATABASE_PASSWORD= -MARIADBDATABASE_EPOCH=0 -MARIADBDATABASE_TYPE=mariadb:{{< latest "mariadb" >}} -MARIADBDATABASE_PUBLIC=false -MARIADBDATABASE_HOST_MAPPED=false +MARIADB_USERNAME=user +MARIADB_SCHEME=mysql +MARIADB_SERVICE=mariadb +MARIADB_FRAGMENT= +MARIADB_IP=123.456.78.90 +MARIADB_HOSTNAME=azertyuiopqsdfghjklm.mariadb.service._.eu-1.{{< vendor/urlraw "hostname" >}} +MARIADB_PORT=3306 +MARIADB_CLUSTER=azertyuiop-main-afdwftq +MARIADB_HOST=mariadbdatabase.internal +MARIADB_REL=mysql +MARIADB_PATH=main +MARIADB_QUERY={'is_master': True} +MARIADB_PASSWORD= +MARIADB_EPOCH=0 +MARIADB_TYPE=mariadb:{{< latest "mariadb" >}} +MARIADB_PUBLIC=false +MARIADB_HOST_MAPPED=false ``` <---> @@ -109,7 +109,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain "hostname": "azertyuiopqsdfghjklm.mariadb.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 3306, "cluster": "azertyuiop-main-7rqtwti", - "host": "mariadbdatabase.internal", + "host": "mariadb.internal", "rel": "mysql", "path": "main", "query": { @@ -129,7 +129,7 @@ Example on how to gather [`PLATFORM_RELATIONSHIPS` environment variable](/develo export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_DATABASE_HOST=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".mariadbdatabase[0].host") +export APP_DATABASE_HOST=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".mariadb[0].host") ``` {{< /codetabs >}} @@ -144,23 +144,23 @@ title= Service environment variables {{% service-values-change %}} ```bash -ORACLEDATABASE_USERNAME=user -ORACLEDATABASE_SCHEME=mysql -ORACLEDATABASE_SERVICE=oracle-mysql -ORACLEDATABASE_FRAGMENT= -ORACLEDATABASE_IP=123.456.78.90 -ORACLEDATABASE_HOSTNAME=azertyuiopqsdfghjklm.oracle-mysql.service._.eu-1.{{< vendor/urlraw "hostname" >}} -ORACLEDATABASE_PORT=3306 -ORACLEDATABASE_CLUSTER=azertyuiop-main-afdwftq -ORACLEDATABASE_HOST=oracledatabase.internal -ORACLEDATABASE_REL=mysql -ORACLEDATABASE_PATH=main -ORACLEDATABASE_QUERY={'is_master': True} -ORACLEDATABASE_PASSWORD= -ORACLEDATABASE_EPOCH=0 -ORACLEDATABASE_TYPE=oracle-mysql:{{< latest "oracle-mysql" >}} -ORACLEDATABASE_PUBLIC=false -ORACLEDATABASE_HOST_MAPPED=false +ORACLEMYSQL_USERNAME=user +ORACLEMYSQL_SCHEME=mysql +ORACLEMYSQL_SERVICE=oracle-mysql +ORACLEMYSQL_FRAGMENT= +ORACLEMYSQL_IP=123.456.78.90 +ORACLEMYSQL_HOSTNAME=azertyuiopqsdfghjklm.oracle-mysql.service._.eu-1.{{< vendor/urlraw "hostname" >}} +ORACLEMYSQL_PORT=3306 +ORACLEMYSQL_CLUSTER=azertyuiop-main-afdwftq +ORACLEMYSQL_HOST=oraclemysql.internal +ORACLEMYSQL_REL=mysql +ORACLEMYSQL_PATH=main +ORACLEMYSQL_QUERY={'is_master': True} +ORACLEMYSQL_PASSWORD= +ORACLEMYSQL_EPOCH=0 +ORACLEMYSQL_TYPE=oracle-mysql:{{< latest "oracle-mysql" >}} +ORACLEMYSQL_PUBLIC=false +ORACLEMYSQL_HOST_MAPPED=false ``` <---> @@ -182,7 +182,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain "hostname": "azertyuiopqsdfghjklm.oracle-mysql.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 3306, "cluster": "azertyuiop-main-afdwftq", - "host": "oracledatabase.internal", + "host": "oraclemysql.internal", "rel": "mysql", "path": "main", "query": { @@ -202,7 +202,7 @@ Example on how to gather [`PLATFORM_RELATIONSHIPS` environment variable](/develo export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_ORACLE_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.oracledatabase[0].host')" +export APP_ORACLE_HOST="$(echo $RELATIONSHIPS_JSON | jq -r '.oraclemysql[0].host')" ``` {{< /codetabs >}} @@ -214,30 +214,35 @@ Configure your service with at least 256 MB in disk space. {{% endpoint-description type="mariadb" sectionLink="#multiple-databases" multipleText="databases" /%}} ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} - -# Other options... - -# Relationships enable an app container's access to a service. -relationships: - mariadbdatabase: "mariadb:mysql" -{{% /snippet %}} -{{% snippet name="mariadb" config="service" placeholder="true" %}} - type: mariadb:{{% latest "mariadb" %}} -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + # Relationships enable an app container's access to a service. + relationships: + mariadb: + +service: + mariadb: + type: mariadb:{{% latest "mariadb" %}} ``` -{{% v2connect2app serviceName="mariadb" relationship="mariadbdatabase" var="MARIADBDATABASE_URL"%}} +{{% v2connect2app serviceName="mariadb" relationship="mariadb" var="MARIADB_URL"%}} ```bash {location="myapp/.environment"} # Set environment variables for individual credentials. # For more information, please visit {{< vendor/urlraw "docs" >}}/development/variables.html#service-environment-variables. -export DB_CONNECTION==${MARIADBDATABASE_SCHEME} -export DB_USERNAME=${MARIADBDATABASE_USERNAME} -export DB_PASSWORD=${MARIADBDATABASE_PASSWORD} -export DB_HOST=${MARIADBDATABASE_HOST} -export DB_PORT=${MARIADBDATABASE_PORT} -export DB_DATABASE=${MARIADBDATABASE_PATH} +export DB_CONNECTION==${MARIADB_SCHEME} +export DB_USERNAME=${MARIADB_USERNAME} +export DB_PASSWORD=${MARIADB_PASSWORD} +export DB_HOST=${MARIADB_HOST} +export DB_PORT=${MARIADB_PORT} +export DB_DATABASE=${MARIADB_PATH} # Surface connection string variable for use in app. export DATABASE_URL="${DB_CONNECTION}://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_DATABASE}" @@ -275,19 +280,20 @@ You can configure your MySQL service in the [services configuration](../_index.m Example configuration: ```yaml {configFile="services"} -{{% snippet name="mariadb" config="service" %}} - type: mariadb:{{% latest "mariadb" %}} - configuration: - schemas: - - main - endpoints: - mysql: - default_schema: main - privileges: - main: admin - properties: - max_allowed_packet: 64 -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + mariadb: + type: mariadb:{{% latest "mariadb" %}} + configuration: + schemas: + - main + endpoints: + mysql: + default_schema: main + privileges: + main: admin + properties: + max_allowed_packet: 64 ``` ## Access the service directly @@ -295,23 +301,23 @@ Example configuration: You can access the service using the {{< vendor/name >}} CLI by running `{{< vendor/cli >}} sql`. You can also access it from you app container via [SSH](../../development/ssh/_index.md). -From your [relationship data](#relationship-reference), you need: `MARIADBDATABASE_HOST`, `MARIADBDATABASE_PORT`, `MARIADBDATABASE_USERNAME`, `MARIADBDATABASE_PATH` values. +From your [relationship data](#relationship-reference), you need: `MARIADB_HOST`, `MARIADB_PORT`, `MARIADB_USERNAME`, `MARIADB_PATH` values. Then run the following command: ```bash -mysql -h {{< variable "MARIADBDATABASE_HOST" >}} -P {{< variable "MARIADBDATABASE_PORT" >}} -u {{< variable "MARIADBDATABASE_USERNAME" >}} {{< variable "MARIADBDATABASE_PATH" >}} +mysql -h {{< variable "MARIADB_HOST" >}} -P {{< variable "MARIADB_PORT" >}} -u {{< variable "MARIADB_USERNAME" >}} {{< variable "MARIADB_PATH" >}} ``` Assuming the values from the [MariaDB reference](#mariadb-reference), that would be: ```bash -mysql -h mariadbdatabase.internal -P 3306 -u user main +mysql -h mariadb.internal -P 3306 -u user main ``` If your database relationship has a password, pass the `-p` switch and enter the password when prompted: ```bash -mysql -p -h mariadbdatabase.internal -P 3306 -u user main +mysql -p -h mariadb.internal -P 3306 -u user main ``` ## Define permissions @@ -344,17 +350,18 @@ You can also specify multiple `endpoints` for [permissions](#define-permissions) If neither `schemas` nor `endpoints` is included, it's equivalent to the following default: ```yaml {configFile="services"} -{{% snippet name="mariadb" config="service" %}} - type: mariadb:{{% latest "mariadb" %}} - configuration: - schemas: - - main - endpoints: - mysql: - default_schema: main - privileges: - main: admin -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + mariadb: + type: mariadb:{{% latest "mariadb" %}} + configuration: + schemas: + - main + endpoints: + mysql: + default_schema: main + privileges: + main: admin ``` If either `schemas` or `endpoints` are defined, no default is applied and you have to specify the full configuration. @@ -376,41 +383,46 @@ Access to the database is defined through three endpoints: * `importer` has SELECT/INSERT/UPDATE/DELETE (but not DDL) access to `legacy` but no access to `main`. ```yaml {configFile="services"} -{{% snippet name="mariadb" config="service" %}} - type: mariadb:{{% latest "mariadb" %}} - configuration: - schemas: - - main - - legacy - endpoints: - admin: - default_schema: main - privileges: - main: admin - legacy: admin - reporter: - privileges: - main: ro - importer: - default_schema: legacy - privileges: - legacy: rw -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + mariadb: + type: mariadb:{{% latest "mariadb" %}} + configuration: + schemas: + - main + - legacy + endpoints: + admin: + default_schema: main + privileges: + main: admin + legacy: admin + reporter: + privileges: + main: ro + importer: + default_schema: legacy + privileges: + legacy: rw ``` Expose these endpoints to your app as relationships in your [app configuration](../../create-apps/_index.md): ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} - -# Other options... - -# Relationships enable an app container's access to a service. -relationships: - database: "mariadb:admin" - reports: "mariadb:reporter" - imports: "mariadb:importer" -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "myapp" + + [...] + + # Relationships enable an app container's access to a service. + relationships: + database: "mariadb:admin" + reports: "mariadb:reporter" + imports: "mariadb:importer" ``` These relationships are then available in the [service environment variables](#relationship-reference). @@ -440,14 +452,15 @@ It offers the following properties: An example of setting these properties: ```yaml {configFile="services"} -{{% snippet name="mariadb" config="service" %}} - type: mariadb:{{% latest "mariadb" %}} - configuration: - properties: - max_allowed_packet: 64 - default_charset: utf8mb4 - default_collation: utf8mb4_unicode_ci -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + mariadb: + type: mariadb:{{% latest "mariadb" %}} + configuration: + properties: + max_allowed_packet: 64 + default_charset: utf8mb4 + default_collation: utf8mb4_unicode_ci ``` You can also change a table's character set and collation through `ALTER TABLE` commands: diff --git a/sites/upsun/src/add-services/mysql/mysql-replication.md b/sites/upsun/src/add-services/mysql/mysql-replication.md index afb6cfb88c..a2517014c6 100644 --- a/sites/upsun/src/add-services/mysql/mysql-replication.md +++ b/sites/upsun/src/add-services/mysql/mysql-replication.md @@ -18,21 +18,22 @@ To set up replication you need to create a replication-enabled user. For each database that you'd like to replicate, you need to assign a `replication` permission/role, under a corresponding `endpoint`: ```yaml {configFile="services"} -{{% snippet name="mariadb" config="service" %}} - type: mariadb:{{% latest "mariadb" %}} - configuration: - schemas: - - main - endpoints: - # Restate the default user to be used by your application. - mysql: - default_schema: main - privileges: - main: admin - replicator: - privileges: - main: replication -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + mariadb: + type: mariadb:{{% latest "mariadb" %}} + configuration: + schemas: + - main + endpoints: + # Restate the default user to be used by your application. + mysql: + default_schema: main + privileges: + main: admin + replicator: + privileges: + main: replication ``` This creates a `replicator` user, and grants read-only and table locking rights on the `main` database (namely `Select_priv`, `Show_view_priv`, `Create_tmp_table_priv`, `Lock_tables_priv` privileges) along with global replication rights (namely `Repl_slave_priv` and `Repl_client_priv` privileges) and flushing rights (`Reload_priv` used for flushing before reading the binary log position). If there is at least one `replication` permission defined, the bin-logging is enabled on the primary server, which is essential for the replication. @@ -43,15 +44,40 @@ Even if you won't be accessing the replication endpoint from your application, y Add a new relationship to your application container: ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} - -# Other options... - -# Relationships enable an app container's access to a service. -relationships: - database: mariadb:mysql - replication: mariadb:replicator -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "myapp" + + [...] + + # Relationships enable an app container's access to a service. + relationships: + database: + service: mariadb + endpoint: mysql + replication: + service: mariadb + endpoint: replicator + +services: + # The name of the service container. Must be unique within a project. + mariadb: + type: mariadb:{{% latest "mariadb" %}} + configuration: + schemas: + - main + endpoints: + # Restate the default user to be used by your application. + mysql: + default_schema: main + privileges: + main: admin + replicator: + privileges: + main: replication ``` ## Getting the Primary's Binary Log Co-ordinates diff --git a/sites/upsun/src/add-services/network-storage.md b/sites/upsun/src/add-services/network-storage.md index d468e577ca..5aa7f00be7 100644 --- a/sites/upsun/src/add-services/network-storage.md +++ b/sites/upsun/src/add-services/network-storage.md @@ -44,27 +44,38 @@ It's also possible to have one app mount a `source_path` that's a subdirectory o For example: ```yaml {configFile="apps"} -{{% snippet name="app1" config="apps" %}} -... -mounts: - 'web/uploads': - source: service - service: files - source_path: uploads -{{% /snippet %}} - -{{% snippet name="app2" config="apps" globKey="false" %}} -... -mounts: - 'process': - source: service - service: files - source_path: uploads/incoming - 'done': - source: service - service: files - source_path: uploads/done -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + app1: + # The location of the application's code. + source: + root: "app1" + + [...] + + mounts: + 'web/uploads': + source: service + service: files + source_path: uploads + + # The name of the app container. Must be unique within a project. + app2: + # The location of the application's code. + source: + root: "app2" + + [...] + + mounts: + 'process': + source: service + service: files + source_path: uploads/incoming + 'done': + source: service + service: files + source_path: uploads/done ``` In this example, `app1` has access to the entire `uploads` directory by writing to `web/uploads`. @@ -82,64 +93,63 @@ Drupal files directories are shared between the `web` and `worker` instances, while the Drush backup directory is unique to the `web` instance. ```yaml {configFile="app"} -name: 'app' -type: 'php:7.2' - -relationships: - mariadbdatabase: 'mariadb:mysql' - -hooks: - # ... - -web: - locations: - '/': - # ... - -mounts: - # The public and private files directories are - # network mounts shared by web and workers. - 'web/sites/default/files': - source: service - service: files - source_path: files - 'private': - source: service - service: files - source_path: private - # The backup, temp, and cache directories for - # Drupal's CLI tools don't need to be shared between web and workers. - # It wouldn't hurt anything to make them network - # shares, however. - '/.drush': - source: storage - source_path: drush - 'tmp': - source: tmp - source_path: tmp - 'drush-backups': - source: storage - source_path: drush-backups - '/.console': - source: storage - source_path: console - -# Crons run on the web container, so they have the -# same mounts as the web container. -crons: - drupal: - spec: '*/20 * * * *' - commands: - start: 'cd web ; drush core-cron' - -# The worker defined here also has the same 6 mounts; -# 2 of them are shared with the web container, -# the other 4 are local to the worker. -workers: - queue: - commands: - start: | - cd web && drush queue-run myqueue +applications: + myapp: + + source: + root: "/" + + type: "php:{{% latest "php" %}}" + + relationships: + mariadb: + + [...] + + mounts: + # The public and private files directories are + # network mounts shared by web and workers. + 'web/sites/default/files': + source: service + service: files + source_path: files + 'private': + source: service + service: files + source_path: private + # The backup, temp, and cache directories for + # Drupal's CLI tools don't need to be shared between web and workers. + # It wouldn't hurt anything to make them network + # shares, however. + '/.drush': + source: storage + source_path: drush + 'tmp': + source: tmp + source_path: tmp + 'drush-backups': + source: storage + source_path: drush-backups + '/.console': + source: storage + source_path: console + + # Crons run on the web container, so they have the + # same mounts as the web container. + crons: + drupal: + spec: '*/20 * * * *' + commands: + start: 'cd web ; drush core-cron' + + # The worker defined here also has the same 6 mounts; + # 2 of them are shared with the web container, + # the other 4 are local to the worker. + workers: + queue: + commands: + start: | + cd web && drush queue-run myqueue ``` ## How can I migrate data from a `storage` mount to a `service` mount? @@ -151,18 +161,34 @@ To move data from a `storage` mount to a `service` one, follow these instruction Assuming you have the following `storage` mount: ```yaml {configFile="app"} -mounts: - web/uploads: - source: storage - source_path: uploads +applications: + myapp: + + [...] + + mounts: + web/uploads: + source: storage + source_path: uploads ``` 1. Add a new `network-storage` service to your configuration: ```yaml {configFile="services"} - # The name of the service container. Must be unique within a project. - network-storage: - type: network-storage:{{% latest "network-storage" %}} + applications: + myapp: + + [...] + + mounts: + web/uploads: + source: storage + source_path: uploads + + services: + # The name of the service container. Must be unique within a project. + network-storage: + type: network-storage:{{% latest "network-storage" %}} ``` {{< note >}} @@ -174,15 +200,25 @@ mounts: 2. Add a new `service` mount, named `new-uploads`: - ```yaml {configFile="app"} - mounts: - web/uploads: - source: storage - source_path: uploads - new-uploads: - source: service - service: files - source_path: uploads + ```yaml {configFile="services"} + applications: + myapp: + + [...] + + mounts: + web/uploads: + source: storage + source_path: uploads + new-uploads: + source: service + service: files + source_path: uploads + + services: + # The name of the service container. Must be unique within a project. + network-storage: + type: network-storage:{{% latest "network-storage" %}} ``` Note that each mount is on a different storage service, which is why they can have the same `source_path`. @@ -198,15 +234,25 @@ mounts: 5. Reverse the mounts. To do so, rename the `storage` mount to `old-uploads`, and point the `web/uploads` directory to the `service` mount: - ```yaml {configFile="app"} - mounts: - old-uploads: - source: storage - source_path: uploads - web/uploads: - source: service - service: files - source_path: uploads + ```yaml {configFile="services"} + applications: + myapp: + + [...] + + mounts: + old-uploads: + source: storage + source_path: uploads + web/uploads: + source: service + service: files + source_path: uploads + + services: + # The name of the service container. Must be unique within a project. + network-storage: + type: network-storage:{{% latest "network-storage" %}} ``` 6. Push your changes and check that the files are now accessible from the `service` mount (now named `web/uploads`). diff --git a/sites/upsun/src/add-services/opensearch.md b/sites/upsun/src/add-services/opensearch.md index f4300a95f7..349d467fcf 100644 --- a/sites/upsun/src/add-services/opensearch.md +++ b/sites/upsun/src/add-services/opensearch.md @@ -43,24 +43,24 @@ title= Service environment variables {{% service-values-change %}} ```bash -OSSEARCH_USERNAME= -OSSEARCH_SCHEME=http -OSSEARCH_SERVICE=opensearch -OSSEARCH_FRAGMENT= -OSSEARCH_IP=123.456.78.90 -OSSEARCH_INSTANCE_IPS=['123.456.78.90'] -OSSEARCH_HOSTNAME=azertyuiopqsdfghjklm.opensearch.service._.eu-1.{{< vendor/urlraw "hostname" >}} -OSSEARCH_PORT=9200 -OSSEARCH_CLUSTER=azertyuiopqsdf-main-afdwftq -OSSEARCH_EPOCH=0 -OSSEARCH_HOST=ossearch.internal -OSSEARCH_REL=opensearch -OSSEARCH_PATH= -OSSEARCH_PASSWORD=ChangeMe -OSSEARCH_QUERY={} -OSSEARCH_TYPE=opensearch:{{% latest "opensearch" %}} -OSSEARCH_PUBLIC=false -OSSEARCH_HOST_MAPPED=false +OPENSEARCH_USERNAME= +OPENSEARCH_SCHEME=http +OPENSEARCH_SERVICE=opensearch +OPENSEARCH_FRAGMENT= +OPENSEARCH_IP=123.456.78.90 +OPENSEARCH_INSTANCE_IPS=['123.456.78.90'] +OPENSEARCH_HOSTNAME=azertyuiopqsdfghjklm.opensearch.service._.eu-1.{{< vendor/urlraw "hostname" >}} +OPENSEARCH_PORT=9200 +OPENSEARCH_CLUSTER=azertyuiopqsdf-main-afdwftq +OPENSEARCH_EPOCH=0 +OPENSEARCH_HOST=opensearch.internal +OPENSEARCH_REL=opensearch +OPENSEARCH_PATH= +OPENSEARCH_PASSWORD=ChangeMe +OPENSEARCH_QUERY={} +OPENSEARCH_TYPE=opensearch:{{% latest "opensearch" %}} +OPENSEARCH_PUBLIC=false +OPENSEARCH_HOST_MAPPED=false ``` <---> @@ -82,7 +82,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain "hostname": "azertyuiopqsdfghjklm.opensearch.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 9200, "cluster": "azertyuiopqsdf-main-7rqtwti", - "host": "ossearch.internal", + "host": "opensearch.internal", "rel": "opensearch", "path": null, "query": [], @@ -100,7 +100,7 @@ Here is an example of how to gather [`PLATFORM_RELATIONSHIPS` environment variab export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_OPENSEARCH_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.ossearch[0].host')" +export APP_OPENSEARCH_HOST="$(echo $RELATIONSHIPS_JSON | jq -r '.opensearch[0].host')" ``` {{< /codetabs >}} @@ -114,28 +114,37 @@ export APP_OPENSEARCH_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.ossearch[0].ho To use the configured service in your app, add a configuration file similar to the following to your project. ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} -# Relationships enable an app container's access to a service. -relationships: - ossearch: "opensearch:opensearch" -{{% /snippet %}} -{{% snippet name="opensearch" config="service" placeholder="true" %}} - type: opensearch:{{% latest "opensearch" %}} -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "myapp" + + [...] + + # Relationships enable an app container's access to a service. + relationships: + opensearch: + +services: + # The name of the service container. Must be unique within a project. + opensearch: + type: opensearch:{{% latest "opensearch" %}} ``` -{{% v2connect2app serviceName="opensearch" relationship="ossearch" var="OSSEARCH_HOSTS" %}} +{{% v2connect2app serviceName="opensearch" relationship="opensearch" var="OPENSEARCH_HOSTS" %}} ```bash {location="myapp/.environment"} # Set environment variables for individual credentials. # For more information, please visit {{< vendor/urlraw "docs" >}}/development/variables.html#service-environment-variables. -export OS_SCHEME=${OSSEARCH_SCHEME} -export OS_HOST=${OSSEARCH_HOST} -export OS_PORT=${OSSEARCH_PORT} +export OS_SCHEME=${OPENSEARCH_SCHEME} +export OS_HOST=${OPENSEARCH_HOST} +export OS_PORT=${OPENSEARCH_PORT} # Surface more common OpenSearch connection string variables for use in app. -export OPENSEARCH_USERNAME=${OSSEARCH_USERNAME} -export OPENSEARCH_PASSWORD=${OSSEARCH_PASSWORD} +export OS_USERNAME=${OPENSEARCH_USERNAME} +export OS_PASSWORD=${OPENSEARCH_PASSWORD} export OPENSEARCH_HOSTS=[\"$OS_SCHEME://$OS_HOST:$OS_PORT\"] ``` @@ -158,17 +167,18 @@ You may optionally enable HTTP Basic authentication. To do so, include the following in your `{{< vendor/configfile "services" >}}` configuration: ```yaml {configFile="services"} -{{% snippet name="opensearch" config="service" %}} - type: opensearch:{{% latest "opensearch" %}} - configuration: - authentication: - enabled: true -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + opensearch: + type: opensearch:{{% latest "opensearch" %}} + configuration: + authentication: + enabled: true ``` That enables mandatory HTTP Basic auth on all requests. The credentials are available in any relationships that point at that service, -in the `OSSEARCH_USERNAME` and `OSSEARCH_PASSWORD` [service environment variables](/development/variables/_index.md#service-environment-variables). +in the `OPENSEARCH_USERNAME` and `OPENSEARCH_PASSWORD` [service environment variables](/development/variables/_index.md#service-environment-variables). {{% service-values-change %}} This functionality is generally not required if OpenSearch isn't exposed on its own public HTTP route. @@ -178,13 +188,20 @@ To do so, add a route to `{{< vendor/configfile "routes" >}}` that has `opensear For example: ```yaml {configFile="routes"} -{{% snippet name="opensearch:opensearch" config="route" subDom="os" / %}} -{{% snippet name="opensearch" config="service" placeholder="true" %}} - type: opensearch:{{% latest "opensearch" %}} - configuration: - authentication: - enabled: true -{{% /snippet %}} +routes: + "https://www.os.{default}/": + type: redirect + to: "https://os.{default}/" + "https://os.{default}/": + type: upstream + upstream: "opensearch:opensearch" + +services: + # The name of the service container. Must be unique within a project. + opensearch: + configuration: + authentication: + enabled: true ``` ## Plugins @@ -193,13 +210,13 @@ OpenSearch offers a number of plugins. To enable them, list them under the `configuration.plugins` key in your `{{< vendor/configfile "services" >}}` file, like so: ```yaml {configFile="services"} -{{% snippet name="opensearch" config="service" %}} - type: "opensearch:{{% latest "opensearch" %}}" - configuration: - plugins: - - analysis-icu - - lang-python -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + opensearch: + configuration: + plugins: + - analysis-icu + - lang-python ``` In this example you'd have the ICU analysis plugin and the size mapper plugin. diff --git a/sites/upsun/src/add-services/postgresql.md b/sites/upsun/src/add-services/postgresql.md index 6f7bfd4190..5693a6a131 100644 --- a/sites/upsun/src/add-services/postgresql.md +++ b/sites/upsun/src/add-services/postgresql.md @@ -43,23 +43,23 @@ title= Service environment variables {{% service-values-change %}} ```bash -POSTGRESQLDATABASE_USERNAME=main -POSTGRESQLDATABASE_SCHEME=pgsql -POSTGRESQLDATABASE_SERVICE=postgresql -POSTGRESQLDATABASE_FRAGMENT= -POSTGRESQLDATABASE_IP=123.456.78.90 -POSTGRESQLDATABASE_HOSTNAME=azertyuiopqsdfghjklm.postgresql.service._.eu-1.{{< vendor/urlraw "hostname" >}} -POSTGRESQLDATABASE_PORT=5432 -POSTGRESQLDATABASE_CLUSTER=azertyuiopqsdf-main-afdwftq -POSTGRESQLDATABASE_EPOCH=0 -POSTGRESQLDATABASE_HOST=postgresqldatabase.internal -POSTGRESQLDATABASE_REL=postgresql -POSTGRESQLDATABASE_PATH=main -POSTGRESQLDATABASE_QUERY={'is_master': True} -POSTGRESQLDATABASE_PASSWORD=ChangeMe -POSTGRESQLDATABASE_TYPE=postgresql:{{% latest "postgresql" %}} -POSTGRESQLDATABASE_PUBLIC=false -POSTGRESQLDATABASE_HOST_MAPPED=false +POSTGRESQL_USERNAME=main +POSTGRESQL_SCHEME=pgsql +POSTGRESQL_SERVICE=postgresql +POSTGRESQL_FRAGMENT= +POSTGRESQL_IP=123.456.78.90 +POSTGRESQL_HOSTNAME=azertyuiopqsdfghjklm.postgresql.service._.eu-1.{{< vendor/urlraw "hostname" >}} +POSTGRESQL_PORT=5432 +POSTGRESQL_CLUSTER=azertyuiopqsdf-main-afdwftq +POSTGRESQL_EPOCH=0 +POSTGRESQL_HOST=postgresql.internal +POSTGRESQL_REL=postgresql +POSTGRESQL_PATH=main +POSTGRESQL_QUERY={'is_master': True} +POSTGRESQL_PASSWORD=ChangeMe +POSTGRESQL_TYPE=postgresql:{{% latest "postgresql" %}} +POSTGRESQL_PUBLIC=false +POSTGRESQL_HOST_MAPPED=false ``` <---> @@ -81,7 +81,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain "hostname": "azertyuiopqsdfghjklm.postgresql.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 5432, "cluster": "azertyuiopqsdf-main-afdwftq", - "host": "postgresqldatabase.internal", + "host": "postgresql.internal", "rel": "postgresql", "path": "main", "query": { @@ -101,7 +101,7 @@ Here is an example of how to gather [`PLATFORM_RELATIONSHIPS` environment variab export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_POSTGRESQL_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.postgresqldatabase[0].host')" +export APP_POSTGRESQL_HOST="$(echo $RELATIONSHIPS_JSON | jq -r '.postgresql[0].host')" ``` {{< /codetabs >}} @@ -111,27 +111,36 @@ export APP_POSTGRESQL_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.postgresqldata {{% endpoint-description type="postgresql" php=true /%}} ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} -# Relationships enable an app container's access to a service. -relationships: - postgresqldatabase: "postgresql:postgresql" -{{% /snippet %}} -{{% snippet name="postgresql" config="service" placeholder="true" %}} - type: postgresql:{{% latest "postgresql" %}} -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "myapp" + + [...] + + # Relationships enable an app container's access to a service. + relationships: + postgresql: + +services: + # The name of the service container. Must be unique within a project. + postgresql: + type: postgresql:{{% latest "postgresql" %}} ``` -{{% v2connect2app serviceName="postgresql" relationship="postgresqldatabase" var="DATABASE_URL"%}} +{{% v2connect2app serviceName="postgresql" relationship="postgresql" var="DATABASE_URL"%}} ```bash {location="myapp/.environment"} # Set environment variables for individual credentials. # For more information, please visit {{< vendor/urlraw "docs" >}}/development/variables.html#service-environment-variables. -export DB_CONNECTION="${POSTGRESQLDATABASE_SCHEME}" -export DB_USERNAME="${POSTGRESQLDATABASE_USERNAME}" -export DB_PASSWORD="${POSTGRESQLDATABASE_PASSWORD}" -export DB_HOST="${POSTGRESQLDATABASE_HOST}" -export DB_PORT="${POSTGRESQLDATABASE_PORT}" -export DB_DATABASE="${POSTGRESQLDATABASE_PATH}" +export DB_CONNECTION="${POSTGRESQL_SCHEME}" +export DB_USERNAME="${POSTGRESQL_USERNAME}" +export DB_PASSWORD="${POSTGRESQL_PASSWORD}" +export DB_HOST="${POSTGRESQL_HOST}" +export DB_PORT="${POSTGRESQL_PORT}" +export DB_DATABASE="${POSTGRESQL_PATH}" # Surface connection string variable for use in app. export DATABASE_URL="${DB_CONNECTION}://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_DATABASE}" @@ -144,17 +153,17 @@ export DATABASE_URL="${DB_CONNECTION}://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST} Access the service using the {{< vendor/name >}} CLI by running `{{< vendor/cli >}} sql`. You can also access it from your app container via [SSH](../development/ssh/_index.md). -From your [relationship data](#relationship-reference), you need: `POSTGRESQLDATABASE_USERNAME`, `POSTGRESQLDATABASE_HOST`, and `POSTGRESQLDATABASE_PORT`. +From your [relationship data](#relationship-reference), you need: `POSTGRESQL_USERNAME`, `POSTGRESQL_HOST`, and `POSTGRESQL_PORT`. Then run the following command: ```bash -psql -U {{< variable "POSTGRESQLDATABASE_USERNAME" >}} -h {{< variable "POSTGRESQLDATABASE_HOST" >}} -p {{< variable "POSTGRESQLDATABASE_PORT" >}} +psql -U {{< variable "POSTGRESQL_USERNAME" >}} -h {{< variable "POSTGRESQL_HOST" >}} -p {{< variable "POSTGRESQL_PORT" >}} ``` Using the values from the [example](#relationship-reference), that would be: ```bash -psql -U main -h postgresqldatabase.internal -p 5432 +psql -U main -h postgresql.internal -p 5432 ``` {{% service-values-change %}} @@ -170,7 +179,7 @@ The easiest way to download all data in a PostgreSQL instance is with the {{< ve If you have multiple SQL databases it prompts you which one to export. You can also specify one by relationship name explicitly: ```bash -{{% vendor/cli %}} db:dump --relationship postgresqldatabase +{{% vendor/cli %}} db:dump --relationship postgresql ``` By default the file is uncompressed. If you want to compress it, use the `--gzip` (`-z`) option: @@ -205,7 +214,7 @@ That works for any SQL file, so the usual caveats about importing an SQL dump ap As with exporting, you can also specify a specific environment to use and a specific database relationship to use, if there are multiple. ```bash -{{% vendor/cli %}} sql --relationship postgresqldatabase -e {{< variable "BRANCH_NAME" >}} < my_database_backup.sql +{{% vendor/cli %}} sql --relationship postgresql -e {{< variable "BRANCH_NAME" >}} < my_database_backup.sql ``` {{< note >}} @@ -236,26 +245,27 @@ Under the `configuration` key of your service there are two additional keys: Consider the following illustrative example: ```yaml {configFile="services"} -{{% snippet name="postgresql" config="service" %}} - type: "postgresql:{{% latest "postgresql" %}}" - configuration: - databases: - - main - - legacy - endpoints: - admin: - privileges: - main: admin - legacy: admin - reporter: - default_database: main - privileges: - main: ro - importer: - default_database: legacy - privileges: - legacy: rw -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + postgresql: + type: "postgresql:{{% latest "postgresql" %}}" + configuration: + databases: + - main + - legacy + endpoints: + admin: + privileges: + main: admin + legacy: admin + reporter: + default_database: main + privileges: + main: ro + importer: + default_database: legacy + privileges: + legacy: rw ``` This example creates a single PostgreSQL service named `postgresql`. The server has two databases, `main` and `legacy` with three endpoints created. @@ -269,33 +279,47 @@ If a given endpoint has access to multiple databases you should also specify whi Once these endpoints are defined, you need to expose them to your application as a relationship. Continuing with the above example, your `relationships` in `{{< vendor/configfile "app" >}}` might look like: ```yaml {configFile="app"} -{{% snippet name="false" config="app" root="false" %}} -relationships: - database: "postgresql:admin" - reports: "postgresql:reporter" - imports: "postgresql:importer" -{{% /snippet %}} - -{{% snippet name="postgresql" config="service" placeholder="true" %}} - type: "postgresql:{{% latest "postgresql" %}}" - configuration: - databases: - - main - - legacy - endpoints: - admin: - privileges: - main: admin - legacy: admin - reporter: - default_database: main - privileges: - main: ro - importer: - default_database: legacy - privileges: - legacy: rw -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + + source: + root: "/" + + [...] + + relationships: + database: + service: postgresql + endpoint: admin + reports: + service: postgresql + endpoint: reporter + imports: + service: postgresql + endpoint: importer + +services: + # The name of the service container. Must be unique within a project. + postgresql: + type: "postgresql:{{% latest "postgresql" %}}" + configuration: + databases: + - main + - legacy + endpoints: + admin: + privileges: + main: admin + legacy: admin + reporter: + default_database: main + privileges: + main: ro + importer: + default_database: legacy + privileges: + legacy: rw ``` Each database is accessible to your application through the `database`, `reports`, and `imports` relationships. @@ -304,47 +328,50 @@ They'll be available in the [service environment variables](/development/variabl A service configuration without the `configuration` block defined is equivalent to the following default values: ```yaml {configFile="services"} -{{% snippet name="postgresql" config="service" %}} - type: "postgresql:{{% latest "postgresql" %}}" - configuration: - databases: - - main - endpoints: - postgresql: - default_database: main - privileges: - main: admin -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + postgresql: + type: "postgresql:{{% latest "postgresql" %}}" + configuration: + databases: + - main + endpoints: + postgresql: + default_database: main + privileges: + main: admin ``` If you do not define `database` but `endpoints` are defined, then the single database `main` is created with the following assumed configuration: ```yaml {configFile="services"} -{{% snippet name="postgresql" config="service" %}} - type: "postgresql:{{% latest "postgresql" %}}" - configuration: - databases: - - main - endpoints: -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + postgresql: + type: "postgresql:{{% latest "postgresql" %}}" + configuration: + databases: + - main + endpoints: ``` Alternatively, if you define multiple databases but no endpoints, a single user `main` is created with `admin` access to each of your databases, equivalent to the configuration below: ```yaml {configFile="services"} -{{% snippet name="postgresql" config="service" %}} - type: "postgresql:{{% latest "postgresql" %}}" - configuration: - databases: - - firstdb - - seconddb - - thirddb - endpoints: - main: - firstdb: admin - seconddb: admin - thirddb: admin -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + postgresql: + type: "postgresql:{{% latest "postgresql" %}}" + configuration: + databases: + - firstdb + - seconddb + - thirddb + endpoints: + main: + firstdb: admin + seconddb: admin + thirddb: admin ``` {{% databases-passwords %}} @@ -358,13 +385,14 @@ To change the timezone for the current session, run `SET TIME ZONE {{< variable {{% vendor/name %}} supports a number of PostgreSQL extensions. To enable them, list them under the `configuration.extensions` key in your `{{< vendor/configfile "services" >}}` file, like so: ```yaml {configFile="services"} -{{% snippet name="postgresql" config="service" %}} - type: "postgresql:{{% latest "postgresql" %}}" - configuration: - extensions: - - pg_trgm - - hstore -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + postgresql: + type: "postgresql:{{% latest "postgresql" %}}" + configuration: + extensions: + - pg_trgm + - hstore ``` In this case, you have `pg_trgm` installed, providing functions to determine the similarity of text based on trigram matching, and `hstore` providing a key-value store. diff --git a/sites/upsun/src/add-services/rabbitmq.md b/sites/upsun/src/add-services/rabbitmq.md index 8efb591f15..c41223956a 100644 --- a/sites/upsun/src/add-services/rabbitmq.md +++ b/sites/upsun/src/add-services/rabbitmq.md @@ -36,23 +36,23 @@ title= Service environment variables {{% service-values-change %}} ```bash -RABBITMQQUEUE_USERNAME=guest -RABBITMQQUEUE_SCHEME=amqp -RABBITMQQUEUE_SERVICE=rabbitmq -RABBITMQQUEUE_FRAGMENT= -RABBITMQQUEUE_EPOCH=0 -RABBITMQQUEUE_IP=123.456.78.90 -RABBITMQQUEUE_HOSTNAME=azertyuiopqsdfghjklm.rabbitmq.service._.eu-1.{{< vendor/urlraw "hostname" >}} -RABBITMQQUEUE_PORT=5672 -RABBITMQQUEUE_CLUSTER=azertyuiop-main-afdwftq -RABBITMQQUEUE_HOST=rabbitmqqueue.internal -RABBITMQQUEUE_REL=rabbitmq -RABBITMQQUEUE_PATH= -RABBITMQQUEUE_QUERY={} -RABBITMQQUEUE_PASSWORD=ChangeMe -RABBITMQQUEUE_TYPE=rabbitmq:{{% latest "rabbitmq" %}} -RABBITMQQUEUE_PUBLIC=false -RABBITMQQUEUE_HOST_MAPPED=false +RABBITMQ_USERNAME=guest +RABBITMQ_SCHEME=amqp +RABBITMQ_SERVICE=rabbitmq +RABBITMQ_FRAGMENT= +RABBITMQ_EPOCH=0 +RABBITMQ_IP=123.456.78.90 +RABBITMQ_HOSTNAME=azertyuiopqsdfghjklm.rabbitmq.service._.eu-1.{{< vendor/urlraw "hostname" >}} +RABBITMQ_PORT=5672 +RABBITMQ_CLUSTER=azertyuiop-main-afdwftq +RABBITMQ_HOST=rabbitmq.internal +RABBITMQ_REL=rabbitmq +RABBITMQ_PATH= +RABBITMQ_QUERY={} +RABBITMQ_PASSWORD=ChangeMe +RABBITMQ_TYPE=rabbitmq:{{% latest "rabbitmq" %}} +RABBITMQ_PUBLIC=false +RABBITMQ_HOST_MAPPED=false ``` <---> @@ -74,7 +74,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain "hostname": "azertyuiopqsdfghjklm.rabbitmq.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 5672, "cluster": "azertyuiopqsdf-main-afdwftq", - "host": "rabbitmqqueue.internal", + "host": "rabbitmq.internal", "rel": "rabbitmq", "path": null, "query": [], @@ -92,7 +92,7 @@ Here is an example of how to gather [`PLATFORM_RELATIONSHIPS` environment variab export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_RABBITMQ_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.rabbitmqqueue[0].host')" +export APP_RABBITMQ_HOST="$(echo $RELATIONSHIPS_JSON | jq -r '.rabbitmq[0].host')" ``` {{< /codetabs >}} @@ -102,27 +102,35 @@ export APP_RABBITMQ_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.rabbitmqqueue[0] {{% endpoint-description type="rabbitmq" /%}} ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} -# Relationships enable an app container's access to a service. -relationships: - rabbitmqqueue: "rabbitmq:rabbitmq" -{{% /snippet %}} -{{% snippet name="rabbitmq" config="service" placeholder="true" %}} - type: rabbitmq:{{% latest "rabbitmq" %}} - disk: 256 -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "myapp" + + [...] + + # Relationships enable an app container's access to a service. + relationships: + rabbitmq: + +services: + # The name of the service container. Must be unique within a project. + rabbitmq: + type: rabbitmq:{{% latest "rabbitmq" %}} ``` -{{% v2connect2app serviceName="rabbitmq" relationship="rabbitmqqueue" var="AMQP_URL"%}} +{{% v2connect2app serviceName="rabbitmq" relationship="rabbitmq" var="AMQP_URL"%}} ```bash {location="myapp/.environment"} # Set environment variables for individual credentials. # For more information, please visit {{< vendor/urlraw "docs" >}}/development/variables.html#service-environment-variables. -export QUEUE_SCHEME=${RABBITMQQUEUE_SCHEME} -export QUEUE_USERNAME=${RABBITMQQUEUE_USERNAME} -export QUEUE_PASSWORD=${RABBITMQQUEUE_PASSWORD} -export QUEUE_HOST=${RABBITMQQUEUE_HOST} -export QUEUE_PORT=${RABBITMQQUEUE_PORT} +export QUEUE_SCHEME=${RABBITMQ_SCHEME} +export QUEUE_USERNAME=${RABBITMQ_USERNAME} +export QUEUE_PASSWORD=${RABBITMQ_PASSWORD} +export QUEUE_HOST=${RABBITMQ_HOST} +export QUEUE_PORT=${RABBITMQ_PORT} # Set a single RabbitMQ connection string variable for AMQP. export AMQP_URL="${QUEUE_SCHEME}://${QUEUE_USERNAME}:${QUEUE_PASSWORD}@${QUEUE_HOST}:${QUEUE_PORT}/" @@ -186,13 +194,14 @@ which can be useful for separating resources, such as exchanges, queues, and bin To create virtual hosts, add them to your configuration as in the following example: ```yaml {configFile="services"} -{{% snippet name="rabbitmq" config="service" %}} - type: "rabbitmq:{{% latest "rabbitmq" %}}" - configuration: - vhosts: - - host1 - - host2 -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + rabbitmq: + type: "rabbitmq:{{% latest "rabbitmq" %}}" + configuration: + vhosts: + - host1 + - host2 ``` ## Upgrading diff --git a/sites/upsun/src/add-services/redis.md b/sites/upsun/src/add-services/redis.md index 140eb2d76e..2fa5043b86 100644 --- a/sites/upsun/src/add-services/redis.md +++ b/sites/upsun/src/add-services/redis.md @@ -51,23 +51,23 @@ title= Service environment variables {{% service-values-change %}} ```bash -REDISCACHE_USERNAME= -REDISCACHE_SCHEME=redis -REDISCACHE_SERVICE=redis -REDISCACHE_FRAGMENT= -REDISCACHE_IP=123.456.78.90 -REDISCACHE_EPOCH=0 -REDISCACHE_HOSTNAME=azertyuiopqsdfghjklm.redis.service._.eu-1.{{< vendor/urlraw "hostname" >}} -REDISCACHE_PORT=6379 -REDISCACHE_CLUSTER=azertyuiopqsdf-main-afdwftq -REDISCACHE_HOST=rediscache.internal -REDISCACHE_REL=redis -REDISCACHE_PATH= -REDISCACHE_QUERY={} -REDISCACHE_PASSWORD= -REDISCACHE_TYPE=redis:{{% latest "redis" %}} -REDISCACHE_PUBLIC=false -REDISCACHE_HOST_MAPPED=false +REDIS_USERNAME= +REDIS_SCHEME=redis +REDIS_SERVICE=redis +REDIS_FRAGMENT= +REDIS_IP=123.456.78.90 +REDIS_EPOCH=0 +REDIS_HOSTNAME=azertyuiopqsdfghjklm.redis.service._.eu-1.{{< vendor/urlraw "hostname" >}} +REDIS_PORT=6379 +REDIS_CLUSTER=azertyuiopqsdf-main-afdwftq +REDIS_HOST=rediscache.internal +REDIS_REL=redis +REDIS_PATH= +REDIS_QUERY={} +REDIS_PASSWORD= +REDIS_TYPE=redis:{{% latest "redis" %}} +REDIS_PUBLIC=false +REDIS_HOST_MAPPED=false ``` <---> @@ -89,7 +89,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain "hostname": "azertyuiopqsdfghjklm.redis.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 6379, "cluster": "azertyuiopqsdf-main-7rqtwti", - "host": "rediscache.internal", + "host": "redis.internal", "rel": "redis", "path": null, "query": [], @@ -107,7 +107,7 @@ Here is an example of how to gather [`PLATFORM_RELATIONSHIPS` environment variab export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_REDIS_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.rediscache[0].host')" +export APP_REDIS_HOST="$(echo $RELATIONSHIPS_JSON | jq -r '.redis[0].host')" ``` {{< /codetabs >}} @@ -168,9 +168,14 @@ To define the relationship, use the `redis` endpoint : applications: # The name of the app container. Must be unique within a project. : + source: + root: "myapp" + + [...] + # Relationships enable access from this app to a given service. relationships: - : ":redis" + : services: # The name of the service container. Must be unique within a project. @@ -178,21 +183,32 @@ services: type: redis-persistent: ``` -You can define `` and `` as you like, but it’s best if they’re distinct. -With this definition, the application container now has access to the service via the relationship ``. -For PHP, enable the extension for the service: +You can define `` as you like, so long as it’s unique between all defined services and matches in both the application and services configuration. + +The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) (the network address a service is accessible from) that is identical to the name of that service. + +Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). + +With the above definition, the application container now has [access to the service](#use-in-app) via the relationship `` and its corresponding [`PLATFORM_RELATIONSHIPS` environment variable](/development/variables/use-variables#use-provided-variables). + +For PHP, enable the [extension](/languages/php/extensions) for the service: ```yaml {configFile="app"} applications: # The name of the app container. Must be unique within a project. : - # PHP extensions. + source: + root: "myapp" + + [...] + runtime: extensions: - redis + # Relationships enable access from this app to a given service. relationships: - : ":redis" + : services: # The name of the service container. Must be unique within a project. @@ -204,13 +220,18 @@ services: #### [Service](/add-services/_index.md) and [app](/create-apps/_index.md) configuration -```yaml {configFile="services"} +```yaml {configFile="app"} applications: # The name of the app container. Must be unique within a project. - myapp: + : + source: + root: "myapp" + + [...] + # Relationships enable access from this app to a given service. relationships: - rediscache: "redis:redis" + redis: services: # The name of the service container. Must be unique within a project. @@ -223,31 +244,36 @@ services: To use the configured service in your app, add a configuration file similar to the following to your project. ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} +applications: + # The name of the app container. Must be unique within a project. + : + source: + root: "myapp" + + [...] -# Other options... + # Relationships enable access from this app to a given service. + relationships: + redis: -# Relationships enable an app container's access to a service. -relationships: - rediscache: "redis:redis" -{{% /snippet %}} -{{% snippet name="redis" config="service" placeholder="true" %}} - type: redis-persistent:{{% latest "redis" %}} -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + redis: + type: redis-persistent:{{% latest "redis" %}} ``` -{{% v2connect2app serviceName="redis" relationship="rediscache" var="REDIS_URL"%}} +{{% v2connect2app serviceName="redis" relationship="redis" var="CACHE_URL"%}} ```bash {location="myapp/.environment"} # Set environment variables for individual credentials. # For more information, please visit {{< vendor/urlraw "docs" >}}/development/variables.html#service-environment-variables. -export CACHE_HOST="${REDISCACHE_HOST}" -export CACHE_PORT="${REDISCACHE_PORT}" -export CACHE_PASSWORD="${REDISCACHE_PASSWORD}" -export CACHE_SCHEME="${REDISCACHE_SCHEME}" +export CACHE_HOST="${REDIS_HOST}" +export CACHE_PORT="${REDIS_PORT}" +export CACHE_PASSWORD="${REDIS_PASSWORD}" +export CACHE_SCHEME="${REDIS_SCHEME}" # Surface a Redis connection string for use in app. -export REDIS_URL="${CACHE_SCHEME}://${CACHE_PASSWORD}@${CACHE_HOST}:${CACHE_PORT}" +export CACHE_URL="${CACHE_SCHEME}://${CACHE_PASSWORD}@${CACHE_HOST}:${CACHE_PORT}" ``` {{% /v2connect2app %}} @@ -291,9 +317,14 @@ To define the relationship, use the `redis` endpoint : applications: # The name of the app container. Must be unique within a project. : + source: + root: "myapp" + + [...] + # Relationships enable access from this app to a given service. relationships: - : ":redis" + : services: # The name of the service container. Must be unique within a project. @@ -301,21 +332,32 @@ services: type: redis: ``` -You can define `` and `` as you like, but it’s best if they’re distinct. -With this definition, the application container now has access to the service via the relationship ``. -For PHP, enable the extension for the service: +You can define `` as you like, so long as it’s unique between all defined services and matches in both the application and services configuration. + +The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) (the network address a service is accessible from) that is identical to the name of that service. + +Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). + +With the above definition, the application container now has [access to the service](#use-in-app) via the relationship `` and its corresponding [`PLATFORM_RELATIONSHIPS` environment variable](/development/variables/use-variables#use-provided-variables). + +For PHP, enable the [extension](/languages/php/extensions) for the service: ```yaml {configFile="app"} applications: # The name of the app container. Must be unique within a project. : - # PHP extensions. + source: + root: "myapp" + + [...] + runtime: extensions: - redis + # Relationships enable access from this app to a given service. relationships: - : ":redis" + : services: # The name of the service container. Must be unique within a project. @@ -330,10 +372,15 @@ services: ```yaml {configFile="app"} applications: # The name of the app container. Must be unique within a project. - myapp: + : + source: + root: "myapp" + + [...] + # Relationships enable access from this app to a given service. relationships: - rediscache: "redis:redis" + redis: services: # The name of the service container. Must be unique within a project. @@ -346,31 +393,36 @@ services: To use the configured service in your app, add a configuration file similar to the following to your project. ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} +applications: + # The name of the app container. Must be unique within a project. + : + source: + root: "myapp" + + [...] -# Other options... + # Relationships enable access from this app to a given service. + relationships: + redis: -# Relationships enable an app container's access to a service. -relationships: - rediscache: "redis:redis" -{{% /snippet %}} -{{% snippet name="redis" config="service" placeholder="true" %}} - type: redis:{{% latest "redis" %}} -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + redis: + type: redis:{{% latest "redis" %}} ``` -{{% v2connect2app serviceName="redis" relationship="rediscache" var="REDIS_URL"%}} +{{% v2connect2app serviceName="redis" relationship="redis" var="CACHE_URL"%}} ```bash {location="myapp/.environment"} # Set environment variables for individual credentials. # For more information, please visit {{< vendor/urlraw "docs" >}}/development/variables.html#service-environment-variables. -export CACHE_HOST="${REDISCACHE_HOST}" -export CACHE_PORT="${REDISCACHE_PORT}" -export CACHE_PASSWORD="${REDISCACHE_PASSWORD}" -export CACHE_SCHEME="${REDISCACHE_SCHEME}" +export CACHE_HOST="${REDIS_HOST}" +export CACHE_PORT="${REDIS_PORT}" +export CACHE_PASSWORD="${REDIS_PASSWORD}" +export CACHE_SCHEME="${REDIS_SCHEME}" # Surface a Redis connection string for use in app. -export REDIS_URL="${CACHE_SCHEME}://${CACHE_PASSWORD}@${CACHE_HOST}:${CACHE_PORT}" +export CACHE_URL="${CACHE_SCHEME}://${CACHE_PASSWORD}@${CACHE_HOST}:${CACHE_PORT}" ``` {{% /v2connect2app %}} @@ -395,7 +447,7 @@ Use the Redis [`select` command](https://redis.io/commands/select): ```php connect(getenv('CACHE_HOST'), getenv('CACHE_PORT')); +$redis->connect(getenv('REDIS_HOST'), getenv('REDIS_PORT')); $redis->select(0); // switch to DB 0 $redis->set('x', '42'); // write 42 to x @@ -417,8 +469,8 @@ the Python library suggests using separate client instances for each database: import os from redis import Redis -database0 = Redis(host=os.getenv('CACHE_HOST'), port=os.getenv('CACHE_PORT'), db=0) -database1 = Redis(host=os.getenv('CACHE_HOST'), port=os.getenv('CACHE_PORT'), db=1) +database0 = Redis(host=os.getenv('REDIS_HOST'), port=os.getenv('REDIS_PORT'), db=0) +database1 = Redis(host=os.getenv('REDIS_HOST'), port=os.getenv('REDIS_PORT'), db=1) ``` <---> @@ -432,7 +484,7 @@ Use the Redis [`select` command](https://redis.io/commands/select): ```javascript const redis = require('redis'); -const client = redis.createClient(process.env.CACHE_PORT, process.env.CACHE_HOST); +const client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_HOST); await client.SELECT(0); // switch to DB 0 await client.set('x', '42'); // write 42 to x @@ -450,11 +502,12 @@ it triggers a cache cleanup. To customize those cache cleanups, set up an eviction policy such as the following: ```yaml {configFile="services"} -{{% snippet name="redis" config="service" %}} - type: "redis:{{% latest "redis" %}}" - configuration: - maxmemory_policy: allkeys-lfu -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + redis: + type: "redis:{{% latest "redis" %}}" + configuration: + maxmemory_policy: allkeys-lfu ``` The following table presents the possible values: @@ -486,7 +539,7 @@ After you've retrieved the hostname and port, [open an SSH session](../developme To access your Redis service, run the following command: ```bash -redis-cli -h {{< variable "REDISCACHE_HOSTNAME" >}} -p {{< variable "REDISCACHE_PORT" >}} +redis-cli -h {{< variable "REDIS_HOSTNAME" >}} -p {{< variable "REDIS_PORT" >}} ``` {{% version/specific %}} @@ -497,7 +550,7 @@ Note that the `CONFIG GET` and `CONFIG SET` admin commands might be restricted o {{% /version/specific %}} ```bash -redis-cli -h {{< variable "REDISCACHE_HOSTNAME" >}} -p {{< variable "REDISCACHE_PORT" >}} info +redis-cli -h {{< variable "REDIS_HOSTNAME" >}} -p {{< variable "REDIS_PORT" >}} info ``` ## Use Redis as a handler for PHP sessions @@ -509,32 +562,31 @@ which means Redis stores and retrieves the data saved into sessions. To set up Redis as your session handler, add a configuration similar to the following: -```yaml {configFile="services" v2Hide="true"} -{{% snippet name="data" config="service" %}} - type: "redis-persistent:{{% latest "redis" %}}" -{{% /snippet %}} -``` - ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="false" %}} -type: "php:{{% latest "php" %}}" - -relationships: - sessionstorage: "data:redis" - -variables: - php: - session.save_handler: redis - session.save_path: "tcp://{{< variable "$SESSIONSTORAGE_HOSTNAME" >}}:{{< variable "$SESSIONSTORAGE_PORT" >}}" - -web: - locations: - '/': - root: 'web' - passthru: '/index.php' -{{% /snippet %}} - -{{% snippet name="data" config="service" placeholder="true" %}} - type: "redis-persistent:{{% latest "redis" %}}" -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + source: + root: "myapp" + + type: "php:{{% latest "php" %}}" + + relationships: + redissession: + + variables: + php: + session.save_handler: redis + session.save_path: "tcp://{{< variable "$SESSIONSTORAGE_HOSTNAME" >}}:{{< variable "$SESSIONSTORAGE_PORT" >}}" + + web: + locations: + '/': + root: 'web' + passthru: '/index.php' + +services: + # The name of the service container. Must be unique within a project. + redissession: + type: "redis-persistent:{{% latest "redis" %}}" ``` diff --git a/sites/upsun/src/add-services/solr.md b/sites/upsun/src/add-services/solr.md index 8b42965d26..06407f408b 100644 --- a/sites/upsun/src/add-services/solr.md +++ b/sites/upsun/src/add-services/solr.md @@ -36,23 +36,23 @@ title= Service environment variables {{% service-values-change %}} ```bash -SOLRSEARCH_USERNAME= -SOLRSEARCH_SCHEME=solr -SOLRSEARCH_SERVICE=solr -SOLRSEARCH_IP=123.456.78.90 -SOLRSEARCH_FRAGMENT= -SOLRSEARCH_HOSTNAME=azertyuiopqsdfghjklm.solr.service._.eu-1.{{< vendor/urlraw "hostname" >}} -SOLRSEARCH_PORT=8080 -SOLRSEARCH_CLUSTER=azertyuiopqsdf-main-afdwftq -SOLRSEARCH_HOST=solrsearch.internal -SOLRSEARCH_REL=solr -SOLRSEARCH_PATH=solr/collection1 -SOLRSEARCH_QUERY={} -SOLRSEARCH_PASSWORD= -SOLRSEARCH_EPOCH=0 -SOLRSEARCH_TYPE=solr:{{% latest "solr" %}} -SOLRSEARCH_PUBLIC=false -SOLRSEARCH_HOST_MAPPED=false +SOLR_USERNAME= +SOLR_SCHEME=solr +SOLR_SERVICE=solr +SOLR_IP=123.456.78.90 +SOLR_FRAGMENT= +SOLR_HOSTNAME=azertyuiopqsdfghjklm.solr.service._.eu-1.{{< vendor/urlraw "hostname" >}} +SOLR_PORT=8080 +SOLR_CLUSTER=azertyuiopqsdf-main-afdwftq +SOLR_HOST=solr.internal +SOLR_REL=solr +SOLR_PATH=solr/collection1 +SOLR_QUERY={} +SOLR_PASSWORD= +SOLR_EPOCH=0 +SOLR_TYPE=solr:{{% latest "solr" %}} +SOLR_PUBLIC=false +SOLR_HOST_MAPPED=false ``` <---> @@ -74,7 +74,7 @@ The structure of the `PLATFORM_RELATIONSHIPS` environment variable can be obtain "hostname": "azertyuiopqsdfghjklm.solr.service._.eu-1.{{< vendor/urlraw "hostname" >}}", "port": 8080, "cluster": "azertyuiopqsdf-main-afdwftq", - "host": "solrsearch.internal", + "host": "solr.internal", "rel": "solr", "path": "solr\/collection1", "query": [], @@ -92,7 +92,7 @@ Here is an example of how to gather [`PLATFORM_RELATIONSHIPS` environment variab export RELATIONSHIPS_JSON=$(echo $PLATFORM_RELATIONSHIPS | base64 --decode) # Set environment variables for individual credentials. -export APP_SOLR_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.solrsearch[0].host')" +export APP_SOLR_HOST="$(echo $RELATIONSHIPS_JSON | jq -r '.solr[0].host')" ``` {{< /codetabs >}} @@ -102,27 +102,36 @@ export APP_SOLR_HOST=="$(echo $RELATIONSHIPS_JSON | jq -r '.solrsearch[0].host') {{% endpoint-description type="solr" sectionLink="#solr-6-and-later" multipleText="cores" /%}} ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="myapp" %}} -# Relationships enable an app container's access to a service. -relationships: - solrsearch: "solr:solr" -{{% /snippet %}} -{{% snippet name="solr" config="service" placeholder="true" %}} - type: solr:{{% latest "solr" %}} -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "myapp" + + [...] + + # Relationships enable an app container's access to a service. + relationships: + solrsearch: "solr:solr" + +services: + # The name of the service container. Must be unique within a project. + solr: + type: solr:{{% latest "solr" %}} ``` -{{% v2connect2app serviceName="solr" relationship="solrsearch" var="SOLR_URL" %}} +{{% v2connect2app serviceName="solr" relationship="solr" var="SEARCH_URL" %}} ```bash {location="myapp/.environment"} # Set environment variables for individual credentials. # For more information, please visit {{< vendor/urlraw "docs" >}}/development/variables.html#service-environment-variables. -export SOLR_HOST=${SOLRSEARCH_HOST} -export SOLR_PORT=${SOLRSEARCH_PORT} -export SOLR_PATH=${SOLRSEARCH_PATH} +export SEARCH_HOST=${SOLR_HOST} +export SEARCH_PORT=${SOLR_PORT} +export SEARCH_PATH=${SOLR_PATH} # Surface more common Solr connection string variables for use in app. -export SOLR_URL="http://${CACHE_HOST}:${CACHE_PORT}/${CACHE_PATH}" +export SEARCH_URL="http://${SEARCH_HOST}:${SEARCH_PORT}/${SEARCH_PATH}" ``` {{% /v2connect2app %}} @@ -134,11 +143,12 @@ For Solr 4, {{% vendor/name %}} supports only a single core per server called `c You must provide your own Solr configuration via a `core_config` key in your `{{< vendor/configfile "services" >}}`: ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} - type: "solr:4.10" - configuration: - core_config: !archive "{{< variable "DIRECTORY" >}}" -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + solr: + type: "solr:4.10" + configuration: + core_config: !archive "{{< variable "DIRECTORY" >}}" ``` {{< variable "DIRECTORY" >}} points to a directory in the Git repository, in or below the `{{< vendor/configdir >}}/` folder. This directory needs to contain everything that Solr needs to start a core. At the minimum, `solrconfig.xml` and `schema.xml`. @@ -146,11 +156,12 @@ You must provide your own Solr configuration via a `core_config` key in your `{{ For example, place them in `{{< vendor/configdir >}}/solr/conf/` such that the `schema.xml` file is located at `{{< vendor/configdir >}}/solr/conf/schema.xml`. You can then reference that path like this - ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} - type: "solr:4.10" - configuration: - core_config: !archive "solr/conf/" -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + solr: + type: "solr:4.10" + configuration: + core_config: !archive "solr/conf/" ``` ## Solr 6 and later @@ -158,20 +169,21 @@ For example, place them in `{{< vendor/configdir >}}/solr/conf/` such that the ` For Solr 6 and later {{% vendor/name %}} supports multiple cores via different endpoints. Cores and endpoints are defined separately, with endpoints referencing cores. Each core may have its own configuration or share a configuration. It is best illustrated with an example. ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} - type: solr:{{% latest "solr" %}} - configuration: - cores: - mainindex: - conf_dir: !archive "core1-conf" - extraindex: - conf_dir: !archive "core2-conf" - endpoints: - main: - core: mainindex - extra: - core: extraindex -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + solr: + type: solr:{{% latest "solr" %}} + configuration: + cores: + mainindex: + conf_dir: !archive "core1-conf" + extraindex: + conf_dir: !archive "core2-conf" + endpoints: + main: + core: mainindex + extra: + core: extraindex ``` The above definition defines a single Solr {{% latest "solr" %}} server. That server has 2 cores defined: @@ -184,28 +196,40 @@ It then defines two endpoints: `main` is connected to the `mainindex` core while Each endpoint is then available in the relationships definition in `{{< vendor/configfile "app" >}}`. For example, to allow an application to talk to both of the cores defined above its configuration should contain the following: ```yaml {configFile="app"} -{{% snippet name="myapp" config="app" root="false" %}} -type: "php:{{% latest "php" %}}" - -relationships: - solrsearch1: 'solr:main' - solrsearch2: 'solr:extra' -{{% /snippet %}} - -{{% snippet name="solr" config="service" placeholder="true" %}} - type: solr:{{% latest "solr" %}} - configuration: - cores: - mainindex: - conf_dir: !archive "core1-conf" - extraindex: - conf_dir: !archive "core2-conf" - endpoints: - main: - core: mainindex - extra: - core: extraindex -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + myapp: + + type: "php:{{% latest "php" %}}" + + source: + root: "myapp" + + [...] + + relationships: + solrsearch1: + service: solr + endpoint: main + solrsearch2: + service: solr + endpoint: extra + +services: + # The name of the service container. Must be unique within a project. + solr: + type: solr:{{% latest "solr" %}} + configuration: + cores: + mainindex: + conf_dir: !archive "core1-conf" + extraindex: + conf_dir: !archive "core2-conf" + endpoints: + main: + core: mainindex + extra: + core: extraindex ``` That is, the application's environment would include a `solrsearch1` relationship that connects to the `main` endpoint, which is the `mainindex` core, and a `solrsearch2` relationship that connects to the `extra` endpoint, which is the `extraindex` core. @@ -238,26 +262,27 @@ The relationships array would then look something like the following: For even more customizability, it's also possible to define Solr configsets. For example, the following snippet would define one configset, which would be used by all cores. Specific details can then be overridden by individual cores using `core_properties`, which is equivalent to the Solr `core.properties` file. ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} - type: solr:8.4 - configuration: - configsets: - mainconfig: !archive "configsets/solr8" - cores: - english_index: - core_properties: | - configSet=mainconfig - schema=english/schema.xml - arabic_index: - core_properties: | - configSet=mainconfig - schema=arabic/schema.xml - endpoints: - english: - core: english_index - arabic: - core: arabic_index -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + solr: + type: solr:{{% latest "solr" %}} + configuration: + configsets: + mainconfig: !archive "configsets/solr8" + cores: + english_index: + core_properties: | + configSet=mainconfig + schema=english/schema.xml + arabic_index: + core_properties: | + configSet=mainconfig + schema=arabic/schema.xml + endpoints: + english: + core: english_index + arabic: + core: arabic_index ``` In this example, `{{< vendor/configdir >}}/configsets/solr8` contains the configuration definition for multiple cores. There are then two cores created: @@ -276,16 +301,17 @@ Note that not all core properties features make sense to specify in the `core_pr If you don't specify any configuration, the following default is used: ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} - type: solr:{{% latest "solr" %}} - configuration: - cores: - collection1: - conf_dir: !archive "example" - endpoints: - solr: - core: collection1 -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + solr: + type: solr:{{% latest "solr" %}} + configuration: + cores: + collection1: + conf_dir: !archive "example" + endpoints: + solr: + core: collection1 ``` The example configuration directory is equivalent to the [Solr example configuration set](https://github.com/apache/solr/tree/main/solr/server/solr/configsets/sample_techproducts_configs/conf). @@ -297,15 +323,16 @@ You are strongly recommended to define your own configuration with a custom core If you don't specify any configuration, the following default is used: ```yaml {configFile="services"} -{{% snippet name="solr" config="service" %}} - type: solr:8.4 - configuration: - cores: - collection1: {} - endpoints: - solr: - core: collection1 -{{% /snippet %}} +services: + # The name of the service container. Must be unique within a project. + solr: + type: solr:8.4 + configuration: + cores: + collection1: {} + endpoints: + solr: + core: collection1 ``` The default configuration is based on an older version of the Drupal 8 Search API Solr module that is no longer in use. diff --git a/sites/upsun/src/add-services/varnish.md b/sites/upsun/src/add-services/varnish.md index 01f3c26e7f..12e4d99a66 100644 --- a/sites/upsun/src/add-services/varnish.md +++ b/sites/upsun/src/add-services/varnish.md @@ -99,25 +99,38 @@ your VCL templates needs logic to determine where each request is forwarded. For example, you might have the following configuration for two apps: ```yaml {configFile="services"} -{{% snippet name="varnish" config="service" %}} - type: varnish:{{% latest "varnish" %}} - relationships: - blog: 'blog:http' - main: 'app:http' - configuration: - vcl: !include - type: string - path: config.vcl -{{% /snippet %}} -{{% snippet name="blog" config="apps" placeholder="true" root="backends/blog" %}} -# The type of the application to build. -type: "php:{{% latest "php" %}}" -{{% /snippet %}} - -{{% snippet name="app" config="apps" globKey="false" placeholder="true" root="backends/main" %}} -# The type of the application to build. -type: "nodejs:{{% latest "nodejs" %}}" -{{% /snippet %}} +# The name of the service container. Must be unique within a project. +services: + varnish: + type: varnish:{{% latest "varnish" %}} + relationships: + blog: + service: blog + endpoint: http + main: + service: app + endpoint: http + configuration: + vcl: !include + type: string + path: config.vcl + +applications: + # The name of the app container. Must be unique within a project. + blog: + # The location of the application's code. + source: + root: "backends/blog" + # The type of the application to build. + type: "php:{{% latest "php" %}}" + + # The name of the app container. Must be unique within a project. + app: + # The location of the application's code. + source: + root: "backends/main" + # The type of the application to build. + type: "nodejs:{{% latest "php" %}}" ``` You could then define that all requests to `/blog/` go to the `blog` app and all other requests to the other app: @@ -140,10 +153,12 @@ Also disable the router cache as Varnish now provides caching. To forward all incoming requests to Varnish rather than your app, you could have the following: ```yaml {configFile="routes"} -{{% snippet name="varnish:http" config="route" redirect="false" %}} -cache: - enabled: false -{{% /snippet %}} +routes: + "https://{default}/": + type: upstream + upstream: "varnish:http" + cache: + enabled: false ``` Varnish forwards requests to your app based on the specified VCL template. @@ -262,43 +277,42 @@ To access the stats, create a **separate app** (`stats-app`) with a relationship Define [app configuration](../create-apps/app-reference.md) similar to the following: ```yaml {configFile="apps"} -{{% snippet name="stats-app" config="apps" root="stats" %}} -# The type of the application to build. -type: "python:{{% latest "python" %}}" -# Unique relationship _to_ Varnish from 'stats-app', where no relationship -# is defined _from_ Varnish to the same app, to avoid circular relationships. -relationships: - varnishstats: "varnish:http+stats" -{{% /snippet %}} -{{% snippet name="main-app" config="apps" globKey="false" root="backends/main" %}} -# The type of the application to build. -type: "nodejs:{{% latest "nodejs" %}}" -{{% /snippet %}} -{{% snippet name="varnish" config="service" placeholder="true" %}} - type: varnish:{{% latest "varnish" %}} - # Unique relationship _from_ Varnish _to_ 'main-app', where no relationship - # is defined _to_ Varnish to the same app, to avoid circular relationships. - relationships: - main: 'main-app:http' - configuration: - vcl: !include - type: string - path: config.vcl -{{% /snippet %}} -``` - -```yaml {configFile="services" v2Hide="true"} -{{% snippet name="varnish" config="service" %}} - type: varnish:{{% latest "varnish" %}} - # Unique relationship _from_ Varnish _to_ 'main-app', where no relationship - # is defined _to_ Varnish to the same app, to avoid circular relationships. - relationships: - main: 'app:http' - configuration: - vcl: !include - type: string - path: config.vcl -{{% /snippet %}} +applications: + # The name of the app container. Must be unique within a project. + stats-app: + # The location of the application's code. + source: + root: "stats" + # The type of the application to build. + type: "python:{{% latest "python" %}}" + # Unique relationship _to_ Varnish from 'stats-app', where no relationship + # is defined _from_ Varnish to the same app, to avoid circular relationships. + relationships: + varnishstats: + service: varnish + endpoint: "http+stats" + # The name of the app container. Must be unique within a project. + main-app: + # The location of the application's code. + source: + root: "backends/main" + # The type of the application to build. + type: "nodejs:{{% latest "nodejs" %}}" + +services: + # The name of the service container. Must be unique within a project. + varnish: + type: varnish:{{% latest "varnish" %}} + # Unique relationship _from_ Varnish _to_ 'main-app', where no relationship + # is defined _to_ Varnish to the same app, to avoid circular relationships. + relationships: + main: + service: "main-app" + endpoint: http + configuration: + vcl: !include + type: string + path: config.vcl ``` diff --git a/sites/upsun/src/create-apps/_index.md b/sites/upsun/src/create-apps/_index.md index dcb8019068..558ff63261 100644 --- a/sites/upsun/src/create-apps/_index.md +++ b/sites/upsun/src/create-apps/_index.md @@ -128,11 +128,12 @@ applications: php: composer/composer: '^2' - # The app's relationships (connections) with services or other applications. - # The key is the relationship name that can be viewed in the app. - # The value is specific to how the service is configured. + # Relationships enable an app container's access to a service or another app. + # The example below shows simplified configuration leveraging a default service + # (identified from the relationship name) and a default endpoint. + # See the Application reference for all options for defining relationships and endpoints. relationships: - database: 'mysqldb:mysql' + mysql: # Scripts that are run as part of the build and deploy process. hooks: @@ -168,5 +169,6 @@ applications: passthru: '/app.php' services: - mysqldb: + mysql: type: mariadb:{{% latest "mariadb" %}} +``` diff --git a/sites/upsun/src/create-apps/app-reference.md b/sites/upsun/src/create-apps/app-reference.md index e85af4de86..065f7441df 100644 --- a/sites/upsun/src/create-apps/app-reference.md +++ b/sites/upsun/src/create-apps/app-reference.md @@ -102,40 +102,270 @@ For more information, see how to [manage resources](/manage-resources.md). ## Relationships -To access another container within your project, you need to define a relationship to it. -You can give each relationship any name you want. +To allow containers in your project to communicate with one another, +you need to define relationships between them. +You can define a relationship between an app and a service, or [between two apps](/create-apps/multi-app/relationships.md). -The relationship is specified in the form `service_name:endpoint_name`. -The `service_name` is the name of the service given in the [services configuration](../add-services/_index.md) -or the name of another application in the same project specified as the `name` in that app's configration. +The quickest way to define a relationship between your app and a service +is to use the service's default endpoint.
+However, some services allow you to define multiple databases, cores, and/or permissions. +In these cases, you can't rely on default endpoints. +Instead, you can explicitly define multiple endpoints when setting up your relationships. -The `endpoint_name` is the exposed functionality of the service to use. -For most services, the endpoint is the same as the service type. -For some services (such as [MariaDB](../add-services/mysql/_index.md#multiple-databases) and [Solr](../add-services/solr.md#solr-6-and-later)), -you can define additional explicit endpoints for multiple databases and cores in the [service's configuration](../add-services/_index.md). +{{< note >}} +App containers don't have a default endpoint like services. +To connect your app to another app in your project, +you need to explicitly define the `http` endpoint as the endpoint to connect both apps.
+For more information, see how to [define relationships between your apps](/create-apps/multi-app/relationships.md). +{{< /note >}} + +Once a service is running and exposed via a relationship, +its credentials (such as the host, username, and password) are automatically available as [service environment variables](/development/variables#service-environment-variables), +in the `$_` format. +The available information is documented on each service's page, along with sample code for how to connect to it from your app. + +{{< note title="Availability" theme="info">}} + +New syntax (default and explicit endpoints) described below is supported by most, but not all, image types +(`Relationship 'SERVICE_NAME' of application 'app' ... targets a service without a valid default endpoint configuration.`). +This syntax is currently being rolled out for all images. +If you encounter this error, use the "legacy" Platform.sh configuration noted at the bottom of this section. + +{{< /note >}} + + +To define a relationship between your app and a service: + +{{< codetabs >}} -The following example shows a single MySQL service named `mysqldb` offering two databases, -a Redis cache service named `rediscache`, and an Elasticsearch service named `searchserver`. ++++ +title=Using default endpoints ++++ + +Use the following configuration: ```yaml {configFile="app"} applications: + # The name of the app container. Must be unique within a project. myapp: + # The location of the application's code. source: root: "/" - type: 'nodejs:{{% latest "nodejs" %}}' + + [...] + relationships: - database: 'mysqldb:db1' - database2: 'mysqldb:db2' - cache: 'rediscache:redis' - search: 'searchserver:elasticsearch' + {{% variable "SERVICE_NAME" %}}: ``` -{{% note %}} -Once a service is running and exposed via a relationship, -its credentials (such as the host, username, and password) are automatically available as [service environment variables](/development/variables.html#service-environment-variables), -in the `$_` format. -The available information is documented on each service's page, along with sample code for how to connect to it from your app. -{{% /note %}} +The `SERVICE_NAME` is the name of the service as defined in its [configuration](/add-services/_index.md). +It is used as the relationship name, and associated with a `null` value. +This instructs {{% vendor/name %}} to use the service's default endpoint to connect your app to the service. + +For example, if you define the following configuration: + +```yaml {configFile="app"} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + relationships: + mariadb: +``` + +{{% vendor/name %}} looks for a service named `mariadb` in your `{{% vendor/configfile "services" %}}` file, +and connects your app to it through the service's default endpoint. + +For reference, the equivalent configuration using explicit endpoints would be the following: + +```yaml {configFile="app"} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + relationships: + mariadb: + service: mariadb + endpoint: mysql +``` + +You can define any number of relationships in this way: + +```yaml {configFile="app"} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + relationships: + mariadb: + redis: + elasticsearch: +``` + +{{< note title="Tip" theme="info" >}} + +An even quicker way to define many relationships is to use the following single-line configuration: + +```yaml {configFile="app"} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + relationships: {{{< variable "SERVICE_NAME_A" >}}, {{< variable "SERVICE_NAME_B" >}}, {{< variable "SERVICE_NAME_C" >}}} + +services: + {{< variable "SERVICE_NAME_A" >}}: + type: mariadb:{{% latest "mariadb" %}} + {{< variable "SERVICE_NAME_B" >}}: + type: redis:{{% latest "redis" %}} + {{< variable "SERVICE_NAME_C" >}}: + type: elasticsearch:{{% latest "elasticsearch" %}} +``` + +{{< /note >}} + +<---> + ++++ +title=Using explicit endpoints ++++ + +Use the following configuration: + +```yaml {configFile="app"} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + relationships: + {{% variable "RELATIONSHIP_NAME" %}}: + service: {{% variable "SERVICE_NAME" %}} + endpoint: {{% variable "ENDPOINT_NAME" %}} +``` + +- `RELATIONSHIP_NAME` is the name you want to give to the relationship. +- `SERVICE_NAME` is the name of the service as defined in its [configuration](/add-services/_index.md). +- `ENDPOINT_NAME` is the endpoint your app will use to connect to the service (refer to the service reference to know which value to use). + +For example, to define a relationship named `database` that connects your app to a service called `mariadb` through the `db1` endpoint, +use the following configuration: + +```yaml {configFile="app"} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + relationships: + database: # The name of the relationship. + service: mariadb + endpoint: db1 +``` + +For more information on how to handle multiple databases, multiple cores, +and/or different permissions with services that support such features, +see each service's dedicated page: + + - [MariaDB/MySQL](/add-services/mysql/_index.md#multiple-databases) (multiple databases and permissions) + - [PostgreSQL](/add-services/postgresql/_index.md#multiple-databases) (multiple databases and permissions) + - [Redis](/add-services/redis/_index.md#multiple-databases) (multiple databases) + - [Solr](add-services/solr/_index.md#solr-6-and-later) (multiple cores) + - [Vault KMS](add-services/vault/_index.md#multiple-endpoints-example) (multiple permissions) + + You can add as many relationships as you want to your app configuration, + using both default and explicit endpoints according to your needs: + +```yaml {configFile="app"} +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + relationships: + database1: + service: mariadb + endpoint: admin + database2: + service: mariadb + endpoint: legacy + cache: + service: redis + search: + service: elasticsearch +``` + +{{< /codetabs >}} + +{{< note theme="info" title="Legacy" >}} + +The following legacy syntax for specifying relationships is still supported by {{% vendor/name %}}: + +```yaml +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + relationships: + : ":" +``` + +For example: + +```yaml +applications: + # The name of the app container. Must be unique within a project. + myapp: + # The location of the application's code. + source: + root: "/" + + [...] + + relationships: + database: "mariadb:mysql" +``` + +Feel free to use this until the default and explicit endpoint syntax is supported on all images. + +{{< /note >}} ## Available disk space diff --git a/sites/upsun/src/create-apps/workers.md b/sites/upsun/src/create-apps/workers.md index 4f0e26afcb..e51b5d6785 100644 --- a/sites/upsun/src/create-apps/workers.md +++ b/sites/upsun/src/create-apps/workers.md @@ -86,54 +86,52 @@ That means, for example, that the following two `{{< vendor/configfile "app" >}} ```yaml {configFile="app"} applications: app: #The name of the app, which must be unique within the project. - type: python:{{% latest "python" %}} - mounts: - test: - source: storage - source_path: test - relationships: - database: 'mysqldb:mysql' - workers: - queue: - commands: - start: | - python queue-worker.py - mail: - commands: - start: | - python mail-worker.py -services: - mysqldb: + type: python:{{% latest "python" %}} + mounts: + test: + source: storage + source_path: test + relationships: + mysql: + workers: + queue: + commands: + start: | + python queue-worker.py + mail: + commands: + start: | + python mail-worker.py + services: + mysql: type: mariadb:{{% latest "mariadb" %}} ``` ```yaml {configFile="app"} applications: app: #The name of the app, which must be unique within the project. - type: python:{{% latest "python" %}} - workers: - queue: - commands: - start: | - python queue-worker.py - mounts: - test: - source: storage - source_path: test - relationships: - database: 'mysqldb:mysql' - mail: - commands: - start: | - python mail-worker.py - mounts: - test: - source: storage - source_path: test - relationships: - database: 'mysqldb:mysql' + type: python:{{% latest "python" %}} + workers: + queue: + commands: + start: | + python queue-worker.py + mounts: + test: + source: storage + source_path: test + mysql: + mail: + commands: + start: | + python mail-worker.py + mounts: + test: + source: storage + source_path: test + mysql: services: - mysqldb: + mysql: type: mariadb:{{% latest "mariadb" %}} ``` @@ -154,62 +152,62 @@ For example, consider the following configuration: ```yaml {configFile="app"} applications: app: #The name of the app, which must be unique within the project. - type: "python:{{% latest "python" %}}" - hooks: - build: | - pip install -r requirements.txt - pip install -e . - pip install gunicorn - relationships: - database: 'mysqldb:mysql' - messages: 'rabbitqueue:rabbitmq' - variables: - env: - type: 'none' - web: - commands: - start: "gunicorn -b $PORT project.wsgi:application" + type: "python:{{% latest "python" %}}" + hooks: + build: | + pip install -r requirements.txt + pip install -e . + pip install gunicorn + relationships: + mysql: + rabbitmq: variables: env: - type: 'web' - mounts: - uploads: - source: storage - source_path: uploads - locations: - "/": - root: "" - passthru: true - allow: false - "/static": - root: "static/" - allow: true - workers: - queue: + type: 'none' + web: commands: - start: | - python queue-worker.py + start: "gunicorn -b $PORT project.wsgi:application" variables: env: - type: 'worker' + type: 'web' mounts: - scratch: + uploads: source: storage - source_path: scratch - mail: - commands: - start: | - python mail-worker.py - variables: - env: - type: 'worker' - mounts: {} - relationships: - emails: 'rabbitqueue:rabbitmq' + source_path: uploads + locations: + "/": + root: "" + passthru: true + allow: false + "/static": + root: "static/" + allow: true + workers: + queue: + commands: + start: | + python queue-worker.py + variables: + env: + type: 'worker' + mounts: + scratch: + source: storage + source_path: scratch + mail: + commands: + start: | + python mail-worker.py + variables: + env: + type: 'worker' + mounts: {} + relationships: + rabbitmq: services: - mysqldb: + mysql: type: 'mariadb:{{% latest "mariadb" %}}' - rabbitqueue: + rabbitmq: type: 'rabbitmq:{{% latest "rabbitmq" %}}' ``` @@ -273,33 +271,33 @@ and a `tmp` mount (called `local_dir`) to be used by a `queue` worker instance: ```yaml {configFile="app"} applications: app: #The name of the app, which must be unique within the project. - type: "nodejs:{{% latest "nodejs" %}}" - - # Define a web instance - web: - locations: - "/": - root: "public" - passthru: true - index: ['index.html'] - - mounts: - # Define a storage mount that's available to both instances together - 'shared_dir': - source: storage - service: files - source_path: our_stuff - - # Define a local mount that's available to each instance separately - 'local_dir': - source: tmp - source_path: my_stuff - - # Define a worker instance from the same code but with a different start - workers: - queue: - commands: - start: ./start.sh + type: "nodejs:{{% latest "nodejs" %}}" + + # Define a web instance + web: + locations: + "/": + root: "public" + passthru: true + index: ['index.html'] + + mounts: + # Define a storage mount that's available to both instances together + 'shared_dir': + source: storage + service: files + source_path: our_stuff + + # Define a local mount that's available to each instance separately + 'local_dir': + source: tmp + source_path: my_stuff + + # Define a worker instance from the same code but with a different start + workers: + queue: + commands: + start: ./start.sh ``` Both the `web` instance and `queue` worker have their own, dedicated `local_dir` mount. diff --git a/sites/upsun/src/get-started/stacks/symfony/environment-variables.md b/sites/upsun/src/get-started/stacks/symfony/environment-variables.md index df892d63a1..7b7734188a 100644 --- a/sites/upsun/src/get-started/stacks/symfony/environment-variables.md +++ b/sites/upsun/src/get-started/stacks/symfony/environment-variables.md @@ -99,11 +99,13 @@ symfony ssh -- symfony var:export --multiline ``` Each exposed environment variable is prefixed by the relationship name. -For example, if you have the following relationships in your configuration: +For example, if you have the following [relationships](/create-apps/app-reference.md#relationships) in your configuration: ```yaml relationships: - database: "securitydb:postgresql" + database: + service: securitydb + endpoint: postgresql ``` The environment variables for the database service is prefixed by `DATABASE_` diff --git a/sites/upsun/src/languages/elixir.md b/sites/upsun/src/languages/elixir.md index 643a7169f9..20d0d4d4f3 100644 --- a/sites/upsun/src/languages/elixir.md +++ b/sites/upsun/src/languages/elixir.md @@ -135,15 +135,21 @@ You can commit a `mix.exs` file in your repository and the system downloads the The services configuration is available in the environment variable `PLATFORM_RELATIONSHIPS`. -Given a relationship defined in `{{< vendor/configfile "app" >}}`: +Given a [relationship](/create-apps/app-reference.md#relationships) defined in `{{< vendor/configfile "app" >}}`: ```yaml {configFile="app"} applications: - app: + myapp: type: 'elixir:{{% latest "elixir" %}}' - ... + + [...] + + # Relationships enable an app container's access to a service. + # The example below shows simplified configuration leveraging a default service + # (identified from the relationship name) and a default endpoint. + # See the Application reference for all options for defining relationships and endpoints. relationships: - postgresdatabase: "dbpostgres:postgresql" + postgresql: ``` Assuming you have in `mix.exs` the Poison library to parse JSON: @@ -160,7 +166,7 @@ And assuming you use `ecto` you could put in `config/config.exs`: ```elixir relationships = Poison.decode!(Base.decode64!(System.get_env("PLATFORM_RELATIONSHIPS"))) -[postgresql_config | _tail] = relationships["postgresdatabase"] +[postgresql_config | _tail] = relationships["postgresql"] config :my_app, Repo, database: postgresql_config["path"], diff --git a/sites/upsun/src/languages/java/migration.md b/sites/upsun/src/languages/java/migration.md index 0afa4372d7..71456b5c92 100644 --- a/sites/upsun/src/languages/java/migration.md +++ b/sites/upsun/src/languages/java/migration.md @@ -143,9 +143,10 @@ Service credentials are available within the [service environment variables](/de +++ title= Service environment variables +++ +Assuming the relationship `postgresql` is configured to grant access to a PostgreSQL service container, you can map the automatically generated environment variable (`POSTGRESQL_HOST`) to whatever your application expects to use: ```bash {location=".environment"} -export DB_HOST=$DATABASE_HOST +export DB_HOST=$POSTGRESQL_HOST ``` This sets environment variables with the names your app needs, and the values from [service environment variables](/development/variables/_index.md#service-environment-variables). @@ -161,7 +162,7 @@ This variable is a base64-encoded JSON object with keys of the relationship name {{% vendor/name %}} supports the [`jq` tool](https://stedolan.github.io/jq/), which allows to extract information from this JSON. ```bash {location=".environment"} -export DB_HOST=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".database[0].host"` +export DB_HOST=`echo $PLATFORM_RELATIONSHIPS | base64 --decode | jq -r ".postgresql[0].host"` ``` This sets environment variables with names your app needs and the values from [`{{% vendor/prefix %}}_RELATIONSHIPS` environment variable](/development/variables/use-variables.md#use-provided-variables). @@ -186,7 +187,7 @@ you have the option to move the variable environment to another file: a [`.envir You can obtain relationship information through the [service environment variables](/development/variables/_index.md#service-environment-variables) themselves, or through the [`{{% vendor/prefix %}}_RELATIONSHIPS` environment variable](/development/variables/use-variables.md#use-provided-variables). -Say your application has a relationship named ``database`` to a database service named `mariadb`: +Say your application has a relationship named ``postgresql`` to a database service named `postgresql`: {{< codetabs >}} +++ @@ -194,10 +195,10 @@ title= Service environment variables +++ ```bash {location=".environment"} -export DB_HOST=${DATABASE_HOST} -export DB_PASSWORD=${DATABASE_PASSWORD} -export DB_USER=${DATABASE_USERNAME} -export DB_DATABASE=${DATABASE_PATH} +export DB_HOST=${POSTGRESQL_HOST} +export DB_PASSWORD=${POSTGRESQL_PASSWORD} +export DB_USER=${POSTGRESQL_USERNAME} +export DB_DATABASE=${POSTGRESQL_PATH} export JDBC=jdbc:postgresql://${HOST}/${DATABASE} export JAVA_MEMORY=-Xmx$(jq .info.limits.memory /run/config.json)m export JAVA_OPTS="$JAVA_MEMORY -XX:+ExitOnOutOfMemoryError" @@ -216,10 +217,10 @@ This `{{% vendor/prefix %}}_RELATIONSHIPS` variable is a base64-encoded JSON obj {{% vendor/name %}} supports the [`jq` tool](https://stedolan.github.io/jq/), which allows to extract information from this JSON. ```bash {location=".environment"} -export DB_HOST=`echo ${{% vendor/prefix %}}_RELATIONSHIPS | base64 --decode | jq -r ".database[0].host"` -export DB_PASSWORD=`echo ${{% vendor/prefix %}}_RELATIONSHIPS | base64 --decode | jq -r ".database[0].password"` -export DB_USER=`echo ${{% vendor/prefix %}}_RELATIONSHIPS | base64 --decode | jq -r ".database[0].username"` -export DB_DATABASE=`echo ${{% vendor/prefix %}}_RELATIONSHIPS | base64 --decode | jq -r ".database[0].path"` +export DB_HOST=`echo ${{% vendor/prefix %}}_RELATIONSHIPS | base64 --decode | jq -r ".postgresql[0].host"` +export DB_PASSWORD=`echo ${{% vendor/prefix %}}_RELATIONSHIPS | base64 --decode | jq -r ".postgresql[0].password"` +export DB_USER=`echo ${{% vendor/prefix %}}_RELATIONSHIPS | base64 --decode | jq -r ".postgresql[0].username"` +export DB_DATABASE=`echo ${{% vendor/prefix %}}_RELATIONSHIPS | base64 --decode | jq -r ".postgresql[0].path"` export JDBC=jdbc:postgresql://${HOST}/${DATABASE} export JAVA_MEMORY=-Xmx$(jq .info.limits.memory /run/config.json)m export JAVA_OPTS="$JAVA_MEMORY -XX:+ExitOnOutOfMemoryError" @@ -241,7 +242,7 @@ applications: hooks: build: ./mvnw package -DskipTests -Dquarkus.package.uber-jar=true relationships: - database: "db:postgresql" + postgresql: web: commands: start: java -jar $JAVA_OPTS $CREDENTIAL -Dquarkus.http.port=$PORT jarfile.jar diff --git a/sites/upsun/src/languages/lisp.md b/sites/upsun/src/languages/lisp.md index 8305b5586e..9a573e58a3 100644 --- a/sites/upsun/src/languages/lisp.md +++ b/sites/upsun/src/languages/lisp.md @@ -141,7 +141,7 @@ applications: app: type: 'lisp:{{% latest "lisp" %}}' relationships: - pg: postgresql:postgresql + postgresql: ``` The following would access that relationship, and provide your Lisp program the credentials to connect to a PostgreSQL instance. Add this to your `.asd` file: @@ -156,7 +156,7 @@ Then in your program you could access the PostgreSQL instance as follows: (defvar *pg-spec* nil) (defun setup-postgresql () - (let* ((pg-relationship (first (jsown:val (relationships) "pg"))) + (let* ((pg-relationship (first (jsown:val (relationships) "postgresql"))) (database (jsown:val pg-relationship "path")) (username (jsown:val pg-relationship "username")) (password (jsown:val pg-relationship "password")) diff --git a/sites/upsun/src/languages/ruby.md b/sites/upsun/src/languages/ruby.md index 32b2873bea..b77591d62b 100644 --- a/sites/upsun/src/languages/ruby.md +++ b/sites/upsun/src/languages/ruby.md @@ -235,6 +235,7 @@ routes: Here is a complete `{{< vendor/configfile "app" >}}` file: ```yaml {configFile="app"} +# The name of the app, which must be unique within a project. applications: app: type: 'ruby:{{% latest "ruby" %}}' @@ -244,7 +245,7 @@ applications: yarn: "*" relationships: - database: "database:mysql" + mysql: variables: env: @@ -351,7 +352,7 @@ routes: ... services: - database: + mysql: type: mysql:{{% latest "mariadb" %}} ``` ## Connecting to services @@ -363,14 +364,14 @@ applications: app: type: 'ruby:{{% latest "ruby" %}}' relationships: - database: "database:mysql" + mysql: ... routes: ... services: - database: + mysql: type: mysql:{{% latest "mariadb" %}} ``` By using the following Ruby function calls, you can obtain the database details. @@ -385,7 +386,7 @@ This should give you something like the following: ```json { - "database" : [ + "mysql" : [ { "path" : "main", "query" : { @@ -394,7 +395,7 @@ This should give you something like the following: "port" : 3306, "username" : "user", "password" : "", - "host" : "database.internal", + "host" : "mysql.internal", "ip" : "246.0.241.50", "scheme" : "mysql" } diff --git a/sites/upsun/src/learn/tutorials/restrict-service-access.md b/sites/upsun/src/learn/tutorials/restrict-service-access.md index 5f915fbffe..feb20edbbb 100644 --- a/sites/upsun/src/learn/tutorials/restrict-service-access.md +++ b/sites/upsun/src/learn/tutorials/restrict-service-access.md @@ -47,9 +47,14 @@ Edit your app configuration and add new relationships to your new endpoints: ```yaml {configFile="app"} applications: myapp: + [...] relationships: - database: maindb:website - reports: maindb:reporting + database: + service: maindb + endpoint: website + reports: + service: maindb + endpoint: reporting ``` ## 3. Create a worker with access to the read-only endpoint @@ -70,7 +75,9 @@ applications: start: | sleep infinity relationships: - reports: maindb:reporting + reports: + service: maindb + endpoint: reporting access: ssh: viewer ``` diff --git a/themes/psh-docs/layouts/partials/examples/relationship.html b/themes/psh-docs/layouts/partials/examples/relationship.html index 6f26e7785b..3bf890a41b 100644 --- a/themes/psh-docs/layouts/partials/examples/relationship.html +++ b/themes/psh-docs/layouts/partials/examples/relationship.html @@ -2,26 +2,35 @@ Note: This will only replace the endpoint and service type for demonstration purposes. To use this partial, pass the image data as the context (Ex: partial "examples/relationship" $data) --> -{{- $apiIndent := " " -}} -{{- $versionPrefix := "" -}} -{{- $relationshipName := "" -}} -{{- if ( .relName ) -}} - {{- $relationshipName = .relName -}} -{{- end -}} -{{- $serviceName := "" -}} -{{- if ( .servName ) -}} - {{- $serviceName = .servName -}} -{{- end -}} -{{ $relationshipComment := "# Relationships enable access from this app to a given service." }} - -{{- $l1 := printf "\n%s\nrelationships:" $relationshipComment}} - -{{- $endpoint := index .data "endpoint" -}} - -{{- if eq (index .data "type") "vault-kms" -}} - {{- $endpoint = "" -}} -{{- end -}} - -{{- $l2 := printf "%s%s: \"%s:%s\"" $apiIndent $relationshipName $serviceName $endpoint -}} - -{{- printf "%s\n%s" $l1 $l2 | safeHTML -}} + {{- $apiIndent := " " -}} + {{- $versionPrefix := "" -}} + {{- $relationshipName := "" -}} + {{- if ( .relName ) -}} + {{- $relationshipName = .relName -}} + {{- end -}} + {{- $serviceName := "" -}} + {{- if ( .servName ) -}} + {{- $serviceName = .servName -}} + {{- end -}} + {{ $relationshipComment := "# Relationships enable access from this app to a given service." }} + {{ $relationshipComment = printf "%s\n# The example below shows simplified configuration leveraging a default service" $relationshipComment}} + {{ $relationshipComment = printf "%s\n# (identified from the relationship name) and a default endpoint." $relationshipComment}} + {{ $relationshipComment = printf "%s\n# See the Application reference for all options for defining relationships and endpoints." $relationshipComment}} + + {{- $l1 := printf "%s\nrelationships:" $relationshipComment}} + + {{- $endpoint := index .data "endpoint" -}} + + {{- if eq (index .data "type") "vault-kms" -}} + {{- $endpoint = "" -}} + {{- end -}} + + {{- $l2 := printf "%s%s:\n service: %s\n endpoint: %s" $apiIndent $relationshipName $serviceName $endpoint -}} + {{- $l2_updated := printf "%s%s: " $apiIndent $serviceName -}} + + {{- if eq (index .data "type") "vault-kms" -}} + {{- printf "%s\n%s" $l1 $l2 | safeHTML -}} + {{- else -}} + {{- printf "%s\n%s" $l1 $l2_updated | safeHTML | chomp -}} + {{- end -}} + \ No newline at end of file diff --git a/themes/psh-docs/layouts/partials/examples/servicedefn.html b/themes/psh-docs/layouts/partials/examples/servicedefn.html index b7df39e9e5..bd430bc116 100644 --- a/themes/psh-docs/layouts/partials/examples/servicedefn.html +++ b/themes/psh-docs/layouts/partials/examples/servicedefn.html @@ -19,7 +19,12 @@ {{- $relName = .relName -}} {{- end -}} -{{- $l2 := printf "%s type: %s:%s" $apiIndent (index .data "type") $serviceVersion -}} +{{- $useType := index .data "type" -}} +{{- if ne .type (index .data "type") -}} + {{- $useType = .type -}} +{{- end -}} + +{{- $l2 := printf "%s type: %s:%s" $apiIndent $useType $serviceVersion -}} {{- $l3 := "" -}} {{- if (index .data "disk") -}} {{- if eq $docVersion 1 -}} @@ -44,4 +49,4 @@ {{- end -}} -{{ printf "%s\n%s%s%s%s" $l1 $l2 $l3 $l4 $l5 | safeHTML }} +{{ printf "%s%s%s%s%s" $l1 $l2 $l3 $l4 $l5 | safeHTML }} diff --git a/themes/psh-docs/layouts/partials/snippet.html b/themes/psh-docs/layouts/partials/snippet.html index 56229f7a31..90fe56a56d 100644 --- a/themes/psh-docs/layouts/partials/snippet.html +++ b/themes/psh-docs/layouts/partials/snippet.html @@ -67,14 +67,33 @@ {{- $prepend = printf "%s\n %s\n source:\n root: \"%s\"" $prepend $rootComment $root -}} {{- end -}} + {{- $indent := " " }} + {{- $indentCount := 0 }} {{- range split (trim .Inner "\n") "\n" -}} - {{- $content = printf "%s\n %s" $content . -}} + {{- if ne (len .) 1 -}} + {{- if eq $indentCount 1 -}} + {{- $indent = " " -}} + {{- end -}} + {{- $content = printf "%s\n%s%s" $content $indent . -}} + {{- $indentCount = 1 -}} + {{- end -}} {{- end -}} {{- end -}} {{- else -}} {{- if eq $placeholder "false" -}} - {{- $content = .Inner -}} + {{- $indent := "" }} + {{- $indentCount := 0 }} + {{- range split (trim .Inner "\n") "\n" -}} + {{- if ne (len .) 1 -}} + {{- if eq $indentCount 1 -}} + {{- $content = printf "%s\n%s%s" $content $indent . -}} + {{- else -}} + {{- $content = printf "%s\n%s%s" $content $indent (trim . " ") -}} + {{- end -}} + {{- $indentCount = 1 -}} + {{- end -}} + {{- end -}} {{- end -}} {{- end -}} diff --git a/themes/psh-docs/layouts/shortcodes/endpoint-description.md b/themes/psh-docs/layouts/shortcodes/endpoint-description.md index b3e896659d..0989ee8030 100644 --- a/themes/psh-docs/layouts/shortcodes/endpoint-description.md +++ b/themes/psh-docs/layouts/shortcodes/endpoint-description.md @@ -13,6 +13,9 @@ {{ $data := index .Site.Data.registry ( $type ) }} +{{ if eq $type "redis-persistent" }} + {{ $data = index .Site.Data.registry "redis" }} +{{ end }} {{ $headerLevel }} 1. Configure the service @@ -26,7 +29,7 @@ To define the service, use {{ if eq ($type) "mariadb" }} the `{{ $type }}` type{{ end }}: -{{ $serviceInner := partial "examples/servicedefn" (dict "context" . "data" $data "docVersion" $docVersion) }} +{{ $serviceInner := partial "examples/servicedefn" (dict "context" . "data" $data "docVersion" $docVersion "type" $type) }} ```yaml {configFile="services"} @@ -34,13 +37,8 @@ To define the service, use {{ if eq ($type) "mariadb" }} ``` {{ if eq $type "redis-persistent" }} -Note that persistent Redis requires disk space to store data. -For more information, refer to the [dedicated Redis page](/add-services/redis.md). - -If want to use ephemeral Redis instead, use the `redis` type: - - {{ $redis_data := index .Site.Data.registry "redis" }} - {{ partial "examples/servicedefn" (dict "context" . "data" $redis_data "docVersion" $docVersion ) }} +Persistent Redis requires disk space to store data. +If you want to use ephemeral Redis instead, [use the `redis` type](/add-services/redis.md#ephemeral-redis). {{ else if eq $type "network-storage" }} `` must be [RFC 1123](https://tools.ietf.org/html/rfc1123) compliant, and as such it must: @@ -68,27 +66,32 @@ Back up your data before changing the service. {{ $headerLevel }} 2. Add the relationship +To define the relationship, use the following configuration: + {{ if ne $type "network-storage" }} - - -To define the relationship, use the {{ if eq $type "vault-kms" }}endpoint you [defined -in step 1](#1-configure-the-service){{ else }}`{{ $data.endpoint }}` endpoint{{ end }} -{{ if and (gt (len ( $sectionLink )) 0) (gt (len ( $multipleText )) 0) }} (unless you have [multiple {{$multipleText}}]({{ $sectionLink }})){{ end }}: -{{ $serviceInner := partial "examples/servicedefn" (dict "context" . "data" $data "docVersion" $docVersion ) }} +{{ $serviceInner := partial "examples/servicedefn" (dict "context" . "data" $data "docVersion" $docVersion "type" $type) }} {{ $relationshipInner := partial "examples/relationship" (dict "context" . "data" $data ) }} ```yaml {configFile="app"} {{ partial "snippet" (dict "context" . "name" "" "config" "app" "root" "false" "Inner" $relationshipInner ) }} - {{ partial "snippet" (dict "context" . "name" "" "config" "service" "placeholder" "true" "Inner" $serviceInner ) }} ``` -You can define `` and `` as you like, but it's best if they're distinct. -With this definition, the application container {{ if eq $docVersion 2 }}(``) {{ end }} +You can define `` as you like, so long as it's unique between all defined services +and matches in both the application and services configuration. + +The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. +That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) +(the network address a service is accessible from) that is identical to the _name_ of that service. + +Depending on your needs, instead of default endpoint configuration, +you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). + +With the above definition, the application container {{ if eq $docVersion 2 }}(``) {{ end }} {{- if ne (.Get "noApp" ) true -}} now has [access to the service](#use-in-app) via the relationship `` and its corresponding {{ if eq $docVersion 2 }}[service environment variables](/development/variables/_index.md#service-environment-variables){{ else }}[`PLATFORM_RELATIONSHIPS` environment variable](/development/variables/use-variables.md#use-provided-variables){{ end }}. {{- else -}} @@ -151,9 +154,7 @@ If you split the service into multiple endpoints, define multiple relationships. {{ else }} -Add the service to your app configuration: - -{{$inner := "\nmounts:\n '':\n source: service\n" }} +{{$inner := "\nmounts:\n '':\n source: service\n" }} {{ $inner = printf "%s service: \n source_path: " $inner }} ```yaml {configFile="app"} @@ -172,17 +173,14 @@ Add the service to your app configuration: {{ end }} {{ end }} - -{{ $skip_heading := slice "mariadb" "redis"}} + +{{ $skip_heading := slice "mariadb" }} {{ if not (in $skip_heading $type) }} {{ $headerLevel }} Example Configuration {{ end }} {{ if eq $type "mariadb" }} ### MariaDB example - -{{ else if eq $type "redis" }} -### Ephemeral example {{ end }} {{ $appName := "myapp" }} @@ -196,7 +194,7 @@ Add the service to your app configuration: {{ $serviceName := index $data "docs" "service_name" }} {{ $serviceInner := "" }} {{ if eq $type "varnish" }} - {{ $serviceInner = partial "examples/servicedefn" (dict "context" . "data" $data "latest" "true" "relName" "application" "appName" $appName "docVersion" $docVersion ) }} + {{ $serviceInner = partial "examples/servicedefn" (dict "context" . "data" $data "latest" "true" "relName" "application" "appName" $appName "docVersion" $docVersion "type" $type ) }} {{ else if eq $type "vault-kms" }} {{ $latest := partial "examples/latest" (dict "data" $data )}} {{ if eq $docVersion 2 }} @@ -215,7 +213,7 @@ Add the service to your app configuration: {{ $serviceInner = printf "%s\n key: vault-sign" $serviceInner }} {{ $serviceInner = printf "%s\n type: sign" $serviceInner }} {{ else }} - {{ $serviceInner = partial "examples/servicedefn" (dict "context" . "data" $data "latest" "true" "docVersion" $docVersion ) }} + {{ $serviceInner = partial "examples/servicedefn" (dict "context" . "data" $data "latest" "true" "docVersion" $docVersion "type" $type ) }} {{ end }} {{ if eq $docVersion 1 }} @@ -292,7 +290,7 @@ Notice the `relationship` (`{{ $varnishRelName }}`) defined for the service `{{ {{ $serviceInner = printf "%s\n key: signing-key" $serviceInner }} {{ $serviceInner = printf "%s\n type: sign" $serviceInner }} -{{ $appInner = "\nrelationships:\n vault_manage: \"vault-kms:management\"\n vault_sign: \"vault-kms:sign_and_verify\"" }} +{{ $appInner = "\nrelationships:\n vault_manage:\n service: vault-kms\n endpoint: management\n vault_sign:\n service: vault-kms\n endpoint: sign_and_verify" }} {{ if eq $docVersion 1 }} #### [Service definition](/add-services) @@ -322,41 +320,10 @@ If you're using a [premium version](add-services/elasticsearch.md#supported-vers use the `elasticsearch-enterprise` type in the service definition. {{ end }} -[//]: # (@todo update the example) -{{ if eq $type "redis" }} -### Persistent example - -{{ $serviceName := "data" }} -{{ $serviceInner := "\n type: redis-persistent:7.0\n disk: 256" }} - -{{ if eq $docVersion 1 }} -#### [Service definition](/add-services) -```yaml {configFile="services"} -{{ partial "snippet" (dict "context" . "name" $serviceName "config" "service" "Inner" $serviceInner ) }} -``` -{{ end }} - -{{$appInner := "relationships:\n redisdata: \"data:redis\"" }} - -{{ if eq $docVersion 2 }} -#### [App](/create-apps) and [Service configuration](/add-services) -{{ else }} - -#### [App configuration](/create-apps) -{{ end }} - -```yaml {configFile="app"} -{{ partial "snippet" (dict "context" . "name" $appName "config" "app" "root" "false" "Inner" $appInner ) }} - -{{ partial "snippet" (dict "context" . "name" $serviceName "config" "service" "placeholder" "true" "Inner" $serviceInner ) }} -``` - -{{ end }} - {{ if eq $type "mariadb" }} ### OracleMySQL example -{{ $serviceName := "oracle-mysql" }} +{{ $serviceName := "oraclemysql" }} {{ $serviceInner := "\n type: oracle-mysql:8.0" }} {{ if eq $docVersion 1 }} @@ -367,7 +334,7 @@ use the `elasticsearch-enterprise` type in the service definition. ``` {{ end }} -{{$appInner := "relationships:\n oracledatabase: \"oracle-mysql:mysql\"" }} +{{$appInner := "relationships:\n oraclemysql: " }} {{ if eq $docVersion 2 }} #### [App](/create-apps) and [Service configuration](/add-services) @@ -395,4 +362,3 @@ add a configuration file similar to the following to your project. {{ end }} {{ end }} - diff --git a/themes/psh-docs/layouts/shortcodes/v2connect2app.md b/themes/psh-docs/layouts/shortcodes/v2connect2app.md index 9ff1c4911e..7b8bd3d063 100644 --- a/themes/psh-docs/layouts/shortcodes/v2connect2app.md +++ b/themes/psh-docs/layouts/shortcodes/v2connect2app.md @@ -3,7 +3,9 @@ {{ $relationship := .Get "relationship" }} {{ $var := .Get "var" }} -This configuration defines a single application `myapp`, whose source code exists in the directory `/myapp`, and has been provided access to the service (`{{ $serviceName }}`) via the relationship `{{ $relationship }}`. +This configuration defines a single application (`myapp`), whose source code exists in the `/myapp` directory.
+`myapp` has access to the `{{ $serviceName }}` service, via a relationship whose name is [identical to the service name](#2-add-the-relationship) +(as per [default endpoint](/create-apps/app-reference#relationships) configuration for relationships). {{ if eq .Site.Params.vendor.config.version 1 }} From this, `myapp` can retrieve access credentials to the service through the environment variable [`{{ .Site.Params.vendor.env_prefix }}_RELATIONSHIPS`](#relationship-reference). From 02733b0d4f782e6839bd53b08b5332711a17de1a Mon Sep 17 00:00:00 2001 From: Chad Carlson Date: Tue, 2 Apr 2024 09:46:40 -0400 Subject: [PATCH 19/24] [Next.js] Getting started guide (#3903) * Reinstate Next.js GS guide. * Doc review --------- Co-authored-by: Anouck Colson --- sites/upsun/src/get-started/stacks/nextjs.md | 336 ++++++++++++++++++- 1 file changed, 321 insertions(+), 15 deletions(-) diff --git a/sites/upsun/src/get-started/stacks/nextjs.md b/sites/upsun/src/get-started/stacks/nextjs.md index e4420c918a..877144b1c4 100644 --- a/sites/upsun/src/get-started/stacks/nextjs.md +++ b/sites/upsun/src/get-started/stacks/nextjs.md @@ -1,39 +1,345 @@ --- title: Deploying Next.js on Upsun sidebarTitle: Next.js -weight: -95 +weight: -97 +layout: single description: | - Welcome to the Upsun documentation specific to the Next.js framework on Upsun. - It includes common reference materials useful for deploying Next.js, but also external community and blog resources that cover more advanced topics relevant for the framework. + Complete the last required steps to successfully deploy Next.js on {{% vendor/name %}}. --- -{{< note title="Hello, there!" theme="info" >}} +{{< note title="Note" theme="info" >}} -{{% description %}} +Before you start, check out the [{{% vendor/name %}} demo app](https://console.upsun.com/projects/create-project) and the main [Getting started guide](/get-started/here/_index.md). +They provide all of the core concepts and common commands you need to know before using the materials below. -Before you proceed, be sure to checkout the [{{% vendor/name %}} demo app](https://console.upsun.com/projects/create-project) and the main [Getting started guide](/get-started/here/_index.md). These two resources provide all of the core concepts and common commands you'll need to know before using the materials below. +{{< /note >}} + +{{% guides/requirements name="Next.js" %}} + +## 1. Create a Next.js app + +To create your Next.js app, follow these steps. + +1. Follow the Next.js [installation guide](https://nextjs.org/docs/getting-started/installation). + To fast track the process, run the following commands: + + ```bash {location="Terminal"} + npx create-next-app@latest + ``` + +2. To initialize the local Git repository and commit local files, run the following commands: + + ```bash {location="Terminal"} + cd my-app + git init + git add . + git commit -m "Init Next.js application." + ``` + +{{< note theme="info" >}} +You can view the running app locally by running `npm run dev`. +{{< /note >}} + +## 2. Create a new project + +To create a project on {{% vendor/name %}}, +follow these steps. + +{{< note title="Remember" >}} +After creating your {{% vendor/name %}} project, copy your new **project ID** for later use. +{{< /note >}} + +{{< codetabs >}} ++++ +title=Using the CLI ++++ +To create a new project with the {{% vendor/name %}} CLI, use the following command and follow the prompts: + +```bash {location="Terminal"} +{{% vendor/cli %}} project:create +``` + +{{< note >}} + +When creating a new project using the {{% vendor/name %}} CLI command `project:create`, +you are asked if you want to set the local remote to your new project. Enter **Yes (y)**. + +Your local source code is automatically linked to your newly created {{% vendor/name %}} project +through the creation of a `.{{% vendor/cli %}}/local/project.yaml`. +This file contains the corresponding `` for the {{% vendor/name %}} CLI to use, +and sets a Git remote to `{{% vendor/cli %}}`. + +{{< /note >}} + +<---> ++++ +title=Using the Console ++++ + +1. Create an organization or select an existing one. +2. Click **Create from scratch**. + +3. Fill in details like the project name and [region](/development/regions.md). + + {{% note %}} + + You can define resources for your project later on, after your first push. + + {{% /note %}} + +4. To link your local source code to your new {{% vendor/name %}} project, + run the following command: + + ```bash {location="Terminal"} + {{% vendor/cli %}} project:set-remote + ``` + + This command adds a new remote called `{{% vendor/cli %}}` to your local Git repository, + which is equivalent to the following commands: + + ```bash {location="Terminal"} + git remote + origin + {{% vendor/cli %}} + ``` + + It also creates a new `.{{% vendor/cli %}}/local/project.yaml` file that contains the `` + for the `{{% vendor/cli %}}` CLI to use. + + {{< note theme="info" title="Tip" >}} + + If you forget your ``, run the following command and find your project in the list: + + ```bash {location="Terminal"} + {{% vendor/cli %}} project:list + ``` + {{< /note >}} + +{{< /codetabs >}} + +## 3. Choose your Git workflow + +You can use {{% vendor/name %}} projects as a classic Git repository, +where you are able to push your source code in different ways, +using either the Git CLI or the {{% vendor/name %}} CLI. +You can choose which way —or Git workflow— you want to use for your project from the following options: + +- Your project source code is **hosted on a {{% vendor/name %}} Git repository** +- Your project source code is **hosted on your own GitHub repository** + +{{< codetabs >}} ++++ +title={{% vendor/name %}} Git repository ++++ +For the rest of this guide, you will use the normal Git workflow (`git add . && git commit -m "message" && git push {{% vendor/cli %}}`) to commit your source code changes to Git history. +You will also use the {{% vendor/name %}} CLI to deploy your [{{% vendor/name %}} environment](/environments.html) with the latest code updates. + +<---> ++++ +title=GitHub repository ++++ +{{% vendor/name %}} provides a [Github integration](integrations/source/github.md) that allows your {{% vendor/name %}} project to be fully integrated with your Github repository. +This enables you, as a developer, to use a normal Git workflow (`git add . && git commit -m "message" && git push`) to deploy your environment—with no need to connect to the {{% vendor/name %}} Console. + +{{< note >}} +Make sure you complete the following steps before adding a [Github integration](integrations/source/github.md): + +1. Create a Git repository in your own organization following the relevant + [Github repository creation guide](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-new-repository). + +2. Create a [Github integration](integrations/source/github.md). + +3. Add a Git remote to your local project, from the root of your Next.js directory.
+ To do so, run the following commands: + + ```bash {location="Terminal"} + git remote add origin + git add . && git commit -m "init next.js" + git push origin + ``` {{< /note >}} -## Getting started +{{< /codetabs >}} + +## 4. Configure your project -- [Upsun demo application](https://console.upsun.com/projects/create-project) -- [Upsun Getting started guide](/get-started/here/_index.md) -- [What is Upsun?](/learn/overview) +To host your Next.js application on {{% vendor/name %}}, +you need to have a few YAML configuration files at the root of your project. +These files manage your app's behavior. +They are located in a `.{{% vendor/cli %}}/` folder at the root of your source code +and structured in a similar way to this: -## Documentation +```txt +my-express-app +├── .{{% vendor/cli %}} +│ └── config.yaml +├── [.environment] +└── +``` + +To generate these files, run the following command at the root of your project: + +``` {location="Terminal"} +{{% vendor/cli %}} project:init +``` + +Follow the prompts. + +To commit your new files, run the following commands: + +```bash {location="Terminal"} +git add . +git commit -m "Add {{% vendor/name %}} config files" +``` + +## 5. Deploy + +And just like that, it’s time to deploy! + +Depending on the Git workflow you chose at the beginning of this tutorial, +there are two ways to deploy your source code changes. + +{{< codetabs >}} + ++++ +title=Using {{% vendor/name %}} Git repository ++++ + +You can push your code using the normal Git workflow (`git add . && git commit -m "message" && git push`). +This pushes your source code changes to your `{{% vendor/cli %}}` remote repository. +Alternatively, you can use the following {{% vendor/name %}} CLI command: + +```bash {location="Terminal"} +{{% vendor/cli %}} push +``` + +<---> ++++ +title=Using third-party Git repository ++++ + +When you choose to use a third-party Git hosting service, the {{< vendor/name >}} Git +repository becomes a read-only mirror of the third-party repository. All your +changes take place in the third-party repository. + +Add an integration to your existing third-party repository: + +- [BitBucket](/integrations/source/bitbucket.md) +- [GitHub](/integrations/source/github.md) +- [GitLab](/integrations/source/gitlab.md) + +If you are using an integration, on each code updates, +use the normal Git workflow (`git add . && git commit -m "message" && git push`) to push your code to your external repository. +To do so, run the following command: + +```bash {location="Terminal"} +git push origin +``` + +Your GitHub, GitLab, or Bibucket integration process then automatically deploys changes to your environment. +If you're pushing a new Git branch, a new environment is created. + +{{< /codetabs >}} + +{{% vendor/name %}} then reads your configuration files, +and deploys your project using [default container resources](/manage-resources/resource-init.md). +If you don't want to use those default resources, +define your own [resource initialization strategy](/manage-resources/resource-init.md#define-a-resource-initialization-strategy), +or [amend those default container resources](/manage-resources/adjust-resources.md) after your project is deployed. + +Et voilà, your Next.js application is live! + +{{< note title="Tip" theme="info" >}} + +Each environment has its own domain name. +To open the URL of your new environment, run the following command: + + ```bash {location="Terminal"} + {{% vendor/cli %}} environment:url --primary + ``` +{{< /note >}} + +## 6. Make changes to your project + +Now that your project is deployed, you can start making changes to it. +For example, you might want to fix a bug or add a new feature. + +In your project, the `main` branch always represents the production environment. +Other branches are for developing new features, fixing bugs, or updating the infrastructure. + +To make changes to your project, follow these steps: + +1. Create a new environment (a Git branch) to make changes without impacting production: + + ```bash {location="Terminal"} + {{% vendor/cli %}} branch feat-a + ``` + + This command creates a new local `feat-a` Git branch based on the main Git branch, + and activates a related environment on {{< vendor/name >}}. + The new environment inherits the data (service data and assets) of its parent environment (the production environment here). + +2. Make changes to your project. + For example, edit the `views/index.jade` file and make the following changes: + + ```diff + diff --git a/views/index.jade b/views/index.jade + index 3d63b9a..77aee43 100644 + --- a/views/index.jade + +++ b/views/index.jade + @@ -2,4 +2,4 @@ extends layout + + block content + h1= title + - p Welcome to #{title} + + p Welcome to #{title} on Upsun + `` + +3. Commit your changes: + + ```bash {location="Terminal"} + git add views/index.jade + git commit -m "Update index page view." + ``` + +4. Deploy your changes to the `feat-a` environment: + + ```bash {location="Terminal"} + {{% vendor/cli %}} push + ``` + +5. Iterate by changing the code, committing, and deploying. + When satisfied with your changes, merge them to the main branch, + and remove the feature branch: + + ```bash {location="Terminal"} + {{% vendor/cli %}} merge + Are you sure you want to merge feat-a into its parent, main? [Y/n] y + {{% vendor/cli %}} checkout main + git pull {{% vendor/cli %}} main + {{% vendor/cli %}} environment:delete feat-a + git fetch --prune + ``` + + Note that deploying to production is fast because the image built for the `feat-a` environment is reused. + + For a long running branch, to keep the code up-to-date with the main branch, use `git merge main` or `git rebase main`. + You can also keep the data in sync with the production environment by using `{{% vendor/cli %}} env:sync`. + +## Further resources + +### Documentation - [JavaScript/Node.js documentation](/languages/nodejs/) - [Managing dependencies](/languages/nodejs#dependencies) -## Community content +### Community content - [Next.js topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=nextjs) - [Node.js topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=node) - [JavaScript topics](https://support.platform.sh/hc/en-us/search?utf8=%E2%9C%93&query=js) -## Blogs +### Blogs - [A quick-start guide on hosting Next.js on Upsun](https://upsun.com/blog/setting-up-next-js-on-upsun/) - - From 50577de8ff72228e7c1c1cfc6bc6204b41af5d90 Mon Sep 17 00:00:00 2001 From: flovntp Date: Tue, 2 Apr 2024 16:42:49 +0200 Subject: [PATCH 20/24] Composable image (#3879) * first draft for composable image on Upsun side (only for now) * report changes to platform folder * some improvement on Upsun composable image * adding multiple runtimes note + NixOs presentation draft * adding note at the beginning of PHP doc page (draft) * adding disclaimer on languages and align P.sh with Upsun composable * removing top level key from Upsun + reformat code + adding TODO block in the HTML * Apply doc review and suggestions from Jerome * missing replacement of built-in image * split codetab for PHP ext and Python to separate section * remaining built-in image * remaining built-in image * Move PHP-specific content and redorder side nav * Remove extra space * PHP extensions update * Update PSH composable image page * Update PSH section index page * Reorder side nav for PSH * Fix numbering * Further review suggestions applied * Fix links. Remove duplicated file on conflict resolution. * Add redirect notes where relevant (for type and extensions). * Add the sticky note option, even though its not yet enabled. * Fix failing 'Check internal links' for platform docs. * Match fixed links on upsun docs. * Fix note. * Fix platform config from using upsun config. * Fix platform file name. * socket_family/protocol for primary runtimes * Update example configuration for PHP runtime config. * Fix links post-merge. * Link checks on builds. * Fix side nav --------- Co-authored-by: Anouck Colson Co-authored-by: chadcarlson --- sites/platform/src/add-services/_index.md | 13 +- .../src/add-services/network-storage.md | 4 +- sites/platform/src/add-services/redis.md | 8 +- sites/platform/src/add-services/varnish.md | 6 +- .../platform/src/administration/cli/_index.md | 4 +- sites/platform/src/administration/users.md | 8 +- .../web/configure-environment.md | 4 +- sites/platform/src/create-apps/_index.md | 10 +- .../src/create-apps/app-reference/_index.md | 32 + .../app-reference/composable-image.md | 1137 ++++++++++++++ .../single-runtime-image.md} | 254 +-- .../platform/src/create-apps/hooks/_index.md | 8 +- .../hooks/hooks-and-dependencies.md | 2 +- .../src/create-apps/hooks/hooks-comparison.md | 14 +- .../multi-app/project-structure.md | 2 +- .../src/create-apps/multi-app/routes.md | 2 +- .../src/create-apps/runtime-operations.md | 6 +- .../src/create-apps/source-operations.md | 4 +- sites/platform/src/create-apps/timezone.md | 2 +- .../src/create-apps/troubleshoot-disks.md | 2 +- .../src/create-apps/troubleshoot-mounts.md | 2 +- sites/platform/src/create-apps/upgrading.md | 6 +- sites/platform/src/create-apps/web/_index.md | 2 +- .../src/create-apps/web/custom-headers.md | 4 +- .../platform/src/create-apps/web/php-basic.md | 2 +- .../src/create-apps/web/rewrite-requests.md | 2 +- .../web/serve-different-directories.md | 2 +- sites/platform/src/create-apps/web/static.md | 8 +- sites/platform/src/create-apps/workers.md | 10 +- .../src/dedicated-gen-2/overview/grid.md | 6 +- sites/platform/src/define-routes/_index.md | 4 +- sites/platform/src/define-routes/cache.md | 4 +- .../platform/src/development/file-transfer.md | 8 +- .../platform/src/development/local/docksal.md | 2 +- .../src/development/sanitize-db/postgresql.md | 2 +- sites/platform/src/development/ssh/_index.md | 4 +- sites/platform/src/development/submodules.md | 4 +- .../platform/src/development/troubleshoot.md | 14 +- .../development/variables/set-variables.md | 10 +- .../development/variables/use-variables.md | 8 +- .../src/domains/cdn/managed-fastly.md | 10 +- sites/platform/src/environments/backup.md | 4 +- .../platform/src/environments/scalability.md | 2 +- .../environments/search-engine-visibility.md | 2 +- .../src/guides/django/deploy/customize.md | 2 +- .../src/guides/django/deploy/deploy.md | 2 +- .../src/guides/drupal/deploy/customize.md | 2 +- sites/platform/src/guides/drupal/faq.md | 2 +- .../platform/src/guides/drupal/simplesaml.md | 2 +- .../src/guides/laravel/deploy/scheduling.md | 2 +- .../src/guides/micronaut/elasticsearch.md | 6 +- sites/platform/src/guides/micronaut/jpa.md | 4 +- .../src/guides/micronaut/micronaut-data.md | 4 +- .../platform/src/guides/micronaut/mongodb.md | 2 +- sites/platform/src/guides/micronaut/redis.md | 6 +- .../src/guides/quarkus/elasticsearch.md | 6 +- sites/platform/src/guides/quarkus/jpa.md | 6 +- sites/platform/src/guides/quarkus/mongodb.md | 6 +- sites/platform/src/guides/quarkus/panache.md | 6 +- sites/platform/src/guides/quarkus/redis.md | 6 +- .../src/guides/spring/elasticsearch.md | 6 +- sites/platform/src/guides/spring/jpa.md | 4 +- sites/platform/src/guides/spring/mongodb.md | 6 +- sites/platform/src/guides/spring/redis.md | 6 +- .../guides/symfony/environment-variables.md | 2 +- sites/platform/src/guides/symfony/workers.md | 2 +- .../src/guides/wordpress/deploy/configure.md | 4 +- .../src/guides/wordpress/deploy/next-steps.md | 12 +- sites/platform/src/guides/wordpress/redis.md | 4 +- .../logs/access-logs.md | 6 +- .../increase-observability/metrics/_index.md | 4 +- .../metrics/dedicated-generation-3.md | 6 +- .../increase-observability/metrics/grid.md | 10 +- .../src/integrations/activity/reference.md | 9 +- sites/platform/src/languages/dotnet.md | 2 +- sites/platform/src/languages/elixir.md | 6 +- sites/platform/src/languages/go.md | 2 + sites/platform/src/languages/java/_index.md | 2 + .../platform/src/languages/java/frameworks.md | 2 + .../platform/src/languages/java/migration.md | 10 +- sites/platform/src/languages/java/tuning.md | 2 + sites/platform/src/languages/lisp.md | 2 + sites/platform/src/languages/nodejs/_index.md | 6 +- sites/platform/src/languages/nodejs/debug.md | 2 + .../src/languages/nodejs/node-version.md | 6 +- sites/platform/src/languages/php/_index.md | 96 +- .../src/languages/php/composer-auth.md | 4 +- .../platform/src/languages/php/extensions.md | 8 +- sites/platform/src/languages/php/fpm.md | 6 +- sites/platform/src/languages/php/redis.md | 4 +- sites/platform/src/languages/php/swoole.md | 2 + .../src/languages/php/troubleshoot.md | 2 + sites/platform/src/languages/php/tuning.md | 8 +- sites/platform/src/languages/php/xdebug.md | 6 +- sites/platform/src/languages/python/_index.md | 4 +- .../src/languages/python/dependencies.md | 2 + .../src/languages/python/python-version.md | 2 + sites/platform/src/languages/python/server.md | 2 + sites/platform/src/languages/ruby.md | 4 +- sites/platform/src/languages/rust.md | 2 +- .../src/learn/bestpractices/oneormany.md | 2 +- .../src/learn/overview/yaml/yaml-structure.md | 6 +- .../platform/src/learn/tutorials/exporting.md | 2 +- .../platform/src/learn/tutorials/migrating.md | 6 +- .../src/projects/change-project-timezone.md | 2 +- .../security/web-application-firewall/waf.md | 6 +- .../static/images/nixos/nixos-packages.png | Bin 0 -> 208618 bytes .../nixos/nixossearch-upstream-value.png | Bin 0 -> 78077 bytes .../layouts/shortcodes/frameworks-landing.md | 4 +- sites/upsun/src/add-services/_index.md | 13 +- .../upsun/src/add-services/network-storage.md | 2 +- sites/upsun/src/add-services/redis.md | 8 +- sites/upsun/src/add-services/varnish.md | 6 +- sites/upsun/src/administration/cli/_index.md | 4 +- sites/upsun/src/administration/users.md | 8 +- .../web/configure-environment.md | 4 +- sites/upsun/src/create-apps/_index.md | 10 +- sites/upsun/src/create-apps/app-reference.md | 1373 ----------------- .../src/create-apps/app-reference/_index.md | 32 + .../app-reference/composable-image.md | 1286 +++++++++++++++ .../app-reference/single-runtime-image.md | 1246 +++++++++++++++ sites/upsun/src/create-apps/hooks/_index.md | 6 +- .../hooks/hooks-and-dependencies.md | 2 +- .../src/create-apps/hooks/hooks-comparison.md | 12 +- .../multi-app/project-structure.md | 2 +- .../upsun/src/create-apps/multi-app/routes.md | 2 +- .../src/create-apps/runtime-operations.md | 6 +- .../src/create-apps/source-operations.md | 4 +- sites/upsun/src/create-apps/timezone.md | 2 +- .../src/create-apps/troubleshoot-mounts.md | 2 +- sites/upsun/src/create-apps/web/_index.md | 2 +- .../src/create-apps/web/custom-headers.md | 4 +- sites/upsun/src/create-apps/web/php-basic.md | 2 +- .../src/create-apps/web/rewrite-requests.md | 2 +- .../web/serve-different-directories.md | 2 +- sites/upsun/src/create-apps/web/static.md | 8 +- sites/upsun/src/create-apps/workers.md | 18 +- sites/upsun/src/define-routes/_index.md | 6 +- sites/upsun/src/define-routes/cache.md | 4 +- sites/upsun/src/development/file-transfer.md | 8 +- .../src/development/sanitize-db/postgresql.md | 2 +- sites/upsun/src/development/ssh/_index.md | 4 +- sites/upsun/src/development/troubleshoot.md | 14 +- .../development/variables/set-variables.md | 10 +- .../development/variables/use-variables.md | 8 +- sites/upsun/src/environments/backup.md | 4 +- .../environments/search-engine-visibility.md | 2 +- .../stacks/laravel/environment-variables.md | 2 +- .../stacks/symfony/environment-variables.md | 2 +- .../upsun/src/get-started/stacks/wordpress.md | 4 +- .../logs/access-logs.md | 6 +- .../increase-observability/metrics/_index.md | 4 +- .../metrics/understand-metrics.md | 4 +- .../src/integrations/activity/reference.md | 9 +- sites/upsun/src/languages/dotnet.md | 4 +- sites/upsun/src/languages/elixir.md | 6 +- sites/upsun/src/languages/go.md | 2 + sites/upsun/src/languages/java/_index.md | 2 + sites/upsun/src/languages/java/migration.md | 10 +- sites/upsun/src/languages/java/tuning.md | 2 + sites/upsun/src/languages/lisp.md | 2 + sites/upsun/src/languages/nodejs/_index.md | 6 +- sites/upsun/src/languages/nodejs/debug.md | 2 + .../src/languages/nodejs/node-version.md | 6 +- sites/upsun/src/languages/php/_index.md | 98 +- .../upsun/src/languages/php/composer-auth.md | 4 +- sites/upsun/src/languages/php/extensions.md | 15 +- sites/upsun/src/languages/php/fpm.md | 4 +- sites/upsun/src/languages/php/redis.md | 4 +- sites/upsun/src/languages/php/swoole.md | 2 + sites/upsun/src/languages/php/troubleshoot.md | 2 + sites/upsun/src/languages/php/tuning.md | 8 +- sites/upsun/src/languages/php/xdebug.md | 6 +- sites/upsun/src/languages/python/_index.md | 4 +- .../src/languages/python/dependencies.md | 2 + .../src/languages/python/python-version.md | 2 + sites/upsun/src/languages/python/server.md | 2 + sites/upsun/src/languages/ruby.md | 4 +- sites/upsun/src/languages/rust.md | 2 + .../src/learn/bestpractices/oneormany.md | 2 +- .../src/learn/overview/yaml/yaml-structure.md | 8 +- sites/upsun/src/learn/tutorials/exporting.md | 2 +- .../src/learn/tutorials/migrating/from-psh.md | 8 +- .../src/projects/change-project-timezone.md | 6 +- sites/upsun/src/security/waf.md | 8 +- .../layouts/partials/beta-features/badge.html | 1 + .../partials/beta-features/banner.html | 7 + themes/psh-docs/layouts/partials/note.html | 4 +- .../layouts/partials/sidebar/list.html | 2 + .../shortcodes/composable/disclaimer.md | 4 + .../shortcodes/endpoint-description.md | 6 +- .../layouts/shortcodes/guides/config-app.md | 2 +- .../guides/gatsby/headless-gatsby.md | 4 +- .../shortcodes/language-specification.md | 2 +- .../layouts/shortcodes/project-isolation.md | 2 +- .../layouts/shortcodes/python-sockets.md | 2 +- .../layouts/shortcodes/v2connect2app.md | 2 +- themes/psh-docs/static/css/vendor.css | 6 + 198 files changed, 4542 insertions(+), 1909 deletions(-) create mode 100644 sites/platform/src/create-apps/app-reference/_index.md create mode 100644 sites/platform/src/create-apps/app-reference/composable-image.md rename sites/platform/src/create-apps/{app-reference.md => app-reference/single-runtime-image.md} (61%) create mode 100644 sites/platform/static/images/nixos/nixos-packages.png create mode 100644 sites/platform/static/images/nixos/nixossearch-upstream-value.png delete mode 100644 sites/upsun/src/create-apps/app-reference.md create mode 100644 sites/upsun/src/create-apps/app-reference/_index.md create mode 100644 sites/upsun/src/create-apps/app-reference/composable-image.md create mode 100644 sites/upsun/src/create-apps/app-reference/single-runtime-image.md create mode 100644 themes/psh-docs/layouts/partials/beta-features/badge.html create mode 100644 themes/psh-docs/layouts/partials/beta-features/banner.html create mode 100644 themes/psh-docs/layouts/shortcodes/composable/disclaimer.md diff --git a/sites/platform/src/add-services/_index.md b/sites/platform/src/add-services/_index.md index 25fad846de..e7c4c14f63 100644 --- a/sites/platform/src/add-services/_index.md +++ b/sites/platform/src/add-services/_index.md @@ -70,7 +70,7 @@ The following table presents the keys you can define for each service: | `disk` | `integer` | For some services | The size in [MB](/glossary.md#mb) of the [persistent disk](#disk) allocated to the service. Can't be set for memory-resident-only services such as `memcache` and `redis`. Limited by your plan settings. | | `size` | `string` | | How many CPU and memory [resources to allocate](#size) to the service. Possible values are `AUTO`, `S`, `M`, `L`, `XL`, `2XL`, and `4XL`. Limited by your plan settings.

When `AUTO` applies, available resources are automatically balanced out based on the number of containers on your plan, so that no container is oversized compared to the others. To view the actual sizes of your containers, check the **Environment Configuration** section in your deployment [activity logs](../increase-observability/logs/access-logs.md#activity-logs). | | `configuration` | dictionary | For some services | Some services have additional specific configuration options that can be defined here, such as specific endpoints. See the given service page for more details. | -| `relationships` | dictionary | For some services | Some services require a relationship to your app. The content of the dictionary has the same type as the `relationships` dictionary for [app configuration](/create-apps/app-reference.md#relationships). The `endpoint_name` for apps is always `http`. | +| `relationships` | dictionary | For some services | Some services require a relationship to your app. The content of the dictionary has the same type as the `relationships` dictionary for [app configuration](/create-apps/app-reference/single-runtime-image.md#relationships). The `endpoint_name` for apps is always `http`. | ##### Disk @@ -90,7 +90,10 @@ Note that service containers in preview environments are always set to size `S`. ### 2. Connect the service -To connect the service, use the following configuration: +Once you have configured a service, you need to create a relationship to connect it to an app. +This is done in your [app configuration for relationships](/create-apps/app-reference/single-runtime-image.md#relationships). + +The relationship follows this pattern: ```yaml {configFile="app"} # Other options... @@ -105,12 +108,12 @@ relationships: You can define `` as you like, so long as it's unique between all defined services and matches in both the application and services configuration. -The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. -That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) +The example above leverages [default endpoint](/create-apps/app-reference/single-runtime-image#relationships) configuration for relationships. +That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference/single-runtime-image#relationships) (the network address a service is accessible from) that is identical to the _name_ of that service. Depending on your needs, instead of default endpoint configuration, -you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). +you can use [explicit endpoint configuration](/create-apps/app-reference/single-runtime-image#relationships). An example relationship to connect to the databases given in the [example in step 1](#1-configure-the-service): diff --git a/sites/platform/src/add-services/network-storage.md b/sites/platform/src/add-services/network-storage.md index f45729142e..f4aa350257 100644 --- a/sites/platform/src/add-services/network-storage.md +++ b/sites/platform/src/add-services/network-storage.md @@ -5,7 +5,7 @@ weight: -30 {{% vendor/name %}} supports internal "storage as a service" to provide a file store that can be shared between different application containers. -The network storage service enables a new kind of [mount](../create-apps/app-reference.md#mounts) +The network storage service enables a new kind of [mount](/create-apps/app-reference/single-runtime-image.md#mounts) that refers to a shared service rather than to a local directory. Your apps can use any combination of `local` and `service` mounts. @@ -123,7 +123,7 @@ and the `done` mount refers to the same directory as the `web/uploads/done` dire ## Worker instances -When defining a [worker](../create-apps/app-reference.md#workers) instance, +When defining a [worker](/create-apps/app-reference/single-runtime-image.md#workers) instance, keep in mind what mount behavior you want. `local` mounts are a separate storage area for each instance, diff --git a/sites/platform/src/add-services/redis.md b/sites/platform/src/add-services/redis.md index 2c459dcad7..681427cd81 100644 --- a/sites/platform/src/add-services/redis.md +++ b/sites/platform/src/add-services/redis.md @@ -131,9 +131,9 @@ relationships: You can define `` as you like, so long as it’s unique between all defined services and matches in both the application and services configuration. -The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) (the network address a service is accessible from) that is identical to the name of that service. +The example above leverages [default endpoint](/create-apps/app-reference/single-runtime-image#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference/single-runtime-image#relationships) (the network address a service is accessible from) that is identical to the name of that service. -Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). +Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference/single-runtime-image#relationships). With the above definition, the application container now has [access to the service](#use-in-app) via the relationship `` and its corresponding [`PLATFORM_RELATIONSHIPS` environment variable](/development/variables/use-variables#use-provided-variables). @@ -247,9 +247,9 @@ relationships: You can define `` as you like, so long as it’s unique between all defined services and matches in both the application and services configuration. -The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) (the network address a service is accessible from) that is identical to the name of that service. +The example above leverages [default endpoint](/create-apps/app-reference/single-runtime-image#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference/single-runtime-image#relationships) (the network address a service is accessible from) that is identical to the name of that service. -Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). +Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference/single-runtime-image#relationships). With the above definition, the application container now has [access to the service](#use-in-app) via the relationship `` and its corresponding [`PLATFORM_RELATIONSHIPS` environment variable](/development/variables/use-variables#use-provided-variables). diff --git a/sites/platform/src/add-services/varnish.md b/sites/platform/src/add-services/varnish.md index 46ab7cc48b..27f4156fb3 100644 --- a/sites/platform/src/add-services/varnish.md +++ b/sites/platform/src/add-services/varnish.md @@ -48,7 +48,7 @@ graph LR The `relationships` block defines the connection between Varnish and your app. You can define {{< variable "RELATIONSHIP_NAME" >}} as you like. -{{< variable "APP_NAME" >}} should match your app's `name` in the [app configuration](../create-apps/app-reference.md). +{{< variable "APP_NAME" >}} should match your app's `name` in the [app configuration](/create-apps/app-reference/single-runtime-image.md). The `configuration` block must reference a VCL file inside the `{{< vendor/configdir >}}` directory. The `path` defines the file relative to the `{{< vendor/configdir >}}` directory. @@ -285,7 +285,7 @@ which provides access to some Varnish analysis and debugging tools. You can't use it from an app fronted by Varnish because of the restriction with [circular relationships](#circular-relationships). To access the stats, create a **separate app** (`stats-app`) with a relationship *to* Varnish, but not *from* it. -Define [app configuration](../create-apps/app-reference.md) similar to the following: +Define [app configuration](/create-apps/app-reference/single-runtime-image.md) similar to the following: ```yaml {configFile="apps"} # The name of the app container. Must be unique within a project. @@ -340,5 +340,5 @@ To access the Varnish stats endpoint from the command line: 1. Connect to your stats app [using SSH](../development/ssh/_index.md): `{{% vendor/cli %}} ssh --app stats-app` (replace `stats-app` with the name you gave the app). -2. Display the [relationships array](../create-apps/app-reference.md#relationships) with `echo ${{< vendor/prefix >}}_RELATIONSHIPS | base64 -d | jq .`, +2. Display the [relationships array](/create-apps/app-reference/single-runtime-image.md#relationships) with `echo ${{< vendor/prefix >}}_RELATIONSHIPS | base64 -d | jq .`, 3. Query Varnish with `curl {{< variable "HOST" >}}:{{}}/stats`, replacing `{{< variable "HOST" >}}` and `{{< variable "PATH" >}}` with the values from Step 2. diff --git a/sites/platform/src/administration/cli/_index.md b/sites/platform/src/administration/cli/_index.md index 7b84af58ac..b051e48778 100644 --- a/sites/platform/src/administration/cli/_index.md +++ b/sites/platform/src/administration/cli/_index.md @@ -211,8 +211,8 @@ eval $({{% vendor/cli %}} completion) ### Run commands on your container You can use the {{% vendor/name %}} CLI to run commands on your container. -You can use any command you've added in [dependencies](../../create-apps/app-reference.md#dependencies) -or a [hook](../../create-apps/app-reference.md#hooks). +You can use any command you've added in [dependencies](/create-apps/app-reference/single-runtime-image.md#dependencies) +or a [hook](/create-apps/app-reference/single-runtime-image.md#hooks). The syntax looks like the following: diff --git a/sites/platform/src/administration/users.md b/sites/platform/src/administration/users.md index 32e3898941..0644c8598b 100644 --- a/sites/platform/src/administration/users.md +++ b/sites/platform/src/administration/users.md @@ -5,7 +5,7 @@ sidebarTitle: Users description: Manage user access and permissions across all your projects and organizations. --- -{{% vendor/name %}} offers very granular and flexible user permissions across projects and organizations. +{{% vendor/name %}} offers very granular and flexible user permissions across projects and organizations. When a user is added to a project, they are automatically added to your organization. ## Manage project access @@ -42,7 +42,7 @@ A user can have one of the following roles on an environment type which grants t | Contributor | Yes | Yes | Yes | Yes | No | No | | Viewer | Yes | No | Yes | No | No | No | -To customize which roles can use SSH, set [`access` in your app configuration](../create-apps/app-reference.md#access). +To customize which roles can use SSH, set [`access` in your app configuration](/create-apps/app-reference/single-runtime-image.md#access). ### View a user's permissions across all of the projects in your organization @@ -170,7 +170,7 @@ title=In the Console {{< /codetabs >}} To apply SSH access changes after you add a remove a user from a project or environment type, -[trigger a redeploy](../development/troubleshoot.md#force-a-redeploy). +[trigger a redeploy](../development/troubleshoot.md#force-a-redeploy). ### Remove a user from a project @@ -243,7 +243,7 @@ you can invite other users to your organization and grant them the following per Users with the **Manage users** (`members`) permission can add, edit, or remove _any_ user's permissions except their own. -Users with the **Manage billing** (`billing`) permission automatically are granted **List projects** (`projects:list`) permission. +Users with the **Manage billing** (`billing`) permission automatically are granted **List projects** (`projects:list`) permission. That is, they are able to see all organization projects once given billing rights. {{< /note >}} diff --git a/sites/platform/src/administration/web/configure-environment.md b/sites/platform/src/administration/web/configure-environment.md index a4f8efb44d..5d31b2f580 100644 --- a/sites/platform/src/administration/web/configure-environment.md +++ b/sites/platform/src/administration/web/configure-environment.md @@ -41,7 +41,7 @@ There are also additional options: * **Code** * **CLI** for the command to get your project set up locally with the [{{% vendor/name %}} CLI](../cli/_index.md). * **Git** for the command to clone the codebase via Git. - + If you're using {{% vendor/name %}} as your primary remote repository, the command clones from the project. If you have set up an [external integration](../../integrations/source/_index.md), the command clones directly from the integrated remote repository. @@ -61,7 +61,7 @@ If this message isn't updated once your [default environment](../../environments follow these steps: 1. Check that [you have defined routes](../../define-routes/_index.md) for your default environment. -2. Verify that your [application](../../create-apps/app-reference.md), [services](../../add-services/_index.md), and [routes](../../define-routes/_index.md) configurations are correct. +2. Verify that your [application](/create-apps/app-reference/single-runtime-image.md), [services](../../add-services/_index.md), and [routes](../../define-routes/_index.md) configurations are correct. 3. Check that your default environment is [active](../../environments/deactivate-environment.md#reactivate-an-environment). ## Environment settings diff --git a/sites/platform/src/create-apps/_index.md b/sites/platform/src/create-apps/_index.md index 673182730d..015fab179c 100644 --- a/sites/platform/src/create-apps/_index.md +++ b/sites/platform/src/create-apps/_index.md @@ -16,7 +16,7 @@ Within a single project, you can have one or more apps and each app can have mul Instances are where the same code can be run with different configurations, such as one for external communication and one for background processes. All of the apps and instances are configured with the same syntax. -You can find a [complete reference](./app-reference.md) of all possible settings. +You can find a [complete reference](/create-apps/app-reference/single-runtime-image.md) of all possible settings. ## A minimal application @@ -69,15 +69,15 @@ If you want to use one of the [databases or other services {{% vendor/name %}} p set it up by following these steps: 1. Configure the service based on the documentation for that service. -1. Use the information from that service inside your app's [`relationships` definition](./app-reference.md#relationships) +1. Use the information from that service inside your app's [`relationships` definition](/create-apps/app-reference/single-runtime-image.md#relationships) to configure how your app communicates with the service. ## Control the build and deploy process Your app generally needs to undergo some steps to be turned from the code in your Git repository into a running app. -If you're running a PHP or Node.js app, this starts with the [build flavor](./app-reference.md#build), +If you're running a PHP or Node.js app, this starts with the [build flavor](/create-apps/app-reference/single-runtime-image.md#build), which runs a default set of tasks. -Then any [global dependencies](./app-reference.md#dependencies) can be installed. +Then any [global dependencies](/create-apps/app-reference/single-runtime-image.md#dependencies) can be installed. Once these optional tasks are done, you can run [hooks](./hooks/_index.md) at various points in the process. Hooks are places for your custom scripts to control how your app is built and deployed. @@ -85,7 +85,7 @@ Hooks are places for your custom scripts to control how your app is built and de ## Configure what's served Once your app is built, it needs a defined way to communicate with the outside world. -Define its behavior with a [`web` instance](./app-reference.md#web). +Define its behavior with a [`web` instance](/create-apps/app-reference/single-runtime-image.md#web). There you can set what command runs every time your app is restarted, how dynamic requests are handled, and how to respond with static files. diff --git a/sites/platform/src/create-apps/app-reference/_index.md b/sites/platform/src/create-apps/app-reference/_index.md new file mode 100644 index 0000000000..8be7bfa012 --- /dev/null +++ b/sites/platform/src/create-apps/app-reference/_index.md @@ -0,0 +1,32 @@ +--- +title: "App reference" +weight: 4 +description: Configure your app and control how it's built and deployed on {{% vendor/name %}}. +layout: single +--- + +To define your app, you can either use one of {{% vendor/name %}}'s [single-runtime image](/create-apps/app-reference/single-runtime-image.md) +or its [composable image (BETA)](/create-apps/app-reference/composable-image.md). + +## Single-runtime image + +{{% vendor/name %}} provides and maintains a list of single-runtime images you can use for each of your application containers.
+See [all of the options you can use](/create-apps/app-reference/single-runtime-image.md) to define your app using a single-runtime image. + +## Composable image (BETA) + +The {{% vendor/name %}} composable image provides more flexibility than single-runtime images. +When using a composable image, you can define a stack (or group of packages) for your application container to use. + +There are over 80,000 packages available from the [Nix Packages collection](https://search.nixos.org/) that you can add to your stack. +You can add as many packages to your application container as you need. + +{{% note %}} + +{{% vendor/name %}} guarantees optimal user experience with the specific [set of packages](/create-apps/app-reference/composable-image.md#supported-nix-packages) it supports. +You can use any other package available from the [Nix Packages collection](https://search.nixos.org/), including unstable ones, +but NixOs is reponsible for their support. + +{{% /note %}} + +See [all of the options you can use](/create-apps/app-reference/composable-image.md) to define your app using the composable image. diff --git a/sites/platform/src/create-apps/app-reference/composable-image.md b/sites/platform/src/create-apps/app-reference/composable-image.md new file mode 100644 index 0000000000..fa3000cfdd --- /dev/null +++ b/sites/platform/src/create-apps/app-reference/composable-image.md @@ -0,0 +1,1137 @@ +--- +title: "Composable image" +weight: 4 +description: Use {{% vendor/name %}}'s composable image to build and deploy your app. +beta: true +banner: + title: Beta Feature + body: The {{% vendor/name %}} composable image is currently available in Beta. + This feature as well as its documentation is subject to change. +--- + +The {{% vendor/name %}} composable image provides enhanced flexibility when defining your app. +It allows you to install several runtimes and tools in your application container, +in a **"one image to rule them all"** approach. + +The composable image is built on [Nix](https://nix.dev), which offers the following benefits: + +- You can add as many packages to your application container as you need, + choosing from over 80,000 packages from [the Nixpkgs collection](https://search.nixos.org/packages). +- The packages you add are built in total isolation, so you can easily install different versions of the same package. +- With [Nix](https://nix.dev/reference/glossary#term-Nix), there are no undeclared dependencies in your source code. + What works on your local machine is guaranteed to work on any other machine. + +This page introduces all the settings available to configure your composable image from your `{{< vendor/configfile "app" >}}` file +(usually located at the root of your Git repository).
+Note that multi-app projects can be [set in various ways](../multi-app/_index.md). + +{{% note theme="info" title="Further resources"%}} + +For a more detailed introduction to the composable image, check out [this video](https://www.youtube.com/watch?v=emOt32DVl28).
+If you're pressed for time, jump to this comprehensive [configuration example](../_index.md#comprehensive-example). + +{{% /note %}} + +## Top-level properties + +The following table presents all the properties you can use at the top level of your app's YAML configuration file. + +The column _Set in instance?_ defines whether the given property can be overridden within a `web` or `workers` instance. +To override any part of a property, you have to provide the entire property. + +| Name | Type | Required | Set in instance? | Description | +|--------------------|-----------------------------------------------------|----------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `name` | `string` | Yes | No | A unique name for the app. Must be lowercase alphanumeric characters. Changing the name destroys data associated with the app. | +| `stack` | An array of [Nix packages](#stack) | Yes | No | A list of packages from the {{% vendor/name %}} collection of [supported runtimes](#supported-nix-packages) and/or from [NixPkgs](https://search.nixos.org/packages). | +| `size` | A [size](#sizes) | | Yes | How much resources to devote to the app. Defaults to `AUTO` in production environments. | +| `relationships` | A dictionary of [relationships](#relationships) | | Yes | Connections to other services and apps. | +| `disk` | `integer` or `null` | | Yes | The size of the disk space for the app in [MB](/glossary.md#mb). Minimum value is `128`. Defaults to `null`, meaning no disk is available. See [note on available space](#available-disk-space) | +| `mounts` | A dictionary of [mounts](#mounts) | | Yes | Directories that are writable even after the app is built. If set as a local source, `disk` is required. | +| `web` | A [web instance](#web) | | N/A | How the web application is served. | +| `workers` | A [worker instance](#workers) | | N/A | Alternate copies of the application to run as background processes. | +| `timezone` | `string` | | No | The timezone for crons to run. Format: a [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Defaults to `UTC`, which is the timezone used for all logs no matter the value here. See also [app runtime timezones](../timezone.md) | +| `access` | An [access dictionary](#access) | | Yes | Access control for roles accessing app environments. | +| `variables` | A [variables dictionary](#variables) | | Yes | Variables to control the environment. | +| `firewall` | A [firewall dictionary](#firewall) | | Yes | Outbound firewall rules for the application. | +| `hooks` | A [hooks dictionary](#hooks) | | No | What commands run at different stages in the build and deploy process. | +| `crons` | A [cron dictionary](#crons) | | No | Scheduled tasks for the app. | +| `source` | A [source dictionary](#source) | | No | Information on the app's source code and operations that can be run on it. | +| `additional_hosts` | An [additional hosts dictionary](#additional-hosts) | | Yes | Maps of hostnames to IP addresses. | +{{% note %}} +The ``type``, ``build``, ``dependencies``, and ``runtime`` keys are only supported when using a [single-runtime image](/create-apps/app-reference/single-runtime-image.md). +They are **not** supported when using the composable image. +They are replaced by the `stack` key. +{{% /note %}} + +## Stack + +Use the ``stack`` key to define which runtimes and binaries you want to install in your application container. +Define them as a YAML array as follows: + +```yaml {configFile="apps"} +myapp: + stack: [ "@" ] + # OR + stack: + - "@" +``` + +To add a language to your stack, use the `@` format.
+To add a tool to your stack, use the `` format, as no version is needed. + +#### Primary runtime + +If you add multiple runtimes to your application container, +the first declared runtime becomes the primary runtime. +The primary runtime is the one that is automatically started. + +To start other declared runtimes, you need to start them manually, using [web commands](#web-commands). +To find out which start command to use, go to the [Languages](/languages/_index.md) section, +and visit the documentation page dedicated to your runtime. + +{{% note %}} +If you use PHP, note that PHP-FPM is only started automatically if PHP is defined as the primary runtime. +{{% /note %}} + +### Supported Nix packages + +{{% note %}} +The Nix packages listed in the following table are officially supported by {{% vendor/name %}} to provide optimal user experience.
+However, you can add any other packages from [the Nixpkgs collection](https://search.nixos.org/) to your `stack`. +This includes packages from the ``unstable`` channel, +like [FrankenPHP](https://search.nixos.org/packages?channel=unstable&show=frankenphp&from=0&size=50&sort=relevance&type=packages&query=frankenphp).
+While available for you to install, packages that aren't listed in the following table are supported by Nix itself, not {{% vendor/name %}}. +{{% /note %}} + +Depending on the Nix package, you can select only the major runtime version, +or the major and minor runtime versions as shown in the table. +Security and other patches are applied automatically. + +| **Language** | **Nix package** | **Supported version(s)** | +|----------------------------------------------|---------------|----------------------------| +| [Clojure](https://clojure.org/) | `clojure` | 1 | +| [Common Lisp (SBCL)](/languages/lisp.html) | `sbcl` | 2 | +| [Elixir](/languages/elixir.html) | `elixir` | 1.15, 1.14 | +| [Go](/languages/go.html) | `golang` | 1.22, 1.21, 1.20 | +| [Java](/languages/java.html) | `java` | 21 | +| [Javascript/Bun](https://bun.sh/) | `bun` | 1 | +| [JavaScript/Node.js](/languages/nodejs.html) | `nodejs` | 21, 20, 18 | +| [Perl](https://www.perl.org/) | `perl` | 5 | +| [PHP](/languages/php.html) | `php` | 8.3, 8.2, 8.1 | +| [Python](/languages/python.html) | `python` | 3.12, 3.11, 3.10, 3.9, 2.7 | + +**Example:** + +You want to add PHP version {{% latest php %}} and ``facedetect`` to your application container. +To do so, use the following configuration: + +```yaml {configFile="apps"} +myapp: + stack: [ "php@{{% latest php %}}", "facedetect" ] + # OR + stack: + - "php@{{% latest php %}}" + - "facedetect" +``` + +### PHP extensions and Python packages + +When you add PHP or Python to your application container, +you can define which extensions (for PHP) or packages (for Python) you also want to add to your stack. + +To find out which extensions you can install with your runtime, +follow these steps: + +1. Go to the [NixOS search](https://search.nixos.org/). +2. Enter a runtime and click **Search**. +3. In the **Package sets** side bar, select the right set of extensions/packages for your runtime version.
+ You can choose the desired extensions/packages from the filtered results. + +![Screenshot of the Nix package sets selection for PHP@8.3](/images/nixos/nixos-packages.png "0.5") + +#### Install PHP extensions + +To enable [PHP extensions](/languages/php/extensions.md), +specify a list of `extensions` below the language definition.
+To disable [PHP extensions](/languages/php/extensions.md), +specify a list of `disabled_extensions` below the language definition.
+For instance: + +```yaml {configFile="apps"} +myapp: + source: + root: "/" + stack: + - "php@{{% latest "php" %}}": + extensions: + - apcu + - sodium + - xsl + - pdo_sqlite + disabled_extensions: + - gd +``` + +{{% note %}} +To help you find out the name of the PHP package you want to use, +some maintainers provide a ``PHP upstream extension`` value in the [NixOS search engine](https://search.nixos.org/packages?channel=unstable&show=php82Extensions.gd). + +![Screenshot of an upstream extension value shown in the NixOS search](/images/nixos/nixossearch-upstream-value.png "0.5") + +If this information is not provided, note that PHP package names on NixOS always respect the ``Extensions.`` format.
+Therefore, you can copy the ```` as shown in the NixOS search results, and use it in your configuration. + +{{% /note %}} + +Note that you can use environment variables or your `php.ini` file to [include further configuration options](/languages/php/_index.md#customize-php-settings) for your PHP extensions. + +#### Install Python packages + +To install Python packages, add them to your stack as new packages. +To do so, use the full name of the package. + +For instance, to install [``python312Packages.yq``](https://search.nixos.org/packages?channel=unstable&show=python312Packages.yq), +use the following configuration: + +```yaml {configFile="apps"} +myapp: + stack: + - "python@3.12" + - "python312Packages.yq" # python package specific +``` + +Alternatively, if you need to include configuration options for your extensions, use either your ``php.ini`` file or [environment variables](/development/variables/set-variables.md). + +### Example configuration + +Here is a full composable image configuration example. Note the use of the `@` format. + +```yaml {configFile="apps"} +myapp: + stack: + - "php@{{% latest "php" %}}" + extensions: + - apcu + - sodium + - xsl + - pdo_sqlite + - "python@3.12" + - "python312Packages.yq" # python package specific + - "yq" # tool +``` + +### Combine single-runtime and composable images + +In a [multiple application context](/create-apps/multi-app/_index.md), +you can use a mix of [single-runtime images](/create-apps/app-reference/single-runtime-image.md) +and [composable images](/create-apps/app-reference/composable-image.md). +Here is an example configuration including a ``frontend`` app and a ``backend`` app: + +```yaml {configFile="apps"} +app1: + stack: + - "php@{{% latest "php" %}}" + extensions: + - apcu + - sodium + - xsl + - pdo_sqlite + - "python@3.12" + - "python312Packages.yq" # python package specific +app2: + type: 'nodejs:{{% latest "nodejs" %}} +``` + +{{% note %}} +If you add multiple runtimes to your application container, +the first declared runtime becomes the primary runtime. +The primary runtime is the one that is automatically started. + +To start other declared runtimes, you need to start them manually, using [web commands](#web-commands). +To find out which start command to use, go to the [Languages](/languages/_index.md) section, +and visit the documentation page dedicated to your language. + +If you use PHP, note that PHP-FPM is only started automatically if PHP is defined as the primary runtime. +{{% /note %}} + +## Sizes + +Resources are distributed across all containers in an environment from the total available from your [plan size](/administration/pricing/_index.md). +So if you have more than just a single app, it doesn't get all of the resources available. +Each environment has its own resources and there are different [sizing rules for preview environments](#sizes-in-preview-environments). + +By default, resource sizes (CPU and memory) are chosen automatically for an app +based on the plan size and the number of other containers in the cluster. +Most of the time, this automatic sizing is enough. + +You can set sizing suggestions for production environments when you know a given container has specific needs. +Such as a worker that doesn't need much and can free up resources for other apps. +To do so, set `size` to one of the following values: + +- `S` +- `M` +- `L` +- `XL` +- `2XL` +- `4XL` + +The total resources allocated across all apps and services can't exceed what's in your plan. + +### Sizes in preview environments + +Containers in preview environments don't follow the `size` specification. +Application containers are set based on the plan's setting for **Environments application size**. +The default is size **S**, but you can increase it by editing your plan. +(Service containers in preview environments are always set to size **S**.) + +## Relationships + +To access another container within your project, you need to define a relationship to it. + +![Relationships Diagram](/images/management-console/relationships.png "0.5") + +You can give each relationship any name you want. +This name is used in the `PLATFORM_RELATIONSHIPS` environment variable, +which gives you credentials for accessing the service. + +The relationship is specified in the form `service_name:endpoint_name`. +The `service_name` is the name of the service given in the [services configuration](/add-services/_index.md) +or the name of another application in the same project specified as the `name` in that app's configration. + +The `endpoint_name` is the exposed functionality of the service to use. +For most services, the endpoint is the same as the service type. +For some services (such as [MariaDB](/add-services/mysql/_index.md#multiple-databases) and [Solr](/add-services/solr.md#solr-6-and-later)), +you can define additional explicit endpoints for multiple databases and cores in the [service's configuration](/add-services/_index.md). + +The following example shows a single MySQL service named `mysqldb` offering two databases, +a Redis cache service named `rediscache`, and an Elasticsearch service named `searchserver`. + +```yaml {configFile="app"} +relationships: + database: 'mysqldb:db1' + database2: 'mysqldb:db2' + cache: 'rediscache:redis' + search: 'searchserver:elasticsearch' +``` + +## Available disk space + +The maximum total space available to all apps and services is set by the storage in your plan settings. +When deploying your project, the sum of all `disk` keys defined in app and service configurations +must be *equal or less* than the plan storage size. + +So if your *plan storage size* is 5 GB, you can, for example, assign it in one of the following ways: + +- 2 GB to your app, 3 GB to your database +- 1 GB to your app, 4 GB to your database +- 1 GB to your app, 1 GB to your database, 3 GB to your OpenSearch service + +If you exceed the total space available, you receive an error on pushing your code. +You need to either increase your plan's storage or decrease the `disk` values you've assigned. + +{{% disk-space-mb %}} + +### Downsize a disk + +{{% disk-downsize type="app" %}} + +## Mounts + +After your app is built, its file system is read-only. +To make changes to your app's code, you need to use Git. + +For enhanced flexibility, {{% vendor/name %}} allows you to define and use writable directories called "mounts". +Mounts give you write access to files generated by your app (such as cache and log files) +and uploaded files without going through Git. + +When you define a mount, you are mounting an external directory to your app container, +much like you would plug a hard drive into your computer to transfer data. + +{{% note %}} + +- Mounts aren't available during the build +- When you [back up an environment](/environments/backup.md), the mounts on that environment are backed up too + +{{% /note %}} + +### Define a mount + +To define a mount, use the following configuration: + +```yaml {configFile="app"} +mounts: + '{{< variable "MOUNT_PATH" >}}': + source: {{< variable "MOUNT_TYPE" >}} + source_path: {{< variable "SOURCE_PATH_LOCATION" >}} +``` + +{{< variable "MOUNT_PATH" >}} is the path to your mount **within the app container** (relative to the app's root). +If you already have a directory with that name, you get a warning that it isn't accessible after the build. +See how to [troubleshoot the warning](../troubleshoot-mounts.md#overlapping-folders). + +| Name | Type | Required | Description | +| ------------- |-------------------------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `source` | `local`, `service`, or `tmp` | Yes | Specifies the type of the mount:

- `local` mounts are unique to your app. They can be useful to store files that remain local to the app instance, such as application logs.
`local` mounts require disk space. To successfully set up a local mount, set the `disk` key in your app configuration.

- `service` mounts point to [Network Storage](/add-services/network-storage.md) services that can be shared between several apps.

- `tmp` mounts are local ephemeral mounts, where an external directory is mounted to the `/tmp` directory of your app.
The content of a `tmp` mount **may be removed during infrastructure maintenance operations**. Therefore, `tmp` mounts allow you to **store files that you’re not afraid to lose**, such as your application cache that can be seamlessly rebuilt.
Note that the `/tmp` directory has **a maximum allocation of 8 GB**. | +| `source_path` | `string` | No | Specifies where the mount points **inside the [external directory](#mounts)**.

- If you explicitly set a `source_path`, your mount points to a specific subdirectory in the external directory.

- If the `source_path` is an empty string (`""`), your mount points to the entire external directory.

- If you don't define a `source_path`, {{% vendor/name %}} uses the {{< variable "MOUNT_PATH" >}} as default value, without leading or trailing slashes.
For example, if your mount lives in the `/web/uploads/` directory in your app container, it will point to a directory named `web/uploads` in the external directory.

**WARNING:** Changing the name of your mount affects the `source_path` when it's undefined. See [how to ensure continuity](#ensure-continuity-when-changing-the-name-of-your-mount) and maintain access to your files. | +| `service` | `string` | | Only for `service` mounts: the name of the [Network Storage service](/add-services/network-storage.md). | + + +The accessibility to the web of a mounted directory depends on the [`web.locations` configuration](#web). +Files can be all public, all private, or with different rules for different paths and file types. + +Note that when you remove a `local` mount from your `{{< vendor/configfile "app" >}}` file, +the mounted directory isn't deleted. +The files still exist on disk until manually removed +(or until the app container is moved to another host during a maintenance operation in the case of a `tmp` mount). + +### Example configuration + +```yaml {configFile="app"} +mounts: + 'web/uploads': + source: local + source_path: uploads + '/.tmp_platformsh': + source: tmp + source_path: files/.tmp_platformsh + '/build': + source: local + source_path: files/build + '/.cache': + source: tmp + source_path: files/.cache + '/node_modules/.cache': + source: tmp + source_path: files/node_modules/.cache +``` + +For examples of how to set up a `service` mount, see the dedicated [Network Storage page](/add-services/network-storage.md). + +### Ensure continuity when changing the name of your mount + +Changing the name of your mount affects the default `source_path`. + +Say you have a `/my/cache/` mount with an undefined `source_path`: + +```yaml {configFile="app"} +mounts: + '/my/cache/': + source: tmp +``` + +If you rename the mount to `/cache/files/`, it will point to a new, empty `/cache/files/` directory. + +To ensure continuity, you need to explicitly define the `source_path` as the previous name of the mount, without leading or trailing slashes: + + ```yaml {configFile="app"} +mounts: + '/cache/files/': + source: tmp + source_path: my/cache +``` + +The `/cache/files/` mount will point to the original `/my/cache/` directory, maintaining access to all your existing files in that directory. + +## Web + +Use the `web` key to configure the web server running in front of your app. + +| Name | Type | Required | Description | +|-------------|--------------------------------------------|-------------------------------|------------------------------------------------------| +| `commands` | A [web commands dictionary](#web-commands) | See [note](#required-command) | The command to launch your app. | +| `upstream` | An [upstream dictionary](#upstream) | | How the front server connects to your app. | +| `locations` | A [locations dictionary](#locations) | | How the app container responds to incoming requests. | + +See some [examples of how to configure what's served](../web/_index.md). + +### Web commands + +| Name | Type | Required | Description | +|-------------|----------|-------------------------------|-----------------------------------------------------------------------------------------------------| +| `pre_start` | `string` | | Command run just prior to `start`, which can be useful when you need to run _per-instance_ actions. | +| `start` | `string` | See [note](#required-command) | The command to launch your app. If it terminates, it's restarted immediately. | + +Example: + +```yaml {configFile="app"} +web: + commands: + start: 'uwsgi --ini conf/server.ini' +``` + +This command runs every time your app is restarted, regardless of whether or not new code is deployed. + +{{< note >}} + +Never "background" a start process using `&`. +That's interpreted as the command terminating and the supervisor process starts a second copy, +creating an infinite loop until the container crashes. +Just run it as normal and allow the {{% vendor/name %}} supervisor to manage it. + +{{< /note >}} + +#### Required command + +On all containers other than PHP, the value for `start` should be treated as required. + +On PHP containers, it's optional and defaults to starting PHP-FPM (`/usr/bin/start-php-app`). +It can also be set explicitly on a PHP container to run a dedicated process, +such as [React PHP](https://github.com/platformsh-examples/platformsh-example-reactphp) +or [Amp](https://github.com/platformsh-examples/platformsh-example-amphp). +See how to set up [alternate start commands on PHP](/languages/php/_index.md#alternate-start-commands). + +### Upstream + +| Name | Type | Required | Description | Default | +|-----------------|---------------------|----------|-------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------| +| `socket_family` | `tcp` or `unix` | | Whether your app listens on a Unix or TCP socket. | Defaults to `tcp` for all [primary runtimes](#primary-runtime) except PHP; for PHP the default is `unix`. | +| `protocol` | `http` or `fastcgi` | | Whether your app receives incoming requests over HTTP or FastCGI. | Default varies based on the [primary runtimes](#primary-runtime). | + +For PHP, the defaults are configured for PHP-FPM and shouldn't need adjustment. +For all other containers, the default for `protocol` is `http`. + +The following example is the default on non-PHP containers: + +```yaml {configFile="app"} +web: + upstream: + socket_family: tcp + protocol: http +``` + +#### Where to listen + +Where to listen depends on your setting for `web.upstream.socket_family` (defaults to `tcp`). + +| `socket_family` | Where to listen | +|-----------------|---------------------------------------------------------------------------------------------------------------------------------------| +| `tcp` | The port specified by the [`PORT` environment variable](/development/variables/use-variables.md#use-provided-variables) | +| `unix` | The Unix socket file specified by the [`SOCKET` environment variable](/development/variables/use-variables.md#use-provided-variables) | + +If your application isn't listening at the same place that the runtime is sending requests, +you see `502 Bad Gateway` errors when you try to connect to your website. + +### Locations + +Each key in the `locations` dictionary is a path on your site with a leading `/`. +For `example.com`, a `/` matches `example.com/` and `/admin` matches `example.com/admin`. +When multiple keys match an incoming request, the most-specific applies. + +The following table presents possible properties for each location: + +| Name | Type | Default | Description | +|---------------------|------------------------------------------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `root` | `string` | | The directory to serve static assets for this location relative to the app's root directory ([see `source.root`](#source)). Must be an actual directory inside the root directory. | +| `passthru` | `boolean` or `string` | `false` | Whether to forward disallowed and missing resources from this location to the app. A string is a path with a leading `/` to the controller, such as `/index.php`.

If your app is in PHP, when setting `passthru` to `true`, you might want to set `scripts` to `false` for enhanced security. This prevents PHP scripts from being executed from the specified location. You might also want to set `allow` to `false` so that not only PHP scripts can't be executed, but their source code also can't be delivered. | +| `index` | Array of `string`s or `null` | | Files to consider when serving a request for a directory. When set, requires access to the files through the `allow` or `rules` keys. | +| `expires` | `string` | `-1` | How long static assets are cached. The default means no caching. Setting it to a value enables the `Cache-Control` and `Expires` headers. Times can be suffixed with `ms` = milliseconds, `s` = seconds, `m` = minutes, `h` = hours, `d` = days, `w` = weeks, `M` = months/30d, or `y` = years/365d. | +| `allow` | `boolean` | `true` | Whether to allow serving files which don't match a rule. | +| `scripts` | `boolean` | | Whether to allow scripts to run. Doesn't apply to paths specified in `passthru`. Meaningful only on PHP containers. | +| `headers` | A headers dictionary | | Any additional headers to apply to static assets, mapping header names to values. Responses from the app aren't affected. | +| `request_buffering` | A [request buffering dictionary](#request-buffering) | See below | Handling for chunked requests. | +| `rules` | A [rules dictionary](#rules) | | Specific overrides for specific locations. | + +#### Rules + +The rules dictionary can override most other keys according to a regular expression. +The key of each item is a regular expression to match paths exactly. +If an incoming request matches the rule, it's handled by the properties under the rule, +overriding any conflicting rules from the rest of the `locations` dictionary. + +Under `rules`, you can set all of the other possible [`locations` properties](#locations) +except `root`, `index` and `request_buffering`. + +In the following example, the `allow` key disallows requests for static files anywhere in the site. +This is overridden by a rule that explicitly allows common image file formats. + +```yaml {configFile="app"} +web: + locations: + '/': + # Handle dynamic requests + root: 'public' + passthru: '/index.php' + # Disallow static files + allow: false + rules: + # Allow common image files only. + '\.(jpe?g|png|gif|svgz?|css|js|map|ico|bmp|eot|woff2?|otf|ttf)$': + allow: true +``` + +#### Request buffering + +Request buffering is enabled by default to handle chunked requests as most app servers don't support them. +The following table shows the keys in the `request_buffering` dictionary: + +| Name | Type | Required | Default | Description | +|--------------------|-----------|----------|---------|-------------------------------------------| +| `enabled` | `boolean` | Yes | `true` | Whether request buffering is enabled. | +| `max_request_size` | `string` | | `250m` | The maximum size to allow in one request. | + +The default configuration would look like this: + +```yaml {configFile="app"} +web: + locations: + '/': + passthru: true + request_buffering: + enabled: true + max_request_size: 250m +``` + +## Workers + +Workers are exact copies of the code and compilation output as a `web` instance after a [`build` hook](#hooks). +They use the same container image. + +Workers can't accept public requests and so are suitable only for background tasks. +If they exit, they're automatically restarted. + +The keys of the `workers` definition are the names of the workers. +You can then define how each worker differs from the `web` instance using +the [top-level properties](#top-level-properties). + +Each worker can differ from the `web` instance in all properties _except_ for: + +- `build` and `dependencies` properties, which must be the same +- `crons` as cron jobs don't run on workers +- `hooks` as the `build` hook must be the same + and the `deploy` and `post_deploy` hooks don't run on workers. + +A worker named `queue` that was small and had a different start command could look like this: + +```yaml {configFile="app"} +workers: + queue: + size: S + commands: + start: | + ./worker.sh +``` + +For resource allocation, using workers in your project requires a [{{< partial "plans/multiapp-plan-name" >}} plan or larger](https://platform.sh/pricing/). + +## Access + +The `access` dictionary has one allowed key: + +| Name | Allowed values | Default | Description | +|-------|-------------------------------------|---------------|-----------------------------------------------------------------------| +| `ssh` | `admin`, `contributor`, or `viewer` | `contributor` | Defines the minimum role required to access app environments via SSH. | + +In the following example, only users with `admin` permissions for the +given [environment type](/administration/users.md#environment-type-roles) +can access the deployed environment via SSH: + +```yaml {configFile="app"} +access: + ssh: admin +``` + +## Variables + +{{% vendor/name %}} provides a number of ways to set [variables](/development/variables/_index.md). +Variables set in your app configuration have the lowest precedence, +meaning they're overridden by any conflicting values provided elsewhere. + +All variables set in your app configuration must have a prefix. +Some [prefixes have specific meanings](/development/variables/_index.md#variable-prefixes). + +Variables with the prefix `env` are available as a separate environment variable. +All other variables are available in +the [`PLATFORM_VARIABLES` environment variable](/development/variables/use-variables.md#use-provided-variables). + +The following example sets two variables: + +- A variable named `env:AUTHOR` with the value `Juan` that's available in the environment as `AUTHOR` +- A variable named `d8config:system.site:name` with the value `My site rocks` + that's available in the `PLATFORM_VARIABLES` environment variable + +```yaml {configFile="app"} +variables: + env: + AUTHOR: 'Juan' + d8config: + "system.site:name": 'My site rocks' +``` + +You can also define and access more [complex values](/development/variables/use-variables.md#access-complex-values). + +## Firewall + +{{< premium-features/tiered "Elite and Enterprise" >}} + +Set limits in outbound traffic from your app with no impact on inbound requests. + +The `outbound` key is required and contains one or more rules. +The rules define what traffic is allowed; anything unspecified is blocked. + +Each rule has the following properties where at least one is required and `ips` and `domains` can't be specified +together: + +| Name | Type | Default | Description | +|-----------|---------------------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `ips` | Array of `string`s | `["0.0.0.0/0"]` | IP addresses in [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). See a [CIDR format converter](https://www.ipaddressguide.com/cidr). | +| `domains` | Array of `string`s | | [Fully qualified domain names](https://en.wikipedia.org/wiki/Fully_qualified_domain_name) to specify specific destinations by hostname. | +| `ports` | Array of `integer`s | | Ports from 1 to 65535 that are allowed. If any ports are specified, all unspecified ports are blocked. If no ports are specified, all ports are allowed. Port `25`, the SMTP port for sending email, is always blocked. | + +The default settings would look like this: + +```yaml {configFile="app"} +firewall: + outbound: + - ips: [ "0.0.0.0/0" ] +``` + +### Support for rules + +Where outbound rules for firewalls are supported in all environments. +For {{% names/dedicated-gen-2 %}} projects, contact support for configuration. + +### Multiple rules + +Multiple firewall rules can be specified. +In such cases, a given outbound request is allowed if it matches _any_ of the defined rules. + +So in the following example requests to any IP on port 80 are allowed +and requests to 1.2.3.4 on either port 80 or 443 are allowed: + +```yaml {configFile="app"} +firewall: + outbound: + - ips: [ "1.2.3.4/32" ] + ports: [ 443 ] + - ports: [ 80 ] +``` + +### Outbound traffic to CDNs + +Be aware that many services are behind a content delivery network (CDN). +For most CDNs, routing is done via domain name, not IP address, +so thousands of domain names may share the same public IP addresses at the CDN. +If you allow the IP address of a CDN, you are usually allowing many or all of the other customers hosted behind that +CDN. + +### Outbound traffic by domain + +You can filter outbound traffic by domain. +Using domains in your rules rather than IP addresses is generally more specific and secure. +For example, if you use an IP address for a service with a CDN, +you have to allow the IP address for the CDN. +This means that you allow potentially hundreds or thousands of other servers also using the CDN. + +An example rule filtering by domain: + +```yaml {configFile="app"} +firewall: + outbound: + - protocol: tcp + domains: ["api.stripe.com", "api.twilio.com"] + ports: [80, 443] + - protocol: tcp + ips: ["1.2.3.4/29","2.3.4.5"] + ports: [22] +``` + +#### Determine which domains to allow + +To determine which domains to include in your filtering rules, +find the domains your site has requested the DNS to resolve. +Run the following command to parse your server’s `dns.log` file +and display all Fully Qualified Domain Names that have been requested: + +```bash +awk '/query\[[^P]\]/ { print $6 | "sort -u" }' /var/log/dns.log +``` + +The output includes all DNS requests that were made, including those blocked by your filtering rules. +It doesn't include any requests made using an IP address. + +Example output: + +```bash +facebook.com +fastly.com +platform.sh +www.google.com +www.platform.sh +``` + +## Build + +The only property of the `build` dictionary is `flavor`, which specifies a default set of build tasks to run. +Flavors are language-specific. + +See what the build flavor is for your language: + +- [Node.js](/languages/nodejs/_index.md#dependencies) +- [PHP](/languages/php/_index.md#dependencies) + +In all languages, you can also specify a flavor of `none` to take no action at all +(which is the default for any language other than PHP and Node.js). + +```yaml {configFile="app"} +build: + flavor: none +``` +## Dependencies + +Installs global dependencies as part of the build process. +They're independent of your app's dependencies +and are available in the `PATH` during the build process and in the runtime environment. +They're installed before the `build` hook runs using a package manager for the language. + +| Language | Key name | Package manager | +| -------- | --------------------- |--------------------------------------------------------------------------------------------------------------------| +| PHP | `php` | [Composer](https://getcomposer.org/) | +| Python 2 | `python` or `python2` | [Pip 2](https://packaging.python.org/tutorials/installing-packages/) | +| Python 3 | `python3` | [Pip 3](https://packaging.python.org/tutorials/installing-packages/) | +| Ruby | `ruby` | [Bundler](https://bundler.io/) | +| Node.js | `nodejs` | [npm](https://www.npmjs.com/) (see [how to use yarn](/languages/nodejs/_index.md#use-yarn-as-a-package-manager)) | +| Java | `java` | [Apache Maven](https://maven.apache.org/), [Gradle](https://gradle.org/), or [Apache Ant](https://ant.apache.org/) | + +The format for package names and version constraints are defined by the specific package manager. + +An example of dependencies in multiple languages: + +```yaml {configFile="app"} +dependencies: + php: # Specify one Composer package per line. + drush/drush: '8.0.0' + composer/composer: '^2' + python2: # Specify one Python 2 package per line. + behave: '*' + requests: '*' + python3: # Specify one Python 3 package per line. + numpy: '*' + ruby: # Specify one Bundler package per line. + sass: '3.4.7' + nodejs: # Specify one NPM package per line. + pm2: '^4.5.0' +``` +## Hooks + +There are three different hooks that run as part of the process of building and deploying your app. +These are places where you can run custom scripts. +They are: the `build` hook, the `deploy` hook, and the `post_deploy` hook. +Only the `build` hook is run for [worker instances](#workers), while [web instances](#web) run all three. + +The process is ordered as: + +1. Variables accessible at build time become available. +1. [Build flavor](#build) runs if applicable. +1. Any [dependencies](#dependencies) are installed. +1. The `build` hook is run. +1. The file system is changed to read only (except for any [mounts](#mounts)). +1. The app container starts. Variables accessible at runtime and services become available. +1. The `deploy` hook is run. +1. The app container begins accepting requests. +1. The `post_deploy` hook is run. + +Note that if an environment changes by no code changes, only the last step is run. +If you want the entire process to run, see how to [manually trigger builds](/development/troubleshoot.md#manually-trigger-builds). + +### Writable directories during build + +During the `build` hook, there are three writeable directories: + +- `PLATFORM_APP_DIR`: + Where your code is checked out and the working directory when the `build` hook starts. + Becomes the app that gets deployed. +- `PLATFORM_CACHE_DIR`: + Persists between builds, but isn't deployed. + Shared by all builds on all branches. +- `/tmp`: + Isn't deployed and is wiped between each build. + Note that `PLATFORM_CACHE_DIR` is mapped to `/tmp` + and together they offer about 8GB of free space. + +### Hook failure + +Each hook is executed as a single script, so they're considered to have failed only if the final command in them fails. +To cause them to fail on the first failed command, add `set -e` to the beginning of the hook. + +If a `build` hook fails for any reason, the build is aborted and the deploy doesn't happen. +Note that this only works for `build` hooks -- +if other hooks fail, the app is still deployed. + +#### Automated testing + +It’s preferable that you set up and run automated tests in a dedicated CI/CD tool. +Relying on {{% vendor/name %}} hooks for such tasks can prove difficult. + +During the `build` hook, you can halt the deployment on a test failure but the following limitations apply: + +- Access to services such as databases, Redis, Vault KMS, and even writable mounts is disabled. + So any testing that relies on it is sure to fail. +- If you haven’t made changes to your app, an existing build image is reused and the build hook isn’t run. +- Test results are written into your app container, so they might get exposed to a third party. + +During the `deploy` hook, you can access services but **you can’t halt the deployment based on a test failure**. +Note that there are other downsides: + +- Your app container is read-only during the deploy hook, + so if your tests need to write reports and other information, you need to create a file mount for them. +- Your app can only be deployed once the deploy hook has been completed. + Therefore, running automated testing via the deploy hook generates slower deployments. +- Your environment isn’t available externally during the deploy hook. + Unit and integration testing might work without the environment being available, + but you can’t typically perform end-to-end testing until after the environment is up and available. + +## Crons + +The keys of the `crons` definition are the names of the cron jobs. +The names must be unique. + +If an application defines both a `web` instance and `worker` instances, cron jobs run only on the `web` instance. + +See how to [get cron logs](/increase-observability/logs/access-logs.md#container-logs). + +The following table shows the properties for each job: + +| Name | Type | Required | Description | +|--------------------|----------------------------------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `spec` | `string` | Yes | The [cron specification](https://en.wikipedia.org/wiki/Cron#Cron_expression). To prevent competition for resources that might hurt performance, use `H` in definitions to indicate an unspecified but invariant time. For example, instead of using `0 * * * *` to indicate the cron job runs at the start of every hour, you can use `H * * * *` to indicate it runs every hour, but not necessarily at the start. This prevents multiple cron jobs from trying to start at the same time. | +| `commands` | A [cron commands dictionary](#cron-commands) | Yes | A definition of what commands to run when starting and stopping the cron job. | +| `shutdown_timeout` | `integer` | No | When a cron is canceled, this represents the number of seconds after which a `SIGKILL` signal is sent to the process to force terminate it. The default is `10` seconds. | +| `timeout` | `integer` | No | The maximum amount of time a cron can run before it's terminated. Defaults to the maximum allowed value of `86400` seconds (24 hours). | + +Note that you can [cancel pending or running crons](/environments/cancel-activity.md). + +### Cron commands + +| Name | Type | Required | Description | +|---------|----------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `start` | `string` | Yes | The command that's run. It's run in [Dash](https://en.wikipedia.org/wiki/Almquist_shell). | +| `stop` | `string` | No | The command that's issued to give the cron command a chance to shutdown gracefully, such as to finish an active item in a list of tasks. Issued when a cron task is interrupted by a user through the CLI or Console. If not specified, a `SIGTERM` signal is sent to the process. | + +```yaml {configFile="app"} +crons: + mycommand: + spec: 'H * * * *' + commands: + start: sleep 60 && echo sleep-60-finished && date + stop: killall sleep + shutdown_timeout: 18 +``` + +In this example configuration, the [cron specification](#crons) uses the `H` syntax. + +Note that this syntax is only supported on Grid and {{% names/dedicated-gen-3 %}} projects. +On {{% names/dedicated-gen-2 %}} projects, use the [standard cron syntax](https://en.wikipedia.org/wiki/Cron#Cron_expression). + +### Example cron jobs + + +{{< codetabs >}} + ++++ +title=Drupal ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +stack: [ "php@{{% latest php %}}" ] +crons: + # Run Drupal's cron tasks every 19 minutes. + drupal: + spec: '*/19 * * * *' + commands: + start: 'cd web ; drush core-cron' + # But also run pending queue tasks every 7 minutes. + # Use an odd number to avoid running at the same time as the `drupal` cron. + drush-queue: + spec: '*/7 * * * *' + commands: + start: 'cd web ; drush queue-run aggregator_feeds' +{{< /snippet >}} +``` + +<---> + ++++ +title=Ruby on Rails ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +stack: [ "ruby@{{% latest ruby %}}" ] +crons: + # Execute a rake script every 19 minutes. + ruby: + spec: '*/19 * * * *' + commands: + start: 'bundle exec rake some:task' +{{< /snippet >}} +``` + +<---> + ++++ +title=Laravel ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +stack: [ "php@{{% latest php %}}" ] +crons: + # Run Laravel's scheduler every 5 minutes. + scheduler: + spec: '*/5 * * * *' + cmd: 'php artisan schedule:run' +{{< /snippet >}} +``` + +<---> + ++++ +title=Symfony ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +stack: [ "php@{{% latest php %}}" ] +crons: + # Take a backup of the environment every day at 5:00 AM. + snapshot: + spec: 0 5 * * * + cmd: | + # Only run for the production environment, aka main branch + if [ "$PLATFORM_ENVIRONMENT_TYPE" = "production" ]; then + croncape symfony ... + fi +{{< /snippet >}} +``` + +{{< /codetabs >}} + + +### Conditional crons + +If you want to set up customized cron schedules depending on the environment type, +define conditional crons. +To do so, use a configuration similar to the following: + +```yaml {configFile="app"} +crons: + update: + spec: '0 0 * * *' + commands: + start: | + if [ "$PLATFORM_ENVIRONMENT_TYPE" = production ]; then + {{% vendor/cli %}} backup:create --yes --no-wait + {{% vendor/cli %}} source-operation:run update --no-wait --yes + fi +``` + +### Cron job timing + +Minimum time between cron jobs being triggered: + +| Plan | Time | +|-------------------- | --------- | +| Professional | 5 minutes | +| Elite or Enterprise | 1 minute | + +For each app container, only one cron job can run at a time. +If a new job is triggered while another is running, the new job is paused until the other completes. + +To minimize conflicts, a random offset is applied to all triggers. +The offset is a random number of seconds up to 20 minutes or the cron frequency, whichever is smaller. + +Crons are also paused while activities such as [backups](/environments/backup) are running. +The crons are queued to run after the other activity finishes. + +To run cron jobs in a timezone other than UTC, set the [timezone property](#top-level-properties). + +### Paused crons + +[Preview environments](/glossary.md#preview-environment) are often used for a limited time and then abandoned. +While it's useful for environments under active development to have scheduled tasks, +unused environments don't need to run cron jobs. +To minimize unnecessary resource use, +crons on environments with no deployments are paused. + +This affects all environments that aren't live environments. +This means all environments on Development plans +and all preview environments on higher plans. + +Such environments with deployments within 14 days have crons with the status `running`. +If there haven't been any deployments within 14 days, the status is `paused`. + +You can see the status in the Console +or using the CLI by running `{{% vendor/cli %}} environment:info` and looking under `deployment_state`. + +#### Restarting paused crons + +If the crons on your preview environment are paused but you're still using them, +you can push changes to the environment or redeploy it. + +To restart crons without changing anything: + +{{< codetabs >}} + ++++ +title=In the Console ++++ + +1. In the Console, navigate to your project. +1. Open the environment where you'd like the crons to run. +1. Click `Redeploy` next to the cron status of `Paused`. + +<---> + ++++ +title=Using the CLI ++++ + +Run the following command: + +```bash +{{% vendor/cli %}} redeploy +``` + +{{< /codetabs >}} + +### Sizing hints + +The following table shows the properties that can be set in `sizing_hints`: + +| Name | Type | Default | Minimum | Description | +|-------------------|-----------|---------|---------|------------------------------------------------| +| `request_memory` | `integer` | 45 | 10 | The average memory consumed per request in MB. | +| `reserved_memory` | `integer` | 70 | 70 | The amount of memory reserved in MB. | + +See more about [PHP-FPM workers and sizing](/languages/php/fpm.md). + +{{% note title="TODO" %}} +Not sure if applicable. +{{% /note %}} + +## Source + +The following table shows the properties that can be set in `source`: + +| Name | Type | Required | Description | +|--------------|--------------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------| +| `operations` | An operations dictionary | | Operations that can be applied to the source code. See [source operations](../source-operations.md) | +| `root` | `string` | | The path where the app code lives. Defaults to the root project directory. Useful for [multi-app setups](../multi-app/_index.md). | + +## Additional hosts + +If you're using a private network with specific IP addresses you need to connect to, +you might want to map those addresses to hostnames to better remember and organize them. +In such cases, you can add a map of those IP addresses to whatever hostnames you like. +Then when your app tries to access the hostname, it's sent to the proper IP address. + +So in the following example, if your app tries to access `api.example.com`, it's sent to `192.0.2.23`. + +```yaml {configFile="app"} +additional_hosts: + api.example.com: "192.0.2.23" + web.example.com: "203.0.113.42" +``` + +This is equivalent to adding the mapping to the `/etc/hosts` file for the container. diff --git a/sites/platform/src/create-apps/app-reference.md b/sites/platform/src/create-apps/app-reference/single-runtime-image.md similarity index 61% rename from sites/platform/src/create-apps/app-reference.md rename to sites/platform/src/create-apps/app-reference/single-runtime-image.md index f6ce920653..41cd686b26 100644 --- a/sites/platform/src/create-apps/app-reference.md +++ b/sites/platform/src/create-apps/app-reference/single-runtime-image.md @@ -1,5 +1,5 @@ --- -title: "App reference" +title: "Single-runtime image" weight: 4 description: See all of the options for controlling your apps and how they're built and deployed on {{% vendor/name %}}. --- @@ -8,12 +8,11 @@ description: See all of the options for controlling your apps and how they're bu For single-app projects, the configuration is all done in a `{{< vendor/configfile "app" >}}` file, usually located at the root of your app folder in your Git repository. -[Multi-app projects](./multi-app/_index.md) can be set up in various ways. +[Multi-app projects](../multi-app/_index.md) can be set up in various ways. +See a [comprehensive example](../_index.md#comprehensive-example) of a configuration in a `{{< vendor/configfile "app" >}}` file. -See a [comprehensive example](./_index.md#comprehensive-example) of a configuration in a `{{< vendor/configfile "app" >}}` file. - -For reference, see a [log of changes to app configuration](./upgrading.md). +For reference, see a [log of changes to app configuration](../upgrading.md). ## Top-level properties @@ -23,38 +22,46 @@ The column _Set in instance?_ defines whether the given property can be overridd To override any part of a property, you have to provide the entire property. -| Name | Type | Required | Set in instance? | Description | -| ------------------ | --------------------------------------------------- | -------- | ---------------- | ----------- | -| `name` | `string` | Yes | No | A unique name for the app. Must be lowercase alphanumeric characters. Changing the name destroys data associated with the app. | -| `type` | A [type](#types) | Yes | No | The base image to use with a specific app language. Format: `runtime:version`. | -| `size` | A [size](#sizes) | | Yes | How much resources to devote to the app. Defaults to `AUTO` in production environments. | -| `relationships` | A dictionary of [relationships](#relationships) | | Yes | Connections to other services and apps. | -| `disk` | `integer` or `null` | | Yes | The size of the disk space for the app in [MB](/glossary.md#mb). Minimum value is `128`. Defaults to `null`, meaning no disk is available. See [note on available space](#available-disk-space) | -| `mounts` | A dictionary of [mounts](#mounts) | | Yes | Directories that are writable even after the app is built. If set as a local source, `disk` is required. | -| `web` | A [web instance](#web) | | N/A | How the web application is served. | -| `workers` | A [worker instance](#workers) | | N/A | Alternate copies of the application to run as background processes. | -| `timezone` | `string` | | No | The timezone for crons to run. Format: a [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Defaults to `UTC`, which is the timezone used for all logs no matter the value here. See also [app runtime timezones](./timezone.md) | -| `access` | An [access dictionary](#access) | | Yes | Access control for roles accessing app environments. | -| `variables` | A [variables dictionary](#variables) | | Yes | Variables to control the environment. | -| `firewall` | A [firewall dictionary](#firewall) | | Yes | Outbound firewall rules for the application. | -| `build` | A [build dictionary](#build) | | No | What happens when the app is built. | -| `dependencies` | A [dependencies dictionary](#dependencies) | | No | What global dependencies to install before the `build` hook is run. | -| `hooks` | A [hooks dictionary](#hooks) | | No | What commands run at different stages in the build and deploy process. | -| `crons` | A [cron dictionary](#crons) | | No | Scheduled tasks for the app. | -| `source` | A [source dictionary](#source) | | No | Information on the app's source code and operations that can be run on it. | -| `runtime` | A [runtime dictionary](#runtime) | | No | Customizations to your PHP or Lisp runtime. | -| `additional_hosts` | An [additional hosts dictionary](#additional-hosts) | | Yes | Maps of hostnames to IP addresses. | +| Name | Type | Required | Set in instance? | Description | +| ------------------ | --------------------------------------------------- | -------- | ---------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `name` | `string` | Yes | No | A unique name for the app. Must be lowercase alphanumeric characters. Changing the name destroys data associated with the app. | +| `type` | A [type](#types) | Yes | No | The base image to use with a specific app language. Format: `runtime:version`. | +| `size` | A [size](#sizes) | | Yes | How much resources to devote to the app. Defaults to `AUTO` in production environments. | +| `relationships` | A dictionary of [relationships](#relationships) | | Yes | Connections to other services and apps. | +| `disk` | `integer` or `null` | | Yes | The size of the disk space for the app in [MB](/glossary.md#mb). Minimum value is `128`. Defaults to `null`, meaning no disk is available. See [note on available space](#available-disk-space) | +| `mounts` | A dictionary of [mounts](#mounts) | | Yes | Directories that are writable even after the app is built. If set as a local source, `disk` is required. | +| `web` | A [web instance](#web) | | N/A | How the web application is served. | +| `workers` | A [worker instance](#workers) | | N/A | Alternate copies of the application to run as background processes. | +| `timezone` | `string` | | No | The timezone for crons to run. Format: a [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Defaults to `UTC`, which is the timezone used for all logs no matter the value here. See also [app runtime timezones](../timezone.md) | +| `access` | An [access dictionary](#access) | | Yes | Access control for roles accessing app environments. | +| `variables` | A [variables dictionary](#variables) | | Yes | Variables to control the environment. | +| `firewall` | A [firewall dictionary](#firewall) | | Yes | Outbound firewall rules for the application. | +| `build` | A [build dictionary](#build) | | No | What happens when the app is built. | +| `dependencies` | A [dependencies dictionary](#dependencies) | | No | What global dependencies to install before the `build` hook is run. | +| `hooks` | A [hooks dictionary](#hooks) | | No | What commands run at different stages in the build and deploy process. | +| `crons` | A [cron dictionary](#crons) | | No | Scheduled tasks for the app. | +| `source` | A [source dictionary](#source) | | No | Information on the app's source code and operations that can be run on it. | +| `runtime` | A [runtime dictionary](#runtime) | | No | Customizations to your PHP or Lisp runtime. | +| `additional_hosts` | An [additional hosts dictionary](#additional-hosts) | | Yes | Maps of hostnames to IP addresses. | ## Root directory Some of the properties you can define are relative to your app's root directory. The root defaults to the location of your `{{< vendor/configfile "app" >}}` file. -To specify another directory, for example for a [multi-app project](./multi-app/_index.md), +That is, if a custom value for `source.root` is not provided in your configuration, the default behavior is equivalent to the above. + +To specify another directory, for example for a [multi-app project](../multi-app/_index.md), use the [`source.root` property](#source). ## Types +{{% note theme="info" %}} +You can now use the Upsun composable image (BETA) to install runtimes and tools in your application container. +If you've reached this section from another page, you may be interested in supported `stacks` where `type` was referenced. +See [supported Nix packages for the `stack` key](/create-apps/app-reference/composable-image#supported-nix-packages) for more information. +{{% /note %}} + The `type` defines the base container image used to run the application. The version is the major (`X`) and sometimes minor (`X.Y`) version numbers, depending on the service, as in the following table. @@ -74,7 +81,7 @@ type: 'php:{{% latest "php" %}}' ## Sizes -Resources are distributed across all containers in an environment from the total available from your [plan size](../administration/pricing/_index.md). +Resources are distributed across all containers in an environment from the total available from your [plan size](/administration/pricing/_index.md). So if you have more than just a single app, it doesn't get all of the resources available. Each environment has its own resources and there are different [sizing rules for preview environments](#sizes-in-preview-environments). @@ -330,17 +337,15 @@ mounts: source_path: {{< variable "SOURCE_PATH_LOCATION" >}} ``` - - {{< variable "MOUNT_PATH" >}} is the path to your mount **within the app container** (relative to the app's root). If you already have a directory with that name, you get a warning that it isn't accessible after the build. -See how to [troubleshoot the warning](./troubleshoot-mounts.md#overlapping-folders). +See how to [troubleshoot the warning](/troubleshoot-mounts.md#overlapping-folders). -| Name | Type | Required | Description | -| ------------- | -------------------- | -------- | ----------- | -| `source` | `local`, `service`, or `tmp` | Yes | Specifies the type of the mount:

- `local` mounts are unique to your app. They can be useful to store files that remain local to the app instance, such as application logs.
`local` mounts require disk space. To successfully set up a local mount, set the `disk` key in your app configuration.

- `service` mounts point to [Network Storage](add-services/network-storage.md) services that can be shared between several apps.

- `tmp` mounts are local ephemeral mounts, where an external directory is mounted to the `/tmp` directory of your app.
The content of a `tmp` mount **may be removed during infrastructure maintenance operations**. Therefore, `tmp` mounts allow you to **store files that you’re not afraid to lose**, such as your application cache that can be seamlessly rebuilt.
Note that the `/tmp` directory has **a maximum allocation of 8 GB**. | -| `source_path` | `string` | No | Specifies where the mount points **inside the [external directory](#mounts)**.

- If you explicitly set a `source_path`, your mount points to a specific subdirectory in the external directory.

- If the `source_path` is an empty string (`""`), your mount points to the entire external directory.

- If you don't define a `source_path`, {{% vendor/name %}} uses the {{< variable "MOUNT_PATH" >}} as default value, without leading or trailing slashes.
For example, if your mount lives in the `/web/uploads/` directory in your app container, it will point to a directory named `web/uploads` in the external directory.

**WARNING:** Changing the name of your mount affects the `source_path` when it's undefined. See [how to ensure continuity](#ensure-continuity-when-changing-the-name-of-your-mount) and maintain access to your files. | -| `service` | `string` | | Only for `service` mounts: the name of the [Network Storage service](../add-services/network-storage.md). | +| Name | Type | Required | Description | +| ------------- |-------------------------------| -------- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `source` | `local`, `service`, or `tmp` | Yes | Specifies the type of the mount:

- `local` mounts are unique to your app. They can be useful to store files that remain local to the app instance, such as application logs.
`local` mounts require disk space. To successfully set up a local mount, set the `disk` key in your app configuration.

- `service` mounts point to [Network Storage](/add-services/network-storage.md) services that can be shared between several apps.

- `tmp` mounts are local ephemeral mounts, where an external directory is mounted to the `/tmp` directory of your app.
The content of a `tmp` mount **may be removed during infrastructure maintenance operations**. Therefore, `tmp` mounts allow you to **store files that you’re not afraid to lose**, such as your application cache that can be seamlessly rebuilt.
Note that the `/tmp` directory has **a maximum allocation of 8 GB**. | +| `source_path` | `string` | No | Specifies where the mount points **inside the [external directory](#mounts)**.

- If you explicitly set a `source_path`, your mount points to a specific subdirectory in the external directory.

- If the `source_path` is an empty string (`""`), your mount points to the entire external directory.

- If you don't define a `source_path`, {{% vendor/name %}} uses the {{< variable "MOUNT_PATH" >}} as default value, without leading or trailing slashes.
For example, if your mount lives in the `/web/uploads/` directory in your app container, it will point to a directory named `web/uploads` in the external directory.

**WARNING:** Changing the name of your mount affects the `source_path` when it's undefined. See [how to ensure continuity](#ensure-continuity-when-changing-the-name-of-your-mount) and maintain access to your files. | +| `service` | `string` | | Only for `service` mounts: the name of the [Network Storage service](/add-services/network-storage.md). | The accessibility to the web of a mounted directory depends on the [`web.locations` configuration](#web). @@ -386,9 +391,9 @@ mounts: source: tmp ``` - If you rename the mount to `/cache/files/`, it will point to a new, empty `/cache/files/` directory. +If you rename the mount to `/cache/files/`, it will point to a new, empty `/cache/files/` directory. - To ensure continuity, you need to explicitly define the `source_path` as the previous name of the mount, without leading or trailing slashes: +To ensure continuity, you need to explicitly define the `source_path` as the previous name of the mount, without leading or trailing slashes: ```yaml {configFile="app"} mounts: @@ -410,7 +415,7 @@ Defaults may vary with a different [image `type`](#types). | `upstream` | An [upstream dictionary](#upstream) | | How the front server connects to your app. | | `locations` | A [locations dictionary](#locations) | | How the app container responds to incoming requests. | -See some [examples of how to configure what's served](./web/_index.md). +See some [examples of how to configure what's served](../web/_index.md). ### Web commands @@ -447,14 +452,14 @@ On PHP containers, it's optional and defaults to starting PHP-FPM (`/usr/bin/sta It can also be set explicitly on a PHP container to run a dedicated process, such as [React PHP](https://github.com/platformsh-examples/platformsh-example-reactphp) or [Amp](https://github.com/platformsh-examples/platformsh-example-amphp). -See how to set up [alternate start commands on PHP](../languages/php/_index.md#alternate-start-commands). +See how to set up [alternate start commands on PHP](/languages/php/_index.md#alternate-start-commands). ### Upstream -| Name | Type | Required | Description | Default | -| --------------- | ------------------- | -------- | ----------- | ----------- | -| `socket_family` | `tcp` or `unix` | | Whether your app listens on a Unix or TCP socket. | Defaults to `tcp` for all [image types](#types) except PHP; for PHP image types the default is `unix`. | -| `protocol` | `http` or `fastcgi` | | Whether your app receives incoming requests over HTTP or FastCGI. | Default varies based on [image `type`](#types). | +| Name | Type | Required | Description | Default | +| --------------- |---------------------| -------- |-------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------| +| `socket_family` | `tcp` or `unix` | | Whether your app listens on a Unix or TCP socket. | Defaults to `tcp` for all [image types](#types) except PHP; for PHP image types the default is `unix`. | +| `protocol` | `http` or `fastcgi` | | Whether your app receives incoming requests over HTTP or FastCGI. | Default varies based on [image `type`](#types). | For PHP, the defaults are configured for PHP-FPM and shouldn't need adjustment. For all other containers, the default for `protocol` is `http`. @@ -471,10 +476,10 @@ web: Where to listen depends on your setting for `web.upstream.socket_family` (defaults to `tcp`). -| `socket_family` | Where to listen | -| --------------- | --------------- | -| `tcp` | The port specified by the [`PORT` environment variable](../development/variables/use-variables.md#use-provided-variables) | -| `unix` | The Unix socket file specified by the [`SOCKET` environment variable](../development/variables/use-variables.md#use-provided-variables) | +| `socket_family` | Where to listen | +|------------------|---------------------------------------------------------------------------------------------------------------------------------------| +| `tcp` | The port specified by the [`PORT` environment variable](/development/variables/use-variables.md#use-provided-variables) | +| `unix` | The Unix socket file specified by the [`SOCKET` environment variable](/development/variables/use-variables.md#use-provided-variables) | If your application isn't listening at the same place that the runtime is sending requests, you see `502 Bad Gateway` errors when you try to connect to your website. @@ -487,17 +492,17 @@ When multiple keys match an incoming request, the most-specific applies. The following table presents possible properties for each location: -| Name | Type | Default | Description | -| ------------------- | ---------------------------------------------------- | --------- | ----------- | -| `root` | `string` | | The directory to serve static assets for this location relative to the [app's root directory](#root-directory). Must be an actual directory inside the root directory. | -| `passthru` | `boolean` or `string` | `false` | Whether to forward disallowed and missing resources from this location to the app. A string is a path with a leading `/` to the controller, such as `/index.php`.

If your app is in PHP, when setting `passthru` to `true`, you might want to set `scripts` to `false` for enhanced security. This prevents PHP scripts from being executed from the specified location. You might also want to set `allow` to `false` so that not only PHP scripts can't be executed, but their source code also can't be delivered.| -| `index` | Array of `string`s or `null` | | Files to consider when serving a request for a directory. When set, requires access to the files through the `allow` or `rules` keys. | -| `expires` | `string` | `-1` | How long static assets are cached. The default means no caching. Setting it to a value enables the `Cache-Control` and `Expires` headers. Times can be suffixed with `ms` = milliseconds, `s` = seconds, `m` = minutes, `h` = hours, `d` = days, `w` = weeks, `M` = months/30d, or `y` = years/365d. | -| `allow` | `boolean` | `true` | Whether to allow serving files which don't match a rule. | -| `scripts` | `boolean` | | Whether to allow scripts to run. Doesn't apply to paths specified in `passthru`. Meaningful only on PHP containers. | -| `headers` | A headers dictionary | | Any additional headers to apply to static assets, mapping header names to values. Responses from the app aren't affected. | -| `request_buffering` | A [request buffering dictionary](#request-buffering) | See below | Handling for chunked requests. | -| `rules` | A [rules dictionary](#rules) | | Specific overrides for specific locations. | +| Name | Type | Default | Description | +| ------------------- | ---------------------------------------------------- |------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `root` | `string` | | The directory to serve static assets for this location relative to the [app's root directory](#root-directory). Must be an actual directory inside the root directory. | +| `passthru` | `boolean` or `string` | `false` | Whether to forward disallowed and missing resources from this location to the app. A string is a path with a leading `/` to the controller, such as `/index.php`.

If your app is in PHP, when setting `passthru` to `true`, you might want to set `scripts` to `false` for enhanced security. This prevents PHP scripts from being executed from the specified location. You might also want to set `allow` to `false` so that not only PHP scripts can't be executed, but their source code also can't be delivered. | +| `index` | Array of `string`s or `null` | | Files to consider when serving a request for a directory. When set, requires access to the files through the `allow` or `rules` keys. | +| `expires` | `string` | `-1` | How long static assets are cached. The default means no caching. Setting it to a value enables the `Cache-Control` and `Expires` headers. Times can be suffixed with `ms` = milliseconds, `s` = seconds, `m` = minutes, `h` = hours, `d` = days, `w` = weeks, `M` = months/30d, or `y` = years/365d. | +| `allow` | `boolean` | `true` | Whether to allow serving files which don't match a rule. | +| `scripts` | `boolean` | | Whether to allow scripts to run. Doesn't apply to paths specified in `passthru`. Meaningful only on PHP containers. | +| `headers` | A headers dictionary | | Any additional headers to apply to static assets, mapping header names to values. Responses from the app aren't affected. | +| `request_buffering` | A [request buffering dictionary](#request-buffering) | See below | Handling for chunked requests. | +| `rules` | A [rules dictionary](#rules) | | Specific overrides for specific locations. | #### Rules @@ -531,9 +536,9 @@ web: Request buffering is enabled by default to handle chunked requests as most app servers don't support them. The following table shows the keys in the `request_buffering` dictionary: -| Name | Type | Required | Default | Description | -| ------------------ | --------- | -------- | ------- | ----------- | -| `enabled` | `boolean` | Yes | `true` | Whether request buffering is enabled. | +| Name | Type | Required | Default | Description | +| ------------------ | --------- |----------| ------- |-------------------------------------------| +| `enabled` | `boolean` | Yes | `true` | Whether request buffering is enabled. | | `max_request_size` | `string` | | `250m` | The maximum size to allow in one request. | The default configuration would look like this: @@ -556,7 +561,8 @@ Workers can't accept public requests and so are suitable only for background tas If they exit, they're automatically restarted. The keys of the `workers` definition are the names of the workers. -You can then define how each worker differs from the `web` instance using the [top-level properties](#top-level-properties). +You can then define how each worker differs from the `web` instance using +the [top-level properties](#top-level-properties). Each worker can differ from the `web` instance in all properties _except_ for: @@ -586,7 +592,7 @@ The `access` dictionary has one allowed key: | ----- | ----------------------------------- | ------------- | ----------- | | `ssh` | `admin`, `contributor`, or `viewer` | `contributor` | Defines the minimum role required to access app environments via SSH. | -In the following example, only users with `admin` permissions for the given [environment type](../administration/users.md#environment-type-roles) +In the following example, only users with `admin` permissions for the given [environment type](/administration/users.md#environment-type-roles) can access the deployed environment via SSH: ```yaml {configFile="app"} @@ -595,15 +601,15 @@ access: ``` ## Variables -{{% vendor/name %}} provides a number of ways to set [variables](../development/variables/_index.md). +{{% vendor/name %}} provides a number of ways to set [variables](/development/variables/_index.md). Variables set in your app configuration have the lowest precedence, meaning they're overridden by any conflicting values provided elsewhere. All variables set in your app configuration must have a prefix. -Some [prefixes have specific meanings](../development/variables/_index.md#variable-prefixes). +Some [prefixes have specific meanings](/development/variables/_index.md#variable-prefixes). Variables with the prefix `env` are available as a separate environment variable. -All other variables are available in the [`PLATFORM_VARIABLES` environment variable](../development/variables/use-variables.md#use-provided-variables). +All other variables are available in the [`PLATFORM_VARIABLES` environment variable](/development/variables/use-variables.md#use-provided-variables). The following example sets two variables: @@ -618,7 +624,8 @@ variables: d8config: "system.site:name": 'My site rocks' ``` -You can also define and access more [complex values](../development/variables/use-variables.md#access-complex-values). + +You can also define and access more [complex values](/development/variables/use-variables.md#access-complex-values). ## Firewall @@ -631,10 +638,10 @@ The rules define what traffic is allowed; anything unspecified is blocked. Each rule has the following properties where at least one is required and `ips` and `domains` can't be specified together: -| Name | Type | Default | Description | -| --------- | ------------------- | --------------- | ----------- | -| `ips` | Array of `string`s | `["0.0.0.0/0"]` | IP addresses in [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). See a [CIDR format converter](https://www.ipaddressguide.com/cidr). | -| `domains` | Array of `string`s | | [Fully qualified domain names](https://en.wikipedia.org/wiki/Fully_qualified_domain_name) to specify specific destinations by hostname. | +| Name | Type | Default | Description | +| --------- |---------------------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `ips` | Array of `string`s | `["0.0.0.0/0"]` | IP addresses in [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). See a [CIDR format converter](https://www.ipaddressguide.com/cidr). | +| `domains` | Array of `string`s | | [Fully qualified domain names](https://en.wikipedia.org/wiki/Fully_qualified_domain_name) to specify specific destinations by hostname. | | `ports` | Array of `integer`s | | Ports from 1 to 65535 that are allowed. If any ports are specified, all unspecified ports are blocked. If no ports are specified, all ports are allowed. Port `25`, the SMTP port for sending email, is always blocked. | The default settings would look like this: @@ -644,6 +651,7 @@ firewall: outbound: - ips: ["0.0.0.0/0"] ``` + ### Support for rules Where outbound rules for firewalls are supported in all environments. @@ -670,7 +678,8 @@ firewall: Be aware that many services are behind a content delivery network (CDN). For most CDNs, routing is done via domain name, not IP address, so thousands of domain names may share the same public IP addresses at the CDN. -If you allow the IP address of a CDN, you are usually allowing many or all of the other customers hosted behind that CDN. +If you allow the IP address of a CDN, you are usually allowing many or all of the other customers hosted behind that +CDN. ### Outbound traffic by domain @@ -723,8 +732,8 @@ Flavors are language-specific. See what the build flavor is for your language: -- [Node.js](../languages/nodejs/_index.md#dependencies) -- [PHP](../languages/php/_index.md#dependencies) +- [Node.js](/languages/nodejs/_index.md#dependencies) +- [PHP](/languages/php/_index.md#dependencies) In all languages, you can also specify a flavor of `none` to take no action at all (which is the default for any language other than PHP and Node.js). @@ -740,13 +749,13 @@ They're independent of your app's dependencies and are available in the `PATH` during the build process and in the runtime environment. They're installed before the `build` hook runs using a package manager for the language. -| Language | Key name | Package manager | -| -------- | --------------------- | --------------- | -| PHP | `php` | [Composer](https://getcomposer.org/) | -| Python 2 | `python` or `python2` | [Pip 2](https://packaging.python.org/tutorials/installing-packages/) | -| Python 3 | `python3` | [Pip 3](https://packaging.python.org/tutorials/installing-packages/) | -| Ruby | `ruby` | [Bundler](https://bundler.io/) | -| Node.js | `nodejs` | [npm](https://www.npmjs.com/) (see [how to use yarn](../languages/nodejs/_index.md#use-yarn-as-a-package-manager))| +| Language | Key name | Package manager | +|----------|-----------------------|--------------------------------------------------------------------------------------------------------------------| +| PHP | `php` | [Composer](https://getcomposer.org/) | +| Python 2 | `python` or `python2` | [Pip 2](https://packaging.python.org/tutorials/installing-packages/) | +| Python 3 | `python3` | [Pip 3](https://packaging.python.org/tutorials/installing-packages/) | +| Ruby | `ruby` | [Bundler](https://bundler.io/) | +| Node.js | `nodejs` | [npm](https://www.npmjs.com/) (see [how to use yarn](/languages/nodejs/_index.md#use-yarn-as-a-package-manager)) | | Java | `java` | [Apache Maven](https://maven.apache.org/), [Gradle](https://gradle.org/), or [Apache Ant](https://ant.apache.org/) | The format for package names and version constraints are defined by the specific package manager. @@ -768,6 +777,7 @@ dependencies: nodejs: # Specify one NPM package per line. pm2: '^4.5.0' ``` + ## Hooks There are three different hooks that run as part of the process of building and deploying your app. @@ -788,7 +798,8 @@ The process is ordered as: 1. The `post_deploy` hook is run. Note that if an environment changes by no code changes, only the last step is run. -If you want the entire process to run, see how to [manually trigger builds](../development/troubleshoot.md#manually-trigger-builds). +If you want the entire process to run, see how +to [manually trigger builds](/development/troubleshoot.md#manually-trigger-builds). ### Writable directories during build @@ -844,18 +855,18 @@ The names must be unique. If an application defines both a `web` instance and `worker` instances, cron jobs run only on the `web` instance. -See how to [get cron logs](../increase-observability/logs/access-logs.md#container-logs). +See how to [get cron logs](/increase-observability/logs/access-logs.md#container-logs). The following table shows the properties for each job: -| Name | Type | Required | Description | -| ------------------ | -------------------------------------------- | -------- | ----------- | -| `spec` | `string` | Yes | The [cron specification](https://en.wikipedia.org/wiki/Cron#Cron_expression). To prevent competition for resources that might hurt performance, on **Grid or {{% names/dedicated-gen-3 %}}** projects use `H` in definitions to indicate an unspecified but invariant time. For example, instead of using `0 * * * *` to indicate the cron job runs at the start of every hour, you can use `H * * * *` to indicate it runs every hour, but not necessarily at the start. This prevents multiple cron jobs from trying to start at the same time. **The `H` syntax isn't available on {{% names/dedicated-gen-2 %}} projects.**| -| `commands` | A [cron commands dictionary](#cron-commands) | Yes | A definition of what commands to run when starting and stopping the cron job. | -| `shutdown_timeout` | `integer` | No | When a cron is canceled, this represents the number of seconds after which a `SIGKILL` signal is sent to the process to force terminate it. The default is `10` seconds. | +| Name | Type | Required | Description | +| ------------------ | -------------------------------------------- | -------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `spec` | `string` | Yes | The [cron specification](https://en.wikipedia.org/wiki/Cron#Cron_expression). To prevent competition for resources that might hurt performance, on **Grid or {{% names/dedicated-gen-3 %}}** projects use `H` in definitions to indicate an unspecified but invariant time. For example, instead of using `0 * * * *` to indicate the cron job runs at the start of every hour, you can use `H * * * *` to indicate it runs every hour, but not necessarily at the start. This prevents multiple cron jobs from trying to start at the same time. **The `H` syntax isn't available on {{% names/dedicated-gen-2 %}} projects.** | +| `commands` | A [cron commands dictionary](#cron-commands) | Yes | A definition of what commands to run when starting and stopping the cron job. | +| `shutdown_timeout` | `integer` | No | When a cron is canceled, this represents the number of seconds after which a `SIGKILL` signal is sent to the process to force terminate it. The default is `10` seconds. | | `timeout` | `integer` | No | The maximum amount of time a cron can run before it's terminated. Defaults to the maximum allowed value of `86400` seconds (24 hours). -Note that you can [cancel pending or running crons](../environments/cancel-activity.md). +Note that you can [cancel pending or running crons](/environments/cancel-activity.md). ### Cron commands @@ -972,14 +983,14 @@ To do so, use a configuration similar to the following: ```yaml {configFile="app"} crons: - update: - spec: '0 0 * * *' - commands: - start: | - if [ "$PLATFORM_ENVIRONMENT_TYPE" = production ]; then - {{% vendor/cli %}} backup:create --yes --no-wait - {{% vendor/cli %}} source-operation:run update --no-wait --yes - fi + update: + spec: '0 0 * * *' + commands: + start: | + if [ "$PLATFORM_ENVIRONMENT_TYPE" = production ]; then + {{% vendor/cli %}} backup:create --yes --no-wait + {{% vendor/cli %}} source-operation:run update --no-wait --yes + fi ``` ### Cron job timing @@ -990,8 +1001,6 @@ Minimum time between cron jobs being triggered: | Professional | 5 minutes | | Elite or Enterprise | 1 minute | - - For each app container, only one cron job can run at a time. If a new job is triggered while another is running, the new job is paused until the other completes. @@ -1056,20 +1065,26 @@ Run the following command: The following table presents the various possible modifications to your PHP or Lisp runtime: -| Name | Type | Language | Description | -| --------------------------- | ---------------------------------------------------------- | -------- | ----------- | -| `extensions` | List of `string`s OR [extensions definitions](#extensions) | PHP | [PHP extensions](../languages/php/extensions.md) to enable. | -| `disabled_extensions` | List of `string`s | PHP | [PHP extensions](../languages/php/extensions.md) to disable. | +| Name | Type | Language | Description | +|-----------------------------|------------------------------------------------------------|----------|--------------------------------------------------------------------------------------------| +| `extensions` | List of `string`s OR [extensions definitions](#extensions) | PHP | [PHP extensions](/languages/php/extensions.md) to enable. | +| `disabled_extensions` | List of `string`s | PHP | [PHP extensions](/languages/php/extensions.md) to disable. | | `request_terminate_timeout` | `integer` | PHP | The timeout for serving a single request after which the PHP-FPM worker process is killed. | -| `sizing_hints` | A [sizing hints definition](#sizing-hints) | PHP | The assumptions for setting the number of workers in your PHP-FPM runtime. | -| `xdebug` | An Xdebug definition | PHP | The setting to turn on [Xdebug](../languages/php/xdebug.md). | -| `quicklisp` | Distribution definitions | Lisp | [Distributions for QuickLisp](../languages/lisp.md#quicklisp-options) to use. | +| `sizing_hints` | A [sizing hints definition](#sizing-hints) | PHP | The assumptions for setting the number of workers in your PHP-FPM runtime. | +| `xdebug` | An Xdebug definition | PHP | The setting to turn on [Xdebug](/languages/php/xdebug.md). | +| `quicklisp` | Distribution definitions | Lisp | [Distributions for QuickLisp](/languages/lisp.md#quicklisp-options) to use. | -You can also set your [app's runtime timezone](../create-apps/timezone.md). +You can also set your [app's runtime timezone](/create-apps/timezone.md). ### Extensions -You can enable [PHP extensions](../languages/php/extensions.md) just with a list of extensions: +{{% note theme="info" %}} +You can now use the Upsun composable image (BETA) to install runtimes and tools in your application container. +If you've reached this section from another page and are using the composable image, enabling/disabling extensions should be placed under the `stack` key instead of what is listed below. +See [how to configure extensions with the composable image](/create-apps/app-reference/composable-image#top-level-properties). +{{% /note %}} + +You can enable [PHP extensions](/languages/php/extensions.md) just with a list of extensions: ```yaml {configFile="app"} runtime: @@ -1077,6 +1092,7 @@ runtime: - geoip - tidy ``` + Alternatively, if you need to include configuration options, use a dictionary for that extension: ```yaml {configFile="app"} @@ -1095,22 +1111,22 @@ In this case, the `name` property is required. The following table shows the properties that can be set in `sizing_hints`: -| Name | Type | Default | Minimum | Description | -| ----------------- | --------- | ------- | ------- | ----------- | +| Name | Type | Default | Minimum | Description | +|-------------------|-----------|---------|---------|------------------------------------------------| | `request_memory` | `integer` | 45 | 10 | The average memory consumed per request in MB. | -| `reserved_memory` | `integer` | 70 | 70 | The amount of memory reserved in MB. | +| `reserved_memory` | `integer` | 70 | 70 | The amount of memory reserved in MB. | -See more about [PHP-FPM workers and sizing](../languages/php/fpm.md). +See more about [PHP-FPM workers and sizing](/languages/php/fpm.md). ## Source The following table shows the properties that can be set in `source`: -| Name | Type | Required | Description | -| ------------ | ------------------------ | -------- | ----------- | -| `operations` | An operations dictionary | | Operations that can be applied to the source code. See [source operations](./source-operations.md) | -| `root` | `string` | | The path where the app code lives. Defaults to the directory of the `{{< vendor/configfile "app" >}}` file. Useful for [multi-app setups](./multi-app/_index.md). | +| Name | Type | Required | Description | +| ------------ | ------------------------ | -------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `operations` | An operations dictionary | | Operations that can be applied to the source code. See [source operations](../source-operations.md) | +| `root` | `string` | | The path where the app code lives. Defaults to the directory of the `{{< vendor/configfile "app" >}}` file. Useful for [multi-app setups](../multi-app/_index.md). | ## Additional hosts @@ -1123,8 +1139,8 @@ So in the following example, if your app tries to access `api.example.com`, it's ```yaml {configFile="app"} additional_hosts: - api.example.com: "192.0.2.23" - web.example.com: "203.0.113.42" + api.example.com: "192.0.2.23" + web.example.com: "203.0.113.42" ``` This is equivalent to adding the mapping to the `/etc/hosts` file for the container. diff --git a/sites/platform/src/create-apps/hooks/_index.md b/sites/platform/src/create-apps/hooks/_index.md index fecf1f895d..75c2dd0907 100644 --- a/sites/platform/src/create-apps/hooks/_index.md +++ b/sites/platform/src/create-apps/hooks/_index.md @@ -34,7 +34,7 @@ In this case, the app has two sets of dependencies: Create your `build` hook to install them all: -1. Create a `build` hook in your [app configuration](../app-reference.md): +1. Create a `build` hook in your [app configuration](/create-apps/app-reference/single-runtime-image.md): ```yaml {configfile="app" dir="client" } hooks: @@ -67,7 +67,7 @@ Create your `build` hook to install them all: Copy the files in this directory into a `client/platformsh-scripts/test` directory. This script debugs the connection between Next.js and Drupal. 4. In the hook, switch to the directory with the testing script. - Each hook starts in the [app root](../app-reference.md#root-directory). + Each hook starts in the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). In this case, the app root is `client`. To run commands from a different directory, you need to change directories (relative to the app root): @@ -118,7 +118,7 @@ All of this configuration and preparation can be handled in a bash script. Note that hooks are executed using the dash shell, not the bash shell used by SSH logins. 2. Copy the [Drush configuration script from the template](https://github.com/platformsh-templates/nextjs-drupal/blob/master/api/drush/platformsh_generate_drush_yml.php) into a `drush/platformsh_generate_drush_yml.php` file. -3. Set a [mount](../app-reference.md#mounts). +3. Set a [mount](/create-apps/app-reference/single-runtime-image.md#mounts). Unlike in the `build` hook, in the `deploy` hook the system is generally read-only. So create a mount where you can write the Drush configuration: @@ -164,7 +164,7 @@ So you don't have to rebuild Drupal but you still get fresh content. api: 'api:http' ``` -2. Set [mounts](../app-reference.md#mounts). +2. Set [mounts](/create-apps/app-reference/single-runtime-image.md#mounts). Like the [`deploy` hook](#configure-drush-and-drupal), the `post_deploy` hook has a read-only file system. Create mounts for your Next.js files: diff --git a/sites/platform/src/create-apps/hooks/hooks-and-dependencies.md b/sites/platform/src/create-apps/hooks/hooks-and-dependencies.md index 37015eaa99..d67cc8138e 100644 --- a/sites/platform/src/create-apps/hooks/hooks-and-dependencies.md +++ b/sites/platform/src/create-apps/hooks/hooks-and-dependencies.md @@ -5,7 +5,7 @@ description: Manage dependencies for your hooks, such as compiling Sass files as If you use a specific package in a hook, you may want to manage dependencies for it. For example, you may want to compile Sass files as part of your build process. -You can set dependencies along with hooks in your [app configuration](../app-reference.md#dependencies). +You can set dependencies along with hooks in your [app configuration](/create-apps/app-reference/single-runtime-image.md#dependencies). The following example assumes you have some Sass source files, such as a `index.scss` file. You also need a script to compile the files, such as the following: diff --git a/sites/platform/src/create-apps/hooks/hooks-comparison.md b/sites/platform/src/create-apps/hooks/hooks-comparison.md index 5123185ee6..f8096ee769 100644 --- a/sites/platform/src/create-apps/hooks/hooks-comparison.md +++ b/sites/platform/src/create-apps/hooks/hooks-comparison.md @@ -8,15 +8,15 @@ The following table presents the main differences among the three available hook | Hook name | Failures stop build | Variables available | Services available | Timeout | Run on `worker` instances | Writable directories | Blocks requests | Runs on all redeploys\* | | ------------- | ------------------- |-------------------- | ------------------ | ------- | ------------------------- | -------------------- | --------------- | --------------- | | `build` | Yes | Build variables | No | 1 hour | Yes | `$PLATFORM_APP_DIR`, `$PLATFORM_CACHE_DIR`, and `/tmp` | No | No | -| `deploy` | No | Runtime variables | Yes | None | No | [Mounts](../app-reference.md#mounts) | Yes | No | -| `post_deploy` | No | Runtime variables | Yes | None | No | [Mounts](../app-reference.md#mounts) | No | Yes | +| `deploy` | No | Runtime variables | Yes | None | No | [Mounts](/create-apps/app-reference/single-runtime-image.md#mounts) | Yes | No | +| `post_deploy` | No | Runtime variables | Yes | None | No | [Mounts](/create-apps/app-reference/single-runtime-image.md#mounts) | No | Yes | \* All of the hooks run with changes to the code or environment. This column indicates which hooks run on a redeploy without any code changes. ## Build hook -The `build` hook is run after any [build flavor](../app-reference.md#build). +The `build` hook is run after any [build flavor](/create-apps/app-reference/single-runtime-image.md#build). During this hook, no services (such as a database) or any persistent file mounts are available as the application hasn't yet been deployed. @@ -40,7 +40,7 @@ During the `build` hook, there are three writeable directories: The only constraint on what can be downloaded during a `build` hook is the disk space available for builds. -This is _not_ the `disk` specified in your [app configuration](../app-reference.md#top-level-properties). +This is _not_ the `disk` specified in your [app configuration](/create-apps/app-reference/single-runtime-image.md#top-level-properties). If you exceed this limit, you receive a `No space left on device` error. See how to [troubleshoot this error](../troubleshoot-disks.md#no-space-left-on-device). @@ -63,8 +63,8 @@ So if you accidentally add an unbroken loop, it gets cut off and you can continu ## Deploy hook The `deploy` hook is run after the app container has been started but before it has started accepting requests. -Note that the deploy hook only runs on [`web` instances](../app-reference.md#web), -not [`worker` instances](../app-reference.md#workers). +Note that the deploy hook only runs on [`web` instances](/create-apps/app-reference/single-runtime-image.md#web), +not [`worker` instances](/create-apps/app-reference/single-runtime-image.md#workers). You can access other services at this stage (such as MySQL, Solr, Redis). The disk where the application lives is read-only at this point. @@ -72,7 +72,7 @@ The disk where the application lives is read-only at this point. This hook should be used when something needs to run once when new code is deployed. It isn't run when a host is restarted (such as during region maintenance), so anything that needs to run each time an instance of an app starts (regardless of whether there's new code) -should go in the `pre_start` key in [your `web` configuration](../app-reference.md#web-commands). +should go in the `pre_start` key in [your `web` configuration](/create-apps/app-reference/single-runtime-image.md#web-commands). For example, clearing the cache. Be aware: The deploy hook blocks the site accepting new requests. diff --git a/sites/platform/src/create-apps/multi-app/project-structure.md b/sites/platform/src/create-apps/multi-app/project-structure.md index bfd1408c26..c77fe8b1e4 100644 --- a/sites/platform/src/create-apps/multi-app/project-structure.md +++ b/sites/platform/src/create-apps/multi-app/project-structure.md @@ -302,7 +302,7 @@ make sure you [change the source root](#change-the-source-root-of-your-app) for ## Change the source root of your app When your app's code base and configuration file aren't located at the same directory level in your project repository, -you need to [define a root directory](../app-reference.md#root-directory) for your app. +you need to [define a root directory](/create-apps/app-reference/single-runtime-image.md#root-directory) for your app. To do so, add a new `source.root` property in your app configuration. diff --git a/sites/platform/src/create-apps/multi-app/routes.md b/sites/platform/src/create-apps/multi-app/routes.md index fdc6dba78b..9c1e8d441e 100644 --- a/sites/platform/src/create-apps/multi-app/routes.md +++ b/sites/platform/src/create-apps/multi-app/routes.md @@ -50,7 +50,7 @@ You don't need to define a route for each app in the repository. If an app isn't specified, then it isn't accessible to the web. One good example of defining an app with no route is when you [use Git submodules](/create-apps/multi-app/project-structure.html#split-your-code-source-into-multiple-git-submodule-repositories) and want to [use a source operation to update your submodules](/development/submodules.html#update-submodules). -You can also achieve the same thing by defining the app as a [`worker`](../app-reference.md#workers). +You can also achieve the same thing by defining the app as a [`worker`](/create-apps/app-reference/single-runtime-image.md#workers). {{< /note >}} diff --git a/sites/platform/src/create-apps/runtime-operations.md b/sites/platform/src/create-apps/runtime-operations.md index 32a34cb990..861776a4d2 100644 --- a/sites/platform/src/create-apps/runtime-operations.md +++ b/sites/platform/src/create-apps/runtime-operations.md @@ -5,8 +5,8 @@ weight: 6 --- Runtime operations allow you to trigger one-off commands or scripts on your project. -Similar to [crons](../create-apps/app-reference.md#crons), they run in the app container but not on a specific schedule. -You can [define runtime operations](#define-a-runtime-operation) in your [app configuration](../create-apps/app-reference.md) +Similar to [crons](/create-apps/app-reference/single-runtime-image.md#crons), they run in the app container but not on a specific schedule. +You can [define runtime operations](#define-a-runtime-operation) in your [app configuration](/create-apps/app-reference/single-runtime-image.md) and [trigger them](#run-a-runtime-operation) at any time through the {{% vendor/name %}} CLI. For example, if you have a static website, @@ -117,7 +117,7 @@ but want to avoid going through the whole {{% vendor/name %}} [build and deploy The following examples assume that the frontend and backend containers are included in the same environment. This isn’t necessary for the commands to run successfully.
What _is_ necessary is that the build destination for your frontend **is writable at runtime** -(meaning, you must [define a mount](../create-apps/app-reference.md#mounts) for it). +(meaning, you must [define a mount](/create-apps/app-reference/single-runtime-image.md#mounts) for it). If you don’t want to include a build within a mount (especially if your data source **isn’t** on {{% vendor/name %}}), you can use [source operations](../create-apps/source-operations.md) to achieve a similar effect, but through generating a new commit. diff --git a/sites/platform/src/create-apps/source-operations.md b/sites/platform/src/create-apps/source-operations.md index ed659a6fb4..ededb41b64 100644 --- a/sites/platform/src/create-apps/source-operations.md +++ b/sites/platform/src/create-apps/source-operations.md @@ -21,7 +21,7 @@ or [revert to the last commit](#revert-to-the-last-commit) pushed to your Git re To run your source operations, you can use the [{{% vendor/name %}} CLI](../administration/cli/_index.md) or the [Console](https://console.platform.sh). If you want to run your source operations and update your code automatically, -you can also define [cron jobs](./app-reference.md#crons). +you can also define [cron jobs](/create-apps/app-reference/single-runtime-image.md#crons). ## How source operations work @@ -50,7 +50,7 @@ When you trigger a source operation, the following happens in order: A source operation requires two things: - A name that must be unique within the application. - The name is the key of the block defined under `source.operations` in your [app configuration](./app-reference.md#source). + The name is the key of the block defined under `source.operations` in your [app configuration](/create-apps/app-reference/single-runtime-image.md#source). - A `command` that defines what's run when the operation is triggered. diff --git a/sites/platform/src/create-apps/timezone.md b/sites/platform/src/create-apps/timezone.md index 2d70565fdd..c28e00b2cc 100644 --- a/sites/platform/src/create-apps/timezone.md +++ b/sites/platform/src/create-apps/timezone.md @@ -80,4 +80,4 @@ title=Java ## Set a cron timezone You can set a specific timezone for your crons so they don't run in your app runtime timezone (or container timezone if no app runtime timezone is set on your project). -To do so, [set the `timezone` top-level property](../create-apps/app-reference.md#top-level-properties) in your app configuration. \ No newline at end of file +To do so, [set the `timezone` top-level property](/create-apps/app-reference/single-runtime-image.md#top-level-properties) in your app configuration. diff --git a/sites/platform/src/create-apps/troubleshoot-disks.md b/sites/platform/src/create-apps/troubleshoot-disks.md index cb438016a5..8c2275d1b4 100644 --- a/sites/platform/src/create-apps/troubleshoot-disks.md +++ b/sites/platform/src/create-apps/troubleshoot-disks.md @@ -23,7 +23,7 @@ Error: Resources exceeding plan limit; disk: 8192.00MB > 5120.00MB; try removing To fix the error, do one of the following: * Lower the `disk` parameters to a value within your plan's storage limits. - Note the [limits to downsizing disks](./app-reference.md#downsize-a-disk). + Note the [limits to downsizing disks](/create-apps/app-reference/single-runtime-image.md#downsize-a-disk). * Increase your plan's storage limits. This can only be done by people with the [manage plans permission](../administration/users.md#organization-permissions). diff --git a/sites/platform/src/create-apps/troubleshoot-mounts.md b/sites/platform/src/create-apps/troubleshoot-mounts.md index 384d24d269..302bb9ca0d 100644 --- a/sites/platform/src/create-apps/troubleshoot-mounts.md +++ b/sites/platform/src/create-apps/troubleshoot-mounts.md @@ -42,7 +42,7 @@ You can then put the mount back in place. ## Mounted files not publicly accessible If you've set up mounts to handle files like user uploads, you want to make sure the files are accessible. -Do so by managing their [location](./app-reference.md#locations). +Do so by managing their [location](/create-apps/app-reference/single-runtime-image.md#locations). This example defines two mounts, one named `private` and one `upload`: diff --git a/sites/platform/src/create-apps/upgrading.md b/sites/platform/src/create-apps/upgrading.md index 52102c58b3..34594edc7c 100644 --- a/sites/platform/src/create-apps/upgrading.md +++ b/sites/platform/src/create-apps/upgrading.md @@ -26,7 +26,7 @@ weight: 12 ``` The new syntax offers greater flexibility and configuration. - For more details, see the [full specification for cron jobs](./app-reference.md#crons). + For more details, see the [full specification for cron jobs](/create-apps/app-reference/single-runtime-image.md#crons). ## Changes in version 2019.05 @@ -58,7 +58,7 @@ For example, the following `{{< vendor/configfile "services" >}}` snippet: ``` * The syntax for the `mounts` key in `{{< vendor/configfile "app" >}}` has changed. -Rather than a parsed string, the value of each mount is a [multi-key definition](./app-reference.md#mounts). +Rather than a parsed string, the value of each mount is a [multi-key definition](/create-apps/app-reference/single-runtime-image.md#mounts). That is, the following example: ```yaml @@ -98,7 +98,7 @@ disable client-side caching. This change only affects static files served directly by the web server. Responses served from `passthru` URLs continue to use whatever caching headers were set by the application.. -To enable caching on your static files, make sure you include an `expires` key in your [web configuration](./app-reference.md), as shown below: +To enable caching on your static files, make sure you include an `expires` key in your [web configuration](/create-apps/app-reference/single-runtime-image.md), as shown below: ```yaml web: diff --git a/sites/platform/src/create-apps/web/_index.md b/sites/platform/src/create-apps/web/_index.md index a36e6ec076..75140a4af1 100644 --- a/sites/platform/src/create-apps/web/_index.md +++ b/sites/platform/src/create-apps/web/_index.md @@ -4,4 +4,4 @@ weight: 7 --- How you should configure your web server depends a lot on what you want to serve. -The following examples show how in specific scenarios you might define [your web server](../app-reference.md#web). +The following examples show how in specific scenarios you might define [your web server](/create-apps/app-reference/single-runtime-image.md#web). diff --git a/sites/platform/src/create-apps/web/custom-headers.md b/sites/platform/src/create-apps/web/custom-headers.md index 85a9ac21c9..d188699e5c 100644 --- a/sites/platform/src/create-apps/web/custom-headers.md +++ b/sites/platform/src/create-apps/web/custom-headers.md @@ -5,7 +5,7 @@ description: Set custom headers for your static content such as custom content-t --- When your app responds to dynamic requests, it can generate headers on the fly. -To set headers for static content, add them in [your `web` configuration](../app-reference.md#web). +To set headers for static content, add them in [your `web` configuration](/create-apps/app-reference/single-runtime-image.md#web). You might want to do so to add custom content-type headers, limit what other sites can embed your content, or allow cross origin requests. @@ -29,7 +29,7 @@ web: This sets the `X-Frame-Options` header to `SAMEORIGIN` for all static files. Now your files can only be embedded within your site. -Now set up an exception for MP3 files using a [rule](../app-reference.md#rules): +Now set up an exception for MP3 files using a [rule](/create-apps/app-reference/single-runtime-image.md#rules): ```yaml {configFile="app"} web: diff --git a/sites/platform/src/create-apps/web/php-basic.md b/sites/platform/src/create-apps/web/php-basic.md index 1f60b9ef52..3479c71ce8 100644 --- a/sites/platform/src/create-apps/web/php-basic.md +++ b/sites/platform/src/create-apps/web/php-basic.md @@ -5,7 +5,7 @@ description: Start with a basic PHP app with a front controller for dynamic requ --- To handle dynamic requests to your PHP app, you might want to use a [front controller](https://en.wikipedia.org/wiki/Front_controller). -The following example shows how for such an app you might start defining [your web server](../app-reference.md#web). +The following example shows how for such an app you might start defining [your web server](/create-apps/app-reference/single-runtime-image.md#web). ## Define a document root diff --git a/sites/platform/src/create-apps/web/rewrite-requests.md b/sites/platform/src/create-apps/web/rewrite-requests.md index cd2fb8540b..8a0afbe339 100644 --- a/sites/platform/src/create-apps/web/rewrite-requests.md +++ b/sites/platform/src/create-apps/web/rewrite-requests.md @@ -10,7 +10,7 @@ For example, you might want to make URLs seem semantic to users without having t In such a case, you might want requests to `/shoes/great-shoe/` to be served as if they were requests to `/?category=shoes&product=great-shoe`. -If so, add a [rule](../app-reference.md#rules) similar to the following: +If so, add a [rule](/create-apps/app-reference/single-runtime-image.md#rules) similar to the following: ```yaml {configFile="app"} web: diff --git a/sites/platform/src/create-apps/web/serve-different-directories.md b/sites/platform/src/create-apps/web/serve-different-directories.md index e4b24bc5b8..bccc21dc76 100644 --- a/sites/platform/src/create-apps/web/serve-different-directories.md +++ b/sites/platform/src/create-apps/web/serve-different-directories.md @@ -25,7 +25,7 @@ And your build process might build the documentation with an output folder such If so, you can serve all requests by your app code except for those that start with `/docs`, which you serve with your generated docs. -Use a [`web` configuration](../app-reference.md#web) similar to the following: +Use a [`web` configuration](/create-apps/app-reference/single-runtime-image.md#web) similar to the following: ```yaml {configfile="apps"} web: diff --git a/sites/platform/src/create-apps/web/static.md b/sites/platform/src/create-apps/web/static.md index 6d301a3bf7..d899bbe2eb 100644 --- a/sites/platform/src/create-apps/web/static.md +++ b/sites/platform/src/create-apps/web/static.md @@ -39,9 +39,9 @@ app: ``` See more information on the required minimal settings: -- [Top-level properties](../app-reference.md#top-level-properties). -- [`web` property](../app-reference.md#web). -- [`locations` properties](../app-reference.md#locations). +- [Top-level properties](/create-apps/app-reference/single-runtime-image.md#top-level-properties). +- [`web` property](/create-apps/app-reference/single-runtime-image.md#web). +- [`locations` properties](/create-apps/app-reference/single-runtime-image.md#locations). ## Add more features @@ -62,7 +62,7 @@ web: allow: true ``` -See more information on [`locations` properties](../app-reference.md#locations). +See more information on [`locations` properties](/create-apps/app-reference/single-runtime-image.md#locations). ### Create cache rules diff --git a/sites/platform/src/create-apps/workers.md b/sites/platform/src/create-apps/workers.md index b4fb19c592..c461b04e73 100644 --- a/sites/platform/src/create-apps/workers.md +++ b/sites/platform/src/create-apps/workers.md @@ -6,7 +6,7 @@ weight: 15 Workers are instances of your code that aren't open to connections from other apps or services or the outside world. They're good for handling background tasks. -See how to [configure a worker](./app-reference.md#workers) for your app. +See how to [configure a worker](/create-apps/app-reference/single-runtime-image.md#workers) for your app. Note that to have enough resources to support a worker and a service, you need at least a [{{< partial "plans/multiapp-plan-name" >}} plan](../administration/pricing/_index.md#multiple-apps-in-a-single-project). @@ -73,13 +73,13 @@ The `start` key specifies the command to use to launch your worker application. It may be any valid shell command, although most often it runs a command in your application in the language of your application. If the command specified by the `start` key terminates, it's restarted automatically. -Note that [`deploy` and `post_deploy` hooks](./hooks/_index.md) as well as [`cron` commands](./app-reference.md#crons) -run only on the [`web`](./app-reference.md#web) container, not on workers. +Note that [`deploy` and `post_deploy` hooks](./hooks/_index.md) as well as [`cron` commands](/create-apps/app-reference/single-runtime-image.md#crons) +run only on the [`web`](/create-apps/app-reference/single-runtime-image.md#web) container, not on workers. ## Inheritance -Any top-level definitions for [`size`](./app-reference.md#sizes), [`relationships`](./app-reference.md#relationships), -[`access`](./app-reference.md#access), [`disk`](./app-reference.md), [`mount`](./app-reference.md#mounts), and [`variables`](./app-reference.md#variables) +Any top-level definitions for [`size`](/create-apps/app-reference/single-runtime-image.md#sizes), [`relationships`](/create-apps/app-reference/single-runtime-image.md#relationships), +[`access`](/create-apps/app-reference/single-runtime-image.md#access), [`disk`](/create-apps/app-reference/single-runtime-image.md), [`mount`](/create-apps/app-reference/single-runtime-image.md#mounts), and [`variables`](/create-apps/app-reference/single-runtime-image.md#variables) are inherited by every worker, unless overridden explicitly. That means, for example, that the following two `{{< vendor/configfile "app" >}}` definitions produce identical workers. diff --git a/sites/platform/src/dedicated-gen-2/overview/grid.md b/sites/platform/src/dedicated-gen-2/overview/grid.md index 15aeff17a1..26d952fa4d 100644 --- a/sites/platform/src/dedicated-gen-2/overview/grid.md +++ b/sites/platform/src/dedicated-gen-2/overview/grid.md @@ -78,7 +78,7 @@ This shouldn't affect you most of the time, but may influence certain advanced u ## Cron tasks interrupted by deploys -How [cron tasks](../../create-apps/app-reference.md#crons) interact with deploys changes based on the environment. +How [cron tasks](/create-apps/app-reference/single-runtime-image.md#crons) interact with deploys changes based on the environment. On Grid environments, a running cron task blocks a deploy until the cron is complete. On {{% names/dedicated-gen-2 %}} environments, a deploy terminates a running cron task. @@ -98,14 +98,14 @@ It's assumed you want the settings the same, unless you state otherwise in the t The following settings require a [support ticket](/learn/overview/get-support): -* [Worker instances](../../create-apps/app-reference.md#workers) +* [Worker instances](/create-apps/app-reference/single-runtime-image.md#workers) * [Service configuration](../../add-services/_index.md) * Relationships among services and apps * Plan upsizing * Increasing storage * Allocating storage among mounts and services * [PHP extensions](../../languages/php/extensions.md) -* Web server configuration (the [`web.locations` section of your app configuration](../../create-apps/app-reference.md#locations)) +* Web server configuration (the [`web.locations` section of your app configuration](/create-apps/app-reference/single-runtime-image.md#locations)) ## Logs diff --git a/sites/platform/src/define-routes/_index.md b/sites/platform/src/define-routes/_index.md index a66775e9d5..c2a6ecce07 100644 --- a/sites/platform/src/define-routes/_index.md +++ b/sites/platform/src/define-routes/_index.md @@ -455,7 +455,7 @@ which is a requirement for the router caching. enabled: false # Below HTTP config may not be necessary for every Websocket client. -# It is required for some, as only defining an HTTPS config may trigger an automatic redirect to HTTP. +# It is required for some, as only defining an HTTPS config may trigger an automatic redirect to HTTP. "http://{default}/ws": type: upstream upstream: "app:http" @@ -463,7 +463,7 @@ which is a requirement for the router caching. enabled: false ``` -2. [Disable request buffering](../create-apps/app-reference.md#locations) in your app configuration. +2. [Disable request buffering](../create-apps/app-reference/single-runtime-image.md#locations) in your app configuration. ```yaml {configFile="app"} web: diff --git a/sites/platform/src/define-routes/cache.md b/sites/platform/src/define-routes/cache.md index 2012267a71..3ec8a296d0 100644 --- a/sites/platform/src/define-routes/cache.md +++ b/sites/platform/src/define-routes/cache.md @@ -199,7 +199,7 @@ The cache duration is decided based on the `Cache-Control` response header value The `default_ttl` only applies to **non-static responses**, that is, those generated by your application. -To set a cache lifetime for static resources configure that in your [app configuration](../create-apps/app-reference.md#locations). +To set a cache lifetime for static resources configure that in your [app configuration](/create-apps/app-reference/single-runtime-image.md#locations). All static assets have a Cache-Control header with a max age defaulting to 0 (which is the default for `expires`). {{< note title="none">}} @@ -275,4 +275,4 @@ Set the Vary header to `X-Forwarded-Proto` [custom request header](/development/ ### Cache zipped content separately -Use `Vary: Accept-Encoding` to serve different content depending on the encoding. Useful for ensuring that gzipped content isn't served to clients that can't read it. \ No newline at end of file +Use `Vary: Accept-Encoding` to serve different content depending on the encoding. Useful for ensuring that gzipped content isn't served to clients that can't read it. diff --git a/sites/platform/src/development/file-transfer.md b/sites/platform/src/development/file-transfer.md index f6408d311e..c4dd1a36fb 100644 --- a/sites/platform/src/development/file-transfer.md +++ b/sites/platform/src/development/file-transfer.md @@ -17,7 +17,7 @@ This means that the only way you can edit your app's code is through Git. However, you can transfer files to and from your built app without using Git. To do so, you need to configure mounts or use an SSH client. -[Mounts](../create-apps/app-reference.md#mounts) let you set up directories that remain writable after the build is complete. +[Mounts](/create-apps/app-reference/single-runtime-image.md#mounts) let you set up directories that remain writable after the build is complete. You can then transfer files directly to and from mounts inside your app with a single command via the [{{% vendor/name %}} CLI](../administration/cli/_index.md). @@ -112,7 +112,7 @@ Another way to transfer files to and from your built app is to use an SSH client You can use `scp` to copy files to and from a remote environment. For example, to download a `diagram.png` file from the `web/uploads` directory -(relative to the [app root](../create-apps/app-reference.md#root-directory)), +(relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory)), run the following command: ```bash @@ -188,7 +188,7 @@ The `sftp` connection is open once the `sftp>` prompt is displayed in your termi #### Download a file Say you want to download a `diagram.png` file from the `web/uploads` directory -(relative to the [app root](../create-apps/app-reference.md#root-directory)). +(relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory)). To do so, run the following command: ``` @@ -200,7 +200,7 @@ The `diagram.png` file is copied to the current local directory. #### Upload a file Say you want to upload a `diagram.png` file to the `web/uploads` directory -(relative to the [app root](../create-apps/app-reference.md#root-directory)). +(relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory)). To do so, run the following command: ```bash diff --git a/sites/platform/src/development/local/docksal.md b/sites/platform/src/development/local/docksal.md index ec3a230366..dca0d005c7 100644 --- a/sites/platform/src/development/local/docksal.md +++ b/sites/platform/src/development/local/docksal.md @@ -56,7 +56,7 @@ These files are ignored by {{% vendor/name %}}. ## 5. Add commands -Docksal doesn't automatically copy over any commands you have in your [build flavor](../../create-apps/app-reference.md#build) +Docksal doesn't automatically copy over any commands you have in your [build flavor](/create-apps/app-reference/single-runtime-image.md#build) and [hooks](../../create-apps/hooks/_index.md). To get your project running like on {{% vendor/name %}}, you have to add the commands to Docksal. diff --git a/sites/platform/src/development/sanitize-db/postgresql.md b/sites/platform/src/development/sanitize-db/postgresql.md index 619602576a..75c849cd6e 100644 --- a/sites/platform/src/development/sanitize-db/postgresql.md +++ b/sites/platform/src/development/sanitize-db/postgresql.md @@ -64,7 +64,7 @@ Set up a script by following these steps: ``` To sanitize only on the initial deploy and not all future deploys, - on sanitization create a file on a [mount](/create-apps/app-reference.md#mounts). + on sanitization create a file on a [mount](/create-apps/app-reference/single-runtime-image.md#mounts). Then add a check for the file as in the following example: ```bash {location="sanitize.sh"} diff --git a/sites/platform/src/development/ssh/_index.md b/sites/platform/src/development/ssh/_index.md index aae3b7eb7f..d7943162ab 100644 --- a/sites/platform/src/development/ssh/_index.md +++ b/sites/platform/src/development/ssh/_index.md @@ -3,7 +3,7 @@ title: Connect securely with SSH weight: 12 description: Keep your project and apps safe by connecting with SSH when you're interacting with your deployed environments or using the {{% vendor/name %}} CLI. layout: single -keywords: +keywords: - 2fa - twofactor - two factor @@ -60,7 +60,7 @@ Once you've connected, you get a welcome message detailing which environment you Now you can interact with the environment as you want. Note that your app's file system is read-only, -except for any [mounts you've defined](../../create-apps/app-reference.md#mounts). +except for any [mounts you've defined]/create-apps/app-reference/single-runtime-image.md#mounts). ## Connect to services diff --git a/sites/platform/src/development/submodules.md b/sites/platform/src/development/submodules.md index 6584a6c5d4..8f4055a19b 100644 --- a/sites/platform/src/development/submodules.md +++ b/sites/platform/src/development/submodules.md @@ -129,13 +129,13 @@ source: fi {{< /snippet >}} ``` - + For multiple app projects, make sure you define your source operation in the configuration of an app whose source code **is not** in a submodule. If you use [Git submodules for each of your apps](/create-apps/multi-app/project-structure.md#split-your-code-source-into-multiple-git-submodule-repositories), define a new app at the top level of your project repository. Don't define routes so your app isn't exposed to the web. - To define a source operation, add the following configuration to your [app configuration](/create-apps/app-reference): + To define a source operation, add the following configuration to your [app configuration](/create-apps/app-reference/single-runtime-image.md): ```yaml {configFile="app"} {{< snippet name="update-submodule" config="app" root="false" >}} diff --git a/sites/platform/src/development/troubleshoot.md b/sites/platform/src/development/troubleshoot.md index 7c80d8b8fe..55a3365a2c 100644 --- a/sites/platform/src/development/troubleshoot.md +++ b/sites/platform/src/development/troubleshoot.md @@ -111,7 +111,7 @@ it indicates your application is crashing or unavailable. Typical causes and potential solutions include: - Your app is listening at the wrong place. - - Check your app's [upstream properties](../create-apps/app-reference.md#upstream). + - Check your app's [upstream properties](../create-apps/app-reference/single-runtime-image.md#upstream). - If your app listening at a port, make sure it's using the [`PORT` environment variable](./variables/use-variables.md#use-provided-variables). - Your `{{< vendor/configfile "app" >}}` configuration has an error and a process isn't starting or requests can't be forwarded to it correctly. @@ -201,8 +201,8 @@ If you attempt to write to disk outside a `build` hook, you may encounter a `rea Except where you define it, the file system is all read-only, with code changes necessary through git. This gives you benefits like repeatable deployments, consistent backups, and traceability. -To generate anything you need later, [write to disk during a `build` hook](../create-apps/app-reference.md#writable-directories-during-build). -Or [declare mounts](../create-apps/app-reference.md#mounts), +To generate anything you need later, [write to disk during a `build` hook](/create-apps/app-reference/single-runtime-image.md#writable-directories-during-build). +Or [declare mounts](/create-apps/app-reference/single-runtime-image.md#mounts), which are writable even during and after deploy. They can be used for your data: file uploads, logs, and temporary files. @@ -233,7 +233,7 @@ To determine if your environment is being stuck in the build or the deployment, If the activity has the result `success`, the build has completed successfully and the system is trying to deploy. If the result is still `running`, the build is stuck. -In most regions, stuck builds terminate after one hour. +In most regions, stuck builds terminate after one hour. When a deployment is blocked, you should try the following: @@ -244,7 +244,7 @@ When a deployment is blocked, you should try the following: If a `sync` of `activate` process is stuck, try the above on the parent environment. -Note that, for PHP apps, +Note that, for PHP apps, you can [restart processes that get stuck during a build or deployment](../languages/php/troubleshoot.md#restart-php-processes-stuck-during-a-build-or-deployment) from your app container. @@ -278,7 +278,7 @@ strace -T {{< variable "YOUR_HOOK_COMMAND" >}} # Print a system call report ### Cron jobs -Containers can't be shutdown while long-running [cron jobs and scheduled tasks](../create-apps/app-reference.md#crons) are active. +Containers can't be shutdown while long-running [cron jobs and scheduled tasks](/create-apps/app-reference/single-runtime-image.md#crons) are active. That means long-running cron jobs block a container from being shut down to make way for a new deploy. Make sure your custom cron jobs run quickly and properly. @@ -298,7 +298,7 @@ and [cookie entry](../define-routes/cache.md#cookies). Because the router cache follows cache headers from your app, your app needs to send the correct `cache-control` header. -For static assets, set cache headers using the `expires` key in your [app configuration](../create-apps/app-reference.md#locations). +For static assets, set cache headers using the `expires` key in your [app configuration](/create-apps/app-reference/single-runtime-image.md#locations). ## Language-specific troubleshooting diff --git a/sites/platform/src/development/variables/set-variables.md b/sites/platform/src/development/variables/set-variables.md index 8c2606df88..a9b58cd61b 100644 --- a/sites/platform/src/development/variables/set-variables.md +++ b/sites/platform/src/development/variables/set-variables.md @@ -11,7 +11,7 @@ All of the variables can also be [overridden via script](#set-variables-via-scri ## Set variables in your app -Set variables [in code](../../create-apps/app-reference.md#variables) using the `{{< vendor/configfile "app" >}}` file. +Set variables [in code](/create-apps/app-reference/single-runtime-image.md#variables) using the `{{< vendor/configfile "app" >}}` file. These values are the same across all environments and present in the Git repository, which makes them a poor fit for API keys and other such secrets. @@ -179,7 +179,7 @@ value updates trigger a rebuild of the application in the same way that a commit ## Set variables via script -You can also provide a `.environment` file as in [your app root](../../create-apps/app-reference.md#root-directory). +You can also provide a `.environment` file as in [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory). This file runs as a script in dash when the container starts and on all SSH logins. It can be used to set any environment variables directly, such as the PATH variable. @@ -213,7 +213,7 @@ The following example looks for a `deploy/environment.tracker.txt` file. It displays a different message if it's found or not, which helps you track what variables are being set. ```bash {location=".environment"} -if [ -f "deploy/environment.tracker.txt" ]; then +if [ -f "deploy/environment.tracker.txt" ]; then echo "File found." export DEPLOY='Friday' else @@ -233,8 +233,8 @@ protocol version mismatch -- is your shell clean? (see the rsync man page for an explanation) rsync error: protocol incompatibility (code 2) at .../rsync/compat.c(61) [receiver=2.6.9] -[ProcessFailedException] -The command failed with the exit code: 2 +[ProcessFailedException] +The command failed with the exit code: 2 ``` This failure comes because `mount:download` and `rsync` don't expect output when the SSH connection is made. diff --git a/sites/platform/src/development/variables/use-variables.md b/sites/platform/src/development/variables/use-variables.md index 546213d52b..bdb79c3852 100644 --- a/sites/platform/src/development/variables/use-variables.md +++ b/sites/platform/src/development/variables/use-variables.md @@ -171,7 +171,7 @@ public class App { ### Access complex values Variables can have nested structures. -The following example shows nested structures in an [app configuration](../../create-apps/app-reference.md#variables): +The following example shows nested structures in an [app configuration](/create-apps/app-reference/single-runtime-image.md#variables): ```yaml {configFile="app"} variables: @@ -348,8 +348,8 @@ and at runtime. | `{{< vendor/prefix >}}_SOURCE_DIR` | Yes | No | The path to the root directory of your code repository in the context of a running [source operation](../../create-apps/source-operations.md). The directory contains a writable copy of your repository that you can commit to during the operation. | | `{{< vendor/prefix >}}_TREE_ID` | Yes | Yes | The ID of the tree the application was built from, essentially the SHA hash of the tree in Git. Use when you need a unique ID for each build. | | `{{< vendor/prefix >}}_VARIABLES` | Some | Some | A base64-encoded JSON object with all user-defined project and environment variables that don't use a [prefix](./_index.md#variable-prefixes). The keys are the variable names and the values are the variable values. Availability during builds and at runtime depends on the settings for each variable. See how to [access individual variables](#access-variables-in-a-shell). | -| `PORT` | No | Yes | A `string` representing the port to which requests are sent if the [`web.upstream.socket_family` property](../../create-apps/app-reference.md#upstream) is unset or set to `tcp`. | -| `SOCKET` | No | Yes | A `string` representing the path to the Unix socket file to use if the [`web.upstream.socket_family` property](../../create-apps/app-reference.md#upstream) is set to `unix`. | +| `PORT` | No | Yes | A `string` representing the port to which requests are sent if the [`web.upstream.socket_family` property](/create-apps/app-reference/single-runtime-image.md#upstream) is unset or set to `tcp`. | +| `SOCKET` | No | Yes | A `string` representing the path to the Unix socket file to use if the [`web.upstream.socket_family` property](/create-apps/app-reference/single-runtime-image.md#upstream) is set to `unix`. | ### Variables on {{% names/dedicated-gen-2 %}} environments @@ -458,7 +458,7 @@ The following example shows the process, though you have to modify it to fit you ``` 5. Call the script from the `deploy` hook your [app configuration](../../create-apps/_index.md): - + ```yaml {configFile="app"} hooks: deploy: | diff --git a/sites/platform/src/domains/cdn/managed-fastly.md b/sites/platform/src/domains/cdn/managed-fastly.md index befd340619..387b9d67c7 100644 --- a/sites/platform/src/domains/cdn/managed-fastly.md +++ b/sites/platform/src/domains/cdn/managed-fastly.md @@ -3,7 +3,7 @@ title: "Managed Fastly CDN" sidebarTitle: "Managed Fastly CDN" weight: 2 description: Bring your content closer to users with a Fastly CDN fully managed by {{% vendor/name %}}. -banner: +banner: type: tiered-feature --- @@ -33,10 +33,10 @@ This allows for encryption of all traffic between your users and your app. If you use a Fastly CDN provided by {{% vendor/name %}}, you can provide your own third-party TLS certificates for an additional fee. -To do so, if you don't have one, -set up a [mount](../../create-apps/app-reference.md#mounts) that isn't accessible to the web. +To do so, if you don't have one, +set up a [mount](/create-apps/app-reference/single-runtime-image.md#mounts) that isn't accessible to the web. Use an environment with access limited to {{% vendor/name %}} support and trusted users. -[Transfer](../../development/file-transfer.md) each certificate, its unencrypted private key, +[Transfer](../../development/file-transfer.md) each certificate, its unencrypted private key, and the intermediate certificate to the mount. To notify {{% vendor/name %}} that a certificate is to be added to your CDN configuration, open a [support ticket](/learn/overview/get-support). @@ -47,4 +47,4 @@ To add it to your CDN configuration, open a [support ticket](/learn/overview/get Note that when you add your own third-party TLS certificates, you are responsible for renewing them in due time. -Failure to do so may result in outages and compromised security for your site. \ No newline at end of file +Failure to do so may result in outages and compromised security for your site. diff --git a/sites/platform/src/environments/backup.md b/sites/platform/src/environments/backup.md index cdf0e0c1d2..79519ad9b3 100644 --- a/sites/platform/src/environments/backup.md +++ b/sites/platform/src/environments/backup.md @@ -22,7 +22,7 @@ To work with an [inactive environment](/glossary.md#inactive-environment), first 1. As an [admin user](../administration/users.md), you can do a backup of your environment. This backup includes the complete data and code of the environment. All persistent data from all running [services](../add-services/_index.md) - and any files stored on [mounts](../create-apps/app-reference.md#mounts) are included. + and any files stored on [mounts](/create-apps/app-reference/single-runtime-image.md#mounts) are included. The backup is stored internally on {{% vendor/name %}}. That is, the backup can be applied to environments on {{% vendor/name %}}, but it can't be downloaded. If you need to download backups, instead [export your mount and service data](/learn/tutorials/exporting.md)). @@ -181,7 +181,7 @@ title=In the Console ### Automate manual backups -You can also automate the process of creating manual backups through [cron jobs](../create-apps/app-reference.md#crons). +You can also automate the process of creating manual backups through [cron jobs](/create-apps/app-reference/single-runtime-image.md#crons). The cron job uses the CLI command to back up the environment. It requires you to [set up the CLI on the environment with an API token](../administration/cli/api-tokens.md#authenticate-in-an-environment). diff --git a/sites/platform/src/environments/scalability.md b/sites/platform/src/environments/scalability.md index 8aa887f062..a683a4f433 100644 --- a/sites/platform/src/environments/scalability.md +++ b/sites/platform/src/environments/scalability.md @@ -4,7 +4,7 @@ sidebarTitle: Scalability description: Learn how to scale your live site. --- -Your production environment gets a [pool of resources](../create-apps/app-reference.md#sizes) +Your production environment gets a [pool of resources](/create-apps/app-reference/single-runtime-image.md#sizes) based on your [plan size](../administration/pricing/_index.md). These resources are split up between the apps and services you've defined. diff --git a/sites/platform/src/environments/search-engine-visibility.md b/sites/platform/src/environments/search-engine-visibility.md index c7ff88cc00..c6260f78fb 100644 --- a/sites/platform/src/environments/search-engine-visibility.md +++ b/sites/platform/src/environments/search-engine-visibility.md @@ -59,7 +59,7 @@ It's automatically on for all `{{% vendor/cli %}}.site` domains. You can also send instructions to search engine indexers using a `robots.txt` file. Your app can serve this as a static file from its disk or as a dynamic response from its `passthru`. -Control either with the [`location` section of your app configuration](../create-apps/app-reference.md#locations). +Control either with the [`location` section of your app configuration](/create-apps/app-reference/single-runtime-image.md#locations). If your `robots.txt` file includes instructions to ignore a page, search engine indexers may ignore it even if you have configured {{% vendor/name %}} to not send the header. diff --git a/sites/platform/src/guides/django/deploy/customize.md b/sites/platform/src/guides/django/deploy/customize.md index 65b57f944f..ad769280c1 100644 --- a/sites/platform/src/guides/django/deploy/customize.md +++ b/sites/platform/src/guides/django/deploy/customize.md @@ -136,7 +136,7 @@ You can determine the deploy phase using the `PLATFORM_ENVIRONMENT` variable, wh ## `.environment` and Poetry -`source .environment` is run in the [app root](../../../create-apps/app-reference.md#root-directory) +`source .environment` is run in the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory) when a project starts, before cron commands are run, and when you log into an environment over SSH. So you can use the `.environment` file to make further changes to environment variables before the app runs, including modifying the system `$PATH` and other shell level customizations. diff --git a/sites/platform/src/guides/django/deploy/deploy.md b/sites/platform/src/guides/django/deploy/deploy.md index 32162b1a40..2668545268 100644 --- a/sites/platform/src/guides/django/deploy/deploy.md +++ b/sites/platform/src/guides/django/deploy/deploy.md @@ -15,7 +15,7 @@ description: | The example Django app used in this guide can be migrated solely by importing data into the database. Other forms of data, such as user uploads, also need to be migrated in the way described above. -To see how to define directories that are writable at runtime, see the [mounts reference](../../../create-apps/app-reference#mounts). +To see how to define directories that are writable at runtime, see the [mounts reference](/create-apps/app-reference/single-runtime-image#mounts). Then adjust the previous commands to upload files to them. {{< /note >}} diff --git a/sites/platform/src/guides/drupal/deploy/customize.md b/sites/platform/src/guides/drupal/deploy/customize.md index 7d5fc0cb6f..80f69a49ee 100644 --- a/sites/platform/src/guides/drupal/deploy/customize.md +++ b/sites/platform/src/guides/drupal/deploy/customize.md @@ -39,7 +39,7 @@ you would add configuration for those services to the `settings.platformsh.php` ## `.environment` -{{% vendor/name %}} runs `source .environment` in the [app root](../../../create-apps/app-reference.md#root-directory) +{{% vendor/name %}} runs `source .environment` in the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory) when a project starts, before cron commands are run, and when you log into an environment over SSH. That gives you a place to do extra environment variable setup before the app runs, including modifying the system `$PATH` and other shell level customizations. diff --git a/sites/platform/src/guides/drupal/faq.md b/sites/platform/src/guides/drupal/faq.md index 94b5c8e794..311d407f52 100644 --- a/sites/platform/src/guides/drupal/faq.md +++ b/sites/platform/src/guides/drupal/faq.md @@ -41,4 +41,4 @@ For Drupal sites, the name of the session cookie is based on a hash of the domai If you see a bare "File not found" error when accessing your Drupal site with a browser, you've pushed your code as a vanilla project but no `index.php` has been found. -Make sure your repository contains an `index.php` file in the [web location root](../../create-apps/app-reference.md#locations). +Make sure your repository contains an `index.php` file in the [web location root](/create-apps/app-reference/single-runtime-image.md#locations). diff --git a/sites/platform/src/guides/drupal/simplesaml.md b/sites/platform/src/guides/drupal/simplesaml.md index 55960e4f9e..73503c4be5 100644 --- a/sites/platform/src/guides/drupal/simplesaml.md +++ b/sites/platform/src/guides/drupal/simplesaml.md @@ -67,7 +67,7 @@ Your SimpleSAMLphp configuration needs to be outside of the `vendor` directory. The `composer require` downloads a template configuration file to `vendor/simplesamlphp/simplesamlphp/config`. Rather than modifying that file in place (as it isn't included in Git), -copy the `vendor/simplesamlphp/simplesamlphp/config` directory to `simplesamlphp/config` (in [your app root](../../create-apps/app-reference.md#root-directory)). +copy the `vendor/simplesamlphp/simplesamlphp/config` directory to `simplesamlphp/config` (in [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory)). It should contain two files, `config.php` and `authsources.php`. Additionally, create a `simplesamlphp/metadata` directory. diff --git a/sites/platform/src/guides/laravel/deploy/scheduling.md b/sites/platform/src/guides/laravel/deploy/scheduling.md index ca68923c1b..98d2ff2730 100644 --- a/sites/platform/src/guides/laravel/deploy/scheduling.md +++ b/sites/platform/src/guides/laravel/deploy/scheduling.md @@ -14,7 +14,7 @@ Laravel offers a very convenient and flexible way of scheduling tasks. A large s Once the scheduled tasks are defined, they need to be effectively executed at the right time and pace. The recommended way is a cron configuration entry running the `artisan schedule:run` command schedule for every minute. -However, on {{% vendor/name %}} the [minimum time between cron jobs](../../../create-apps/app-reference.md#cron-job-timing) +However, on {{% vendor/name %}} the [minimum time between cron jobs](/create-apps/app-reference/single-runtime-image.md#cron-job-timing) depends on your plan. Task scheduling may then be contradicted by the cron minimum frequency. Schedules outside the specified cron frequency are ignored and the related tasks aren't triggered. diff --git a/sites/platform/src/guides/micronaut/elasticsearch.md b/sites/platform/src/guides/micronaut/elasticsearch.md index 01162d0e4c..6b75a56660 100644 --- a/sites/platform/src/guides/micronaut/elasticsearch.md +++ b/sites/platform/src/guides/micronaut/elasticsearch.md @@ -7,10 +7,10 @@ description: | Configure a Micronaut application with Elasticsearch. --- -Micronaut provides two ways of accessing Elasticsearch: via the lower level `RestClient` or via the `RestHighLevelClient`. To initialize Elasticsearch in your project's cluster so that it can be accessed by a Micronaut application, it is necessary to modify two files. +Micronaut provides two ways of accessing Elasticsearch: via the lower level `RestClient` or via the `RestHighLevelClient`. To initialize Elasticsearch in your project's cluster so that it can be accessed by a Micronaut application, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a service configuration to an existing Micronaut project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/micronaut/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a service configuration to an existing Micronaut project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/micronaut/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add the Elasticsearch service @@ -21,7 +21,7 @@ In your [service configuration](../../add-services/_index.md), include Elasticse ## 2. Add the Elasticsearch relationship -In your [app configuration](../../create-apps/app-reference.md), use the service name `searchelastic` to grant the application access to Elasticsearch via a relationship: +In your [app configuration](/create-apps/app-reference/single-runtime-image.md), use the service name `searchelastic` to grant the application access to Elasticsearch via a relationship: {{< readFile file="registry/images/examples/full/elasticsearch.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/micronaut/jpa.md b/sites/platform/src/guides/micronaut/jpa.md index 8c05cfcb13..0e7583e1ee 100644 --- a/sites/platform/src/guides/micronaut/jpa.md +++ b/sites/platform/src/guides/micronaut/jpa.md @@ -10,7 +10,7 @@ description: | To activate JPA and then have it accessed by the Micronoaut application already configured for {{% vendor/name %}}, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a service configuration to an existing Micronoaut project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/micronaut/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a service configuration to an existing Micronoaut project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/micronaut/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add a SQL database service @@ -21,7 +21,7 @@ In your [service configuration](../../add-services/_index.md), include a SQL dat ## 2. Grant access to the service through a relationship -To access the new service, set a `relationship` in your [app configuration](../../create-apps/app-reference.md#relationships). +To access the new service, set a `relationship` in your [app configuration](/create-apps/app-reference/single-runtime-image.md#relationships). {{< readFile file="registry/images/examples/full/postgresql.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/micronaut/micronaut-data.md b/sites/platform/src/guides/micronaut/micronaut-data.md index 9563c8851f..5f3f550dc9 100644 --- a/sites/platform/src/guides/micronaut/micronaut-data.md +++ b/sites/platform/src/guides/micronaut/micronaut-data.md @@ -10,7 +10,7 @@ description: | [Micronaut Data](https://micronaut-projects.github.io/micronaut-data/latest/guide/) is a database access toolkit that uses Ahead of Time (AoT) compilation to pre-compute queries for repository interfaces that are then executed by a thin, lightweight runtime layer. {{< note >}} -This guide only covers the *addition* of a service configuration to an existing Micronaut project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/micronaut/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a service configuration to an existing Micronaut project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/micronaut/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add a SQL database service @@ -21,7 +21,7 @@ In your [service configuration](../../add-services/_index.md), include a SQL dat ## 2. Grant access to the service through a relationship -To access the new service, set a `relationship` in your [app configuration](../../create-apps/app-reference.md#relationships). +To access the new service, set a `relationship` in your [app configuration](/create-apps/app-reference/single-runtime-image.md#relationships). {{< readFile file="registry/images/examples/full/postgresql.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/micronaut/mongodb.md b/sites/platform/src/guides/micronaut/mongodb.md index 4a89acfb5d..f6f8fd07c6 100644 --- a/sites/platform/src/guides/micronaut/mongodb.md +++ b/sites/platform/src/guides/micronaut/mongodb.md @@ -25,7 +25,7 @@ dbmongo: ## 2. Grant access to MongoDb through a relationship -In your [app configuration](../../create-apps/app-reference.md), use the service name `dbmongo` to grant the application access to MongoDB via a relationship: +In your [app configuration](/create-apps/app-reference/single-runtime-image.md), use the service name `dbmongo` to grant the application access to MongoDB via a relationship: {{< readFile file="registry/images/examples/full/mongodb.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/micronaut/redis.md b/sites/platform/src/guides/micronaut/redis.md index e1090289cd..e4548aa8e5 100644 --- a/sites/platform/src/guides/micronaut/redis.md +++ b/sites/platform/src/guides/micronaut/redis.md @@ -7,10 +7,10 @@ description: | Configure a Micronaut application with Redis. --- -To activate Redis and then have it accessed by the Micronaut application already in {{% vendor/name %}}, it is necessary to modify two files. +To activate Redis and then have it accessed by the Micronaut application already in {{% vendor/name %}}, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a service configuration to an existing Micronaut project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/micronaut/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a service configuration to an existing Micronaut project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/micronaut/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add the Redis service @@ -21,7 +21,7 @@ In your [service configuration](../../add-services/_index.md), include Persisten ## 2. Add the Redis relationship -In your [app configuration](../../create-apps/app-reference.md), use the service name `redisdata` to grant the application access to Elasticsearch via a relationship: +In your [app configuration](/create-apps/app-reference/single-runtime-image.md), use the service name `redisdata` to grant the application access to Elasticsearch via a relationship: {{< readFile file="registry/images/examples/full/redis-persistent.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/quarkus/elasticsearch.md b/sites/platform/src/guides/quarkus/elasticsearch.md index 57a679ec06..41ca648520 100644 --- a/sites/platform/src/guides/quarkus/elasticsearch.md +++ b/sites/platform/src/guides/quarkus/elasticsearch.md @@ -7,10 +7,10 @@ description: | Configure a Quarkus application with Elasticsearch. --- -Quarkus provides two ways of accessing Elasticsearch: via the lower level `RestClient` or via the `RestHighLevelClient`. To initialize Elasticsearch in your project's cluster so that it can be accessed by a Quarkus application, it is necessary to modify two files. +Quarkus provides two ways of accessing Elasticsearch: via the lower level `RestClient` or via the `RestHighLevelClient`. To initialize Elasticsearch in your project's cluster so that it can be accessed by a Quarkus application, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a service configuration to an existing Quarkus project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/quarkus/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a service configuration to an existing Quarkus project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/quarkus/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add the Elasticsearch service @@ -21,7 +21,7 @@ In your [service configuration](../../add-services/_index.md), include Elasticse ## 2. Add the Elasticsearch relationship -In your [app configuration](../../create-apps/app-reference.md), use the service name `searchelastic` to grant the application access to Elasticsearch via a relationship: +In your [app configuration](/create-apps/app-reference/single-runtime-image.md), use the service name `searchelastic` to grant the application access to Elasticsearch via a relationship: {{< readFile file="registry/images/examples/full/elasticsearch.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/quarkus/jpa.md b/sites/platform/src/guides/quarkus/jpa.md index a72b964856..b69a637bab 100644 --- a/sites/platform/src/guides/quarkus/jpa.md +++ b/sites/platform/src/guides/quarkus/jpa.md @@ -10,7 +10,7 @@ description: | Hibernate ORM is a standard [JPA](https://jakarta.ee/specifications/persistence/) implementation. It offers you the full breadth of an Object Relational Mapper and it works well in Quarkus. To activate JPA and then have it accessed by the Quarkus application already configured for {{% vendor/name %}}, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a service configuration to an existing Quarkus project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/quarkus/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a service configuration to an existing Quarkus project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/quarkus/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add a SQL database service @@ -21,7 +21,7 @@ In your [service configuration](../../add-services/_index.md), include a SQL dat ## 2. Grant access to the service through a relationship -To access the new service, set a `relationship` in your [app configuration](../../create-apps/app-reference.md#relationships). +To access the new service, set a `relationship` in your [app configuration](/create-apps/app-reference/single-runtime-image.md#relationships). {{< readFile file="registry/images/examples/full/postgresql.app.yaml" highlight="yaml" configFile="app" >}} @@ -45,4 +45,4 @@ Environment variables names are following the conversion rules of [Eclipse Micro ## 4. Connect to the service -Commit that code and push. The specified cluster will now always point to the PostgreSQL or any SQL service that you wish. \ No newline at end of file +Commit that code and push. The specified cluster will now always point to the PostgreSQL or any SQL service that you wish. diff --git a/sites/platform/src/guides/quarkus/mongodb.md b/sites/platform/src/guides/quarkus/mongodb.md index ff7b149734..93b7dc0d89 100644 --- a/sites/platform/src/guides/quarkus/mongodb.md +++ b/sites/platform/src/guides/quarkus/mongodb.md @@ -9,10 +9,10 @@ description: | MongoDB with Panache provides active record style entities (and repositories) like you have in [Hibernate ORM with Panache](https://quarkus.io/guides/hibernate-orm-panache). It focuses on helping you write your entities in Quarkus. -To activate MongoDB and then have it accessed by the Quarkus application already in {{% vendor/name %}}, it is necessary to modify two files. +To activate MongoDB and then have it accessed by the Quarkus application already in {{% vendor/name %}}, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a MongoDB service configuration to an existing Quarkus project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/quarkus/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a MongoDB service configuration to an existing Quarkus project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/quarkus/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add the MongoDB service @@ -27,7 +27,7 @@ dbmongo: ## 2. Grant access to MongoDb through a relationship -In your [app configuration](../../create-apps/app-reference.md), use the service name `dbmongo` to grant the application access to MongoDB via a relationship: +In your [app configuration](/create-apps/app-reference/single-runtime-image.md), use the service name `dbmongo` to grant the application access to MongoDB via a relationship: {{< readFile file="registry/images/examples/full/mongodb.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/quarkus/panache.md b/sites/platform/src/guides/quarkus/panache.md index 3eea84fbb4..95de7129d7 100644 --- a/sites/platform/src/guides/quarkus/panache.md +++ b/sites/platform/src/guides/quarkus/panache.md @@ -9,10 +9,10 @@ description: | Hibernate ORM is a JPA implementation and offers you the full breadth of an Object Relational Mapper. It makes complex mappings possible, but they can sometimes be difficult. Hibernate ORM with Panache focuses on helping you write your entities in Quarkus. -To activate Hibernate Panache and then have it accessed by the Quarkus application already in {{% vendor/name %}}, it is necessary to modify two files. +To activate Hibernate Panache and then have it accessed by the Quarkus application already in {{% vendor/name %}}, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a service configuration to an existing Quarkus project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](./deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a service configuration to an existing Quarkus project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](./deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add a SQL database service @@ -23,7 +23,7 @@ In your [service configuration](../../add-services/_index.md), include a SQL dat ## 2. Grant access to the service through a relationship -To access the new service, set a `relationship` in your [app configuration](../../create-apps/app-reference.md#relationships). +To access the new service, set a `relationship` in your [app configuration](/create-apps/app-reference/single-runtime-image.md#relationships). {{< readFile file="registry/images/examples/full/postgresql.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/quarkus/redis.md b/sites/platform/src/guides/quarkus/redis.md index 7490e9b5c9..2c7be3f942 100644 --- a/sites/platform/src/guides/quarkus/redis.md +++ b/sites/platform/src/guides/quarkus/redis.md @@ -7,10 +7,10 @@ description: | Configure a Quarkus application with Redis. --- -To activate Redis and then have it accessed by the Quarkus application already in {{% vendor/name %}}, it is necessary to modify two files. +To activate Redis and then have it accessed by the Quarkus application already in {{% vendor/name %}}, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a service configuration to an existing Quarkus project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/quarkus/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a service configuration to an existing Quarkus project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/quarkus/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add the Redis service @@ -21,7 +21,7 @@ In your [service configuration](../../add-services/_index.md), include Persisten ## 2. Add the Redis relationship -In your [app configuration](../../create-apps/app-reference.md), use the service name `searchelastic` to grant the application access to Elasticsearch via a relationship: +In your [app configuration](/create-apps/app-reference/single-runtime-image.md), use the service name `searchelastic` to grant the application access to Elasticsearch via a relationship: {{< readFile file="registry/images/examples/full/redis-persistent.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/spring/elasticsearch.md b/sites/platform/src/guides/spring/elasticsearch.md index 2d54892dfb..1e9348dbcd 100644 --- a/sites/platform/src/guides/spring/elasticsearch.md +++ b/sites/platform/src/guides/spring/elasticsearch.md @@ -7,10 +7,10 @@ description: | Configure a Spring application with Elasticsearch. --- -To activate Elasticsearch and then have it accessed by the Spring application already in {{% vendor/name %}}, it is necessary to modify two files. +To activate Elasticsearch and then have it accessed by the Spring application already in {{% vendor/name %}}, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a service configuration to an existing Spring project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/spring/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a service configuration to an existing Spring project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/spring/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add the Elasticsearch service @@ -21,7 +21,7 @@ In your [service configuration](../../add-services/_index.md), include Elasticse ## 2. Add the Elasticsearch relationship -In your [app configuration](../../create-apps/app-reference.md), use the service name `searchelastic` to grant the application access to Elasticsearch via a relationship: +In your [app configuration](/create-apps/app-reference/single-runtime-image.md), use the service name `searchelastic` to grant the application access to Elasticsearch via a relationship: {{< readFile file="registry/images/examples/full/elasticsearch.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/spring/jpa.md b/sites/platform/src/guides/spring/jpa.md index 97cb8531c5..cf326a76ac 100644 --- a/sites/platform/src/guides/spring/jpa.md +++ b/sites/platform/src/guides/spring/jpa.md @@ -10,7 +10,7 @@ description: | To activate JPA and then have it accessed by the Spring application already configured for {{% vendor/name %}}, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a service configuration to an existing Spring project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/spring/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a service configuration to an existing Spring project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/spring/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add a SQL database service @@ -21,7 +21,7 @@ In your [service configuration](../../add-services/_index.md), include a SQL dat ## 2. Grant access to the service through a relationship -To access the new service, set a `relationship` in your [app configuration](../../create-apps/app-reference.md#relationships). +To access the new service, set a `relationship` in your [app configuration](/create-apps/app-reference/single-runtime-image.md#relationships). {{< readFile file="registry/images/examples/full/postgresql.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/spring/mongodb.md b/sites/platform/src/guides/spring/mongodb.md index 824609b592..b327de963f 100644 --- a/sites/platform/src/guides/spring/mongodb.md +++ b/sites/platform/src/guides/spring/mongodb.md @@ -7,10 +7,10 @@ description: | Configure a Spring application with MongoDB. --- -To activate MongoDB and then have it accessed by the Spring application already in {{% vendor/name %}}, it is necessary to modify two files. +To activate MongoDB and then have it accessed by the Spring application already in {{% vendor/name %}}, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a MongoDB service configuration to an existing Spring project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/spring/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a MongoDB service configuration to an existing Spring project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/spring/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add the MongoDB service @@ -25,7 +25,7 @@ dbmongo: ## 2. Grant access to MongoDb through a relationship -In your [app configuration](../../create-apps/app-reference.md), use the service name `dbmongo` to grant the application access to MongoDB via a relationship: +In your [app configuration](/create-apps/app-reference/single-runtime-image.md), use the service name `dbmongo` to grant the application access to MongoDB via a relationship: {{< readFile file="registry/images/examples/full/mongodb.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/spring/redis.md b/sites/platform/src/guides/spring/redis.md index 12acd7a588..422498e385 100644 --- a/sites/platform/src/guides/spring/redis.md +++ b/sites/platform/src/guides/spring/redis.md @@ -7,10 +7,10 @@ description: | Configure a Spring application with Redis. --- -To activate Redis and then have it accessed by the Spring application already in {{% vendor/name %}}, it is necessary to modify two files. +To activate Redis and then have it accessed by the Spring application already in {{% vendor/name %}}, it is necessary to modify two files. {{< note >}} -This guide only covers the *addition* of a service configuration to an existing Spring project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/spring/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. +This guide only covers the *addition* of a service configuration to an existing Spring project already configured to deploy on {{% vendor/name %}}. Please see the [deployment guide](/guides/spring/deploy/_index.md) for more detailed instructions for setting up app containers and initial projects. {{< /note >}} ## 1. Add the Redis service @@ -22,7 +22,7 @@ include persistent Redis with a [valid supported version](../../add-services/red ## 2. Add the Redis relationship -In your [app configuration](../../create-apps/app-reference.md), use the service name `searchelastic` to grant the application access to Elasticsearch via a relationship: +In your [app configuration](/create-apps/app-reference/single-runtime-image.md), use the service name `searchelastic` to grant the application access to Elasticsearch via a relationship: {{< readFile file="registry/images/examples/full/redis-persistent.app.yaml" highlight="yaml" configFile="app" >}} diff --git a/sites/platform/src/guides/symfony/environment-variables.md b/sites/platform/src/guides/symfony/environment-variables.md index 730d94ebef..22848362be 100644 --- a/sites/platform/src/guides/symfony/environment-variables.md +++ b/sites/platform/src/guides/symfony/environment-variables.md @@ -99,7 +99,7 @@ symfony ssh -- symfony var:export --multiline ``` Each exposed environment variable is prefixed by the relationship name. -For example, if you have the following [relationships](/create-apps/app-reference.md#relationships) in your configuration: +For example, if you have the following [relationships](/create-apps/app-reference/single-runtime-image#relationships) in your configuration: ```yaml relationships: diff --git a/sites/platform/src/guides/symfony/workers.md b/sites/platform/src/guides/symfony/workers.md index 62c8ae598a..8ab261a5fb 100644 --- a/sites/platform/src/guides/symfony/workers.md +++ b/sites/platform/src/guides/symfony/workers.md @@ -38,7 +38,7 @@ The ``commands.start`` key is required. It specifies the command you can use to launch the application worker. If the command specified by the ``start`` key terminates, it's restarted automatically. -For more information, see [Workers](../../create-apps/app-reference#workers). +For more information, see [Workers](/create-apps/app-reference/single-runtime-image#workers). {{< note title="Warning">}} diff --git a/sites/platform/src/guides/wordpress/deploy/configure.md b/sites/platform/src/guides/wordpress/deploy/configure.md index eb8957759f..9a6c99369e 100644 --- a/sites/platform/src/guides/wordpress/deploy/configure.md +++ b/sites/platform/src/guides/wordpress/deploy/configure.md @@ -10,12 +10,12 @@ description: | {{% guides/config-app template="wordpress-composer" %}} -Notice that the build `flavor` is set to `composer`, which will automatically download WordPress core, as well as your plugins, themes, and dependencies during the build step as defined in your `composer.json` file. Since WordPress's caching and uploads require write access at runtime, they've been given corresponding [mounts](../../../create-apps/app-reference.md#mounts) defined for them at the bottom of the file. MariaDB is accessible to WordPress internally at `database.internal` thanks to the relationship definition `database`. The [WordPress CLI](https://packagist.org/packages/wp-cli/wp-cli) is added as a build dependency, but we will still need to add some additional dependencies in the next step so that it can be used by the application and via SSH. +Notice that the build `flavor` is set to `composer`, which will automatically download WordPress core, as well as your plugins, themes, and dependencies during the build step as defined in your `composer.json` file. Since WordPress's caching and uploads require write access at runtime, they've been given corresponding [mounts](/create-apps/app-reference/single-runtime-image.md#mounts) defined for them at the bottom of the file. MariaDB is accessible to WordPress internally at `database.internal` thanks to the relationship definition `database`. The [WordPress CLI](https://packagist.org/packages/wp-cli/wp-cli) is added as a build dependency, but we will still need to add some additional dependencies in the next step so that it can be used by the application and via SSH. {{< /guides/config-app >}} {{< note >}} -During the template's build hook above, you see an `rsync` command that allows you to commit and use plugins that aren't accessible via Composer. The command moves all non-Composer plugins in a committed `plugins` directory to the final `wp-content/plugins` destination so that they can be enabled through the administration panel. +During the template's build hook above, you see an `rsync` command that allows you to commit and use plugins that aren't accessible via Composer. The command moves all non-Composer plugins in a committed `plugins` directory to the final `wp-content/plugins` destination so that they can be enabled through the administration panel. If you are migrating WordPress or starting from scratch, you should copy this line for your committed non-Composer plugins and, if needed, modify it to move committed `themes` to `wp-content/themes` in the same way. {{< /note >}} diff --git a/sites/platform/src/guides/wordpress/deploy/next-steps.md b/sites/platform/src/guides/wordpress/deploy/next-steps.md index 21d544b2fa..1d9bcf33a9 100644 --- a/sites/platform/src/guides/wordpress/deploy/next-steps.md +++ b/sites/platform/src/guides/wordpress/deploy/next-steps.md @@ -22,7 +22,7 @@ hooks: Here, you can commit plugins to the repository in a `plugins` subdirectory, which are placed into the WordPress installation during the build. It's assumed that these packages stick to best practices and don't write to the file system at runtime and when enabling them. -You can get around this issue by defining a [mount](../../../create-apps/app-reference.md#mounts) where a plugin requires write access, +You can get around this issue by defining a [mount](/create-apps/app-reference/single-runtime-image.md#mounts) where a plugin requires write access, but you need to remember that the contents at that mount location are wiped when deployment begins, so you need to copy and re-copy accordingly. @@ -40,7 +40,7 @@ $ composer require wpackagist-theme/neve This updates your `composer.json` and `composer.lock` files. Once you push the change to {{% vendor/name %}}, the package is downloaded during the WordPress build. All that's left is to sign in to the administration dashboard on your deployed site -and enable plugins and themes from the Plugins and Appearance settings, respectively. +and enable plugins and themes from the Plugins and Appearance settings, respectively. ## Set up a WooCommerce site @@ -57,7 +57,7 @@ Push those changes on a new environment and configure your store through the adm ## Adding private plugins and themes via Composer If your plugins aren't accessible from WPPackagist or Packagist, but are still valid packages, -you can use them in your project by defining local `repositories` for them in your `composer.json` file. +you can use them in your project by defining local `repositories` for them in your `composer.json` file. ```json "repositories":[ @@ -85,14 +85,14 @@ you can use them in your project by defining local `repositories` for them in yo In the snippet above, other packages can still be downloaded from WPPackagist, but now two custom `path` repositories have been defined from `/custom/[themes|plugins]` locally. Adding packages from these sources then only requires `composer require author/custom_plugin` -to ensure that the plugin at `/custom/plugin/author/custom_plugin` is installed by {{% vendor/name %}} when WordPress is built. +to ensure that the plugin at `/custom/plugin/author/custom_plugin` is installed by {{% vendor/name %}} when WordPress is built. ## Updating WordPress, plugins, and themes Your WordPress site is fully managed by Composer, which means so are updates to WordPress core itself. Run `composer update` periodically to get new versions of WordPress core, as well as any plugins or themes your have installed. -Commit the resulting changes to your `composer.lock` file and push again to {{% vendor/name %}}. +Commit the resulting changes to your `composer.lock` file and push again to {{% vendor/name %}}. The [Composer documentation](https://getcomposer.org/doc/) has more information on options to update individual modules or perform other tasks. @@ -103,4 +103,4 @@ All updates should be done through Composer to update the lock file, and then pu {{% guides/lando repo="wordpress-composer" %}} -{{< guide-buttons type="last" >}} \ No newline at end of file +{{< guide-buttons type="last" >}} diff --git a/sites/platform/src/guides/wordpress/redis.md b/sites/platform/src/guides/wordpress/redis.md index d98bd3c76a..66d8364bfd 100644 --- a/sites/platform/src/guides/wordpress/redis.md +++ b/sites/platform/src/guides/wordpress/redis.md @@ -43,7 +43,7 @@ If you named the service something different in step 1, change `rediscache` to t Add the Redis extension for PHP in one of two ways: -* In your [app configuration](../../create-apps/app-reference.md#extensions) (for extension versions tied to the PHP version) +* In your [app configuration](/create-apps/app-reference/single-runtime-image.md#extensions) (for extension versions tied to the PHP version) * Using a [builder script](../../languages/php/redis.md) (if you need more control over the extension version) ### 4. Add the Redis library @@ -77,7 +77,7 @@ Then commit the resulting changes to your `composer.json` and `composer.lock` fi To enable the Redis cache to work with WordPress, the `object-cache.php` file needs to be copied from the plugin's directory to the `wp-content` directory. -Add the following line to the bottom of your `build` hook in your [app configuration](../../create-apps/app-reference.md#hooks), +Add the following line to the bottom of your `build` hook in your [app configuration](/create-apps/app-reference/single-runtime-image.md#hooks), adjusting the paths based on where your plugins are located: {{< codetabs >}} diff --git a/sites/platform/src/increase-observability/logs/access-logs.md b/sites/platform/src/increase-observability/logs/access-logs.md index 75df236d46..e63772b670 100644 --- a/sites/platform/src/increase-observability/logs/access-logs.md +++ b/sites/platform/src/increase-observability/logs/access-logs.md @@ -73,7 +73,7 @@ hovering on the next unselected line gives you the amount of time that passed be Events that occur within an app container are logged within that container. The logs can be written to, but you should do so only with standard logging mechanisms. -If your app has its own logging mechanism, use it to write to a dedicated logs [mount](../../create-apps/app-reference.md#mounts). +If your app has its own logging mechanism, use it to write to a dedicated logs [mount](/create-apps/app-reference/single-runtime-image.md#mounts). To access the logs of various types of events: @@ -99,7 +99,7 @@ To view more lines, use the `--lines` flag. title=Using SSH directly +++ -1. Access the container by running +1. Access the container by running ``` bash {{% vendor/cli %}} ssh -e {{% variable "ENVIRONMENT_NAME" %}} @@ -120,7 +120,7 @@ title=Using SSH directly {{< /codetabs >}} All log files are trimmed to 100 MB automatically. -If you need larger logs, set up a [cron job](../../create-apps/app-reference.md#crons) to upload them to third-party storage. +If you need larger logs, set up a [cron job](/create-apps/app-reference/single-runtime-image.md#crons) to upload them to third-party storage. See an example of [uploading logs to Amazon S3](https://gitlab.com/contextualcode/platformsh-store-logs-at-s3) from Contextual Code. ### Types of container logs diff --git a/sites/platform/src/increase-observability/metrics/_index.md b/sites/platform/src/increase-observability/metrics/_index.md index 811c39f3d8..51c651a224 100644 --- a/sites/platform/src/increase-observability/metrics/_index.md +++ b/sites/platform/src/increase-observability/metrics/_index.md @@ -105,7 +105,7 @@ Burst allows your container to use additional resources when they aren't needed If you have a container in a prolonged burst state, you might want to consider: * [Optimizing your code](../integrate-observability/_index.md) -* Changing your [app size](../../create-apps/app-reference.md#sizes) +* Changing your [app size](/create-apps/app-reference/single-runtime-image.md#sizes) or [service size](../../add-services/_index.md#size) * [Increasing your plan](../../administration/pricing/_index.md) @@ -124,7 +124,7 @@ If the resources are high and hovering close to the 100% threshold, you might want to consider: * [Optimizing your code](../integrate-observability/_index.md) (if possible) -* Changing your [app size](../../create-apps/app-reference.md#sizes) +* Changing your [app size](/create-apps/app-reference/single-runtime-image.md#sizes) or [service size](../../add-services/_index.md#size) * [Increasing your plan](../../administration/pricing/_index.md) diff --git a/sites/platform/src/increase-observability/metrics/dedicated-generation-3.md b/sites/platform/src/increase-observability/metrics/dedicated-generation-3.md index 79ae159d4d..c41b41dc84 100644 --- a/sites/platform/src/increase-observability/metrics/dedicated-generation-3.md +++ b/sites/platform/src/increase-observability/metrics/dedicated-generation-3.md @@ -8,7 +8,7 @@ description: "Understand how to read metrics for {{% names/dedicated-gen-3 %}} e * App containers: one or more [app containers](../../create-apps/_index.md) * Service containers: zero or more [service containers](../../add-services/_index.md) -* Worker containers: zero or more [worker instances](../../create-apps/app-reference.md#workers). +* Worker containers: zero or more [worker instances](/create-apps/app-reference/single-runtime-image.md#workers). Infrastructure metrics report CPU, RAM, and disk space for all containers. @@ -33,7 +33,7 @@ Once you've read the metrics, see [recommendations for action](./_index.md#dedic ### App container Metrics graphs for the app container show CPU, RAM, and disk allocation and usage across all hosts. -The persistent disk has been configured in the [app configuration](../../create-apps/app-reference.md#top-level-properties) +The persistent disk has been configured in the [app configuration](/create-apps/app-reference/single-runtime-image.md#top-level-properties) at 4.86 GB, while the temporary disk is 3.99 GB by default. ![All of the metrics for the app container](/images/metrics/app-container-gen3.png) @@ -61,7 +61,7 @@ while the temporary disk is 3.99 GB by default. ### Worker container Metrics graphs for the Scheduler worker container show CPU, RAM, and disk allocation and usage across all hosts. -The persistent disk has been configured in the [app configuration](../../create-apps/app-reference.md#top-level-properties) +The persistent disk has been configured in the [app configuration](/create-apps/app-reference/single-runtime-image.md#top-level-properties) at 4.86 GB (the same as the app), while the temporary disk is 3.99 GB by default. ![All of the metrics for the Scheduler worker container](/images/metrics/schedule-worker-container-gen3.png) diff --git a/sites/platform/src/increase-observability/metrics/grid.md b/sites/platform/src/increase-observability/metrics/grid.md index 875e6c3237..f43978600e 100644 --- a/sites/platform/src/increase-observability/metrics/grid.md +++ b/sites/platform/src/increase-observability/metrics/grid.md @@ -8,7 +8,7 @@ Grid environments consist of: * App containers: one or more [app containers](../../create-apps/_index.md) * Service containers: zero or more [service containers](../../add-services/_index.md) -* Worker containers: zero or more [worker instances](../../create-apps/app-reference.md#workers). +* Worker containers: zero or more [worker instances](/create-apps/app-reference/single-runtime-image.md#workers). Infrastructure metrics report CPU, RAM, and disk space for app and worker containers and CPU and disk space for service containers. @@ -42,7 +42,7 @@ So the resources you see for a given container don't equal the total resources f This reference project has a single app, two services (MySQL and Redis), and two workers. The plan size for this project is [Medium](https://platform.sh/pricing/). -The appropriate resources have been [allocated automatically](../../create-apps/app-reference.md#sizes) for each container +The appropriate resources have been [allocated automatically](/create-apps/app-reference/single-runtime-image.md#sizes) for each container based on the number and type of containers for this plan size. The graphs show the current average usage in relation to the allocated resources. @@ -51,7 +51,7 @@ Once you've read the metrics, see [recommendations for action](./_index.md#grid- ### App container Metrics graphs for the app container show CPU, RAM, and disk allocation and usage. -The persistent disk has been configured in the [app configuration](../../create-apps/app-reference.md#top-level-properties) +The persistent disk has been configured in the [app configuration](/create-apps/app-reference/single-runtime-image.md#top-level-properties) at 1.91 GB, while the temporary disk is 3.99 GB by default. ![All of the metrics for the app container](/images/metrics/app-container.png) @@ -86,13 +86,13 @@ while the temporary disk is 3.99 GB by default. ### Worker containers Metrics graphs for the App-Horizon worker container show CPU, RAM, and disk allocation and usage. -The persistent disk has been configured in the [app configuration](../../create-apps/app-reference.md#top-level-properties) +The persistent disk has been configured in the [app configuration](/create-apps/app-reference/single-runtime-image.md#top-level-properties) at 1.91 GB, while the temporary disk is 3.99 GB by default. ![All of the metrics for the App-Horizon worker container](/images/metrics/horizon-worker-container.png) Metrics graphs for the App-Schedule worker container show CPU, RAM, and disk allocation and usage. -The persistent disk has been configured in the [app configuration](../../create-apps/app-reference.md#top-level-properties) +The persistent disk has been configured in the [app configuration](/create-apps/app-reference/single-runtime-image.md#top-level-properties) at 1.91 GB, while the temporary disk is 3.99 GB by default. ![All of the metrics for the App-Horizon worker container](/images/metrics/schedule-worker-container.png) diff --git a/sites/platform/src/integrations/activity/reference.md b/sites/platform/src/integrations/activity/reference.md index cfa0349fcc..ac92abb166 100644 --- a/sites/platform/src/integrations/activity/reference.md +++ b/sites/platform/src/integrations/activity/reference.md @@ -126,7 +126,7 @@ The following table presents the possible activity types: | `environment.backup.delete` | A user deleted a [backup](/environments/backup.md). | | `environment.branch` | A [new branch](/environments.md#create-environments) has been created via the CLI, Console, or API. A branch created via Git shows up as `environment.push`. | | `environment.certificate.renewal` | An environment's SSL certificate has been [renewed](/define-routes/https.md#certificate-renewals). | -| `environment.cron` | A [cron job](/create-apps/app-reference.md#crons) has completed. | +| `environment.cron` | A [cron job](/create-apps/app-reference/single-runtime-image.md#crons) has completed. | | `environment.deactivate` | An environment has been made [inactive](/glossary.md#inactive-environment). | | `environment.delete` | An environment's code was deleted through Git. | | `environment.domain.create` | A new [domain](administration/web/configure-project.md#domains) has been associated with the environment. | @@ -333,8 +333,7 @@ To test responses, [set up a webhook](./webhooks.md#setup). ### Cron -When a cron job is triggered, the activity contains all -the [job's information](../../create-apps/app-reference.md#crons). +When a cron job is triggered, the activity contains all the [job's information](/create-apps/app-reference/single-runtime-image.md#crons). The following example response was triggered by a setting where the cron is scheduled to run every five minutes (`5 * * * *`) with the command `sleep 60 && echo sleep-60-finished && date` and times out after 86,400 seconds. @@ -571,8 +570,8 @@ The `environment` property contains the settings for the environment that was pu ``` The `deployment` property contains the settings for the deployment, -including the [image type](../../create-apps/app-reference.md#types) and -[resource allocation](../../create-apps/app-reference.md#sizes). +including the [image type](/create-apps/app-reference/single-runtime-image.md#types) and +[resource allocation](/create-apps/app-reference/single-runtime-image.md#sizes). The following example shows a shortened excerpt of the `deployment` property: diff --git a/sites/platform/src/languages/dotnet.md b/sites/platform/src/languages/dotnet.md index a24101a979..6e19021f6d 100644 --- a/sites/platform/src/languages/dotnet.md +++ b/sites/platform/src/languages/dotnet.md @@ -71,7 +71,7 @@ Also, should the program terminate for any reason, it's automatically restarted. Note that the start command _must_ run in the foreground. Incoming requests are passed to the application using either a TCP (default) or Unix socket. -The application must use the [appropriate environment variable](../create-apps/app-reference.md#where-to-listen) to determine the URI to listen on. +The application must use the [appropriate environment variable](/create-apps/app-reference/single-runtime-image.md#where-to-listen) to determine the URI to listen on. For a TCP socket ([recommended](https://go.microsoft.com/fwlink/?linkid=874850)), the application must listen on `http://127.0.0.1`, using the `PORT` environment variable. diff --git a/sites/platform/src/languages/elixir.md b/sites/platform/src/languages/elixir.md index 51223460ea..7ddd58f68d 100644 --- a/sites/platform/src/languages/elixir.md +++ b/sites/platform/src/languages/elixir.md @@ -3,6 +3,8 @@ title: "Elixir" description: "{{% vendor/name %}} supports building and deploying applications written in Elixir. There is no default flavor for the build phase, but you can define it explicitly in your build hook. {{% vendor/name %}} Elixir images support both committed dependencies and download-on-demand. The underlying Erlang version is 22.0.7." --- +{{% composable/disclaimer %}} + {{% description %}} ## Supported versions @@ -77,7 +79,7 @@ hooks: ``` {{< note >}} -That build hook works for most cases and assumes that your `mix.exs` file is located at [your app root](../create-apps/app-reference.md#root-directory). +That build hook works for most cases and assumes that your `mix.exs` file is located at [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory). {{< /note >}} @@ -147,7 +149,7 @@ See [Config Reader Documentation](../development/variables/use-variables.md#acce The services configuration is available in the environment variable `PLATFORM_RELATIONSHIPS`. -Given a [relationship](/create-apps/app-reference.md#relationships) defined in `{{< vendor/configfile "app" >}}`: +Given a [relationship](/create-apps/app-reference/single-runtime-image#relationships) defined in `{{< vendor/configfile "app" >}}`: ```yaml {configFile="app"} # Relationships enable an app container's access to a service. diff --git a/sites/platform/src/languages/go.md b/sites/platform/src/languages/go.md index 476a81f5af..239a1dbedd 100644 --- a/sites/platform/src/languages/go.md +++ b/sites/platform/src/languages/go.md @@ -3,6 +3,8 @@ title: "Go" description: "{{% vendor/name %}} supports building and deploying applications written in Go using Go modules. They're compiled during the Build hook phase, and support both committed dependencies and download-on-demand." --- +{{% composable/disclaimer %}} + {{% description %}} ## Supported versions diff --git a/sites/platform/src/languages/java/_index.md b/sites/platform/src/languages/java/_index.md index f4008658ff..95b484d1eb 100644 --- a/sites/platform/src/languages/java/_index.md +++ b/sites/platform/src/languages/java/_index.md @@ -4,6 +4,8 @@ description: Java is a general-purpose programming language, and one of the most layout: single --- +{{% composable/disclaimer %}} + {{% description %}} ## Supported versions diff --git a/sites/platform/src/languages/java/frameworks.md b/sites/platform/src/languages/java/frameworks.md index bbc3d31922..99583ce352 100644 --- a/sites/platform/src/languages/java/frameworks.md +++ b/sites/platform/src/languages/java/frameworks.md @@ -4,6 +4,8 @@ weight: 1 sidebarTitle: "Frameworks" --- +{{% composable/disclaimer %}} + ## Hibernate [Hibernate ORM](https://hibernate.org/) is an object-relational mapping tool for the Java programming language. It provides a framework for mapping an object-oriented domain model to a relational database. Hibernate handles object-relational impedance mismatch problems by replacing direct, persistent database accesses with high-level object handling functions. diff --git a/sites/platform/src/languages/java/migration.md b/sites/platform/src/languages/java/migration.md index 34a004dd7e..cbbf4dc2da 100644 --- a/sites/platform/src/languages/java/migration.md +++ b/sites/platform/src/languages/java/migration.md @@ -4,6 +4,8 @@ weight: 2 sidebarTitle: "Moving to {{% vendor/name %}}" --- +{{% composable/disclaimer %}} + It is common to have a Java application that you want to migrate to {{% vendor/name %}}. {{% vendor/name %}} supports several styles of Java application, such as monolith, microservices, stateful, and stateless. @@ -48,12 +50,12 @@ web: ``` 1. [A Java version](/languages/java/_index.md#supported-versions), e,g.: `java:{{% latest "java" %}}` 2. [Hooks define what happens when building the application](../../create-apps/hooks/_index.md). This build process typically generates an executable file such as a uber-jar e.g.: `mvn clean package` -3. [The commands key defines the command to launch the application](../../create-apps/app-reference.md#web-commands). E.g.: `java -jar file.jar` +3. [The commands key defines the command to launch the application](/create-apps/app-reference/single-runtime-image.md#web-commands). E.g.: `java -jar file.jar` 4. In the start's command needs to receive the port where the application will execute thought the `PORT` environment. That's best when your app follows the port bind principle. E.g.: `java -jar jar --port=$PORT` {{< note >}} -Be aware that after the build, it creates a read-only system. You have the [mount option to create a writable folder](../../create-apps/app-reference.md#mounts). +Be aware that after the build, it creates a read-only system. You have the [mount option to create a writable folder](/create-apps/app-reference/single-runtime-image.md#mounts). {{< /note >}} @@ -102,9 +104,9 @@ You can load balance to some or [all applications in the project cluster](https: ## Access to managed services {{% vendor/name %}} provides [managed services](/add-services/_index.md) such as databases, cache and search engines. -However, you can use a database or any services such as a transition process, just be aware of the [firewall](../../create-apps/app-reference.md#firewall). +However, you can use a database or any services such as a transition process, just be aware of the [firewall](/create-apps/app-reference/single-runtime-image.md#firewall). -When applications need to access a service, it is important to include the [`relationships` key](../../create-apps/app-reference.md#relationships). +When applications need to access a service, it is important to include the [`relationships` key](/create-apps/app-reference/single-runtime-image.md#relationships). By default an application may not talk to any other container without a `relationship` explicitly allowing access. To connect to a service from your deployed application, you need to pass the relationships information into your application's configuration. diff --git a/sites/platform/src/languages/java/tuning.md b/sites/platform/src/languages/java/tuning.md index 0c12557d8a..bbcfeb21b6 100644 --- a/sites/platform/src/languages/java/tuning.md +++ b/sites/platform/src/languages/java/tuning.md @@ -4,6 +4,8 @@ weight: 2 sidebarTitle: "Tuning" --- +{{% composable/disclaimer %}} + There are a number of settings that can be adjusted for each application to optimize its performance on {{% vendor/name %}}. ## Memory limits diff --git a/sites/platform/src/languages/lisp.md b/sites/platform/src/languages/lisp.md index a7881c2dc1..b1986ae602 100644 --- a/sites/platform/src/languages/lisp.md +++ b/sites/platform/src/languages/lisp.md @@ -3,6 +3,8 @@ title: "Lisp" description: "{{% vendor/name %}} supports building and deploying applications written in Lisp using Common Lisp (the SBCL version) with ASDF and Quick Lisp support. They're compiled during the Build phase, and support both committed dependencies and download-on-demand." --- +{{% composable/disclaimer %}} + {{% description %}} ## Supported versions diff --git a/sites/platform/src/languages/nodejs/_index.md b/sites/platform/src/languages/nodejs/_index.md index 0491df753c..7e0469772a 100644 --- a/sites/platform/src/languages/nodejs/_index.md +++ b/sites/platform/src/languages/nodejs/_index.md @@ -7,6 +7,8 @@ keywords: - bun runtime --- +{{% composable/disclaimer %}} + Node.js is a popular asynchronous JavaScript runtime. Deploy scalable Node.js apps of all sizes on {{% vendor/name %}}. You can also develop a microservice architecture mixing JavaScript and other apps with [multi-app projects](../../create-apps/multi-app/_index.md). @@ -170,13 +172,13 @@ web: ## Dependencies By default, {{% vendor/name %}} assumes you're using npm as a package manager. -If your code has a `package.json`, the following command is run as part of the default [build flavor](../../create-apps/app-reference.md#build): +If your code has a `package.json`, the following command is run as part of the default [build flavor](/create-apps/app-reference/single-runtime-image.md#build): ```bash npm prune --userconfig .npmrc && npm install --userconfig .npmrc ``` -This means you can specify configuration in a `.npmrc` file in [your app root](../../create-apps/app-reference.md#root-directory). +This means you can specify configuration in a `.npmrc` file in [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory). ### Use Yarn as a package manager diff --git a/sites/platform/src/languages/nodejs/debug.md b/sites/platform/src/languages/nodejs/debug.md index bd5eb1a07c..f780caa5b4 100644 --- a/sites/platform/src/languages/nodejs/debug.md +++ b/sites/platform/src/languages/nodejs/debug.md @@ -3,6 +3,8 @@ title: "Debugging" weight: 1 --- +{{% composable/disclaimer %}} + Effectively debugging web apps takes effort, especially when an HTTP request goes through multiple layers before reaching your web app. Follow the steps below to debug a specific app. diff --git a/sites/platform/src/languages/nodejs/node-version.md b/sites/platform/src/languages/nodejs/node-version.md index f89162f9a8..f43a03f9b0 100644 --- a/sites/platform/src/languages/nodejs/node-version.md +++ b/sites/platform/src/languages/nodejs/node-version.md @@ -4,6 +4,8 @@ weight: 1 description: See how to manage different Node.js versions in your {{% vendor/name %}} containers." --- +{{% composable/disclaimer %}} + Each {{% vendor/name %}} container image includes a specific language in a specific version. A set of dependencies is also provided based on that language version. This ensures that your application container is as small and efficient as possible. @@ -33,7 +35,7 @@ including Windows Subsystem for Linux. title=.nvmrc +++ -Create a `.nvmrc` file in [your app root](../../create-apps/app-reference.md#root-directory): +Create a `.nvmrc` file in [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory): ```yaml {location=".nvmrc"} v16.13.2 @@ -45,7 +47,7 @@ v16.13.2 title=.n-node-version/.node-version +++ -Create a `.n-node-version` or `.node-version` file in [your app root](../../create-apps/app-reference.md#root-directory): +Create a `.n-node-version` or `.node-version` file in [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory): ```yaml {location=".n-node-version or .node-version"} 16.13.2 diff --git a/sites/platform/src/languages/php/_index.md b/sites/platform/src/languages/php/_index.md index 8ebce40460..2748d9e33c 100644 --- a/sites/platform/src/languages/php/_index.md +++ b/sites/platform/src/languages/php/_index.md @@ -4,6 +4,14 @@ description: Deploy PHP apps on {{% vendor/name %}}. layout: single --- +{{% note theme="info" %}} + +You can now use the Upsun composable image (BETA) to install runtimes and tools in your application container. +To find out more about this feature, see the [dedicated documentation page](/create-apps/app-reference/composable-image.md).
+Also, see how you can [modify your PHP runtime when using a composable image](#modify-your-php-runtime-when-using-a-composable-image). + +{{% /note %}} + ## Supported versions {{% major-minor-versions-note configMinor="true" %}} @@ -68,14 +76,14 @@ type: 'php:{{% latest "php" %}}' ``` ### 2. Serve your app -To serve your app, define what (and how) content should be served by setting the [`locations` parameter](../../create-apps/app-reference.md#locations). +To serve your app, define what (and how) content should be served by setting the [`locations` parameter](/create-apps/app-reference/single-runtime-image.md#locations). Usually, it contains the two following (optional) keys: - `root` for the document root, the directory to which all requests for existing `.php` and static files (such as `.css`, `.jpg`) are sent. - `passthru` to [define a front controller](../../create-apps/web/php-basic.md#set-different-rules-for-specific-locations) to handle nonexistent files. - The value is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). + The value is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). {{< note >}} @@ -125,20 +133,20 @@ web: ## Dependencies Up to PHP version 8.1, it's assumed that you're using [Composer](https://getcomposer.org/) 1.x to manage dependencies. -If you have a `composer.json` file in your code, the default [build flavor is run](../../create-apps/app-reference.md#build): +If you have a `composer.json` file in your code, the default [build flavor is run](/create-apps/app-reference/single-runtime-image.md#build): ```bash composer --no-ansi --no-interaction install --no-progress --prefer-dist --optimize-autoloader ``` -To use Composer 2.x on your project, either use PHP 8.2+ or, in your app configuration, add the following [dependency](../../create-apps/app-reference.md#dependencies): +To use Composer 2.x on your project, either use PHP 8.2+ or, in your app configuration, add the following [dependency](/create-apps/app-reference/single-runtime-image.md#dependencies): ```yaml {configFile="app"} dependencies: php: composer/composer: '^2' ``` -Adding a dependency to the [dependencies block](../../create-apps/app-reference.md#dependencies) makes it available globally. +Adding a dependency to the [dependencies block](/create-apps/app-reference/single-runtime-image.md#dependencies) makes it available globally. So you can then use included dependencies as commands within your app container. You can add multiple global dependencies to the dependencies block, such as [Node.js](../nodejs/_index.md#2-specify-any-global-dependencies). @@ -166,7 +174,7 @@ hooks: That installs production dependencies with Composer but not development dependencies. The same can be achieved by using the default build flavor and [adding the `COMPOSER_NO_DEV` variable](../../development/variables/set-variables.md). -See more on [build flavors](../../create-apps/app-reference.md#build). +See more on [build flavors](/create-apps/app-reference/single-runtime-image.md#build). ### Alternative repositories @@ -291,7 +299,7 @@ markdownify=false ## PHP settings -You can configure your PHP-FPM runtime configuration by specifying the [runtime in your app configuration](../../create-apps/app-reference.md#runtime). +You can configure your PHP-FPM runtime configuration by specifying the [runtime in your app configuration](/create-apps/app-reference/single-runtime-image.md#runtime). In addition to changes in runtime, you can also change the PHP settings. Some commonly used settings are: @@ -380,7 +388,7 @@ For more information, see how to use [PHP-specific variables](../../development/ title=Using `php.ini` +++ -You can provide a custom `php.ini` file at the [app root](../../create-apps/app-reference.md#root-directory). +You can provide a custom `php.ini` file at the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). Using this method isn't recommended since it offers less flexibility and is more error-prone. Consider using variables instead. @@ -431,20 +439,20 @@ Common functions to disable include: PHP has two execution modes you can choose from: - The command line interface mode (PHP-CLI) is the mode used for command line scripts and standalone apps. - This is the mode used when you're logged into your container via SSH, for [crons](../../create-apps/app-reference.md#crons), + This is the mode used when you're logged into your container via SSH, for [crons](/create-apps/app-reference/single-runtime-image.md#crons), and usually also for [alternate start commands](#alternate-start-commands). To use PHP-CLI, run your script with `php {{}}`, - where {{}} is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). + where {{}} is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). - The Common Gateway Interface mode (PHP-CGI) is the mode used for web apps and web requests. This is the default mode when the `start` command isn't explicitly set. To use PHP-CGI, run your script with a symlink: `/usr/bin/start-php-app {{}}`, - where {{}} is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). + where {{}} is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). With PHP-CGI, PHP is run using the FastCGI Process Manager (PHP-FPM). ## Alternate start commands To specify an alternative process to run your code, set a `start` command. -For more information about the start command, see the [web commands reference](../../create-apps/app-reference.md#web-commands). +For more information about the start command, see the [web commands reference](/create-apps/app-reference/single-runtime-image.md#web-commands). By default, start commands use PHP-CLI. Find out how and when to use each [execution mode](#execution-mode). @@ -474,7 +482,7 @@ web: {{< /snippet >}} ``` - {{}} is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). + {{}} is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). <---> @@ -494,7 +502,7 @@ web: {{< /snippet >}} ``` - {{}} is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). + {{}} is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). 3. Configure the container to listen on a TCP socket: @@ -508,7 +516,7 @@ web: ``` When you listen on a TCP socket, the `$PORT` environment variable is automatically set. - See more options on how to [configure where requests are sent](../../create-apps/app-reference.md#upstream). + See more options on how to [configure where requests are sent](/create-apps/app-reference/single-runtime-image.md#upstream). You might have to configure your app to connect via the `$PORT` TCP socket, especially when using web servers such as [Swoole](swoole.md) or [Roadrunner](https://github.com/roadrunner-server/roadrunner). @@ -545,7 +553,7 @@ web: ``` {{}} is the bash script created in step 1. - Both {{}} and {{}} are file paths relative to the [app root](../../create-apps/app-reference.md#root-directory). + Both {{}} and {{}} are file paths relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). {{< /codetabs >}} @@ -598,3 +606,59 @@ See [complete working examples for C and Rust](https://github.com/platformsh-exa ## Project templates {{< repolist lang="php" displayName="PHP" >}} + +## Modify your PHP runtime when using a composable image + +{{% note theme= "warning" %}} + +This section is only relevant when using the Upsun [composable image (BETA)](/create-apps/app-reference/composable-image.md). + +{{% /note %}} + +The following table presents the possible modifications you can make to your PHP primary runtime using the `stack` key and composable image. +Each modification should be listed below the stack chosen (i.e. `extensions` are enabled under `.applications.frontend.stack[0]["php@8.3"].extensions` for PHP 8.3). +Xdebug is an exception, and should be configured from its extension listing. +See the example below for more details. + +| Name | Type | Description | +|-----------------------------|------------------------------------------------------------|--------------------------------------------------------------------------------------------| +| `extensions` | List of `string`s OR [extensions definitions](/create-apps/app-reference/composable-image#php-extensions-and-python-packages) | [PHP extensions](/languages/php/extensions.md) to enable. | +| `disabled_extensions` | List of `string`s | [PHP extensions](/languages/php/extensions.md) to disable. | +| `request_terminate_timeout` | `integer` | The timeout for serving a single request after which the PHP-FPM worker process is killed. | +| `sizing_hints` | A [sizing hints definition](/create-apps/app-reference/composable-image#sizing-hints) | The assumptions for setting the number of workers in your PHP-FPM runtime. | +| `xdebug` | An Xdebug definition | The setting to turn on [Xdebug](/languages/php/xdebug.md). | + +Here is an example configuration: + +```yaml {configFile="app"} +name: frontend + +stack: + - "php@8.3": + extensions: + - apcu # A PHP extension made available to the PHP runtime + - sodium + - xsl + - pdo_sqlite + - xdebug: + idekey: YOUR_KEY + + disabled_extensions: + - gd + + request_terminate_timeout: 200 + + sizing_hints: + request_memory: 45 + reserved_memory: 70 + + - "php83Extensions.apcu" # A PHP extension made available to all runtimes. + - "python@3.12" + - "python312Packages.yq" +``` + +{{% note %}} + +You can also set your [app's runtime timezone](/create-apps/timezone.md). + +{{% /note %}} \ No newline at end of file diff --git a/sites/platform/src/languages/php/composer-auth.md b/sites/platform/src/languages/php/composer-auth.md index e7fb3a6af7..bd26e6af01 100644 --- a/sites/platform/src/languages/php/composer-auth.md +++ b/sites/platform/src/languages/php/composer-auth.md @@ -4,6 +4,8 @@ sidebarTitle: "Authenticated Composer" description: Allow Composer to authenticate against a private third-party Composer repository and download PHP packages from it. --- +{{% composable/disclaimer %}} + [Packagist](https://packagist.org/) is the primary Composer repository for public PHP packages. But you can also have Composer download PHP packages from a private, third-party Composer repository. To make sure Composer has the necessary credentials to do so, @@ -66,4 +68,4 @@ Access to private Git repositories is restricted through the use of SSH keys. But most private Composer tools mirror tagged releases of dependencies and serve them directly without hitting the Git repository. To avoid having to authenticate against a remote Git repository, -make sure your dependencies specify tagged releases. \ No newline at end of file +make sure your dependencies specify tagged releases. diff --git a/sites/platform/src/languages/php/extensions.md b/sites/platform/src/languages/php/extensions.md index 9abd92c0dc..739d527e63 100644 --- a/sites/platform/src/languages/php/extensions.md +++ b/sites/platform/src/languages/php/extensions.md @@ -4,10 +4,12 @@ weight: 1 description: See what PHP extensions are available with each PHP version on {{% vendor/name %}}. --- +{{% composable/disclaimer %}} + PHP has a number of [extensions](https://pecl.php.net/) developed by members of the community. Some of them are available for {{% vendor/name %}} containers. -{{< note version="1" theme="warning" >}} +{{< note version="1" theme="warning" title="Warning" >}} The information on this page applies to Grid and {{% names/dedicated-gen-3 %}} plans. See also [PHP extensions on {{% names/dedicated-gen-2 %}} plans](../../dedicated-gen-2/overview/grid.md#extensions). @@ -26,7 +28,7 @@ runtime: disabled_extensions: - sqlite3 ``` -You can also [include configuration options](../../create-apps/app-reference.md#extensions) for specific extensions. +You can also [include configuration options](/create-apps/app-reference/single-runtime-image.md#extensions) for specific extensions. The following table shows all extensions that are available (Avail) and on by default (Def). You can turn on the available ones with the `extensions` key @@ -68,7 +70,7 @@ but it takes slightly more work: but committing large binary blobs to Git is generally not recommended. 2. Load the extension using an absolute path by [customizing the PHP settings](./_index.md#customize-php-settings) - For example, if the extension is named `spiffy.so` and is in your [app root](../../create-apps/app-reference.md#root-directory), + For example, if the extension is named `spiffy.so` and is in your [app root](/create-apps/app-reference/single-runtime-image.md#root-directory), your configuration looks like the following: ```yaml {configFile="app"} diff --git a/sites/platform/src/languages/php/fpm.md b/sites/platform/src/languages/php/fpm.md index 6b3f63605b..fe11674a40 100644 --- a/sites/platform/src/languages/php/fpm.md +++ b/sites/platform/src/languages/php/fpm.md @@ -4,6 +4,8 @@ description: "Learn how to adjust the maximum number of PHP-FPM workers for your weight: 5 --- +{{% composable/disclaimer %}} + PHP-FPM helps improve your app's performance by maintaining pools of workers that can process PHP requests. This is particularly useful when your app needs to handle a high number of simultaneous requests. @@ -12,7 +14,7 @@ By default, {{% vendor/name %}} automatically sets a maximum number of PHP-FPM w This number is calculated based on three parameters: - The container memory: the amount of memory you can allot for PHP processing - depending on [app size](../../create-apps/app-reference.md#sizes). + depending on [app size](/create-apps/app-reference/single-runtime-image.md#sizes). - The request memory: the amount of memory an average PHP request is expected to require. - The reserved memory: the amount of memory you need to reserve for tasks that aren't related to requests. @@ -101,7 +103,7 @@ These values allow most programs to run, but you can amend them to fit your needs. To do so, adjust your [app configuration](../../create-apps/_index.md). -Under `runtime` in the [`sizing_hints` setting](../../create-apps/app-reference.md#sizing-hints), +Under `runtime` in the [`sizing_hints` setting](/create-apps/app-reference/single-runtime-image.md#sizing-hints), set the values for `reserved_memory` and `request_memory`. For example, diff --git a/sites/platform/src/languages/php/redis.md b/sites/platform/src/languages/php/redis.md index 7725193777..eb33c76708 100644 --- a/sites/platform/src/languages/php/redis.md +++ b/sites/platform/src/languages/php/redis.md @@ -4,6 +4,8 @@ sidebarTitle: Custom Redis weight: 7 --- +{{% composable/disclaimer %}} + [Redis](../../add-services/redis.md) is a popular structured key-value service, supported by {{% vendor/name %}}. It's frequently used for caching. @@ -71,7 +73,7 @@ That's only for pre-built extensions. 1. Download the Relay/PhpRedis source code. 2. Check out the version specified in the build hook. 3. Compile the extension. -4. Copy the resulting `relay.so`/`redis.so` file to [your app root](../../create-apps/app-reference.md#root-directory). +4. Copy the resulting `relay.so`/`redis.so` file to [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory). 5. Add a line to the `php.ini` file in your app root to enable the extension, creating the file if necessary. If the script doesn't find a `$PLATFORM_CACHE_DIR` directory defined, it exits silently. diff --git a/sites/platform/src/languages/php/swoole.md b/sites/platform/src/languages/php/swoole.md index cd5deaee66..1d8ca39bd0 100644 --- a/sites/platform/src/languages/php/swoole.md +++ b/sites/platform/src/languages/php/swoole.md @@ -4,6 +4,8 @@ weight: 8 sidebarTitle: "Swoole" --- +{{% composable/disclaimer %}} + Swoole is a PHP extension that extends PHP core with a coroutine based asynchronous network application framework designed for building large scale concurrent systems. Unlike PHP-FPM’s stateless operating, Swoole relies on establishing persistent connections with every user, sending and receiving data in real-time. diff --git a/sites/platform/src/languages/php/troubleshoot.md b/sites/platform/src/languages/php/troubleshoot.md index c388aaeab9..cac76ecabe 100644 --- a/sites/platform/src/languages/php/troubleshoot.md +++ b/sites/platform/src/languages/php/troubleshoot.md @@ -4,6 +4,8 @@ sidebarTitle: Troubleshoot description: Learn how to troubleshoot common issues in PHP. --- +{{% composable/disclaimer %}} + {{% troubleshoot %}} ## Server reached `max_children` diff --git a/sites/platform/src/languages/php/tuning.md b/sites/platform/src/languages/php/tuning.md index 556c0fc0cf..a9bdc946a9 100644 --- a/sites/platform/src/languages/php/tuning.md +++ b/sites/platform/src/languages/php/tuning.md @@ -3,6 +3,8 @@ title: "Performance tuning" weight: 3 --- +{{% composable/disclaimer %}} + Once your app is up and running it still needs to be kept fast. {{% vendor/name %}} offers a wide degree of flexibility in how PHP behaves, but that does mean you may need to take a few steps to ensure your site is running optimally. @@ -16,7 +18,7 @@ To make a PHP-based site run faster, the first step is to upgrade the PHP versio Upgrading the PHP version might require changes to your app. For more details and recommendations, see the [PHP migration guides](https://www.php.net/manual/en/migration80.php). -To change your PHP version, change the [`type` in your app configuration](../../create-apps/app-reference.md#types). +To change your PHP version, change the [`type` in your app configuration](/create-apps/app-reference/single-runtime-image.md#types). Before merging to production, test the change on a branch and make sure that your app is working as expected. ## Optimize the FPM worker count @@ -55,7 +57,7 @@ variables: php: opcache.preload: '{{< variable "PRELOAD_SCRIPT" >}}' ``` -`{{< variable "PRELOAD_SCRIPT" >}}` is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). +`{{< variable "PRELOAD_SCRIPT" >}}` is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). It may be any PHP script that calls `opcache_compile_file()`. The following example uses a `preload.php` file as the preload script. @@ -90,7 +92,7 @@ To determine the maximum number of files to cache, follow these steps: 1. Connect to the container via SSH using the [CLI](../../development/ssh/_index.md) by running `{{% vendor/cli %}} ssh`. -2. Determine roughly how many `.php` files your app has by running this command from [your app root](../../create-apps/app-reference.md#root-directory): +2. Determine roughly how many `.php` files your app has by running this command from [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory): ```bash find . -type f -name '*.php' | wc -l diff --git a/sites/platform/src/languages/php/xdebug.md b/sites/platform/src/languages/php/xdebug.md index 7a03d4b321..fd021dbca4 100644 --- a/sites/platform/src/languages/php/xdebug.md +++ b/sites/platform/src/languages/php/xdebug.md @@ -4,6 +4,8 @@ weight: 6 sidebarTitle: "Xdebug" --- +{{% composable/disclaimer %}} + [Xdebug](https://xdebug.org/) is a real-time debugger extension for PHP. While usually used for local development, it can also be helpful for debugging aberrant behavior on the server. @@ -32,7 +34,7 @@ You also need: Xdebug runs as a second PHP-FPM process used only for debugging requests, leaving the normal process unaffected. -To enable Xdebug, add the following to your [app configuration](../../create-apps/app-reference.md): +To enable Xdebug, add the following to your [app configuration](/create-apps/app-reference/single-runtime-image.md): ```yaml {configFile="app"} runtime: @@ -105,7 +107,7 @@ The common steps for setup usually include: The Port should always be `443` and the Debugger set to `Xdebug`. 4. Ensuring path mappings is enabled. This lets you define what remote paths on the server correspond to what path on your local machine. - In the majority of cases you can just define [your app root](../../create-apps/app-reference.md#root-directory) + In the majority of cases you can just define [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory) to map to `app`. 5. Listening for connections. 6. Starting debugging. While in listen mode, start the `{{% vendor/cli %}} xdebug` tunnel. diff --git a/sites/platform/src/languages/python/_index.md b/sites/platform/src/languages/python/_index.md index a3d3008e8f..01d1d812d0 100644 --- a/sites/platform/src/languages/python/_index.md +++ b/sites/platform/src/languages/python/_index.md @@ -4,6 +4,8 @@ description: Get started creating Python apps on {{% vendor/name %}}. layout: single --- +{{% composable/disclaimer %}} + Python is a general purpose scripting language often used in web development. You can deploy Python apps on {{% vendor/name %}} using a server or a project such as [uWSGI](https://uwsgi-docs.readthedocs.io/en/latest/). @@ -154,7 +156,7 @@ For more about managing packages with pip, Pipenv, and Poetry, see how to [manage dependencies](./dependencies.md). To add global dependencies (packages available as commands), -add them to the `dependencies` in your [app configuration](../../create-apps/app-reference.md#dependencies): +add them to the `dependencies` in your [app configuration](/create-apps/app-reference/single-runtime-image.md#dependencies): ```yaml {configFile="app"} dependencies: diff --git a/sites/platform/src/languages/python/dependencies.md b/sites/platform/src/languages/python/dependencies.md index 2671802827..4ea7840aad 100644 --- a/sites/platform/src/languages/python/dependencies.md +++ b/sites/platform/src/languages/python/dependencies.md @@ -5,6 +5,8 @@ sidebarTitle: Manage dependencies description: See how to manage Python dependencies with different package managers. --- +{{% composable/disclaimer %}} + You can manage Python packages in different ways. Python images come with pip installed, but they're flexible enough so you can choose what package manager you want. diff --git a/sites/platform/src/languages/python/python-version.md b/sites/platform/src/languages/python/python-version.md index 9101a6f083..9872d2c127 100644 --- a/sites/platform/src/languages/python/python-version.md +++ b/sites/platform/src/languages/python/python-version.md @@ -5,6 +5,8 @@ weight: 0 description: See how to manage different Python versions in your {{% vendor/name %}} containers. --- +{{% composable/disclaimer %}} + You may need to use a specific version of Python that isn't available in an app container for a different language. For example, a container might have a long-term support version, while you want the latest version. diff --git a/sites/platform/src/languages/python/server.md b/sites/platform/src/languages/python/server.md index 1044236943..71fe3e6c99 100644 --- a/sites/platform/src/languages/python/server.md +++ b/sites/platform/src/languages/python/server.md @@ -4,6 +4,8 @@ weight: -90 description: See how to start your apps as you wish with ASGI and WSGI servers. --- +{{% composable/disclaimer %}} + The Python ecosystem offers a number of web servers that can be used to deploy to {{% vendor/name %}}. The following examples deploy a Django project named `myapp`. They assume a `myapp/wsgi.py` or `myapp/asgi.py` file with a callable `application`. diff --git a/sites/platform/src/languages/ruby.md b/sites/platform/src/languages/ruby.md index efae1572be..3433362581 100644 --- a/sites/platform/src/languages/ruby.md +++ b/sites/platform/src/languages/ruby.md @@ -4,6 +4,8 @@ description: | {{% vendor/name %}} supports deploying any Ruby application. Your application can use any Ruby application server such as Unicorn or Puma and deploying a Rails or a Sinatra app is very straight forward. --- +{{% composable/disclaimer %}} + {{% description %}} ## Supported versions @@ -85,7 +87,7 @@ You can change it. 3. Build your application with the build hook. - Assuming you have your dependencies stored in the `Gemfile` at [your app root](../create-apps/app-reference.md#root-directory), + Assuming you have your dependencies stored in the `Gemfile` at [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory), create a hook like the following: ```yaml {configFile="app"} diff --git a/sites/platform/src/languages/rust.md b/sites/platform/src/languages/rust.md index 242a2d99cf..6e32d59ca9 100644 --- a/sites/platform/src/languages/rust.md +++ b/sites/platform/src/languages/rust.md @@ -2,7 +2,7 @@ title: "Rust" description: banner: - title: Beta + title: Beta Feature body: The Rust runtime is currently available in Beta. To share your feedback so we can improve it, add a comment to the [Rust feature card](https://next.platform.sh/c/221-rust). --- diff --git a/sites/platform/src/learn/bestpractices/oneormany.md b/sites/platform/src/learn/bestpractices/oneormany.md index e8beea4716..d1d3a016b1 100644 --- a/sites/platform/src/learn/bestpractices/oneormany.md +++ b/sites/platform/src/learn/bestpractices/oneormany.md @@ -67,7 +67,7 @@ You can have services that are only exposed to another service as well as servic In a clustered application, you can have one of the following configurations: - Multiple [`{{< vendor/configfile "app" >}}` files](/create-apps/multi-app/_index.md) in different directories, with separate code bases that deploy separately -- A single app that spawns one or more [worker instances](/create-apps/app-reference.md#workers) that run background processes +- A single app that spawns one or more [worker instances](/create-apps/app-reference/single-runtime-image.md#workers) that run background processes {{< note >}} diff --git a/sites/platform/src/learn/overview/yaml/yaml-structure.md b/sites/platform/src/learn/overview/yaml/yaml-structure.md index 42ea935fe2..29148d214a 100644 --- a/sites/platform/src/learn/overview/yaml/yaml-structure.md +++ b/sites/platform/src/learn/overview/yaml/yaml-structure.md @@ -23,13 +23,13 @@ These YAML files are a good starting point before customization. These three YAML files configure the following: - ``{{< vendor/configfile "routes" "strip" >}}``: this file contains all of your [routes definition](/define-routes.md) - ``{{< vendor/configfile "services" "strip" >}}``: this file contains the list of your [services definition](/add-services.md) -- ``{{< vendor/configfile "app" >}}``: this file contains your [application definition](/create-apps/app-reference.html) +- ``{{< vendor/configfile "app" >}}``: this file contains your [application definition](/create-apps/app-reference/single-runtime-image) ## Examples ```yaml {location="{{< vendor/configfile "app" >}}"} -# {{< code-link destination="/create-apps/app-reference.html" text="Complete list of all available properties" title="Complete list of all available properties" >}} +# {{< code-link destination="/create-apps/app-reference/single-runtime-image.html" text="Complete list of all available properties" title="Complete list of all available properties" >}} # A unique name for the app. Must be lowercase alphanumeric characters. # Changing the name destroys data associated with the app. @@ -37,7 +37,7 @@ name: "app" # The runtime the application uses. -# {{< code-link destination="/create-apps/app-reference.html#types" text="Complete list of available runtimes" title="Complete list of available runtimes" >}} +# {{< code-link destination="/create-apps/app-reference/single-runtime-image.html#types" text="Complete list of available runtimes" title="Complete list of available runtimes" >}} type: "php:8.2" ... ``` diff --git a/sites/platform/src/learn/tutorials/exporting.md b/sites/platform/src/learn/tutorials/exporting.md index 9f6181887b..c9e65463be 100644 --- a/sites/platform/src/learn/tutorials/exporting.md +++ b/sites/platform/src/learn/tutorials/exporting.md @@ -59,7 +59,7 @@ title=Using Git ## 2. Download your files Some files might not be stored in Git, -such as data your app writes [in mounts](/create-apps/app-reference.md#mounts). +such as data your app writes [in mounts](/create-apps/app-reference/single-runtime-image.md#mounts). You can download your files [using the CLI](/development/file-transfer.md#transfer-files-using-the-cli) or [using SSH](/development/file-transfer.md#transfer-files-using-an-ssh-client). diff --git a/sites/platform/src/learn/tutorials/migrating.md b/sites/platform/src/learn/tutorials/migrating.md index e91c432911..0a31747def 100644 --- a/sites/platform/src/learn/tutorials/migrating.md +++ b/sites/platform/src/learn/tutorials/migrating.md @@ -68,7 +68,7 @@ which you can then upgrade. title=Using the CLI +++ -If you do not already have an organization created on {{% vendor/name %}}, create one: +If you do not already have an organization created on {{% vendor/name %}}, create one: ```bash {{% vendor/cli %}} org:create @@ -204,7 +204,7 @@ After any errors are fixed, a push creates a new environment. Once you push your code to {{% vendor/name %}}, either directly or through an integration, the deployment itself is not yet complete. -{{% vendor/name %}} has only just now understood the _types_ of containers you want (like a Python app container, and a Redis and MariaDB service containers) by validating that push. +{{% vendor/name %}} has only just now understood the _types_ of containers you want (like a Python app container, and a Redis and MariaDB service containers) by validating that push. How much resources those containers get is still left for you to define. You can do so quickly with the following CLI command: @@ -234,7 +234,7 @@ For any potential more details, see the [specific service](/add-services/_index. ## {{% version/ifelse "6" "7" %}}. Import files Your app may include content files, meaning files that aren't intended to be part of your codebase so aren't in Git. -You can upload such files to [mounts you created](/create-apps/app-reference.md#mounts). +You can upload such files to [mounts you created](/create-apps/app-reference/single-runtime-image.md#mounts). Upload to each mount separately. Suppose for instance you have the following file mounts defined: diff --git a/sites/platform/src/projects/change-project-timezone.md b/sites/platform/src/projects/change-project-timezone.md index 5c7038c9d6..2308b7fe51 100644 --- a/sites/platform/src/projects/change-project-timezone.md +++ b/sites/platform/src/projects/change-project-timezone.md @@ -8,7 +8,7 @@ The project timezone affects [automated backups](../environments/backup.md). The project timezone doesn't affect: - [App runtime](../create-apps/timezone.md). -- [Cron jobs](../create-apps/app-reference.md#crons). +- [Cron jobs](/create-apps/app-reference/single-runtime-image.md#crons). - [System logs](../increase-observability/logs/_index.md). UTC is the default timezone for all logs. To change the timezone for a project, follow these steps: diff --git a/sites/platform/src/security/web-application-firewall/waf.md b/sites/platform/src/security/web-application-firewall/waf.md index ab8bbb1c17..69c44f538d 100644 --- a/sites/platform/src/security/web-application-firewall/waf.md +++ b/sites/platform/src/security/web-application-firewall/waf.md @@ -90,7 +90,7 @@ The WAF enforces a file upload limit. By default, this limit is set at 250 MB. You can customize the file upload limit by amending your [app configuration](../../create-apps/_index.md). -In the [`web.locations` dictionary](../../create-apps/app-reference.md#locations), +In the [`web.locations` dictionary](/create-apps/app-reference/single-runtime-image.md#locations), add your desired value for the `max_request_size` property. ### File extension restriction @@ -98,8 +98,8 @@ add your desired value for the `max_request_size` property. The WAF enforces any file extension restriction you may have defined in your [app configuration](../../create-apps/_index.md). To set up a file extension restriction, -adjust the [`web.locations` dictionary](../../create-apps/app-reference.md#locations). -Set up [rules](../../create-apps/app-reference.md#rules) to allow only certain file extensions on a given path. +adjust the [`web.locations` dictionary](/create-apps/app-reference/single-runtime-image.md#locations). +Set up [rules](/create-apps/app-reference/single-runtime-image.md#rules) to allow only certain file extensions on a given path. ### Disallowed requests and headers diff --git a/sites/platform/static/images/nixos/nixos-packages.png b/sites/platform/static/images/nixos/nixos-packages.png new file mode 100644 index 0000000000000000000000000000000000000000..08ca4cb2f8bcc74fbdd11779b5084755907b3fb0 GIT binary patch literal 208618 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%0D@0+KByZKn`!(@Efryk#9c)faaG=6P0@DL5;$o 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≷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 S+Wsr+z{k?eW?v!PJ?ei-_ZwsY literal 0 HcmV?d00001 diff --git a/sites/platform/static/images/nixos/nixossearch-upstream-value.png b/sites/platform/static/images/nixos/nixossearch-upstream-value.png new file mode 100644 index 0000000000000000000000000000000000000000..19980fd3d154b9713445b0cdb78e461cf9e204cd GIT binary patch literal 78077 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 z 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 AcK`qY literal 0 HcmV?d00001 diff --git a/sites/upsun/layouts/shortcodes/frameworks-landing.md b/sites/upsun/layouts/shortcodes/frameworks-landing.md index 9d4cd6af19..f462d99b81 100644 --- a/sites/upsun/layouts/shortcodes/frameworks-landing.md +++ b/sites/upsun/layouts/shortcodes/frameworks-landing.md @@ -1,6 +1,6 @@ {{ $python := "[Django](/get-started/stacks/django.md)
[Flask](/get-started/stacks/flask.md)" }} -{{ $php := "[Laravel](/get-started/stacks/laravel.md)
[Symfony](/get-started/stacks/symfony/_index.md)
[WordPress](/get-started/stacks/wordpress.md)" }} -{{ $nodejs := "[Express](/get-started/stacks/express.md)
[Next.js](/get-started/stacks/nextjs.md)
[Strapi](/get-started/stacks/strapi.md)" }} +{{ $php := "[Laravel](/get-started/stacks/laravel)
[Symfony](/get-started/stacks/symfony/_index.md)
[WordPress](/get-started/stacks/wordpress.md)" }} +{{ $nodejs := "[Express](/get-started/stacks/express)
[Next.js](/get-started/stacks/nextjs.md)
[Strapi](/get-started/stacks/strapi.md)" }}

diff --git a/sites/upsun/src/add-services/_index.md b/sites/upsun/src/add-services/_index.md index d53962222e..9ca69ae1bb 100644 --- a/sites/upsun/src/add-services/_index.md +++ b/sites/upsun/src/add-services/_index.md @@ -67,7 +67,7 @@ The following table presents the keys you can define for each service: | --------------- | ---------- | ----------------- | ----------- | | `type` | `string` | Yes | One of the [available services](#available-services) in the format `type:version`. | | `configuration` | dictionary | For some services | Some services have additional specific configuration options that can be defined here, such as specific endpoints. See the given service page for more details. | -| `relationships` | dictionary | For some services | Some services require a relationship to your app. The content of the dictionary has the same type as the `relationships` dictionary for [app configuration](/create-apps/app-reference.md#relationships). The `endpoint_name` for apps is always `http`. | +| `relationships` | dictionary | For some services | Some services require a relationship to your app. The content of the dictionary has the same type as the `relationships` dictionary for [app configuration](/create-apps/app-reference/single-runtime-image.md#relationships). The `endpoint_name` for apps is always `http`. | ##### Resources (CPU, RAM, disk) @@ -80,7 +80,10 @@ For more information, see how to [manage resources](/manage-resources.md). ### 2. Connect the service -To connect the service, use the following configuration: +Once you have configured a service, you need to create a relationship to connect it to an app. +This is done in your [app configuration for relationships](/create-apps/app-reference/single-runtime-image.md#relationships). + +The relationship follows this pattern: ```yaml {configFile="app"} applications: @@ -104,12 +107,12 @@ services: You can define `` as you like, so long as it's unique between all defined services and matches in both the application and services configuration. -The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. -That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) +The example above leverages [default endpoint](/create-apps/app-reference/single-runtime-image#relationships) configuration for relationships. +That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference/single-runtime-image#relationships) (the network address a service is accessible from) that is identical to the _name_ of that service. Depending on your needs, instead of default endpoint configuration, -you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). +you can use [explicit endpoint configuration](/create-apps/app-reference/single-runtime-image#relationships). An example relationship to connect to the databases given in the [example in step 1](#1-configure-the-service): diff --git a/sites/upsun/src/add-services/network-storage.md b/sites/upsun/src/add-services/network-storage.md index 5aa7f00be7..3ba0a472ad 100644 --- a/sites/upsun/src/add-services/network-storage.md +++ b/sites/upsun/src/add-services/network-storage.md @@ -3,7 +3,7 @@ title: "Network Storage" weight: -30 --- -The Network Storage service enables a new kind of [mount](../create-apps/app-reference.md#mounts) +The Network Storage service enables a new kind of [mount](../create-apps/app-reference/single-runtime-image.md#mounts) that refers to a shared service rather than to a local directory. This service allows you to store data and share it between different apps. diff --git a/sites/upsun/src/add-services/redis.md b/sites/upsun/src/add-services/redis.md index 2fa5043b86..e4d0f26116 100644 --- a/sites/upsun/src/add-services/redis.md +++ b/sites/upsun/src/add-services/redis.md @@ -185,9 +185,9 @@ services: You can define `` as you like, so long as it’s unique between all defined services and matches in both the application and services configuration. -The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) (the network address a service is accessible from) that is identical to the name of that service. +The example above leverages [default endpoint](/create-apps/app-reference/single-runtime-image#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference/single-runtime-image#relationships) (the network address a service is accessible from) that is identical to the name of that service. -Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). +Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference/single-runtime-image#relationships). With the above definition, the application container now has [access to the service](#use-in-app) via the relationship `` and its corresponding [`PLATFORM_RELATIONSHIPS` environment variable](/development/variables/use-variables#use-provided-variables). @@ -334,9 +334,9 @@ services: You can define `` as you like, so long as it’s unique between all defined services and matches in both the application and services configuration. -The example above leverages [default endpoint](/create-apps/app-reference#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference#relationships) (the network address a service is accessible from) that is identical to the name of that service. +The example above leverages [default endpoint](/create-apps/app-reference/single-runtime-image#relationships) configuration for relationships. That is, it uses default endpoints behind-the-scenes, providing a [relationship](/create-apps/app-reference/single-runtime-image#relationships) (the network address a service is accessible from) that is identical to the name of that service. -Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference#relationships). +Depending on your needs, instead of default endpoint configuration, you can use [explicit endpoint configuration](/create-apps/app-reference/single-runtime-image#relationships). With the above definition, the application container now has [access to the service](#use-in-app) via the relationship `` and its corresponding [`PLATFORM_RELATIONSHIPS` environment variable](/development/variables/use-variables#use-provided-variables). diff --git a/sites/upsun/src/add-services/varnish.md b/sites/upsun/src/add-services/varnish.md index 12e4d99a66..05fd390292 100644 --- a/sites/upsun/src/add-services/varnish.md +++ b/sites/upsun/src/add-services/varnish.md @@ -33,7 +33,7 @@ graph LR The `relationships` block defines the connection between Varnish and your app. You can define {{< variable "RELATIONSHIP_NAME" >}} as you like. -{{< variable "APP_NAME" >}} should match your app's `name` in the [app configuration](../create-apps/app-reference.md). +{{< variable "APP_NAME" >}} should match your app's `name` in the [app configuration](/create-apps/app-reference/single-runtime-image.md). The `configuration` block must reference a VCL file inside the `{{< vendor/configdir >}}` directory. The `path` defines the file relative to the `{{< vendor/configdir >}}` directory. @@ -274,7 +274,7 @@ which provides access to some Varnish analysis and debugging tools. You can't use it from an app fronted by Varnish because of the restriction with [circular relationships](#circular-relationships). To access the stats, create a **separate app** (`stats-app`) with a relationship *to* Varnish, but not *from* it. -Define [app configuration](../create-apps/app-reference.md) similar to the following: +Define [app configuration](/create-apps/app-reference/single-runtime-image.md) similar to the following: ```yaml {configFile="apps"} applications: @@ -329,5 +329,5 @@ To access the Varnish stats endpoint from the command line: 1. Connect to your stats app [using SSH](../development/ssh/_index.md): `{{% vendor/cli %}} ssh --app stats-app` (replace `stats-app` with the name you gave the app). -2. Display the [relationships array](../create-apps/app-reference.md#relationships) with `echo ${{< vendor/prefix >}}_RELATIONSHIPS | base64 -d | jq .`, +2. Display the [relationships array](/create-apps/app-reference/single-runtime-image.md#relationships) with `echo ${{< vendor/prefix >}}_RELATIONSHIPS | base64 -d | jq .`, 3. Query Varnish with `curl {{< variable "HOST" >}}:{{}}/stats`, replacing `{{< variable "HOST" >}}` and `{{< variable "PATH" >}}` with the values from Step 2. diff --git a/sites/upsun/src/administration/cli/_index.md b/sites/upsun/src/administration/cli/_index.md index 7b84af58ac..b051e48778 100644 --- a/sites/upsun/src/administration/cli/_index.md +++ b/sites/upsun/src/administration/cli/_index.md @@ -211,8 +211,8 @@ eval $({{% vendor/cli %}} completion) ### Run commands on your container You can use the {{% vendor/name %}} CLI to run commands on your container. -You can use any command you've added in [dependencies](../../create-apps/app-reference.md#dependencies) -or a [hook](../../create-apps/app-reference.md#hooks). +You can use any command you've added in [dependencies](/create-apps/app-reference/single-runtime-image.md#dependencies) +or a [hook](/create-apps/app-reference/single-runtime-image.md#hooks). The syntax looks like the following: diff --git a/sites/upsun/src/administration/users.md b/sites/upsun/src/administration/users.md index 83ae1a2567..44412b691a 100644 --- a/sites/upsun/src/administration/users.md +++ b/sites/upsun/src/administration/users.md @@ -5,7 +5,7 @@ sidebarTitle: Users description: Manage user access and permissions across all your projects and organizations. --- -{{% vendor/name %}} offers very granular and flexible user permissions across projects and organizations. +{{% vendor/name %}} offers very granular and flexible user permissions across projects and organizations. When a user is added to a project, they are automatically added to your organization. ## Manage project access @@ -42,7 +42,7 @@ A user can have one of the following roles on an environment type which grants t | Contributor | Yes | Yes | Yes | Yes | No | No | | Viewer | Yes | No | Yes | No | No | No | -To customize which roles can use SSH, set [`access` in your app configuration](../create-apps/app-reference.md#access). +To customize which roles can use SSH, set [`access` in your app configuration](/create-apps/app-reference/single-runtime-image.md#access). ### View a user's permissions across all of the projects in your organization @@ -170,7 +170,7 @@ title=In the Console {{< /codetabs >}} To apply SSH access changes after you add a remove a user from a project or environment type, -[trigger a redeploy](../development/troubleshoot.md#force-a-redeploy). +[trigger a redeploy](../development/troubleshoot.md#force-a-redeploy). ### Remove a user from a project @@ -242,7 +242,7 @@ you can invite other users to your organization and grant them the following per Users with the **Manage users** (`members`) permission can add, edit, or remove _any_ user's permissions except their own. -Users with the **Manage billing** (`billing`) permission automatically are granted **List projects** (`projects:list`) permission. +Users with the **Manage billing** (`billing`) permission automatically are granted **List projects** (`projects:list`) permission. That is, they are able to see all organization projects once given billing rights. {{< /note >}} diff --git a/sites/upsun/src/administration/web/configure-environment.md b/sites/upsun/src/administration/web/configure-environment.md index a4f8efb44d..5d31b2f580 100644 --- a/sites/upsun/src/administration/web/configure-environment.md +++ b/sites/upsun/src/administration/web/configure-environment.md @@ -41,7 +41,7 @@ There are also additional options: * **Code** * **CLI** for the command to get your project set up locally with the [{{% vendor/name %}} CLI](../cli/_index.md). * **Git** for the command to clone the codebase via Git. - + If you're using {{% vendor/name %}} as your primary remote repository, the command clones from the project. If you have set up an [external integration](../../integrations/source/_index.md), the command clones directly from the integrated remote repository. @@ -61,7 +61,7 @@ If this message isn't updated once your [default environment](../../environments follow these steps: 1. Check that [you have defined routes](../../define-routes/_index.md) for your default environment. -2. Verify that your [application](../../create-apps/app-reference.md), [services](../../add-services/_index.md), and [routes](../../define-routes/_index.md) configurations are correct. +2. Verify that your [application](/create-apps/app-reference/single-runtime-image.md), [services](../../add-services/_index.md), and [routes](../../define-routes/_index.md) configurations are correct. 3. Check that your default environment is [active](../../environments/deactivate-environment.md#reactivate-an-environment). ## Environment settings diff --git a/sites/upsun/src/create-apps/_index.md b/sites/upsun/src/create-apps/_index.md index 558ff63261..64f979babc 100644 --- a/sites/upsun/src/create-apps/_index.md +++ b/sites/upsun/src/create-apps/_index.md @@ -14,7 +14,7 @@ Within a single project, you can have one or more apps and each app can have mul Instances are where the same code can be run with different configurations, such as one for external communication and one for background processes. All of the apps and instances are configured with the same syntax. -You can find a [complete reference](./app-reference.md) of all possible settings. +You can find a [complete reference](/create-apps/app-reference/single-runtime-image.md) of all possible settings. ## A minimal application @@ -63,15 +63,15 @@ If you want to use one of the [databases or other services {{% vendor/name %}} p set it up by following these steps: 1. Configure the service based on the documentation for that service. -1. Use the information from that service inside your app's [`relationships` definition](./app-reference.md#relationships) +1. Use the information from that service inside your app's [`relationships` definition](/create-apps/app-reference/single-runtime-image.md#relationships) to configure how your app communicates with the service. ## Control the build and deploy process Your app generally needs to undergo some steps to be turned from the code in your Git repository into a running app. -If you're running a PHP or Node.js app, this starts with the [build flavor](./app-reference.md#build), +If you're running a PHP or Node.js app, this starts with the [build flavor](/create-apps/app-reference/single-runtime-image.md#build), which runs a default set of tasks. -Then any [global dependencies](./app-reference.md#dependencies) can be installed. +Then any [global dependencies](/create-apps/app-reference/single-runtime-image.md#dependencies) can be installed. Once these optional tasks are done, you can run [hooks](./hooks/_index.md) at various points in the process. Hooks are places for your custom scripts to control how your app is built and deployed. @@ -79,7 +79,7 @@ Hooks are places for your custom scripts to control how your app is built and de ## Configure what's served Once your app is built, it needs a defined way to communicate with the outside world. -Define its behavior with a [`web` instance](./app-reference.md#web). +Define its behavior with a [`web` instance](/create-apps/app-reference/single-runtime-image.md#web). There you can set what command runs every time your app is restarted, how dynamic requests are handled, and how to respond with static files. diff --git a/sites/upsun/src/create-apps/app-reference.md b/sites/upsun/src/create-apps/app-reference.md deleted file mode 100644 index 065f7441df..0000000000 --- a/sites/upsun/src/create-apps/app-reference.md +++ /dev/null @@ -1,1373 +0,0 @@ ---- -title: "App reference" -weight: 4 -description: See all of the options for controlling your apps and how they're built and deployed on {{% vendor/name %}}. ---- - -{{% description %}} - -Configuration is all done in a `{{< vendor/configfile "app" >}}` file, -located at the root of your Git repository. - -See a [comprehensive example](./_index.md#comprehensive-example) of a configuration in a `{{< vendor/configfile "app" >}}` file. - -## Primary application properties - -All application configuration takes place in a `{{< vendor/configfile "app" >}}` file, with each application configured under a unique key beneath the top-level `applications` key. -For example, it is possible to deploy two application containers - one JavaScript and the other Python - for the frontend and backend components of a deployed site. - -In this case, the unified `{{< vendor/configfile "app" >}}` file would look like: - -```yaml {configFile="app"} -applications: - frontend: - type: 'nodejs:{{% latest "nodejs" %}}' - # Additional frontend configuration - backend: - type: 'python:{{% latest "python" %}}' - # Additional backend configuration -``` - -The following table presents all properties available at the level just below the unique application name (`frontend` and `backend` above). - -The column _Set in instance?_ defines whether the given property can be overridden within a `web` or `workers` instance. -To override any part of a property, you have to provide the entire property. - - -| Name | Type | Required | Set in instance? | Description | -| ------------------ | --------------------------------------------------- | -------- | ---------------- | ----------- | -| `name` | `string` | Yes | No | A unique name for the app. Must be lowercase alphanumeric characters. Changing the name destroys data associated with the app. | -| `type` | A [type](#types) | Yes | No | The base image to use with a specific app language. Format: `runtime:version`. | -| `relationships` | A dictionary of [relationships](#relationships) | | Yes | Connections to other services and apps. | -| `mounts` | A dictionary of [mounts](#mounts) | | Yes | Directories that are writable even after the app is built. Allocated disk for mounts is defined with a separate resource configuration call using `{{% vendor/cli %}} resources:set`. | -| `web` | A [web instance](#web) | | N/A | How the web application is served. | -| `workers` | A [worker instance](#workers) | | N/A | Alternate copies of the application to run as background processes. | -| `timezone` | `string` | | No | The timezone for crons to run. Format: a [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Defaults to `UTC`, which is the timezone used for all logs no matter the value here. See also [app runtime timezones](./timezone.md) | -| `access` | An [access dictionary](#access) | | Yes | Access control for roles accessing app environments. | -| `variables` | A [variables dictionary](#variables) | | Yes | Variables to control the environment. | -| `firewall` | A [firewall dictionary](#firewall) | | Yes | Outbound firewall rules for the application. | -| `build` | A [build dictionary](#build) | | No | What happens when the app is built. | -| `dependencies` | A [dependencies dictionary](#dependencies) | | No | What global dependencies to install before the `build` hook is run. | -| `hooks` | A [hooks dictionary](#hooks) | | No | What commands run at different stages in the build and deploy process. | -| `crons` | A [cron dictionary](#crons) | | No | Scheduled tasks for the app. | -| `source` | A [source dictionary](#source) | | No | Information on the app's source code and operations that can be run on it. | -| `runtime` | A [runtime dictionary](#runtime) | | No | Customizations to your PHP or Lisp runtime. | -| `additional_hosts` | An [additional hosts dictionary](#additional-hosts) | | Yes | Maps of hostnames to IP addresses. | - -## Root directory - -Some of the properties you can define are relative to your app's root directory. -The root defaults to the root of the repository. - -```yaml {configFile="app"} -applications: - frontend: - type: 'nodejs:{{% latest "nodejs" %}}' - # Default behavior of source.root - source: - root: "/" -``` - -That is, if a custom value for `source.root` is not provided in your configuration, the default behavior is equivalent to the above. - -To specify another directory, for example for a [multi-app project](./multi-app/_index.md), -use the [`source.root` property](#source). - -## Types - -The `type` defines the base container image used to run the application. -The version is the major (`X`) and sometimes minor (`X.Y`) version numbers, -depending on the service, as in the following table. -Security and other patches are taken care of for you automatically. - -Available languages and their supported versions: - -{{< readFile file="registry/images/tables/runtimes_supported.md" markdownify="true">}} - -### Example configuration - -These are used in the format `runtime:version`: - -```yaml {configFile="app"} -applications: - myapp: - type: 'php:{{% latest "php" %}}' -``` - -## Resources - -Resources for application containers are not committed to YAML files, but instead managed over the API using either the Console or the `{{% vendor/cli %}} resources:set` command. - -For more information, see how to [manage resources](/manage-resources.md). - -## Relationships - -To allow containers in your project to communicate with one another, -you need to define relationships between them. -You can define a relationship between an app and a service, or [between two apps](/create-apps/multi-app/relationships.md). - -The quickest way to define a relationship between your app and a service -is to use the service's default endpoint.
-However, some services allow you to define multiple databases, cores, and/or permissions. -In these cases, you can't rely on default endpoints. -Instead, you can explicitly define multiple endpoints when setting up your relationships. - -{{< note >}} -App containers don't have a default endpoint like services. -To connect your app to another app in your project, -you need to explicitly define the `http` endpoint as the endpoint to connect both apps.
-For more information, see how to [define relationships between your apps](/create-apps/multi-app/relationships.md). -{{< /note >}} - -Once a service is running and exposed via a relationship, -its credentials (such as the host, username, and password) are automatically available as [service environment variables](/development/variables#service-environment-variables), -in the `$_` format. -The available information is documented on each service's page, along with sample code for how to connect to it from your app. - -{{< note title="Availability" theme="info">}} - -New syntax (default and explicit endpoints) described below is supported by most, but not all, image types -(`Relationship 'SERVICE_NAME' of application 'app' ... targets a service without a valid default endpoint configuration.`). -This syntax is currently being rolled out for all images. -If you encounter this error, use the "legacy" Platform.sh configuration noted at the bottom of this section. - -{{< /note >}} - - -To define a relationship between your app and a service: - -{{< codetabs >}} - -+++ -title=Using default endpoints -+++ - -Use the following configuration: - -```yaml {configFile="app"} -applications: - # The name of the app container. Must be unique within a project. - myapp: - # The location of the application's code. - source: - root: "/" - - [...] - - relationships: - {{% variable "SERVICE_NAME" %}}: -``` - -The `SERVICE_NAME` is the name of the service as defined in its [configuration](/add-services/_index.md). -It is used as the relationship name, and associated with a `null` value. -This instructs {{% vendor/name %}} to use the service's default endpoint to connect your app to the service. - -For example, if you define the following configuration: - -```yaml {configFile="app"} -applications: - # The name of the app container. Must be unique within a project. - myapp: - # The location of the application's code. - source: - root: "/" - - [...] - - relationships: - mariadb: -``` - -{{% vendor/name %}} looks for a service named `mariadb` in your `{{% vendor/configfile "services" %}}` file, -and connects your app to it through the service's default endpoint. - -For reference, the equivalent configuration using explicit endpoints would be the following: - -```yaml {configFile="app"} -applications: - # The name of the app container. Must be unique within a project. - myapp: - # The location of the application's code. - source: - root: "/" - - [...] - - relationships: - mariadb: - service: mariadb - endpoint: mysql -``` - -You can define any number of relationships in this way: - -```yaml {configFile="app"} -applications: - # The name of the app container. Must be unique within a project. - myapp: - # The location of the application's code. - source: - root: "/" - - [...] - - relationships: - mariadb: - redis: - elasticsearch: -``` - -{{< note title="Tip" theme="info" >}} - -An even quicker way to define many relationships is to use the following single-line configuration: - -```yaml {configFile="app"} -applications: - # The name of the app container. Must be unique within a project. - myapp: - # The location of the application's code. - source: - root: "/" - - [...] - - relationships: {{{< variable "SERVICE_NAME_A" >}}, {{< variable "SERVICE_NAME_B" >}}, {{< variable "SERVICE_NAME_C" >}}} - -services: - {{< variable "SERVICE_NAME_A" >}}: - type: mariadb:{{% latest "mariadb" %}} - {{< variable "SERVICE_NAME_B" >}}: - type: redis:{{% latest "redis" %}} - {{< variable "SERVICE_NAME_C" >}}: - type: elasticsearch:{{% latest "elasticsearch" %}} -``` - -{{< /note >}} - -<---> - -+++ -title=Using explicit endpoints -+++ - -Use the following configuration: - -```yaml {configFile="app"} -applications: - # The name of the app container. Must be unique within a project. - myapp: - # The location of the application's code. - source: - root: "/" - - [...] - - relationships: - {{% variable "RELATIONSHIP_NAME" %}}: - service: {{% variable "SERVICE_NAME" %}} - endpoint: {{% variable "ENDPOINT_NAME" %}} -``` - -- `RELATIONSHIP_NAME` is the name you want to give to the relationship. -- `SERVICE_NAME` is the name of the service as defined in its [configuration](/add-services/_index.md). -- `ENDPOINT_NAME` is the endpoint your app will use to connect to the service (refer to the service reference to know which value to use). - -For example, to define a relationship named `database` that connects your app to a service called `mariadb` through the `db1` endpoint, -use the following configuration: - -```yaml {configFile="app"} -applications: - # The name of the app container. Must be unique within a project. - myapp: - # The location of the application's code. - source: - root: "/" - - [...] - - relationships: - database: # The name of the relationship. - service: mariadb - endpoint: db1 -``` - -For more information on how to handle multiple databases, multiple cores, -and/or different permissions with services that support such features, -see each service's dedicated page: - - - [MariaDB/MySQL](/add-services/mysql/_index.md#multiple-databases) (multiple databases and permissions) - - [PostgreSQL](/add-services/postgresql/_index.md#multiple-databases) (multiple databases and permissions) - - [Redis](/add-services/redis/_index.md#multiple-databases) (multiple databases) - - [Solr](add-services/solr/_index.md#solr-6-and-later) (multiple cores) - - [Vault KMS](add-services/vault/_index.md#multiple-endpoints-example) (multiple permissions) - - You can add as many relationships as you want to your app configuration, - using both default and explicit endpoints according to your needs: - -```yaml {configFile="app"} -applications: - # The name of the app container. Must be unique within a project. - myapp: - # The location of the application's code. - source: - root: "/" - - [...] - - relationships: - database1: - service: mariadb - endpoint: admin - database2: - service: mariadb - endpoint: legacy - cache: - service: redis - search: - service: elasticsearch -``` - -{{< /codetabs >}} - -{{< note theme="info" title="Legacy" >}} - -The following legacy syntax for specifying relationships is still supported by {{% vendor/name %}}: - -```yaml -applications: - # The name of the app container. Must be unique within a project. - myapp: - # The location of the application's code. - source: - root: "/" - - [...] - - relationships: - : ":" -``` - -For example: - -```yaml -applications: - # The name of the app container. Must be unique within a project. - myapp: - # The location of the application's code. - source: - root: "/" - - [...] - - relationships: - database: "mariadb:mysql" -``` - -Feel free to use this until the default and explicit endpoint syntax is supported on all images. - -{{< /note >}} - -## Available disk space - -Disk for application containers are not committed to YAML files, but instead managed over the API using either the Console or the `{{% vendor/cli %}} resources:set` command. - -For more information, see how to [manage resources](/manage-resources.md). - -### Downsize a disk - -{{% disk-downsize type="app" %}} - -## Mounts - -After your app is built, its file system is read-only. -To make changes to your app's code, you need to use Git. - -For enhanced flexibility, {{% vendor/name %}} allows you to define and use writable directories called "mounts". -Mounts give you write access to files generated by your app (such as cache and log files) -and uploaded files without going through Git. - -When you define a mount, you are mounting an external directory to your app container, -much like you would plug a hard drive into your computer to transfer data. - -{{% note %}} - -- Mounts aren't available during the build -- When you [back up an environment](/environments/backup.md), the mounts on that environment are backed up too - -{{% /note %}} - -### Define a mount - -To define a mount, use the following configuration: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: nodejs:{{% latest "nodejs" %}} - mounts: - '{{< variable "MOUNT_PATH" >}}': - source: {{< variable "MOUNT_TYPE" >}} - source_path: {{< variable "SOURCE_PATH_LOCATION" >}} -``` -{{< variable "MOUNT_PATH" >}} is the path to your mount **within the app container** (relative to the app's root). -If you already have a directory with that name, you get a warning that it isn't accessible after the build. -See how to [troubleshoot the warning](./troubleshoot-mounts.md#overlapping-folders). - - -| Name | Type | Required | Description | -| ------------- | -------------------- | -------- | ----------- | -| `source` | `storage`, `instance`, `tmp` (also called `temporary`), or `service` | Yes | Specifies the type of the mount:

- By design, `storage` mounts can be shared between instances of the same app. You can also configure them so they are [shared between different apps](#share-a-mount-between-several-apps).

-`instance` mounts are local mounts. Unique to your app, they are useful to store files that remain local to the app instance, such as application logs.

- `tmp` (or `temporary`) mounts are local ephemeral mounts, where an external directory is mounted to the `/tmp` directory of your app.
The content of a `tmp` mount **may be removed during infrastructure maintenance operations**. Therefore, `tmp` mounts allow you to **store files that you’re not afraid to lose**, such as your application cache that can be seamlessly rebuilt.
Note that the `/tmp` directory has **a maximum allocation of 8 GB**.

- `service` mounts can be useful if you want to explicitly define and use a [Network Storage](/add-services/network-storage.md) service to share data between different apps (instead of using a `storage` mount).| -| `source_path` | `string` | No | Specifies where the mount points **inside the [external directory](#mounts)**.

- If you explicitly set a `source_path`, your mount points to a specific subdirectory in the external directory.

- If the `source_path` is an empty string (`""`), your mount points to the entire external directory.

- If you don't define a `source_path`, {{% vendor/name %}} uses the {{< variable "MOUNT_PATH" >}} as default value, without leading or trailing slashes.
For example, if your mount lives in the `/web/uploads/` directory in your app container, it will point to a directory named `web/uploads` in the external directory.

**WARNING:** Changing the name of your mount affects the `source_path` when it's undefined. See [how to ensure continuity](#ensure-continuity-when-changing-the-name-of-your-mount) and maintain access to your files. | -| `service` | `string` | | The purpose of the `service` key depends on your use case.

In a multi-app context where a `storage` mount is shared between apps, `service` is required. Its value is the name of the app whose mount you want to share. See how to [share a mount between several apps](#share-a-mount-between-several-apps).

In a multi-app context where a [Network Storage service](../add-services/network-storage.md) (`service` mount) is shared between apps, `service` is required and specifies the name of that Network Storage. | - -The accessibility to the web of a mounted directory depends on the [`web.locations` configuration](#web). -Files can be all public, all private, or with different rules for different paths and file types. - -Note that when you remove a `tmp` mount from your `{{< vendor/configfile "app" >}}` file, -the mounted directory isn't deleted. -The files still exist on disk until manually removed, -or until the app container is moved to another host during a maintenance operation. - -### Example configuration - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: nodejs:20 - mounts: - 'web/uploads': - source: storage - source_path: uploads - '/.tmp_platformsh': - source: tmp - source_path: files/.tmp_platformsh - '/build': - source: storage - source_path: files/build - '/.cache': - source: tmp - source_path: files/.cache - '/node_modules/.cache': - source: tmp - source_path: files/node_modules/.cache -``` -### Ensure continuity when changing the name of your mount - -Changing the name of your mount affects the default `source_path`. - -Say you have a `/my/cache/` mount with an undefined `source_path`: - -```yaml {configFile="app"} -mounts: - '/my/cache/': - source: tmp -``` - - If you rename the mount to `/cache/files/`, it will point to a new, empty `/cache/files/` directory. - - To ensure continuity, you need to explicitly define the `source_path` as the previous name of the mount, without leading or trailing slashes: - - ```yaml {configFile="app"} -mounts: - '/cache/files/': - source: tmp - source_path: my/cache -``` - -The `/cache/files/` mount will point to the original `/my/cache/` directory, maintaining access to all your existing files in that directory. - -### Share a mount between several apps - -By design, [`storage` mounts](#mounts) are shared **between different instances of the same app**, -which enables [horizontal scaling](/manage-resources/_index.md). - -In a [multi-application context](/create-apps/multi-app/_index.md), -you can even share a `storage` mount **between different applications** in the same project. - -To do so, you need to define a `storage` mount in each of your app containers, -and point each of those mounts to the same shared external network directory. - -Use the following configuration: - -```yaml {configFile="app"} -applications: - app1: - mounts: - '{{< variable "MOUNT_PATH_1" >}}': - source: storage - source_path: {{< variable "SOURCE_PATH_LOCATION" >}} - - app2: - mounts: - '{{< variable "MOUNT_PATH_2" >}}': - source: storage - service: app1 - source_path: {{< variable "SOURCE_PATH_LOCATION" >}} -``` - -- {{< variable "MOUNT_PATH_1" >}} and {{< variable "MOUNT_PATH_2" >}} are the paths to each mount **within their respective app container** (relative to the app's root). -- When configuring the first `storage` mount, you don't need to include the `service` key. - The first mount implicitly points to an external network directory. - The `service` key is required for subsequent mounts, to ensure they use the same external network directory as the first mount. -- The `source_path` allows you to point each mount to the same subdirectory **within the shared external network directory**. - -{{% note title = "Example" %}} - -You have a `backend` app and a `frontend` app. -You want both apps to share data from the same mount.
-Follow these steps: - -1. In your `backend` app configuration, define a `storage` mount: - - ```yaml {configFile="app"} - applications: - backend: - mounts: - var/uploads: #The path to your mount within the backend app container. - source: storage - source_path: backend/uploads #The path to the source of the mount within the external network directory. - ``` - - This creates a `storage` mount named `var/uploads` in the `backend` app container. - The mount points to the `backend/uploads` directory within an external network directory. - -2. In your `frontend` app configuration, define another `storage` mount: - - ```yaml {configFile="app"} - applications: - applications: - backend: - mounts: - var/uploads: - source: storage - source_path: backend/uploads - - frontend: - mounts: - web/uploads: #The path to your mount within the frontend app container. - source: storage - service: backend #The name of the other app, so the mount can point to the same external network directory as that other app's mount. - source_path: backend/uploads #The path to the source of the mount within the shared external network directory. - ``` - - This creates another `storage` mount named `web/uploads` in the `frontend` app container. - - The `service` key allows you to specify that the `web/uploads` mount should use the same external network directory as the mount previously defined in the `backend` app container. - - The `source_path` key specifies which subdirectory within the external network directory both mounts should share (here, the `backend/uploads` directory). - -{{% /note %}} - -Note that another way to share data between apps through a mount is by explicitly [defining a Network Storage service](/add-services/network-storage.md). - -## Web - -Use the `web` key to configure the web server running in front of your app. -Defaults may vary with a different [image `type`](#types). - -| Name | Type | Required | Description | -| ----------- | -------------------------------------------- | ----------------------------- | ----------- | -| `commands` | A [web commands dictionary](#web-commands) | See [note](#required-command) | The command to launch your app. | -| `upstream` | An [upstream dictionary](#upstream) | | How the front server connects to your app. | -| `locations` | A [locations dictionary](#locations) | | How the app container responds to incoming requests. | - -See some [examples of how to configure what's served](./web/_index.md). - -### Web commands - - -| Name | Type | Required | Description | -| ------- | -------- | ----------------------------- | ----------- | -| `pre_start` | `string` | | Command run just prior to `start`, which can be useful when you need to run _per-instance_ actions. | -| `start` | `string` | See [note](#required-command) | The command to launch your app. If it terminates, it's restarted immediately. | - -Example: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'python:{{% latest "python" %}}' - web: - commands: - start: 'uwsgi --ini conf/server.ini' -``` -This command runs every time your app is restarted, regardless of whether or not new code is deployed. - -{{< note >}} - -Never "background" a start process using `&`. -That's interpreted as the command terminating and the supervisor process starts a second copy, -creating an infinite loop until the container crashes. -Just run it as normal and allow the {{% vendor/name %}} supervisor to manage it. - -{{< /note >}} - -#### Required command - -On all containers other than PHP, the value for `start` should be treated as required. - -On PHP containers, it's optional and defaults to starting PHP-FPM (`/usr/bin/start-php-app`). -It can also be set explicitly on a PHP container to run a dedicated process, -such as [React PHP](https://github.com/platformsh-examples/platformsh-example-reactphp) -or [Amp](https://github.com/platformsh-examples/platformsh-example-amphp). -See how to set up [alternate start commands on PHP](../languages/php/_index.md#alternate-start-commands). - -### Upstream - -| Name | Type | Required | Description | Default | -| --------------- | ------------------- | -------- | ----------- | ----------- | -| `socket_family` | `tcp` or `unix` | | Whether your app listens on a Unix or TCP socket. | Defaults to `tcp` for all [image types](#types) except PHP; for PHP image types the default is `unix`. | -| `protocol` | `http` or `fastcgi` | | Whether your app receives incoming requests over HTTP or FastCGI. | Default varies based on [image `type`](#types). | - -For PHP, the defaults are configured for PHP-FPM and shouldn't need adjustment. -For all other containers, the default for `protocol` is `http`. - -The following example is the default on non-PHP containers: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'python:{{% latest "python" %}}' - web: - upstream: - socket_family: tcp - protocol: http -``` -#### Where to listen - -Where to listen depends on your setting for `web.upstream.socket_family` (defaults to `tcp`). - -| `socket_family` | Where to listen | -| --------------- | --------------- | -| `tcp` | The port specified by the [`PORT` environment variable](../development/variables/use-variables.md#use-provided-variables) | -| `unix` | The Unix socket file specified by the [`SOCKET` environment variable](../development/variables/use-variables.md#use-provided-variables) | - -If your application isn't listening at the same place that the runtime is sending requests, -you see `502 Bad Gateway` errors when you try to connect to your website. - -### Locations - -Each key in the `locations` dictionary is a path on your site with a leading `/`. -For `example.com`, a `/` matches `example.com/` and `/admin` matches `example.com/admin`. -When multiple keys match an incoming request, the most-specific applies. - -The following table presents possible properties for each location: - -| Name | Type | Default | Description | -| ------------------- | ---------------------------------------------------- | --------- | ----------- | -| `root` | `string` | | The directory to serve static assets for this location relative to the [app's root directory](#root-directory). Must be an actual directory inside the root directory. | -| `passthru` | `boolean` or `string` | `false` | Whether to forward disallowed and missing resources from this location to the app. A string is a path with a leading `/` to the controller, such as `/index.php`.

If your app is in PHP, when setting `passthru` to `true`, you might want to set `scripts` to `false` for enhanced security. This prevents PHP scripts from being executed from the specified location. You might also want to set `allow` to `false` so that not only PHP scripts can't be executed, but their source code also can't be delivered.| -| `index` | Array of `string`s or `null` | | Files to consider when serving a request for a directory. When set, requires access to the files through the `allow` or `rules` keys. | -| `expires` | `string` | `-1` | How long static assets are cached. The default means no caching. Setting it to a value enables the `Cache-Control` and `Expires` headers. Times can be suffixed with `ms` = milliseconds, `s` = seconds, `m` = minutes, `h` = hours, `d` = days, `w` = weeks, `M` = months/30d, or `y` = years/365d. | -| `allow` | `boolean` | `true` | Whether to allow serving files which don't match a rule. | -| `scripts` | `boolean` | | Whether to allow scripts to run. Doesn't apply to paths specified in `passthru`. Meaningful only on PHP containers. | -| `headers` | A headers dictionary | | Any additional headers to apply to static assets, mapping header names to values. Responses from the app aren't affected. | -| `request_buffering` | A [request buffering dictionary](#request-buffering) | See below | Handling for chunked requests. | -| `rules` | A [rules dictionary](#rules) | | Specific overrides for specific locations. | - -#### Rules - -The rules dictionary can override most other keys according to a regular expression. -The key of each item is a regular expression to match paths exactly. -If an incoming request matches the rule, it's handled by the properties under the rule, -overriding any conflicting rules from the rest of the `locations` dictionary. - -Under `rules`, you can set all of the other possible [`locations` properties](#locations) -except `root`, `index` and `request_buffering`. - -In the following example, the `allow` key disallows requests for static files anywhere in the site. -This is overridden by a rule that explicitly allows common image file formats. - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'python:{{% latest "python" %}}' - web: - locations: - '/': - # Handle dynamic requests - root: 'public' - passthru: '/index.php' - # Disallow static files - allow: false - rules: - # Allow common image files only. - '\.(jpe?g|png|gif|svgz?|css|js|map|ico|bmp|eot|woff2?|otf|ttf)$': - allow: true -``` -#### Request buffering - -Request buffering is enabled by default to handle chunked requests as most app servers don't support them. -The following table shows the keys in the `request_buffering` dictionary: - -| Name | Type | Required | Default | Description | -| ------------------ | --------- | -------- | ------- | ----------- | -| `enabled` | `boolean` | Yes | `true` | Whether request buffering is enabled. | -| `max_request_size` | `string` | | `250m` | The maximum size to allow in one request. | - -The default configuration would look like this: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'python:{{% latest "python" %}}' - web: - locations: - '/': - passthru: true - request_buffering: - enabled: true - max_request_size: 250m -``` -## Workers - -Workers are exact copies of the code and compilation output as a `web` instance after a [`build` hook](#hooks). -They use the same container image. - -Workers can't accept public requests and so are suitable only for background tasks. -If they exit, they're automatically restarted. - -The keys of the `workers` definition are the names of the workers. -You can then define how each worker differs from the `web` instance using the [top-level properties](#top-level-properties). - -Each worker can differ from the `web` instance in all properties _except_ for: - -- `build` and `dependencies` properties, which must be the same -- `crons` as cron jobs don't run on workers -- `hooks` as the `build` hook must be the same - and the `deploy` and `post_deploy` hooks don't run on workers. - -A worker named `queue` that was small and had a different start command could look like this: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'python:{{% latest "python" %}}' - workers: - queue: - commands: - start: | - ./worker.sh -``` - -Workers require resource definition using `{{% vendor/cli %}} resources:set`, same as application containers. -For more information, see how to [manage resources](/manage-resources.md). -## Access - -The `access` dictionary has one allowed key: - -| Name | Allowed values | Default | Description | -| ----- | ----------------------------------- | ------------- | ----------- | -| `ssh` | `admin`, `contributor`, or `viewer` | `contributor` | Defines the minimum role required to access app environments via SSH. | - -In the following example, only users with `admin` permissions for the given [environment type](../administration/users.md#environment-type-roles) -can access the deployed environment via SSH: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'python:{{% latest "python" %}}' - access: - ssh: admin -``` -## Variables - -{{% vendor/name %}} provides a number of ways to set [variables](../development/variables/_index.md). -Variables set in your app configuration have the lowest precedence, -meaning they're overridden by any conflicting values provided elsewhere. - -All variables set in your app configuration must have a prefix. -Some [prefixes have specific meanings](../development/variables/_index.md#variable-prefixes). - -Variables with the prefix `env` are available as a separate environment variable. -All other variables are available in the [`PLATFORM_VARIABLES` environment variable](../development/variables/use-variables.md#use-provided-variables). - -The following example sets two variables: - -- A variable named `env:AUTHOR` with the value `Juan` that's available in the environment as `AUTHOR` -- A variable named `d8config:system.site:name` with the value `My site rocks` - that's available in the `PLATFORM_VARIABLES` environment variable - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'python:{{% latest "python" %}}' - variables: - env: - AUTHOR: 'Juan' - d8config: - "system.site:name": 'My site rocks' -``` -You can also define and access more [complex values](../development/variables/use-variables.md#access-complex-values). - -## Firewall - -{{< premium-features/tiered "Elite and Enterprise" >}} - -Set limits in outbound traffic from your app with no impact on inbound requests. - -The `outbound` key is required and contains one or more rules. -The rules define what traffic is allowed; anything unspecified is blocked. - -Each rule has the following properties where at least one is required and `ips` and `domains` can't be specified together: - -| Name | Type | Default | Description | -| --------- | ------------------- | --------------- | ----------- | -| `ips` | Array of `string`s | `["0.0.0.0/0"]` | IP addresses in [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). See a [CIDR format converter](https://www.ipaddressguide.com/cidr). | -| `domains` | Array of `string`s | | [Fully qualified domain names](https://en.wikipedia.org/wiki/Fully_qualified_domain_name) to specify specific destinations by hostname. | -| `ports` | Array of `integer`s | | Ports from 1 to 65535 that are allowed. If any ports are specified, all unspecified ports are blocked. If no ports are specified, all ports are allowed. Port `25`, the SMTP port for sending email, is always blocked. | - -The default settings would look like this: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'python:{{% latest "python" %}}' - firewall: - outbound: - - ips: ["0.0.0.0/0"] -``` -### Support for rules - -Where outbound rules for firewalls are supported in all environments. -### Multiple rules - -Multiple firewall rules can be specified. -In such cases, a given outbound request is allowed if it matches _any_ of the defined rules. - -So in the following example requests to any IP on port 80 are allowed -and requests to 1.2.3.4 on either port 80 or 443 are allowed: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'python:{{% latest "python" %}}' - firewall: - outbound: - - ips: ["1.2.3.4/32"] - ports: [443] - - ports: [80] -``` -### Outbound traffic to CDNs - -Be aware that many services are behind a content delivery network (CDN). -For most CDNs, routing is done via domain name, not IP address, -so thousands of domain names may share the same public IP addresses at the CDN. -If you allow the IP address of a CDN, you are usually allowing many or all of the other customers hosted behind that CDN. - -### Outbound traffic by domain - -You can filter outbound traffic by domain. -Using domains in your rules rather than IP addresses is generally more specific and secure. -For example, if you use an IP address for a service with a CDN, -you have to allow the IP address for the CDN. -This means that you allow potentially hundreds or thousands of other servers also using the CDN. - -An example rule filtering by domain: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'python:{{% latest "python" %}}' - firewall: - outbound: - - protocol: tcp - domains: ["api.stripe.com", "api.twilio.com"] - ports: [80, 443] - - protocol: tcp - ips: ["1.2.3.4/29","2.3.4.5"] - ports: [22] -``` -#### Determine which domains to allow - -To determine which domains to include in your filtering rules, -find the domains your site has requested the DNS to resolve. -Run the following command to parse your server’s `dns.log` file -and display all Fully Qualified Domain Names that have been requested: - -```bash -awk '/query\[[^P]\]/ { print $6 | "sort -u" }' /var/log/dns.log -``` - -The output includes all DNS requests that were made, including those blocked by your filtering rules. -It doesn't include any requests made using an IP address. - -Example output: - -```bash -facebook.com -fastly.com -platform.sh -www.google.com -www.platform.sh -``` - -## Build - -The only property of the `build` dictionary is `flavor`, which specifies a default set of build tasks to run. -Flavors are language-specific. - -See what the build flavor is for your language: - -- [Node.js](../languages/nodejs/_index.md#dependencies) -- [PHP](../languages/php/_index.md#dependencies) - -In all languages, you can also specify a flavor of `none` to take no action at all -(which is the default for any language other than PHP and Node.js). - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'nodejs:{{% latest "nodejs" %}}' - build: - flavor: none -``` -## Dependencies - -Installs global dependencies as part of the build process. -They're independent of your app's dependencies -and are available in the `PATH` during the build process and in the runtime environment. -They're installed before the `build` hook runs using a package manager for the language. - -| Language | Key name | Package manager | -| -------- | --------------------- | --------------- | -| PHP | `php` | [Composer](https://getcomposer.org/) | -| Python 2 | `python` or `python2` | [Pip 2](https://packaging.python.org/tutorials/installing-packages/) | -| Python 3 | `python3` | [Pip 3](https://packaging.python.org/tutorials/installing-packages/) | -| Ruby | `ruby` | [Bundler](https://bundler.io/) | -| Node.js | `nodejs` | [npm](https://www.npmjs.com/) (see [how to use yarn](../languages/nodejs/_index.md#use-yarn-as-a-package-manager))| -| Java | `java` | [Apache Maven](https://maven.apache.org/), [Gradle](https://gradle.org/), or [Apache Ant](https://ant.apache.org/) | - -The format for package names and version constraints are defined by the specific package manager. - -An example of dependencies in multiple languages: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'nodejs:{{% latest "nodejs" %}}' - dependencies: - php: # Specify one Composer package per line. - drush/drush: '8.0.0' - composer/composer: '^2' - python2: # Specify one Python 2 package per line. - behave: '*' - requests: '*' - python3: # Specify one Python 3 package per line. - numpy: '*' - ruby: # Specify one Bundler package per line. - sass: '3.4.7' - nodejs: # Specify one NPM package per line. - pm2: '^4.5.0' -``` -## Hooks - -There are three different hooks that run as part of the process of building and deploying your app. -These are places where you can run custom scripts. -They are: the `build` hook, the `deploy` hook, and the `post_deploy` hook. -Only the `build` hook is run for [worker instances](#workers), while [web instances](#web) run all three. - -The process is ordered as: - -1. Variables accessible at build time become available. -1. [Build flavor](#build) runs if applicable. -1. Any [dependencies](#dependencies) are installed. -1. The `build` hook is run. -1. The file system is changed to read only (except for any [mounts](#mounts)). -1. The app container starts. Variables accessible at runtime and services become available. -1. The `deploy` hook is run. -1. The app container begins accepting requests. -1. The `post_deploy` hook is run. - -Note that if an environment changes by no code changes, only the last step is run. -If you want the entire process to run, see how to [manually trigger builds](../development/troubleshoot.md#manually-trigger-builds). - -### Writable directories during build - -During the `build` hook, there are three writeable directories: - -- `PLATFORM_APP_DIR`: - Where your code is checked out and the working directory when the `build` hook starts. - Becomes the app that gets deployed. -- `PLATFORM_CACHE_DIR`: - Persists between builds, but isn't deployed. - Shared by all builds on all branches. -- `/tmp`: - Isn't deployed and is wiped between each build. - Note that `PLATFORM_CACHE_DIR` is mapped to `/tmp` - and together they offer about 8GB of free space. - -### Hook failure - -Each hook is executed as a single script, so they're considered to have failed only if the final command in them fails. -To cause them to fail on the first failed command, add `set -e` to the beginning of the hook. - -If a `build` hook fails for any reason, the build is aborted and the deploy doesn't happen. -Note that this only works for `build` hooks -- -if other hooks fail, the app is still deployed. - -#### Automated testing - -It’s preferable that you set up and run automated tests in a dedicated CI/CD tool. -Relying on {{% vendor/name %}} hooks for such tasks can prove difficult. - -During the `build` hook, you can halt the deployment on a test failure but the following limitations apply: - -- Access to services such as databases, Redis, Vault KMS, and even writable mounts is disabled. - So any testing that relies on it is sure to fail. -- If you haven’t made changes to your app, an existing build image is reused and the build hook isn’t run. -- Test results are written into your app container, so they might get exposed to a third party. - -During the `deploy` hook, you can access services but **you can’t halt the deployment based on a test failure**. -Note that there are other downsides: - -- Your app container is read-only during the deploy hook, - so if your tests need to write reports and other information, you need to create a file mount for them. -- Your app can only be deployed once the deploy hook has been completed. - Therefore, running automated testing via the deploy hook generates slower deployments. -- Your environment isn’t available externally during the deploy hook. - Unit and integration testing might work without the environment being available, - but you can’t typically perform end-to-end testing until after the environment is up and available. - -## Crons - -The keys of the `crons` definition are the names of the cron jobs. -The names must be unique. - -If an application defines both a `web` instance and `worker` instances, cron jobs run only on the `web` instance. - -See how to [get cron logs](../increase-observability/logs/access-logs.md#container-logs). - -The following table shows the properties for each job: - -| Name | Type | Required | Description | -| ------------------ | -------------------------------------------- | -------- | ----------- | -| `spec` | `string` | Yes | The [cron specification](https://en.wikipedia.org/wiki/Cron#Cron_expression). To prevent competition for resources that might hurt performance, use `H` in definitions to indicate an unspecified but invariant time. For example, instead of using `0 * * * *` to indicate the cron job runs at the start of every hour, you can use `H * * * *` to indicate it runs every hour, but not necessarily at the start. This prevents multiple cron jobs from trying to start at the same time. | -| `commands` | A [cron commands dictionary](#cron-commands) | Yes | A definition of what commands to run when starting and stopping the cron job. | -| `shutdown_timeout` | `integer` | No | When a cron is canceled, this represents the number of seconds after which a `SIGKILL` signal is sent to the process to force terminate it. The default is `10` seconds. | -| `timeout` | `integer` | No | The maximum amount of time a cron can run before it's terminated. Defaults to the maximum allowed value of `86400` seconds (24 hours). - -Note that you can [cancel pending or running crons](../environments/cancel-activity.md). - -### Cron commands - -| Name | Type | Required | Description | -| ------------------ | --------- | -------- | ----------- | -| `start` | `string` | Yes | The command that's run. It's run in [Dash](https://en.wikipedia.org/wiki/Almquist_shell). | -| `stop` | `string` | No | The command that's issued to give the cron command a chance to shutdown gracefully, such as to finish an active item in a list of tasks. Issued when a cron task is interrupted by a user through the CLI or Console. If not specified, a `SIGTERM` signal is sent to the process. | - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'nodejs:{{% latest "nodejs" %}}' - crons: - mycommand: - spec: 'H * * * *' - commands: - start: sleep 60 && echo sleep-60-finished && date - stop: killall sleep - shutdown_timeout: 18 -``` -In this example configuration, the [cron specification](#crons) uses the `H` syntax. - -### Example cron jobs - - -{{< codetabs >}} - -+++ -title=Drupal -+++ - -```yaml {configFile="app"} -{{< snippet name="myapp" config="app" root="/" >}} -type: 'php:{{% latest "php" %}}' -crons: - # Run Drupal's cron tasks every 19 minutes. - drupal: - spec: '*/19 * * * *' - commands: - start: 'cd web ; drush core-cron' - # But also run pending queue tasks every 7 minutes. - # Use an odd number to avoid running at the same time as the `drupal` cron. - drush-queue: - spec: '*/7 * * * *' - commands: - start: 'cd web ; drush queue-run aggregator_feeds' -{{< /snippet >}} -``` - -<---> - -+++ -title=Ruby on Rails -+++ - -```yaml {configFile="app"} -{{< snippet name="myapp" config="app" root="/" >}} -type: 'ruby:{{% latest "ruby" %}}' -crons: - # Execute a rake script every 19 minutes. - ruby: - spec: '*/19 * * * *' - commands: - start: 'bundle exec rake some:task' -{{< /snippet >}} -``` - -<---> - -+++ -title=Laravel -+++ - -```yaml {configFile="app"} -{{< snippet name="myapp" config="app" root="/" >}} -type: 'php:{{% latest "php" %}}' -crons: - # Run Laravel's scheduler every 5 minutes. - scheduler: - spec: '*/5 * * * *' - cmd: 'php artisan schedule:run' -{{< /snippet >}} -``` - -<---> - -+++ -title=Symfony -+++ - -```yaml {configFile="app"} -{{< snippet name="myapp" config="app" root="/" >}} -type: 'php:{{% latest "php" %}}' -crons: - # Take a backup of the environment every day at 5:00 AM. - snapshot: - spec: 0 5 * * * - cmd: | - # Only run for the production environment, aka main branch - if [ "$PLATFORM_ENVIRONMENT_TYPE" = "production" ]; then - croncape symfony ... - fi -{{< /snippet >}} -``` - -{{< /codetabs >}} - - -### Conditional crons - -If you want to set up customized cron schedules depending on the environment type, -define conditional crons. -To do so, use a configuration similar to the following: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'php:{{% latest "php" %}}' - crons: - update: - spec: '0 0 * * *' - commands: - start: | - if [ "$PLATFORM_ENVIRONMENT_TYPE" = production ]; then - {{% vendor/cli %}} backup:create --yes --no-wait - {{% vendor/cli %}} source-operation:run update --no-wait --yes - fi -``` -### Cron job timing - -The minimum time between cron jobs being triggered is 5 minutes. - -For each app container, only one cron job can run at a time. -If a new job is triggered while another is running, the new job is paused until the other completes. - -To minimize conflicts, a random offset is applied to all triggers. -The offset is a random number of seconds up to 20 minutes or the cron frequency, whichever is smaller. - -Crons are also paused while activities such as [backups](/environments/backup) are running. -The crons are queued to run after the other activity finishes. - -To run cron jobs in a timezone other than UTC, set the [timezone property](#top-level-properties). - -### Paused crons - -[Preview environments](/glossary.md#preview-environment) are often used for a limited time and then abandoned. -While it's useful for environments under active development to have scheduled tasks, -unused environments don't need to run cron jobs. -To minimize unnecessary resource use, -crons on environments with no deployments are paused. - -This affects all preview environments, _and_ production environment that do not yet have a domain attached to them. - -Such environments with deployments within 14 days have crons with the status `running`. -If there haven't been any deployments within 14 days, the status is `paused`. - -You can see the status in the Console -or using the CLI by running `{{% vendor/cli %}} environment:info` and looking under `deployment_state`. - -#### Restarting paused crons - -If the crons on your preview environment are paused but you're still using them, -you can push changes to the environment or redeploy it. - -To restart crons without changing anything: - -{{< codetabs >}} - -+++ -title=In the Console -+++ - -1. In the Console, navigate to your project. -1. Open the environment where you'd like the crons to run. -1. Click `Redeploy` next to the cron status of `Paused`. - -<---> - -+++ -title=Using the CLI -+++ - -Run the following command: - -```bash -{{% vendor/cli %}} redeploy -``` - -{{< /codetabs >}} - -## Runtime - -The following table presents the various possible modifications to your PHP or Lisp runtime: - -| Name | Type | Language | Description | -| --------------------------- | ---------------------------------------------------------- | -------- | ----------- | -| `extensions` | List of `string`s OR [extensions definitions](#extensions) | PHP | [PHP extensions](../languages/php/extensions.md) to enable. | -| `disabled_extensions` | List of `string`s | PHP | [PHP extensions](../languages/php/extensions.md) to disable. | -| `request_terminate_timeout` | `integer` | PHP | The timeout for serving a single request after which the PHP-FPM worker process is killed. | -| `sizing_hints` | A [sizing hints definition](#sizing-hints) | PHP | The assumptions for setting the number of workers in your PHP-FPM runtime. | -| `xdebug` | An Xdebug definition | PHP | The setting to turn on [Xdebug](../languages/php/xdebug.md). | -| `quicklisp` | Distribution definitions | Lisp | [Distributions for QuickLisp](../languages/lisp.md#quicklisp-options) to use. | - -You can also set your [app's runtime timezone](../create-apps/timezone.md). - -### Extensions - -You can enable [PHP extensions](../languages/php/extensions.md) just with a list of extensions: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'php:{{% latest "php" %}}' - runtime: - extensions: - - geoip - - tidy -``` -Alternatively, if you need to include configuration options, use a dictionary for that extension: - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'php:{{% latest "php" %}}' - runtime: - extensions: - - geoip - - name: blackfire - configuration: - server_id: foo - server_token: bar -``` -In this case, the `name` property is required. - -### Sizing hints - -The following table shows the properties that can be set in `sizing_hints`: - -| Name | Type | Default | Minimum | Description | -| ----------------- | --------- | ------- | ------- | ----------- | -| `request_memory` | `integer` | 45 | 10 | The average memory consumed per request in MB. | -| `reserved_memory` | `integer` | 70 | 70 | The amount of memory reserved in MB. | - -See more about [PHP-FPM workers and sizing](../languages/php/fpm.md). - -## Source - -The following table shows the properties that can be set in `source`: - - -| Name | Type | Required | Description | -| ------------ | ------------------------ | -------- | ----------- | -| `operations` | An operations dictionary | | Operations that can be applied to the source code. See [source operations](./source-operations.md) | -| `root` | `string` | | The path where the app code lives. Defaults to the root project directory. Useful for [multi-app setups](./multi-app/_index.md). | - -## Container profile - -By default, Upsun allocates a container profile to each app and service depending on the range of resources it’s expected to need. - -Each container profile gives you access to a specific list of CPU and RAM combinations. -Using the Upsun CLI or Console, you can then pick a CPU and RAM combination for each of your apps and services. - -- [Container profile types and resources](/manage-resources/adjust-resources#advanced-container-profiles) -- [Default container profiles](/manage-resources/adjust-resources#default-container-profiles) for runtime and service containers -- [Customize resources using the `container_profile` key](/manage-resources/adjust-resources#adjust-a-container-profile) - -## Additional hosts - -If you're using a private network with specific IP addresses you need to connect to, -you might want to map those addresses to hostnames to better remember and organize them. -In such cases, you can add a map of those IP addresses to whatever hostnames you like. -Then when your app tries to access the hostname, it's sent to the proper IP address. - -So in the following example, if your app tries to access `api.example.com`, it's sent to `192.0.2.23`. - -```yaml {configFile="app"} -applications: - myapp: - source: - root: "/" - type: 'php:{{% latest "php" %}}' - additional_hosts: - api.example.com: "192.0.2.23" - web.example.com: "203.0.113.42" -``` - -This is equivalent to adding the mapping to the `/etc/hosts` file for the container. diff --git a/sites/upsun/src/create-apps/app-reference/_index.md b/sites/upsun/src/create-apps/app-reference/_index.md new file mode 100644 index 0000000000..8be7bfa012 --- /dev/null +++ b/sites/upsun/src/create-apps/app-reference/_index.md @@ -0,0 +1,32 @@ +--- +title: "App reference" +weight: 4 +description: Configure your app and control how it's built and deployed on {{% vendor/name %}}. +layout: single +--- + +To define your app, you can either use one of {{% vendor/name %}}'s [single-runtime image](/create-apps/app-reference/single-runtime-image.md) +or its [composable image (BETA)](/create-apps/app-reference/composable-image.md). + +## Single-runtime image + +{{% vendor/name %}} provides and maintains a list of single-runtime images you can use for each of your application containers.
+See [all of the options you can use](/create-apps/app-reference/single-runtime-image.md) to define your app using a single-runtime image. + +## Composable image (BETA) + +The {{% vendor/name %}} composable image provides more flexibility than single-runtime images. +When using a composable image, you can define a stack (or group of packages) for your application container to use. + +There are over 80,000 packages available from the [Nix Packages collection](https://search.nixos.org/) that you can add to your stack. +You can add as many packages to your application container as you need. + +{{% note %}} + +{{% vendor/name %}} guarantees optimal user experience with the specific [set of packages](/create-apps/app-reference/composable-image.md#supported-nix-packages) it supports. +You can use any other package available from the [Nix Packages collection](https://search.nixos.org/), including unstable ones, +but NixOs is reponsible for their support. + +{{% /note %}} + +See [all of the options you can use](/create-apps/app-reference/composable-image.md) to define your app using the composable image. diff --git a/sites/upsun/src/create-apps/app-reference/composable-image.md b/sites/upsun/src/create-apps/app-reference/composable-image.md new file mode 100644 index 0000000000..7a9715e85e --- /dev/null +++ b/sites/upsun/src/create-apps/app-reference/composable-image.md @@ -0,0 +1,1286 @@ +--- +title: "Composable image" +weight: 5 +description: Use {{% vendor/name %}}'s composable image to build and deploy your app. +beta: true +banner: + title: Beta Feature + body: The {{% vendor/name %}} composable image is currently available in Beta. + This feature as well as its documentation is subject to change. +--- + +The {{% vendor/name %}} composable image provides enhanced flexibility when defining your app. +It allows you to install several runtimes and tools in your application container, +in a **"one image to rule them all"** approach. + +The composable image is built on [Nix](https://nix.dev), which offers the following benefits: + +- You can add as many packages to your application container as you need, + choosing from over 80,000 packages from [the Nixpkgs collection](https://search.nixos.org/packages). +- The packages you add are built in total isolation, so you can easily install different versions of the same package. +- With [Nix](https://nix.dev/reference/glossary#term-Nix), there are no undeclared dependencies in your source code. + What works on your local machine is guaranteed to work on any other machine. + +This page introduces all the settings available to configure your composable image from your `{{< vendor/configfile "app" >}}` file +(usually located at the root of your Git repository).
+Note that multi-app projects can be [set in various ways](../multi-app/_index.md). + +{{% note theme="info" title="Further resources"%}} + +For a more detailed introduction to the composable image, check out [this video](https://www.youtube.com/watch?v=emOt32DVl28).
+If you're pressed for time, jump to this comprehensive [configuration example](../_index.md#comprehensive-example). + +{{% /note %}} + +## Primary application properties + +All application configuration takes place in a `{{< vendor/configfile "app" >}}` file, with each application configured +under a unique key beneath the top-level `applications` key. + +It is possible to use multiple runtimes in a single application container, +for instance PHP, NodeJS and Python, while remaining in control of their versions. + +For example, the unified `{{< vendor/configfile "app" >}}` file may look like the following: + +```yaml {configFile="app"} +applications: + frontend: + stack: + - "php@{{% latest "php" %}}": + extensions: + - apcu + - sodium + - xsl + - pdo_sqlite + - "nodejs@{{% latest "nodejs" %}}" + - "python@3.12" + # Additional frontend configuration +``` + +The following table presents all properties available at the level just below the unique application name (`frontend` +above). + +The column _Set in instance?_ defines whether the given property can be overridden within a `web` or `workers` instance. +To override any part of a property, you have to provide the entire property. + +| Name | Type | Required | Set in instance? | Description | +|--------------------|-----------------------------------------------------|----------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `stack` | An array of [Nix packages](#stack) | Yes | No | A list of packages from the {{% vendor/name %}} collection of [supported runtimes](#supported-nix-packages) and/or from [NixPkgs](https://search.nixos.org/packages). | +| `relationships` | A dictionary of [relationships](#relationships) | | Yes | Connections to other services and apps. | +| `mounts` | A dictionary of [mounts](#mounts) | | Yes | Directories that are writable even after the app is built. Allocated disk for mounts is defined with a separate resource configuration call using `{{% vendor/cli %}} resources:set`. | +| `web` | A [web instance](#web) | | N/A | How the web application is served. | +| `workers` | A [worker instance](#workers) | | N/A | Alternate copies of the application to run as background processes. | +| `timezone` | `string` | | No | The timezone for crons to run. Format: a [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Defaults to `UTC`, which is the timezone used for all logs no matter the value here. See also [app runtime timezones](../timezone.md) | +| `access` | An [access dictionary](#access) | | Yes | Access control for roles accessing app environments. | +| `variables` | A [variables dictionary](#variables) | | Yes | Variables to control the environment. | +| `firewall` | A [firewall dictionary](#firewall) | | Yes | Outbound firewall rules for the application. | +| `hooks` | A [hooks dictionary](#hooks) | | No | What commands run at different stages in the build and deploy process. | +| `crons` | A [cron dictionary](#crons) | | No | Scheduled tasks for the app. | +| `source` | A [source dictionary](#source) | | No | Information on the app's source code and operations that can be run on it. | +| `additional_hosts` | An [additional hosts dictionary](#additional-hosts) | | Yes | Maps of hostnames to IP addresses. | + +{{% note %}} +The ``type``, ``build``, ``dependencies``, and ``runtime`` keys are only supported when using a [single-runtime image](/create-apps/app-reference/single-runtime-image.md). +They are **not** supported when using the composable image. +They are replaced by the `stack` key. +{{% /note %}} + +## Stack + +Use the ``stack`` key to define which runtimes and binaries you want to install in your application container. +Define them as a YAML array as follows: + +```yaml {configFile="app"} +applications: + app: + stack: [ "@" ] + # OR + stack: + - "@" +``` + +To add a language to your stack, use the `@` format.
+To add a tool to your stack, use the `` format, as no version is needed. + +#### Primary runtime + +If you add multiple runtimes to your application container, +the first declared runtime becomes the primary runtime. +The primary runtime is the one that is automatically started. + +To start other declared runtimes, you need to start them manually, using [web commands](#web-commands). +To find out which start command to use, go to the [Languages](/languages/_index.md) section, +and visit the documentation page dedicated to your runtime. + +{{% note %}} +If you use PHP, note that PHP-FPM is only started automatically if PHP is defined as the primary runtime. +{{% /note %}} + +### Supported Nix packages + +{{% note %}} +The Nix packages listed in the following table are officially supported by {{% vendor/name %}} to provide optimal user experience.
+However, you can add any other packages from [the Nixpkgs collection](https://search.nixos.org/) to your `stack`. +This includes packages from the ``unstable`` channel, +like [FrankenPHP](https://search.nixos.org/packages?channel=unstable&show=frankenphp&from=0&size=50&sort=relevance&type=packages&query=frankenphp).
+While available for you to install, packages that aren't listed in the following table are supported by Nix itself, not {{% vendor/name %}}. +{{% /note %}} + +Depending on the Nix package, you can select only the major runtime version, +or the major and minor runtime versions as shown in the table. +Security and other patches are applied automatically. + +| **Language** | **Nix package** | **Supported version(s)** | +|----------------------------------------------|---------------|----------------------------| +| [Clojure](https://clojure.org/) | `clojure` | 1 | +| [Common Lisp (SBCL)](/languages/lisp.html) | `sbcl` | 2 | +| [Elixir](/languages/elixir.html) | `elixir` | 1.15, 1.14 | +| [Go](/languages/go.html) | `golang` | 1.22, 1.21, 1.20 | +| [Java](/languages/java.html) | `java` | 21 | +| [Javascript/Bun](https://bun.sh/) | `bun` | 1 | +| [JavaScript/Node.js](/languages/nodejs.html) | `nodejs` | 21, 20, 18 | +| [Perl](https://www.perl.org/) | `perl` | 5 | +| [PHP](/languages/php.html) | `php` | 8.3, 8.2, 8.1 | +| [Python](/languages/python.html) | `python` | 3.12, 3.11, 3.10, 3.9, 2.7 | + +**Example:** + +You want to add PHP version {{% latest php %}} and ``facedetect`` to your application container. +To do so, use the following configuration: + +```yaml {configFile="app"} +applications: + app: + stack: [ "php@{{% latest php %}}", "facedetect" ] + # OR + stack: + - "php@{{% latest php %}}" + - "facedetect" +``` + +### PHP extensions and Python packages + +When you add PHP or Python to your application container, +you can define which extensions (for PHP) or packages (for Python) you also want to add to your stack. + +To find out which extensions you can install with your runtime, +follow these steps: + +1. Go to the [NixOS search](https://search.nixos.org/). +2. Enter a runtime and click **Search**. +3. In the **Package sets** side bar, select the right set of extensions/packages for your runtime version.
+ You can choose the desired extensions/packages from the filtered results. + +![Screenshot of the Nix package sets selection for PHP@8.3](/images/nixos/nixos-packages.png "0.5") + +#### Install PHP extensions + +To enable [PHP extensions](/languages/php/extensions.md), +specify a list of `extensions` below the language definition.
+To disable [PHP extensions](/languages/php/extensions.md), +specify a list of `disabled_extensions` below the language definition.
+For instance: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: + - "php@{{% latest "php" %}}": + extensions: + - apcu + - sodium + - xsl + - pdo_sqlite + disabled_extensions: + - gd +``` + +{{% note %}} +To help you find out the name of the PHP package you want to use, +some maintainers provide a ``PHP upstream extension`` value in the [NixOS search engine](https://search.nixos.org/packages?channel=unstable&show=php82Extensions.gd). + +![Screenshot of an upstream extension value shown in the NixOS search](/images/nixos/nixossearch-upstream-value.png "0.5") + +If this information is not provided, note that PHP package names on NixOS always respect the ``Extensions.`` format. +Therefore, you can copy the ```` as shown in the NixOS search results, and use it in your configuration. + +Note that you can use environment variables or your `php.ini` file to [include further configuration options](/languages/php/_index.md#customize-php-settings) +for your PHP extensions. + +{{% /note %}} + +#### Install Python packages + +To install Python packages, add them to your stack as new packages. +To do so, use the full name of the package. + +For instance, to install [``python312Packages.yq``](https://search.nixos.org/packages?channel=unstable&show=python312Packages.yq), +use the following configuration: + +```yaml {configFile="app"} +applications: + myapp: + stack: + - "python@3.12" + - "python312Packages.yq" # python package specific +``` + +Alternatively, if you need to include configuration options for your extensions, use either your ``php.ini`` file or [environment variables](/development/variables/set-variables.md). + +### Example configuration + +Here is a full composable image configuration example. Note the use of the `@` format. + +```yaml {configFile="app"} +applications: + myapp: + stack: + - "php@{{% latest "php" %}}" + extensions: + - apcu + - sodium + - xsl + - pdo_sqlite + - "python@3.12" + - "python312Packages.yq" # python package specific + - "yq" # tool +``` + +### Combine single-runtime and composable images + +In a [multiple application context](/create-apps/multi-app/_index.md), +you can use a mix of [single-runtime images](/create-apps/app-reference/single-runtime-image.md) +and [composable images](/create-apps/app-reference/composable-image.md). +Here is an example configuration including a ``frontend`` app and a ``backend`` app: + +```yaml {configFile="app"} +applications: + frontend: + stack: + - "php@{{% latest "php" %}}" + extensions: + - apcu + - sodium + - xsl + - pdo_sqlite + - "python@3.12" + - "python312Packages.yq" # python package specific + backend: + type: 'nodejs:{{% latest "nodejs" %}} +``` + +{{% note %}} +If you add multiple runtimes to your application container, +the first declared runtime becomes the primary runtime. +The primary runtime is the one that is automatically started. + +To start other declared runtimes, you need to start them manually, using [web commands](#web-commands). +To find out which start command to use, go to the [Languages](/languages/_index.md) section, +and visit the documentation page dedicated to your language. + +If you use PHP, note that PHP-FPM is only started automatically if PHP is defined as the primary runtime. +{{% /note %}} + +## Resources + +Resources for application containers are not committed to YAML files, but instead managed over the API using either the +Console or the `{{% vendor/cli %}} resources:set` command. + +For more information, see how to [manage resources](/manage-resources.md). + +{{% note %}} +Composable image container profile defaults to ``HIGH_CPU``. +
If multiple runtimes are added to your stack, +you would need to change +the [default container_profile](/manage-resources/adjust-resources.md#advanced-container-profiles) +
or change [default CPU and RAM ratio](/manage-resources/resource-init.md) on first deployment using the following +commands: + +```bash +{{% vendor/cli %}} push --resources-init=manual +``` + +{{% /note %}} + +## Relationships + +To access another container within your project, you need to define a relationship to it. +You can give each relationship any name you want. + +The relationship is specified in the form `service_name:endpoint_name`. +The `service_name` is the name of the service given in the [services configuration](/add-services/_index.md) +or the name of another application in the same project specified as the `name` in that app's configration. + +The `endpoint_name` is the exposed functionality of the service to use. +For most services, the endpoint is the same as the service type. +For some services (such as [MariaDB](/add-services/mysql/_index.md#multiple-databases) +and [Solr](/add-services/solr.md#solr-6-and-later)), +you can define additional explicit endpoints for multiple databases and cores in +the [service's configuration](/add-services/_index.md). + +The following example shows a single MySQL service named `mysqldb` offering two databases, +a Redis cache service named `rediscache`, and an Elasticsearch service named `searchserver`. + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "nodejs@{{% latest nodejs %}}" ] + relationships: + database: 'mysqldb:db1' + database2: 'mysqldb:db2' + cache: 'rediscache:redis' + search: 'searchserver:elasticsearch' +``` + +{{% note %}} +Once a service is running and exposed via a relationship, +its credentials (such as the host, username, and password) are automatically available +as [service environment variables](/development/variables.html#service-environment-variables), +in the `$_` format. +The available information is documented on each service's page, along with sample code for how to connect to it from +your app. +{{% /note %}} + +## Available disk space + +Disk for application containers are not committed to YAML files, but instead managed over the API using either the +Console or the `{{% vendor/cli %}} resources:set` command. + +For more information, see how to [manage resources](/manage-resources.md). + +### Downsize a disk + +{{% disk-downsize type="app" %}} + +## Mounts + +After your app is built, its file system is read-only. +To make changes to your app's code, you need to use Git. + +For enhanced flexibility, {{% vendor/name %}} allows you to define and use writable directories called "mounts". +Mounts give you write access to files generated by your app (such as cache and log files) +and uploaded files without going through Git. + +When you define a mount, you are mounting an external directory to your app container, +much like you would plug a hard drive into your computer to transfer data. + +{{% note %}} + +- Mounts aren't available during the build +- When you [back up an environment](/environments/backup.md), the mounts on that environment are backed up too + +{{% /note %}} + +### Define a mount + +To define a mount, use the following configuration: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "nodejs@{{% latest nodejs %}}" ] + mounts: + '{{< variable "MOUNT_PATH" >}}': + source: {{< variable "MOUNT_TYPE" >}} + source_path: {{< variable "SOURCE_PATH_LOCATION" >}} +``` + +{{< variable "MOUNT_PATH" >}} is the path to your mount **within the app container** (relative to the app's root). +If you already have a directory with that name, you get a warning that it isn't accessible after the build. +See how to [troubleshoot the warning](../troubleshoot-mounts.md#overlapping-folders). + +| Name | Type | Required | Description | +|---------------|--------------------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `source` | `storage`, `tmp`, or `service` | Yes | Specifies the type of the mount:

- By design, `storage` mounts can be shared between instances of the same app. You can also configure them so they are [shared between different apps](#share-a-mount-between-several-apps).

- `tmp` mounts are local ephemeral mounts, where an external directory is mounted to the `/tmp` directory of your app.
The content of a `tmp` mount **may be removed during infrastructure maintenance operations**. Therefore, `tmp` mounts allow you to **store files that you’re not afraid to lose**, such as your application cache that can be seamlessly rebuilt.
Note that the `/tmp` directory has **a maximum allocation of 8 GB**.

- `service` mounts can be useful if you want to explicitly define and use a [Network Storage](/add-services/network-storage.md) service to share data between different apps (instead of using a `storage` mount). | +| `source_path` | `string` | No | Specifies where the mount points **inside the [external directory](#mounts)**.

- If you explicitly set a `source_path`, your mount points to a specific subdirectory in the external directory.

- If the `source_path` is an empty string (`""`), your mount points to the entire external directory.

- If you don't define a `source_path`, {{% vendor/name %}} uses the {{< variable "MOUNT_PATH" >}} as default value, without leading or trailing slashes.
For example, if your mount lives in the `/web/uploads/` directory in your app container, it will point to a directory named `web/uploads` in the external directory.

**WARNING:** Changing the name of your mount affects the `source_path` when it's undefined. See [how to ensure continuity](#ensure-continuity-when-changing-the-name-of-your-mount) and maintain access to your files. | +| `service` | `string` | | The purpose of the `service` key depends on your use case.

In a multi-app context where a `storage` mount is shared between apps, `service` is required. Its value is the name of the app whose mount you want to share. See how to [share a mount between several apps](#share-a-mount-between-several-apps).

In a multi-app context where a [Network Storage service](/add-services/network-storage.md) (`service` mount) is shared between apps, `service` is required and specifies the name of that Network Storage. | + +The accessibility to the web of a mounted directory depends on the [`web.locations` configuration](#web). +Files can be all public, all private, or with different rules for different paths and file types. + +Note that when you remove a `tmp` mount from your `{{< vendor/configfile "app" >}}` file, +the mounted directory isn't deleted. +The files still exist on disk until manually removed, +or until the app container is moved to another host during a maintenance operation. + +### Example configuration + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "nodejs@{{% latest nodejs %}}" ] + mounts: + 'web/uploads': + source: storage + source_path: uploads + '/.tmp_platformsh': + source: tmp + source_path: files/.tmp_platformsh + '/build': + source: storage + source_path: files/build + '/.cache': + source: tmp + source_path: files/.cache + '/node_modules/.cache': + source: tmp + source_path: files/node_modules/.cache +``` + +### Ensure continuity when changing the name of your mount + +Changing the name of your mount affects the default `source_path`. + +Say you have a `/my/cache/` mount with an undefined `source_path`: + +```yaml {configFile="app"} +mounts: + '/my/cache/': + source: tmp +``` + +If you rename the mount to `/cache/files/`, it will point to a new, empty `/cache/files/` directory. + +To ensure continuity, you need to explicitly define the `source_path` as the previous name of the mount, without leading +or trailing slashes: + + ```yaml {configFile="app"} +mounts: + '/cache/files/': + source: tmp + source_path: my/cache +``` + +The `/cache/files/` mount will point to the original `/my/cache/` directory, maintaining access to all your existing +files in that directory. + +### Share a mount between several apps + +By design, [`storage` mounts](#mounts) are shared **between different instances of the same app**, +which enables [horizontal scaling](/manage-resources/_index.md). + +In a [multi-application context](/create-apps/multi-app/_index.md), +you can even share a `storage` mount **between different applications** in the same project. + +To do so, you need to define a `storage` mount in each of your app containers, +and point each of those mounts to the same shared external network directory. + +Use the following configuration: + +```yaml {configFile="app"} +applications: + app1: + mounts: + '{{< variable "MOUNT_PATH_1" >}}': + source: storage + source_path: {{< variable "SOURCE_PATH_LOCATION" >}} + + app2: + mounts: + '{{< variable "MOUNT_PATH_2" >}}': + source: storage + service: app1 + source_path: {{< variable "SOURCE_PATH_LOCATION" >}} +``` + +- {{< variable "MOUNT_PATH_1" >}} and {{< variable "MOUNT_PATH_2" >}} are the paths to each mount **within their + respective app container** (relative to the app's root). +- When configuring the first `storage` mount, you don't need to include the `service` key. + The first mount implicitly points to an external network directory. + The `service` key is required for subsequent mounts, to ensure they use the same external network directory as the + first mount. +- The `source_path` allows you to point each mount to the same subdirectory **within the shared external network + directory**. + +{{% note title = "Example" %}} + +You have a `backend` app and a `frontend` app. +You want both apps to share data from the same mount.
+Follow these steps: + +1. In your `backend` app configuration, define a `storage` mount: + + ```yaml {configFile="app"} + applications: + backend: + mounts: + var/uploads: #The path to your mount within the backend app container. + source: storage + source_path: backend/uploads #The path to the source of the mount within the external network directory. + ``` + + This creates a `storage` mount named `var/uploads` in the `backend` app container. + The mount points to the `backend/uploads` directory within an external network directory. + +2. In your `frontend` app configuration, define another `storage` mount: + + ```yaml {configFile="app"} + applications: + applications: + backend: + mounts: + var/uploads: + source: storage + source_path: backend/uploads + + frontend: + mounts: + web/uploads: #The path to your mount within the frontend app container. + source: storage + service: backend #The name of the other app, so the mount can point to the same external network directory as that other app's mount. + source_path: backend/uploads #The path to the source of the mount within the shared external network directory. + ``` + + This creates another `storage` mount named `web/uploads` in the `frontend` app container. + + The `service` key allows you to specify that the `web/uploads` mount should use the same external network directory + as the mount previously defined in the `backend` app container. + + The `source_path` key specifies which subdirectory within the external network directory both mounts should share ( + here, the `backend/uploads` directory). + +{{% /note %}} + +Note that another way to share data between apps through a mount is by +explicitly [defining a Network Storage service](/add-services/network-storage.md). + +### Local mounts + +If you need a local mount (i.e. unique per container), +{{% vendor/name %}} allows you to mount a directory within the `/tmp` directory of your app. +However, the following limitations apply: + +- Content from `tmp` mounts is removed when your app container is moved to another host during an infrastructure + maintenance operation +- The `/tmp` directory has a [maximum allocation of 8 GB](/create-apps/troubleshoot-disks.md#no-space-left-on-device) + +Therefore, `tmp` mounts are ideal to store non-critical data, such as your application cache which can be seamlessly +rebuilt, +but aren't suitable for storing files that are necessary for your app to run smoothly. + +Note that {{% vendor/name %}} will provide new local mounts in the near future. + +## Web + +Use the `web` key to configure the web server running in front of your app. + +| Name | Type | Required | Description | +|-------------|--------------------------------------------|-------------------------------|------------------------------------------------------| +| `commands` | A [web commands dictionary](#web-commands) | See [note](#required-command) | The command to launch your app. | +| `upstream` | An [upstream dictionary](#upstream) | | How the front server connects to your app. | +| `locations` | A [locations dictionary](#locations) | | How the app container responds to incoming requests. | + +See some [examples of how to configure what's served](../web/_index.md). + +### Web commands + +| Name | Type | Required | Description | +|-------------|----------|-------------------------------|-----------------------------------------------------------------------------------------------------| +| `pre_start` | `string` | | Command run just prior to `start`, which can be useful when you need to run _per-instance_ actions. | +| `start` | `string` | See [note](#required-command) | The command to launch your app. If it terminates, it's restarted immediately. | + +Example: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "python@{{% latest python %}}" ] + web: + commands: + start: 'uwsgi --ini conf/server.ini' +``` + +This command runs every time your app is restarted, regardless of whether or not new code is deployed. + +{{< note >}} + +Never "background" a start process using `&`. +That's interpreted as the command terminating and the supervisor process starts a second copy, +creating an infinite loop until the container crashes. +Just run it as normal and allow the {{% vendor/name %}} supervisor to manage it. + +{{< /note >}} + +#### Required command + +On all containers other than PHP, the value for `start` should be treated as required. + +On PHP containers, it's optional and defaults to starting PHP-FPM (`/usr/bin/start-php-app`). +It can also be set explicitly on a PHP container to run a dedicated process, +such as [React PHP](https://github.com/platformsh-examples/platformsh-example-reactphp) +or [Amp](https://github.com/platformsh-examples/platformsh-example-amphp). +See how to set up [alternate start commands on PHP](/languages/php/_index.md#alternate-start-commands). + +### Upstream + +| Name | Type | Required | Description | Default | +|-----------------|---------------------|----------|-------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------| +| `socket_family` | `tcp` or `unix` | | Whether your app listens on a Unix or TCP socket. | Defaults to `tcp` for all [primary runtimes](#primary-runtime) except PHP; for PHP the default is `unix`. | +| `protocol` | `http` or `fastcgi` | | Whether your app receives incoming requests over HTTP or FastCGI. | Default varies based on the [primary runtimes](#primary-runtime). | + +For PHP, the defaults are configured for PHP-FPM and shouldn't need adjustment. +For all other containers, the default for `protocol` is `http`. + +The following example is the default on non-PHP containers: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "python@{{% latest python %}}" ] + web: + upstream: + socket_family: tcp + protocol: http +``` + +#### Where to listen + +Where to listen depends on your setting for `web.upstream.socket_family` (defaults to `tcp`). + +| `socket_family` | Where to listen | +|-----------------|---------------------------------------------------------------------------------------------------------------------------------------| +| `tcp` | The port specified by the [`PORT` environment variable](/development/variables/use-variables.md#use-provided-variables) | +| `unix` | The Unix socket file specified by the [`SOCKET` environment variable](/development/variables/use-variables.md#use-provided-variables) | + +If your application isn't listening at the same place that the runtime is sending requests, +you see `502 Bad Gateway` errors when you try to connect to your website. + +### Locations + +Each key in the `locations` dictionary is a path on your site with a leading `/`. +For `example.com`, a `/` matches `example.com/` and `/admin` matches `example.com/admin`. +When multiple keys match an incoming request, the most-specific applies. + +The following table presents possible properties for each location: + +| Name | Type | Default | Description | +|---------------------|------------------------------------------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `root` | `string` | | The directory to serve static assets for this location relative to the app's root directory ([see `source.root`](#source)). Must be an actual directory inside the root directory. | +| `passthru` | `boolean` or `string` | `false` | Whether to forward disallowed and missing resources from this location to the app. A string is a path with a leading `/` to the controller, such as `/index.php`.

If your app is in PHP, when setting `passthru` to `true`, you might want to set `scripts` to `false` for enhanced security. This prevents PHP scripts from being executed from the specified location. You might also want to set `allow` to `false` so that not only PHP scripts can't be executed, but their source code also can't be delivered. | +| `index` | Array of `string`s or `null` | | Files to consider when serving a request for a directory. When set, requires access to the files through the `allow` or `rules` keys. | +| `expires` | `string` | `-1` | How long static assets are cached. The default means no caching. Setting it to a value enables the `Cache-Control` and `Expires` headers. Times can be suffixed with `ms` = milliseconds, `s` = seconds, `m` = minutes, `h` = hours, `d` = days, `w` = weeks, `M` = months/30d, or `y` = years/365d. | +| `allow` | `boolean` | `true` | Whether to allow serving files which don't match a rule. | +| `scripts` | `boolean` | | Whether to allow scripts to run. Doesn't apply to paths specified in `passthru`. Meaningful only on PHP containers. | +| `headers` | A headers dictionary | | Any additional headers to apply to static assets, mapping header names to values. Responses from the app aren't affected. | +| `request_buffering` | A [request buffering dictionary](#request-buffering) | See below | Handling for chunked requests. | +| `rules` | A [rules dictionary](#rules) | | Specific overrides for specific locations. | + +#### Rules + +The rules dictionary can override most other keys according to a regular expression. +The key of each item is a regular expression to match paths exactly. +If an incoming request matches the rule, it's handled by the properties under the rule, +overriding any conflicting rules from the rest of the `locations` dictionary. + +Under `rules`, you can set all of the other possible [`locations` properties](#locations) +except `root`, `index` and `request_buffering`. + +In the following example, the `allow` key disallows requests for static files anywhere in the site. +This is overridden by a rule that explicitly allows common image file formats. + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "python@{{% latest python %}}" ] + web: + locations: + '/': + # Handle dynamic requests + root: 'public' + passthru: '/index.php' + # Disallow static files + allow: false + rules: + # Allow common image files only. + '\.(jpe?g|png|gif|svgz?|css|js|map|ico|bmp|eot|woff2?|otf|ttf)$': + allow: true +``` + +#### Request buffering + +Request buffering is enabled by default to handle chunked requests as most app servers don't support them. +The following table shows the keys in the `request_buffering` dictionary: + +| Name | Type | Required | Default | Description | +|--------------------|-----------|----------|---------|-------------------------------------------| +| `enabled` | `boolean` | Yes | `true` | Whether request buffering is enabled. | +| `max_request_size` | `string` | | `250m` | The maximum size to allow in one request. | + +The default configuration would look like this: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "python@{{% latest python %}}" ] + web: + locations: + '/': + passthru: true + request_buffering: + enabled: true + max_request_size: 250m +``` + +## Workers + +Workers are exact copies of the code and compilation output as a `web` instance after a [`build` hook](#hooks). +They use the same container image. + +Workers can't accept public requests and so are suitable only for background tasks. +If they exit, they're automatically restarted. + +The keys of the `workers` definition are the names of the workers. +You can then define how each worker differs from the `web` instance using +the [top-level properties](#top-level-properties). + +Each worker can differ from the `web` instance in all properties _except_ for: + +- `build` and `dependencies` properties, which must be the same +- `crons` as cron jobs don't run on workers +- `hooks` as the `build` hook must be the same + and the `deploy` and `post_deploy` hooks don't run on workers. + +A worker named `queue` that was small and had a different start command could look like this: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "python@{{% latest python %}}" ] + workers: + queue: + commands: + start: | + ./worker.sh +``` + +Workers require resource definition using `{{% vendor/cli %}} resources:set`, same as application containers. +For more information, see how to [manage resources](/manage-resources.md). + +## Access + +The `access` dictionary has one allowed key: + +| Name | Allowed values | Default | Description | +|-------|-------------------------------------|---------------|-----------------------------------------------------------------------| +| `ssh` | `admin`, `contributor`, or `viewer` | `contributor` | Defines the minimum role required to access app environments via SSH. | + +In the following example, only users with `admin` permissions for the +given [environment type](/administration/users.md#environment-type-roles) +can access the deployed environment via SSH: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "python@{{% latest python %}}" ] + access: + ssh: admin +``` + +## Variables + +{{% vendor/name %}} provides a number of ways to set [variables](/development/variables/_index.md). +Variables set in your app configuration have the lowest precedence, +meaning they're overridden by any conflicting values provided elsewhere. + +All variables set in your app configuration must have a prefix. +Some [prefixes have specific meanings](/development/variables/_index.md#variable-prefixes). + +Variables with the prefix `env` are available as a separate environment variable. +All other variables are available in +the [`PLATFORM_VARIABLES` environment variable](/development/variables/use-variables.md#use-provided-variables). + +The following example sets two variables: + +- A variable named `env:AUTHOR` with the value `Juan` that's available in the environment as `AUTHOR` +- A variable named `d8config:system.site:name` with the value `My site rocks` + that's available in the `PLATFORM_VARIABLES` environment variable + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "python@{{% latest python %}}" ] + variables: + env: + AUTHOR: 'Juan' + d8config: + "system.site:name": 'My site rocks' +``` + +You can also define and access more [complex values](/development/variables/use-variables.md#access-complex-values). + +## Firewall + +{{< premium-features/tiered "Elite and Enterprise" >}} + +Set limits in outbound traffic from your app with no impact on inbound requests. + +The `outbound` key is required and contains one or more rules. +The rules define what traffic is allowed; anything unspecified is blocked. + +Each rule has the following properties where at least one is required and `ips` and `domains` can't be specified +together: + +| Name | Type | Default | Description | +|-----------|---------------------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `ips` | Array of `string`s | `["0.0.0.0/0"]` | IP addresses in [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). See a [CIDR format converter](https://www.ipaddressguide.com/cidr). | +| `domains` | Array of `string`s | | [Fully qualified domain names](https://en.wikipedia.org/wiki/Fully_qualified_domain_name) to specify specific destinations by hostname. | +| `ports` | Array of `integer`s | | Ports from 1 to 65535 that are allowed. If any ports are specified, all unspecified ports are blocked. If no ports are specified, all ports are allowed. Port `25`, the SMTP port for sending email, is always blocked. | + +The default settings would look like this: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "python@{{% latest python %}}" ] + firewall: + outbound: + - ips: [ "0.0.0.0/0" ] +``` + +### Support for rules + +Where outbound rules for firewalls are supported in all environments. + +### Multiple rules + +Multiple firewall rules can be specified. +In such cases, a given outbound request is allowed if it matches _any_ of the defined rules. + +So in the following example requests to any IP on port 80 are allowed +and requests to 1.2.3.4 on either port 80 or 443 are allowed: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "python@{{% latest python %}}" ] + firewall: + outbound: + - ips: [ "1.2.3.4/32" ] + ports: [ 443 ] + - ports: [ 80 ] +``` + +### Outbound traffic to CDNs + +Be aware that many services are behind a content delivery network (CDN). +For most CDNs, routing is done via domain name, not IP address, +so thousands of domain names may share the same public IP addresses at the CDN. +If you allow the IP address of a CDN, you are usually allowing many or all of the other customers hosted behind that +CDN. + +### Outbound traffic by domain + +You can filter outbound traffic by domain. +Using domains in your rules rather than IP addresses is generally more specific and secure. +For example, if you use an IP address for a service with a CDN, +you have to allow the IP address for the CDN. +This means that you allow potentially hundreds or thousands of other servers also using the CDN. + +An example rule filtering by domain: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "python@{{% latest python %}}" ] + firewall: + outbound: + - protocol: tcp + domains: [ "api.stripe.com", "api.twilio.com" ] + ports: [ 80, 443 ] + - protocol: tcp + ips: [ "1.2.3.4/29","2.3.4.5" ] + ports: [ 22 ] +``` + +#### Determine which domains to allow + +To determine which domains to include in your filtering rules, +find the domains your site has requested the DNS to resolve. +Run the following command to parse your server’s `dns.log` file +and display all Fully Qualified Domain Names that have been requested: + +```bash +awk '/query\[[^P]\]/ { print $6 | "sort -u" }' /var/log/dns.log +``` + +The output includes all DNS requests that were made, including those blocked by your filtering rules. +It doesn't include any requests made using an IP address. + +Example output: + +```bash +facebook.com +fastly.com +upsun.com +www.google.com +www.upsun.com +``` +## Hooks + +There are three different hooks that run as part of the process of building and deploying your app. +These are places where you can run custom scripts. +They are: the `build` hook, the `deploy` hook, and the `post_deploy` hook. +Only the `build` hook is run for [worker instances](#workers), while [web instances](#web) run all three. + +The process is ordered as: + +1. Variables accessible at build time become available. +1. The `build` hook is run. +1. The file system is changed to read only (except for any [mounts](#mounts)). +1. The app container starts. Variables accessible at runtime and services become available. +1. The `deploy` hook is run. +1. The app container begins accepting requests. +1. The `post_deploy` hook is run. + +Note that if an environment changes by no code changes, only the last step is run. +If you want the entire process to run, see how +to [manually trigger builds](/development/troubleshoot.md#manually-trigger-builds). + +### Writable directories during build + +During the `build` hook, there are three writeable directories: + +- `PLATFORM_APP_DIR`: + Where your code is checked out and the working directory when the `build` hook starts. + Becomes the app that gets deployed. +- `PLATFORM_CACHE_DIR`: + Persists between builds, but isn't deployed. + Shared by all builds on all branches. +- `/tmp`: + Isn't deployed and is wiped between each build. + Note that `PLATFORM_CACHE_DIR` is mapped to `/tmp` + and together they offer about 8GB of free space. + +### Hook failure + +Each hook is executed as a single script, so they're considered to have failed only if the final command in them fails. +To cause them to fail on the first failed command, add `set -e` to the beginning of the hook. + +If a `build` hook fails for any reason, the build is aborted and the deploy doesn't happen. +Note that this only works for `build` hooks -- +if other hooks fail, the app is still deployed. + +#### Automated testing + +It’s preferable that you set up and run automated tests in a dedicated CI/CD tool. +Relying on {{% vendor/name %}} hooks for such tasks can prove difficult. + +During the `build` hook, you can halt the deployment on a test failure but the following limitations apply: + +- Access to services such as databases, Redis, Vault KMS, and even writable mounts is disabled. + So any testing that relies on it is sure to fail. +- If you haven’t made changes to your app, an existing build image is reused and the build hook isn’t run. +- Test results are written into your app container, so they might get exposed to a third party. + +During the `deploy` hook, you can access services but **you can’t halt the deployment based on a test failure**. +Note that there are other downsides: + +- Your app container is read-only during the deploy hook, + so if your tests need to write reports and other information, you need to create a file mount for them. +- Your app can only be deployed once the deploy hook has been completed. + Therefore, running automated testing via the deploy hook generates slower deployments. +- Your environment isn’t available externally during the deploy hook. + Unit and integration testing might work without the environment being available, + but you can’t typically perform end-to-end testing until after the environment is up and available. + +## Crons + +The keys of the `crons` definition are the names of the cron jobs. +The names must be unique. + +If an application defines both a `web` instance and `worker` instances, cron jobs run only on the `web` instance. + +See how to [get cron logs](/increase-observability/logs/access-logs.md#container-logs). + +The following table shows the properties for each job: + +| Name | Type | Required | Description | +|--------------------|----------------------------------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `spec` | `string` | Yes | The [cron specification](https://en.wikipedia.org/wiki/Cron#Cron_expression). To prevent competition for resources that might hurt performance, use `H` in definitions to indicate an unspecified but invariant time. For example, instead of using `0 * * * *` to indicate the cron job runs at the start of every hour, you can use `H * * * *` to indicate it runs every hour, but not necessarily at the start. This prevents multiple cron jobs from trying to start at the same time. | +| `commands` | A [cron commands dictionary](#cron-commands) | Yes | A definition of what commands to run when starting and stopping the cron job. | +| `shutdown_timeout` | `integer` | No | When a cron is canceled, this represents the number of seconds after which a `SIGKILL` signal is sent to the process to force terminate it. The default is `10` seconds. | +| `timeout` | `integer` | No | The maximum amount of time a cron can run before it's terminated. Defaults to the maximum allowed value of `86400` seconds (24 hours). | + +Note that you can [cancel pending or running crons](/environments/cancel-activity.md). + +### Cron commands + +| Name | Type | Required | Description | +|---------|----------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `start` | `string` | Yes | The command that's run. It's run in [Dash](https://en.wikipedia.org/wiki/Almquist_shell). | +| `stop` | `string` | No | The command that's issued to give the cron command a chance to shutdown gracefully, such as to finish an active item in a list of tasks. Issued when a cron task is interrupted by a user through the CLI or Console. If not specified, a `SIGTERM` signal is sent to the process. | + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "nodejs@{{% latest nodejs %}}" ] + crons: + mycommand: + spec: 'H * * * *' + commands: + start: sleep 60 && echo sleep-60-finished && date + stop: killall sleep + shutdown_timeout: 18 +``` + +In this example configuration, the [cron specification](#crons) uses the `H` syntax. + +### Example cron jobs + + +{{< codetabs >}} + ++++ +title=Drupal ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +stack: [ "php@{{% latest php %}}" ] +crons: + # Run Drupal's cron tasks every 19 minutes. + drupal: + spec: '*/19 * * * *' + commands: + start: 'cd web ; drush core-cron' + # But also run pending queue tasks every 7 minutes. + # Use an odd number to avoid running at the same time as the `drupal` cron. + drush-queue: + spec: '*/7 * * * *' + commands: + start: 'cd web ; drush queue-run aggregator_feeds' +{{< /snippet >}} +``` + +<---> + ++++ +title=Ruby on Rails ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +stack: [ "ruby@{{% latest ruby %}}" ] +crons: + # Execute a rake script every 19 minutes. + ruby: + spec: '*/19 * * * *' + commands: + start: 'bundle exec rake some:task' +{{< /snippet >}} +``` + +<---> + ++++ +title=Laravel ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +stack: [ "php@{{% latest php %}}" ] +crons: + # Run Laravel's scheduler every 5 minutes. + scheduler: + spec: '*/5 * * * *' + cmd: 'php artisan schedule:run' +{{< /snippet >}} +``` + +<---> + ++++ +title=Symfony ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +stack: [ "php@{{% latest php %}}" ] +crons: + # Take a backup of the environment every day at 5:00 AM. + snapshot: + spec: 0 5 * * * + cmd: | + # Only run for the production environment, aka main branch + if [ "$PLATFORM_ENVIRONMENT_TYPE" = "production" ]; then + croncape symfony ... + fi +{{< /snippet >}} +``` + +{{< /codetabs >}} + + +### Conditional crons + +If you want to set up customized cron schedules depending on the environment type, +define conditional crons. +To do so, use a configuration similar to the following: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "php@{{% latest php %}}" ] + crons: + update: + spec: '0 0 * * *' + commands: + start: | + if [ "$PLATFORM_ENVIRONMENT_TYPE" = production ]; then + {{% vendor/cli %}} backup:create --yes --no-wait + {{% vendor/cli %}} source-operation:run update --no-wait --yes + fi +``` + +### Cron job timing + +The minimum time between cron jobs being triggered is 5 minutes. + +For each app container, only one cron job can run at a time. +If a new job is triggered while another is running, the new job is paused until the other completes. + +To minimize conflicts, a random offset is applied to all triggers. +The offset is a random number of seconds up to 20 minutes or the cron frequency, whichever is smaller. + +Crons are also paused while activities such as [backups](/environments/backup) are running. +The crons are queued to run after the other activity finishes. + +To run cron jobs in a timezone other than UTC, set the [timezone property](#top-level-properties). + +### Paused crons + +[Preview environments](/glossary.md#preview-environment) are often used for a limited time and then abandoned. +While it's useful for environments under active development to have scheduled tasks, +unused environments don't need to run cron jobs. +To minimize unnecessary resource use, +crons on environments with no deployments are paused. + +This affects all preview environments, _and_ production environment that do not yet have a domain attached to them. + +Such environments with deployments within 14 days have crons with the status `running`. +If there haven't been any deployments within 14 days, the status is `paused`. + +You can see the status in the Console +or using the CLI by running `{{% vendor/cli %}} environment:info` and looking under `deployment_state`. + +#### Restarting paused crons + +If the crons on your preview environment are paused but you're still using them, +you can push changes to the environment or redeploy it. + +To restart crons without changing anything: + +{{< codetabs >}} + ++++ +title=In the Console ++++ + +1. In the Console, navigate to your project. +1. Open the environment where you'd like the crons to run. +1. Click `Redeploy` next to the cron status of `Paused`. + +<---> + ++++ +title=Using the CLI ++++ + +Run the following command: + +```bash +{{% vendor/cli %}} redeploy +``` + +{{< /codetabs >}} + +### Sizing hints + +The following table shows the properties that can be set in `sizing_hints`: + +| Name | Type | Default | Minimum | Description | +|-------------------|-----------|---------|---------|------------------------------------------------| +| `request_memory` | `integer` | 45 | 10 | The average memory consumed per request in MB. | +| `reserved_memory` | `integer` | 70 | 70 | The amount of memory reserved in MB. | + +See more about [PHP-FPM workers and sizing](/languages/php/fpm.md). + +{{% note title="TODO" %}} +Not sure if applicable. +{{% /note %}} + +## Source + +The following table shows the properties that can be set in `source`: + +| Name | Type | Required | Description | +|--------------|--------------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------| +| `operations` | An operations dictionary | | Operations that can be applied to the source code. See [source operations](../source-operations.md) | +| `root` | `string` | | The path where the app code lives. Defaults to the root project directory. Useful for [multi-app setups](../multi-app/_index.md). | + +## Container profile + +By default, {{% vendor/name %}} allocates a container profile to each app and service depending on the range of resources it’s +expected to need. + +Each container profile gives you access to a specific list of CPU and RAM combinations. +Using the {{% vendor/name %}} CLI or Console, you can then pick a CPU and RAM combination for each of your apps and services. + +- [Container profile types and resources](/manage-resources/adjust-resources#advanced-container-profiles) +- [Default container profiles](/manage-resources/adjust-resources#default-container-profiles) for runtime and service + containers +- [Customize resources using the `container_profile` key](/manage-resources/adjust-resources#adjust-a-container-profile) + +## Additional hosts + +If you're using a private network with specific IP addresses you need to connect to, +you might want to map those addresses to hostnames to better remember and organize them. +In such cases, you can add a map of those IP addresses to whatever hostnames you like. +Then when your app tries to access the hostname, it's sent to the proper IP address. + +So in the following example, if your app tries to access `api.example.com`, it's sent to `192.0.2.23`. + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + stack: [ "php@{{% latest php %}}" ] + additional_hosts: + api.example.com: "192.0.2.23" + web.example.com: "203.0.113.42" +``` + +This is equivalent to adding the mapping to the `/etc/hosts` file for the container. diff --git a/sites/upsun/src/create-apps/app-reference/single-runtime-image.md b/sites/upsun/src/create-apps/app-reference/single-runtime-image.md new file mode 100644 index 0000000000..12414643e1 --- /dev/null +++ b/sites/upsun/src/create-apps/app-reference/single-runtime-image.md @@ -0,0 +1,1246 @@ +--- +title: "Single-runtime image" +weight: 4 +description: See all of the options for controlling your apps and how they're built and deployed on {{% vendor/name %}}. +--- + +{{% description %}} + +Configuration is all done in a `{{< vendor/configfile "app" >}}` file, +located at the root of your Git repository. + +See a [comprehensive example](../_index.md#comprehensive-example) of a configuration in +a `{{< vendor/configfile "app" >}}` file. + +## Primary application properties + +All application configuration takes place in a `{{< vendor/configfile "app" >}}` file, with each application configured +under a unique key beneath the top-level `applications` key. +For example, it is possible to deploy two application containers - one JavaScript and the other Python - for the +frontend and backend components of a deployed site. + +In this case, the unified `{{< vendor/configfile "app" >}}` file would look like: + +```yaml {configFile="app"} +applications: + frontend: + type: 'nodejs:{{% latest "nodejs" %}}' + # Additional frontend configuration + backend: + type: 'python:{{% latest "python" %}}' + # Additional backend configuration +``` + +The following table presents all properties available at the level just below the unique application name (`frontend` +and `backend` above). + +The column _Set in instance?_ defines whether the given property can be overridden within a `web` or `workers` instance. +To override any part of a property, you have to provide the entire property. + +| Name | Type | Required | Set in instance? | Description | +|--------------------|-----------------------------------------------------|----------|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `type` | A [type](#types) | Yes | No | The base image to use with a specific app language. Format: `runtime:version`. | +| `relationships` | A dictionary of [relationships](#relationships) | | Yes | Connections to other services and apps. | +| `mounts` | A dictionary of [mounts](#mounts) | | Yes | Directories that are writable even after the app is built. Allocated disk for mounts is defined with a separate resource configuration call using `{{% vendor/cli %}} resources:set`. | +| `web` | A [web instance](#web) | | N/A | How the web application is served. | +| `workers` | A [worker instance](#workers) | | N/A | Alternate copies of the application to run as background processes. | +| `timezone` | `string` | | No | The timezone for crons to run. Format: a [TZ database name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Defaults to `UTC`, which is the timezone used for all logs no matter the value here. See also [app runtime timezones](../timezone.md) | +| `access` | An [access dictionary](#access) | | Yes | Access control for roles accessing app environments. | +| `variables` | A [variables dictionary](#variables) | | Yes | Variables to control the environment. | +| `firewall` | A [firewall dictionary](#firewall) | | Yes | Outbound firewall rules for the application. | +| `build` | A [build dictionary](#build) | | No | What happens when the app is built. | +| `dependencies` | A [dependencies dictionary](#dependencies) | | No | What global dependencies to install before the `build` hook is run. | +| `hooks` | A [hooks dictionary](#hooks) | | No | What commands run at different stages in the build and deploy process. | +| `crons` | A [cron dictionary](#crons) | | No | Scheduled tasks for the app. | +| `source` | A [source dictionary](#source) | | No | Information on the app's source code and operations that can be run on it. | +| `runtime` | A [runtime dictionary](#runtime) | | No | Customizations to your PHP or Lisp runtime. | +| `additional_hosts` | An [additional hosts dictionary](#additional-hosts) | | Yes | Maps of hostnames to IP addresses. | + +## Root directory + +Some of the properties you can define are relative to your app's root directory. +The root defaults to the root of the repository. + +```yaml {configFile="app"} +applications: + frontend: + type: 'nodejs:{{% latest "nodejs" %}}' + # Default behavior of source.root + source: + root: "/" +``` + +That is, if a custom value for `source.root` is not provided in your configuration, the default behavior is equivalent +to the above. + +To specify another directory, for example for a [multi-app project](../multi-app/_index.md), +use the [`source.root` property](#source). + +## Types + +{{% note theme="info" %}} +You can now use the Upsun composable image (BETA) to install runtimes and tools in your application container. +If you've reached this section from another page, you may be interested in supported `stacks` where `type` was referenced. +See [supported Nix packages for the `stack` key](/create-apps/app-reference/composable-image#supported-nix-packages) for more information. +{{% /note %}} + +The `type` defines the base container image used to run the application. +The version is the major (`X`) and sometimes minor (`X.Y`) version numbers, +depending on the service, as in the following table. +Security and other patches are taken care of for you automatically. + +Available languages and their supported versions: + +{{< readFile file="registry/images/tables/runtimes_supported.md" markdownify="true">}} + +### Example configuration + +These are used in the format `runtime:version`: + +```yaml {configFile="app"} +applications: + myapp: + type: 'php:{{% latest "php" %}}' +``` + +### Mix of images + +In a [multiple application context](/create-apps/multi-app/_index.md), you can mix both [single-runtime image](/create-apps/app-reference/single-runtime-image.md) and [Composable Image (BETA)](/create-apps/app-reference/composable-image.md) per application. + +As an example configuration for a ``frontend`` and a ``backend`` application: + +```yaml {configFile="app"} +applications: + backend: + type: 'nodejs:{{% latest "nodejs" %}} + frontend: + stack: + - "php@{{% latest "php" %}}" + extensions: + - apcu + - sodium + - xsl + - pdo_sqlite + - "python@3.12" + - "python312Packages.yq" # python package specific +``` + +## Resources + +Resources for application containers are not committed to YAML files, but instead managed over the API using either the +Console or the `{{% vendor/cli %}} resources:set` command. + +For more information, see how to [manage resources](/manage-resources.md). + +## Relationships + +To access another container within your project, you need to define a relationship to it. +You can give each relationship any name you want. + +The relationship is specified in the form `service_name:endpoint_name`. +The `service_name` is the name of the service given in the [services configuration](/add-services/_index.md) +or the name of another application in the same project specified as the `name` in that app's configration. + +The `endpoint_name` is the exposed functionality of the service to use. +For most services, the endpoint is the same as the service type. +For some services (such as [MariaDB](/add-services/mysql/_index.md#multiple-databases) +and [Solr](/add-services/solr.md#solr-6-and-later)), +you can define additional explicit endpoints for multiple databases and cores in +the [service's configuration](/add-services/_index.md). + +The following example shows a single MySQL service named `mysqldb` offering two databases, +a Redis cache service named `rediscache`, and an Elasticsearch service named `searchserver`. + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'nodejs:{{% latest "nodejs" %}}' + relationships: + database: 'mysqldb:db1' + database2: 'mysqldb:db2' + cache: 'rediscache:redis' + search: 'searchserver:elasticsearch' +``` + +{{% note %}} +Once a service is running and exposed via a relationship, +its credentials (such as the host, username, and password) are automatically available +as [service environment variables](/development/variables.html#service-environment-variables), +in the `$_` format. +The available information is documented on each service's page, along with sample code for how to connect to it from +your app. +{{% /note %}} + +## Available disk space + +Disk for application containers are not committed to YAML files, but instead managed over the API using either the +Console or the `{{% vendor/cli %}} resources:set` command. + +For more information, see how to [manage resources](/manage-resources.md). + +### Downsize a disk + +{{% disk-downsize type="app" %}} + +## Mounts + +After your app is built, its file system is read-only. +To make changes to your app's code, you need to use Git. + +For enhanced flexibility, {{% vendor/name %}} allows you to define and use writable directories called "mounts". +Mounts give you write access to files generated by your app (such as cache and log files) +and uploaded files without going through Git. + +When you define a mount, you are mounting an external directory to your app container, +much like you would plug a hard drive into your computer to transfer data. + +{{% note %}} + +- Mounts aren't available during the build +- When you [back up an environment](/environments/backup.md), the mounts on that environment are backed up too + +{{% /note %}} + +### Define a mount + +To define a mount, use the following configuration: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: nodejs:{{% latest "nodejs" %}} + mounts: + '{{< variable "MOUNT_PATH" >}}': + source: {{< variable "MOUNT_TYPE" >}} + source_path: {{< variable "SOURCE_PATH_LOCATION" >}} +``` + +{{< variable "MOUNT_PATH" >}} is the path to your mount **within the app container** (relative to the app's root). +If you already have a directory with that name, you get a warning that it isn't accessible after the build. +See how to [troubleshoot the warning](../troubleshoot-mounts.md#overlapping-folders). + +<<<<<<<< HEAD:sites/upsun/src/create-apps/app-reference/single-runtime-image.md +| Name | Type | Required | Description | +|---------------|--------------------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `source` | `storage`, `tmp`, or `service` | Yes | Specifies the type of the mount:

- By design, `storage` mounts can be shared between instances of the same app. You can also configure them so they are [shared between different apps](#share-a-mount-between-several-apps).

- `tmp` mounts are local ephemeral mounts, where an external directory is mounted to the `/tmp` directory of your app.
The content of a `tmp` mount **may be removed during infrastructure maintenance operations**. Therefore, `tmp` mounts allow you to **store files that you’re not afraid to lose**, such as your application cache that can be seamlessly rebuilt.
Note that the `/tmp` directory has **a maximum allocation of 8 GB**.

- `service` mounts can be useful if you want to explicitly define and use a [Network Storage](/add-services/network-storage.md) service to share data between different apps (instead of using a `storage` mount). | +| `source_path` | `string` | No | Specifies where the mount points **inside the [external directory](#mounts)**.

- If you explicitly set a `source_path`, your mount points to a specific subdirectory in the external directory.

- If the `source_path` is an empty string (`""`), your mount points to the entire external directory.

- If you don't define a `source_path`, {{% vendor/name %}} uses the {{< variable "MOUNT_PATH" >}} as default value, without leading or trailing slashes.
For example, if your mount lives in the `/web/uploads/` directory in your app container, it will point to a directory named `web/uploads` in the external directory.

**WARNING:** Changing the name of your mount affects the `source_path` when it's undefined. See [how to ensure continuity](#ensure-continuity-when-changing-the-name-of-your-mount) and maintain access to your files. | +| `service` | `string` | | The purpose of the `service` key depends on your use case.

In a multi-app context where a `storage` mount is shared between apps, `service` is required. Its value is the name of the app whose mount you want to share. See how to [share a mount between several apps](#share-a-mount-between-several-apps).

In a multi-app context where a [Network Storage service](/add-services/network-storage.md) (`service` mount) is shared between apps, `service` is required and specifies the name of that Network Storage. | +======== + +| Name | Type | Required | Description | +| ------------- | -------------------- | -------- | ----------- | +| `source` | `storage`, `instance`, `tmp` (also called `temporary`), or `service` | Yes | Specifies the type of the mount:

- By design, `storage` mounts can be shared between instances of the same app. You can also configure them so they are [shared between different apps](#share-a-mount-between-several-apps).

-`instance` mounts are local mounts. Unique to your app, they are useful to store files that remain local to the app instance, such as application logs.

- `tmp` (or `temporary`) mounts are local ephemeral mounts, where an external directory is mounted to the `/tmp` directory of your app.
The content of a `tmp` mount **may be removed during infrastructure maintenance operations**. Therefore, `tmp` mounts allow you to **store files that you’re not afraid to lose**, such as your application cache that can be seamlessly rebuilt.
Note that the `/tmp` directory has **a maximum allocation of 8 GB**.

- `service` mounts can be useful if you want to explicitly define and use a [Network Storage](/add-services/network-storage.md) service to share data between different apps (instead of using a `storage` mount).| +| `source_path` | `string` | No | Specifies where the mount points **inside the [external directory](#mounts)**.

- If you explicitly set a `source_path`, your mount points to a specific subdirectory in the external directory.

- If the `source_path` is an empty string (`""`), your mount points to the entire external directory.

- If you don't define a `source_path`, {{% vendor/name %}} uses the {{< variable "MOUNT_PATH" >}} as default value, without leading or trailing slashes.
For example, if your mount lives in the `/web/uploads/` directory in your app container, it will point to a directory named `web/uploads` in the external directory.

**WARNING:** Changing the name of your mount affects the `source_path` when it's undefined. See [how to ensure continuity](#ensure-continuity-when-changing-the-name-of-your-mount) and maintain access to your files. | +| `service` | `string` | | The purpose of the `service` key depends on your use case.

In a multi-app context where a `storage` mount is shared between apps, `service` is required. Its value is the name of the app whose mount you want to share. See how to [share a mount between several apps](#share-a-mount-between-several-apps).

In a multi-app context where a [Network Storage service](/add-services/network-storage.md) (`service` mount) is shared between apps, `service` is required and specifies the name of that Network Storage. | +>>>>>>>> ga-staging:sites/upsun/src/create-apps/app-reference.md + +The accessibility to the web of a mounted directory depends on the [`web.locations` configuration](#web). +Files can be all public, all private, or with different rules for different paths and file types. + +Note that when you remove a `tmp` mount from your `{{< vendor/configfile "app" >}}` file, +the mounted directory isn't deleted. +The files still exist on disk until manually removed, +or until the app container is moved to another host during a maintenance operation. + +### Example configuration + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: nodejs:20 + mounts: + 'web/uploads': + source: storage + source_path: uploads + '/.tmp_platformsh': + source: tmp + source_path: files/.tmp_platformsh + '/build': + source: storage + source_path: files/build + '/.cache': + source: tmp + source_path: files/.cache + '/node_modules/.cache': + source: tmp + source_path: files/node_modules/.cache +``` + +### Ensure continuity when changing the name of your mount + +Changing the name of your mount affects the default `source_path`. + +Say you have a `/my/cache/` mount with an undefined `source_path`: + +```yaml {configFile="app"} +mounts: + '/my/cache/': + source: tmp +``` + +If you rename the mount to `/cache/files/`, it will point to a new, empty `/cache/files/` directory. + +To ensure continuity, you need to explicitly define the `source_path` as the previous name of the mount, without leading +or trailing slashes: + + ```yaml {configFile="app"} +mounts: + '/cache/files/': + source: tmp + source_path: my/cache +``` + +The `/cache/files/` mount will point to the original `/my/cache/` directory, maintaining access to all your existing +files in that directory. + +### Share a mount between several apps + +By design, [`storage` mounts](#mounts) are shared **between different instances of the same app**, +which enables [horizontal scaling](/manage-resources/_index.md). + +In a [multi-application context](/create-apps/multi-app/_index.md), +you can even share a `storage` mount **between different applications** in the same project. + +To do so, you need to define a `storage` mount in each of your app containers, +and point each of those mounts to the same shared external network directory. + +Use the following configuration: + +```yaml {configFile="app"} +applications: + app1: + mounts: + '{{< variable "MOUNT_PATH_1" >}}': + source: storage + source_path: {{< variable "SOURCE_PATH_LOCATION" >}} + + app2: + mounts: + '{{< variable "MOUNT_PATH_2" >}}': + source: storage + service: app1 + source_path: {{< variable "SOURCE_PATH_LOCATION" >}} +``` + +- {{< variable "MOUNT_PATH_1" >}} and {{< variable "MOUNT_PATH_2" >}} are the paths to each mount **within their + respective app container** (relative to the app's root). +- When configuring the first `storage` mount, you don't need to include the `service` key. + The first mount implicitly points to an external network directory. + The `service` key is required for subsequent mounts, to ensure they use the same external network directory as the + first mount. +- The `source_path` allows you to point each mount to the same subdirectory **within the shared external network + directory**. + +{{% note title = "Example" %}} + +You have a `backend` app and a `frontend` app. +You want both apps to share data from the same mount.
+Follow these steps: + +1. In your `backend` app configuration, define a `storage` mount: + + ```yaml {configFile="app"} + applications: + backend: + mounts: + var/uploads: #The path to your mount within the backend app container. + source: storage + source_path: backend/uploads #The path to the source of the mount within the external network directory. + ``` + + This creates a `storage` mount named `var/uploads` in the `backend` app container. + The mount points to the `backend/uploads` directory within an external network directory. + +2. In your `frontend` app configuration, define another `storage` mount: + + ```yaml {configFile="app"} + applications: + applications: + backend: + mounts: + var/uploads: + source: storage + source_path: backend/uploads + + frontend: + mounts: + web/uploads: #The path to your mount within the frontend app container. + source: storage + service: backend #The name of the other app, so the mount can point to the same external network directory as that other app's mount. + source_path: backend/uploads #The path to the source of the mount within the shared external network directory. + ``` + + This creates another `storage` mount named `web/uploads` in the `frontend` app container. + + The `service` key allows you to specify that the `web/uploads` mount should use the same external network directory + as the mount previously defined in the `backend` app container. + + The `source_path` key specifies which subdirectory within the external network directory both mounts should share ( + here, the `backend/uploads` directory). + +{{% /note %}} + +Note that another way to share data between apps through a mount is by +explicitly [defining a Network Storage service](/add-services/network-storage.md). + +<<<<<<<< HEAD:sites/upsun/src/create-apps/app-reference/single-runtime-image.md +### Local mounts + +If you need a local mount (i.e. unique per container), +{{% vendor/name %}} allows you to mount a directory within the `/tmp` directory of your app. +However, the following limitations apply: + +- Content from `tmp` mounts is removed when your app container is moved to another host during an infrastructure + maintenance operation +- The `/tmp` directory has a [maximum allocation of 8 GB](/create-apps/troubleshoot-disks.md#no-space-left-on-device) + +Therefore, `tmp` mounts are ideal to store non-critical data, such as your application cache which can be seamlessly +rebuilt, +but aren't suitable for storing files that are necessary for your app to run smoothly. + +Note that {{% vendor/name %}} will provide new local mounts in the near future. + +======== +>>>>>>>> ga-staging:sites/upsun/src/create-apps/app-reference.md +## Web + +Use the `web` key to configure the web server running in front of your app. +Defaults may vary with a different [image `type`](#types). + +| Name | Type | Required | Description | +|-------------|--------------------------------------------|-------------------------------|------------------------------------------------------| +| `commands` | A [web commands dictionary](#web-commands) | See [note](#required-command) | The command to launch your app. | +| `upstream` | An [upstream dictionary](#upstream) | | How the front server connects to your app. | +| `locations` | A [locations dictionary](#locations) | | How the app container responds to incoming requests. | + +See some [examples of how to configure what's served](../web/_index.md). + +### Web commands + +| Name | Type | Required | Description | +|-------------|----------|-------------------------------|-----------------------------------------------------------------------------------------------------| +| `pre_start` | `string` | | Command run just prior to `start`, which can be useful when you need to run _per-instance_ actions. | +| `start` | `string` | See [note](#required-command) | The command to launch your app. If it terminates, it's restarted immediately. | + +Example: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'python:{{% latest "python" %}}' + web: + commands: + start: 'uwsgi --ini conf/server.ini' +``` + +This command runs every time your app is restarted, regardless of whether or not new code is deployed. + +{{< note >}} + +Never "background" a start process using `&`. +That's interpreted as the command terminating and the supervisor process starts a second copy, +creating an infinite loop until the container crashes. +Just run it as normal and allow the {{% vendor/name %}} supervisor to manage it. + +{{< /note >}} + +#### Required command + +On all containers other than PHP, the value for `start` should be treated as required. + +On PHP containers, it's optional and defaults to starting PHP-FPM (`/usr/bin/start-php-app`). +It can also be set explicitly on a PHP container to run a dedicated process, +such as [React PHP](https://github.com/platformsh-examples/platformsh-example-reactphp) +or [Amp](https://github.com/platformsh-examples/platformsh-example-amphp). +See how to set up [alternate start commands on PHP](/languages/php/_index.md#alternate-start-commands). + +### Upstream + +| Name | Type | Required | Description | Default | +|-----------------|---------------------|----------|-------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------| +| `socket_family` | `tcp` or `unix` | | Whether your app listens on a Unix or TCP socket. | Defaults to `tcp` for all [image types](#types) except PHP; for PHP image types the default is `unix`. | +| `protocol` | `http` or `fastcgi` | | Whether your app receives incoming requests over HTTP or FastCGI. | Default varies based on [image `type`](#types). | + +For PHP, the defaults are configured for PHP-FPM and shouldn't need adjustment. +For all other containers, the default for `protocol` is `http`. + +The following example is the default on non-PHP containers: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'python:{{% latest "python" %}}' + web: + upstream: + socket_family: tcp + protocol: http +``` + +#### Where to listen + +Where to listen depends on your setting for `web.upstream.socket_family` (defaults to `tcp`). + +| `socket_family` | Where to listen | +|-----------------|---------------------------------------------------------------------------------------------------------------------------------------| +| `tcp` | The port specified by the [`PORT` environment variable](/development/variables/use-variables.md#use-provided-variables) | +| `unix` | The Unix socket file specified by the [`SOCKET` environment variable](/development/variables/use-variables.md#use-provided-variables) | + +If your application isn't listening at the same place that the runtime is sending requests, +you see `502 Bad Gateway` errors when you try to connect to your website. + +### Locations + +Each key in the `locations` dictionary is a path on your site with a leading `/`. +For `example.com`, a `/` matches `example.com/` and `/admin` matches `example.com/admin`. +When multiple keys match an incoming request, the most-specific applies. + +The following table presents possible properties for each location: + +| Name | Type | Default | Description | +|---------------------|------------------------------------------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `root` | `string` | | The directory to serve static assets for this location relative to the [app's root directory](#root-directory). Must be an actual directory inside the root directory. | +| `passthru` | `boolean` or `string` | `false` | Whether to forward disallowed and missing resources from this location to the app. A string is a path with a leading `/` to the controller, such as `/index.php`.

If your app is in PHP, when setting `passthru` to `true`, you might want to set `scripts` to `false` for enhanced security. This prevents PHP scripts from being executed from the specified location. You might also want to set `allow` to `false` so that not only PHP scripts can't be executed, but their source code also can't be delivered. | +| `index` | Array of `string`s or `null` | | Files to consider when serving a request for a directory. When set, requires access to the files through the `allow` or `rules` keys. | +| `expires` | `string` | `-1` | How long static assets are cached. The default means no caching. Setting it to a value enables the `Cache-Control` and `Expires` headers. Times can be suffixed with `ms` = milliseconds, `s` = seconds, `m` = minutes, `h` = hours, `d` = days, `w` = weeks, `M` = months/30d, or `y` = years/365d. | +| `allow` | `boolean` | `true` | Whether to allow serving files which don't match a rule. | +| `scripts` | `boolean` | | Whether to allow scripts to run. Doesn't apply to paths specified in `passthru`. Meaningful only on PHP containers. | +| `headers` | A headers dictionary | | Any additional headers to apply to static assets, mapping header names to values. Responses from the app aren't affected. | +| `request_buffering` | A [request buffering dictionary](#request-buffering) | See below | Handling for chunked requests. | +| `rules` | A [rules dictionary](#rules) | | Specific overrides for specific locations. | + +#### Rules + +The rules dictionary can override most other keys according to a regular expression. +The key of each item is a regular expression to match paths exactly. +If an incoming request matches the rule, it's handled by the properties under the rule, +overriding any conflicting rules from the rest of the `locations` dictionary. + +Under `rules`, you can set all of the other possible [`locations` properties](#locations) +except `root`, `index` and `request_buffering`. + +In the following example, the `allow` key disallows requests for static files anywhere in the site. +This is overridden by a rule that explicitly allows common image file formats. + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'python:{{% latest "python" %}}' + web: + locations: + '/': + # Handle dynamic requests + root: 'public' + passthru: '/index.php' + # Disallow static files + allow: false + rules: + # Allow common image files only. + '\.(jpe?g|png|gif|svgz?|css|js|map|ico|bmp|eot|woff2?|otf|ttf)$': + allow: true +``` + +#### Request buffering + +Request buffering is enabled by default to handle chunked requests as most app servers don't support them. +The following table shows the keys in the `request_buffering` dictionary: + +| Name | Type | Required | Default | Description | +|--------------------|-----------|----------|---------|-------------------------------------------| +| `enabled` | `boolean` | Yes | `true` | Whether request buffering is enabled. | +| `max_request_size` | `string` | | `250m` | The maximum size to allow in one request. | + +The default configuration would look like this: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'python:{{% latest "python" %}}' + web: + locations: + '/': + passthru: true + request_buffering: + enabled: true + max_request_size: 250m +``` + +## Workers + +Workers are exact copies of the code and compilation output as a `web` instance after a [`build` hook](#hooks). +They use the same container image. + +Workers can't accept public requests and so are suitable only for background tasks. +If they exit, they're automatically restarted. + +The keys of the `workers` definition are the names of the workers. +You can then define how each worker differs from the `web` instance using +the [top-level properties](#top-level-properties). + +Each worker can differ from the `web` instance in all properties _except_ for: + +- `build` and `dependencies` properties, which must be the same +- `crons` as cron jobs don't run on workers +- `hooks` as the `build` hook must be the same + and the `deploy` and `post_deploy` hooks don't run on workers. + +A worker named `queue` that was small and had a different start command could look like this: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'python:{{% latest "python" %}}' + workers: + queue: + commands: + start: | + ./worker.sh +``` + +Workers require resource definition using `{{% vendor/cli %}} resources:set`, same as application containers. +For more information, see how to [manage resources](/manage-resources.md). + +## Access + +The `access` dictionary has one allowed key: + +| Name | Allowed values | Default | Description | +|-------|-------------------------------------|---------------|-----------------------------------------------------------------------| +| `ssh` | `admin`, `contributor`, or `viewer` | `contributor` | Defines the minimum role required to access app environments via SSH. | + +In the following example, only users with `admin` permissions for the +given [environment type](/administration/users.md#environment-type-roles) +can access the deployed environment via SSH: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'python:{{% latest "python" %}}' + access: + ssh: admin +``` + +## Variables + +{{% vendor/name %}} provides a number of ways to set [variables](/development/variables/_index.md). +Variables set in your app configuration have the lowest precedence, +meaning they're overridden by any conflicting values provided elsewhere. + +All variables set in your app configuration must have a prefix. +Some [prefixes have specific meanings](/development/variables/_index.md#variable-prefixes). + +Variables with the prefix `env` are available as a separate environment variable. +All other variables are available in +the [`PLATFORM_VARIABLES` environment variable](/development/variables/use-variables.md#use-provided-variables). + +The following example sets two variables: + +- A variable named `env:AUTHOR` with the value `Juan` that's available in the environment as `AUTHOR` +- A variable named `d8config:system.site:name` with the value `My site rocks` + that's available in the `PLATFORM_VARIABLES` environment variable + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'python:{{% latest "python" %}}' + variables: + env: + AUTHOR: 'Juan' + d8config: + "system.site:name": 'My site rocks' +``` + +You can also define and access more [complex values](/development/variables/use-variables.md#access-complex-values). + +## Firewall + +{{< premium-features/tiered "Elite and Enterprise" >}} + +Set limits in outbound traffic from your app with no impact on inbound requests. + +The `outbound` key is required and contains one or more rules. +The rules define what traffic is allowed; anything unspecified is blocked. + +Each rule has the following properties where at least one is required and `ips` and `domains` can't be specified +together: + +| Name | Type | Default | Description | +|-----------|---------------------|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `ips` | Array of `string`s | `["0.0.0.0/0"]` | IP addresses in [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). See a [CIDR format converter](https://www.ipaddressguide.com/cidr). | +| `domains` | Array of `string`s | | [Fully qualified domain names](https://en.wikipedia.org/wiki/Fully_qualified_domain_name) to specify specific destinations by hostname. | +| `ports` | Array of `integer`s | | Ports from 1 to 65535 that are allowed. If any ports are specified, all unspecified ports are blocked. If no ports are specified, all ports are allowed. Port `25`, the SMTP port for sending email, is always blocked. | + +The default settings would look like this: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'python:{{% latest "python" %}}' + firewall: + outbound: + - ips: [ "0.0.0.0/0" ] +``` + +### Support for rules + +Where outbound rules for firewalls are supported in all environments. + +### Multiple rules + +Multiple firewall rules can be specified. +In such cases, a given outbound request is allowed if it matches _any_ of the defined rules. + +So in the following example requests to any IP on port 80 are allowed +and requests to 1.2.3.4 on either port 80 or 443 are allowed: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'python:{{% latest "python" %}}' + firewall: + outbound: + - ips: [ "1.2.3.4/32" ] + ports: [ 443 ] + - ports: [ 80 ] +``` + +### Outbound traffic to CDNs + +Be aware that many services are behind a content delivery network (CDN). +For most CDNs, routing is done via domain name, not IP address, +so thousands of domain names may share the same public IP addresses at the CDN. +If you allow the IP address of a CDN, you are usually allowing many or all of the other customers hosted behind that +CDN. + +### Outbound traffic by domain + +You can filter outbound traffic by domain. +Using domains in your rules rather than IP addresses is generally more specific and secure. +For example, if you use an IP address for a service with a CDN, +you have to allow the IP address for the CDN. +This means that you allow potentially hundreds or thousands of other servers also using the CDN. + +An example rule filtering by domain: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'python:{{% latest "python" %}}' + firewall: + outbound: + - protocol: tcp + domains: [ "api.stripe.com", "api.twilio.com" ] + ports: [ 80, 443 ] + - protocol: tcp + ips: [ "1.2.3.4/29","2.3.4.5" ] + ports: [ 22 ] +``` + +#### Determine which domains to allow + +To determine which domains to include in your filtering rules, +find the domains your site has requested the DNS to resolve. +Run the following command to parse your server’s `dns.log` file +and display all Fully Qualified Domain Names that have been requested: + +```bash +awk '/query\[[^P]\]/ { print $6 | "sort -u" }' /var/log/dns.log +``` + +The output includes all DNS requests that were made, including those blocked by your filtering rules. +It doesn't include any requests made using an IP address. + +Example output: + +```bash +facebook.com +fastly.com +upsun.com +www.google.com +www.upsun.com +``` + +## Build + +The only property of the `build` dictionary is `flavor`, which specifies a default set of build tasks to run. +Flavors are language-specific. + +See what the build flavor is for your language: + +- [Node.js](/languages/nodejs/_index.md#dependencies) +- [PHP](/languages/php/_index.md#dependencies) + +In all languages, you can also specify a flavor of `none` to take no action at all +(which is the default for any language other than PHP and Node.js). + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'nodejs:{{% latest "nodejs" %}}' + build: + flavor: none +``` + +## Dependencies + +Installs global dependencies as part of the build process. +They're independent of your app's dependencies +and are available in the `PATH` during the build process and in the runtime environment. +They're installed before the `build` hook runs using a package manager for the language. + +| Language | Key name | Package manager | +|----------|-----------------------|--------------------------------------------------------------------------------------------------------------------| +| PHP | `php` | [Composer](https://getcomposer.org/) | +| Python 2 | `python` or `python2` | [Pip 2](https://packaging.python.org/tutorials/installing-packages/) | +| Python 3 | `python3` | [Pip 3](https://packaging.python.org/tutorials/installing-packages/) | +| Ruby | `ruby` | [Bundler](https://bundler.io/) | +| Node.js | `nodejs` | [npm](https://www.npmjs.com/) (see [how to use yarn](/languages/nodejs/_index.md#use-yarn-as-a-package-manager)) | +| Java | `java` | [Apache Maven](https://maven.apache.org/), [Gradle](https://gradle.org/), or [Apache Ant](https://ant.apache.org/) | + +The format for package names and version constraints are defined by the specific package manager. + +An example of dependencies in multiple languages: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'nodejs:{{% latest "nodejs" %}}' + dependencies: + php: # Specify one Composer package per line. + drush/drush: '8.0.0' + composer/composer: '^2' + python2: # Specify one Python 2 package per line. + behave: '*' + requests: '*' + python3: # Specify one Python 3 package per line. + numpy: '*' + ruby: # Specify one Bundler package per line. + sass: '3.4.7' + nodejs: # Specify one NPM package per line. + pm2: '^4.5.0' +``` + +## Hooks + +There are three different hooks that run as part of the process of building and deploying your app. +These are places where you can run custom scripts. +They are: the `build` hook, the `deploy` hook, and the `post_deploy` hook. +Only the `build` hook is run for [worker instances](#workers), while [web instances](#web) run all three. + +The process is ordered as: + +1. Variables accessible at build time become available. +1. [Build flavor](#build) runs if applicable. +1. Any [dependencies](#dependencies) are installed. +1. The `build` hook is run. +1. The file system is changed to read only (except for any [mounts](#mounts)). +1. The app container starts. Variables accessible at runtime and services become available. +1. The `deploy` hook is run. +1. The app container begins accepting requests. +1. The `post_deploy` hook is run. + +Note that if an environment changes by no code changes, only the last step is run. +If you want the entire process to run, see how +to [manually trigger builds](/development/troubleshoot.md#manually-trigger-builds). + +### Writable directories during build + +During the `build` hook, there are three writeable directories: + +- `PLATFORM_APP_DIR`: + Where your code is checked out and the working directory when the `build` hook starts. + Becomes the app that gets deployed. +- `PLATFORM_CACHE_DIR`: + Persists between builds, but isn't deployed. + Shared by all builds on all branches. +- `/tmp`: + Isn't deployed and is wiped between each build. + Note that `PLATFORM_CACHE_DIR` is mapped to `/tmp` + and together they offer about 8GB of free space. + +### Hook failure + +Each hook is executed as a single script, so they're considered to have failed only if the final command in them fails. +To cause them to fail on the first failed command, add `set -e` to the beginning of the hook. + +If a `build` hook fails for any reason, the build is aborted and the deploy doesn't happen. +Note that this only works for `build` hooks -- +if other hooks fail, the app is still deployed. + +#### Automated testing + +It’s preferable that you set up and run automated tests in a dedicated CI/CD tool. +Relying on {{% vendor/name %}} hooks for such tasks can prove difficult. + +During the `build` hook, you can halt the deployment on a test failure but the following limitations apply: + +- Access to services such as databases, Redis, Vault KMS, and even writable mounts is disabled. + So any testing that relies on it is sure to fail. +- If you haven’t made changes to your app, an existing build image is reused and the build hook isn’t run. +- Test results are written into your app container, so they might get exposed to a third party. + +During the `deploy` hook, you can access services but **you can’t halt the deployment based on a test failure**. +Note that there are other downsides: + +- Your app container is read-only during the deploy hook, + so if your tests need to write reports and other information, you need to create a file mount for them. +- Your app can only be deployed once the deploy hook has been completed. + Therefore, running automated testing via the deploy hook generates slower deployments. +- Your environment isn’t available externally during the deploy hook. + Unit and integration testing might work without the environment being available, + but you can’t typically perform end-to-end testing until after the environment is up and available. + +## Crons + +The keys of the `crons` definition are the names of the cron jobs. +The names must be unique. + +If an application defines both a `web` instance and `worker` instances, cron jobs run only on the `web` instance. + +See how to [get cron logs](/increase-observability/logs/access-logs.md#container-logs). + +The following table shows the properties for each job: + +| Name | Type | Required | Description | +|--------------------|----------------------------------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `spec` | `string` | Yes | The [cron specification](https://en.wikipedia.org/wiki/Cron#Cron_expression). To prevent competition for resources that might hurt performance, use `H` in definitions to indicate an unspecified but invariant time. For example, instead of using `0 * * * *` to indicate the cron job runs at the start of every hour, you can use `H * * * *` to indicate it runs every hour, but not necessarily at the start. This prevents multiple cron jobs from trying to start at the same time. | +| `commands` | A [cron commands dictionary](#cron-commands) | Yes | A definition of what commands to run when starting and stopping the cron job. | +| `shutdown_timeout` | `integer` | No | When a cron is canceled, this represents the number of seconds after which a `SIGKILL` signal is sent to the process to force terminate it. The default is `10` seconds. | +| `timeout` | `integer` | No | The maximum amount of time a cron can run before it's terminated. Defaults to the maximum allowed value of `86400` seconds (24 hours). | + +Note that you can [cancel pending or running crons](/environments/cancel-activity.md). + +### Cron commands + +| Name | Type | Required | Description | +|---------|----------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `start` | `string` | Yes | The command that's run. It's run in [Dash](https://en.wikipedia.org/wiki/Almquist_shell). | +| `stop` | `string` | No | The command that's issued to give the cron command a chance to shutdown gracefully, such as to finish an active item in a list of tasks. Issued when a cron task is interrupted by a user through the CLI or Console. If not specified, a `SIGTERM` signal is sent to the process. | + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'nodejs:{{% latest "nodejs" %}}' + crons: + mycommand: + spec: 'H * * * *' + commands: + start: sleep 60 && echo sleep-60-finished && date + stop: killall sleep + shutdown_timeout: 18 +``` + +In this example configuration, the [cron specification](#crons) uses the `H` syntax. + +### Example cron jobs + + +{{< codetabs >}} + ++++ +title=Drupal ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +type: 'php:{{% latest "php" %}}' +crons: + # Run Drupal's cron tasks every 19 minutes. + drupal: + spec: '*/19 * * * *' + commands: + start: 'cd web ; drush core-cron' + # But also run pending queue tasks every 7 minutes. + # Use an odd number to avoid running at the same time as the `drupal` cron. + drush-queue: + spec: '*/7 * * * *' + commands: + start: 'cd web ; drush queue-run aggregator_feeds' + {{< /snippet >}} +``` + +<---> + ++++ +title=Ruby on Rails ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +type: 'ruby:{{% latest "ruby" %}}' +crons: + # Execute a rake script every 19 minutes. + ruby: + spec: '*/19 * * * *' + commands: + start: 'bundle exec rake some:task' + {{< /snippet >}} +``` + +<---> + ++++ +title=Laravel ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +type: 'php:{{% latest "php" %}}' +crons: + # Run Laravel's scheduler every 5 minutes. + scheduler: + spec: '*/5 * * * *' + cmd: 'php artisan schedule:run' + {{< /snippet >}} +``` + +<---> + ++++ +title=Symfony ++++ + +```yaml {configFile="app"} +{{< snippet name="myapp" config="app" root="/" >}} +type: 'php:{{% latest "php" %}}' +crons: + # Take a backup of the environment every day at 5:00 AM. + snapshot: + spec: 0 5 * * * + cmd: | + # Only run for the production environment, aka main branch + if [ "$PLATFORM_ENVIRONMENT_TYPE" = "production" ]; then + croncape symfony ... + fi + {{< /snippet >}} +``` + +{{< /codetabs >}} + + +### Conditional crons + +If you want to set up customized cron schedules depending on the environment type, +define conditional crons. +To do so, use a configuration similar to the following: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'php:{{% latest "php" %}}' + crons: + update: + spec: '0 0 * * *' + commands: + start: | + if [ "$PLATFORM_ENVIRONMENT_TYPE" = production ]; then + {{% vendor/cli %}} backup:create --yes --no-wait + {{% vendor/cli %}} source-operation:run update --no-wait --yes + fi +``` + +### Cron job timing + +The minimum time between cron jobs being triggered is 5 minutes. + +For each app container, only one cron job can run at a time. +If a new job is triggered while another is running, the new job is paused until the other completes. + +To minimize conflicts, a random offset is applied to all triggers. +The offset is a random number of seconds up to 20 minutes or the cron frequency, whichever is smaller. + +Crons are also paused while activities such as [backups](/environments/backup) are running. +The crons are queued to run after the other activity finishes. + +To run cron jobs in a timezone other than UTC, set the [timezone property](#top-level-properties). + +### Paused crons + +[Preview environments](/glossary.md#preview-environment) are often used for a limited time and then abandoned. +While it's useful for environments under active development to have scheduled tasks, +unused environments don't need to run cron jobs. +To minimize unnecessary resource use, +crons on environments with no deployments are paused. + +This affects all preview environments, _and_ production environment that do not yet have a domain attached to them. + +Such environments with deployments within 14 days have crons with the status `running`. +If there haven't been any deployments within 14 days, the status is `paused`. + +You can see the status in the Console +or using the CLI by running `{{% vendor/cli %}} environment:info` and looking under `deployment_state`. + +#### Restarting paused crons + +If the crons on your preview environment are paused but you're still using them, +you can push changes to the environment or redeploy it. + +To restart crons without changing anything: + +{{< codetabs >}} + ++++ +title=In the Console ++++ + +1. In the Console, navigate to your project. +1. Open the environment where you'd like the crons to run. +1. Click `Redeploy` next to the cron status of `Paused`. + +<---> + ++++ +title=Using the CLI ++++ + +Run the following command: + +```bash +{{% vendor/cli %}} redeploy +``` + +{{< /codetabs >}} + +## Runtime + +The following table presents the various possible modifications to your PHP or Lisp runtime: + +| Name | Type | Language | Description | +|-----------------------------|------------------------------------------------------------|----------|--------------------------------------------------------------------------------------------| +| `extensions` | List of `string`s OR [extensions definitions](#extensions) | PHP | [PHP extensions](/languages/php/extensions.md) to enable. | +| `disabled_extensions` | List of `string`s | PHP | [PHP extensions](/languages/php/extensions.md) to disable. | +| `request_terminate_timeout` | `integer` | PHP | The timeout for serving a single request after which the PHP-FPM worker process is killed. | +| `sizing_hints` | A [sizing hints definition](#sizing-hints) | PHP | The assumptions for setting the number of workers in your PHP-FPM runtime. | +| `xdebug` | An Xdebug definition | PHP | The setting to turn on [Xdebug](/languages/php/xdebug.md). | +| `quicklisp` | Distribution definitions | Lisp | [Distributions for QuickLisp](/languages/lisp.md#quicklisp-options) to use. | + +You can also set your [app's runtime timezone](/create-apps/timezone.md). + +### Extensions + +{{% note theme="info" %}} +You can now use the Upsun composable image (BETA) to install runtimes and tools in your application container. +If you've reached this section from another page and are using the composable image, enabling/disabling extensions should be placed under the `stack` key instead of what is listed below. +See [how to configure extensions with the composable image](/create-apps/app-reference/composable-image#top-level-properties). +{{% /note %}} + +You can enable [PHP extensions](/languages/php/extensions.md) just with a list of extensions: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'php:{{% latest "php" %}}' + runtime: + extensions: + - geoip + - tidy +``` + +Alternatively, if you need to include configuration options, use a dictionary for that extension: + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'php:{{% latest "php" %}}' + runtime: + extensions: + - geoip + - name: blackfire + configuration: + server_id: foo + server_token: bar +``` + +In this case, the `name` property is required. + +### Sizing hints + +The following table shows the properties that can be set in `sizing_hints`: + +| Name | Type | Default | Minimum | Description | +|-------------------|-----------|---------|---------|------------------------------------------------| +| `request_memory` | `integer` | 45 | 10 | The average memory consumed per request in MB. | +| `reserved_memory` | `integer` | 70 | 70 | The amount of memory reserved in MB. | + +See more about [PHP-FPM workers and sizing](/languages/php/fpm.md). + +## Source + +The following table shows the properties that can be set in `source`: + +| Name | Type | Required | Description | +|--------------|--------------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------| +| `operations` | An operations dictionary | | Operations that can be applied to the source code. See [source operations](../source-operations.md) | +| `root` | `string` | | The path where the app code lives. Defaults to the root project directory. Useful for [multi-app setups](../multi-app/_index.md). | + +## Container profile + +By default, Upsun allocates a container profile to each app and service depending on the range of resources it’s +expected to need. + +Each container profile gives you access to a specific list of CPU and RAM combinations. +Using the Upsun CLI or Console, you can then pick a CPU and RAM combination for each of your apps and services. + +- [Container profile types and resources](/manage-resources/adjust-resources#advanced-container-profiles) +- [Default container profiles](/manage-resources/adjust-resources#default-container-profiles) for runtime and service + containers +- [Customize resources using the `container_profile` key](/manage-resources/adjust-resources#adjust-a-container-profile) + +## Additional hosts + +If you're using a private network with specific IP addresses you need to connect to, +you might want to map those addresses to hostnames to better remember and organize them. +In such cases, you can add a map of those IP addresses to whatever hostnames you like. +Then when your app tries to access the hostname, it's sent to the proper IP address. + +So in the following example, if your app tries to access `api.example.com`, it's sent to `192.0.2.23`. + +```yaml {configFile="app"} +applications: + myapp: + source: + root: "/" + type: 'php:{{% latest "php" %}}' + additional_hosts: + api.example.com: "192.0.2.23" + web.example.com: "203.0.113.42" +``` + +This is equivalent to adding the mapping to the `/etc/hosts` file for the container. diff --git a/sites/upsun/src/create-apps/hooks/_index.md b/sites/upsun/src/create-apps/hooks/_index.md index aafb361b38..bb5b60b6ed 100644 --- a/sites/upsun/src/create-apps/hooks/_index.md +++ b/sites/upsun/src/create-apps/hooks/_index.md @@ -29,7 +29,7 @@ In this case, the app has two sets of dependencies: Create your `build` hook to install them all: -1. Create a `build` hook in your [app configuration](../app-reference.md): +1. Create a `build` hook in your [app configuration](/create-apps/app-reference/single-runtime-image.md): ```yaml {configfile="app"} applications: @@ -90,7 +90,7 @@ All of this configuration and preparation can be handled in a bash script. Note that hooks are executed using the dash shell, not the bash shell used by SSH logins. 2. Copy the [Drush configuration script from the template](https://github.com/platformsh-templates/nextjs-drupal/blob/master/api/drush/platformsh_generate_drush_yml.php) into a `drush/platformsh_generate_drush_yml.php` file. -3. Set a [mount](../app-reference.md#mounts). +3. Set a [mount](/create-apps/app-reference/single-runtime-image.md#mounts). Unlike in the `build` hook, in the `deploy` hook the system is generally read-only. So create a mount where you can write the Drush configuration: @@ -156,7 +156,7 @@ So you don't have to rebuild Drupal but you still get fresh content. api: 'api:http' ``` -2. Set [mounts](../app-reference.md#mounts). +2. Set [mounts](/create-apps/app-reference/single-runtime-image.md#mounts). Like the [`deploy` hook](#configure-drush-and-drupal), the `post_deploy` hook has a read-only file system. Create mounts for your Next.js files: diff --git a/sites/upsun/src/create-apps/hooks/hooks-and-dependencies.md b/sites/upsun/src/create-apps/hooks/hooks-and-dependencies.md index caee7ba45c..4e6189298d 100644 --- a/sites/upsun/src/create-apps/hooks/hooks-and-dependencies.md +++ b/sites/upsun/src/create-apps/hooks/hooks-and-dependencies.md @@ -5,7 +5,7 @@ description: Manage dependencies for your hooks, such as compiling Sass files as If you use a specific package in a hook, you may want to manage dependencies for it. For example, you may want to compile Sass files as part of your build process. -You can set dependencies along with hooks in your [app configuration](../app-reference.md#dependencies). +You can set dependencies along with hooks in your [app configuration](/create-apps/app-reference/single-runtime-image.md#dependencies). The following example assumes you have some Sass source files, such as a `index.scss` file. You also need a script to compile the files, such as the following: diff --git a/sites/upsun/src/create-apps/hooks/hooks-comparison.md b/sites/upsun/src/create-apps/hooks/hooks-comparison.md index 2abe6980c3..563e9e369a 100644 --- a/sites/upsun/src/create-apps/hooks/hooks-comparison.md +++ b/sites/upsun/src/create-apps/hooks/hooks-comparison.md @@ -8,15 +8,15 @@ The following table presents the main differences among the three available hook | Hook name | Failures stop build | Variables available | Services available | Timeout | Run on `worker` instances | Writable directories | Blocks requests | Runs on all redeploys\* | | ------------- | ------------------- |-------------------- | ------------------ | ------- | ------------------------- | -------------------- | --------------- | --------------- | | `build` | Yes | Build variables | No | 1 hour | Yes | `$PLATFORM_APP_DIR`, `$PLATFORM_CACHE_DIR`, and `/tmp` | No | No | -| `deploy` | No | Runtime variables | Yes | None | No | [Mounts](../app-reference.md#mounts) | Yes | No | -| `post_deploy` | No | Runtime variables | Yes | None | No | [Mounts](../app-reference.md#mounts) | No | Yes | +| `deploy` | No | Runtime variables | Yes | None | No | [Mounts](/create-apps/app-reference/single-runtime-image.md#mounts) | Yes | No | +| `post_deploy` | No | Runtime variables | Yes | None | No | [Mounts](/create-apps/app-reference/single-runtime-image.md#mounts) | No | Yes | \* All of the hooks run with changes to the code or environment. This column indicates which hooks run on a redeploy without any code changes. ## Build hook -The `build` hook is run after any [build flavor](../app-reference.md#build). +The `build` hook is run after any [build flavor](/create-apps/app-reference/single-runtime-image.md#build). During this hook, no services (such as a database) or any persistent file mounts are available as the application hasn't yet been deployed. @@ -63,8 +63,8 @@ So if you accidentally add an unbroken loop, it gets cut off and you can continu ## Deploy hook The `deploy` hook is run after the app container has been started but before it has started accepting requests. -Note that the deploy hook only runs on [`web` instances](../app-reference.md#web), -not [`worker` instances](../app-reference.md#workers). +Note that the deploy hook only runs on [`web` instances](/create-apps/app-reference/single-runtime-image.md#web), +not [`worker` instances](/create-apps/app-reference/single-runtime-image.md#workers). You can access other services at this stage (such as MySQL, Solr, Redis). The disk where the application lives is read-only at this point. @@ -72,7 +72,7 @@ The disk where the application lives is read-only at this point. This hook should be used when something needs to run once when new code is deployed. It isn't run when a host is restarted (such as during region maintenance), so anything that needs to run each time an instance of an app starts (regardless of whether there's new code) -should go in the `pre_start` key in [your `web` configuration](../app-reference.md#web-commands). +should go in the `pre_start` key in [your `web` configuration](/create-apps/app-reference/single-runtime-image.md#web-commands). For example, clearing the cache. Be aware: The deploy hook blocks the site accepting new requests. diff --git a/sites/upsun/src/create-apps/multi-app/project-structure.md b/sites/upsun/src/create-apps/multi-app/project-structure.md index 443bf37bfe..a5d064d09b 100644 --- a/sites/upsun/src/create-apps/multi-app/project-structure.md +++ b/sites/upsun/src/create-apps/multi-app/project-structure.md @@ -297,7 +297,7 @@ make sure you [change the source root](#change-the-source-root-of-your-app) for ## Change the source root of your app When your app's code base and configuration file aren't located at the same directory level in your project repository, -you need to [define a root directory](../app-reference.md#root-directory) for your app. +you need to [define a root directory](/create-apps/app-reference/single-runtime-image.md#root-directory) for your app. To do so, add a new `source.root` property in your app configuration. diff --git a/sites/upsun/src/create-apps/multi-app/routes.md b/sites/upsun/src/create-apps/multi-app/routes.md index 92f8e78221..5458a1a7c3 100644 --- a/sites/upsun/src/create-apps/multi-app/routes.md +++ b/sites/upsun/src/create-apps/multi-app/routes.md @@ -44,7 +44,7 @@ You don't need to define a route for each app in the repository. If an app isn't specified, then it isn't accessible to the web. One good example of defining an app with no route is when you [use Git submodules](/create-apps/multi-app/project-structure.html#split-your-code-source-into-multiple-git-submodule-repositories) and want to [use a source operation to update your submodules](/development/submodules.html#update-submodules). -You can also achieve the same thing by defining the app as a [`worker`](../app-reference.md#workers). +You can also achieve the same thing by defining the app as a [`worker`](/create-apps/app-reference/single-runtime-image.md#workers). {{< /note >}} diff --git a/sites/upsun/src/create-apps/runtime-operations.md b/sites/upsun/src/create-apps/runtime-operations.md index d8c52c652e..a10370b44c 100644 --- a/sites/upsun/src/create-apps/runtime-operations.md +++ b/sites/upsun/src/create-apps/runtime-operations.md @@ -5,8 +5,8 @@ weight: 6 --- Runtime operations allow you to trigger one-off commands or scripts on your project. -Similar to [crons](../create-apps/app-reference.md#crons), they run in the app container but not on a specific schedule. -You can [define runtime operations](#define-a-runtime-operation) in your [app configuration](../create-apps/app-reference.md) +Similar to [crons](/create-apps/app-reference/single-runtime-image.md#crons), they run in the app container but not on a specific schedule. +You can [define runtime operations](#define-a-runtime-operation) in your [app configuration](/create-apps/app-reference/single-runtime-image.md) and [trigger them](#run-a-runtime-operation) at any time through the {{% vendor/name %}} CLI. For example, if you have a static website, @@ -112,7 +112,7 @@ but want to avoid going through the whole {{% vendor/name %}} [build and deploy The following examples assume that the frontend and backend containers are included in the same environment. This isn’t necessary for the commands to run successfully.
What _is_ necessary is that the build destination for your frontend **is writable at runtime** -(meaning, you must [define a mount](../create-apps/app-reference.md#mounts) for it). +(meaning, you must [define a mount](/create-apps/app-reference/single-runtime-image.md#mounts) for it). If you don’t want to include a build within a mount (especially if your data source **isn’t** on {{% vendor/name %}}), you can use [source operations](../create-apps/source-operations.md) to achieve a similar effect, but through generating a new commit. diff --git a/sites/upsun/src/create-apps/source-operations.md b/sites/upsun/src/create-apps/source-operations.md index 5d238edfdc..8d8f4310e7 100644 --- a/sites/upsun/src/create-apps/source-operations.md +++ b/sites/upsun/src/create-apps/source-operations.md @@ -21,7 +21,7 @@ or [revert to the last commit](#revert-to-the-last-commit) pushed to your Git re To run your source operations, you can use the [{{% vendor/name %}} CLI](../administration/cli/_index.md) or the [Console](https://console.platform.sh). If you want to run your source operations and update your code automatically, -you can also define [cron jobs](./app-reference.md#crons). +you can also define [cron jobs](/create-apps/app-reference/single-runtime-image.md#crons). ## How source operations work @@ -50,7 +50,7 @@ When you trigger a source operation, the following happens in order: A source operation requires two things: - A name that must be unique within the application. - The name is the key of the block defined under `source.operations` in your [app configuration](./app-reference.md#source). + The name is the key of the block defined under `source.operations` in your [app configuration](/create-apps/app-reference/single-runtime-image.md#source). - A `command` that defines what's run when the operation is triggered. diff --git a/sites/upsun/src/create-apps/timezone.md b/sites/upsun/src/create-apps/timezone.md index 56a955a716..11d5906918 100644 --- a/sites/upsun/src/create-apps/timezone.md +++ b/sites/upsun/src/create-apps/timezone.md @@ -79,4 +79,4 @@ title=Java ## Set a cron timezone You can set a specific timezone for your crons so they don't run in your app runtime timezone (or container timezone if no app runtime timezone is set on your project). -To do so, [set the `timezone` top-level property](../create-apps/app-reference.md#top-level-properties) in your app configuration. \ No newline at end of file +To do so, [set the `timezone` top-level property](/create-apps/app-reference/single-runtime-image.md#top-level-properties) in your app configuration. diff --git a/sites/upsun/src/create-apps/troubleshoot-mounts.md b/sites/upsun/src/create-apps/troubleshoot-mounts.md index e4df7a7f42..475b336a2c 100644 --- a/sites/upsun/src/create-apps/troubleshoot-mounts.md +++ b/sites/upsun/src/create-apps/troubleshoot-mounts.md @@ -41,7 +41,7 @@ You can then put the mount back in place. ## Mounted files not publicly accessible If you've set up mounts to handle files like user uploads, you want to make sure the files are accessible. -Do so by managing their [location](./app-reference.md#locations). +Do so by managing their [location](/create-apps/app-reference/single-runtime-image.md#locations). This example defines two mounts, one named `private` and one `upload`: diff --git a/sites/upsun/src/create-apps/web/_index.md b/sites/upsun/src/create-apps/web/_index.md index cd141d0a93..5ab2297090 100644 --- a/sites/upsun/src/create-apps/web/_index.md +++ b/sites/upsun/src/create-apps/web/_index.md @@ -3,4 +3,4 @@ title: Configure what's served --- How you should configure your web server depends a lot on what you want to serve. -The following examples show how in specific scenarios you might define [your web server](../app-reference.md#web). +The following examples show how in specific scenarios you might define [your web server](/create-apps/app-reference/single-runtime-image.md#web). diff --git a/sites/upsun/src/create-apps/web/custom-headers.md b/sites/upsun/src/create-apps/web/custom-headers.md index 69189edfac..dcfc1f582c 100644 --- a/sites/upsun/src/create-apps/web/custom-headers.md +++ b/sites/upsun/src/create-apps/web/custom-headers.md @@ -5,7 +5,7 @@ description: Set custom headers for your static content such as custom content-t --- When your app responds to dynamic requests, it can generate headers on the fly. -To set headers for static content, add them in [your `web` configuration](../app-reference.md#web). +To set headers for static content, add them in [your `web` configuration](/create-apps/app-reference/single-runtime-image.md#web). You might want to do so to add custom content-type headers, limit what other sites can embed your content, or allow cross origin requests. @@ -35,7 +35,7 @@ applications: This sets the `X-Frame-Options` header to `SAMEORIGIN` for all static files. Now your files can only be embedded within your site. -Now set up an exception for MP3 files using a [rule](../app-reference.md#rules): +Now set up an exception for MP3 files using a [rule](/create-apps/app-reference/single-runtime-image.md#rules): ```yaml {configFile="app"} applications: diff --git a/sites/upsun/src/create-apps/web/php-basic.md b/sites/upsun/src/create-apps/web/php-basic.md index dc1eaab563..f256bf0b94 100644 --- a/sites/upsun/src/create-apps/web/php-basic.md +++ b/sites/upsun/src/create-apps/web/php-basic.md @@ -5,7 +5,7 @@ description: Start with a basic PHP app with a front controller for dynamic requ --- To handle dynamic requests to your PHP app, you might want to use a [front controller](https://en.wikipedia.org/wiki/Front_controller). -The following example shows how for such an app you might start defining [your web server](../app-reference.md#web). +The following example shows how for such an app you might start defining [your web server](/create-apps/app-reference/single-runtime-image.md#web). ## Define a document root diff --git a/sites/upsun/src/create-apps/web/rewrite-requests.md b/sites/upsun/src/create-apps/web/rewrite-requests.md index 82adfa5de4..98c43cff30 100644 --- a/sites/upsun/src/create-apps/web/rewrite-requests.md +++ b/sites/upsun/src/create-apps/web/rewrite-requests.md @@ -10,7 +10,7 @@ For example, you might want to make URLs seem semantic to users without having t In such a case, you might want requests to `/shoes/great-shoe/` to be served as if they were requests to `/?category=shoes&product=great-shoe`. -If so, add a [rule](../app-reference.md#rules) similar to the following: +If so, add a [rule](/create-apps/app-reference/single-runtime-image.md#rules) similar to the following: ```yaml {configFile="app"} applications: diff --git a/sites/upsun/src/create-apps/web/serve-different-directories.md b/sites/upsun/src/create-apps/web/serve-different-directories.md index cd80579e74..e1e043fb0c 100644 --- a/sites/upsun/src/create-apps/web/serve-different-directories.md +++ b/sites/upsun/src/create-apps/web/serve-different-directories.md @@ -23,7 +23,7 @@ And your build process might build the documentation with an output folder such If so, you can serve all requests by your app code except for those that start with `/docs`, which you serve with your generated docs. -Use a [`web` configuration](../app-reference.md#web) similar to the following: +Use a [`web` configuration](/create-apps/app-reference/single-runtime-image.md#web) similar to the following: ```yaml {configfile="apps"} applications: diff --git a/sites/upsun/src/create-apps/web/static.md b/sites/upsun/src/create-apps/web/static.md index b2fa71ec2e..47a3772349 100644 --- a/sites/upsun/src/create-apps/web/static.md +++ b/sites/upsun/src/create-apps/web/static.md @@ -41,9 +41,9 @@ applications: ``` See more information on the required minimal settings: -- [Top-level properties](../app-reference.md#top-level-properties). -- [`web` property](../app-reference.md#web). -- [`locations` properties](../app-reference.md#locations). +- [Top-level properties](/create-apps/app-reference/single-runtime-image.md#top-level-properties). +- [`web` property](/create-apps/app-reference/single-runtime-image.md#web). +- [`locations` properties](/create-apps/app-reference/single-runtime-image.md#locations). ## Add more features @@ -70,7 +70,7 @@ applications: allow: true ``` -See more information on [`locations` properties](../app-reference.md#locations). +See more information on [`locations` properties](/create-apps/app-reference/single-runtime-image.md#locations). ### Create cache rules diff --git a/sites/upsun/src/create-apps/workers.md b/sites/upsun/src/create-apps/workers.md index e51b5d6785..edd4fc2f7f 100644 --- a/sites/upsun/src/create-apps/workers.md +++ b/sites/upsun/src/create-apps/workers.md @@ -5,7 +5,7 @@ description: Interact with your worker instances to handle background tasks for Workers are instances of your code that aren't open to connections from other apps or services or the outside world. They're good for handling background tasks. -See how to [configure a worker](./app-reference.md#workers) for your app. +See how to [configure a worker](/create-apps/app-reference/single-runtime-image.md#workers) for your app. ## Access the worker container @@ -70,13 +70,13 @@ The `start` key specifies the command to use to launch your worker application. It may be any valid shell command, although most often it runs a command in your application in the language of your application. If the command specified by the `start` key terminates, it's restarted automatically. -Note that [`deploy` and `post_deploy` hooks](./hooks/_index.md) as well as [`cron` commands](./app-reference.md#crons) -run only on the [`web`](./app-reference.md#web) container, not on workers. +Note that [`deploy` and `post_deploy` hooks](./hooks/_index.md) as well as [`cron` commands](/create-apps/app-reference/single-runtime-image.md#crons) +run only on the [`web`](/create-apps/app-reference/single-runtime-image.md#web) container, not on workers. ## Inheritance -Any top-level definitions for [`relationships`](./app-reference.md#relationships), -[`access`](./app-reference.md#access), [`mount`](./app-reference.md#mounts), and [`variables`](./app-reference.md#variables) +Any top-level definitions for [`relationships`](/create-apps/app-reference/single-runtime-image.md#relationships), +[`access`](/create-apps/app-reference/single-runtime-image.md#access), [`mount`](/create-apps/app-reference/single-runtime-image.md#mounts), and [`variables`](/create-apps/app-reference/single-runtime-image.md#variables) are inherited by every worker, unless overridden explicitly. Likewise [resources defined for the application container](/manage-resources/_index.md) are inherited by every worker, unless overridden explicitly. @@ -137,8 +137,8 @@ services: In both cases, there are two worker instances named `queue` and `mail`. Both have access to a MySQL/MariaDB service defined in `{{< vendor/configfile "services" >}}`, -through a [relationship](/create-apps/app-reference.md#relationships) that is identical to the _name_ of that service (`mysql`). -Both also have their own separate [`storage` mount](/create-apps/app-reference.md#mounts). +through a [relationship](/create-apps/app-reference/single-runtime-image.md#relationships) that is identical to the _name_ of that service (`mysql`). +Both also have their own separate [`storage` mount](/create-apps/app-reference/single-runtime-image.md#mounts). ## Customizing a worker @@ -259,7 +259,7 @@ and, if appropriate, adjust its behavior accordingly. ## Mounts -When defining a [worker](../create-apps/app-reference.md#workers) instance, +When defining a [worker](../create-apps/app-reference/single-runtime-image.md#workers) instance, keep in mind what mount behavior you want. `tmp` and `instance` local mounts are a separate storage area for each instance, @@ -302,7 +302,7 @@ applications: Both the `web` instance and `queue` worker have their own, dedicated `local_dir` mount. Note that: -- Each `local_dir` mount is a [`tmp` mount](/create-apps/app-reference.md#mounts) with a **maximum allocation of 8 GB**.
+- Each `local_dir` mount is a [`tmp` mount](/create-apps/app-reference/single-runtime-image.md#mounts) with a **maximum allocation of 8 GB**.
- `tmp` mounts **may be removed** during infrastructure maintenance operations. Both the `web` instance and `queue` worker also have a `shared_dir` mount pointing to the same network storage space. diff --git a/sites/upsun/src/define-routes/_index.md b/sites/upsun/src/define-routes/_index.md index a24b0de037..5911487528 100644 --- a/sites/upsun/src/define-routes/_index.md +++ b/sites/upsun/src/define-routes/_index.md @@ -200,7 +200,7 @@ routes: "https://{default}/": type: upstream upstream: "app1:http" - + "https://{all}/": type: upstream upstream: "app2:http" @@ -421,10 +421,10 @@ routes: type: upstream upstream: "app:http" cache: - enabled: false + enabled: false ``` -2. [Disable request buffering](../create-apps/app-reference.md#locations) in your app configuration. +2. [Disable request buffering](/create-apps/app-reference/single-runtime-image.md#locations) in your app configuration. ```yaml {configFile="app"} web: diff --git a/sites/upsun/src/define-routes/cache.md b/sites/upsun/src/define-routes/cache.md index 516a92af5c..7bbb81be87 100644 --- a/sites/upsun/src/define-routes/cache.md +++ b/sites/upsun/src/define-routes/cache.md @@ -205,7 +205,7 @@ The cache duration is decided based on the `Cache-Control` response header value The `default_ttl` only applies to **non-static responses**, that is, those generated by your application. -To set a cache lifetime for static resources configure that in your [app configuration](../create-apps/app-reference.md#locations). +To set a cache lifetime for static resources configure that in your [app configuration](/create-apps/app-reference/single-runtime-image.md#locations). All static assets have a Cache-Control header with a max age defaulting to 0 (which is the default for `expires`). {{< note title="none">}} @@ -283,4 +283,4 @@ Set the Vary header to `X-Forwarded-Proto` [custom request header](/development/ ### Cache zipped content separately -Use `Vary: Accept-Encoding` to serve different content depending on the encoding. Useful for ensuring that gzipped content isn't served to clients that can't read it. \ No newline at end of file +Use `Vary: Accept-Encoding` to serve different content depending on the encoding. Useful for ensuring that gzipped content isn't served to clients that can't read it. diff --git a/sites/upsun/src/development/file-transfer.md b/sites/upsun/src/development/file-transfer.md index d701966cad..f17f90343b 100644 --- a/sites/upsun/src/development/file-transfer.md +++ b/sites/upsun/src/development/file-transfer.md @@ -17,7 +17,7 @@ This means that the only way you can edit your app's code is through Git. However, you can transfer files to and from your built app without using Git. To do so, you need to configure mounts or use an SSH client. -[Mounts](../create-apps/app-reference.md#mounts) let you set up directories that remain writable after the build is complete. +[Mounts](/create-apps/app-reference/single-runtime-image.md#mounts) let you set up directories that remain writable after the build is complete. You can then transfer files directly to and from mounts inside your app with a single command via the [{{% vendor/name %}} CLI](../administration/cli/_index.md). @@ -112,7 +112,7 @@ Another way to transfer files to and from your built app is to use an SSH client You can use `scp` to copy files to and from a remote environment. For example, to download a `diagram.png` file from the `web/uploads` directory -(relative to the [app root](../create-apps/app-reference.md#root-directory)), +(relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory)), run the following command: ```bash @@ -183,7 +183,7 @@ The `sftp` connection is open once the `sftp>` prompt is displayed in your termi #### Download a file Say you want to download a `diagram.png` file from the `web/uploads` directory -(relative to the [app root](../create-apps/app-reference.md#root-directory)). +(relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory)). To do so, run the following command: ``` @@ -195,7 +195,7 @@ The `diagram.png` file is copied to the current local directory. #### Upload a file Say you want to upload a `diagram.png` file to the `web/uploads` directory -(relative to the [app root](../create-apps/app-reference.md#root-directory)). +(relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory)). To do so, run the following command: ```bash diff --git a/sites/upsun/src/development/sanitize-db/postgresql.md b/sites/upsun/src/development/sanitize-db/postgresql.md index 0185e08db7..a556e2cc67 100644 --- a/sites/upsun/src/development/sanitize-db/postgresql.md +++ b/sites/upsun/src/development/sanitize-db/postgresql.md @@ -64,7 +64,7 @@ Set up a script by following these steps: ``` To sanitize only on the initial deploy and not all future deploys, - on sanitization create a file on a [mount](/create-apps/app-reference.md#mounts). + on sanitization create a file on a [mount](/create-apps/app-reference/single-runtime-image.md#mounts). Then add a check for the file as in the following example: ```bash {location="sanitize.sh"} diff --git a/sites/upsun/src/development/ssh/_index.md b/sites/upsun/src/development/ssh/_index.md index 214adf7da2..f700f8de20 100644 --- a/sites/upsun/src/development/ssh/_index.md +++ b/sites/upsun/src/development/ssh/_index.md @@ -3,7 +3,7 @@ title: Connect securely with SSH weight: 12 description: Keep your project and apps safe by connecting with SSH when you're interacting with your deployed environments or using the {{% vendor/name %}} CLI. layout: single -keywords: +keywords: - 2fa - twofactor - two factor @@ -60,7 +60,7 @@ Once you've connected, you get a welcome message detailing which environment you Now you can interact with the environment as you want. Note that your app's file system is read-only, -except for any [mounts you've defined](../../create-apps/app-reference.md#mounts). +except for any [mounts you've defined](/create-apps/app-reference/single-runtime-image.md#mounts). ## Connect to services diff --git a/sites/upsun/src/development/troubleshoot.md b/sites/upsun/src/development/troubleshoot.md index 6ff80c5863..64788748b8 100644 --- a/sites/upsun/src/development/troubleshoot.md +++ b/sites/upsun/src/development/troubleshoot.md @@ -111,7 +111,7 @@ it indicates your application is crashing or unavailable. Typical causes and potential solutions include: - Your app is listening at the wrong place. - - Check your app's [upstream properties](../create-apps/app-reference.md#upstream). + - Check your app's [upstream properties](/create-apps/app-reference/single-runtime-image.md#upstream). - If your app listening at a port, make sure it's using the [`PORT` environment variable](./variables/use-variables.md#use-provided-variables). - Your `{{< vendor/configfile "app" >}}` configuration has an error and a process isn't starting or requests can't be forwarded to it correctly. @@ -200,8 +200,8 @@ If you attempt to write to disk outside a `build` hook, you may encounter a `rea Except where you define it, the file system is all read-only, with code changes necessary through git. This gives you benefits like repeatable deployments, consistent backups, and traceability. -To generate anything you need later, [write to disk during a `build` hook](../create-apps/app-reference.md#writable-directories-during-build). -Or [declare mounts](../create-apps/app-reference.md#mounts), +To generate anything you need later, [write to disk during a `build` hook](/create-apps/app-reference/single-runtime-image.md#writable-directories-during-build). +Or [declare mounts](/create-apps/app-reference/single-runtime-image.md#mounts), which are writable even during and after deploy. They can be used for your data: file uploads, logs, and temporary files. @@ -232,7 +232,7 @@ To determine if your environment is being stuck in the build or the deployment, If the activity has the result `success`, the build has completed successfully and the system is trying to deploy. If the result is still `running`, the build is stuck. -In most regions, stuck builds terminate after one hour. +In most regions, stuck builds terminate after one hour. When a deployment is blocked, you should try the following: @@ -243,7 +243,7 @@ When a deployment is blocked, you should try the following: If a `sync` of `activate` process is stuck, try the above on the parent environment. -Note that, for PHP apps, +Note that, for PHP apps, you can [restart processes that get stuck during a build or deployment](../languages/php/troubleshoot.md#restart-php-processes-stuck-during-a-build-or-deployment) from your app container. @@ -277,7 +277,7 @@ strace -T {{< variable "YOUR_HOOK_COMMAND" >}} # Print a system call report ### Cron jobs -Containers can't be shutdown while long-running [cron jobs and scheduled tasks](../create-apps/app-reference.md#crons) are active. +Containers can't be shutdown while long-running [cron jobs and scheduled tasks](/create-apps/app-reference/single-runtime-image.md#crons) are active. That means long-running cron jobs block a container from being shut down to make way for a new deploy. Make sure your custom cron jobs run quickly and properly. @@ -297,7 +297,7 @@ and [cookie entry](../define-routes/cache.md#cookies). Because the router cache follows cache headers from your app, your app needs to send the correct `cache-control` header. -For static assets, set cache headers using the `expires` key in your [app configuration](../create-apps/app-reference.md#locations). +For static assets, set cache headers using the `expires` key in your [app configuration](/create-apps/app-reference/single-runtime-image.md#locations). ## Language-specific troubleshooting diff --git a/sites/upsun/src/development/variables/set-variables.md b/sites/upsun/src/development/variables/set-variables.md index aced375684..9551112f1c 100644 --- a/sites/upsun/src/development/variables/set-variables.md +++ b/sites/upsun/src/development/variables/set-variables.md @@ -11,7 +11,7 @@ All of the variables can also be [overridden via script](#set-variables-via-scri ## Set variables in your app -Set variables [in code](../../create-apps/app-reference.md#variables) using the `{{< vendor/configfile "app" >}}` file. +Set variables [in code](/create-apps/app-reference/single-runtime-image.md#variables) using the `{{< vendor/configfile "app" >}}` file. These values are the same across all environments and present in the Git repository, which makes them a poor fit for API keys and other such secrets. @@ -179,7 +179,7 @@ value updates trigger a rebuild of the application in the same way that a commit ## Set variables via script -You can also provide a `.environment` file as in [your app root](../../create-apps/app-reference.md#root-directory). +You can also provide a `.environment` file as in [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory). This file runs as a script in dash when the container starts and on all SSH logins. It can be used to set any environment variables directly, such as the PATH variable. @@ -213,7 +213,7 @@ The following example looks for a `deploy/environment.tracker.txt` file. It displays a different message if it's found or not, which helps you track what variables are being set. ```bash {location=".environment"} -if [ -f "deploy/environment.tracker.txt" ]; then +if [ -f "deploy/environment.tracker.txt" ]; then echo "File found." export DEPLOY='Friday' else @@ -233,8 +233,8 @@ protocol version mismatch -- is your shell clean? (see the rsync man page for an explanation) rsync error: protocol incompatibility (code 2) at .../rsync/compat.c(61) [receiver=2.6.9] -[ProcessFailedException] -The command failed with the exit code: 2 +[ProcessFailedException] +The command failed with the exit code: 2 ``` This failure comes because `mount:download` and `rsync` don't expect output when the SSH connection is made. diff --git a/sites/upsun/src/development/variables/use-variables.md b/sites/upsun/src/development/variables/use-variables.md index 8d89e6b1ac..87e432cfb2 100644 --- a/sites/upsun/src/development/variables/use-variables.md +++ b/sites/upsun/src/development/variables/use-variables.md @@ -167,7 +167,7 @@ public class App { ### Access complex values Variables can have nested structures. -The following example shows nested structures in an [app configuration](../../create-apps/app-reference.md#variables): +The following example shows nested structures in an [app configuration](/create-apps/app-reference/single-runtime-image.md#variables): {{% version/specific %}} @@ -365,8 +365,8 @@ and at runtime. | `{{< vendor/prefix >}}_SOURCE_DIR` | Yes | No | The path to the root directory of your code repository in the context of a running [source operation](../../create-apps/source-operations.md). The directory contains a writable copy of your repository that you can commit to during the operation. | | `{{< vendor/prefix >}}_TREE_ID` | Yes | Yes | The ID of the tree the application was built from, essentially the SHA hash of the tree in Git. Use when you need a unique ID for each build. | | `{{< vendor/prefix >}}_VARIABLES` | Some | Some | A base64-encoded JSON object with all user-defined project and environment variables that don't use a [prefix](./_index.md#variable-prefixes). The keys are the variable names and the values are the variable values. Availability during builds and at runtime depends on the settings for each variable. See how to [access individual variables](#access-variables-in-a-shell). | -| `PORT` | No | Yes | A `string` representing the port to which requests are sent if the [`web.upstream.socket_family` property](../../create-apps/app-reference.md#upstream) is unset or set to `tcp`. | -| `SOCKET` | No | Yes | A `string` representing the path to the Unix socket file to use if the [`web.upstream.socket_family` property](../../create-apps/app-reference.md#upstream) is set to `unix`. | +| `PORT` | No | Yes | A `string` representing the port to which requests are sent if the [`web.upstream.socket_family` property](/create-apps/app-reference/single-runtime-image.md#upstream) is unset or set to `tcp`. | +| `SOCKET` | No | Yes | A `string` representing the path to the Unix socket file to use if the [`web.upstream.socket_family` property](/create-apps/app-reference/single-runtime-image.md#upstream) is set to `unix`. | ### `PLATFORM_APPLICATION` @@ -410,7 +410,7 @@ The following example shows the process, though you have to modify it to fit you ```yaml {configFile="app"} applications: - {{< variable "APP_NAME" >}} + {{< variable "APP_NAME" >}} mounts: /config: source: storage diff --git a/sites/upsun/src/environments/backup.md b/sites/upsun/src/environments/backup.md index 0c5f55fbd7..d8cc0912f4 100644 --- a/sites/upsun/src/environments/backup.md +++ b/sites/upsun/src/environments/backup.md @@ -23,7 +23,7 @@ first activate it. 1. As an [admin user](../administration/users.md), you can do a backup of your environment. This backup includes the complete data and code of the environment. All persistent data from all running [services](../add-services/_index.md) - and any files stored on [mounts](../create-apps/app-reference.md#mounts) are included. + and any files stored on [mounts](/create-apps/app-reference/single-runtime-image.md#mounts) are included. The backup is stored internally on {{% vendor/name %}}. That is, the backup can be applied to environments on {{% vendor/name %}}, but it can't be downloaded. If you need to download backups, instead [export your mount and service data](/learn/tutorials/exporting.md)). @@ -232,7 +232,7 @@ See more information on [backup policies](#backup-policy) and [data retention](# ### Automate manual backups -You can also automate the process of creating manual backups through [cron jobs](../create-apps/app-reference.md#crons). +You can also automate the process of creating manual backups through [cron jobs](/create-apps/app-reference/single-runtime-image.md#crons). The cron job uses the CLI command to back up the environment. It requires you to [set up the CLI on the environment with an API token](../administration/cli/api-tokens.md#authenticate-in-an-environment). diff --git a/sites/upsun/src/environments/search-engine-visibility.md b/sites/upsun/src/environments/search-engine-visibility.md index c7ff88cc00..c6260f78fb 100644 --- a/sites/upsun/src/environments/search-engine-visibility.md +++ b/sites/upsun/src/environments/search-engine-visibility.md @@ -59,7 +59,7 @@ It's automatically on for all `{{% vendor/cli %}}.site` domains. You can also send instructions to search engine indexers using a `robots.txt` file. Your app can serve this as a static file from its disk or as a dynamic response from its `passthru`. -Control either with the [`location` section of your app configuration](../create-apps/app-reference.md#locations). +Control either with the [`location` section of your app configuration](/create-apps/app-reference/single-runtime-image.md#locations). If your `robots.txt` file includes instructions to ignore a page, search engine indexers may ignore it even if you have configured {{% vendor/name %}} to not send the header. diff --git a/sites/upsun/src/get-started/stacks/laravel/environment-variables.md b/sites/upsun/src/get-started/stacks/laravel/environment-variables.md index 0de9ac3f82..6e2373a26c 100644 --- a/sites/upsun/src/get-started/stacks/laravel/environment-variables.md +++ b/sites/upsun/src/get-started/stacks/laravel/environment-variables.md @@ -24,7 +24,7 @@ You may need a variable to change per environment. If so, use the `{{% vendor/cl about the app and its infrastructure. Assuming that MySQL, PostgreSQL, and Redis services have been added to your environment, -and that the app has been granted access to those services via the following [relationships](/create-apps/app-reference.md#relationships): +and that the app has been granted access to those services via the following [relationships](/create-apps/app-reference/single-runtime-image#relationships): ```yaml {location=".upsun/config.yaml"} applications: diff --git a/sites/upsun/src/get-started/stacks/symfony/environment-variables.md b/sites/upsun/src/get-started/stacks/symfony/environment-variables.md index 7b7734188a..a4f38e892a 100644 --- a/sites/upsun/src/get-started/stacks/symfony/environment-variables.md +++ b/sites/upsun/src/get-started/stacks/symfony/environment-variables.md @@ -99,7 +99,7 @@ symfony ssh -- symfony var:export --multiline ``` Each exposed environment variable is prefixed by the relationship name. -For example, if you have the following [relationships](/create-apps/app-reference.md#relationships) in your configuration: +For example, if you have the following [relationships](/create-apps/app-reference/single-runtime-image#relationships) in your configuration: ```yaml relationships: diff --git a/sites/upsun/src/get-started/stacks/wordpress.md b/sites/upsun/src/get-started/stacks/wordpress.md index 265529c5ab..010a4850db 100644 --- a/sites/upsun/src/get-started/stacks/wordpress.md +++ b/sites/upsun/src/get-started/stacks/wordpress.md @@ -123,7 +123,7 @@ To set one up, follow these steps: allow: true expires: 1w ``` -2. To make the location writable, set up [a mount](/create-apps/app-reference.md#mounts).
+2. To make the location writable, set up [a mount](/create-apps/app-reference/single-runtime-image.md#mounts).
To do so, locate the `mounts:` section that is commented it out, and update it as follows: ```yaml {location="./.upsun/config.yaml"} @@ -233,7 +233,7 @@ If these strings aren't the same, the WordPress deployment will not succeed. ## 7. Update your MariaDB service relationship -You need to update the name used to represent the [relationship](/create-apps/app-reference.md#relationships) between your app and your MariaDB service. +You need to update the name used to represent the [relationship](/create-apps/app-reference/single-runtime-image.md#relationships) between your app and your MariaDB service. To do so, locate the `relationships:` top-level property. Update the relationship for the database service as follows: diff --git a/sites/upsun/src/increase-observability/logs/access-logs.md b/sites/upsun/src/increase-observability/logs/access-logs.md index 75df236d46..e63772b670 100644 --- a/sites/upsun/src/increase-observability/logs/access-logs.md +++ b/sites/upsun/src/increase-observability/logs/access-logs.md @@ -73,7 +73,7 @@ hovering on the next unselected line gives you the amount of time that passed be Events that occur within an app container are logged within that container. The logs can be written to, but you should do so only with standard logging mechanisms. -If your app has its own logging mechanism, use it to write to a dedicated logs [mount](../../create-apps/app-reference.md#mounts). +If your app has its own logging mechanism, use it to write to a dedicated logs [mount](/create-apps/app-reference/single-runtime-image.md#mounts). To access the logs of various types of events: @@ -99,7 +99,7 @@ To view more lines, use the `--lines` flag. title=Using SSH directly +++ -1. Access the container by running +1. Access the container by running ``` bash {{% vendor/cli %}} ssh -e {{% variable "ENVIRONMENT_NAME" %}} @@ -120,7 +120,7 @@ title=Using SSH directly {{< /codetabs >}} All log files are trimmed to 100 MB automatically. -If you need larger logs, set up a [cron job](../../create-apps/app-reference.md#crons) to upload them to third-party storage. +If you need larger logs, set up a [cron job](/create-apps/app-reference/single-runtime-image.md#crons) to upload them to third-party storage. See an example of [uploading logs to Amazon S3](https://gitlab.com/contextualcode/platformsh-store-logs-at-s3) from Contextual Code. ### Types of container logs diff --git a/sites/upsun/src/increase-observability/metrics/_index.md b/sites/upsun/src/increase-observability/metrics/_index.md index 811c39f3d8..51c651a224 100644 --- a/sites/upsun/src/increase-observability/metrics/_index.md +++ b/sites/upsun/src/increase-observability/metrics/_index.md @@ -105,7 +105,7 @@ Burst allows your container to use additional resources when they aren't needed If you have a container in a prolonged burst state, you might want to consider: * [Optimizing your code](../integrate-observability/_index.md) -* Changing your [app size](../../create-apps/app-reference.md#sizes) +* Changing your [app size](/create-apps/app-reference/single-runtime-image.md#sizes) or [service size](../../add-services/_index.md#size) * [Increasing your plan](../../administration/pricing/_index.md) @@ -124,7 +124,7 @@ If the resources are high and hovering close to the 100% threshold, you might want to consider: * [Optimizing your code](../integrate-observability/_index.md) (if possible) -* Changing your [app size](../../create-apps/app-reference.md#sizes) +* Changing your [app size](/create-apps/app-reference/single-runtime-image.md#sizes) or [service size](../../add-services/_index.md#size) * [Increasing your plan](../../administration/pricing/_index.md) diff --git a/sites/upsun/src/increase-observability/metrics/understand-metrics.md b/sites/upsun/src/increase-observability/metrics/understand-metrics.md index fd0cf72d08..83176797be 100644 --- a/sites/upsun/src/increase-observability/metrics/understand-metrics.md +++ b/sites/upsun/src/increase-observability/metrics/understand-metrics.md @@ -6,9 +6,9 @@ description: Understand how to read metrics for {{< vendor/name >}} environments {{< vendor/name >}} environments consist of: -* App containers: one or more [app containers](../../create-apps/_index.md) +* App containers: one or more [app containers](/create-apps/_index.md) * Service containers: zero or more [service containers](../../add-services/_index.md) -* Worker containers: zero or more [worker instances](../../create-apps/app-reference.md#workers). +* Worker containers: zero or more [worker instances](/create-apps/app-reference/_index.md#workers). Infrastructure metrics report CPU, RAM, and disk space for app, service, and worker containers. These metrics are available for all of your environments. diff --git a/sites/upsun/src/integrations/activity/reference.md b/sites/upsun/src/integrations/activity/reference.md index dfd72d6cd5..79f80daf88 100644 --- a/sites/upsun/src/integrations/activity/reference.md +++ b/sites/upsun/src/integrations/activity/reference.md @@ -126,7 +126,7 @@ The following table presents the possible activity types: | `environment.backup.delete` | A user deleted a [backup](/environments/backup.md). | | `environment.branch` | A [new branch](/environments.md#create-environments) has been created via the CLI, Console, or API. A branch created via Git shows up as `environment.push`. | | `environment.certificate.renewal` | An environment's SSL certificate has been [renewed](/define-routes/https.md#certificate-renewals). | -| `environment.cron` | A [cron job](/create-apps/app-reference.md#crons) has completed. | +| `environment.cron` | A [cron job](/create-apps/app-reference/single-runtime-image.md#crons) has completed. | | `environment.deactivate` | An environment has been made [inactive](/glossary.md#inactive-environment). | | `environment.delete` | An environment's code was deleted through Git. | | `environment.domain.create` | A new [domain](administration/web/configure-project.md#domains) has been associated with the environment. | @@ -333,8 +333,7 @@ To test responses, [set up a webhook](./webhooks.md#setup). ### Cron -When a cron job is triggered, the activity contains all -the [job's information](../../create-apps/app-reference.md#crons). +When a cron job is triggered, the activity contains all the [job's information](/create-apps/app-reference/single-runtime-image.md#crons). The following example response was triggered by a setting where the cron is scheduled to run every five minutes (`5 * * * *`) with the command `sleep 60 && echo sleep-60-finished && date` and times out after 86,400 seconds. @@ -571,8 +570,8 @@ The `environment` property contains the settings for the environment that was pu ``` The `deployment` property contains the settings for the deployment, -including the [image type](../../create-apps/app-reference.md#types) and -[resource allocation](../../create-apps/app-reference.md#sizes). +including the [image type](/create-apps/app-reference/single-runtime-image.md#types) and +[resource allocation](/create-apps/app-reference/single-runtime-image.md#sizes). The following example shows a shortened excerpt of the `deployment` property: diff --git a/sites/upsun/src/languages/dotnet.md b/sites/upsun/src/languages/dotnet.md index 7bb0aa65b6..687377f5c8 100644 --- a/sites/upsun/src/languages/dotnet.md +++ b/sites/upsun/src/languages/dotnet.md @@ -4,6 +4,8 @@ description: | {{% vendor/name %}} supports deploying .NET applications by allowing developers to define a build process and pass its variables to the .NET Core build environment. --- +{{% composable/disclaimer %}} + {{% description %}} ## Supported versions @@ -67,7 +69,7 @@ Also, should the program terminate for any reason, it's automatically restarted. Note that the start command _must_ run in the foreground. Incoming requests are passed to the application using either a TCP (default) or Unix socket. -The application must use the [appropriate environment variable](../create-apps/app-reference.md#where-to-listen) to determine the URI to listen on. +The application must use the [appropriate environment variable](/create-apps/app-reference/single-runtime-image.md#where-to-listen) to determine the URI to listen on. For a TCP socket ([recommended](https://go.microsoft.com/fwlink/?linkid=874850)), the application must listen on `http://127.0.0.1`, using the `PORT` environment variable. diff --git a/sites/upsun/src/languages/elixir.md b/sites/upsun/src/languages/elixir.md index 20d0d4d4f3..568d7e740c 100644 --- a/sites/upsun/src/languages/elixir.md +++ b/sites/upsun/src/languages/elixir.md @@ -3,6 +3,8 @@ title: "Elixir" description: "{{% vendor/name %}} supports building and deploying applications written in Elixir. There is no default flavor for the build phase, but you can define it explicitly in your build hook. {{% vendor/name %}} Elixir images support both committed dependencies and download-on-demand. The underlying Erlang version is 22.0.7." --- +{{% composable/disclaimer %}} + {{% description %}} ## Supported versions @@ -78,7 +80,7 @@ applications: {{< note >}} -That build hook works for most cases and assumes that your `mix.exs` file is located at [your app root](../create-apps/app-reference.md#root-directory). +That build hook works for most cases and assumes that your `mix.exs` file is located at [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory). {{< /note >}} @@ -135,7 +137,7 @@ You can commit a `mix.exs` file in your repository and the system downloads the The services configuration is available in the environment variable `PLATFORM_RELATIONSHIPS`. -Given a [relationship](/create-apps/app-reference.md#relationships) defined in `{{< vendor/configfile "app" >}}`: +Given a [relationship](/create-apps/app-reference/single-runtime-image#relationships) defined in `{{< vendor/configfile "app" >}}`: ```yaml {configFile="app"} applications: diff --git a/sites/upsun/src/languages/go.md b/sites/upsun/src/languages/go.md index 4eca8f254e..9ba068b3bc 100644 --- a/sites/upsun/src/languages/go.md +++ b/sites/upsun/src/languages/go.md @@ -3,6 +3,8 @@ title: "Go" description: "{{% vendor/name %}} supports building and deploying applications written in Go using Go modules. They're compiled during the Build hook phase, and support both committed dependencies and download-on-demand." --- +{{% composable/disclaimer %}} + {{% description %}} ## Supported versions diff --git a/sites/upsun/src/languages/java/_index.md b/sites/upsun/src/languages/java/_index.md index 836fdf23f2..e05d28da5b 100644 --- a/sites/upsun/src/languages/java/_index.md +++ b/sites/upsun/src/languages/java/_index.md @@ -4,6 +4,8 @@ description: Java is a general-purpose programming language, and one of the most layout: single --- +{{% composable/disclaimer %}} + {{% description %}} ## Supported versions diff --git a/sites/upsun/src/languages/java/migration.md b/sites/upsun/src/languages/java/migration.md index 71456b5c92..bd45641144 100644 --- a/sites/upsun/src/languages/java/migration.md +++ b/sites/upsun/src/languages/java/migration.md @@ -4,6 +4,8 @@ weight: 2 sidebarTitle: "Moving to {{% vendor/name %}}" --- +{{% composable/disclaimer %}} + It is common to have a Java application that you want to migrate to {{% vendor/name %}}. {{% vendor/name %}} supports several styles of Java application, such as monolith, microservices, stateful, and stateless. @@ -49,12 +51,12 @@ applications: ``` 1. [A Java version](/languages/java/_index.md#supported-versions), e,g.: `java:{{% latest "java" %}}` 2. [Hooks define what happens when building the application](../../create-apps/hooks/_index.md). This build process typically generates an executable file such as a uber-jar. For example, `mvn clean package`. -3. [The commands key defines the command to launch the application](../../create-apps/app-reference.md#web-commands). For example, `java -jar file.jar`. +3. [The commands key defines the command to launch the application](/create-apps/app-reference/single-runtime-image.md#web-commands). For example, `java -jar file.jar`. 4. In the start's command needs to receive the port where the application will execute thought the `PORT` environment. That's best when your app follows the port bind principle. For example, `java -jar jar --port=$PORT`. {{< note >}} -Be aware that after the build, it creates a read-only system. You have the [mount option to create a writable folder](../../create-apps/app-reference.md#mounts). +Be aware that after the build, it creates a read-only system. You have the [mount option to create a writable folder](/create-apps/app-reference/single-runtime-image.md#mounts). {{< /note >}} @@ -123,9 +125,9 @@ While the table above shows examples for Platform.sh rather than for {{% vendor/ ## Access to managed services {{% vendor/name %}} provides [managed services](/add-services/_index.md) such as databases, cache and search engines. -However, you can use a database or any services such as a transition process, just be aware of the [firewall](../../create-apps/app-reference.md#firewall). +However, you can use a database or any services such as a transition process, just be aware of the [firewall](/create-apps/app-reference/single-runtime-image.md#firewall). -When applications need to access a service, it is important to include the [`relationships` key](../../create-apps/app-reference.md#relationships). +When applications need to access a service, it is important to include the [`relationships` key](/create-apps/app-reference/single-runtime-image.md#relationships). By default an application may not talk to any other container without a `relationship` explicitly allowing access. To connect to a service from your deployed application, you need to pass the relationships information into your application's configuration. diff --git a/sites/upsun/src/languages/java/tuning.md b/sites/upsun/src/languages/java/tuning.md index 281533f036..f4e60e195e 100644 --- a/sites/upsun/src/languages/java/tuning.md +++ b/sites/upsun/src/languages/java/tuning.md @@ -4,6 +4,8 @@ weight: 2 sidebarTitle: "Tuning" --- +{{% composable/disclaimer %}} + There are a number of settings that can be adjusted for each application to optimize its performance on {{% vendor/name %}}. ## Memory limits diff --git a/sites/upsun/src/languages/lisp.md b/sites/upsun/src/languages/lisp.md index 9a573e58a3..f96e167696 100644 --- a/sites/upsun/src/languages/lisp.md +++ b/sites/upsun/src/languages/lisp.md @@ -3,6 +3,8 @@ title: "Lisp" description: "{{% vendor/name %}} supports building and deploying applications written in Lisp using Common Lisp (the SBCL version) with ASDF and Quick Lisp support. They're compiled during the Build phase, and support both committed dependencies and download-on-demand." --- +{{% composable/disclaimer %}} + {{% description %}} ## Supported versions diff --git a/sites/upsun/src/languages/nodejs/_index.md b/sites/upsun/src/languages/nodejs/_index.md index 00032730af..8f4ac5565e 100644 --- a/sites/upsun/src/languages/nodejs/_index.md +++ b/sites/upsun/src/languages/nodejs/_index.md @@ -7,6 +7,8 @@ keywords: - bun runtime --- +{{% composable/disclaimer %}} + Node.js is a popular asynchronous JavaScript runtime. Deploy scalable Node.js apps of all sizes on {{% vendor/name %}}. You can also develop a microservice architecture mixing JavaScript and other apps with [multi-app projects](../../create-apps/multi-app/_index.md). @@ -156,13 +158,13 @@ applications: ## Dependencies By default, {{% vendor/name %}} assumes you're using npm as a package manager. -If your code has a `package.json`, the following command is run as part of the default [build flavor](../../create-apps/app-reference.md#build): +If your code has a `package.json`, the following command is run as part of the default [build flavor](/create-apps/app-reference/single-runtime-image.md#build): ```bash npm prune --userconfig .npmrc && npm install --userconfig .npmrc ``` -This means you can specify configuration in a `.npmrc` file in [your app root](../../create-apps/app-reference.md#root-directory). +This means you can specify configuration in a `.npmrc` file in [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory). ### Use Yarn as a package manager diff --git a/sites/upsun/src/languages/nodejs/debug.md b/sites/upsun/src/languages/nodejs/debug.md index bd5eb1a07c..f780caa5b4 100644 --- a/sites/upsun/src/languages/nodejs/debug.md +++ b/sites/upsun/src/languages/nodejs/debug.md @@ -3,6 +3,8 @@ title: "Debugging" weight: 1 --- +{{% composable/disclaimer %}} + Effectively debugging web apps takes effort, especially when an HTTP request goes through multiple layers before reaching your web app. Follow the steps below to debug a specific app. diff --git a/sites/upsun/src/languages/nodejs/node-version.md b/sites/upsun/src/languages/nodejs/node-version.md index 0c4a7b9bee..ed681e0b8b 100644 --- a/sites/upsun/src/languages/nodejs/node-version.md +++ b/sites/upsun/src/languages/nodejs/node-version.md @@ -4,6 +4,8 @@ weight: 1 description: See how to manage different Node.js versions in your {{% vendor/name %}} containers." --- +{{% composable/disclaimer %}} + Each {{% vendor/name %}} container image includes a specific language in a specific version. A set of dependencies is also provided based on that language version. This ensures that your application container is as small and efficient as possible. @@ -33,7 +35,7 @@ including Windows Subsystem for Linux. title=.nvmrc +++ -Create a `.nvmrc` file in [your app root](../../create-apps/app-reference.md#root-directory): +Create a `.nvmrc` file in [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory): ```yaml {location=".nvmrc"} v16.13.2 @@ -45,7 +47,7 @@ v16.13.2 title=.n-node-version/.node-version +++ -Create a `.n-node-version` or `.node-version` file in [your app root](../../create-apps/app-reference.md#root-directory): +Create a `.n-node-version` or `.node-version` file in [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory): ```yaml {location=".n-node-version or .node-version"} 16.13.2 diff --git a/sites/upsun/src/languages/php/_index.md b/sites/upsun/src/languages/php/_index.md index 8fe64653e0..1d7d7cf51a 100644 --- a/sites/upsun/src/languages/php/_index.md +++ b/sites/upsun/src/languages/php/_index.md @@ -4,6 +4,14 @@ description: Deploy PHP apps on {{% vendor/name %}}. layout: single --- +{{% note theme="info" %}} + +You can now use the Upsun composable image (BETA) to install runtimes and tools in your application container. +To find out more about this feature, see the [dedicated documentation page](/create-apps/app-reference/composable-image.md).
+Also, see how you can [modify your PHP runtime when using a composable image](#modify-your-php-runtime-when-using-a-composable-image). + +{{% /note %}} + ## Supported versions {{% major-minor-versions-note configMinor="true" %}} @@ -51,14 +59,14 @@ applications: ``` ### 2. Serve your app -To serve your app, define what (and how) content should be served by setting the [`locations` parameter](../../create-apps/app-reference.md#locations). +To serve your app, define what (and how) content should be served by setting the [`locations` parameter](/create-apps/app-reference/single-runtime-image.md#locations). Usually, it contains the two following (optional) keys: - `root` for the document root, the directory to which all requests for existing `.php` and static files (such as `.css`, `.jpg`) are sent. - `passthru` to [define a front controller](../../create-apps/web/php-basic.md#set-different-rules-for-specific-locations) to handle nonexistent files. - The value is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). + The value is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). {{< note >}} @@ -110,13 +118,13 @@ applications: ## Dependencies Up to PHP version 8.1, it's assumed that you're using [Composer](https://getcomposer.org/) 1.x to manage dependencies. -If you have a `composer.json` file in your code, the default [build flavor is run](../../create-apps/app-reference.md#build): +If you have a `composer.json` file in your code, the default [build flavor is run](/create-apps/app-reference/single-runtime-image.md#build): ```bash composer --no-ansi --no-interaction install --no-progress --prefer-dist --optimize-autoloader ``` -To use Composer 2.x on your project, either use PHP 8.2+ or, in your app configuration, add the following [dependency](../../create-apps/app-reference.md#dependencies): +To use Composer 2.x on your project, either use PHP 8.2+ or, in your app configuration, add the following [dependency](/create-apps/app-reference/single-runtime-image.md#dependencies): ```yaml {configFile="app"} applications: @@ -128,7 +136,7 @@ applications: php: composer/composer: '^2' ``` -Adding a dependency to the [dependencies block](../../create-apps/app-reference.md#dependencies) makes it available globally. +Adding a dependency to the [dependencies block](/create-apps/app-reference/single-runtime-image.md#dependencies) makes it available globally. So you can then use included dependencies as commands within your app container. You can add multiple global dependencies to the dependencies block, such as [Node.js](../nodejs/_index.md#2-specify-any-global-dependencies). @@ -161,7 +169,7 @@ applications: That installs production dependencies with Composer but not development dependencies. The same can be achieved by using the default build flavor and [adding the `COMPOSER_NO_DEV` variable](../../development/variables/set-variables.md). -See more on [build flavors](../../create-apps/app-reference.md#build). +See more on [build flavors](/create-apps/app-reference/single-runtime-image.md#build). ### Alternative repositories @@ -303,7 +311,7 @@ markdownify=false ## PHP settings -You can configure your PHP-FPM runtime configuration by specifying the [runtime in your app configuration](../../create-apps/app-reference.md#runtime). +You can configure your PHP-FPM runtime configuration by specifying the [runtime in your app configuration](/create-apps/app-reference/single-runtime-image.md#runtime). In addition to changes in runtime, you can also change the PHP settings. Some commonly used settings are: @@ -390,7 +398,7 @@ For more information, see how to use [PHP-specific variables](../../development/ title=Using `php.ini` +++ -You can provide a custom `php.ini` file at the [app root](../../create-apps/app-reference.md#root-directory). +You can provide a custom `php.ini` file at the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). Using this method isn't recommended since it offers less flexibility and is more error-prone. Consider using variables instead. @@ -445,20 +453,20 @@ Common functions to disable include: PHP has two execution modes you can choose from: - The command line interface mode (PHP-CLI) is the mode used for command line scripts and standalone apps. - This is the mode used when you're logged into your container via SSH, for [crons](../../create-apps/app-reference.md#crons), + This is the mode used when you're logged into your container via SSH, for [crons](/create-apps/app-reference/single-runtime-image.md#crons), and usually also for [alternate start commands](#alternate-start-commands). To use PHP-CLI, run your script with `php {{}}`, - where {{}} is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). + where {{}} is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). - The Common Gateway Interface mode (PHP-CGI) is the mode used for web apps and web requests. This is the default mode when the `start` command isn't explicitly set. To use PHP-CGI, run your script with a symlink: `/usr/bin/start-php-app {{}}`, - where {{}} is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). + where {{}} is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). With PHP-CGI, PHP is run using the FastCGI Process Manager (PHP-FPM). ## Alternate start commands To specify an alternative process to run your code, set a `start` command. -For more information about the start command, see the [web commands reference](../../create-apps/app-reference.md#web-commands). +For more information about the start command, see the [web commands reference](/create-apps/app-reference/single-runtime-image.md#web-commands). By default, start commands use PHP-CLI. Find out how and when to use each [execution mode](#execution-mode). @@ -488,7 +496,7 @@ web: {{< /snippet >}} ``` - {{}} is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). + {{}} is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). <---> @@ -508,7 +516,7 @@ web: {{< /snippet >}} ``` - {{}} is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). + {{}} is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). 3. Configure the container to listen on a TCP socket: @@ -522,7 +530,7 @@ web: ``` When you listen on a TCP socket, the `$PORT` environment variable is automatically set. - See more options on how to [configure where requests are sent](../../create-apps/app-reference.md#upstream). + See more options on how to [configure where requests are sent](/create-apps/app-reference/single-runtime-image.md#upstream). You might have to configure your app to connect via the `$PORT` TCP socket, especially when using web servers such as [Swoole](swoole.md) or [Roadrunner](https://github.com/roadrunner-server/roadrunner). @@ -559,7 +567,7 @@ web: ``` {{}} is the bash script created in step 1. - Both {{}} and {{}} are file paths relative to the [app root](../../create-apps/app-reference.md#root-directory). + Both {{}} and {{}} are file paths relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). {{< /codetabs >}} @@ -622,3 +630,61 @@ See dedicated guides for deploying and working with them: - [Laravel](/get-started/stacks/laravel) - [Symfony](/get-started/stacks/symfony/_index.md) + +## Modify your PHP runtime when using a composable image + +{{% note theme= "warning" %}} + +This section is only relevant when using the Upsun [composable image (BETA)](/create-apps/app-reference/composable-image.md). + +{{% /note %}} + +The following table presents the possible modifications you can make to your PHP primary runtime using the `stack` key and composable image. +Each modification should be listed below the stack chosen (i.e. `extensions` are enabled under `.applications.frontend.stack[0]["php@8.3"].extensions` for PHP 8.3). +Xdebug is an exception, and should be configured from its extension listing. +See the example below for more details. + +| Name | Type | Description | +|-----------------------------|------------------------------------------------------------|--------------------------------------------------------------------------------------------| +| `extensions` | List of `string`s OR [extensions definitions](/create-apps/app-reference/composable-image#php-extensions-and-python-packages) | [PHP extensions](/languages/php/extensions.md) to enable. | +| `disabled_extensions` | List of `string`s | [PHP extensions](/languages/php/extensions.md) to disable. | +| `request_terminate_timeout` | `integer` | The timeout for serving a single request after which the PHP-FPM worker process is killed. | +| `sizing_hints` | A [sizing hints definition](/create-apps/app-reference/composable-image#sizing-hints) | The assumptions for setting the number of workers in your PHP-FPM runtime. | +| `xdebug` | An Xdebug definition | The setting to turn on [Xdebug](/languages/php/xdebug.md). | + +Here is an example configuration: + +```yaml {configFile="app"} +applications: + + frontend: + + stack: + - "php@8.3": + extensions: + - apcu # A PHP extension made available to the PHP runtime + - sodium + - xsl + - pdo_sqlite + - xdebug: + idekey: YOUR_KEY + + disabled_extensions: + - gd + + request_terminate_timeout: 200 + + sizing_hints: + request_memory: 45 + reserved_memory: 70 + + - "php83Extensions.apcu" # A PHP extension made available to all runtimes. + - "python@3.12" + - "python312Packages.yq" +``` + +{{% note %}} + +You can also set your [app's runtime timezone](/create-apps/timezone.md). + +{{% /note %}} \ No newline at end of file diff --git a/sites/upsun/src/languages/php/composer-auth.md b/sites/upsun/src/languages/php/composer-auth.md index e7fb3a6af7..bd26e6af01 100644 --- a/sites/upsun/src/languages/php/composer-auth.md +++ b/sites/upsun/src/languages/php/composer-auth.md @@ -4,6 +4,8 @@ sidebarTitle: "Authenticated Composer" description: Allow Composer to authenticate against a private third-party Composer repository and download PHP packages from it. --- +{{% composable/disclaimer %}} + [Packagist](https://packagist.org/) is the primary Composer repository for public PHP packages. But you can also have Composer download PHP packages from a private, third-party Composer repository. To make sure Composer has the necessary credentials to do so, @@ -66,4 +68,4 @@ Access to private Git repositories is restricted through the use of SSH keys. But most private Composer tools mirror tagged releases of dependencies and serve them directly without hitting the Git repository. To avoid having to authenticate against a remote Git repository, -make sure your dependencies specify tagged releases. \ No newline at end of file +make sure your dependencies specify tagged releases. diff --git a/sites/upsun/src/languages/php/extensions.md b/sites/upsun/src/languages/php/extensions.md index 747fa39c35..5f50d300c9 100644 --- a/sites/upsun/src/languages/php/extensions.md +++ b/sites/upsun/src/languages/php/extensions.md @@ -4,10 +4,19 @@ weight: 1 description: See what PHP extensions are available with each PHP version on {{% vendor/name %}}. --- +{{% note theme="info" %}} + +You can now use the [Upsun composable image (BETA)](/create-apps/app-reference/composable-image.md) to install runtimes and tools in your application container. +When using the composable image, see how you can: +- [Manage PHP extensions](/create-apps/app-reference/composable-image.md#php-extensions-and-python-packages) +- [Modify your PHP runtime](#modify-your-php-runtime-when-using-a-composable-image) + +{{% /note %}} + PHP has a number of [extensions](https://pecl.php.net/) developed by members of the community. Some of them are available for {{% vendor/name %}} containers. -{{< note version="1" theme="warning" >}} +{{< note version="1" theme="warning" title="Warning" >}} The information on this page applies to Grid and {{% names/dedicated-gen-3 %}} plans. See also [PHP extensions on {{% names/dedicated-gen-2 %}} plans](../../dedicated-gen-2/overview/grid.md#extensions). @@ -29,7 +38,7 @@ applications: disabled_extensions: - sqlite3 ``` -You can also [include configuration options](../../create-apps/app-reference.md#extensions) for specific extensions. +You can also [include configuration options](/create-apps/app-reference/single-runtime-image.md#extensions) for specific extensions. The following table shows all extensions that are available (Avail) and on by default (Def). You can turn on the available ones with the `extensions` key @@ -71,7 +80,7 @@ but it takes slightly more work: but committing large binary blobs to Git is generally not recommended. 2. Load the extension using an absolute path by [customizing the PHP settings](./_index.md#customize-php-settings) - For example, if the extension is named `spiffy.so` and is in your [app root](../../create-apps/app-reference.md#root-directory), + For example, if the extension is named `spiffy.so` and is in your [app root](/create-apps/app-reference/single-runtime-image.md#root-directory), your configuration looks like the following: ```yaml {configFile="app"} diff --git a/sites/upsun/src/languages/php/fpm.md b/sites/upsun/src/languages/php/fpm.md index bf211be2f3..80b6bb6802 100644 --- a/sites/upsun/src/languages/php/fpm.md +++ b/sites/upsun/src/languages/php/fpm.md @@ -4,6 +4,8 @@ description: "Learn how to adjust the maximum number of PHP-FPM workers for your weight: 5 --- +{{% composable/disclaimer %}} + PHP-FPM helps improve your app's performance by maintaining pools of workers that can process PHP requests. This is particularly useful when your app needs to handle a high number of simultaneous requests. @@ -89,7 +91,7 @@ These values allow most programs to run, but you can amend them to fit your needs. To do so, adjust your [app configuration](../../create-apps/_index.md). -Under `runtime` in the [`sizing_hints` setting](../../create-apps/app-reference.md#sizing-hints), +Under `runtime` in the [`sizing_hints` setting](/create-apps/app-reference/single-runtime-image.md#sizing-hints), set the values for `reserved_memory` and `request_memory`. For example, diff --git a/sites/upsun/src/languages/php/redis.md b/sites/upsun/src/languages/php/redis.md index 684b12214b..4cddefa9fe 100644 --- a/sites/upsun/src/languages/php/redis.md +++ b/sites/upsun/src/languages/php/redis.md @@ -4,6 +4,8 @@ sidebarTitle: Custom Redis weight: 7 --- +{{% composable/disclaimer %}} + [Redis](../../add-services/redis.md) is a popular structured key-value service, supported by {{% vendor/name %}}. It's frequently used for caching. @@ -77,7 +79,7 @@ That's only for pre-built extensions. 1. Download the Relay/PhpRedis source code. 2. Check out the version specified in the build hook. 3. Compile the extension. -4. Copy the resulting `relay.so`/`redis.so` file to [your app root](../../create-apps/app-reference.md#root-directory). +4. Copy the resulting `relay.so`/`redis.so` file to [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory). 5. Add a line to the `php.ini` file in your app root to enable the extension, creating the file if necessary. If the script doesn't find a `$PLATFORM_CACHE_DIR` directory defined, it exits silently. diff --git a/sites/upsun/src/languages/php/swoole.md b/sites/upsun/src/languages/php/swoole.md index 6ca5c55b0e..849846b245 100644 --- a/sites/upsun/src/languages/php/swoole.md +++ b/sites/upsun/src/languages/php/swoole.md @@ -4,6 +4,8 @@ weight: 8 sidebarTitle: "Swoole" --- +{{% composable/disclaimer %}} + Swoole is a PHP extension that extends PHP core with a coroutine based asynchronous network application framework designed for building large scale concurrent systems. Unlike PHP-FPM’s stateless operating, Swoole relies on establishing persistent connections with every user, sending and receiving data in real-time. diff --git a/sites/upsun/src/languages/php/troubleshoot.md b/sites/upsun/src/languages/php/troubleshoot.md index c8f13a25c2..5b9ed54f2e 100644 --- a/sites/upsun/src/languages/php/troubleshoot.md +++ b/sites/upsun/src/languages/php/troubleshoot.md @@ -4,6 +4,8 @@ sidebarTitle: Troubleshoot description: Learn how to troubleshoot common issues in PHP. --- +{{% composable/disclaimer %}} + {{% troubleshoot %}} ## Server reached `max_children` diff --git a/sites/upsun/src/languages/php/tuning.md b/sites/upsun/src/languages/php/tuning.md index f9c30cb8c7..60930133df 100644 --- a/sites/upsun/src/languages/php/tuning.md +++ b/sites/upsun/src/languages/php/tuning.md @@ -3,6 +3,8 @@ title: "Performance tuning" weight: 3 --- +{{% composable/disclaimer %}} + Once your app is up and running it still needs to be kept fast. {{% vendor/name %}} offers a wide degree of flexibility in how PHP behaves, but that does mean you may need to take a few steps to ensure your site is running optimally. @@ -16,7 +18,7 @@ To make a PHP-based site run faster, the first step is to upgrade the PHP versio Upgrading the PHP version might require changes to your app. For more details and recommendations, see the [PHP migration guides](https://www.php.net/manual/en/migration80.php). -To change your PHP version, change the [`type` in your app configuration](../../create-apps/app-reference.md#types). +To change your PHP version, change the [`type` in your app configuration](/create-apps/app-reference/single-runtime-image.md#types). Before merging to production, test the change on a branch and make sure that your app is working as expected. ## Optimize the FPM worker count @@ -58,7 +60,7 @@ applications: php: opcache.preload: '{{< variable "PRELOAD_SCRIPT" >}}' ``` -`{{< variable "PRELOAD_SCRIPT" >}}` is a file path relative to the [app root](../../create-apps/app-reference.md#root-directory). +`{{< variable "PRELOAD_SCRIPT" >}}` is a file path relative to the [app root](/create-apps/app-reference/single-runtime-image.md#root-directory). It may be any PHP script that calls `opcache_compile_file()`. The following example uses a `preload.php` file as the preload script. @@ -93,7 +95,7 @@ To determine the maximum number of files to cache, follow these steps: 1. Connect to the container via SSH using the [CLI](../../development/ssh/_index.md) by running `{{% vendor/cli %}} ssh`. -2. Determine roughly how many `.php` files your app has by running this command from [your app root](../../create-apps/app-reference.md#root-directory): +2. Determine roughly how many `.php` files your app has by running this command from [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory): ```bash find . -type f -name '*.php' | wc -l diff --git a/sites/upsun/src/languages/php/xdebug.md b/sites/upsun/src/languages/php/xdebug.md index 929be85bd5..d0425294d5 100644 --- a/sites/upsun/src/languages/php/xdebug.md +++ b/sites/upsun/src/languages/php/xdebug.md @@ -4,6 +4,8 @@ weight: 6 sidebarTitle: "Xdebug" --- +{{% composable/disclaimer %}} + [Xdebug](https://xdebug.org/) is a real-time debugger extension for PHP. While usually used for local development, it can also be helpful for debugging aberrant behavior on the server. @@ -31,7 +33,7 @@ You also need: Xdebug runs as a second PHP-FPM process used only for debugging requests, leaving the normal process unaffected. -To enable Xdebug, add the following to your [app configuration](../../create-apps/app-reference.md): +To enable Xdebug, add the following to your [app configuration](/create-apps/app-reference/single-runtime-image.md): ```yaml {configFile="app"} applications: @@ -115,7 +117,7 @@ The common steps for setup usually include: The Port should always be `443` and the Debugger set to `Xdebug`. 4. Ensuring path mappings is enabled. This lets you define what remote paths on the server correspond to what path on your local machine. - In the majority of cases you can just define [your app root](../../create-apps/app-reference.md#root-directory) + In the majority of cases you can just define [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory) to map to `app`. 5. Listening for connections. 6. Starting debugging. While in listen mode, start the `{{% vendor/cli %}} xdebug` tunnel. diff --git a/sites/upsun/src/languages/python/_index.md b/sites/upsun/src/languages/python/_index.md index 41ba9d84bf..aa157e51c3 100644 --- a/sites/upsun/src/languages/python/_index.md +++ b/sites/upsun/src/languages/python/_index.md @@ -4,6 +4,8 @@ description: Get started creating Python apps on {{% vendor/name %}}. layout: single --- +{{% composable/disclaimer %}} + Python is a general purpose scripting language often used in web development. You can deploy Python apps on {{% vendor/name %}} using a server or a project such as [uWSGI](https://uwsgi-docs.readthedocs.io/en/latest/). @@ -170,7 +172,7 @@ For more about managing packages with pip, Pipenv, and Poetry, see how to [manage dependencies](./dependencies.md). To add global dependencies (packages available as commands), -add them to the `dependencies` in your [app configuration](../../create-apps/app-reference.md#dependencies): +add them to the `dependencies` in your [app configuration](/create-apps/app-reference/single-runtime-image.md#dependencies): ```yaml {configFile="app"} applications: diff --git a/sites/upsun/src/languages/python/dependencies.md b/sites/upsun/src/languages/python/dependencies.md index 87232d3ff5..310c52fe20 100644 --- a/sites/upsun/src/languages/python/dependencies.md +++ b/sites/upsun/src/languages/python/dependencies.md @@ -5,6 +5,8 @@ sidebarTitle: Manage dependencies description: See how to manage Python dependencies with different package managers. --- +{{% composable/disclaimer %}} + You can manage Python packages in different ways. Python images come with pip installed, but they're flexible enough so you can choose what package manager you want. diff --git a/sites/upsun/src/languages/python/python-version.md b/sites/upsun/src/languages/python/python-version.md index bfe8a1db3d..5d50a9eec2 100644 --- a/sites/upsun/src/languages/python/python-version.md +++ b/sites/upsun/src/languages/python/python-version.md @@ -5,6 +5,8 @@ weight: 0 description: See how to manage different Python versions in your {{% vendor/name %}} containers. --- +{{% composable/disclaimer %}} + You may need to use a specific version of Python that isn't available in an app container for a different language. For example, a container might have a long-term support version, while you want the latest version. diff --git a/sites/upsun/src/languages/python/server.md b/sites/upsun/src/languages/python/server.md index da04363b6c..3436c80eed 100644 --- a/sites/upsun/src/languages/python/server.md +++ b/sites/upsun/src/languages/python/server.md @@ -4,6 +4,8 @@ weight: -90 description: See how to start your apps as you wish with ASGI and WSGI servers. --- +{{% composable/disclaimer %}} + The Python ecosystem offers a number of web servers that can be used to deploy to {{% vendor/name %}}. The following examples deploy a Django project named `myapp`. They assume a `myapp/wsgi.py` or `myapp/asgi.py` file with a callable `application`. diff --git a/sites/upsun/src/languages/ruby.md b/sites/upsun/src/languages/ruby.md index b77591d62b..0cfde1a93e 100644 --- a/sites/upsun/src/languages/ruby.md +++ b/sites/upsun/src/languages/ruby.md @@ -4,6 +4,8 @@ description: | {{% vendor/name %}} supports deploying any Ruby application. Your application can use any Ruby application server such as Unicorn or Puma and deploying a Rails or a Sinatra app is very straight forward. --- +{{% composable/disclaimer %}} + {{% description %}} ## Supported versions @@ -83,7 +85,7 @@ applications: 3. Build your application with the build hook. - Assuming you have your dependencies stored in the `Gemfile` at [your app root](../create-apps/app-reference.md#root-directory), + Assuming you have your dependencies stored in the `Gemfile` at [your app root](/create-apps/app-reference/single-runtime-image.md#root-directory), create a hook like the following: ```yaml {configFile="app"} diff --git a/sites/upsun/src/languages/rust.md b/sites/upsun/src/languages/rust.md index b7f736fb4c..ea4e279751 100644 --- a/sites/upsun/src/languages/rust.md +++ b/sites/upsun/src/languages/rust.md @@ -7,6 +7,8 @@ banner: To share your feedback so we can improve it, add a comment to the [Rust feature card](https://next.platform.sh/c/221-rust). --- +{{% composable/disclaimer %}} + {{% vendor/name %}} supports building and deploying applications written in Rust. ## Supported versions diff --git a/sites/upsun/src/learn/bestpractices/oneormany.md b/sites/upsun/src/learn/bestpractices/oneormany.md index 73897c918c..12bd881aad 100644 --- a/sites/upsun/src/learn/bestpractices/oneormany.md +++ b/sites/upsun/src/learn/bestpractices/oneormany.md @@ -67,7 +67,7 @@ You can have services that are only exposed to another service as well as servic In a clustered application, you can have one of the following configurations: - Multiple [applications](/create-apps/multi-app/_index.md), often in different directories or with separate code bases that deploy separately -- A single app that spawns one or more [worker instances](/create-apps/app-reference.md#workers) that run background processes +- A single app that spawns one or more [worker instances](/create-apps/app-reference/single-runtime-image.md#workers) that run background processes With a clustered application, you often don't need multiple service instances. The [MySQL, MariaDB](/add-services/mysql/_index.md), diff --git a/sites/upsun/src/learn/overview/yaml/yaml-structure.md b/sites/upsun/src/learn/overview/yaml/yaml-structure.md index 7954f23ea3..89e11b7f13 100644 --- a/sites/upsun/src/learn/overview/yaml/yaml-structure.md +++ b/sites/upsun/src/learn/overview/yaml/yaml-structure.md @@ -20,13 +20,13 @@ This YAML file is located in your ``.upsun`` directory, at the root of your proj ``` ## Mandatory top-level keys In the ``config.yaml`` file, there are only three mandatory top-level YAML keys: -- ``applications``: this section of the file contains all of your [app definitions](/create-apps/app-reference.html) +- ``applications``: this section of the file contains all of your [app definitions](/create-apps/app-reference/single-runtime-image) - ``routes``: this section of the file contains all of your [route definitions](/define-routes.md) (for each of your apps) - ``services``: this section of the file contains all of your [service definitions](/add-services.md) (for each of your apps) This looks like: ```yaml {location="{{< vendor/configfile "apps" >}}"} -{{< code-link destination="/create-apps/app-reference.md" text="applications" title="Complete list of all available properties" >}}: +{{< code-link destination="/create-apps/app-reference/single-runtime-image.html" text="applications" title="Complete list of all available properties" >}}: app: ... @@ -50,8 +50,8 @@ Any YAML files located at the first level of your ``.upsun`` folder, at the root The following rules apply to YAML files contained in the ``.upsun`` folder: - All the existing YAML files located at the first level of the ``.upsun`` folder are taken into account. -- All the existing YAML files located at the first level of the ``.upsun`` folder must feature the [mandatory top-level keys](#mandatory-top-level-keys), and must contain a [valid YAML configuration](/create-apps/app-reference.md). -- All the YAML files in subdirectories of the ``.upsun`` folder need to be [manually imported](/learn/overview/yaml/platform-yaml-tags.md#include) and contain a [valid YAML configuration](/create-apps/app-reference.md). +- All the existing YAML files located at the first level of the ``.upsun`` folder must feature the [mandatory top-level keys](#mandatory-top-level-keys), and must contain a [valid YAML configuration](/create-apps/app-reference/single-runtime-image.md). +- All the YAML files in subdirectories of the ``.upsun`` folder need to be [manually imported](/learn/overview/yaml/platform-yaml-tags.md#include) and contain a [valid YAML configuration](/create-apps/app-reference/single-runtime-image.md). {{% note title="Warning" theme="warning"%}} When {{% vendor/name %}} combines all the YAML files located at the first level of the ``.upsun`` folder, only the top-level keys (`applications`, `services`, and `routes`) are merged. So if you define an app named ``app`` in two different YAML files, {{% vendor/name %}} only takes the second one into account. diff --git a/sites/upsun/src/learn/tutorials/exporting.md b/sites/upsun/src/learn/tutorials/exporting.md index 9f6181887b..c9e65463be 100644 --- a/sites/upsun/src/learn/tutorials/exporting.md +++ b/sites/upsun/src/learn/tutorials/exporting.md @@ -59,7 +59,7 @@ title=Using Git ## 2. Download your files Some files might not be stored in Git, -such as data your app writes [in mounts](/create-apps/app-reference.md#mounts). +such as data your app writes [in mounts](/create-apps/app-reference/single-runtime-image.md#mounts). You can download your files [using the CLI](/development/file-transfer.md#transfer-files-using-the-cli) or [using SSH](/development/file-transfer.md#transfer-files-using-an-ssh-client). diff --git a/sites/upsun/src/learn/tutorials/migrating/from-psh.md b/sites/upsun/src/learn/tutorials/migrating/from-psh.md index 8870ed130b..42d6303fd4 100644 --- a/sites/upsun/src/learn/tutorials/migrating/from-psh.md +++ b/sites/upsun/src/learn/tutorials/migrating/from-psh.md @@ -31,7 +31,7 @@ and for some apps, such as Drupal, configuration that you need to export from th title=Using the CLI +++ -If you do not already have an organization created on {{% vendor/name %}}, create one: +If you do not already have an organization created on {{% vendor/name %}}, create one: ```bash {{% vendor/cli %}} org:create @@ -180,7 +180,7 @@ For any potential more details, see the [specific service](/add-services/_index. ## 7. Import files Your app may include content files, meaning files that aren't intended to be part of your codebase so aren't in Git. -You can upload such files to [mounts you created](/create-apps/app-reference.md#mounts). +You can upload such files to [mounts you created](/create-apps/app-reference/single-runtime-image.md#mounts). Upload to each mount separately. Suppose you have the following mounts defined: @@ -197,11 +197,11 @@ mounts: {{< note >}} {{< vendor/name >}} doesn't currently support the same `local` mounts as {{< vendor/psh_ref >}}. -It only supports `tmp`, `storage`, and `service` [mounts](/create-apps/app-reference.md#mounts). +It only supports `tmp`, `storage`, and `service` [mounts](/create-apps/app-reference/single-runtime-image.md#mounts). Before transferring your files, change the `source` of your existing `local` mounts to a supported mount type. {{< /note >}} -For instance: +For instance: ```yaml {configFile="app"} applications: diff --git a/sites/upsun/src/projects/change-project-timezone.md b/sites/upsun/src/projects/change-project-timezone.md index 5c7038c9d6..0a05a4316b 100644 --- a/sites/upsun/src/projects/change-project-timezone.md +++ b/sites/upsun/src/projects/change-project-timezone.md @@ -7,9 +7,9 @@ The project timezone affects [automated backups](../environments/backup.md). The project timezone doesn't affect: -- [App runtime](../create-apps/timezone.md). -- [Cron jobs](../create-apps/app-reference.md#crons). -- [System logs](../increase-observability/logs/_index.md). UTC is the default timezone for all logs. +- [App runtime](/create-apps/timezone.md). +- [Cron jobs](/create-apps/app-reference/single-runtime-image.md#crons). +- [System logs](/increase-observability/logs/_index.md). UTC is the default timezone for all logs. To change the timezone for a project, follow these steps: diff --git a/sites/upsun/src/security/waf.md b/sites/upsun/src/security/waf.md index 324a821df1..d50c62722d 100644 --- a/sites/upsun/src/security/waf.md +++ b/sites/upsun/src/security/waf.md @@ -84,8 +84,8 @@ enforcing the valid format in transit. The WAF enforces a file upload limit. By default, this limit is set at 250 MB. -You can customize the file upload limit by amending your [app configuration](../../create-apps/_index.md). -In the [`web.locations` dictionary](../../create-apps/app-reference.md#locations), +You can customize the file upload limit by amending your [app configuration](/create-apps/_index.md). +In the [`web.locations` dictionary](/create-apps/app-reference/single-runtime-image.md#locations), add your desired value for the `max_request_size` property. ### File extension restriction @@ -93,8 +93,8 @@ add your desired value for the `max_request_size` property. The WAF enforces any file extension restriction you may have defined in your [app configuration](../../create-apps/_index.md). To set up a file extension restriction, -adjust the [`web.locations` dictionary](../../create-apps/app-reference.md#locations). -Set up [rules](../../create-apps/app-reference.md#rules) to allow only certain file extensions on a given path. +adjust the [`web.locations` dictionary](/create-apps/app-reference/single-runtime-image.md#locations). +Set up [rules](/create-apps/app-reference/single-runtime-image.md#rules) to allow only certain file extensions on a given path. ### Disallowed requests and headers diff --git a/themes/psh-docs/layouts/partials/beta-features/badge.html b/themes/psh-docs/layouts/partials/beta-features/badge.html new file mode 100644 index 0000000000..9d9c4cfa00 --- /dev/null +++ b/themes/psh-docs/layouts/partials/beta-features/badge.html @@ -0,0 +1 @@ +Beta \ No newline at end of file diff --git a/themes/psh-docs/layouts/partials/beta-features/banner.html b/themes/psh-docs/layouts/partials/beta-features/banner.html new file mode 100644 index 0000000000..881439b315 --- /dev/null +++ b/themes/psh-docs/layouts/partials/beta-features/banner.html @@ -0,0 +1,7 @@ +
+ +

{{ .title }}

+ +

{{ .content | .context.Page.RenderString }}

+ +
\ No newline at end of file diff --git a/themes/psh-docs/layouts/partials/note.html b/themes/psh-docs/layouts/partials/note.html index b4bb889c65..aec750b9eb 100644 --- a/themes/psh-docs/layouts/partials/note.html +++ b/themes/psh-docs/layouts/partials/note.html @@ -9,9 +9,11 @@ {{ $bg = "pink-light" }} {{ else if eq . "info" }} {{ $bg = "skye-light" }} + {{ else if eq . "info-sticky" }} + {{ $bg = "skye-light" }} {{ end }} {{ end }} -