discourse http://tech.oeru.org/ en Upgrading a Docker-based Discourse Forum instance http://tech.oeru.org/upgrading-docker-based-discourse-forum-instance <span class="field field--name-title field--type-string field--label-hidden">Upgrading a Docker-based Discourse Forum instance</span> <div class="field field-node--field-blog-tags field-name-field-blog-tags field-type-entity-reference field-label-above"> <h3 class="field__label">Blog tags</h3> <div class="field__items"> <div class="field__item field__item--discourse"> <span class="field__item-wrapper"><a href="/taxonomy/term/19" hreflang="en">discourse</a></span> </div> <div class="field__item field__item--docker"> <span class="field__item-wrapper"><a href="/taxonomy/term/16" hreflang="en">docker</a></span> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" class="username">dave</a></span> <span class="field field--name-created field--type-created field--label-hidden">Thu 19/05/2022 - 14:45</span> <div class="field field-node--field-image field-name-field-image field-type-image field-label-hidden has-multiple"> <figure class="field-type-image__figure image-count-1"> <div class="field-type-image__item"> <a href="http://tech.oeru.org/sites/default/files/styles/max_1300x1300/public/2022-05/Discourse-admin_page_upgrade_link.png?itok=SmTm00O2" aria-controls="colorbox" aria-label="{&quot;alt&quot;:&quot;A sample of the admin page showing a Discourse administrator that an upgrade is pending, showing the web-upgrade link.&quot;}" role="button" title="A sample of the admin page showing a Discourse administrator that an upgrade is pending, showing the web-upgrade link." data-colorbox-gallery="gallery-field_image-6Xp_Sree6uw" class="colorbox" data-cbox-img-attrs="{&quot;alt&quot;:&quot;A sample of the admin page showing a Discourse administrator that an upgrade is pending, showing the web-upgrade link.&quot;}"><img src="/sites/default/files/styles/medium/public/2022-05/Discourse-admin_page_upgrade_link.png?itok=iBEbWRyb" width="220" height="144" alt="A sample of the admin page showing a Discourse administrator that an upgrade is pending, showing the web-upgrade link." loading="lazy" class="image-style-medium" /> </a> </div> </figure> <figure class="field-type-image__figure image-count-2"> <div class="field-type-image__item"> <a href="http://tech.oeru.org/sites/default/files/styles/max_1300x1300/public/2022-05/Discourse-upgrade_email_alert.png?itok=VBs3FoqS" aria-controls="colorbox" aria-label="{&quot;alt&quot;:&quot;A sample of the email sent to Discourse admins by the Discourse system alerting them to a new pending upgrade.&quot;}" role="button" title="A sample of the email sent to Discourse admins by the Discourse system alerting them to a new pending upgrade." data-colorbox-gallery="gallery-field_image-6Xp_Sree6uw" class="colorbox" data-cbox-img-attrs="{&quot;alt&quot;:&quot;A sample of the email sent to Discourse admins by the Discourse system alerting them to a new pending upgrade.&quot;}"><img src="/sites/default/files/styles/medium/public/2022-05/Discourse-upgrade_email_alert.png?itok=M4tLaS3O" width="220" height="140" alt="A sample of the email sent to Discourse admins by the Discourse system alerting them to a new pending upgrade." loading="lazy" class="image-style-medium" /> </a> </div> </figure> <figure class="field-type-image__figure image-count-3"> <div class="field-type-image__item"> <a href="http://tech.oeru.org/sites/default/files/styles/max_1300x1300/public/2022-05/Discourse-backup_admin_page.png?itok=Lv0Hz0-Y" aria-controls="colorbox" aria-label="{&quot;alt&quot;:&quot;A sample Discourse system backup administration page.&quot;}" role="button" title="A sample Discourse system backup administration page." data-colorbox-gallery="gallery-field_image-6Xp_Sree6uw" class="colorbox" data-cbox-img-attrs="{&quot;alt&quot;:&quot;A sample Discourse system backup administration page.&quot;}"><img src="/sites/default/files/styles/medium/public/2022-05/Discourse-backup_admin_page.png?itok=KZaf9Y0c" width="220" height="144" alt="A sample Discourse system backup administration page." loading="lazy" class="image-style-medium" /> </a> </div> </figure> <figure class="field-type-image__figure image-count-4"> <div class="field-type-image__item"> <a href="http://tech.oeru.org/sites/default/files/styles/max_1300x1300/public/2022-05/Discourse-web_upgrade.png?itok=xyJIWWoq" aria-controls="colorbox" aria-label="{&quot;alt&quot;:&quot;A Discourse web upgrade status page, prior to initiating the upgrade.&quot;}" role="button" title="A Discourse web upgrade status page, prior to initiating the upgrade." data-colorbox-gallery="gallery-field_image-6Xp_Sree6uw" class="colorbox" data-cbox-img-attrs="{&quot;alt&quot;:&quot;A Discourse web upgrade status page, prior to initiating the upgrade.&quot;}"><img src="/sites/default/files/styles/medium/public/2022-05/Discourse-web_upgrade.png?itok=-NQk807A" width="220" height="124" alt="A Discourse web upgrade status page, prior to initiating the upgrade." loading="lazy" class="image-style-medium" /> </a> </div> </figure> <figure class="field-type-image__figure image-count-5"> <div class="field-type-image__item"> <a href="http://tech.oeru.org/sites/default/files/styles/max_1300x1300/public/2022-05/Discourse-web_upgrade_progress.png?itok=eAf0UUVc" aria-controls="colorbox" aria-label="{&quot;alt&quot;:&quot;A Discourse web upgrade underway. &quot;}" role="button" title="A Discourse web upgrade underway. " data-colorbox-gallery="gallery-field_image-6Xp_Sree6uw" class="colorbox" data-cbox-img-attrs="{&quot;alt&quot;:&quot;A Discourse web upgrade underway. &quot;}"><img src="/sites/default/files/styles/medium/public/2022-05/Discourse-web_upgrade_progress.png?itok=Q6y7yjKe" width="220" height="136" alt="A Discourse web upgrade underway. " loading="lazy" class="image-style-medium" /> </a> </div> </figure> <figure class="field-type-image__figure image-count-6"> <div class="field-type-image__item"> <a href="http://tech.oeru.org/sites/default/files/styles/max_1300x1300/public/2022-05/Dicscourse-require_cli_upgrade.png?itok=VKj1mQll" aria-controls="colorbox" aria-label="{&quot;alt&quot;:&quot;Sample of the message you see if a particular Discourse upgrade is too complicated for the web interface.&quot;}" role="button" title="Sample of the message you see if a particular Discourse upgrade is too complicated for the web interface." data-colorbox-gallery="gallery-field_image-6Xp_Sree6uw" class="colorbox" data-cbox-img-attrs="{&quot;alt&quot;:&quot;Sample of the message you see if a particular Discourse upgrade is too complicated for the web interface.&quot;}"><img src="/sites/default/files/styles/medium/public/2022-05/Dicscourse-require_cli_upgrade.png?itok=dVBM-OW2" width="220" height="94" alt="Sample of the message you see if a particular Discourse upgrade is too complicated for the web interface." loading="lazy" class="image-style-medium" /> </a> </div> </figure> </div> <div class="clearfix text-formatted field field-node--body field-name-body field-type-text-with-summary field-label-hidden"> <div class="field__items"> <div class="field__item"><p><a href="https://discourse.org">Discourse</a> is the world-leading online web-based forum. It's a superb, extremely mature-and-yet-cutting edge platform. It also happens to be Free and Open Source Software, which is why we, at the <a href="https://oerfoundation.org">OER Foundation</a>, use it.</p> <p>Like all good software, it's undergoing continuous improvement by its developer community who release fairly frequent - perhaps every couple weeks - updates. Luckily, keeping your Discourse forum up-to-date isn't particularly onerous.</p> <p>Upgrading a Discourse instance deployed via Docker (as all of ours are) follows one of two possible workflows. Both usually start with either a Discourse administrator logging into the Discourse site (which she/he might not do very often) and noticing on the default admin dashboard page (see the first attached screenshot) that there is a pending upgrade, usually with a 'click here to upgrade' link. Alternatively, if an administrator is not logged in (the system is aware of this) the system sends administrators for the site an email (see the second attached screenshot for a sample) alerting them all that an upgrade is pending, with a link to the upgrade page in the Discourse administration system.</p> <h2><a id="user-content-always-backup-first" href="#always-backup-first" name="always-backup-first" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Always backup first!</h2> <p>As any good system administrator knows, their users' data is of utmost importance. So, before proceeding with any upgrade, it's crucial to make a backup of your system to ensure that if everything goes pear-shaped, you can recover and get back to where you were.</p> <p>Normally, I consider it sufficient to take a Discourse 'backup' via the admin backup interface 'immediately before doing the upgrade' (see attached screenshot), leaving ''off'' the uploaded content, as this is unlikely to be affected or removed via the upgrade process, to save space. Doing this immediately prior to the upgrade minimises the chances that any users lose data (e.g. a recent post, in the space of time between the backup and the actual upgrade or even a post they're working on when the upgrade commences - if the latter happens, as long as they don't leave the page and wait for the forum to 'come back' after the upgrade, they should be able to proceed without losing anything... but there's a small chance they could be unlucky - be mindful of this and try to a) announce upgrades on the site prior to running them, and b) try to do so outside of your busiest hours, which should be easy to determine thanks to Discourse's superb analytics (also a feature of the default admin dashboard).</p> <p>After conducting the backup, you can do the upgrade.</p> <h2><a id="user-content-upgrade-workflows" href="#upgrade-workflows" name="upgrade-workflows" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Upgrade Workflows</h2> <p>You will ''usually'' have a straightforward 'point-and-click' web browser based upgrade process, but on occasion, you will click on the 'upgrade link' and end up on a page like 'upgrade is too complicated for the web interface' message (see attached screenshot). In that latter case, things get a little more complicated. Also, such upgrades can result in somewhat more downtime for the forum, so only conduct them when you have sufficient time.</p> <h3><a id="user-content-web-based-upgrade" href="#web-based-upgrade" name="web-based-upgrade" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Web-based upgrade</h3> <p>In most cases, when you click on the "Click here to upgrade" link, you'll be taken to a page that assesses the various components (the Discourse codebase, the Docker subsystems, and any additional functional plugins) making up your Discourse install and alerts you which of those components have a pending upgrade. This can sometimes take a while (the system is having to compare what you have on your server to the official up-to-date versions of those things on the web), but when done, the page will show you 'upgrade' buttons for the components with upgrades pending as per the attached sample upgrade pages screenshot.</p> <p>Once you've got those showing, you can click the 'Upgrade' button that's highlighted (if any - that one needs to be done first, prior to the others) and then the 'Start upgrade" operation for each one. Or, sometimes, you'll see an "Upgrade all" button at the top of the page, which applies all the pending upgrades in a single operation.</p> <p>Usually, in practice, this renders your Discourse forum unusable (it'll be in 'maintenance mode' from a user's perspective) for a few seconds to a few minutes, depending on the upgrade.</p> <h3><a id="user-content-command-line-launcher-upgrade" href="#command-line-launcher-upgrade" name="command-line-launcher-upgrade" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Command line 'launcher' upgrade</h3> <p>When the upgrade is more fundamental, usually involving the Docker subsystem, you sometimes don't have the option of a web-based upgrade. Instead of the upgrade web pages from the previous section, you get message like that shown in the next screenshot, which talks about running the upgrade from the command line using the <code>launcher</code> command and doing a 'rebuild' of the system.</p> <p>In that case, you need to be able to log into the host server (usually a remote cloud-based "Virtual Private Server" or VPS) - I always use SSH to do that <a href="/node/49">see these instructions</a> from a terminal on my Linux desktop - with suitable permissions (usually the ability to run 'sudo' commands, i.e. act as the administrative or 'root' user of that server).</p> <p>Once you're logged in as a user with 'sudo' privileges, you need to go to the Docker configuration directory for that instance of Discourse - in the OER Foundation's case, I have the convention of having the installation in the <code>/home/docker/</code> directory in a subdirectory with the same name as the as the site, e.g. forum.oeru.org. In that case, I'd enter</p> <p><code>cd /home/docker/forum.oeru.org</code></p> <p>Note that we don't use the default path for our Discourse installation (<code>/var/discourse</code>), so we're being rebels here. Doing an</p> <p><code>ls -l</code></p> <p>here should give a directory that looks a bit like this (you might not have the 'oeru'-related files) when listed:</p> <div class="geshifilter"><div class="bash geshifilter-bash"><pre><span>-rw-rw-r--</span> <span>1</span> dave dave <span>1099</span> Nov <span>29</span> <span>2019</span> LICENSE <span>-rw-r--r--</span> <span>1</span> dave root <span>8285</span> Jul <span>24</span> <span>2021</span> README.md <span>-rw-rw-r--</span> <span>1</span> dave dave <span>258</span> Dec <span>2</span> <span>2019</span> README.oeru drwxrwxr-x <span>1</span> dave dave <span>16</span> Nov <span>29</span> <span>2019</span> bin drwxrwxr-x <span>1</span> dave dave <span>16</span> Apr <span>15</span> <span>23</span>:<span>36</span> cids drwxrwxr-x <span>1</span> dave dave <span>30</span> May <span>19</span> 06:<span>47</span> containers <span>-rwxrwxr-x</span> <span>1</span> dave dave <span>11955</span> Apr <span>15</span> <span>23</span>:<span>22</span> discourse-doctor <span>-rwxr-xr-x</span> <span>1</span> dave root <span>27132</span> Oct <span>21</span> <span>2021</span> discourse-setup drwxrwxr-x <span>1</span> dave dave <span>192</span> Dec <span>22</span> 04:<span>43</span> image <span>-rwxrwxr-x</span> <span>1</span> dave dave <span>23538</span> Apr <span>15</span> <span>23</span>:<span>22</span> launcher drwxrwxr-x <span>1</span> dave dave <span>120</span> Nov <span>16</span> <span>2021</span> samples drwxrwxr-x <span>1</span> dave dave <span>22</span> Nov <span>29</span> <span>2019</span> scripts drwxrwxr-x <span>1</span> dave dave <span>16</span> Nov <span>29</span> <span>2019</span> shared drwxrwxr-x <span>1</span> dave dave <span>866</span> Apr <span>15</span> <span>23</span>:<span>22</span> templates drwxr-xr-x <span>1</span> dave root <span>130</span> Jan <span>16</span> <span>22</span>:<span>42</span> tests</pre></div></div> <p>The script we're going to use is the <code>launcher</code> script, and we're going to use the site's configuration which, by our convention, will reside in <code>containers/app.yml</code>(you can see its contents by typing <code>less containers/app.yml</code> assuming your user has sufficient permissions to view it directly. If not, prepend <code>sudo</code> to your command.</p> <p>To run the upgrade, you have to complete two steps as suggested by the page you saw when you clicked on the upgrade link:</p> <p>First, ensure that the 'git' repository that was used to provide this set of files to begin with is up-to-date - if your user owns these files (as my 'dave' user does in the example above) then run this to avoid changing the ownership of the files:</p> <p><code>git pull</code></p> <p>If you don't own the files you'll need to run</p> <p><code>sudo git pull</code></p> <p>which should result in a fairly quick (a few seconds) request to the git server, pulling down files that have been changed by the developers since the last time you did a <code>git pull</code>... Note, if the pull fails, you may find that you've altered one or more files for some reason and that the change you've made would be clobbered by the pull. The easiest thing to do in that case is - for each file - to (prepending with <code>sudo</code> if required):</p> <p><code>cp [filename] [filename].bak</code></p> <p>so you have a backup copy of your changed file, and then issue (again, with <code>sudo</code> prepended if necessary):</p> <p><code>git checkout [filename]</code></p> <p>which reverts [filename] to its original git-distributed version. The <code>git pull</code> should now work.</p> <p>Second, simply type (again, prepending with <code>sudo</code> if required:</p> <p><code>./launcher rebuild app</code></p> <p>This will initiate what can be a rather long process (perhaps 1 to as many as, say, 30 minutes, depending on the upgrade, the amount that needs to be downloaded, your server's network bandwidth, and a variety of other variables) which will involve downloading new Docker containers with Discourse code, as well as possibly a new PostgreSQL database container among others. Your Discourse will continue running as long as it can safely do so, but then the <code>launcher</code> script will shut down the containers and restart them. It might also be 'recompiling' aggregated resources used by Discourse, like various Ruby On Rails gems, icon files, style sheets (CSS), or Javascript files...</p> <p>Once it's done, you'll get the command prompt back. You're done! Have a look at your site and you should see you're up-to-date!</p> <p>You can log out of the server vai <code>CTRL-D</code> or typing <code>exit</code>.</p> <h3><a id="user-content-problems" href="#problems" name="problems" class="heading-permalink" aria-hidden="true" title="Permalink"></a>Problems?</h3> <p>I have, on a few occasions, had an upgrade fail for some reason. If that happens, you should see an indicator of has caused the failure (in a few cases for me, it was the fact that the PostgreSQL database didn't have enough time to restart before the Discourse app tried to access it to run data schema upgrades, and failed as a result. Changing the 'timeout' value from 5 seconds to 60 seconds fixed it - looking on the <a href="https://meta.discourse.org">Meta Discourse</a> - Discourse's own Discourse used to discuss running Discourse - is a very good resource when trying to solve system-related problems. It's worth creating an account for yourself on it if you're going to be responsible for a Discourse instance!</p></div> </div> </div> <section class="field field-node--field-blog-comments field-name-field-blog-comments field-type-comment field-label-above comment-wrapper"> <a name="comments"></a> <h2 class="comment-field__title">Blog comments</h2> <article data-comment-user-id="0" id="comment-1049" class="comment js-comment by-anonymous has-title clearfix"> <div class="comment__container"> <h3 class="comment__title"> <a href="/comment/1049#comment-1049" class="permalink" rel="bookmark" hreflang="en">I had to use the command `…</a> <span class="comment__new marker marker--success hidden" data-comment-timestamp="1686109077"></span> </h3> <div class="comment__meta"> <div class="comment__submitted"> <span class="comment__author"><span>Peter N Lewis (not verified)</span></span> <span class="comment__pubdate">Thu 23/03/2023 - 22:28</span> </div> </div> <div class="comment__content"> <div class="clearfix text-formatted field field-comment--comment-body field-name-comment-body field-type-text-long field-label-hidden"> <div class="field__items"> <div class="field__item"><p>I had to use the command `./launcher rebuild app` (no `.yml`) for this to work.</p> </div> </div> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=1049&amp;1=default&amp;2=en&amp;3=" token="PNviJRTGbHkCAoilRGpDUNUQC6hl89VkaEuOf-3u9hI"></drupal-render-placeholder> </div> </div> </article> <div class="indented"><article data-comment-user-id="1" id="comment-1119" class="comment js-comment by-node-author has-title clearfix"> <div class="comment__container"> <h3 class="comment__title"> <a href="/comment/1119#comment-1119" class="permalink" rel="bookmark" hreflang="en">Well spotted, Peter, and…</a> <span class="comment__new marker marker--success hidden" data-comment-timestamp="1686109268"></span> </h3> <div class="comment__meta"> <div class="comment__submitted"> <span class="comment__author"><a title="View user profile." href="/user/1" class="username">dave</a></span> <span class="comment__pubdate">Wed 07/06/2023 - 15:41</span> </div> </div> <div class="comment__content"> <p class="comment__parent visually-hidden">In reply to <a href="/comment/1049#comment-1049" class="permalink" rel="bookmark" hreflang="en">I had to use the command `…</a> by <span>Peter N Lewis (not verified)</span></p> <div class="clearfix text-formatted field field-comment--comment-body field-name-comment-body field-type-text-long field-label-hidden"> <div class="field__items"> <div class="field__item"><p>Well spotted, Peter, and thanks for letting me know! I've corrected the tutorial.</p></div> </div> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=1119&amp;1=default&amp;2=en&amp;3=" token="25VArLyKXIddj7W-MfTtlFiVQlNmnrz26WLth5t4i6o"></drupal-render-placeholder> </div> </div> </article> </div> <div class="comment-form-wrapper"> <h2 class="comment-form__title">Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=51&amp;2=field_blog_comments&amp;3=comment" token="sEqniUwHCHUWHihRflAm8YgWK0q2UAy7k0fiHG3-09Y"></drupal-render-placeholder> </div> </section> Thu, 19 May 2022 02:45:12 +0000 dave 51 at http://tech.oeru.org Multiple Discourse Forums on the same server http://tech.oeru.org/multiple-discourse-forums-same-server <span class="field field--name-title field--type-string field--label-hidden">Multiple Discourse Forums on the same server</span> <div class="field field-node--field-blog-tags field-name-field-blog-tags field-type-entity-reference field-label-above"> <h3 class="field__label">Blog tags</h3> <div class="field__items"> <div class="field__item field__item--discourse"> <span class="field__item-wrapper"><a href="/taxonomy/term/19" hreflang="en">discourse</a></span> </div> <div class="field__item field__item--ubuntu-linux"> <span class="field__item-wrapper"><a href="/taxonomy/term/12" hreflang="en">ubuntu linux</a></span> </div> <div class="field__item field__item--docker"> <span class="field__item-wrapper"><a href="/taxonomy/term/16" hreflang="en">docker</a></span> </div> <div class="field__item field__item--postgresql"> <span class="field__item-wrapper"><a href="/taxonomy/term/20" hreflang="en">postgresql</a></span> </div> <div class="field__item field__item--redis"> <span class="field__item-wrapper"><a href="/taxonomy/term/21" hreflang="en">redis</a></span> </div> <div class="field__item field__item--ruby-on-rails"> <span class="field__item-wrapper"><a href="/taxonomy/term/22" hreflang="en">ruby on rails</a></span> </div> <div class="field__item field__item--oauth2"> <span class="field__item-wrapper"><a href="/taxonomy/term/23" hreflang="en">oauth2</a></span> </div> <div class="field__item field__item--lets-encrypt"> <span class="field__item-wrapper"><a href="/taxonomy/term/17" hreflang="en">let&#039;s encrypt</a></span> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="View user profile." href="/user/1" class="username">dave</a></span> <span class="field field--name-created field--type-created field--label-hidden">Fri 24/03/2017 - 13:20</span> <div class="field field-node--field-image field-name-field-image field-type-image field-label-hidden has-multiple"> <figure class="field-type-image__figure image-count-1"> <div class="field-type-image__item"> <a href="http://tech.oeru.org/sites/default/files/styles/max_1300x1300/public/2017-03/CommunityDiscourse_frontpage.png?itok=zflBNfcG" aria-controls="colorbox" aria-label="{&quot;alt&quot;:&quot;Our Discourse front page from a user&#039;s perspective&quot;}" role="button" title="Our Discourse front page from a user&#039;s perspective" data-colorbox-gallery="gallery-field_image-bJQbOpH2zXo" class="colorbox" data-cbox-img-attrs="{&quot;alt&quot;:&quot;Our Discourse front page from a user&#039;s perspective&quot;}"><img src="/sites/default/files/styles/medium/public/2017-03/CommunityDiscourse_frontpage.png?itok=PKmMwvtz" width="220" height="125" alt="Our Discourse front page from a user&#039;s perspective" loading="lazy" class="image-style-medium" /> </a> </div> </figure> <figure class="field-type-image__figure image-count-2"> <div class="field-type-image__item"> <a href="http://tech.oeru.org/sites/default/files/styles/max_1300x1300/public/2017-03/CommunityDiscourse_badgepage.png?itok=wB27ZtNy" aria-controls="colorbox" aria-label="{&quot;alt&quot;:&quot;&quot;Social credit&quot;: A user&#039;s &quot;badges&quot; which reflect the user&#039;s participation and trust levels within the forum community&quot;}" role="button" title="&quot;Social credit&quot;: A user&#039;s &quot;badges&quot; which reflect the user&#039;s participation and trust levels within the forum community" data-colorbox-gallery="gallery-field_image-bJQbOpH2zXo" class="colorbox" data-cbox-img-attrs="{&quot;alt&quot;:&quot;&quot;Social credit&quot;: A user&#039;s &quot;badges&quot; which reflect the user&#039;s participation and trust levels within the forum community&quot;}"><img src="/sites/default/files/styles/medium/public/2017-03/CommunityDiscourse_badgepage.png?itok=j_6aa6dT" width="220" height="125" alt="&quot;Social credit&quot;: A user&#039;s &quot;badges&quot; which reflect the user&#039;s participation and trust levels within the forum community" loading="lazy" class="image-style-medium" /> </a> </div> </figure> <figure class="field-type-image__figure image-count-3"> <div class="field-type-image__item"> <a href="http://tech.oeru.org/sites/default/files/styles/max_1300x1300/public/2017-03/CommunityDiscourse_topicediting.png?itok=UKvo5xRW" aria-controls="colorbox" aria-label="{&quot;alt&quot;:&quot;Editing topics - Discourse uses markdown for editing with side-by-side rendering and a simple &quot;rich text&quot; interface to assist new users&quot;}" role="button" title="Editing topics - Discourse uses markdown for editing with side-by-side rendering and a simple &quot;rich text&quot; interface to assist new users" data-colorbox-gallery="gallery-field_image-bJQbOpH2zXo" class="colorbox" data-cbox-img-attrs="{&quot;alt&quot;:&quot;Editing topics - Discourse uses markdown for editing with side-by-side rendering and a simple &quot;rich text&quot; interface to assist new users&quot;}"><img src="/sites/default/files/styles/medium/public/2017-03/CommunityDiscourse_topicediting.png?itok=osrNHUAn" width="220" height="164" alt="Editing topics - Discourse uses markdown for editing with side-by-side rendering and a simple &quot;rich text&quot; interface to assist new users" loading="lazy" class="image-style-medium" /> </a> </div> </figure> </div> <div class="clearfix text-formatted field field-node--body field-name-body field-type-text-with-summary field-label-hidden"> <div class="field__items"> <div class="field__item"><p>At the OERu we have two separate instances of market category leading <a href="https://discourse.org" title="The Discourse Forum Community"> Discourse Forum</a>: one for <a href="https://community.oeru.org" title="The OERu Partner and Contributor Collaboration Forum">OER partner and contributor collaborators</a> and the <a href="https://forum.oeru.org" title="The OERu Learner Discourse Forum">other for learners</a>. These days, online forums are seen as a bit old-school: fuddy-duddy. From my point of view, however, Discourse is "Forum-NG" (a Next Generation forum). I think it's both very cool and innovative - not at all fuddy-duddy. Even better, Discourse also happens to be free and open source. Its active development community is storming ahead with updates and improvements at an impressive pace.</p> <p>Discourse is what we developers refer to as a "non-trivial" application. It's complex, no question, but it's also very mature and well engineered. It's built entirely on open source components. It uses the <a href="https://rubyonrails.org">Ruby on Rails</a> framework and pulls in a bunch of external systems including <a href="https://redis.io">Redis</a> (for caching and queuing) and <a href="https://www.postgresql.org/">PostgreSQL</a> for persistent data storage. The most common mode for running Discourse is via a single Docker container which includes PostgreSQL, Redis, and the full Ruby on Rails stack and Discourse application. Typically, an organisation only deploys a single Discourse instance. We, however, identified the need to segment our audiences and so decided to deploy the two instances on our main hosting server. This was much more challenging deployment, and not overly well documented. It took a while to get it right. I wrote up a blow-by-blow of how I did it in hopes it would benefit others in my position! See these two threads:</p> <ul><li><a href="Multiple Discoursen, multiple Docker containers, one server with one nginx">Multiple Discourses, multiple containers, one server</a> for the whole story (and some community comments)</li> <li><a class="fancy-title" data-ember-action="" data-ember-action-932="932" href="https://meta.discourse.org/t/discourse-in-docker-nginx-reverse-proxy-ssl-everywhere-oauth2-custom/52280">Discourse in Docker + NGINX reverse proxy + SSL everywhere + OAuth2 Custom</a> - for protecting the privacy and security of our users, and making it quick and easy for them to log in using existing credentials (but preferably not ones controlled by foreign corporations)</li> </ul><p>Discourse is impressive. It <a href="https://meta.discourse.org/t/benefits-of-discourse-have-i-missed-anything/39849">offers a lot more</a> than I've described so far. I recommend your organisation has a look - if you don't want to manage it in-house (it's easy once it's set up), by all means support the developers by buying their hosted service!</p> </div> </div> </div> <section class="field field-node--field-blog-comments field-name-field-blog-comments field-type-comment field-label-above comment-wrapper"> <a name="comments"></a> <div class="comment-form-wrapper"> <h2 class="comment-form__title">Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=9&amp;2=field_blog_comments&amp;3=comment" token="q1H1hJgcXmYH07bFGODqnJapU96HbkXSo3XOYNpq97w"></drupal-render-placeholder> </div> </section> Fri, 24 Mar 2017 00:20:39 +0000 dave 9 at http://tech.oeru.org http://tech.oeru.org/multiple-discourse-forums-same-server#comments