Existing customer? Sign in

  • how to set up my custom domain
  • how to install ghost
  • login not working, how to reset password
  • cloudflare setup and config
  • how to make a ghost theme

How to install Ghost locally

Fast-track local install for getting Ghost running on your computer or setup for doing theme development

Running Ghost locally is the easiest way to get your own copy of the software running and be able to do some local development with it. By the end of this guide you will have completed a local Ghost install that runs in development mode using SQLite3.

This install is not suitable for production use or contributing to core.


To install Ghost locally you will need the following:

  • A computer running MacOS, Windows or Linux
  • A supported version of Node.js
  • Either yarn or npm to manage packages
  • A clean, empty directory on your machine

Install Ghost-CLI

Ghost-CLI is a commandline tool to help you get Ghost installed and configured for use, quickly and easily. The npm module can be installed with npm or yarn on a local machine, depending on your preference.

Once installed, you can always run ghost help to see a list of available commands.

Install Ghost

In your terminal, cd into an empty directory and run the install command:

Once the install is finished you’ll be able to access your new site on http://localhost:2368 and http://localhost:2368/ghost to access Ghost Admin ✨

That’s it! You’re done.

  • Your publication is setup in development mode with less caching
  • The SQLite3 database is auto-setup and located in /content/data/
  • Logs only go to stdout

Starting & Stopping

Ghost runs in a separate background process and remains running until you stop it or restart your computer. So you may find these commands useful for taming it:

  • ghost stop to stop Ghost
  • ghost start to start Ghost
  • ghost log views logs
  • ghost ls to list all running Ghost blogs

Run ghost help for a list of available commands, or explore the full Ghost-CLI documentation .


For troubleshooting and errors, try searching this documentation and FAQ section to find information about common error messages.

Developing Themes

To work on a Ghost Handlebars Theme locally, your custom theme should always be placed in the top-level /content/themes/ directory.

Live reloading

All edits made to Ghost theme files will automatically reload. If you add any new files to your theme during development, you’ll need to restart Ghost to see the changes take effect.

Validating with GScan

GScan is a tool that validates Ghost themes for compatibility with the latest versions of Ghost. Ghost automatically runs this tool when a theme is uploaded or activated. For development purposes, your can also run these checks yourself by locally installing it.

GScan can also be accessed at gscan.ghost.org , where you can sign up for the latest updates as a Ghost theme developer.

What’s next

You’ve completed a local Ghost install — congrats! You can now put Ghost through its paces and see what it’s all about, or jump right into developing a custom Ghost theme.

When you’re ready ship your site to production, follow one of these guides .

For more information about theme development read the Handlebars theme documentation and check out the tutorials .

  • Creator platform
  • Theme marketplace
  • Integrations
  • Feature index
  • How to install Ghost
  • Core concepts
  • Ghost hosting
  • API documentation
  • Security overview
  • Source code
  • Ghost tutorials
  • Node.js CMS guide
  • Open Subscription Platforms
  • Ghost vs Substack
  • Ghost vs WordPress
  • Ghost vs Medium
  • Ghost vs Memberful
  • Ghost vs Patreon
  • Ghost alternatives →
  • Help center
  • Community forum
  • Status   Triangle  99.9%

Quick reference

Maintained by : the Docker Community

Where to get help : the Docker Community Slack , Server Fault , Unix & Linux , or Stack Overflow

Supported tags and respective Dockerfile links

  • 5.69.0 , 5.69 , 5 , latest
  • 5.69.0-alpine , 5.69-alpine , 5-alpine , alpine

Quick reference (cont.)

Where to file issues : https://github.com/docker-library/ghost/issues

Supported architectures : ( more info ) amd64 , arm32v6 , arm32v7 , arm64v8 , ppc64le , s390x

Published image artifact details : repo-info repo's repos/ghost/ directory ( history ) (image metadata, transfer size, etc)

Image updates : official-images repo's library/ghost label official-images repo's library/ghost file ( history )

Source of this description : docs repo's ghost/ directory ( history )

Ghost is a free and open source blogging platform written in JavaScript and distributed under the MIT License, designed to simplify the process of online publishing for individual bloggers as well as online publications.



How to use this image

This will start a Ghost development instance listening on the default Ghost port of 2368.

Custom port

If you'd like to be able to access the instance from the host without the container's IP, standard port mappings can be used:

If all goes well, you'll be able to access your new site on http://localhost:3001 and http://localhost:3001/ghost to access Ghost Admin (or http://host-ip:3001 and http://host-ip:3001/ghost , respectively).

Upgrading Ghost

You will want to ensure you are running the latest minor version of Ghost before upgrading major versions. Otherwise, you may run into database errors.

For upgrading your Ghost container you will want to mount your data to the appropriate path in the predecessor container (see below): import your content from the admin panel, stop the container, and then re-mount your content to the successor container you are upgrading into; you can then export your content from the admin panel.

Mount your existing content. In this example we also use the Alpine Linux based image.

Note: database__connection__filename is only valid in development mode and is the location for the SQLite database file. If using development mode, it should be set to a writeable path within a persistent folder (bind mount or volume). It is not available in production mode because an external MySQL server is required (see the docker-compose example below).

Docker Volume

Alternatively you can use a named docker volume instead of a direct host path for /var/lib/ghost/content :


All Ghost configuration parameters (such as url ) can be specified via environment variables. See the Ghost documentation for details about what configuration is allowed and how to convert a nested configuration key into the appropriate environment variable name:

