{"id":51852,"date":"2025-09-29T05:14:04","date_gmt":"2025-09-29T02:14:04","guid":{"rendered":"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/"},"modified":"2025-09-29T05:14:05","modified_gmt":"2025-09-29T02:14:05","slug":"how-to-configure-ghost-step-by-step","status":"publish","type":"post","link":"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/","title":{"rendered":"How to Configure Ghost Step by Step"},"content":{"rendered":"<p><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_80 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Getting_ready_prerequisites_and_decisions\" >Getting ready: prerequisites and decisions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Install_Ghost-cli_and_system_dependencies\" >Install Ghost-cli and system dependencies<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Install_Ghost_using_Ghost-CLI\" >Install Ghost using Ghost-CLI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Configure_Nginx_and_HTTPS\" >Configure Nginx and HTTPS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Set_up_email_smtp_for_signups_and_invites\" >Set up email (smtp) for signups and invites<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Essential_configuration_file_configproductionjson\" >Essential configuration file: config.production.json<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Docker_installation_option\" >Docker installation option<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Themes_customization_and_Code_Injection\" >Themes, customization and Code Injection<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Members_subscriptions_and_Stripe_payments\" >Members, subscriptions and Stripe payments<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Backups_and_updates\" >Backups and updates<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Troubleshooting_common_issues\" >Troubleshooting common issues<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Security_and_maintenance_tips\" >Security and maintenance tips<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Summary\" >Summary<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#FAQs\" >FAQs<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Can_I_run_Ghost_on_a_Shared_Hosting_provider\" >Can I run Ghost on a Shared Hosting provider?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Do_I_have_to_use_MySQL\" >Do I have to use MySQL?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#How_do_I_enable_HTTPS_for_my_site\" >How do I enable HTTPS for my site?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#Whats_the_easiest_way_to_accept_paid_subscriptions\" >What\u2019s the easiest way to accept paid subscriptions?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-ghost-step-by-step\/#How_can_I_test_configuration_changes_safely\" >How can I test configuration changes safely?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Getting_ready_prerequisites_and_decisions\"><\/span>Getting ready: prerequisites and decisions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    Before you begin configuring Ghost, decide whether you want <a href=\"https:\/\/infinitydomainhosting.com\/kb\/how-to-configure-2fa-step-by-step\/\">a<\/a> <a href=\"https:\/\/www.a2hosting.com\/wordpress-hosting\/managed\/\" target=\"_blank\" rel=\"noopener\">managed<\/a> service (Ghost(Pro)) or to self-<a href=\"https:\/\/www.a2hosting.com\/\" target=\"_blank\" rel=\"noopener\">host<\/a>. Managed Ghost removes server maintenance and backups, while self-<a href=\"https:\/\/hostadvice.com\/\" target=\"_blank\" rel=\"noopener\">hosting<\/a> gives you full control over infrastructure, updates and custom integrations. For self-<a href=\"https:\/\/hostadvice.com\/\" target=\"_blank\" rel=\"noopener\">hosting<\/a>, a common choice is an <a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-ubuntu\" target=\"_blank\" rel=\"noopener\">ubuntu<\/a> LTS server (20.04 or later) with at least 1 GB RAM for small <a href=\"https:\/\/www.hostinger.com\/tutorials\/blog-examples\" target=\"_blank\" rel=\"noopener\">blogs<\/a> and 2 GB+ for production sites with members and payment features. You\u2019ll also need a <a href=\"https:\/\/www.a2hosting.com\/domains\/\" target=\"_blank\" rel=\"noopener\">domain name<\/a>, <a href=\"https:\/\/infinitydomainhosting.com\/index.php?rp=\/knowledgebase\/128\/How-to-manage-your-DNS-settings-for-your-domain.html\">DNS<\/a> control, and either <a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-mysql\" target=\"_blank\" rel=\"noopener\">mysql<\/a> (recommended for production) or the default <a href=\"https:\/\/www.hostinger.com\/tutorials\/sqlite-vs-mysql-whats-the-difference\/\" target=\"_blank\" rel=\"noopener\">sqlite<\/a> for small installations.\n  <\/p>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Install_Ghost-cli_and_system_dependencies\"><\/span>Install Ghost-<a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-cli\" target=\"_blank\" rel=\"noopener\">cli<\/a> and system dependencies<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    Install Node.<a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-javascript\" target=\"_blank\" rel=\"noopener\">js<\/a> (LTS), <a href=\"https:\/\/www.a2hosting.com\/kb\/developer-corner\/nginx-web-server\/installing-the-nginx-web-server\/\" target=\"_blank\" rel=\"noopener\">nginx<\/a> and Ghost-CLI. Using Ghost-CLI simplifies installation, service creation, <a href=\"https:\/\/www.a2hosting.com\/kb\/developer-corner\/nginx-web-server\/installing-the-nginx-web-server\/\" target=\"_blank\" rel=\"noopener\">nginx<\/a> configuration and <a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-ssl\" target=\"_blank\" rel=\"noopener\">ssl<\/a> via <a href=\"https:\/\/hostadvice.com\/how-to\/web-hosting\/windows\/how-to-install-lets-encrypt-in-windows-server-2022\/\" target=\"_blank\" rel=\"noopener\">let&#8217;s encrypt<\/a>. The sequence below shows <a href=\"https:\/\/www.hostinger.com\/tutorials\/linux-commands\" target=\"_blank\" rel=\"noopener\">commands<\/a> for a fresh Ubuntu server; run them as a <a href=\"https:\/\/www.hostinger.com\/tutorials\/sudo-and-the-sudoers-file\/\" target=\"_blank\" rel=\"noopener\">sudo<\/a> user.\n  <\/p>\n<p><\/p>\n<pre><code><br \/>\n<a href=\"https:\/\/hostadvice.com\/how-to\/web-hosting\/ubuntu\/how-to-use-the-apt-command-to-manage-ubuntu-packages\/\" target=\"_blank\" rel=\"noopener\">sudo apt update<\/a><br \/>\nsudo apt install -y nginx mysql-server <a href=\"https:\/\/www.hostinger.com\/tutorials\/curl-command-with-examples-linux\/\" target=\"_blank\" rel=\"noopener\">curl<\/a> unzip<br \/>\ncurl -sL  | sudo -E <a href=\"https:\/\/www.hostinger.com\/tutorials\/bash-scripting-tutorial\" target=\"_blank\" rel=\"noopener\">bash<\/a> -<br \/>\nsudo apt install -y nodejs<br \/>\nsudo npm install -g ghost-cli@latest<br \/>\n  <\/code><\/pre>\n<p><\/p>\n<p>\n    After installing MySQL, create a database and user for Ghost if you plan to use MySQL in production. For a quick test you can use SQLite, but MySQL scales better and is recommended by Ghost for production.\n  <\/p>\n<p><\/p>\n<pre><code><br \/>\nsudo mysql -u root -p<br \/>\nCREATE DATABASE ghost_production;<br \/>\nCREATE USER 'ghost'@'<a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-localhost\" target=\"_blank\" rel=\"noopener\">localhost<\/a>' IDENTIFIED BY 'your-password';<br \/>\nGRANT ALL PRIVILEGES ON ghost_production.* TO 'ghost'@'localhost';<br \/>\nFLUSH PRIVILEGES;<br \/>\nEXIT;<br \/>\n  <\/code><\/pre>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Install_Ghost_using_Ghost-CLI\"><\/span>Install Ghost using Ghost-CLI<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    Create a directory for Ghost, set ownership to the current user, then run the installer. The installer can configure Nginx and obtain a <a href=\"https:\/\/hostadvice.com\/how-to\/web-hosting\/windows\/how-to-install-lets-encrypt-in-windows-server-2022\/\" target=\"_blank\" rel=\"noopener\">let&#8217;s encrypt<\/a> certificate automatically if your <a href=\"https:\/\/www.a2hosting.com\/domains\/\" target=\"_blank\" rel=\"noopener\">domain<\/a> is pointed at the server.\n  <\/p>\n<p><\/p>\n<pre><code><br \/>\nsudo mkdir -p \/var\/www\/ghost<br \/>\nsudo chown $USER:$USER \/var\/www\/ghost<br \/>\ncd \/var\/www\/ghost<br \/>\nghost install --db mysql --dbhost localhost --dbuser ghost --dbpass \"your-password\" --dbname ghost_production --<a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-a-url\" target=\"_blank\" rel=\"noopener\">url<\/a> <br \/>\n  <\/code><\/pre>\n<p><\/p>\n<p>\n    The installer will prompt for confirmation and will set up a systemd service for Ghost, configure Nginx as a reverse proxy and enable <a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-ssl\" target=\"_blank\" rel=\"noopener\">https<\/a> automatically if <a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-dns\" target=\"_blank\" rel=\"noopener\">dns<\/a> is correct. If you prefer to avoid interactive prompts you can add flags like &#8211;no-prompt and pass all required options on the command line.\n  <\/p>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Configure_Nginx_and_HTTPS\"><\/span>Configure Nginx and HTTPS<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    Ghost-CLI typically writes an Nginx server block for you. If you need to manage Nginx yourself, ensure Nginx proxies requests to the Ghost process (usually listening on 2368 or a socket). Use strong <a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-tls\" target=\"_blank\" rel=\"noopener\">tls<\/a> settings and redirect HTTP to HTTPS. If you allowed Ghost-CLI to manage SSL, it will run certbot to obtain certificates. If you manage certificates manually or use Cloudflare, configure DNS to point <a href=\"https:\/\/support.hostinger.com\/en\/articles\/6807580-website-builder-how-to-change-a-domain\" target=\"_blank\" rel=\"noopener\">the domain<\/a> to your server and then obtain a certificate with certbot.\n  <\/p>\n<p><\/p>\n<pre><code><br \/>\n# Example Nginx snippet (reverse proxy)<br \/>\nserver {<br \/>\n    listen 80;<br \/>\n    server_name example.com www.example.com;<br \/>\n    return 301 <br \/>\n}<br \/>\nserver {<br \/>\n    listen 443 ssl;<br \/>\n    server_name example.com www.example.com;<br>ssl_certificate \/etc\/letsencrypt\/live\/example.com\/fullchain.pem;<br \/>\n    ssl_certificate_key \/etc\/letsencrypt\/live\/example.com\/privkey.pem;<br>location \/ {<br \/>\n        proxy_set_header X-Real-IP $remote_addr;<br \/>\n        proxy_set_header <a href=\"https:\/\/www.a2hosting.com\/\" target=\"_blank\" rel=\"noopener\">host<\/a> $http_host;<br \/>\n        proxy_pass <br \/>\n    }<br \/>\n}<br \/>\n  <\/code><\/pre>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Set_up_email_smtp_for_signups_and_invites\"><\/span>Set up email (<a href=\"https:\/\/www.hostinger.com\/tutorials\/smtp-port\" target=\"_blank\" rel=\"noopener\">smtp<\/a>) for signups and invites<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    To enable member signups, invites and transactional emails, configure an SMTP provider such as Mailgun, SendGrid, Postmark or any reliable SMTP server. Add the SMTP credentials to Ghost\u2019s production configuration. You can set mail in config.production.<a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-json\" target=\"_blank\" rel=\"noopener\">json<\/a> or via environment variables when using <a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-docker\" target=\"_blank\" rel=\"noopener\">docker<\/a>. Mail must be reliable; many common errors stem from incorrect credentials, blocked ports, or missing DNS records for the mail provider.\n  <\/p>\n<p><\/p>\n<pre><code><br \/>\n# Example config.production.json mail section<br \/>\n{<br \/>\n  \"mail\": {<br \/>\n    \"transport\": \"SMTP\",<br \/>\n    \"options\": {<br \/>\n      \"host\": \"smtp.mailgun.org\",<br \/>\n      \"port\": 587,<br \/>\n      \"auth\": {<br \/>\n        \"user\": \"postmaster@example.com\",<br \/>\n        \"pass\": \"your-mailgun-password\"<br \/>\n      }<br \/>\n    }<br \/>\n  }<br \/>\n}<br \/>\n  <\/code><\/pre>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Essential_configuration_file_configproductionjson\"><\/span>Essential configuration file: config.production.json<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    The config.production.<a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-json\" target=\"_blank\" rel=\"noopener\">json file<\/a> is the main place for site-level settings when running Ghost directly (not in Docker). It contains URL, server settings, database, mail and logging. Keep the URL set to your canonical <a href=\"https:\/\/www.a2hosting.com\/domains\/\" target=\"_blank\" rel=\"noopener\">domain<\/a> including https:\/\/ when using SSL. After any change to this file, restart Ghost using ghost restart or systemctl.\n  <\/p>\n<p><\/p>\n<pre><code><br \/>\n{<br \/>\n  \"url\": \"\",<br \/>\n  \"server\": {<br \/>\n    \"port\": 2368,<br \/>\n    \"host\": \"127.0.0.1\"<br \/>\n  },<br \/>\n  \"database\": {<br \/>\n    \"client\": \"mysql\",<br \/>\n    \"connection\": {<br \/>\n      \"host\": \"localhost\",<br \/>\n      \"user\": \"ghost\",<br \/>\n      \"password\": \"your-password\",<br \/>\n      \"database\": \"ghost_production\"<br \/>\n    }<br \/>\n  },<br \/>\n  \"mail\": { ... },<br \/>\n  \"logging\": {<br \/>\n    \"level\": \"info\",<br \/>\n    \"rotation\": { \"enabled\": true, \"count\": 5, \"period\": \"1w\" }<br \/>\n  }<br \/>\n}<br \/>\n  <\/code><\/pre>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Docker_installation_option\"><\/span>Docker installation option<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    If you prefer containers, Ghost provides an official Docker image. The Docker approach isolates Ghost from the host system, but you still need to manage persistence (content folder), backups and environment variables. Below is a simple docker-compose example that mounts content and sets the <a href=\"https:\/\/www.hostinger.com\/tutorials\/what-is-a-url\" target=\"_blank\" rel=\"noopener\">url and<\/a> database to use SQLite for a single-container setup. For production, pair Ghost with a separate MySQL container or external database service.\n  <\/p>\n<p><\/p>\n<pre><code><br \/>\nversion: '3'<br \/>\nservices:<br \/>\n  ghost:<br \/>\n    image: ghost:latest<br \/>\n    ports:<br \/>\n      - \"2368:2368\"<br \/>\n    environment:<br \/>\n      url: <br \/>\n    volumes:<br \/>\n      - .\/content:\/var\/lib\/ghost\/content<br \/>\n  # Use an external MySQL or a separate container for production.<br \/>\n  <\/code><\/pre>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Themes_customization_and_Code_Injection\"><\/span>Themes, customization and Code Injection<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    Customize your site by installing a theme via the Ghost admin (Design > Upload theme) or by placing theme files directly into content\/themes. After uploading a theme, activate it in the admin. Use Code Injection for site-wide header or footer scripts, and create custom templates or modify the theme\u2019s templates if you need deeper changes. When working with themes locally, use the Ghost-CLI for development: run ghost start in a development environment or use the Ember\/Handlebars workflow the themes expect.\n  <\/p>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Members_subscriptions_and_Stripe_payments\"><\/span>Members, subscriptions and Stripe payments<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    Ghost supports members and paid subscriptions natively. To accept payments, connect Stripe from the Ghost admin: open Settings \u2192 Membership \u2192 Payment settings and enter Stripe API keys. Configure membership tiers and visibility settings, and ensure your site URL and webhooks are reachable from Stripe. Test payments in Stripe\u2019s test mode before switching to live keys.\n  <\/p>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Backups_and_updates\"><\/span>Backups and updates<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    Regular backups protect content and databases. For MySQL, use <a href=\"https:\/\/hostadvice.com\/how-to\/web-hosting\/database\/how-to-backup-and-restore-mysql-databases-with-mysqldump\/\" target=\"_blank\" rel=\"noopener\">mysqldump<\/a>; for SQLite, copy the SQLite file. Always include the content folder (images, theme files) in backups. Schedule automated backups with <a href=\"https:\/\/www.hostinger.com\/tutorials\/cron-job\" target=\"_blank\" rel=\"noopener\">cron<\/a> and store them offsite (S3, remote server). For updates, Ghost-CLI offers ghost update which safely upgrades Ghost and can also handle NPM dependencies; test updates in a staging environment if you have custom themes or integrations.\n  <\/p>\n<p><\/p>\n<pre><code><br \/>\n# Backup example (MySQL)<br \/>\nmysqldump -u ghost -p ghost_production > \/backups\/ghost_production_$(date +%F).sql<br \/>\n# Backup content<br \/>\ntar -czvf \/backups\/ghost_content_$(date +%F).tar.gz \/var\/www\/ghost\/content<br \/>\n  <\/code><\/pre>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Troubleshooting_common_issues\"><\/span>Troubleshooting common issues<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    Permissions problems are common after manual file changes: ensure the Ghost installation directory is owned by the user running Ghost. If Ghost fails to start, check logs with ghost log in the installation directory or systemd logs via journalctl -u ghost_&lt;your-site&gt;. If mail isn\u2019t sending, verify SMTP credentials, test connectivity to the mail host (telnet or openssl s_client) and confirm DNS records for SPF\/DKIM as required by your provider. SSL issues usually come back to DNS not pointing to the server or rate limits from Let&#8217;s Encrypt if you requested certs too often during testing.\n  <\/p>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Security_and_maintenance_tips\"><\/span>Security and maintenance tips<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    Lock down your server by keeping packages updated, running a firewall that allows only necessary ports (80, 443, and <a href=\"https:\/\/www.a2hosting.com\/kb\/getting-started-guide\/accessing-your-account\/using-ssh-secure-shell\/\" target=\"_blank\" rel=\"noopener\">ssh<\/a> on a custom port if desired), and disabling root <a href=\"https:\/\/www.a2hosting.com\/kb\/getting-started-guide\/accessing-your-account\/using-ssh-secure-shell\/\" target=\"_blank\" rel=\"noopener\">ssh<\/a> login. Use automatic security updates where appropriate and rotate secrets like database and SMTP passwords if you suspect exposure. If you run multiple sites on one server, consider using separate systemd services and directories per site to limit impact of issues.\n  <\/p>\n<p><!--KB_CAT_BLOCK--><\/p>\n<figure class=\"kb-cat-placeholder\" style=\"margin:1.75rem 0;display:block;\">\n<div class=\"kb-cat-wrap\" style=\"position:relative; overflow:hidden; border-radius:12px; box-shadow:0 10px 36px rgba(0,0,0,0.14);\"><img src=\"https:\/\/infinitydomainhosting.com\/kb\/assets\/img\/cat-default.webp\" alt=\"How to Configure Ghost Step by Step\" loading=\"lazy\" decoding=\"async\" style=\"max-width:100%;height:auto;display:block;border-radius:12px;box-shadow:0 8px 28px rgba(0,0,0,0.12);\" \/><\/p>\n<div class=\"kb-cat-gradient\" style=\"position:absolute; inset:0; background:linear-gradient(180deg, rgba(9,23,60,0.66) 0%, rgba(11,30,70,0.45) 40%, rgba(11,30,70,0.15) 100%);\"><\/div>\n<div class=\"kb-cat-textbox\" style=\"position:absolute; inset:auto 5% 7% 5%; color:#fff; text-align:center; display:flex; flex-direction:column; gap:.4rem; align-items:center; justify-content:flex-end;\">\n<div class=\"kb-cat-title\" style=\"font-weight:800; font-size:clamp(20px,3.6vw,34px); line-height:1.2; letter-spacing:.2px; text-shadow:0 1px 2px rgba(0,0,0,.35);\">How to Configure Ghost Step by Step<\/div>\n<div class=\"kb-cat-meta\" style=\"opacity:1; font-weight:600; font-size:clamp(13px,2.6vw,16px); line-height:1.45; text-shadow:0 1px 2px rgba(0,0,0,.28);\">Getting ready: prerequisites and decisions Before you begin configuring Ghost, decide whether you want a managed service (Ghost(Pro)) or to self-host. Managed Ghost removes server maintenance and backups, while self-hosting\u2026<\/div>\n<div class=\"kb-cat-desc\" style=\"opacity:1; font-weight:500; font-size:clamp(12px,2.4vw,15px); line-height:1.5; max-width:900px; text-wrap:balance; text-shadow:0 1px 2px rgba(0,0,0,.25);\">AI<\/div>\n<\/div>\n<\/div>\n<\/figure>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Summary\"><\/span>Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<p>\n    Configuring Ghost involves choosing <a href=\"https:\/\/hostadvice.com\/\" target=\"_blank\" rel=\"noopener\">hosting<\/a>, installing Ghost-CLI or using Docker, setting up Nginx and HTTPS, connecting SMTP for members, and customizing themes. Back up your database and content regularly and test changes in a staging environment before touching production. With the right configuration and maintenance routines, Ghost runs smoothly and provides a modern publishing platform that supports members and subscriptions out of the box.\n  <\/p>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"FAQs\"><\/span>FAQs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Can_I_run_Ghost_on_a_Shared_Hosting_provider\"><\/span>Can I run Ghost on a <a href=\"https:\/\/infinitydomainhosting.com\/web-hosting.php\">Shared Hosting<\/a> provider?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><\/p>\n<p>\n    <a href=\"https:\/\/www.a2hosting.com\/web-hosting\/\" target=\"_blank\" rel=\"noopener\">shared hosting<\/a> rarely gives the control Ghost needs (Node.js, process management, or custom ports). Use a <a href=\"https:\/\/www.a2hosting.com\/vps-hosting\/\" target=\"_blank\" rel=\"noopener\">vps<\/a>, cloud instance or Ghost(Pro) for reliable production hosting.\n  <\/p>\n<p><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Do_I_have_to_use_MySQL\"><\/span>Do I have to use MySQL?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><\/p>\n<p>\n    No , Ghost can run with SQLite for small or development sites. For production deployments and better performance with backups and scaling, MySQL is recommended.\n  <\/p>\n<p><\/p>\n<h3><span class=\"ez-toc-section\" id=\"How_do_I_enable_HTTPS_for_my_site\"><\/span>How do I enable HTTPS for my site?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><\/p>\n<p>\n    Point your domain to the server and let Ghost-CLI obtain a Let&#8217;s Encrypt certificate during installation, or configure certbot\/nginx manually. Ensure DNS is correct and that ports 80 and 443 are reachable.\n  <\/p>\n<p><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Whats_the_easiest_way_to_accept_paid_subscriptions\"><\/span>What\u2019s the easiest way to accept paid subscriptions?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><\/p>\n<p>\n    Enable Members in Ghost and connect Stripe in the Ghost admin settings. Configure products (tiers) and test with Stripe test keys before going live with production keys.\n  <\/p>\n<p><\/p>\n<h3><span class=\"ez-toc-section\" id=\"How_can_I_test_configuration_changes_safely\"><\/span>How can I test configuration changes safely?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><\/p>\n<p>\n    Use a staging server or a local development instance with a duplicate of your theme and database. Test theme updates, migrations and third-party integrations there before applying to production.\n  <\/p>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Getting ready: prerequisites and decisions Before you begin configuring Ghost, decide whether you want a managed service (Ghost(Pro)) or to self-host. Managed&hellip;<\/p>\n","protected":false},"author":1,"featured_media":51853,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[2,9405,86,4593,9,1,4594,3,5,10,4,11,7,88,8],"tags":[12554,12397,12398,12558,12555,670,706,12553,12556,12557,525,406],"class_list":["post-51852","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","category-ai","category-computer-security","category-databases","category-domains","category-general","category-networking","category-php-scripts","category-seo","category-servers","category-ssl-certificates","category-support","category-web-design","category-web-hosting","category-website-security","tag-configure-ghost","tag-ghost","tag-ghost-cms","tag-ghost-configuration","tag-ghost-setup","tag-guide","tag-how-to","tag-how-to-configure-ghost-step-by-step","tag-install-ghost","tag-setup-ghost","tag-step-by-step","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/infinitydomainhosting.com\/kb\/wp-json\/wp\/v2\/posts\/51852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infinitydomainhosting.com\/kb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/infinitydomainhosting.com\/kb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/infinitydomainhosting.com\/kb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/infinitydomainhosting.com\/kb\/wp-json\/wp\/v2\/comments?post=51852"}],"version-history":[{"count":1,"href":"https:\/\/infinitydomainhosting.com\/kb\/wp-json\/wp\/v2\/posts\/51852\/revisions"}],"predecessor-version":[{"id":51854,"href":"https:\/\/infinitydomainhosting.com\/kb\/wp-json\/wp\/v2\/posts\/51852\/revisions\/51854"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/infinitydomainhosting.com\/kb\/wp-json\/wp\/v2\/media\/51853"}],"wp:attachment":[{"href":"https:\/\/infinitydomainhosting.com\/kb\/wp-json\/wp\/v2\/media?parent=51852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infinitydomainhosting.com\/kb\/wp-json\/wp\/v2\/categories?post=51852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infinitydomainhosting.com\/kb\/wp-json\/wp\/v2\/tags?post=51852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}