diff --git a/.github/actions/redirection-verification/action.yaml b/.github/actions/redirection-verification/action.yaml index d1c73293db..a27e6cdf78 100644 --- a/.github/actions/redirection-verification/action.yaml +++ b/.github/actions/redirection-verification/action.yaml @@ -4,6 +4,10 @@ inputs: environment-url: description: 'Pull Request Environment URL' required: true + number_retries: + description: 'The number of attempts we should make to contact the target environment URL. 1 second delay between attempt.' + required: false + default: '100' #### #outputs: diff --git a/.github/actions/redirection-verification/index.js b/.github/actions/redirection-verification/index.js index 7a740801e7..e4d58c5b89 100644 --- a/.github/actions/redirection-verification/index.js +++ b/.github/actions/redirection-verification/index.js @@ -35,55 +35,89 @@ function linkify(path,url) { * @type {string} */ axios.defaults.baseURL = core.getInput('environment-url') +//axios.defaults.baseURL = 'https://httpstat.us/random/200,500-504,500-504,500-504' +const retries = Number(core.getInput('number_retries')) +//const retries = Number('100') +function sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} -try { - /** - * @todo Can we get the full workspace path to this file? - * @type {*} - */ - const yamlData = yaml.load(fs.readFileSync('./.platform/routes.yaml', 'utf8')); - /** - * @todo the key (docs.upsun.com) here should be a variable that is set somewhere else - * @type {Record | _.LodashAt | ((request: string) => (string[] | null)) | string[]} - */ - const anchors = yamlData['https://docs.upsun.com/'].redirects.paths - - const RedirectKeys = Object.keys(anchors).filter((path)=>{ +const verifyTargetResponse = async(count = 0) => { + try { + const axiosResponse = await axios.get('/'); + core.notice('Target URL finally responded with a 200. Proceeding.') + return axiosResponse; + } catch (error) { + if (error || error.status != 200) { + core.info(`At attempt ${count}, target url responded with status ${error.status}, retrying...`) + if (count++ < retries) { + await sleep(1000); + return verifyTargetResponse(count); + } else { + core.setFailed(`Max number of retries (${retries}) reached. Aborting.`) + }; + } else { + core.setFailed(`Action failed with error ${error}`) + }; + }; +}; + +const verify = async () => { + let targetReady = await verifyTargetResponse(); + core.info('Target URL ready. Beginning verification.') + try { /** - * @todo the piece we're using to identify our contracts (/anchors/) should be a variable + * @todo Can we get the full workspace path to this file? + * @type {*} */ - return path.startsWith('/anchors/') - }) - - const validateRedirects = RedirectKeys.map(async (path, index, array) => { - //console.log(`I'm going to test ${path} to see if it goes to ${anchors[path].to}`) - - try { - const response = await axios.head(path); - //core.info(`Response for our check of ${path} is ${response.status}`) - return response - } catch (reqerr) { - //core.warning(`issue encountered with path ${path}!!! Returned status is ${reqerr.status}`) - let row = [{data: linkify(path, axios.defaults.baseURL)},{data: linkify( anchors[path].to, axios.defaults.baseURL) }] - tableData.push(row) - } - }); - - - Promise.all(validateRedirects).then(() => { - if(tableData.length > 1) { - - core.error('There was an error with one or more redirects.') - - core.summary.addTable(tableData) - - core.summary.write() - core.setFailed('There was an error with one or more contracted redirects.') - } else { - core.notice('All contracted redirections are valid.') - } - }); - -} catch (error) { - core.setFailed(`Action failed with error ${error}`) + const yamlData = yaml.load(fs.readFileSync('./.platform/routes.yaml', 'utf8')); + /** + * @todo the key (docs.upsun.com) here should be a variable that is set somewhere else + * @type {Record | _.LodashAt | ((request: string) => (string[] | null)) | string[]} + */ + const anchors = yamlData['https://docs.upsun.com/'].redirects.paths + + const RedirectKeys = Object.keys(anchors).filter((path)=>{ + /** + * @todo the piece we're using to identify our contracts (/anchors/) should be a variable + */ + return path.startsWith('/anchors/') + }) + + const validateRedirects = RedirectKeys.map(async (path, index, array) => { + //console.log(`I'm going to test ${path} to see if it goes to ${anchors[path].to}`) + + try { + const response = await axios.head(path); + core.debug(`Response for our check of ${path} is ${response.status}`) + return response + } catch (reqerr) { + //core.warning(`issue encountered with path ${path}!!! Returned status is ${reqerr.status}`) + let row = [{data: linkify(path, axios.defaults.baseURL)},{data: linkify( anchors[path].to, axios.defaults.baseURL) }] + tableData.push(row) + } + }); + + + Promise.all(validateRedirects).then(() => { + if(tableData.length > 1) { + + core.error('There was an error with one or more redirects.') + + core.summary.addTable(tableData) + + core.summary.write() + core.setFailed('There was an error with one or more contracted redirects.') + } else { + core.notice('All contracted redirections are valid.') + } + }); + + } catch (error) { + core.setFailed(`Action failed with error ${error}`) + } } + +verify(); diff --git a/shared/data/php_extensions.yaml b/shared/data/php_extensions.yaml index 7936ae7fa5..32c937d816 100644 --- a/shared/data/php_extensions.yaml +++ b/shared/data/php_extensions.yaml @@ -1450,3 +1450,98 @@ grid: - zendopcache with-webp: - imagick + "8.4": + available: + - amqp + - apcu + # - blackfire + # - datadog + # - enchant + # - event + # - ffi + # - geoip + # - gmp + # - gnupg + # - http + - igbinary + - imap + # - ldap + # - mailparse + # - memcached + - mongodb + # - msgpack + # - mysql + # - newrelic + # - oauth + # - odbc + # - openswoole + # - opentelemetry + - pdo_dblib + - pdo_odbc + - pdo_pgsql + # - pdo_sqlsrv + - pgsql + # - protobuf + # - pspell + # - raphf + # - rdkafka + # - readline + - redis + - shmop + # - snmp + # - sodium + - sourceguardian + # - sqlsrv + # - ssh2 + # - swoole + # - sybase + # - tideways + # - tideways-xhprof + # - tidy + # - uuid + # - uv + # - xdebug + - xmlrpc + - xsl + # - yaml + default: + - bcmath + - bz2 + - calendar + - ctype + - curl + - dba + - dom + - exif + - fileinfo + - ftp + - gd + - gettext + - iconv + - intl + - mbstring + - mysqli + - mysqlnd + # - opcache + - pdo + - pdo_mysql + - pdo_sqlite + - phar + - posix + - simplexml + - soap + - sockets + - sqlite3 + - sysvmsg + - sysvsem + - sysvshm + - tokenizer + - xml + - xmlreader + - xmlwriter + - zip + built-in: + - json + - zendopcache + # with-webp: + # - imagick diff --git a/shared/data/registry.json b/shared/data/registry.json index 4ecf294796..2b344d49aa 100644 --- a/shared/data/registry.json +++ b/shared/data/registry.json @@ -86,7 +86,8 @@ ], "supported": [ "7.0", - "6.0" + "6.0", + "8.0" ], "legacy": [ "3.1", @@ -838,6 +839,7 @@ "5.4" ], "supported": [ + "8.4", "8.3", "8.2", "8.1" diff --git a/sites/platform/.yaml b/sites/platform/.yaml index f9cb4d7357..9d7ebc340c 100644 --- a/sites/platform/.yaml +++ b/sites/platform/.yaml @@ -73,6 +73,7 @@ dotnet: supported: - '7.0' - '6.0' + - '8.0' legacy: - '3.1' - '2.2' @@ -674,6 +675,7 @@ php: - '5.5' - '5.4' supported: + - '8.4' - '8.3' - '8.2' - '8.1' diff --git a/sites/platform/src/administration/cli/_index.md b/sites/platform/src/administration/cli/_index.md index 5fe470f379..a0763ea3de 100644 --- a/sites/platform/src/administration/cli/_index.md +++ b/sites/platform/src/administration/cli/_index.md @@ -164,9 +164,7 @@ The code is only merged between environments remotely. ### Customize the CLI -You can customize how the CLI operates and what it returns with a configuration file (`~/{{% vendor/configdir %}}/config.yaml`) -or environment variables. -For details, see the [customization instructions on GitHub](https://github.com/platformsh/legacy-cli#user-content-customization). +You can customize how the CLI operates and what it returns with a configuration file (`~/.platformsh/config.yaml`) or environment variables. For details, see the [customization instructions on GitHub](https://github.com/platformsh/legacy-cli#user-content-customization). #### Automate repetitive tasks diff --git a/sites/platform/src/dedicated-environments/dedicated-gen-2/development.md b/sites/platform/src/dedicated-environments/dedicated-gen-2/development.md index 4250f03d96..c4e692e14e 100644 --- a/sites/platform/src/dedicated-environments/dedicated-gen-2/development.md +++ b/sites/platform/src/dedicated-environments/dedicated-gen-2/development.md @@ -16,13 +16,13 @@ Each instance hosts the entire application stack, allowing this architecture sup ##### Build process -The build process for your application is identical for both the Grid Environment and the Dedicated Gen 2 cluster. However, because the hosts are provisioned by Platform.sh, not as a container, service configuration must be done by Platform.sh’s Customer Success team. The flexibility for DG2 and Grid can be made to be the same but only via opening a [support ticket](/learn/overview/get-support.md). +The build process for your application is identical for both the Grid Environment and the Dedicated Gen 2 cluster. However, because the hosts are provisioned by Platform.sh, not as a container, service configuration must be done by Platform.sh’s Customer Success team. For more information, learn about [default storage settings](#storage) and how your app can [connect to services](dedicated-environments/dedicated-gen-3/overview.md#available-services). ### Split architecture -Split architecture works under Dedicated Generation 2 and allows to give more resources globally to a project. Services (data services, caching service or search engines) are split from application runtimes. Services will be running on a cluster of core nodes, and the application will be running on a cluster of web nodes. +Split architecture works under Dedicated Generation 2 and allows you to give more resources globally to a project. Services (data services, caching service or search engines) are split from application runtimes. Services will be running on a cluster of core nodes, and the application will be running on a cluster of web nodes. This allows us to grant more room for the application or the services regarding resources. Both clusters can differ in size. Split architecture clusters can horizontally scale the application by adding additional nodes.  @@ -36,7 +36,7 @@ Any defined users or environment variables are also propagated to the Dedicated {{< note title="Note" theme="info" >}} -There is no automatic cloning of data from the Dedicated Gen 2 cluster to the development environment the way there is between branches in the development environment. +There is no automatic cloning of data from the Dedicated Gen 2 cluster to the development environments like there is between the grid-based development branches. {{< /note >}}  @@ -48,7 +48,7 @@ When deploying to the Dedicated Gen 2 cluster the process is slightly different - The new application image is built in the exact same fashion as for the Grid. - Any active background tasks on the cluster, including cron tasks, are terminated. -- The cluster (production or staging) is closed, meaning it doesn’t accept new requests. Incoming requests receive an HTTP 500 error. +- The cluster (production or staging) is closed, meaning it doesn’t accept new requests. Incoming requests receive an HTTP 503 response. - The application image on all three servers is replaced with the new image. - The deploy hook is run on one, and only one, of the three servers. - The cluster is opened to allow new requests. @@ -75,4 +75,4 @@ While your DG2 production and staging Environments are on dedicated virtual mach ### Memory -Dedicated Generation 2 includes a single node dedicated staging with 2 CPUs. This runs the same software configuration as the production cluster but only on a single node. This is usually enough for functional testing before moving to production. You can choose to upgrade your staging to a more powerful machine or add more than one dedicated staging system. Those will still be a single machine. \ No newline at end of file +Dedicated Generation 2 includes a single node dedicated staging with 2 CPUs. This runs the same software configuration as the production cluster but only on a single node. This is usually enough for functional testing before moving to production. You can choose to upgrade your staging to a more powerful machine or add more than one dedicated staging system. Those will still be a single machine. diff --git a/sites/platform/src/dedicated-environments/dedicated-gen-2/environment-differences.md b/sites/platform/src/dedicated-environments/dedicated-gen-2/environment-differences.md index d08ad66bd3..e478c3bc2e 100644 --- a/sites/platform/src/dedicated-environments/dedicated-gen-2/environment-differences.md +++ b/sites/platform/src/dedicated-environments/dedicated-gen-2/environment-differences.md @@ -12,7 +12,7 @@ This is not the case with [{{% names/dedicated-gen-3 %}}](/dedicated-environment ## Syncing data between environments Because of the differences between {{% names/dedicated-gen-2 %}} and Grid Environments, -basic [syncs](/glossary.md#sync) and [merges](/glossary.md#merge) aren't available between development environments and production or staging environments. So you don't see working buttons with those options in the Console. +data [syncs](/glossary.md#sync) aren't available between development environments and production or staging environments. So you don't see working buttons with those options in the Console. However, code [syncs](/glossary.md#sync) and [merges](/glossary.md#merge) are available when the code is different between a parent and child environment. To transfer data between environments, backup your Production/Staging data and then synchronize Development data. See how to [back up and transfer data](../../development/transfer-dedicated.md#synchronize-files-from-development-to-stagingproduction). @@ -106,7 +106,6 @@ The following settings require a [support ticket](/learn/overview/get-support): * 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/single-runtime-image.md#locations)) ## Logs diff --git a/sites/platform/src/dedicated-environments/dedicated-gen-2/overview.md b/sites/platform/src/dedicated-environments/dedicated-gen-2/overview.md index efa7db789d..f836c467cb 100644 --- a/sites/platform/src/dedicated-environments/dedicated-gen-2/overview.md +++ b/sites/platform/src/dedicated-environments/dedicated-gen-2/overview.md @@ -28,19 +28,18 @@ Much of the tooling used on Grid is used for DG2, but there are still some diffe | **PHP version upgrade** | Self-service via YAML config files | Self-service via YAML config files | | **Node.js version upgrade** | Self-service via YAML config files | Self-service via YAML config files | | **Cron management** | Self-service via YAML config files | Self-service via YAML config files | -|**Web server internal config : locations** | Self-service via YAML config files | Self-service via YAML config files | +| **Web server internal config : locations** | Self-service via YAML config files | Self-service via YAML config files | | **CDN** | Fastly | A managed Fastly CDN service can be purchased through Platform.sh | | **Dedicated IP** | Yes | No | | **Configuration management** | Split responsibility between Platform.sh and customer | only YAML files | -| **Usable regions** | Any region needed | Only the publicly available | +| **Usable regions** | Any region needed | Only publicly available | | **Autonomous upsize** | Managed through Platform.sh| Yes | | **Autoscaling** | Yes | No | | **Upsize or Downsize methods** | No downtime - each instance is altered in a rolling fashion | Redeploy - possible downtime depending on the hooks | -| **Production branch** | Managed by Platform.sh | Self-service | -| **Multi availability zones ** | Yes | No | +| **Multi availability zones** | Yes | No | | **New Relic** | APM + New Relic infrastructure | APM Supported only | -| **Multi-app support** | Supported through docroots | Supported natively. | -| **Routes management** | Managed by Platform.sh | Self-service | +| **Multi-app support** | Supported through docroots | Supported natively | +| **Routes management** | Self-service | Self-service | | **Environment clone** | Only on development environments | Yes on all branches | | **Services : Add, remove, upgrade** | Managed by Platform.sh | Self-service | | **Relationships : Add, remove, update** | Managed by Platform.sh | Self-service | @@ -61,7 +60,7 @@ Much of the tooling used on Grid is used for DG2, but there are still some diffe | **Storage** | Local disks are accessed either locally or via glusterfs | 100 GB self service max (can be extended upon request) | | **Automated backup** | Yes | Yes | | **Custom domains name** | On all branches for [Enterprise or Elite](https://platform.sh/pricing/) customers | On all branches for [Enterprise or Elite](https://platform.sh/pricing/) customers | -| **MongoDB** | Not supported | Standalone service container | +| **MongoDB** | Yes | Standalone service container | ### Dedicated Gen 2 vs Dedicated Gen 3 @@ -83,7 +82,7 @@ For more information, see how to [configure multiple apps in a single project]( A dedicated single-node staging machine is provisioned for your application with an identical software configuration to your production hardware, but reduced hardware specs. This gives the advantages of isolating the staging load from the production hardware as well as having an identical software configuration to perform UAT, but this option doesn’t provide a bed for performance testing as the physical hardware configuration isn’t the same as production. -#### Additional application servers  +#### Additional application servers (Split Architecture) For especially high-traffic sites we can also add additional application-only servers. These servers contain just the application code; data storage services (such as SQL, Solr, Redis) are limited to the standard three. The cluster begins to look more like a standard N-Tier architecture at this point, with a horizontal line of web application servers in front of a 3 node (N+1) cluster of Galera database servers. @@ -103,7 +102,7 @@ On Grid projects, incoming requests are held at the edge router temporarily duri On Dedicated Gen 2 projects, incoming requests aren’t held during deploy and receive a 503 error. As the Dedicated Gen 2 cluster is almost always fronted by a CDN, the CDN continues to serve cached pages during the few seconds of deploy, so for the vast majority of users there is no downtime or even slow down. If a request does pass the CDN during a deploy, it isn’t counted as downtime covered by our Service Level Agreement. -By default, Platform.sh serves generic Platform.sh-branded error pages for errors generated before a request reaches the application. (500 errors, some 400 errors, etc.) Alternatively you may provide a static error page for each desired error code via a ticket for us to configure with the CDN. This file may be any static HTML file but is limited to 64 KB in size. +By default, Platform.sh serves generic Platform.sh-branded error pages for errors generated before a request reaches the application. (5XX errors, some 4XX errors, etc.) Alternatively you may provide a static error page for each desired error code via a ticket for us to configure with the CDN. This file may be any static HTML file but is limited to 64 KB in size. #### Remote logging  diff --git a/sites/platform/src/dedicated-environments/dedicated-gen-3/development.md b/sites/platform/src/dedicated-environments/dedicated-gen-3/development.md index e738d677a5..8b121645a2 100644 --- a/sites/platform/src/dedicated-environments/dedicated-gen-3/development.md +++ b/sites/platform/src/dedicated-environments/dedicated-gen-3/development.md @@ -34,7 +34,9 @@ In the diagram, there are only 3 hosts. Host 1 has both the entry point and app ## Deployment -On Grid, all project branches are deployed into that same Grid region. On DG3, this behaves the same but the projects deployed are Highly Available (HA), and branches set as default and (optionally) labelled staging are deployed into their own dedicated clusters instead. +On Grid, all project branches are deployed into that same Grid region. On DG3, this behaves the same but the projects deployed are Highly Available (HA), and branches set as default and (optionally) labelled staging are deployed into their own dedicated clusters instead. + +While HA environments connected to a DG3 cluster **can** deploy multiple instances of applications and services, they **cannot** dynamically change the number of those instances (for example, from 1 to 3 or 3 to 1). {{< note title="Note" theme="info" >}} @@ -42,6 +44,7 @@ Existing non-HA projects cannot be converted to HA projects and vice-versa. HA p {{< /note >}} + ## Providers and regions Unlike Grid, you can deploy into [any region](/development/regions.md#regions) of supported IaaS providers with a Dedicated Generation 3 environment. Currently, these providers are listed below: @@ -55,4 +58,4 @@ For more details on specific regions, consult the region [documentation](/develo ## Storage -Each Dedicated Gen 3 cluster comes with 50GB of storage per environment by default. This storage is intended for your data (databases, search indexes, user uploaded files, etc.) and you can subdivide it as you want. You can request more storage at any time. \ No newline at end of file +Each Dedicated Gen 3 cluster comes with 50GB of storage per environment by default. This storage is intended for your data (databases, search indexes, user uploaded files, etc.) and you can subdivide it as you want. Additional storage can be purchased and added to your cluster at any time. diff --git a/sites/platform/src/dedicated-environments/dedicated-gen-3/overview.md b/sites/platform/src/dedicated-environments/dedicated-gen-3/overview.md index 27aab11bc0..1f9cd30f4d 100644 --- a/sites/platform/src/dedicated-environments/dedicated-gen-3/overview.md +++ b/sites/platform/src/dedicated-environments/dedicated-gen-3/overview.md @@ -12,7 +12,7 @@ description: "Designed to cater to the needs of organizations that build demand - **High Availability:** 99.99% SLA (service-level agreement) with [Enterprise or Elite](https://platform.sh/pricing/) - **Dedicated hosts:** Each DG3 cluster is provisioned with 3 dedicated hosts as the typical configuration - **Headless architecture:** Seamless headless architecture with multi-app support -- **Self-service:** Customers may edit their application and service YAML files and push changes. Customers can also take advantage of MariaDB Galera multi-leader, disk resizing and adding, upgrading or removing services on their own +- **Self-service:** Customers may edit their application and service YAML files and push changes. Customers can also take advantage of MariaDB Galera multi-leader and adding, upgrading or removing services on their own - **Data sync from Dedicated to Grid:** Customers can initiate data syncs themselves via Console (restore a Grid HA backup on DG3 and restore a DG3 backup on a Grid HA environment) - **Better containerization:** DG3 is containerized and decouples the base operating system (OS) version and [control plane](/glossary.md#control-plane) from the service versions, so the OS and services can be upgraded independently - **Better staging:** Dedicated Gen 3 comes with HA staging as default. This allows the data sync between Dedicated and Grid to be simpler, consistent and seamless @@ -36,14 +36,14 @@ Much of the tooling used on Grid is used for DG3, but there are still some diffe | **Web server internal config : locations** | Self-service via YAML config files | Self-service via YAML config files | | **CDN** | Fastly | A managed Fastly CDN service can be purchased through Platform.sh | | **Dedicated IP** | Yes | No | -| **Configuration management** | Split responsibility between Platform.sh and customer | only through YAML files | +| **Configuration management** | Self-service via YAML config files | Self-service via YAML config files | | **Usable regions** | Any region needed | Only the publicly available | | **Autonomous upsize** | Managed through Platform.sh | Yes | | **Upsize or downsize methods** | No downtime - each instance is altered in a rolling fashion | Redeploy - possible downtime depending on the hooks | -| **Production branch** | Managed by Platform.sh| Self-service | +| **Production branch** | Self-service | Self-service | | **Autoscaling** | Yes | No | | **Multi availability zones** | Yes | No | -| **New Relic** | Not supported | APM Supported only | +| **New Relic** | APM + New Relic Infrastructure | APM Supported only | | **Multi-app support** | Supported natively | Supported natively | | **Routes management** | Self-service via YAML config files | Self-service via YAML config files | | **Environment clone** | Yes on all branches | Yes on all branches | @@ -82,7 +82,6 @@ Your app can connect to each service by referencing the exact same [environment | **PostgreSQL** | 16, 15, 14, 13, 12 | | **RabbitMQ** | 3.13, 3.12 | | **Redis** | 7.2, 7.0, 6.2 | -| **Ruby** | 3.3, 3.2, 3.1, 3.0 | | **Solr** | 9.6, 9.4, 9.2, 9.1, 8.11 | | **Vault KMS** | 1.12 | @@ -90,11 +89,11 @@ See the [services documentation](/add-services/_index.md) for service-specific #### Local mounts  -Dedicated Gen 3 provides a redundant infrastructure and local mounts aren’t shared between the three hosts. If you need a folder to be shared between your hosts, set up a [network storage mount](/add-services/network-storage.md). +Dedicated Gen 3 provides a redundant infrastructure and local mounts aren’t shared between the three hosts. If you need a folder to be shared between your hosts, such as for common assets, set up a [network storage mount](/add-services/network-storage.md). ### Dedicated Gen 3 vs Dedicated Gen 2 -Just like Dedicated Gen 3, [Dedicated Gen 2](/dedicated-environments/dedicated-gen-2/_index.md) ensures increased uptime and availability for your apps and services. But as a Dedicated Gen 2 user, you have to go through the Platform.sh Customer Success team to make configuration or application topology changes. +Just like [Dedicated Gen 2](/dedicated-environments/dedicated-gen-2/_index.md), Dedicated Gen 3 ensures increased uptime and availability for your apps and services. But as a Dedicated Gen 2 user, you have to go through the Platform.sh Customer Success team to make configuration or application topology changes. Dedicated Gen 3 gives you both the high availability of Dedicated Gen 2 and the self-service flexibility and features of Grid projects. As a Dedicated Gen 3 user, you can edit your configuration yourself and see those changes reflected in your environments on every push without opening a ticket. See the table below for more differences and similarities between Dedicated Den 3 and Dedicated Gen 2: @@ -127,12 +126,12 @@ Dedicated Gen 3 gives you both the high availability of Dedicated Gen 2 and the | **Resources allocation** | Resources deployed on the 3 nodes | Resources deployed on the 3 nodes | | **MySQL Replication** | Yes: 3 services nodes cluster | Yes: 3 services nodes cluster | | **Redis Replication** | Yes: 3 services nodes cluster | Yes: 3 services nodes cluster | -| **Split Architecture** | Yes | No | +| **Split Architecture** | Yes | Yes | | **VPN** | AWS PrivateLink | AWS PrivateLink | | **Automated backup** | Yes | Yes | | **Elasticsearch premium** | Yes | Yes | | **SFTP password access** | Yes | Yes | -| **Custom domains name** | On all branches for [Enterprise or Elite](https://platform.sh/pricing/) customers | On all branches for [Enterprise or Elite](https://platform.sh/pricing/) customers | +| **Custom domains name** | Available only on Dedicated Environments for [Enterprise or Elite](https://platform.sh/pricing/) customers | On all branches for [Enterprise or Elite](https://platform.sh/pricing/) customers | | **On-demand backup** | Not supported | Same as grid | #### Optional features @@ -159,7 +158,7 @@ In addition to SSH accounts, you can create SFTP accounts with a custom user/pas {{< note title="Note" theme="info" >}} -On Dedicated Gen 3 projects, SFTP access cannot be limited to a specific directory. Instead, access is given to the whole application directory and its mounts. SSH public key based authentication is also supported on the SFTP account. +On Dedicated Gen 3 projects, SFTP access cannot be limited to a specific directory. Instead, access is given to the whole application directory and its mounts. However, write access is restricted to the mounts declared in your YAML config files. SSH public key based authentication is also supported on the SFTP account. {{< /note >}} diff --git a/sites/platform/src/dedicated-environments/overview.md b/sites/platform/src/dedicated-environments/overview.md index c14e45f87c..d14588a8c9 100644 --- a/sites/platform/src/dedicated-environments/overview.md +++ b/sites/platform/src/dedicated-environments/overview.md @@ -41,29 +41,29 @@ Whether you choose a Grid or Dedicated Environment depends on the needs you have | **Availability** | All support tiers | Just with [Enterprise or Elite](https://platform.sh/pricing/) | | **Uptime SLA** | 99.9% with [Enterprise or Elite](https://platform.sh/pricing/)| 99.99% with [Enterprise or Elite](https://platform.sh/pricing/) | | **Infrastructure** | Containers with dedicated resources on top of a shared redundant infrastructure| Dedicated 3 node clusters| -| **Functioning** | A single container is deployed per runtime and per service| at least 3 nodes are running all applications and services are replicated across all of them | +| **Functioning** | A single container is deployed per runtime and per service| At least 3 nodes are running all applications and services are replicated across all of them | | **Resource Allocation** | Resources are spread through one container with fixed sizes after deployment| Resources are deployed across a least 3 nodes | **Usable regions** | Any public region can be used to deploy | Any public region of supported IaaS providers can be used to deploy | | **Autonomous upsize** | Yes | Managed through Platform.sh | | **Upsize and downsize methods** | Redeploy - possible downtime depending on the hooks | No downtime - each instance is altered in a rolling fashion | | **Multi-app support** | Supported natively | Supported through docroots on Dedicated Gen 2 and supported natively on Dedicated Gen 3 | | **Custom domains name** | On all branches for Enterprise and Elite customers | On all branches for Enterprise and Elite customers | -| **Sync and merge functionalities** | Yes on all branches | Only on development environments | -| **Environment clone** | Yes on all branches | Only on development environments | +| **Sync and merge functionalities** | Yes on all branches | Only on development environments on Dedicated Gen 2 and on all branches on Dedicated Gen3| +| **Environment clone** | Yes on all branches | Only on development environments on Dedicated Gen 2 and on all branches on Dedicated Gen3| | **MySQL Replication** | None: standalone service container | Yes: at least 3 services nodes cluster that follow the leader-follower principle| | **Redis Replication** | None: standalone service container | Yes: at least 3 services nodes cluster | -| **MongoDB** | Standalone service container | No | +| **MongoDB** | Standalone service container | Yes | | **CDN** | A managed Fastly CDN service can be purchased through Platform.sh | Fastly | | **PHP version upgrade** | Self-service | Self-service | | **NodeJS version upgrade**| Self-service | Self-service | | **Routes management** | Self-service | Self-service | | **Cron management** | Self-service | Self-service | | **Cron tasks interrupted by deploys** | No: a running Cron task will block a deployment until it is complete | Yes: a deploy will terminate a running Cron task | -| **Mounts management** | Self-service | Managed by Platform.sh (Dedicated Gen 2 only) | +| **Mounts management** | Self-service | Self-service | | **Workers management** | Self-service | Managed by Platform.sh | | **Storage increase** | Self-service | Managed by Platform.sh | -| **Storage allocation between mounts, DB and services** | Self-service | Managed by Platform.sh | +| **Storage allocation between mounts, DB and services** | Self-service | Managed by Platform.sh on Dedicated Gen 2, Self-service on Dedicated Gen 3| -For more information about our Dedicated offerings, explore our [Dedicated Gen 2](/dedicated-environments/dedicated-gen-2/_index.md) and [Dedicated Gen 3](/dedicated-environments/dedicated-gen-3/_index.md) pages. \ No newline at end of file +For more information about our Dedicated offerings, explore our [Dedicated Gen 2](/dedicated-environments/dedicated-gen-2/_index.md) and [Dedicated Gen 3](/dedicated-environments/dedicated-gen-3/_index.md) pages. diff --git a/sites/platform/src/environments/scalability.md b/sites/platform/src/environments/scalability.md index a683a4f433..0d0ab8003d 100644 --- a/sites/platform/src/environments/scalability.md +++ b/sites/platform/src/environments/scalability.md @@ -18,7 +18,7 @@ On higher tiers with the Observability Suite, everything is taken care of automatically. When your site starts experiencing pressure, it gets the resources needed to handle that pressure. -On lower tiers, you have to handle that yourself, often after your site has gone down. +On self-service tiers, you have to handle that yourself, often after your site has gone down. If you know a spike in traffic is likely coming, scale your plan up in advance to handle the event and downscale after it. @@ -53,8 +53,8 @@ There are two classes of measurement that trigger an autoscaling event: {{< premium-features/tiered "Enterprise and Elite" >}} If your plan includes managed scaling, -{{% vendor/name %}} proactively monitors your apps to make sure they don't have errors from overuse. -If the monitoring determines a load is causing issues for your site, +{{% vendor/name %}} monitors your application to make ensure it doesn't fail due to a lack of resources. +If the monitoring determines that a lack of resources is causing issues for your site, a support ticket is opened. The {{% vendor/name %}} team determines whether upscaling is necessary or can be avoided by, for example, blocking a malicious bot. @@ -63,7 +63,9 @@ If upscaling is necessary, it's handled for you and you're kept up to date in th When the traffic spike passes, your plan is downgraded again to use only the necessary resources. On Dedicated environments, the upscaling is handled by cycling through each node in the redundant architecture. -One at a time, they're removed from the cluster, upsized, and returned. +One at a time, they're removed from the cluster, upsized, and returned. + +On Split Architecture dedicated environments, additional web servers may be added to provide additional capacity (Horizontal scaling). ## Manually scale Grid environments diff --git a/sites/platform/src/increase-observability/metrics/grid.md b/sites/platform/src/increase-observability/metrics/grid.md index f43978600e..f102780d28 100644 --- a/sites/platform/src/increase-observability/metrics/grid.md +++ b/sites/platform/src/increase-observability/metrics/grid.md @@ -11,11 +11,9 @@ Grid environments consist of: * 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. -These metrics are available for all of your Grid environments. +and CPU and disk space for service containers. These metrics are available for all of your Grid environments. -You can see summaries of the metrics for each container separately in the Console under **Services** for a given environment. -The full details are available under **Metrics**. +You can see summaries of the metrics for each container separately in the Console under **Services** for a given environment. The full details are available under **Metrics**. App containers are shown first, with the app name and an image corresponding to the app type. Service containers follow next with the same pattern and worker containers are shown last. diff --git a/sites/platform/src/languages/php/extensions.md b/sites/platform/src/languages/php/extensions.md index b6e9288e83..96ef29c771 100644 --- a/sites/platform/src/languages/php/extensions.md +++ b/sites/platform/src/languages/php/extensions.md @@ -11,9 +11,8 @@ Some of them are available for {{% vendor/name %}} containers. {{< 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-environments/dedicated-gen-2/development.md). +See also [PHP extensions on {{% names/dedicated-gen-2 %}} plans](/dedicated-environments/dedicated-gen-2/environment-differences.md#extensions). {{< /note >}} diff --git a/sites/upsun/.yaml b/sites/upsun/.yaml new file mode 100644 index 0000000000..9d7ebc340c --- /dev/null +++ b/sites/upsun/.yaml @@ -0,0 +1,1105 @@ +chrome-headless: + description: '' + disk: false + docs: + relationship_name: chrome-headless + service_name: chrome-headless + url: /add-services/headless-chrome.html + endpoint: http + min_disk_size: null + name: Headless Chrome + repo_name: chrome-headless + runtime: false + type: chrome-headless + versions: + deprecated: [] + supported: + - '120' + - '113' + - '95' + - '91' + - '86' + - '84' + - '83' + - '81' + - '80' + - '73' + legacy: + - '86' + - '84' + - '83' + - '81' + - '80' + - '73' + versions-dedicated-gen-3: + deprecated: [] + supported: + - '95' +dotnet: + description: ASP.NET 5 application container. + repo_name: dotnet + disk: false + docs: + relationship_name: null + service_name: null + url: /languages/dotnet.html + web: + commands: + start: dotnet application.dll + locations: + /: + root: wwwroot + allow: true + passthru: true + hooks: + build: + - '|' + - set -e + - >- + dotnet publish --output "$PLATFORM_OUTPUT_DIR" + -p:UseRazorBuildServer=false -p:UseSharedCompilation=false + endpoint: null + min_disk_size: null + name: C#/.Net Core + runtime: true + type: dotnet + versions: + deprecated: + - '5.0' + - '3.1' + - '2.2' + - '2.1' + - '2.0' + supported: + - '7.0' + - '6.0' + - '8.0' + legacy: + - '3.1' + - '2.2' + - '2.1' + - '2.0' +elasticsearch: + description: A manufacture service for Elasticsearch + disk: true + docs: + relationship_name: elasticsearch + service_name: elasticsearch + url: /add-services/elasticsearch.html + endpoint: elasticsearch + min_disk_size: 256 + name: Elasticsearch + repo_name: elasticsearch + runtime: false + type: elasticsearch + versions: + deprecated: + - '7.10' + - '7.9' + - '7.7' + - '7.5' + - '7.2' + - '6.8' + - '6.5' + - '5.4' + - '5.2' + - '2.4' + - '1.7' + - '1.4' + supported: + - '8.5' + - '7.17' + versions-dedicated-gen-2: + supported: + - '8.5' + - '7.17' + deprecated: + - '7.10' + - '7.9' + - '7.7' + - '7.6' + - '7.5' + - '7.2' + - '6.8' + - '6.5' + - '5.6' + - '5.2' + - '2.4' + - '1.7' + versions-dedicated-gen-3: + deprecated: + - '7.10' + - '7.9' + - '7.7' + - '7.5' + - '7.2' + - '6.8' + - '6.5' + supported: [] +elixir: + description: '' + repo_name: elixir + disk: false + docs: + relationship_name: null + service_name: null + url: /languages/elixir.html + web: + commands: + start: mix run --no-halt + locations: + /: + allow: false + root: web + passthru: true + hooks: + build: + - '|' + - mix local.hex --force + - mix local.rebar --force + - mix do deps.get --only prod, deps.compile, compile + endpoint: null + min_disk_size: null + name: Elixir + runtime: true + type: elixir + versions: + deprecated: + - '1.13' + - '1.12' + - '1.11' + - '1.10' + - '1.9' + supported: + - '1.15' + - '1.14' + legacy: + - '1.10' + - '1.9' +golang: + description: '' + disk: false + docs: + relationship_name: null + service_name: null + url: /languages/go.html + web: + upstream: + socket_family: tcp + protocol: http + commands: + start: ./bin/app + locations: + /: + allow: false + passthru: true + hooks: + build: + - go build -o bin/app + endpoint: null + min_disk_size: null + name: Go + repo_name: golang + runtime: true + type: golang + versions: + deprecated: + - '1.19' + - '1.18' + - '1.17' + - '1.16' + - '1.15' + - '1.14' + - '1.13' + - '1.12' + - '1.11' + - '1.10' + - '1.9' + - '1.8' + supported: + - '1.23' + - '1.22' + - '1.21' + - '1.20' +influxdb: + description: '' + disk: true + docs: + relationship_name: influxdb + service_name: influxdb + url: /add-services/influxdb.html + endpoint: influxdb + min_disk_size: null + name: InfluxDB + repo_name: influxdb + runtime: false + type: influxdb + versions: + deprecated: + - '2.2' + - '1.8' + - '1.7' + - '1.3' + - '1.2' + supported: + - '2.7' + - '2.3' +java: + description: '' + docs: + relationship_name: null + service_name: null + url: /languages/java.html + web: + commands: + start: java -jar target/application.jar --server.port=$PORT + hooks: + build: + - mvn clean install + endpoint: null + min_disk_size: null + name: Java + repo_name: java + runtime: true + type: java + versions: + deprecated: + - '14' + - '13' + - '12' + supported: + - '21' + - '19' + - '18' + - '17' + - '11' + - '8' + versions-dedicated-gen-2: + supported: + - '17' + - '11' + - '8' + deprecated: + - '15' + - '13' + - '7' +kafka: + description: '' + disk: true + docs: + relationship_name: kafka + service_name: kafka + url: /add-services/kafka.html + endpoint: kafka + min_disk_size: 512 + name: Kafka + repo_name: kafka + runtime: false + type: kafka + versions: + deprecated: + - '2.7' + - '2.6' + - '2.5' + - '2.4' + - '2.3' + - '2.2' + - '2.1' + supported: + - '3.7' + - '3.6' + - '3.4' + - '3.2' + legacy: + - '2.6' + - '2.5' + - '2.4' + - '2.3' + - '2.2' + - '2.1' +lisp: + description: '' + id: 1102 + repo_name: lisp + disk: false + docs: + relationship_name: null + service_name: null + url: /languages/lisp.html + web: + commands: + start: ./example + locations: + /: + allow: false + passthru: true + endpoint: null + min_disk_size: null + name: Lisp + runtime: true + type: lisp + versions: + deprecated: [] + supported: + - '2.1' + - '2.0' + - '1.5' +mariadb: + description: A manufacture-based container for MariaDB + repo_name: mariadb + disk: true + docs: + relationship_name: mariadb + service_name: mariadb + url: /add-services/mysql.html + endpoint: mysql + min_disk_size: 256 + name: MariaDB/MySQL + runtime: false + type: mariadb + versions: + deprecated: + - '10.2' + - '10.1' + - '10.3' + - '10.0' + - '5.5' + supported: + - '11.4' + - '11.2' + - '11.0' + - '10.11' + - '10.6' + - '10.5' + - '10.4' + versions-dedicated-gen-2: + supported: + - 10.11 Galera + - 10.8 Galera + - 10.7 Galera + - 10.6 Galera + - 10.5 Galera + - 10.4 Galera + - 10.3 Galera + deprecated: + - 10.2 Galera + - 10.1 Galera + - 10.0 Galera + versions-dedicated-gen-3: + supported: + - 10.11 Galera + - 10.6 Galera + - 10.5 Galera + - 10.4 Galera + - 10.3 Galera + deprecated: + - 10.2 Galera + - 10.1 Galera +mysql: + description: A manufacture-based container for MariaDB + repo_name: mariadb + disk: true + docs: + relationship_name: mysql + service_name: mysql + url: /add-services/mysql.html + endpoint: mysql + min_disk_size: 256 + name: MariaDB/MySQL + runtime: false + type: mysql + versions: + deprecated: + - '10.2' + - '10.1' + - '10.0' + - '5.5' + supported: + - '11.0' + - '10.11' + - '10.6' + - '10.5' + - '10.4' + - '10.3' + versions-dedicated-gen-2: + supported: + - 10.5 Galera + - 10.4 Galera + - 10.3 Galera + deprecated: + - 10.2 Galera + - 10.1 Galera + - 10.0 Galera + versions-dedicated-gen-3: + supported: + - 10.11 Galera + - 10.6 Galera + - 10.5 Galera + - 10.4 Galera + - 10.3 Galera + deprecated: + - 10.2 Galera + - 10.1 Galera +memcached: + description: Memcached service. + repo_name: memcached + disk: false + docs: + relationship_name: memcached + service_name: memcached + url: /add-services/memcached.html + endpoint: memcached + min_disk_size: null + name: Memcached + runtime: false + type: memcached + versions: + deprecated: [] + supported: + - '1.6' + - '1.5' + - '1.4' + versions-dedicated-gen-2: + supported: + - 1.4* +mongodb: + description: Experimental MongoDB support on Platform.sh + repo_name: mongodb + disk: true + docs: + relationship_name: mongodb + service_name: mongodb + url: /add-services/mongodb.html + endpoint: mongodb + min_disk_size: 512 + name: MongoDB + runtime: false + type: mongodb + versions: + deprecated: + - 4.0.3 + - '3.6' + - '3.4' + - '3.2' + - '3.0' + supported: [] +mongodb-enterprise: + description: Support for the enterprise edition of MongoDB + repo_name: mongodb + disk: true + docs: + relationship_name: mongodb-enterprise + service_name: mongodb-enterprise + url: /add-services/mongodb.html + endpoint: mongodb + min_disk_size: 512 + name: MongoDB + runtime: false + type: mongodb-enterprise + premium: true + versions: + supported: + - '7.0' + - '6.0' + - '5.0' + - '4.4' + deprecated: + - '4.2' + - '4.0' + versions-dedicated-gen-2: + supported: + - '6.0' + - '5.0' + - '4.4' + deprecated: + - '4.2' + - '4.0' +network-storage: + description: '' + repo_name: network-storage + disk: true + docs: + relationship_name: 'null' + service_name: network-storage + url: /add-services/network-storage.html + endpoint: something + min_disk_size: null + name: Network Storage + runtime: false + type: network-storage + versions: + deprecated: + - '1.0' + supported: + - '2.0' + versions-dedicated-gen-3: + deprecated: [] + supported: + - '2.0' +nodejs: + description: NodeJS service for Platform + repo_name: nodejs + disk: false + docs: + relationship_name: null + service_name: null + url: /languages/nodejs.html + web: + commands: + start: node index.js + endpoint: null + min_disk_size: null + name: JavaScript/Node.js + runtime: true + type: nodejs + versions: + deprecated: + - '14' + - '12' + - '10' + - '8' + - '6' + - '4.8' + - '4.7' + - '0.12' + supported: + - '22' + - '20' + - '18' + - '16' + versions-dedicated-gen-2: + supported: [] + deprecated: + - '14' + - '12' + - '10' + - '9.8' +opensearch: + description: A manufacture service for OpenSearch + disk: true + docs: + relationship_name: opensearch + service_name: opensearch + url: /add-services/opensearch.html + endpoint: opensearch + min_disk_size: 256 + name: OpenSearch + repo_name: opensearch + runtime: false + type: opensearch + versions: + deprecated: + - '1.2' + - '1.1' + supported: + - '2' + - '1' + legacy: + - '1.1' + versions-dedicated-gen-2: + deprecated: [] + supported: + - '2.5' + - '1.2' + versions-dedicated-gen-3: + deprecated: [] + supported: + - '2' +oracle-mysql: + description: >- + Images using MySQL from Oracle instead of MariaDB still providing mysql + endpoints + repo_name: oracle-mysql + disk: true + docs: + relationship_name: oracle-mysql + service_name: oracle-mysql + url: /add-services/mysql.html + endpoint: mysql + min_disk_size: 256 + name: Oracle MySQL + runtime: false + type: oracle-mysql + versions: + deprecated: [] + supported: + - '8.0' + - '5.7' +php: + description: PHP service for Platform.sh. + repo_name: php + disk: false + docs: + relationship_name: null + service_name: null + url: /languages/php.html + web: + locations: + /: + root: web + passthru: /index.php + hooks: + build: + - '|' + - set -e + deploy: + - '|' + - set -e + build: + flavor: composer + endpoint: null + min_disk_size: null + name: PHP + runtime: true + type: php + versions-dedicated-gen-2: + supported: + - '8.2' + - '8.1' + - '8.0' + deprecated: + - '7.4' + - '7.3' + - '7.2' + - '7.1' + - '7.0' + versions: + deprecated: + - '8.0' + - '7.4' + - '7.3' + - '7.2' + - '7.1' + - '7.0' + - '5.6' + - '5.5' + - '5.4' + supported: + - '8.4' + - '8.3' + - '8.2' + - '8.1' +postgresql: + description: PostgreSQL service for Platform.sh. + repo_name: postgresql + disk: true + docs: + relationship_name: postgresql + service_name: postgresql + url: /add-services/postgresql.html + endpoint: postgresql + min_disk_size: null + name: PostgreSQL + runtime: false + type: postgresql + versions: + deprecated: + - '11' + - '10' + - '9.6' + - '9.5' + - '9.4' + - '9.3' + supported: + - '16' + - '15' + - '14' + - '13' + - '12' + versions-dedicated-gen-2: + deprecated: + - 11* + - 9.6* + - '9.5' + - '9.4' + - '9.3' + supported: [] + versions-dedicated-gen-3: + deprecated: + - '11' + - '10' + supported: + - '16' + - '15' + - '14' + - '13' + - '12' +python: + description: '' + repo_name: python + disk: false + docs: + relationship_name: null + service_name: null + url: /languages/python.html + web: + commands: + start: python server.py + hooks: + build: + - '|' + - pipenv install --system --deploy + dependencies: + python3: + pipenv: 2018.10.13 + endpoint: null + min_disk_size: null + name: Python + runtime: true + type: python + versions: + deprecated: + - '3.7' + - '3.6' + - '3.5' + - 2.7* + supported: + - '3.12' + - '3.11' + - '3.10' + - '3.9' + - '3.8' +rabbitmq: + description: A manufacture-based container for RabbitMQ + repo_name: rabbitmq + disk: true + docs: + relationship_name: rabbitmq + service_name: rabbitmq + url: /add-services/rabbitmq.html + endpoint: rabbitmq + min_disk_size: 512 + name: RabbitMQ + runtime: false + type: rabbitmq + versions: + deprecated: + - '3.11' + - '3.10' + - '3.9' + - '3.8' + - '3.7' + - '3.6' + - '3.5' + supported: + - '3.13' + - '3.12' + legacy: + - '3.8' + - '3.7' + - '3.6' + - '3.5' + versions-dedicated-gen-2: + supported: + - '3.13' + - '3.12' + deprecated: + - '3.11' + - '3.10' + - '3.9' + - '3.8' + - '3.7' + versions-dedicated-gen-3: + deprecated: + - '3.11' + - '3.10' + - '3.9' + supported: + - '3.13' + - '3.12' +redis: + description: 'A manufacture-based Redis container ' + repo_name: redis + disk: false + docs: + relationship_name: redis + service_name: redis + url: /add-services/redis.html + endpoint: redis + min_disk_size: null + name: Redis + runtime: false + type: redis + versions: + deprecated: + - '6.0' + - '5.0' + - '4.0' + - '3.2' + - '3.0' + - '2.8' + supported: + - '7.2' + - '7.0' + - '6.2' + legacy: + - '6.0' + versions-dedicated-gen-2: + supported: + - '7.0' + - '6.2' + deprecated: + - '6.0' + - '5.0' + - '3.2' + versions-dedicated-gen-3: + deprecated: + - '6.0' + - '5.0' + - '4.0' + - '3.2' + - '3.0' + - '2.8' + supported: + - '7.2' + - '7.0' + - '6.2' +ruby: + description: '' + repo_name: ruby + disk: false + docs: + relationship_name: null + service_name: null + url: /languages/ruby.html + web: + upstream: + socket_family: unix + commands: + start: unicorn -l $SOCKET -E production config.ru + locations: + /: + root: public + passthru: true + expires: 1h + allow: true + hooks: + build: + - '|' + - bundle install --without development test + deploy: + - '|' + - RACK_ENV=production bundle exec rake db:migrate + endpoint: null + min_disk_size: null + name: Ruby + runtime: true + type: ruby + versions: + deprecated: + - '2.7' + - '2.6' + - '2.5' + - '2.4' + - '2.3' + supported: + - '3.3' + - '3.2' + - '3.1' + - '3.0' + legacy: + - '2.7' + - '2.6' + - '2.5' + - '2.4' + - '2.3' + versions-dedicated-gen-3: + deprecated: + - '2.7' + - '2.6' + - '2.5' + - '2.4' + - '2.3' + supported: + - '3.3' + - '3.2' + - '3.1' + - '3.0' + legacy: + - '2.7' + - '2.6' + - '2.5' + - '2.4' + - '2.3' +rust: + description: '' + repo_name: rust + disk: true + docs: + relationship_name: null + service_name: null + url: /languages/rust.html + web: + commands: + start: ./target/debug/hello + endpoint: null + min_disk_size: null + name: Rust + runtime: true + type: rust + versions: + deprecated: [] + supported: + - '1' +solr: + description: '' + repo_name: solr + disk: true + docs: + relationship_name: solr + service_name: solr + url: /add-services/solr.html + endpoint: solr + min_disk_size: 256 + name: Solr + runtime: false + type: solr + versions: + deprecated: + - '8.6' + - '8.4' + - '8.0' + - '7.7' + - '7.6' + - '6.6' + - '6.3' + - '4.10' + - '3.6' + supported: + - '9.6' + - '9.4' + - '9.2' + - '9.1' + - '8.11' + versions-dedicated-gen-2: + supported: + - '8.11' + deprecated: + - '8.6' + - '8.0' + - '7.7' + - '6.6' + - '6.3' + - '4.10' + versions-dedicated-gen-3: + supported: + - '9.6' + - '9.4' + - '9.2' + - '9.1' + - '8.11' + deprecated: [] +varnish: + description: '' + repo_name: varnish + disk: false + docs: + relationship_name: varnish + service_name: varnish + url: /add-services/varnish.html + endpoint: http+stats + min_disk_size: null + configuration: |2- + configuration: + vcl: !include + type: string + path: config.vcl + service_relationships: 'application: ''app:http''' + name: Varnish + runtime: false + type: varnish + versions: + deprecated: + - '5.1' + - '5.2' + - '6.3' + - '6.4' + - '7.1' + supported: + - '7.3' + - '7.2' + - '6.0' +vault-kms: + description: '' + disk: true + docs: + relationship_name: vault-kms + service_name: vault-kms + url: /add-services/vault.html + endpoint: manage_keys + min_disk_size: 512 + configuration: |2- + configuration: + endpoints: + : + - policy: + key: + type: + name: Vault KMS + repo_name: vault-kms + runtime: false + type: vault-kms + versions: + supported: + - '1.12' + deprecated: + - '1.8' + - '1.6' + legacy: + - '1.6' + versions-dedicated-gen-2: + supported: + - '1.6' + versions-dedicated-gen-3: + supported: + - '1.12' + deprecated: + - '1.8' + - '1.6' +redis-persistent: + description: 'A manufacture-based Redis container ' + repo_name: redis + disk: true + docs: + relationship_name: redisdata + service_name: data + url: /add-services/redis.html + endpoint: redis + min_disk_size: null + name: Persistent Redis + runtime: false + type: redis-persistent + versions: + deprecated: + - '6.0' + - '5.0' + - '4.0' + - '3.2' + - '3.0' + - '2.8' + supported: + - '7.2' + - '7.0' + - '6.2' + legacy: + - '6.0' + versions-dedicated-gen-2: + supported: + - '7.0' + - '6.2' + deprecated: + - '6.0' + - '5.0' + - '3.2' + versions-dedicated-gen-3: + deprecated: + - '6.0' + - '5.0' + - '4.0' + - '3.2' + - '3.0' + - '2.8' + supported: + - '7.2' + - '7.0' + - '6.2' diff --git a/sites/upsun/config/_default/config.yaml b/sites/upsun/config/_default/config.yaml index 2c31f6cd28..69fbf7787d 100644 --- a/sites/upsun/config/_default/config.yaml +++ b/sites/upsun/config/_default/config.yaml @@ -1,6 +1,6 @@ # Basics #baseURL: / -title: Upsun documentation +title: Upsun Docs author: Upsun description: Upsun User Documentation diff --git a/sites/upsun/src/administration/cli/_index.md b/sites/upsun/src/administration/cli/_index.md index 923886f2ee..15e3ff0051 100644 --- a/sites/upsun/src/administration/cli/_index.md +++ b/sites/upsun/src/administration/cli/_index.md @@ -164,9 +164,7 @@ The code is only merged between environments remotely. ### Customize the CLI -You can customize how the CLI operates and what it returns with a configuration file (`~/{{% vendor/configdir %}}/config.yaml`) -or environment variables. -For details, see the [customization instructions on GitHub](https://github.com/platformsh/legacy-cli#user-content-customization). +You can customize how the CLI operates and what it returns with a configuration file (`~/.upsun-cli/config.yaml`) or environment variables. For details, see the [customization instructions on GitHub](https://github.com/platformsh/legacy-cli#user-content-customization). #### Automate repetitive tasks diff --git a/sites/upsun/src/create-apps/app-reference/composable-image.md b/sites/upsun/src/create-apps/app-reference/composable-image.md index 6c90cd5162..c234766237 100644 --- a/sites/upsun/src/create-apps/app-reference/composable-image.md +++ b/sites/upsun/src/create-apps/app-reference/composable-image.md @@ -574,7 +574,7 @@ See how to [troubleshoot the warning](../troubleshoot-mounts.md#overlapping-fold | 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`, `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).