(There are further configuration examples in the stack.yml listed below.)

What is the Node.js version?

When opening a ticket at https://github.com/TryGhost/Ghost/issues it becomes necessary to know the version of Node.js in use:

Note about Ghost-CLI

While the Docker images do have Ghost-CLI available and do use some of its commands to set up the base Ghost image, many of the other Ghost-CLI commands won't work correctly, and really aren't designed/intended to. For more info see docker-library/ghost#156 (comment)

Production mode

To run Ghost for production you'll also need to be running with MySQL 8, https, and a reverse proxy configured with appropriate X-Forwarded-For , X-Forwarded-Host , and X-Forwarded-Proto ( https ) headers.

The following example demonstrates some of the necessary configuration for running with MySQL. For more detail, see Ghost's "Configuration options" documentation .

... via docker-compose or docker stack deploy

Example docker-compose.yml for ghost :

Try in PWD

Run docker stack deploy -c stack.yml ghost (or docker-compose -f stack.yml up ), wait for it to initialize completely, and visit http://swarm-ip:8080 , http://localhost:8080 , or http://host-ip:8080 (as appropriate).

Image Variants

The ghost images come in many flavors, each designed for a specific use case.


This is the defacto image. If you are unsure about what your needs are, you probably want to use this one. It is designed to be used both as a throw away container (mount your source code and start the container to start your app), as well as the base to build other images off of.


This image is based on the popular Alpine Linux project , available in the alpine official image . Alpine Linux is much smaller than most distribution base images (~5MB), and thus leads to much slimmer images in general.

This variant is useful when final image size being as small as possible is your primary concern. The main caveat to note is that it does use musl libc instead of glibc and friends , so software will often run into issues depending on the depth of their libc requirements/assumptions. See this Hacker News comment thread for more discussion of the issues that might arise and some pro/con comparisons of using Alpine-based images.

To minimize image size, it's uncommon for additional related tools (such as git or bash ) to be included in Alpine-based images. Using this image as a base, add the things you need in your own Dockerfile (see the alpine image description for examples of how to install packages if you are unfamiliar).

View license information for the software contained in this image.

As with all Docker images, these likely also contain other software which may be under other licenses (such as Bash, etc from the base distribution, along with any direct or indirect dependencies of the primary software being contained).

Some additional license information which was able to be auto-detected might be found in the repo-info repository's ghost/ directory .

As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within.

Recent Tags

About official images.

Docker Official Images are a curated set of Docker open source and drop-in solution repositories.

Why Official Images?

These images have clear documentation, promote best practices, and are designed for the most common use cases.

tencent cloud

  • Partner Network
  • Marketplace
  • Explore More
  • Intl - English
  • Intl - 简体中文
  • Intl - Português
  • Intl - Bahasa Indonesia
  • Documentation

