Images are not loading any more on my Ghost blog from 1 click Digitalocean

If you’re looking for help, please provide information about your environment. If you delete this template and don’t provide any information, your topic will be automatically closed.

If you aren’t running the latest version of Ghost, the first thing we’ll ask you to do is update to the latest version of Ghost.

  • What’s your URL? This is the easiest way for others to help you

My blog:

  • What version of Ghost are you using? If it’s not the latest, please update Ghost first before opening your topic

Current version: 5.80.0

And

  • How was Ghost installed and configured?

Digitalocean 1 click

  • What Node version, database, OS & browser are you using?

Debug Information:

OS: Ubuntu, v22.04.3 LTS
Node Version: v18.17.1
Ghost Version: 5.80.0
Ghost-CLI Version: 1.26.0
Environment: production
Command: 'ghost update'
  • What errors or information do you see in the console?

I have multiple errors, like updating failing because no permission:

Message: 'EACCES: permission denied, mkdir '/var/www/ghost/versions/5.81.1''

And Mail related errors:


Apr 01 18:23:17 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]: [2024-04-01 18:23:17] INFO [EmailAnalytics] Aggregating for 0 emails
Apr 01 18:23:17 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]: [2024-04-01 18:23:17] INFO [EmailAnalytics] Aggregating for 0 members
Apr 01 18:23:17 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]: [2024-04-01 18:23:17] ERROR Error while fetching email analytics Not Found
Apr 01 18:23:17 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]: [2024-04-01 18:23:17] ERROR Not Found
  • What steps could someone else take to reproduce the issue you’re having?
  1. Setup Ghost From DigitalOcean 1 click
  2. Disable mailing in control panel (because I just want to post)
  3. Publish a lot
  4. Enable and setup mailing again in control panel
  5. Login terminal in DigitalOcean and accidentally make faulty json format mistake
  6. Realize you need regular user (ghost-mgr) to restart Ghost instead of as root user.
  7. I didn’t know password of regular user so I changed it.
  8. Retry and successfully added Mailgun credential and restarted Ghost.

Mailgun still doesn’t work, but I have bigger issue, old images aren’t loading…

After that it was just hell, lots of permission issues, couldn’t start Ghost because Ghost didn’t had permission to read all kinds of logs and files. I was so frustrated because I posted lots, and I started gaining users. I wanted to just quit and start with Wordpress, but I managed to bring Ghost online again after lots of “sudo chmod +rw” commands on all kinds of files… but images aren’t loading now.

I am also randomly getting this error, not sure if it is related:

Apr 01 18:38:40 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]: Authorization failed
Apr 01 18:38:40 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]: "Unable to determine the authenticated user or integration. Check that cookies are being passed through if using session authentication."
Apr 01 18:38:40 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]: Error ID:
Apr 01 18:38:40 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]:     0f180f00-f057-11ee-895c-21472fd9c9d9
Apr 01 18:38:40 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]: ----------------------------------------
Apr 01 18:38:40 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]: NoPermissionError: Authorization failed
Apr 01 18:38:40 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]:     at authorizeAdminApi (/var/www/ghost/versions/5.80.0/core/server/services/auth/authorize.js:33:25)
Apr 01 18:38:40 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]:     at Layer.handle [as handle_request] (/var/www/ghost/versions/5.80.0/node_modules/express/lib/router/layer.js:95:5)
Apr 01 18:38:40 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]:     at next (/var/www/ghost/versions/5.80.0/node_modules/express/lib/router/route.js:144:13)
Apr 01 18:38:40 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]:     at authenticate (/var/www/ghost/versions/5.80.0/core/server/services/auth/session/middleware.js:28:13)
Apr 01 18:38:40 ghostonubuntu2204-s-1vcpu-2gb-sfo3-01 node[65051]:     at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

These permission issues are really frustrating…

The permission look fine, and the images are all located in var/www/ghost/content/images, so I don’t understand the issue…

Strangely enough, the image I can see is not in the the "/var/www/ghost/content/images/" folder, but all the other images the website can’t load (because 404) are in the folder.

Update, I think I am getting closer.

The photos that are not visible on Ghost blog are located in: /var/www/ghost/content/images/

The photos that are visible on Ghost blog are located in:
/var/www/ghost/current/content/images/

Kind of confusing, is this a bug? How/why did this happen? What am I supposed to do?

This looks like a permission problem. Can you check ownership of var/www/ghost and subdirectories within it?

var/www

ghost-mgr@ghostonubuntu2204-s-1vcpu-2gb-sfo3-01:/var/www$ ls -l
total 8
drwxrwxr-x 5 ghost-mgr ghost-mgr 4096 Apr  1 17:51 ghost
drwx------ 2 root      root      4096 Oct 10 12:42 html

var/www/ghost

