Install Plugins in Discourse

So you want to install a plugin on your Discourse instance? Great, let’s get started!

In this tutorial, we’ll install Discourse Spoiler Alert plugin.

  • Get the plugin’s GitHub or Bitbucket git clone url.

  • Access your container’s app.yml file (present in /var/discourse/containers/)

    cd /var/discourse
    nano containers/app.yml
  • Add the plugin’s repository URL to your container’s app.yml file:

        - exec:
            cd: $home/plugins
              - git clone
              - git clone

    (Add the plugin’s git clone url just below git clone

  • Rebuild the container:

    cd /var/discourse
    ./launcher rebuild app

    That’s it, you’ve successfully installed the Discourse Spoiler Alert plugin on your Discourse instance!

Installing plugins hosted in a private repo

Use an OAuth token to install your plugin

This way you can install your plugin in the same space as any other and you don’t need to create an ssh key.

    - exec:
        cd: $home/plugins
              - git clone https://<token>
Persona Login Plugin
Discourse Slackdoor Plugin
Discourse Version 1.2
Site maintenance mode during rebuilds?
Embed Etherpad Lite pads into Discourse
How to create a new plugins?
Data Explorer Plugin
Easy to use static pages plugin
Chatroom Integration Plugin (discourse-chat-integration)
How do I stop human spammers?
About the Plugin category
Can Plugins Be Added To Basic Docker Install
Solved Button Plugin
Wild Apricot login plugin
Quick Messages Plugin
Formatting toolbar
Discourse Zendesk Plugin
Checklist Plugin - Interactive Checkboxes made Simple
Update private plugin without rebuilding the application
LDAP Setup for Discourse
Babble - A Chat Plugin
Discourse Push Notifications for Desktop
Daemonite Material Theme
Graphviz Plugin
Admin Statistics Report
Retort - a reaction-style plugin for Discourse
ReplyGif: Adding reaction GIF easily
Bump Reset plugin - Annotated to help new devs
Discourse Mark Plugin
Generating lots of Invite Tokens
Watching Categories based on on group in discourse
User feedback plugin login (vkontakte)
Links Category for Discourse
Force specific users through moderation
Importing from phpBB3
Importing from phpBB3
Content Lock BBCode
How to hook up JWT Single Sign On to Discourse
Discourse Policy
Who's Online Plugin (discourse-whos-online)
Should all plugins be cloned as the `discourse` user?
Discourse Patreon Integration
OAuth2 integration with Drupal
Discourse Narrative Bot Beta Feedback
Discourse Translator
No option appears to choose better answer
How to block all crawlers but Google's
Discourse Avatar name_first_letter
Auto-suspend inactive users
How do i install plugins after doing a fork?
How to ad banners?
Algolia plugin indexation
Telegram Notifications Plugin (discourse-telegram-notifications)
Discourse Backups to Dropbox (Deprecated)
Configuring OneLogin's SAML for Discourse
Migrate from Digital Ocean to OVH?
Introducing Font Awesome 5 and SVG icons
How to break 99k char limit?
Beginner's Guide to Creating Discourse Plugins - Part 1
Does this software allow admin to put Adsense ads in?
SSO for College Account
Should all plugins be cloned as the `discourse` user?
Trying to install plugin (But not working)
Custom Wizard Plugin
Plugin installation went wrong
Login with Amazon Plugin
Steam Login / Authentication Plugin
Knowledge Base Plugin
Merge Users Plugin
Discourse Fingerprint - Browser Fingerprinting Plugin
Tickets Plugin :tickets:
Discourse Encrypt - RFC
Auto Bookmarks plugin
Discourse Akismet Anti-Spam login (vkontakte)
Advanced Discourse Intercom
Category Page Plugin
Sidebar with categories
OpenID Connect Authentication Plugin
Favorites - select your favorite categories
Discourse Code Review
Beginner’s Guide to Creating Discourse Plugins Part 6: Acceptance Tests
Discourse Affiliate Plugin
Discourse GitHub
Can I access Discourse forum Database to use for PowerBI reporting?
Google Perspective API Plugin
Can't able to install plugins, whats the problem?
Features of the open source
Collude - a collaborative text editor for Discourse
Any options for over-riding the username restrictions?
Mingle - An Introductions Plugin
Checklist Plugin - Interactive Checkboxes made Simple
Adding location at sign up
How to enable [code] feature in the forum?
Voice recording plugin
Pwned Passwords Validator
Unable to find /plugins dir
How to edit plugins code?
Custom Wizard Plugin
Azure Blob Storage Plugin
./launcher rebuild app error './launcher: No such file or directory'
Plugin for Preventing Malicious Linking
Why do I need a block storage?
How can I add new badges?
[Solved] Admin-upgrade page not showing up
Synchronizer-base for any backup provider
Fixing problems with rebuild app
Install plugins for hosted solution

Is there a way to rebuild app without letting the forum down like the Discourse Upgrading feature does? The down time for rebuilding Discourse is quite long.


not yet, we are probably going to solve this some time in 2015


Can be found here:

  1. Access your server (use Putty on Windows)
  2. Type cd /var/discourse
  3. Type nano containers/app.yml

It is good to teach a step by step. Not everyone is familiar to the Discourse way :blush:


Step by Step Guide:

(for those like me who needed more info the first time)

4.) Arrow down until you see this:

5.) Paste “- git clone” beneath that so that all together it looks like this:

6.) control + O (to save app.yml), hit enter

8.) control + X (to exit app.yml), then hit enter

9.) git pull (this updates stuff)

10.) ./launcher rebuild app (restarts Discourse and includes the plugin)

^ @AdamCapriola showed me that stuff and I did exactly the way I ordered it and it worked for me.

It may seem like an obvious order to those more familiar with it, but that’s what I needed to do it successfully the first time. Now I can do it easy peasy.


Please do beware that indentation in YAML – the file format used through the app.yml file – matters! Whenever you post YAML documents or snippets, please use the proper markup:

<--- paste snippet here!

Here’s your app.yml snippet with proper indentation:

    - exec:
        cd: $home/plugins
          - mkdir -p plugins
          - git clone
          - git clone

If you use <blockquote> blocks or, as you did above, [quote] blocks, whitespace at the beginning of the line will not be preserved and the YAML document’s meaning will change, resulting in errors.

Also… learn Vim. :wink:


How to install a private git repository plugin?

To add a private git repository plugin, you need to follow these steps:

  - exec: echo "Beginning of custom commands"
  - exec: cd /var/www/discourse && sudo -u discourse bundle install --deployment --without test --without development
  - exec: echo "Host\n\tStrictHostKeyChecking no\n" >> /user/.ssh/config
  - file:
      path: /user/.ssh/id_rsa
      chmod: 600
      contents: |
        -----BEGIN RSA PRIVATE KEY-----
           .... etc ....
        -----END RSA PRIVATE KEY-----
  - file:
      path: /user/.ssh/
      chmod: 600
      contents: ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tj .... etc .... user@discourse
  - exec: cd $home/plugins && git clone
  - exec: cd $home && sudo -E -u discourse bundle exec rake db:migrate
  - exec: cd $home && rm -fr tmp/cache
  - exec: cd $home &&  sudo -E -u discourse bundle exec rake assets:precompile
  - exec: rm /user/.ssh/id_rsa
  - exec: rm /user/.ssh/

  - exec: echo "End of custom commands"
  • Rebuild the container:
cd /var/discourse
./launcher rebuild app

Your private plugin should be installed on your Discourse instance.


after following this steps to install this plugin


cd /var/discourse
./launcher rebuild app

There was no errors, but my site stopped working completely.
Tried ./launcher restart app, docker restart also rebooting serve, but still error persist.

Also tried removing plugin url from app.yml and again rebuilding app.

Thanks in advance.

Your YAML is probably invalid. Copy and paste it into an online YAML validator. I just set up the tagging plugin for several DO droplets and it worked fine.

@codinghorror, thanks for reaching out.
my app.yml is valid, I’ve tested it using

Any other pointers to solve issues.

yaml can be well structured yet invalid in some cases.

start from the samples, one change at a time and rebuild.

How do you install a plugin with a hosted instance?

1 Like

With hosting, plugins are only available in the Enterprise offering, and you email with info on the plugin (the URL).

1 Like

Issue cloning plugin from an internal server.

Cloning into 'xxxx_xxx_xxx'...
fatal: unable to access 'https://git.XXXX.XXX/academic-technologies/xxxx_xxx_xxx.git/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

I have an internally accessible gitlab server with a valid ‘DigiCert SHA2 Secure Server CA’ intermediary cert. basically Chrome is happy with it and we use certs from the same source for our external services. Because of the datasources and to things that get set it is really not for public consumption so I can not put it on get hub

So is there a cache of server certificates that discourse_docker is allowed to install plugins from?.

Try installing updates on the host: sudo apt-get update && sudo apt-get upgrade. That should update the certificate files.


Ok I can see why that would work. I had assumed that since connecting from the OS hosting the docker containers worked that it would from inside the container.

So I am running into this while running ./launcher rebuild so do I need to update the docker image that is being used to setup the container. I could put that apt-get commands in to the container file before the plugin is installed but seems kludgy.

FYI: In addition to what @elberet said, the launcher will not let you rebuild if you use tabs! You have to use spaces to indent your YAML. Picky picky… :stuck_out_tongue:


What kind of animal would use tabs instead of spaces


@codinghorror Haha. I suppose self-taught varmints like @curiositry use tabs when they’re in the heat of battle with a Goliath rails app :smile:. (I’m used to using Atom or Sublime, which convert tabs to 2 spaces…)

Thanks for building Discourse by the way, and making it open-source. It’s a sweet piece of software.