Recent Pages

  • Cloud Virtual Machine
  • Auto Scaling
  • CVM Dedicated Host
  • Batch Compute
  • Cloud File Storage
  • Public Image Release Notes
  • Updating Some Image Pip Package Management Tools for CentOS 7
  • CentOS 8 End of Maintenance
  • Discontinuation of Support for SUSE Commercial Images
  • Price Reduction in Selected Availability Zones
  • OrcaTerm Proxy IP Addresses Updates
  • Windows Server 2003 System Images End of Support Announcement
  • Pay-as-you-go Price Adjustments for Standard S3 CVMs in the Silicon Valley Region
  • Vulnerability repairing for Linux images
  • End of Support for Windows Server 2008 R2 Enterprise Edition SP1 64-bit System Images
  • Upgrading Virtio network card drive for Windows CVMs
  • Solution to Tomcat Start Failure on Ubuntu14.04
  • Stopping supporting for Ubuntu 10.04 images
  • About Configuration of Security Group Port 53
  • CVM Overview
  • Regions and Availability Zones
  • Instance Overview
  • Families and Models
  • Spot Instance
  • Storage Overview
  • Cloud Block Storage
  • Local Storage
  • Cloud Object Storage (COS)
  • Image Types
  • Official Maintenance End Plans of Operating Systems
  • TencentOS Server Introduction
  • TencentOS Server Image Update Log
  • TencentOS Server Features
  • FAQs about TencentOS Server
  • OpenCloudOS Overview
  • OpenCloudOS Image Update Log
  • Placement Group
  • Network Environment
  • Private Network Access
  • Internet Access
  • Elastic IP (EIP)
  • Elastic Network Interface (ENI)
  • Login Password
  • Cloud Workload Protection Platform
  • Anti-DDoS Basic
  • Health Check
  • Monitoring & Alarming
  • Access Control Overview
  • Authorizable Resource Type
  • Authorization Policy Syntax
  • APIs Supporting CAM
  • Billing Overview
  • Billing Mode
  • Purchasing Channels
  • Notes for Purchasing from Console
  • Purchase Limits
  • No Charges When Shut Down for Pay-as-You Go Instances
  • Cloud Disk Types
  • Pricing List
  • Matching Rules
  • Reserved Instance User Guide
  • Creating Reserved Instance
  • Public Network Billing
  • Public Network Fee
  • Public Network Bandwidth Cap
  • Adjusting Public Network Billing
  • Image Billing Description
  • Elastic IP Billing
  • Payment Overdue
  • Paying the Difference for Disk Media Type Changes
  • Choosing a Billing Mode
  • Types of Instance
  • Configuring Disk
  • Network Planning
  • Configuring Security Groups
  • Estimating Costs
  • Customizing Linux CVM Configurations
  • Customizing Windows CVM Configurations
  • Operation Guide Overview
  • Switching Instance Page View in Console
  • Guidelines for Creating Instances
  • Creating Instances via CVM Purchase Page
  • Creating Instances via Images
  • Purchasing Similar Instances
  • Generating API Explorer Reusable Scripts to Create Instances
  • Batch Sequential Naming or Pattern String-Based Naming
  • Changing Instance Configuration
  • Adjusting Network Configuration
  • Adjusting Project Configuration
  • Suggestions on Adjusting Instance Configuration
  • Viewing Instance Information
  • Querying Instance Metadata
  • Renaming Instances
  • Resetting Instance Password
  • Getting Private IP Addresses and Setting DNS
  • Modifying Private IP Addresses
  • Getting Public IP Addresses
  • Changing Public IP Addresses
  • Retrieving Public IP Address
  • Changing Instance Subnet
  • Changing Security Group
  • Searching for Instances
  • Exporting Instance List
  • Renewing Instances
  • Querying the Repossession Status of a Spot Instance
  • Shutting Down Instances
  • Restarting Instances
  • Logging In To Linux Instance (Web Shell)
  • Logging In To Linux Instance (SSH Key)
  • Logging In To Linux Instances (Remote Login)
  • Logging In To Linux Instances (VNC)
  • Logging In To Linux Instances (Mobile Devices)
  • Logging in Using Standard Method (Recommended)
  • Logging In to Windows Instance Using RDP
  •  Logging into Windows Instance via Remote Desktop
  • Logging into Windows Instance via VNC
  • Logging in to a Windows Instance from Mobile Devices
  • Reinstalling System
  • Using Tencent Cloud Automation Tools to execute commands
  • Terminating/Returning Instance in Console
  • Enabling Instance Termination Protection
  • Instance Repossession or Recovering
  • Spot Instances
  • No Charges When Shut Down for Pay-as-You-Go Instances
  • Starting Up Instances
  • Managing Roles
  • Creating a Custom Image
  • Image Replication
  • Sharing Custom Images
  • Cancelling Image Sharing
  • Deleting Custom Images
  • Checking Virtio Drivers in Linux
  • Installing Cloudbase-Init on Windows
  • Installing Cloud-Init on Linux
  • Converting Image Format
  • Forcibly Importing Image
  • Exporting an image
  • Preparing a Linux Image
  • Creating Windows Images
  • Migrating CentOS to TencentOS Server
  • Online Migration Directions
  • Migrating with a Migration Tool
  • Migrating via the Console
  • Migrating Linux Instances Using Tools
  • Migrating via Private Network
  • Compatibility and Tool Configuration Description
  • Migration Time Estimation
  • Description
  • Offline Migration
  • Expanding Cloud Disks
  • Changing Disk Media Type
  • Adjusting Cloud Disk Types
  • Common Public IP
  • Configuring a Public Gateway
  • Switching to VPC
  • EIP Direct Connection
  • Maintenance Task Type and Processing Policy
  • Viewing Maintenance Task
  • Authorizing Maintenance Policy and Scheduling Maintenance Time
  • Configuring Preset Authorization Policy
  • Configuring Maintenance Task Alarm Notification
  • Security Group
  • Creating a Security Group
  • Adding Security Group Rules
  • Associating CVM Instances with Security Groups
  • Viewing Security Groups
  • Deleting a Security Group
  • Remove from Security Groups
  • Cloning Security Groups
  • Adjusting Security Group Priority
  • Viewing Security Group Rules
  • Modifying Security Group Rules
  • Importing Security Group Rules
  • Exporting Security Group Rules
  • Deleting Security Group Rules
  • Security Group Use Cases
  • Server Common Port
  • Security Group API Overview
  • Protection of Sensitive Operations
  • Managing Login Password
  • Managing SSH Keys
  • Spread Placement Group
  • Unblocking Port 25
  • Managing Instances via Tags
  • Editing Tags
  • Getting Monitoring Statistics
  • Creating Alarm Policies
  • Sample Console Configuration
  • Best Practices
  • Choosing the CVM Model
  • Setting up a Website
  • References Overview
  • Install and Configure IIS
  • Manual Setup of LNMP (CentOS 8)
  • Manual Setup of LNMP (CentOS 7)
  • Manual Setup of LNMP (CentOS 6)
  • Manual Setup of LNMP (openSUSE)
  • Manual Setup of Node.js
  • Manual Setup of Java Web
  • Manual Setup of LAMP
  • Step2: Install and Configure PHP
  • Step3: Install and Build MySQL
  • Building a WordPress Website (Linux)
  • Building a WordPress Website (Windows)
  • Building Up a Discuz! Forum
  • Setting up Drupal

