How to install a plugin without rebuilding (or set a maintainance message)

Hi.

I’m searching for a solution that don’t make me rebuild my Discourse when I install a new plugin, which cause a long downtime.
On some forum scripts (like PHPBB, FluxBB, etc…), we can install a plugin without causing a downtime.

I’m also looking for a solution to set a message when the users visits my rebuilding Discourse who says that the forum is currently in maintainance (instead of the web browser error).

Thanks!

It’s really not possible to install a plugin without rebuilding afaik.

This can be done by setting up an offline page while rebuilding here is a guide:

2 Likes

The solution is to use a two-container install. This will let you build a new image while the old one keeps running. The amount of downtime is just what it takes to shutdown the old container and start the new one.

7 Likes

Thanks, I will follow your solution.

A more advanced version can include a load balancer in front of the application container(s) to reduce downtime to a bare minimum right?

1 Like

Yes, I’ve experimented with having HAproxy in front of two containers, so it should be possible to leave the old server running, crank up the new one, shut down the old one with no downtime. I’ve not yet gotten it working correctly, however.

1 Like

Can you tell me what kind of issues you had?

1 Like

I’ll need to crank it up again and document it. It’ll take a while to figure it out again. :frowning:

1 Like

Sorry for necro, but this post appears high in Google and I had the same “problem”. It requires fooling around in the docker container, so I’d not recommend doing this on production if you don’t know what you are doing. Steps after sshing into your server:
YOU’RE DOING UNSUPPORTED STUFF, NO WARRANTY OF ANY KIND!

# cd /var/discourse
# ./launcher enter app
# su discourse
$ cd /var/www/discourse/plugins
$ git clone <plugin_git_url>
$ exit
# exit
# docker restart app

There is still some downtime while the container starts, but it’s much faster than a full rebuild (seconds vs minutes on the smallest DigitalOcean droplet).

2 Likes

Cześć!
You’re most probably looking for this:


1 Like

You can also

  sv restart unicorn 

Inside the container, which is a tiny bit faster than restarting the container.

Also, for Some plugins you’d need to migrate the database.

2 Likes