404 not found after successful install

I’ve installed Ghost but cannot access the admin page.

Ghost Doctor returns:

✔ Checking system Node.js version - found v18.20.8
✔ Checking logged in user
✔ Ensuring user is not logged in as ghost user
✔ Checking if logged in user is directory owner
✔ Checking current folder permissions
✔ Checking system compatibility
✔ Checking for a MySQL installation
+ sudo systemctl is-active ghost_blog-socialmediaalternatives-org
Instance is currently running
ℹ Validating config [skipped]
✔ Checking folder permissions
✔ Checking file permissions
✔ Checking content folder ownership
✔ Checking memory availability
✔ Checking binary dependencies
✔ Checking free space
✔ Checking systemd unit file
✔ Checking systemd node version - found v18.20.8

Here are the contents of my config.production.json file:

{
  "url": "https://blog.socialmediaalternatives.org",
  "server": {
    "port": 2368,
    "host": "127.0.0.1"
  },
  "database": {
    "client": "mysql",
    "connection": {
      "host": "127.0.0.1",
      "user": "asmblog",
      "password": "XXXXXXXXXXXXXXXXXX",
      "database": "asmblog_prod"
    }
  },
  "mail": {
    "transport": "Direct"
  },
  "logging": {
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "/var/www/asmblog/content"
  }
}

Here is my nginx config:

map $status $header_content_type_options {
    204 "";
    default "nosniff";
}

server {
    listen 80;
    listen [::]:80;

    server_name blog.socialmediaalternatives.org;
    root /var/www/asmblog/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;

        add_header X-Content-Type-Options $header_content_type_options;
    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}
  • What steps could someone else take to reproduce the issue you’re having?
    • Create a Digital Ocean droplet, Ubuntu 22.04
    • follow the official guide

EDITED TO ADD:

I initially ran the SSL portion of the process, and it appeared to work. My site said it had a valid SSL certificate. I’ve since tried with a different browser and it does not. So I ran “ghost setup ssl” and ran into this error:

✖ Setting up SSL
One or more errors occurred.

1) ProcessError

Message: Command failed: /bin/sh -c sudo -S -p '#node-sudo-passwd#'  /etc/letsencrypt/acme.sh --issue --home /etc/letsencrypt --server letsencrypt --domain blog.socialmediaalternatives.org --webroot /var/www/asmblog/system/nginx-root --reloadcmd "nginx -s reload" --accountemail XXXXXXXXXX --keylength 2048
[Sat Mar 29 20:58:14 UTC 2025] blog.socialmediaalternatives.org: Invalid status. Verification error details: 173.254.30.205: Invalid response from http://blog.socialmediaalternatives.org/.well-known/acme-challenge/QNcn27kOIW1KV5S4zjXU1DUU7fN9f_xS4zxsjSbSYJw: 404
[Sat Mar 29 20:58:14 UTC 2025] Please add '--debug' or '--log' to see more information.
[Sat Mar 29 20:58:14 UTC 2025] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

[Sat Mar 29 20:58:10 UTC 2025] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Sat Mar 29 20:58:10 UTC 2025] Single domain='blog.socialmediaalternatives.org'
[Sat Mar 29 20:58:11 UTC 2025] Getting webroot for domain='blog.socialmediaalternatives.org'
[Sat Mar 29 20:58:11 UTC 2025] Verifying: blog.socialmediaalternatives.org
[Sat Mar 29 20:58:12 UTC 2025] Pending. The CA is processing your order, please wait. (1/30)

Exit code: 1


Debug Information:
    OS: Ubuntu, v22.04.5 LTS
    Node Version: v18.20.8
    Ghost Version: 5.115.1
    Ghost-CLI Version: 1.27.0
    Environment: production
    Command: 'ghost setup ssl'

Additional log info available in: /home/asmblog/.ghost/logs/ghost-cli-debug-2025-03-29T20_58_14_704Z.log

Try running ghost doctor to check your system for known issues.

We’re missing something here - that might be nginx.conf, but there should be additional files in sites-enabled that actually handle the proxying, ssl, etc. Do you have additional nginx config files? Normally, you’d let Ghost generate them for you, by running ghost setup nginx

Also worth confirming that Ghost is actually up. Do you see it when you netstat -ant ? (It should be listening on port 2368, per your config file.)

Edited after your edit (:woman_shrugging: ) I think you need to get nginx basically working first, then deal with SSL. Right now, it looks like everything is a 404, so it’s not surprising that your ssl attempt has a 404 also…