Setting up a Ghost Blog

  • Setting Up an FTP Site (Windows)
  • Setting Up an FTP Site (Linux)
  • NTP Service of Tencent Cloud
  • Setting Up NTP Service (Linux)
  • Transitioning from ntpdate to ntpd (Linux)
  • Setting Up NTP Service (Windows)
  • Building Microsoft SharePoint 2016
  • Building the Primary/Secondary PostgreSQL Architecture
  • Installing BT Panel for Windows
  • Building the Docker
  • Building GitLab
  • Building RabbitMQ
  • Building a Visual Ubuntu Desktop
  • Building a Visual CentOS Desktop
  • Data Backup
  • Migrating CVM Instances
  • Copying Local Files to CVMs
  • Uploading Files from MacOS to Windows CVM Using MRD
  • Uploading Files from Linux to Windows CVM using RDP
  • Uploading Files from Linux to a CVM Using FTP
  • Uploading files via WinSCP to a Linux CVM from Windows
  • Uploading Files from Windows to a CVM Using FTP
  • Uploading Files from Linux or MacOS to Linux CVM via SCP
  • Uploading Files from Windows to a Windows CVM via MSTSC
  • Other CVM Operations
  • CVM Access to COS via a Private Network
  • Recovering Data on Linux CVMs
  • Managing Disk Space on Windows CVMs
  • Changing Kernel of a Linux Instance Manually
  • Setting Up Windows-based AD Domain on a CVM
  • Network Performance Test
  • Using Netperf
  • Using USB/IP to Share USB Devices in Linux
  • Using RemoteFx to Redirect USB Devices in Windows
  • Using AVX-512 Instructions to Accelerate AI Applications on CVM
  • Building Tencent SGX Confidential Computing Environment
  • Configuring Persistent Memory in M6p Instances
  • Calling Cloud APIs via Python to Share Custom Images in Batches
  • Initializing Data Disks (Windows CVM)
  • Formatting & Mounting Data Disks
  • Reading/Writing EXT Data Disks after Reinstalling a Linux CVM to Windows CVM
  • Read/Write of the Original NTFS Data Disk After the Operating System Is Changed from Windows to Linux
  • Modifying etc/hosts Configuration of Linux Instance
  • Linux Power Management Configuration
  • Accelerating Software Package Downloading and Updating with Tencent Cloud Software Source
  • Installing Software via Apt-get (Ubuntu)
  • Installing Software via YUM (CentOS)
  • Installing Software via zypper (SUSE)
  • Switching CentOS 6 Source to YUM Repository
  • Installing chronyd Service on CentOS 8
  • Configuring Custom Data (Linux CVM)
  • Setting Custom Data (Windows CVM)
  • Activating Windows with slmgr Command
  • Windows Server System Activation
  • System Updates
  • System Shutdown
  • Configuring High-performance Power Management
  • Windows Recovery Mode
  • Use of the atop Monitoring Tools by Linux Instances
  • Ensuring Unique SIDs for CVMs Using Sysprep
  • Modifying VNC Resolution
  • Introduction to Linux Kernel Parameters
  • Updating the Virtio ENI Driver
  • Modifying SID
  • Booting into Linux Single User Mode
  • Using Rescue Mode
  • Setting Up Windows CVM for Multi-user Remote Login
  • Modifying the Default Remote Port of CVM
  • Getting Instance Login Logs
  • CVM Login Failures
  • Windows Instance Login Failures
  • An authentication error occurred when you tried to log in to a Windows instance remotely
  • Failed to Reset the CVM Password or the CVM Password Is Invalid
  • Windows instance: no remote Desktop license server can provide license
  • Requires network-level identity verification
  • Problems occurred when you tried to log in to a Windows CVM remotely on Mac
  • Failed to log in to a Windows CVM due to high CPU and memory usage
  • Failed to connect to a remote computer through Remote Desktop
  • Credentials Not Work
  • Connection to a Windows CVM through Remote Desktop was denied
  • Remote Login Failure Due To Port Issues
  • Linux Instance Login Failures
  • Unable to Log in to a Linux Instance via SSH Key
  • Failing to log in to a Linux CVM due to high CPU and memory usage
  • Remote Login Failure due to Port Issues
  • VNC Login Error (Module is Unknown)
  • VNC Login Error (Account Locked due to XXX Failed Logins)
  • VNC Login Error (Login Failed with Correct Password)
  • VNC or SSH Login Error (Permission Denied)
  • Login Failure Due to /etc/fstab Configuration Errors
  • sshd Configuration File Permissions
  • Infinite Loop Call in /etc/profile
  • Login Failure Due to Server Isolation
  • Login Failure Due to High Bandwidth Occupation
  • Remote Connect Failure Due to Security Group Settings
  • Troubleshooting Linux Instance Issues via VNC and Rescue Mode
  • Failed to shut down or restart a CVM
  • Network Namespace Creation Failure
  • Kernel and IO Issues
  • Missing System bin or lib Soft Link
  • Suspected Infection with Virus
  • "no space left on device" Error During File Creation
  • High Memory Utilization
  • Log Error “fork: Cannot allocate memory”
  • VNC Login Error “Cannot allocate memory”
  • Triggering Out of Memory When There is Available Memory
  • Cross-MLC-Boarder Linkage Latency
  • Website Access Failure
  • Slow Website Access
  • Incorrect Multi-Queue ENI Configuration
  • CVM Network Latency and Packet Loss
  • Network Packet Loss
  • Ping Failures
  • Domain Name Resolution Failure (CentOS 6.X System)
  • Introduction
  • API Category
  • Request Structure
  • Common Params
  • Signature v3
  • DescribeZones
  • DescribeRegions
  • DescribeInstances
  • DescribeInstanceFamilyConfigs
  • DescribeZoneInstanceConfigInfos
  • DescribeInstanceTypeConfigs
  • DescribeInstancesOperationLimit
  • DescribeInstanceVncUrl
  • InquiryPriceRunInstances
  • InquiryPriceResetInstance
  • InquiryPriceResetInstancesType
  • InquiryPriceResizeInstanceDisks
  • RunInstances
  • StartInstances
  • RebootInstances
  • StopInstances
  • ResetInstance
  • TerminateInstances
  • ResetInstancesType
  • ResizeInstanceDisks
  • ResetInstancesPassword
  • ModifyInstancesAttribute
  • ModifyInstancesProject
  • InquirePricePurchaseReservedInstancesOffering
  • DescribeReservedInstancesConfigInfos
  • DescribeInstancesStatus
  • PurchaseReservedInstancesOffering
  • DescribeChcHosts
  • RemoveChcDeployVpc
  • RemoveChcAssistVpc
  • ModifyChcAttribute
  • ConfigureChcDeployVpc
  • ConfigureChcAssistVpc
  • DescribeChcDeniedActions
  • DescribeDisasterRecoverGroups
  • DescribeDisasterRecoverGroupQuota
  • CreateDisasterRecoverGroup
  • ModifyDisasterRecoverGroupAttribute
  • DeleteDisasterRecoverGroups
  • DescribeImages
  • DescribeImageSharePermission
  • DescribeImportImageOs
  • DescribeImageQuota
  • CreateImage
  • ModifyImageSharePermission
  • ModifyImageAttribute
  • DeleteImages
  • ImportImage
  • ExportImages
  • DescribeKeyPairs
  • CreateKeyPair
  • AssociateInstancesKeyPairs
  • DisassociateInstancesKeyPairs
  • DeleteKeyPairs
  • ModifyKeyPairAttribute
  • ImportKeyPair
  • AssociateSecurityGroups
  • DisassociateSecurityGroups
  • DescribeInternetChargeTypeConfigs
  • InquiryPriceResetInstancesInternetMaxBandwidth
  • ResetInstancesInternetMaxBandwidth
  • ModifyInstancesVpcAttribute
  • DescribeLaunchTemplates
  • ModifyLaunchTemplateDefaultVersion
  • DescribeLaunchTemplateVersions
  • DeleteLaunchTemplateVersions
  • DeleteLaunchTemplate
  • CreateLaunchTemplateVersion
  • CreateLaunchTemplate
  • Error Codes
  • Region and Availability Zone
  • Purchasing and Renewing
  • Login and Connect to Instances
  • A CVM Instance Cannot Be Found
  • Adjusting Configuration
  • Big Data Instance
  • System Disks
  • Backup and Restore
  • Mounting and Unmounting Cloud Disks
  • Resizing Cloud Disks
  • Using Cloud Disks
  • Custom Images
  • Copying Images
  • Changing Images (Reinstalling System)
  • Cloud-Init & Cloudbase-Init
  • FAQs about Red Hat Enterprise Linux Image
  • Service Migration
  • Elastic Public IP
  • Elastic Network Interface
  • Public Network Bandwidth
  • Password Login and SSH Key Login
  • Security Group Rules
  • Security Groups
  • Operating Systems
  • Common Operations and Commands
  • Uploading Files
  • Access Control
  • NTP Service
  • CVM Service Level Agreements
  • Red Hat Enterprise Linux Image Service Agreement
  • Tencent Cloud Public IP Service Level Agreement

