Manually update Discourse and Docker image to latest

If you self-host Discourse, you occasionally need to run a manual update via the command line to get the latest security releases newest libraries. These updates are not picked up in admin/upgrade, which is why you’ll occasionally need to do this additional step.

  1. Discourse itself should be updated about twice a month, by clicking the “Update to Latest Version” button in your admin dashboard ( admin/upgrade). We do beta releases roughly once every week.

  2. Every two months we recommend SSH’ing into your web server (using putty or your favorite SSH client) and doing

    cd /var/discourse
    ./launcher rebuild app

    Especially if the upgrade page doesn’t show up or you have any issues when trying to upgrade.

  3. As for Ubuntu updates, make sure you have automatic security updates enabled for your Ubuntu! The command is:

    dpkg-reconfigure -plow unattended-upgrades

    However, that just covers critical security updates. Every so often you should get all the OS updates like so:

    apt-get update
    apt-get dist-upgrade

Due to the way docker packaging has changed you may also have to update your docker from lxc-docker or docker-engine packages. One way to do that is via the Docker script here (it will warn about an existing install but should upgrade ok):

wget -qO- | sh

This will now use the docker-ce main versions.

This is completely safe, we have never seen anything get broken by base Ubuntu updates.

To summarize:

  • update Discourse twice a month via web updater
  • update the container every two months
  • update the OS every six months

You could double these numbers and still be fairly safe, e.g. update Discourse once a month, container every 4 months, OS once every 12 months, and so on.

But you really, really want automatic security updates enabled in Ubuntu, as listed above.


What is the right time to update?

It just depends on the time you have available and how close to bleeding edge you want to be. If you have non-official plugins, it is highly advisable to utilize a test/staging site. If you do not have any non-official plugins, you can likely upgrade immediately, but even then, some plugins may break for a couple of days as the team fixes them (there are a lot of them).

What is common practice when updating with many plugins installed?

If you have a lot of plugins, testing locally or on a test server is highly advised. Especially if you have non-official plugins, as something could have broken. If you find something does break, then it is a matter of, do you have time to fix it? Does the original plugin author have time to fix it? Either of those could take weeks. So at least this way, you simply have a broken test site and not a broken production site.

I’m running low on disk space

If you are running low on disk space (check with df) try clearing up old images using:

./launcher cleanup
apt-get autoclean
apt-get autoremove

Does updating the actual server version of Ubuntu matter since Discourse always operates in Docker?

It matters a lot less. But you should be on at least Ubuntu 18.04 LTS, which will reach its end of support life in April 2023. All previous versions have already reached their end of life.

"Upgrade all" button is awesome!
Ubuntu 16.04 LTS - upgrade or migrate?
Cannot upgrade due to old version of docker
Daily performance reports keep asking to rebuild container
No longer getting notifications for out of date containers
Docker and Discourse upgrade
Installed OK. Working fine for one day. Suddenly stopped working
How to optimize storage?
Update error, website unavailable, possibly plugin related?
Discourse stopping working - CPU/RAM load?
Why do I need a block storage?
Digital Ocean hosting: Do I need a system admin?
Will not load, no access to installation, aufs not installed - my fix
Manual upgrade fails
ERROR: You are running an old version of the Discourse image
Service not available | Update Error due to broken plugin
Upgrade V2.1 Beta 2 to Beta 4 Require ./launcher rebuild app Twice
What do you want to do about modified configuration file grub?
Failed Upgrade Discourse and Plugins
Insert Date Timezone is always UTC ; my Timezone is ignored
Issues upgrading from 1.6.0.Beta10+9 to 2.3.0.beta6
Cannot rebuild following site failure: "postgres already running"
Upgrade link no longer works
Failed to bootstrap 1.6.0.beta 8 with out of date docker
Page froze, force closed mid-Discourse upgrade, what next?
Kernel Panic after droplet reboot... What now?
Upgrade container - keeping config and data
Failed to update Discourse new version
Upgrade from v2.0.0.beta10 +37 to 2.1.0.beta1 does fail
Admin upgrade page does not exist
Error when upgrading and would like to solve or reset
Update failed - Not starting
Failed to rebuild: no such file /usr/local/etc/ImageMagick-6/policy.xml
Upgrade ends with FAILED TO BOOTSTRAP
"400 Bad Request" error after upgrading
Some trouble updating (many bugs)
What makes a successful volunteer Discourse sysadmin?
Searching locks up the server for a while
Oops - Error 500 After Update From Admin Dashboard
Upgrading from 2.9.0.beta8 broke the site, unrecoverable
Edit CSS/HTML editor cursor offset makes it unusable due to CSS font override
Self hosted Reply by Email stopped working after latest update
Upgrades via UI disabled - and not being re-enabled after SSH upgrade
Error upgrading, failed to bootstrap
Help after updating from ssh site goes down
PNG's a no show
My Discourse is Down. Certificate Issue?
Add path to cookie
Unable to update
Reset password link error
1.4.3 Upgrade Oddity?
Empty update page?
Upgrade button is 500-ing for me
My website is always down
Site fails to load with js errors
Upgrade container - keeping config and data
Update Docker Assistance - Broken Site
Problem with category style = box under firefox

I am in the habit of missing out the git pull:

cd /var/discourse
./launcher rebuild mail-receiver
./launcher rebuild app

I have a feeling that git pull happens automatically as part of ./launcher rebuild app.

But should I start using that line, either for rebuilding Discourse or the mail receiver? Thanks.

That’s true now, but was not 8 years ago.

Thanks for confirming that – I must have read that at some point in the past, as I don’t think I’d have ignored that command without thinking it would be ok. I’ve taken the liberty of amending the original post here.

That’s probably fine. Unless someone hasn’t done an upgrade since that feature for added to launcher. It’s been some years, though, so it’s likely safe.

1 Like