ghost-mgr@ghostonubuntu2204-s-1vcpu-2gb-sfo3-01:/var/www/ghost$ ls -l
total 16
-rw-r--r--  1 ghost-mgr ghost-mgr  878 Apr  1 17:51 config.production.json
drwxr-xr-x 11 ghost     ghost     4096 Mar  3 00:57 content
lrwxrwxrwx  1 ghost     ghost       30 Mar  3 00:59 current -> /var/www/ghost/versions/5.80.0
drwxr-xr-x  3 ghost     ghost     4096 Mar  3 01:02 system
drwxr-xr-x  3 ghost     ghost     4096 Mar  3 00:57 versions

var/www/ghost/content

ghost-mgr@ghostonubuntu2204-s-1vcpu-2gb-sfo3-01:/var/www/ghost/content$ ls -l
total 36
drwxr-xr-x 2 ghost ghost 4096 Mar  3 00:57 apps
drwxr-xr-x 2 ghost ghost 4096 Mar  3 00:57 data
drwxr-xr-x 2 ghost ghost 4096 Mar  3 00:57 files
drwxr-xr-x 4 ghost ghost 4096 Mar  3 22:08 images
drwxr-xr-x 2 ghost ghost 4096 Apr  1 16:03 logs
drwxr-xr-x 2 ghost ghost 4096 Mar  3 00:57 media
drwxr-xr-x 4 ghost ghost 4096 Mar  3 01:03 public
drwxr-xr-x 2 ghost ghost 4096 Mar  3 01:03 settings
drwxr-xr-x 2 ghost ghost 4096 Mar  3 00:59 themes

var/www/ghost/current

ghost-mgr@ghostonubuntu2204-s-1vcpu-2gb-sfo3-01:/var/www/ghost/current$ ls -l
total 752
-rwxr-xr-x   1 ghost ghost   1065 Oct 26  1985 LICENSE
-rwxr-xr-x   1 ghost ghost    490 Oct 26  1985 MigratorConfig.js
-rwxr-xr-x   1 ghost ghost   2687 Oct 26  1985 PRIVACY.md
-rwxr-xr-x   1 ghost ghost   5425 Oct 26  1985 README.md
drwxr-xr-x   2 ghost ghost   4096 Mar  3 00:58 components
drwxr-xr-x  10 ghost ghost   4096 Apr  1 22:21 content
drwxr-xr-x   7 ghost ghost   4096 Mar  3 00:58 core
-rwxr-xr-x   1 ghost ghost    673 Oct 26  1985 ghost.js
-rwxr-xr-x   1 ghost ghost     93 Oct 26  1985 index.js
-rwxr-xr-x   1 ghost ghost    743 Oct 26  1985 loggingrc.js
-rwxr-xr-x   1 ghost ghost   1657 Oct 26  1985 newrelic.js
drwxr-xr-x 953 ghost ghost  36864 Mar  3 00:59 node_modules
-rwxr-xr-x   1 ghost ghost  21023 Oct 26  1985 package.json
-rwxr-xr-x   1 ghost ghost 658564 Mar  3 00:59 yarn.lock

While my images are visible, I can’t upload new images, why is that?

I managed to fix almost everything…

But really, 3 days offline… such a disaster…

Out of nowhere my blog was rocketing up, rapidly increasing in popularity without breaks, I was super excited… then it went down for 3 days because stupid permission issues because apparently it was a good idea to have such complex permission system.

Such a disappointment, there is no automatic permission reset/fix or transfer ownership, or some hard reset without deleting data. No, I had to manually edit map ownership and permissions, even that didn’t really work, I had to retry and hit my head several times.

Seriously, why this system? If this is my operating system, I don’t need pseudo hierarchy between MY OWN Linux accounts (root, ghost-mgr, another me, systemctl, w/e)…they are all me, or act on behave of me.

There is no safety nets for Ghost blogs that gets corrupted.

I have launched Wordpress blog for friends, no problem. It is reliable and it warns me continuously. Ghost blogs only cares about "mail, subscribers, mail, subscribers, mail, subscribers)… you don’t have to care about how we stay popular or earn money, you only have to care about that the blogs keep running for long as possible. For every day a blog has to go offline is a HUGE fault. Every single day is a colossal damage, shame, stress.

Warn users of making back ups before trying to edit JSON files, instead of screaming about Stripe and Mailgun.

Terrible experience with Ghost, I had always had regard for Ghost for using Node.js and competing Wordpress, but if someone wants to Blog, I will for now recommend Wordpress… ancient and reliable, it warns users al least.

Ghost has its advantage, like beautiful outside, beautiful settings, modern editor… but internal has to be as important.

Sounds like a really frustrating experience.

I want to add one piece of context for anyone reading this thread later: you chose to self-host in a digital ocean droplet. They’re cheap and they’re unmanaged. And you’re responsible for your own backups. (There is a button to snapshot the whole droplet — doing so occasionally would have saved you here.) It’s unmanaged, and I wouldn’t recommend it for anyone who isn’t really comfortable doing linux server admin, because that’s what a droplet is - it’s a (virtual) linux server. While I think one-click droplets are a cool idea, in some ways I think it makes it too easy to get Ghost up and running, masking the fact that you’re administering your own (virtual) server.

There are multiple managed hosting options for Ghost. Some of them are excellent, and it would have made all of this your host’s problem.