Ghost is a free and open source blogging platform written in JavaScript and distributed under the MIT License, designed to simplify the process of online publishing for individual bloggers as well as online publications. This article describes how to setup Ghost on a CVM.

To setup Ghost, you should be familiar with Linux and its common commands, such as Install Software via Apt-get under Ubuntu Environment .

This article uses the following software:

  • Linux operating system. This article uses Ubuntu 20.04.
  • Nginx 1.18.0 is used to provide web service.
  • MySQL 8.0.25 is used for database.
  • Node.js 14.17.0 is our runtime environment.
  • Ghost 4.6.4


You should have a Linux CVM. If you have not purchased one yet, see Getting Started with Linux CVMs .

  • A domain name that points to your CVM. If the domain name is used for Mainland China service, ICP filing is required.

Step 1 Logging in to a Linux instance

  • Log in to a Linux instance using WebShell (recommended) . You can also use other login methods that you are comfortable with:
  • Log in to a Linux instance using remote login software .
  • Logging In to a Linux Instance using SSH

Step 2 Create a new user

After logging in, switch to root . Refer to this article for details.

Run the following command to create a user named user .

Do not use ghost as the username. It causes conflicts with Ghost-CLI.

Input and confirm password as prompted. Password is not shown by default. Press Enter to continue.

Input user information. Or press Enter to skip them and continue.

ghost blog port

Run the following command to add user privileges.

Run the following command to switch to user user .

Step 3 Update installed packages

Run the following commands to update installed packages.

Input the password for user as prompted and press Enter to start.

Step 4 Environment setup

Install nginx.

Run the following command to install Nginx.

Install and configure MySQL

Run the following command to install MySQL.

Run the following command to connect to MySQL.

Run the following command to create a database for Ghost named ghost_data .

Run the following command to set a password for the database user root .

Run the following command to quit MySQL.

Install Node.js

Run the following command to set a default Node.js version to be used.

Run the following command to install Node.js.

Install Ghost-CLI

Run the following command to install Ghost-CLI which helps configuring Ghost.

Step 5 Install and configure Ghost

  • Run the following commands. sudo mkdir -p /var/ www/ghost

