This tutorial shows how to deploy a small WordPress site to the App Engine flexible environment.
Objectives
- Create a Cloud SQL Second Generation instance.
- Configure a sample WordPress site.
- Deploy the sample WordPress site to the App Engine flexible environment.
Costs
Before you begin
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
-
Enable the required APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
Create credentials by following these steps:
In the Cloud de Confiance console, go to the Credentials page.
- Click Create credentials and select Service account key.
- Select Service account > App Engine default service account.
- Click Create.
- Save the downloaded key in a secure place.
- Install PHP and Composer.
-
Download the Cloud SQL Proxy
and make it executable. Also add the location of the Cloud SQL Proxy
executable file to your
PATHenvironment variable. -
Install a
MySQL client
and verify that the location of the
mysqlexecutable file is in yourPATHenvironment variable.
Creating and configuring a Cloud SQL Second Generation instance
Create a Cloud SQL Second Generation instance:
gcloud sql instances create tutorial-sql-instance \ --activation-policy=ALWAYS \ --tier=db-n1-standard-1 \ --region=us-central1Set the root password for your instance:
gcloud sql users set-password root --instance tutorial-sql-instance \ --password [YOUR_SQL_ROOT_PASSWORD] \ --host %where
[YOUR_SQL_ROOT_PASSWORD]is a secure password of your choice.Download and run the Cloud SQL Proxy:
./cloud-sql-proxy \ -dir /tmp/cloudsql \ -instances=[YOUR_PROJECT_ID]:us-central1:tutorial-sql-instance \ -credential_file=[PATH_TO_YOUR_SERVICE_ACCOUNT_JSON]
where
[YOUR_PROJECT_ID]is your Cloud de Confiance project ID.[PATH_TO_YOUR_SERVICE_ACCOUNT_JSON]is the path to the service account JSON file that you downloaded previously.
The following output indicates that the proxy is ready for new connections:
Listening on 127.0.0.1:3306 for [YOUR_PROJECT_ID]:us-central1:tutorial-sql-instance Ready for new connectionsIn another terminal window, create a new database and a user:
mysql -h 127.0.0.1 -u root --password=[YOUR_SQL_ROOT_PASSWORD] mysql> create database tutorialdb; mysql> create user 'tutorial-user'@'%' identified by '[YOUR_DATABASE_PASSWORD]'; mysql> grant all on tutorialdb.* to 'tutorial-user'@'%'; mysql> exit
where:
[YOUR_SQL_ROOT_PASSWORD]is the root password for your Cloud SQL instance.[YOUR_DATABASE_PASSWORD]is a secure password of your choice.
Setting up the WordPress project
Clone the sample repository:
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.gitGo to the directory that contains the sample code:
cd php-docs-samples/appengine/flexible/wordpressInstall dependencies:
composer installRun the helper script:
php wordpress.php setup -n \ --dir=./wordpress-project \ --db_instance=tutorial-sql-instance \ --db_name=tutorialdb \ --db_user=tutorial-user \ --project_id=[YOUR_PROJECT_ID] \ --db_password=[YOUR_DATABASE_PASSWORD]
where:
[YOUR_PROJECT_ID]is your project ID.[YOUR_DATABASE_PASSWORD]is your database password.
The
-dirparameter specifies the location of your WordPress project.The helper script writes information to
wordpress-project/wordpress/wp-config.php. Inspect the content ofwp-config.phpto verify that your names, project ID, and database password are correct.if ($onGae) { /** Production environment */ define('DB_HOST', ':/cloudsql/[YOUR_PROJECT_ID]:us-central1:tutorial-sql-instance'); /** The name of the database for WordPress */ define('DB_NAME', 'tutorialdb'); /** MySQL database username */ define('DB_USER', 'tutorial-user'); /** MySQL database password */ define('DB_PASSWORD', '[YOUR_DATABASE_PASSWORD]'); } else { /** Local environment */ define('DB_HOST', '127.0.0.1'); /** The name of the database for WordPress */ define('DB_NAME', 'tutorialdb'); /** MySQL database username */ define('DB_USER', 'tutorial-user'); /** MySQL database password */ define('DB_PASSWORD', '[YOUR_DATABASE_PASSWORD]'); }
Deploying the WordPress project to the App Engine flexible environment
Go to your WordPress project directory:
cd wordpress-projectDeploy the WordPress project:
gcloud app deploy \ --promote --stop-previous-version app.yaml cron.yamlIn your browser, enter the following URL:
https://PROJECT_ID.REGION_ID.r.appspot.comReplace the following:
PROJECT_ID: Your Cloud de Confiance project IDREGION_ID: A code that App Engine assigns to your app
Updating WordPress, plugins, and themes
It's important to keep WordPress, plugins, and themes up to date. You can keep
these items updated by using the wp tool. After an update, you need to re-
deploy the WordPress project.
Update WordPress itself:
vendor/bin/wp core update --path=wordpressUpdate plugins:
vendor/bin/wp plugin update --all --path=wordpress # Just in case it updates any of the dropins, copy the files: cp wordpress/wp-content/plugins/batcache/advanced-cache.php \ wordpress/wp-content/plugins/memcached/object-cache.php \ wordpress/wp-contentUpdate themes:
vendor/bin/wp theme update --all --path=wordpressDeploy the project again:
gcloud app deploy \ --promote --stop-previous-version app.yaml cron.yaml
Clean up
To avoid incurring charges to your Google Cloud account for the resources used in this tutorial, either delete the project that contains the resources, or keep the project and delete the individual resources.
Delete the project
The easiest way to eliminate billing is to delete the project that you created for the tutorial.
To delete the project:
- In the Cloud de Confiance console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Delete non-default versions of your app
If you don't want to delete your project, you can reduce costs by deleting the non-default versions of your app.
To delete an app version:
- In the Cloud de Confiance console, go to the Versions page for App Engine.
- Select the checkbox for the non-default app version that you want to delete.
- To delete the app version, click Delete.
Delete your Cloud SQL instance
To delete a Cloud SQL instance:
- In the Cloud de Confiance console, go to the Instances page.
- Click the name of the SQL instance you that want to delete.
- To delete the instance, click Delete, and then follow the instructions.
What's next
Learn how to run the PHP Bookshelf sample app in the App Engine flexible environment.
Learn how to run the PHP Bookshelf sample app on Google Kubernetes Engine.
Learn how to run the PHP Bookshelf sample app on Compute Engine.
Learn about WordPress.
Learn about using WordPress multisite with your own domains and Mailgun.
Explore reference architectures, diagrams, and best practices about Google Cloud. Take a look at our Cloud Architecture Center.