Simplified Discourse install?

I followed the guide at to install Discourse, and it felt pretty straight-forward. However, I’m now building an automated install to fit into our other deploy patterns and suddenly it doesn’t feel so simple anymore.

When installing/running gitea, jenkins or any of a number of other apps we run in docker we write a docker-compose.yml file and simply run docker-compose up. Trying that pattern with Discourse feels difficult.

Instead I have to clone the git repo, deploy my app.yml to it (instead of running the setup, which doesn’t lend itself to automation), and run the launcher… What exactly does the launcher do? And which files from the repo are needed, and for what?

An adjacent question regarding the instance I have running: I update it through the web GUI, but what would happen if I run git pull in /var/discourse and rebuild the app, without making sure I’ve upgraded it inside the docker container?

1 Like

git pull would update the local copy of discourse_docker, not Discourse itself. The rebuild then pulls down the latest changes.

There’s an existing topic on an official docker image and the use of compose:

Please note that unless it becomes official, the only supportable install is the standard install method you’ve already followed. Third-party packages and stuff which sidesteps launcher is done at own risk and with no real support. As mentioned in the topic above some of the big changes such as upgrades to postgres haven’t been factored in as they haven’t been necessary since people have begun to experiment.


The official installation is a fat container and launcher manages the container lifecycle. If you need to manage the containers on your own, we mostly assume you can assemble your own tools from the Lego pieces in the box.

If I wanted to manage my containers with docker-compose, then I would build web images for the frontend – with /var/docker/launcher bootstrap app – and push those to a local docker registry. The compose file would reference those published images and a separate database image.