Run the following command to install Ghost.

ghost blog port

Enter your blog URL : input your domain name in the format of http://your_domain_name .

Enter your MySQL hostname : input your database address. Use localhost in this case and press Enter .

Enter your MySQL username : input the username you use to connect to MySQL. Use root in this case and press Enter .

Enter your MySQL password : input the corresponding password you set earlier and press Enter .

Enter your database name : input the name of the database you created for Ghost in the previous step . Use ghost_data and press Enter .

Input Y or n to complete the configuration. The admin URL appears on the bottom of the screen.

ghost blog port

You can invite others to create blogs, or skip this step.

ghost blog port

If you encounter a problem when using CVM, refer to the following documents for troubleshooting based on your actual situation.

  • For issues regarding CVM login, see Password Login and SSH Key Login and Login and Remote Access .
  • For issues regarding the CVM network, see IP Addresses and Ports and Security Groups .
  • For issues regarding CVM disks, see System and Data Disks .

Was this page helpful?


Contact our sales team or business advisors to help your business.

Open a ticket if you're looking for further assistance. Our Ticket is 7x24 avaliable.

ghost blog port

Instantly share code, notes, and snippets.


janikvonrotz / Install Ghost Blog.md

  • Star 8 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist

Finishing this guide you'll get:

  • A running Ghost installation
  • Amazon SES mail configuration
  • Simple ssh hardenings
  • Nginx proxy
  • Node.js configured with forever

Specification of latest running installation:

  • Date: 21.01.2014
  • OS: Ubuntu 64 bit - 12.04.4 LTS
  • Provider: Amazon EC2
  • Mail service: Amazon SES
  • Browser: Google Chrome - 31.0.1650.63
  • Node: 0.10.24
  • npm: 1.3.21


  • Server is behind a firewall, that only allows http, https and ssh
  • The server is accessed with ssh keys (user password authentication must be disabled)
  • Server is not accessed with the root user
  • You're able to edit files with VI

Update Ubuntu

Install additional packages

Change the default ssh port and disable root login

Restart the ssh service

Update firewall rules now to enable ssh connection with your custom port

Reconnect your ssh host with the new port number

Install Fail2Ban

Copy the configuration file

Edit the config file

Make the following changes:

Finish editing and restart fail2ban service

Edit the network configuration file

Paste the this configuration file to improve network security

You can install node either from website or the from the git repo.

Install from source

Download Node.js with wget

Unpack Node.js

Install Node.js

Check version of Node.js and npm

Install with Git

Clone the Node.js repo

Check git tags to find the latest version

See the latest stable version on http://nodejs.org/

Checkout the latest version

Update Node.js

Depending on how you've installed Node.js theres an update strategy

from source

Repeat the installation process above

Pull down the latest source code

Compile the latest version

Install Nginx

Create a Nginx site configuration file

Paste this config

Create a symlink to your config file

Restart Ngnix

In case you'll get this error

Create the website folder

Download Ghost with wget

Unpack Ghost

Install Ghost

In case of errors for sqlite3 installation

Install forever

Configure Ghost (productive environment only)

Start Ghost

Start Ghost without forever

Check if Ghost is running

Register your Ghost Account

Ghost uses Nodemailer to send e-mails, this modules has to be configured. Ghost supports various mail providers, you can see all of them in the Ghost mail documentation

Amazon's SES (Simple EMail Service) provides a reliable service to send mails.

  • Amazon Account
  • Verified domain and mail address on SES

Create a new user in the IAM service console and store the access keys in a secure place.

Allow new user to send mail via SES with this policy configuration

Edit the Ghost config

Add this mail configuration

Update mail settings

And add this mail configuration

Now you should be able to reset your Ghost password

However at the time of writting this mail configuration doesn't seem to work despite it's an offical Ghost configuration

In case you'll get this error when trying to reset your password

Replace the the Ghost mail configuration with

You can get your smtp settings here

Install Node Install Node on Ubuntu Install Ghost Deployment of Ghost sqlite3 troubleshooting nginx fix hash buck size Install Ghost on Ubuntu, Nginx and MySQL Fail2Ban SSH Hardening Amazon EC2 Node Stack SES mail configuration

  • Add Backup tutorial
  • ModSecurity for Nginx
  • PageSpeed for Nginx

SES configuratio doesn't now working, even with a provided fix

Issues solved

Sign up for a Ghost account might not possible

Backup (coming soon)

http://manpages.ubuntu.com/manpages/intrepid/man1/s3cmd.1.html http://mikerogers.io/2013/08/01/backing-up-site-to-s3-on-ubuntu.html http://9ol.es/TheEmperorsNewClothes.html

How to Configure Ghost with Mailgun

Guide to setup Mailgun with Ghost CMS. How to configure Mailgun and update Ghost configuration then test the implementation. Setup for Ghost Members with Mailgun.


If you are using Ghost Pro Mailgun is configured by default and works out of the box but if you use the Self Hosted version of Ghost for example on DigitalOcean you can use Mailgun.

Mailgun is an email automation service that offers the possibility to send, receive and track emails effortlessly.

Mailgun Config

  • Create a Mailgun account and log in.
  • Under the Domains section click Add New Domain . (Hint: copy the password, you will need it later)
  • Enter the domain from where you want to send the emails.
  • Update your DNS records to verify that you are an authorized for the domain.
  • Verify your domain in Mailgun (when DNS changes propagate).

