platformsh / drupal9
This template builds Drupal 9 for Platform.sh based the "Drupal Recommended" Composer project.
Installs: 99
Dependents: 0
Suggesters: 0
Security: 0
Stars: 18
Watchers: 6
Forks: 51
Open Issues: 10
Type:project
Requires
- composer/installers: ^1.9
- drupal/core-composer-scaffold: ^9.5
- drupal/core-project-message: ^9.5
- drupal/core-recommended: ^9.5
- drupal/redis: ^1.6
- drush/drush: ^11.5
- platformsh/config-reader: ^2.4
Conflicts
This package is auto-updated.
Last update: 2024-11-06 19:30:49 UTC
README
Deploy Drupal 9 on Platform.sh
Contribute, request a feature, or check out our resources
Join our community
Documentation
Blog
Report a bug
Request a feature
Contents
About
Getting started
Migrate
Learn
Contribute
About
This template builds Drupal 9 using the "Drupal Recommended" Composer project. It is pre-configured to use MariaDB and Redis for caching. The Drupal installer will skip asking for database credentials as they are already provided.
Drupal is a flexible and extensible PHP-based CMS framework.
Features
- PHP 8.1
- MariaDB 10.4
- Redis 6
- Drush included
- Automatic TLS certificates
- Composer-based build
Getting started
Deploy
Quickstart
The quickest way to deploy this template on Platform.sh is by clicking the button below. This will automatically create a new project and initialize the repository for you.
You can also quickly recreate this project locally with the following command:
composer create-project platformsh/drupal9 -s dev
Note:
Platform.sh templates prioritize upstream release versions over our own. Despite this, we update template dependencies on a scheduled basis independent of those upstreams. Because of this, template repos do not contain releases. This may change in the future, but until then the
-s dev
flag is necessary to usecomposer create-project
.
Other deployment options
For all of the other options below, clone this repository first:
git clone https://github.com/platformsh-templates/drupal9
If you're trying to deploy from GitHub, you can generate a copy of this repository first in your own namespace by clicking the Use this template button at the top of this page.
Then you can clone a copy of it locally with git clone git@github.com:YOUR_NAMESPACE/drupal9.git
.
Deploy directly to Platform.sh from the command line
-
Create a free trial:
Register for a 30 day free trial with Platform.sh. When you have completed signup, select the Create from scratch project option. Give you project a name, and select a region where you would like it to be deployed. As for the Production environment option, make sure to match it to this repository's settings, or to what you have updated the default branch to locally.
-
Install the Platform.sh CLI
Follow the instructions to install the Platform.sh CLI for your operating system. You can verify the installation by logging in (
platformsh login
) and listing your projects (platform project:list
). -
Set the project remote
Find your
PROJECT_ID
by running the commandplatform project:list
+---------------+------------------------------------+------------------+---------------------------------+ | ID | Title | Region | Organization | +---------------+------------------------------------+------------------+---------------------------------+ | PROJECT_ID | Your Project Name | xx-5.platform.sh | your-username | +---------------+------------------------------------+------------------+---------------------------------+
Then from within your local copy, run the command
platform project:set-remote PROJECT_ID
. -
Push
git push platform DEFAULT_BRANCH
Integrate with a GitHub repo and deploy pull requests
-
Create a free trial:
Register for a 30 day free trial with Platform.sh. When you have completed signup, select the Create from scratch project option. Give you project a name, and select a region where you would like it to be deployed. As for the Production environment option, make sure to match it to whatever you have set at
https://YOUR_NAMESPACE/nextjs-drupal
. -
Install the Platform.sh CLI
Follow the instructions to install the Platform.sh CLI for your operating system. You can verify the installation by logging in (
platformsh login
) and listing your projects (platform project:list
). -
Setup the integration:
Consult the GitHub integration documentation to finish connecting your repository to a project on Platform.sh. You will need to create an Access token on GitHub to do so.
Integrate with a GitLab repo and deploy merge requests
-
Create a free trial:
Register for a 30 day free trial with Platform.sh. When you have completed signup, select the Create from scratch project option. Give you project a name, and select a region where you would like it to be deployed. As for the Production environment option, make sure to match it to this repository's settings, or to what you have updated the default branch to locally.
-
Install the Platform.sh CLI
Follow the instructions to install the Platform.sh CLI for your operating system. You can verify the installation by logging in (
platformsh login
) and listing your projects (platform project:list
). -
Create the repository
Create a new repository on GitLab, set it as a new remote for your local copy, and push to the default branch.
-
Setup the integration:
Consult the GitLab integration documentation to finish connecting a repository to a project on Platform.sh. You will need to create an Access token on GitLab to do so.
Integrate with a Bitbucket repo and deploy pull requests
-
Create a free trial:
Register for a 30 day free trial with Platform.sh. When you have completed signup, select the Create from scratch project option. Give you project a name, and select a region where you would like it to be deployed. As for the Production environment option, make sure to match it to this repository's settings, or to what you have updated the default branch to locally.
-
Install the Platform.sh CLI
Follow the instructions to install the Platform.sh CLI for your operating system. You can verify the installation by logging in (
platformsh login
) and listing your projects (platform project:list
). -
Create the repository
Create a new repository on Bitbucket, set it as a new remote for your local copy, and push to the default branch.
-
Setup the integration:
Consult the Bitbucket integration documentation to finish connecting a repository to a project on Platform.sh. You will need to create an Access token on Bitbucket to do so.
Post-install
Run through the Drupal installer as normal. You will not be asked for database credentials as those are already provided.
Local development
This section provides instructions for running the drupal9
template locally, connected to a live database instance on an active Platform.sh environment.
In all cases for developing with Platform.sh, it's important to develop on an isolated environment - do not connect to data on your production environment when developing locally. Each of the options below assume that you have already deployed this template to Platform.sh, as well as the following starting commands:
$ platform get PROJECT_ID
$ cd project-name
$ platform environment:branch updates
Drupal: using ddev
For the most up-to-date instructions, please see our Using DDEV for local development guide in the Platform.sh Documentation.
Drupal: using Lando
Lando supports PHP applications configured to run on Platform.sh, and pulls from the same container registry Platform.sh uses on your remote environments during your local builds through its own recipe and plugin.
- Install Lando.
- Make sure Docker is already running - Lando will attempt to start Docker for you, but it's best to have it running in the background before beginning.
- Start your apps and services with the command
lando start
. - To get up-to-date data from your Platform.sh environment (services and mounts), run the command
lando pull
. - If at any time you have updated your Platform.sh configuration files, run the command
lando rebuild
. - When you have finished with your work, run
lando stop
andlando poweroff
.
Note:
For many of the steps above, you may need to include the CLI flags
-p PROJECT_ID
and-e ENVIRONMENT_ID
if you are not in the project directory or if the environment is associated with an existing pull request.
Migrate
The steps below outline the important steps for migrating your application to Platform.sh - adding the required configuration files and dependencies, for example. Not every step will be applicable to each person's migration. These steps actually assume the earliest starting point possible - that there is no code at all locally, and that this template repository will be rebuilt completely from scratch.
- Getting started
- Adding and updating files
- Dependencies
- Deploying to Platform.sh
- Migrating your data
- Next steps
If you already have code you'd like to migrate, feel free to focus on the steps most relevant to your application and skip the first section.
Getting started
Assuming that your starting point is no local code, the steps below will setup a starting repository we can begin to make changes to to rebuild this template and migrate to Platform.sh.
If you already have a codebase you are trying to migrate, move onto the next step - Adding and updating files - and substitute any reference to the default branch main
with some other branch name.
$ mkdir drupal9 && cd drupal9 $ git init $ git remote add upstream https://github.com/drupal/recommended-project.git $ git branch -m main $ git fetch --all --depth=2 $ git fetch --all --tags $ git merge --allow-unrelated-histories -X theirs 9.3.9
Adding and updating files
A small number of files need to be added to or modified in your repository at this point. Some of them explicitly configure how the application is built and deployed on Platform.sh, while others simply modify files you may already have locally, in which case you will need to replicate those changes.
Open the dropdown below to view all of the Added and Updated files you'll need to reproduce in your migration.
View files
Dependencies and configuration
Sometimes it is necessary to install additional dependencies to and modify the configuration of an upstream project to deploy on Platform.sh. When it is, we do our best to keep these modifications to the minimum necessary. Run the commands below to reproduce the dependencies in this template.
$ composer require platformsh/config-reader drush/drush drupal/redis $ composer config allow-plugins.composer/installers true --no-plugins $ composer config allow-plugins.drupal/core-composer-scaffold true --no-plugins $ composer config allow-plugins.drupal/core-project-message true --no-plugins $ composer config allow-plugins.cweagans/composer-patches true --no-plugins
Deploying to Platform.sh
Your repository now has all of the code it needs in order to deploy to Platform.sh.
Deploy directly to Platform.sh from the command line
-
Create a free trial:
Register for a 30 day free trial with Platform.sh. When you have completed signup, select the Create from scratch project option. Give you project a name, and select a region where you would like it to be deployed. As for the Production environment option, make sure to match it to this repository's settings, or to what you have updated the default branch to locally.
-
Install the Platform.sh CLI
Follow the instructions to install the Platform.sh CLI for your operating system. You can verify the installation by logging in (
platformsh login
) and listing your projects (platform project:list
). -
Set the project remote
Find your
PROJECT_ID
by running the commandplatform project:list
+---------------+------------------------------------+------------------+---------------------------------+ | ID | Title | Region | Organization | +---------------+------------------------------------+------------------+---------------------------------+ | PROJECT_ID | Your Project Name | xx-5.platform.sh | your-username | +---------------+------------------------------------+------------------+---------------------------------+
Then from within your local copy, run the command
platform project:set-remote PROJECT_ID
. -
Push
git push platform DEFAULT_BRANCH
Integrate with a GitHub repo and deploy pull requests
-
Create a free trial:
Register for a 30 day free trial with Platform.sh. When you have completed signup, select the Create from scratch project option. Give you project a name, and select a region where you would like it to be deployed. As for the Production environment option, make sure to match it to whatever you have set at
https://YOUR_NAMESPACE/nextjs-drupal
. -
Install the Platform.sh CLI
Follow the instructions to install the Platform.sh CLI for your operating system. You can verify the installation by logging in (
platformsh login
) and listing your projects (platform project:list
). -
Setup the integration:
Consult the GitHub integration documentation to finish connecting your repository to a project on Platform.sh. You will need to create an Access token on GitHub to do so.
Integrate with a GitLab repo and deploy merge requests
-
Create a free trial:
Register for a 30 day free trial with Platform.sh. When you have completed signup, select the Create from scratch project option. Give you project a name, and select a region where you would like it to be deployed. As for the Production environment option, make sure to match it to this repository's settings, or to what you have updated the default branch to locally.
-
Install the Platform.sh CLI
Follow the instructions to install the Platform.sh CLI for your operating system. You can verify the installation by logging in (
platformsh login
) and listing your projects (platform project:list
). -
Create the repository
Create a new repository on GitLab, set it as a new remote for your local copy, and push to the default branch.
-
Setup the integration:
Consult the GitLab integration documentation to finish connecting a repository to a project on Platform.sh. You will need to create an Access token on GitLab to do so.
Integrate with a Bitbucket repo and deploy pull requests
-
Create a free trial:
Register for a 30 day free trial with Platform.sh. When you have completed signup, select the Create from scratch project option. Give you project a name, and select a region where you would like it to be deployed. As for the Production environment option, make sure to match it to this repository's settings, or to what you have updated the default branch to locally.
-
Install the Platform.sh CLI
Follow the instructions to install the Platform.sh CLI for your operating system. You can verify the installation by logging in (
platformsh login
) and listing your projects (platform project:list
). -
Create the repository
Create a new repository on Bitbucket, set it as a new remote for your local copy, and push to the default branch.
-
Setup the integration:
Consult the Bitbucket integration documentation to finish connecting a repository to a project on Platform.sh. You will need to create an Access token on Bitbucket to do so.
Migrating your data
If you are moving an existing site to Platform.sh, then in addition to code you also need to migrate your data. That means your database and your files.
Importing the database
First, obtain a database dump from your current site and save your dump file as database.sql
. Then, import the database into your Platform.sh site using the CLI:
platform sql -e main < database.sql
Importing files
You first need to download your files from your current hosting environment. The easiest way is likely with rsync, but consult your old host's documentation.
The platform mount:upload
command provides a straightforward way to upload an entire directory to your site at once to a mount
defined in a .platform.app.yaml
file.
Under the hood, it uses an SSH tunnel and rsync, so it is as efficient as possible.
(There is also a platform mount:download
command you can use to download files later.)
Run the following from your local Git repository root (modifying the --source
path if needed and setting BRANCH_NAME
to the branch you are using).
A few examples are listed below, but repeat for all directories that contain data you would like to migrate.
$ platform mount:upload -e main --mount web/sites/default/files --source ./web/sites/default/files $ platform mount:upload -e main --mount private --source ./private
Note that rsync
is picky about its trailing slashes, so be sure to include those.
Next steps
With your application now deployed on Platform.sh, things get more interesting.
Run the command platform environment:branch new-feature
for your project, or open a trivial pull request off of your current branch.
The resulting environment is an exact copy of production. It contains identical infrastructure to what's been defined in your configuration files, and even includes data copied from your production environment in its services. On this isolated environment, you're free to make any changes to your application you need to, and really test how they will behave on production.
After that, here are a collection of additional resources you might find interesting as you continue with your migration to Platform.sh:
- Local development
- Troubleshooting
- Adding a domain and going live
- (CDN) Content Delivery Networks
- Performance and observability with Blackfire.io
- Pricing
- Security and compliance
Learn
Troubleshooting
Accessing logs
After the environment has finished its deployment, you can investigate issues that occured on startup, deploy
and post_deploy
hooks, and generally at runtime using the CLI. Run the command:
platform ssh
If you are running the command outside of a local copy of the project, you will need to include the -p
(project) and/or -e
(environment) flags as well.
Once you have connected to the container, logs are available within /var/log/
for you to investigate.
Rebuilding cache
You may run into a database error after installing Drupal on your production environment initially.
To fix, SSH into the application container (platform ssh
) and rebuild the cache using Drush:
drush cache-rebuild
Default hash_salt
behavior
Drupal's default settings set hash_salt
to an empty string:
$settings['hash_salt'] = '';
In the past, Platform.sh templates have overridden this value:
$settings['hash_salt'] = $settings['hash_salt'] ?? $platformsh->projectEntropy;
This setting was insufficient to cover some user configurations - such as those cases when an application depends on a Null
value for hash_salt
.
Now, the setting looks like this in settings.platformsh.php
:
$settings['hash_salt'] = empty($settings['hash_salt']) ? $platformsh->projectEntropy : $settings['hash_salt'];
This change sets hash_salt
to the built-in environment variable PLATFORM_PROJECT_ENTROPY
value if the project contains the default settings OR Null
.
If your application code depends on an empty value, feel free to comment out that line, or reset again later in that file.
Feel free to visit platformsh-templates/drupal9#73
for more details on this discussion.
Blackfire.io: creating a Continuous Observability Strategy
This template includes a starting .blackfire.yml
file that can be used to enable Application Performance Monitoring, Profiling, Builds and Performance Testing on your project. Platform.sh comes with Blackfire pre-installed on application containers, and setting up requires minimal configuration.
- What is Blackfire?
- Configuring Blackfire.io on a Platform.sh project
- Blackfire.io Platform.sh documentation
- Profiling Cookbooks
- Monitoring Cookbooks
- Testing Cookbooks
- Using Builds
- Configuring Integrations
Resources
Contact
This template is maintained by the Platform.sh Developer Relations team, and they will be notified of all issues and pull requests you open here.
- Community: Share your question with the community, or see if it's already been asked on our Community site.
- Slack: If you haven't done so already, you can join Platform.sh's public Slack channels and ping the
@devrel_team
with any questions.
About Platform.sh
This template has been specifically designed to deploy on Platform.sh.
What is Platform.sh?
Platform.sh is a unified, secure, enterprise-grade platform for building, running and scaling web applications. We’re the leader in Fleet Ops: Everything you need to manage your fleet of websites and apps is available from the start. Because infrastructure and workflows are handled from the start, apps just work, so teams can focus on what really matters: making faster changes, collaborating confidently, and scaling responsibly. Whether managing a fleet of ten or ten thousand sites and apps, Platform.sh is the Developer- preferred solution that scales right.
Our key features include:
-
GitOps: Git as the source of truth
Every branch becomes a development environment, and nothing can change without a commit.
-
Batteries included: Managed infrastructure
Simple abstraction in YAML for committing and configuring infrastructure, fully managed patch updates, and 24 runtimes & services that can be added with a single line of code.
-
Instant cloning: Branch, merge, repeat
Reusable builds and automatically inherited production data provide true staging environments - experiment in isolation, test, then destroy or merge.
-
FleetOps: Fleet management platform
Leverage our public API along with custom tools like Source Operations and Activity Scripts to manage thousands of applications - their dependency updates, fresh content, and upstream code.
To find out more, check out the demo below and go to our website.
Contribute
Help us keep top-notch templates!
Every one of our templates is open source, and they're important resources for users trying to deploy to Platform.sh for the first time or better understand the platform. They act as getting started guides, but also contain a number of helpful tips and best practices when working with certain languages and frameworks.
See something that's wrong with this template that needs to be fixed? Something in the documentation unclear or missing? Let us know!
How to contribute
Report a bug
Submit a feature request
Open a pull request
Need help?
Ask the Platform.sh Community
Join us on Slack
Thanks to all of our amazing contributors!
Made with contrib.rocks