-`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` 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. | diff --git a/sites/upsun/src/get-started/stacks/nextjs.md b/sites/upsun/src/get-started/stacks/nextjs.md index e6836a918a..cb606de6f5 100644 --- a/sites/upsun/src/get-started/stacks/nextjs.md +++ b/sites/upsun/src/get-started/stacks/nextjs.md @@ -24,13 +24,13 @@ To create your Next.js app, follow these steps. To fast track the process, run the following commands: ```bash {location="Terminal"} - npx create-next-app@latest + npx create-next-app@latest myapp ``` 2. To initialize the local Git repository and commit local files, run the following commands: ```bash {location="Terminal"} - cd my-app + cd myapp git init git add . git commit -m "Init Next.js application." @@ -171,7 +171,7 @@ They are located in a `.{{% vendor/cli %}}/` folder at the root of your source c and structured in a similar way to this: ```txt -my-express-app +myapp ├── .{{% vendor/cli %}} │ └── config.yaml ├── [.environment] @@ -184,19 +184,32 @@ To generate these files, run the following command at the root of your project: {{% vendor/cli %}} project:init ``` -Follow the prompts. +Follow the prompts, and you should result in such a config file. ```yaml {configFile="apps"} applications: myapp: - type: "nodejs:20" + source: + root: "/" + type: "nodejs:{{% latest "nodejs" %}}" + mounts: + "/.npm": + source: "storage" + source_path: "npm" hooks: build: | set -eux + npm i npm run build web: commands: - start: npm run start -- -p $PORT + start: npm run start -p $PORT + locations: + "/": + passthru: true +routes: + "https://{default}/": { type: upstream, upstream: "myapp:http" } + "http://{default}/": { type: redirect, to: "https://{default}/" } ``` As an example, above is the minimum configuration needed to deploy a Next.js application on {{% vendor/name %}} without any services.