Ghost config

Next step is to update the production configuration of the Ghost instance on the server. Open the config.production.json file in your Ghost root directory.

In this file there is a section responsible for mails.

  • service - defines which mail service we use, in this case Mailgun
  • host and port these two properties can be found going to Domain Settings then SMTP credentials
  • host - depends on the region, in our case smtp.eu.mailgun.org
  • port - Mailgun servers usually listen on several ports (ex. 25, 587, and 465)
  • secure - if want to force a secure SMTP connection

After adding all the settings and saving the config file, restart Ghost:

Test Config

To test the configuration login in to the Ghost Admin Interface Go to Labs and at the bottom of the page under Test email configuration click Send .

You can check your email, you should have received the test email.

Mailgun & Ghost Members

If you are using the Members feature, in order to send emails to people who subscribed to your publication, you have to do some additional setup within Ghost Admin:

  • Go to Labs and Members section
  • Click Expand in the Email Settings.
  • Fill the From Address , members will receive emails from this address
  • Fill Mailgun region and Mailgun domain , from your Mailgun account.
  • Fill Mailgun API Key

Ghost Members Mailgun Config

To get the Mailgun API Key, in your Mailgun Dashboard go to Settings then API Keys and copy the Private API Key .

To test this as well, open any post and go to the Post Settings then click Email newsletter . You can set an email where you want to send the test email. Then click Send test email .

That's it, you should have a complete Mailgun Configuration for your self hosted Ghost CMS.

More in Guides & Tutorials

How to add a scroll-based progress bar to your ghost cms site.

Learn how to add a scroll-based progress bar to your Ghost CMS site using plain JavaScript and CSS, enhancing user experience and engagement.

How to update your Ghost site URL when self-hosting

A step by step guide to changing the URL of your Ghost CMS site when self-hosting. From setting up your domain DNS and Ghost config, to creating the SSL certificate

How to integrate the Applause Button into your Ghost theme

Enhance user engagement on your Ghost theme with the Applause Button. Learn how to integrate this interactive feature and boost reader participation.

How to Create Related Posts Section in Ghost

Guide on how to show related posts section in a Ghost Blog. Step by step instructions and code snippets to create related posts for a Ghost CMS Theme.

How to Serve JSON or XML Data in Ghost

How to serve static JSON, XML or text data from your Ghost theme, with custom routes and template files.

How to Change Your Default Post Template in Ghost

Tutorial for changing the default post template in your Ghost theme. Change the existing template, or switch on of the custom ones your theme comes with.

Get the best managed Ghost CMS hosting and focus on bringing value to your audience.

  • All modules
  • Supported modules
  • Modules with tasks
  • Publish a module

About Forge

  • Approved Modules Program
  • API Documentation

Getting Started

  • Puppet Training
  • Module Fundamentals
  • Beginner's Guide to Modules
  • Puppet Development Kit
  • Supported or Approved
  • RedHat Linux
  • Debian Linux
  • Fedora Linux
  • Ubuntu Linux


9,454 latest version

5.0 quality score We run a couple of automated scans to help you access a module's quality. Each module is given a score based on how well the author has formatted their code and documentation and modules are also checked for malware using VirusTotal. Please note, the information below is for guidance only and neither of these methods should be considered an endorsement by Puppet.

Version information

  • 0.2.0 (deleted)

This version is compatible with:

  • Puppet Enterprise 3.x
  • Puppet >= 3.3.0
  • 12.04, 14.04 Ubuntu , 7.0, 6.0 RedHat

This module has been deprecated by its author since Oct 27th 2017 .

The author has suggested puppet-ghost as its replacement.

Start using this module

  • Manual installation
  • Direct download

Add this module to your Puppetfile:

Add this module to your Bolt project:

Manually install this module globally with Puppet module tool:

Direct download is not typically how you would use a Puppet module to manage your infrastructure, but you may want to download the module in order to inspect the code.


Andschwa-ghost, table of contents, module description, what andschwa-ghost affects, beginning with andschwa-ghost.

  • Usage - Configuration options and additional functionality
  • Limitations - OS compatibility, etc.
  • Development - Guide for contributing to the module

This module installs the Ghost Blogging Platform.

It is in beta development and tested on Ubuntu 12.04 and 14.04, loosely tested on CentOS.

This module is intended for Ubuntu. It essentially follows the Linux docs and deployment instructions by using wget to grab the latest Ghost distribution, unzips it, runs npm install --production , configures the config file via a template (if desired), adds a proletaryo/supervisor program to run Ghost, includes puppetlabs/nodejs class, adds the ghost user and group, and finally starts ghost.

  • /home/ghost/
  • /etc/supervisor/conf.d/ghost_<blog>.conf

The simplest use of this module is:

This module has one main class, ghost , with the following parameters:

It delegates the user and group resources to ghost::setup , which executes npm config set registry https://registry.npmjs.org/ to ensure the npm registry is correctly set (necessary at least on Ubuntu 12.04), and includes a module to setup nodejs.

