Installing Ghost CMS High Availability using Cloud Apps
Follow this guide to install and configure Ghost CMS High Availability
To install Ghost CMS High Availability:
- Get your cloud ready.
- Create a VPC network and subnets.
- Configure a DNS zone.
- Create a Yandex Lockbox secret.
- Install Ghost CMS High Availability.
- Configure Ghost CMS High Availability.
- Check the result.
If you no longer need the resources you created, delete them.
Get your cloud ready
Sign up for Yandex Cloud and create a billing account:
- Navigate to the management console
and log in to Yandex Cloud or create a new account. - On the Yandex Cloud Billing
page, make sure you have a billing account linked and it has theACTIVEorTRIAL_ACTIVEstatus. If you do not have a billing account, create one and link a cloud to it.
If you have an active billing account, you can create or select a folder for your infrastructure on the cloud page
Learn more about clouds and folders here.
Required paid resources
The cost of support for the new infrastructure includes:
- Fee for VM usage and data storage on disk (see Yandex Compute Cloud pricing).
- Fee for using public IP address and outgoing traffic (see Yandex Virtual Private Cloud pricing).
- Fee for public DNS zone usage and public DNS requests (see Yandex Cloud DNS pricing).
- Fee for computing resources allocated to MySQL® hosts, storage and backup size (see Yandex Managed Service for MySQL® pricing).
- Fee for using a bucket to store media files (see Yandex Object Storage pricing).
- Fee for storage of and operations with secrets (see Yandex Lockbox pricing).
- Fee for outgoing emails (see Yandex Cloud Postbox pricing).
Create a VPC network and subnets
Create a cloud network and subnets to deploy your resources in.
-
In the management console
, navigate to the folder where you want to deploy your infrastructure. -
Go to Virtual Private Cloud.
-
In the top-right corner, click Create network.
-
In the Name field, enter a name for the network. The naming requirements are as follows:
- Length: between 3 and 63 characters.
- It can only contain lowercase Latin letters, numbers, and hyphens.
- It must start with a letter and cannot end with a hyphen.
-
Keep Create subnets enabled.
-
Click Create network.
If you do not have the Yandex Cloud CLI yet, install and initialize it.
The folder used by default is the one specified when creating the CLI profile. To change the default folder, use the yc config set folder-id <folder_ID> command. You can also set a different folder for any specific command using the --folder-name or --folder-id options.
-
Create a cloud network in the default folder:
yc vpc network create --name wordpress-network -
Get the list of the cloud networks in the folder:
yc vpc network list --folder-id b1g6ci08ma55********Result:
+----------------------+-------------------+ | ID | NAME | +----------------------+-------------------+ | enpavfmgapum******** | wordpress-network | | enplom7a98s1******** | default | +----------------------+-------------------+ -
Select
NAMEorIDof the cloud network you need. Create a subnet in theru-central1-aavailability zone:yc vpc subnet create \ --network-id enpavfmgapum******** \ --zone ru-central1-a \ --range 192.168.0.0/24Where:
--network-id: Cloud network ID. When creating a subnet, specify the cloud network for the subnet and CIDR.--zone: Subnet availability zone.--range: List of internal IPv4 addresses specified for this subnet, such as10.0.0.0/22or192.168.0.0/16. Make sure the addresses are unique within the network. The minimum subnet size is /28, and the maximum subnet size is /16. Only IPv4 is supported.
The subnet naming requirements are as follows:
- Length: between 3 and 63 characters.
- It can only contain lowercase Latin letters, numbers, and hyphens.
- It must start with a letter and cannot end with a hyphen.
-
Similarly, create a subnet in the
ru-central1-davailability zone.
To create a cloud network, use the create REST API method for the Network resource or the NetworkService/Create gRPC API call and provide the ID of the folder to host the new network in the folderId parameter of your request:
To learn how to find out the folder ID, see Getting the folder ID.
To create subnets in the ru-central1-a and ru-central1-d availability zones, use the create REST API method for the Subnet resource or the SubnetService/Create gRPC API call, and provide the following in your request:
- ID of the folder the subnet will reside in, in the
folderIdparameter. - ID of the network the subnet will be placed in, in the
networkIdparameter. - ID of the availability zone the subnet will be placed in, in the
zoneIdparameter. - List of internal IPv4 addresses specified for this subnet, in the
v4CidrBlocks[]array, e.g.,10.0.0.0/22or192.168.0.0/16. Make sure the addresses are unique within the network. The minimum subnet size is/28, while the maximum subnet size is/16. Only IPv4 is supported.
To get the subnet ID, use the list REST API method for the Subnet resource or the SubnetService/List gRPC API call and provide the folder ID in the folderId request parameter.
Configure a DNS zone
Create a public DNS zone and delegate your domain to it. For more about delegating domains, see this guide.
-
Go to Cloud DNS.
-
Click Create zone.
-
Specify the DNS zone settings:
- Zone: Specify your registered domain with a trailing dot, e.g.,
example.com.. - Type: Select
Public. - Name: Enter a name for the zone, e.g.,
example-zone.
- Zone: Specify your registered domain with a trailing dot, e.g.,
-
Click Create.
-
Delegate your domain to Yandex Cloud servers. Do it by specifying the addresses of the
ns1.yandexcloud.netandns2.yandexcloud.netDNS servers in your domain registrar's account.Delegation does not take effect immediately. It usually takes up to 24 hours for internet service providers to update records. You can check domain delegation using Whois
or thedigutility:dig +short NS example.comResult:
ns2.yandexcloud.net. ns1.yandexcloud.net.
-
Create a public DNS zone:
yc dns zone create \ --name example-zone \ --zone example.com. \ --public-visibilityWhere
--zoneis your domain name, e.g.,example.com.. The--zoneparameter value must end with a trailing dot.Result:
id: dns39gihj0ef******** folder_id: b1g681qpemb4******** created_at: "2024-09-09T15:23:34.919887Z" name: example-zone zone: example.com. public_visibility: {}For more information about the
yc dns zone createcommand, see the CLI reference. -
Delegate your domain to Yandex Cloud servers. Do it by specifying the addresses of the
ns1.yandexcloud.netandns2.yandexcloud.netDNS servers in your domain registrar's account.Delegation does not take effect immediately. Internet provider servers update records within 24 hours.
To create a public DNS zone, use the create REST API method for the DnsZone resource or the DnsZoneService/Create gRPC API call.
Delegate your domain to Yandex Cloud servers. Do it by specifying the addresses of the ns1.yandexcloud.net and ns2.yandexcloud.net DNS servers in your domain registrar's account.
Create a Yandex Lockbox secret
Create a Yandex Lockbox secret to store the Managed Service for MySQL® database password.
-
Go to Lockbox.
-
Click Create secret.
-
In the Name field, specify the secret name:
db-password-secret. -
In the Secret type field, select
Custom. -
In the Key field, enter
db_password. -
In the Value field, set a password for the Managed Service for MySQL® database. Password requirements:
- It must be from 8 to 128 characters long.
- It must contain numbers, upper-case and lower-case Latin letters, and special characters.
- It cannot consist only of digits.
-
Click Create.
Run this command:
yc lockbox secret create \
--name db-password-secret \
--payload "[{'key': 'db_password', 'text_value': '<password>'}]"
Where text_value is the Managed Service for MySQL® database password. Password requirements:
- It must be from 8 to 128 characters long.
- It must contain numbers, upper-case and lower-case Latin letters, and special characters.
- It cannot consist only of digits.
Result:
id: e6q0rdjdggjp********
folder_id: b1g681qpemb4********
created_at: "2025-07-12T18:23:49.844Z"
name: db-password-secret
status: ACTIVE
current_version:
id: e6qbp772i014********
secret_id: e6q0rdjdggjp********
created_at: "2025-07-12T18:23:49.844Z"
status: ACTIVE
payload_entry_keys:
- db_password
To create a secret, use the create REST API method for the Secret resource or the SecretService/Create gRPC API call.
Specify db_password in the key parameter for the key to contain the Managed Service for MySQL® database password. Password requirements:
- It must be from 8 to 128 characters long.
- It must contain numbers, upper-case and lower-case Latin letters, and special characters.
- It cannot consist only of digits.
Install Ghost CMS High Availability
Install Ghost CMS High Availability using Cloud Apps.
-
Go to Cloud Apps.
-
Click Choose application.
-
In the window that opens, select Ghost CMS High Availability.
-
Configure your application:
Parameter
Required
Default value
Description
Name
Yes
—
Application instance name.
Description
—
—
Application instance description.
Service account
Yes
—
Service account you are going to use to install the app. The service account must have the
adminrole for the folder.
To create a service account with the required permissions during app installation, selectAuto.DNS zone ID
Yes
—
ID of the DNS zone to host the application's domain.
Site subdomain
—
Empty
Domain for access to the main website, formed by adding a subdomain to the DNS zone domain, i.e.,
site.example.comorexample.comif no subdomain is specified.Administrator dashboard subdomain
—
adminDomain for access to the admin panel, formed by adding a subdomain to the DNS zone domain, e.g.,
admin.example.com/ghost.Sender
—
noreply@<website_domain>Email sender. Used to set up SMTP
via Yandex Cloud Postbox.Subnet in ru-central1-a
Yes
—
Subnet in the
ru-central1-aavailability zone for the Managed Service for MySQL® cluster, created previosly.Subnet in ru-central1-d
Yes
—
Subnet in the
ru-central1-davailability zone for the Managed Service for MySQL® cluster, created previosly.VPC subnet for the VM
—
Subnet in the
ru-central1-davailability zone.Subnet to host the new VM.
Number of vCPUs
—
2Number of vCPUs.
RAM
—
2RAM in GB.
Guaranteed vCPU share
—
100Guaranteed vCPU share in %. The available values are 20%, 50%, or 100%.
Public SSH key
—
—
The key will be added to
authorized_keysof theghostVM user.
We recommend specifying a public SSH key to access the VM over SSH. You need to create a key pair for the SSH connection on your own. To learn how, see Connecting to a VM over SSH.Disk type
—
network-ssdVM disk type.
Disk size
—
20VM disk size in GB.
ID of the secret containing the database password
Yes
—
Secret containing the password to connect to a Managed Service for MySQL® cluster. This password should be specified in the
db_passwordkey.Managed Service for MySQL® cluster disk size
—
20Managed Service for MySQL® cluster disk size in GB.
-
Click Install.
Installing the app and creating all required resources will take from five to ten minutes.
As soon as all resources are created, the VM will start configuring the website and issuing TLS certificates. Wait for the installation to complete.
Configure Ghost CMS High Availability
Once the app is successfully installed, configure Ghost CMS High Availability:
-
In your browser, open the admin panel using its address:
https://<admin_panel_subdomain>.<domain>/ghostWhere:
<admin_panel_subdomain>: Admin panel subdomain you specified when creating the application. The default value isadmin.<your_domain>: Domain you specified when creating the DNS zone.
For example:
https://admin.example.com/ghost. -
Fill out the admin registration form:
- Site title: Enter a name for the website.
- Full name: Enter a name to publish posts under.
- Email address: Specify the email address for logging in to the admin panel. You will get a notification at this address.
- Password: Create a secure password for logging in to the admin panel.
-
Click Create account & start publishing.
After you register, the page will redirect you to the Ghost CMS High Availability admin panel where you can start using the website.
Check the result
Make sure that Ghost CMS High Availability is up and running:
-
Create a test post:
- In the admin panel interface, click
next to the Posts tab. - Provide the post title and content.
- Upload an image to the post. It will be automatically saved in the S3 bucket.
- At the top right, click Publish → Continue, final review → Publish post, right now.
- In the window that opens, copy the post link by clicking Copy link.
- In the admin panel interface, click
-
Open the link in your browser.
You should see a post with a URL in this format:
https://example.com/new-post/.
How to delete the resources you created
Warning
Do not manually delete automatically created resources: this may cause an error when uninstalling the app.
To shut down the resources you created and stop paying for them:
-
Delete all objects from the Object Storage bucket you created when installing the app.
-
Delete the installed Ghost CMS High Availability app:
-
Go to Cloud Apps.
-
Locate the installed Ghost CMS High Availability app in the list.
-
Click
next to the app and select Delete. -
Confirm the app deletion.
Wait for the deletion to complete.
-
-
Delete the public DNS zone.
-
Delete the Yandex Lockbox secret.
-
Delete the Yandex Cloud Postbox address and the associated DNS record because they will not be deleted after you delete the application.