The socket file created by Ghost must be readable by the web server (perhaps Nginx) for communication to take place, but its default permissions of 660 do not allow this. Because the Ghost server creates the socket file on each launch, it is impossible to control its permissions through Puppet. The best solution to this predicament (see issue #14) is to add your web server's user to Ghost's group (e.g. usermod -a -G ghost www-data ), which will allow it to read the socket.

Ghost requires an up-to-date nodejs, which can be done automatically by setting that class's manage_repo parameter to true. If the nodejs class is not defined elsewhere, this module will simply include it.

The module has one main resource, ghost::blog , with the following parameters:

These resources can be declared using Hiera by providing a hash to ghost::blogs specifying the blog resources and their parameters, like this:

It is imperative that each separate instance has a different URL and port.

You can disable management of the config.js file by setting $manage_config to false.

You can disable the use and setup of supervisor by setting $use_supervisor to false.

Note that at least on my Ubuntu test systems, the supervisor module's execution of supervisorctl update fails; this can be fixed by manually running that command, letting it do its thing, and then re-provisioning.

You will likely want to proxy these using, say, nginx . Although the inclusion of nginx is outside the scope of this module, if you are using the jfryman/nginx module, you can declare the virtual hosts to proxy the blogs via Hiera like so:


This module only officially supports Ubuntu, but ought to work with other operating systems as well.

If managing the blog's config.js via this module, you cannot currently setup Postgres.

If supervisor is not registering the blogs, restarting your system is the easiest solution (as always), but you should also try supervisorctrl reread && supervisorctl reload .

Upgrading from 0.1.x

To upgrade to 0.2.x from 0.1.x, you need to be aware of some major changes:

  • The license has changed from MIT to GNU Affero
  • The Ghost source parameter has been moved to ghost::blog
  • Blog's can have different settings for home (root of Ghost)
  • The proletaryo/supervisor module is now used to create a supervisor program in a cross-platform manner
  • The puppetlabs/nodejs module is now used to install nodejs and npm in a cross-platform manner
  • The 'development' config settings have been removed, in favor of setting up only production url , host , and port parameters
  • By default, Ghost is now setup to listen on a Unix socket at the location of the socket parameter (false disables this and falls back to host and port)
  • For most common uses, the socket file must have 'other' read/write permissions, and this is done with an exec because Ghost creates the socket file (Puppet is incapable of this)
  • Mail parameters transport , fromaddress , and a mail_options hash can be specified for each blog
  • The wget module dependency has been deprecated in favor of a simple call to curl


Fork on GitHub , make a Pull Request.


  • puppetlabs/stdlib  ( >= 4.1.0 < 5.0.0 )
  • puppetlabs/nodejs  ( >= 0.6.1 < 2.0.0 )
  • proletaryo/supervisor  ( >= 0.4.0 )


  1. How to Setup Ghost blog in docker with SSL using Letsencrypt

    ghost blog port

  2. Ghost Blogging: What It Is and the Top 5 Platforms

    ghost blog port

  3. How to Set Up a Ghost Blog in AWS including a CDN ($6/month)

    ghost blog port

  4. How to Set Up a Ghost Blog in AWS including a CDN ($6/month)

    ghost blog port

  5. Docker Guide: Deploying Ghost Blog with MySQL and Traefik with Docker

    ghost blog port

  6. Synology

    ghost blog port


  1. How to Find the Right Ghost Writer for Your Project

    Finding the right ghost writer for your project can be a daunting task. With so many writers out there, it can be hard to know which one is best suited to your project. Here are some tips on how to find the right ghost writer for your proje...

  2. What Moves Are Effective Against Ghost Pokemon?

    Dark and ghost-type attacks are the most effective attacks to use against ghost-type Pokemon, such as Gengar and Shuppet. On the other hand, fighting and normal-type attacks generally have no effect at all against ghost types.

  3. What Is a Ghost Credit Card?

    A ghost credit card is a credit card number assigned to a business department available for use by multiple employees. Ghost credit cards are sometimes issued in lieu of a traditional company procurement card.

  4. Configuration

    The server host and port are the IP address and port number that Ghost listens on for requests. By default, requests are routed from port 80 to Ghost by

  5. Ghost-CLI

    # URL of the site including protocol · --url https://mysite.com · # Admin URL of the site · --admin-url https://admin.mysite.com · # Port that Ghost should listen

  6. How to change your Ghost Port

    Changing your Ghost port can be useful if you want to run your Ghost blog on the standard HTTP port 80 or if you wish to configure it on a

  7. How to install Ghost locally on Mac, PC or Linux

    Fast-track local install for getting Ghost running on your computer or setup for doing theme development. Overview. Running Ghost locally is the easiest way

  8. Как запустить Ghost блог на постоянное выполнение

    blog.mysite.com', mail: {}, database: { client: 'sqlite3', connection

  9. ghost

    ghost/blog:/var/lib/ghost/content \ ghost:alpine. Note: database__

  10. Ghost Configuration Tutorial

    The numbers after your domain name represent the Node port which services all requests to your Ghost blog. As Node is a standalone service, it requires a

  11. Setting up a Ghost Blog

    For issues regarding the CVM network, see IP Addresses and Ports and Security Groups. For issues regarding CVM disks, see System and Data Disks.

  12. Install Ghost Blog #Ghost #Ubuntu #Markdown #Nginx #Node.js

    [ssh] port = [custom ssh port number]. And [ssh-ddos] enabled = true port

  13. How to Configure Ghost with Mailgun

    port - Mailgun servers usually listen on several ports (ex. 25, 587 ... Guide on how to show related posts section in a Ghost Blog. Step by

  14. andschwa/ghost · Install and Manage Ghost Blog

    The 'development' config settings have been removed, in favor of setting up only production url , host , and port parameters; By default, Ghost is now setup to