# Documentation

**URL:** https://support.literatecomputing.com/c/docs/6.md

[Latest](https://support.literatecomputing.com/latest.md) · [Categories](https://support.literatecomputing.com/categories.md) · [Tags](https://support.literatecomputing.com/tags.md)

---

## [Multisite Configuration with Let's Encrypt and no reverse proxy](https://support.literatecomputing.com/t/multisite-configuration-with-lets-encrypt-and-no-reverse-proxy/632)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [December 3, 2020, 12:25am UTC](https://support.literatecomputing.com/t/multisite-configuration-with-lets-encrypt-and-no-reverse-proxy/632 "2020-12-03T00:25:37Z")

</div>

This howto documents broadly how to set up a multisite setup with 2 additional hosts (3 total). It assumes that you have already set up a 2-container installation (Move from standalone container to separate web and data…

---

## [Managing a Two-Container Installation](https://support.literatecomputing.com/t/managing-a-two-container-installation/310)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 1\
**Last updated:** [August 13, 2024, 5:27am UTC](https://support.literatecomputing.com/t/managing-a-two-container-installation/310 "2024-08-13T05:27:57Z")

</div>

If you have a two-container configuration as is included with the Pro Install managing things is a bit different than a simple single-container installation. How Do I Upgrade? The big advantage of the 2-container instal…

---

## [Create a key to log in to Digital Ocean droplet with PuTTY](https://support.literatecomputing.com/t/create-a-key-to-log-in-to-digital-ocean-droplet-with-putty/579)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [September 7, 2020, 7:25pm UTC](https://support.literatecomputing.com/t/create-a-key-to-log-in-to-digital-ocean-droplet-with-putty/579 "2020-09-07T19:25:42Z")

</div>

After you log in to your droplet with the Digital Ocean console, you can use these commands to create an SSH key, add it to your authorized\_keys, create the PuTTY proprietary key, download it to your computer, and load i…

---

## [Sending mail with GSuite](https://support.literatecomputing.com/t/sending-mail-with-gsuite/402)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [November 19, 2019, 5:15pm UTC](https://support.literatecomputing.com/t/sending-mail-with-gsuite/402 "2019-11-19T17:15:18Z")

</div>

I don’t recommend using GSuite for sending mail, but I have a client who followed found How to setup email for Discourse Forum with Google Apps SMTP-relay right way? • Crunchify and is sending mail with GSuite.

---

## [Discourse-topic-default-tag plugin notes](https://support.literatecomputing.com/t/discourse-topic-default-tag-plugin-notes/419)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [December 17, 2019, 6:32pm UTC](https://support.literatecomputing.com/t/discourse-topic-default-tag-plugin-notes/419 "2019-12-17T18:32:53Z")

</div>

See GitHub - pfaffman/discourse-topic-default-tag: Allow topics to include default tags

---

## [Create Discourse Bookmarklet and redirect current page to another site](https://support.literatecomputing.com/t/create-discourse-bookmarklet-and-redirect-current-page-to-another-site/1152)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 2\
**Last updated:** [September 10, 2023, 1:50pm UTC](https://support.literatecomputing.com/t/create-discourse-bookmarklet-and-redirect-current-page-to-another-site/1152 "2023-09-10T13:50:11Z")

</div>

If you are using Discourse as a place to collect resources you find online, you might like these bookmarklets. To use them, create a bookmark (I put them on my browser Bookmarks Bar), then right-click and edit the bookm…

---

## [Discourse Settings Uploader](https://support.literatecomputing.com/t/discourse-settings-uploader/197)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [May 11, 2018, 7:08pm UTC](https://support.literatecomputing.com/t/discourse-settings-uploader/197 "2018-05-11T19:08:24Z")

</div>

If you would like to save site settings and restore them to that or another site, you can use GitHub - pfaffman/discourse-settings-uploader: Install a Discourse settings JSON file to a site.

---

## [Discourse plugin add new route](https://support.literatecomputing.com/t/discourse-plugin-add-new-route/587)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [September 16, 2020, 9:57pm UTC](https://support.literatecomputing.com/t/discourse-plugin-add-new-route/587 "2020-09-16T21:57:57Z")

</div>

bundle exec rails g plugin DiscoursePluginName Assumes that you created a plugin called =PLUGIN\_NAME= and want to add a =NEWROUTE= route. For each file, replace action with =NEWROUTE=. Be careful not to replace befo…

---

## [Providing Data for Discourse Import](https://support.literatecomputing.com/t/providing-data-for-discourse-import/426)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [January 31, 2020, 6:22pm UTC](https://support.literatecomputing.com/t/providing-data-for-discourse-import/426 "2020-01-31T18:22:35Z")

</div>

One way to get data to us for doing an import (aka migration) is to upload it t with this link:

---

## [Pre-Migration Checklist](https://support.literatecomputing.com/t/pre-migration-checklist/433)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [February 25, 2020, 3:39pm UTC](https://support.literatecomputing.com/t/pre-migration-checklist/433 "2020-02-25T15:39:12Z")

</div>

This needs to be customized and migrated here, but . . . Pre-migration questionnaire: https:/meta.discourse.org/t/pre-launch-migration-questionnaire/83996

---

## [Discourse Email Include Address plugin](https://support.literatecomputing.com/t/discourse-email-include-address-plugin/373)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [June 28, 2019, 10:46pm UTC](https://support.literatecomputing.com/t/discourse-email-include-address-plugin/373 "2019-06-28T22:46:17Z")

</div>

This plugin (available here) is for sites that are accustomed to using Discourse as an email list and who, like in the 1990s, be able to email a response directly to the user. This is not really recommended unless your …

---

## [Canvas Data Cleaner](https://support.literatecomputing.com/t/canvas-data-cleaner/500)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [May 29, 2020, 8:42pm UTC](https://support.literatecomputing.com/t/canvas-data-cleaner/500 "2020-05-29T20:42:25Z")

</div>

I wrote a thing to clean up canvas files. It is here:

---

## [Configuring htpasswd (not htpassword) basic auth in Discourse NGINX](https://support.literatecomputing.com/t/configuring-htpasswd-not-htpassword-basic-auth-in-discourse-nginx/584)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [September 9, 2020, 8:13pm UTC](https://support.literatecomputing.com/t/configuring-htpasswd-not-htpassword-basic-auth-in-discourse-nginx/584 "2020-09-09T20:13:23Z")

</div>

htpasswd -nb password\_file =user= =password= Then put that in this field, so it becomes the creds for htpasswd. run: - replace: filename: "/etc/nginx/conf.d/discourse.conf" from: "# auth\_basic o…

---

## [Getting Started with Discourse](https://support.literatecomputing.com/t/getting-started-with-discourse/442)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [April 3, 2020, 10:05pm UTC](https://support.literatecomputing.com/t/getting-started-with-discourse/442 "2020-04-03T22:05:38Z")

</div>

Getting Started The best place for documentation about Discourse are the Howto Guides at Meta.discourse.org. Here are a few to get you started. Understanding Discourse for new users - Using Discourse - Discourse Meta …

---

## [Okla authentication](https://support.literatecomputing.com/t/okla-authentication/410)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [November 27, 2019, 6:27pm UTC](https://support.literatecomputing.com/t/okla-authentication/410 "2019-11-27T18:27:51Z")

</div>

I had some screen shots and everything, but apparently I trashed that. Oh, well. See Discourse OpenID Connect - plugin - Discourse Meta

---

## [Add button to a theme component](https://support.literatecomputing.com/t/add-button-to-a-theme-component/601)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [October 14, 2020, 3:40pm UTC](https://support.literatecomputing.com/t/add-button-to-a-theme-component/601 "2020-10-14T15:40:43Z")

</div>

has an example of adding a button to a post.

---

## [Permalink Topics Plugin](https://support.literatecomputing.com/t/permalink-topics-plugin/538)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [July 30, 2020, 10:41pm UTC](https://support.literatecomputing.com/t/permalink-topics-plugin/538 "2020-07-30T22:41:49Z")

</div>

Something describing the Permalink Topics Plugin should go here.

---

## [Github Action: Manage Discourse Installation](https://support.literatecomputing.com/t/github-action-manage-discourse-installation/540)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [July 31, 2020, 5:56pm UTC](https://support.literatecomputing.com/t/github-action-manage-discourse-installation/540 "2020-07-31T17:56:37Z")

</div>

There will be a description of this right here when there is something to describe!

---

## [Bunny CDN Referral Link](https://support.literatecomputing.com/t/bunny-cdn-referral-link/688)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [February 23, 2021, 11:38pm UTC](https://support.literatecomputing.com/t/bunny-cdn-referral-link/688 "2021-02-23T23:38:51Z")

</div>

Try out bunny-net. I use their CDN on many sites that I manage and host.

---

## [Create S3 Bucket on AWS](https://support.literatecomputing.com/t/create-s3-bucket-on-aws/417)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [December 11, 2019, 11:38pm UTC](https://support.literatecomputing.com/t/create-s3-bucket-on-aws/417 "2019-12-11T23:38:52Z")

</div>

From: Set up file and image uploads to S3 - Self-Hosting - Discourse Meta Go to S3 and click on Create bucket , then fill out the Bucket name . Click the ACLs Enabled box. Uncheck Block all public access check Bl…

---

## [Move s3 from one bucket to another](https://support.literatecomputing.com/t/move-s3-from-one-bucket-to-another/706)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [March 29, 2021, 5:28pm UTC](https://support.literatecomputing.com/t/move-s3-from-one-bucket-to-another/706 "2021-03-29T17:28:05Z")

</div>

Old buckets This assumes that you can install and configure a tool to move your data from your old bucket to a local machine and then again do the same from local to the new bucket. See aws cli sync (which can be con…

---

## [Clone the Discourse Skeleton Plugin](https://support.literatecomputing.com/t/clone-the-discourse-skeleton-plugin/1028)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 1\
**Last updated:** [July 3, 2023, 3:58pm UTC](https://support.literatecomputing.com/t/clone-the-discourse-skeleton-plugin/1028 "2023-07-03T15:58:27Z")

</div>

Paste this to create the theme skeleton git clone https://github.com/discourse/discourse-plugin-skeleton mv discourse-plugin-skeleton =directory\_name= cd =directory\_name= rm -rf .git Paste this to create a gith…

---

## [CSS target admin only](https://support.literatecomputing.com/t/css-target-admin-only/1061)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 1\
**Last updated:** [June 19, 2023, 3:38pm UTC](https://support.literatecomputing.com/t/css-target-admin-only/1061 "2023-06-19T15:38:17Z")

</div>

In the Head tab of your theme, write this: \<script type="text/discourse-plugin" version="1.4.0"\> let currentUser = api.getCurrentUser(); if (currentUser.admin == true) { document.querySelector("body")…

---

## [Navigation Menu (Sidebar) Modifier](https://support.literatecomputing.com/t/navigation-menu-sidebar-modifier/1076)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 1\
**Last updated:** [June 23, 2023, 1:14pm UTC](https://support.literatecomputing.com/t/navigation-menu-sidebar-modifier/1076 "2023-06-23T13:14:29Z")

</div>

Example of how to change sidebar

---

## [Rails Essentials: custom fields, adding to serializer, callbacks](https://support.literatecomputing.com/t/rails-essentials-custom-fields-adding-to-serializer-callbacks/1029)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [May 15, 2023, 8:48pm UTC](https://support.literatecomputing.com/t/rails-essentials-custom-fields-adding-to-serializer-callbacks/1029 "2023-05-15T20:48:38Z")

</div>

See discourse/lib/plugin/instance.rb at main · discourse/discourse · GitHub for the plugin-related methods Discourse provides. GitHub - literatecomputing/discourse-google-group-link is a simple plugin that does most of …

---

## [Create ember component](https://support.literatecomputing.com/t/create-ember-component/1042)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [June 1, 2023, 8:12pm UTC](https://support.literatecomputing.com/t/create-ember-component/1042 "2023-06-01T20:12:33Z")

</div>

Make an example based on this:

---

## [Adding stuff in a plugin outlet](https://support.literatecomputing.com/t/adding-stuff-in-a-plugin-outlet/1030)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [May 15, 2023, 8:50pm UTC](https://support.literatecomputing.com/t/adding-stuff-in-a-plugin-outlet/1030 "2023-05-15T20:50:50Z")

</div>

Here’s stuff for adding stuff to a theme First look in theme-component - Discourse Meta for examples, like See how this file is named and the stuff that’s in it: and then this one can be used to make stuff availab…

---

## [Clone theme skeleton](https://support.literatecomputing.com/t/clone-theme-skeleton/1043)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [June 1, 2023, 8:43pm UTC](https://support.literatecomputing.com/t/clone-theme-skeleton/1043 "2023-06-01T20:43:53Z")

</div>

Paste this to create the theme skeleton git clone https://github.com/discourse/discourse-theme-skeleton mv discourse-theme-skeleton =directory\_name= cd =directory\_name= rm -rf .git Paste this to create a github…

---

## [Starting place for a plugin that adds a webhook](https://support.literatecomputing.com/t/starting-place-for-a-plugin-that-adds-a-webhook/1040)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [May 26, 2023, 6:51pm UTC](https://support.literatecomputing.com/t/starting-place-for-a-plugin-that-adds-a-webhook/1040 "2023-05-26T18:51:50Z")

</div>

Includes stuff like DiscourseEvent.on(:user\_created) and Plugin::Filter.register(:after\_build\_web\_hook\_body) do | and other basics like register\_seedfu\_fixtures(Rails.root.join("plugins", "discourse-mailchimp-we…

---

## [User Field Prompt](https://support.literatecomputing.com/t/user-field-prompt/1091)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [July 7, 2023, 4:30am UTC](https://support.literatecomputing.com/t/user-field-prompt/1091 "2023-07-07T04:30:13Z")

</div>

---

## [Classes for groups](https://support.literatecomputing.com/t/classes-for-groups/1059)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [June 17, 2023, 6:25pm UTC](https://support.literatecomputing.com/t/classes-for-groups/1059 "2023-06-17T18:25:05Z")

</div>

---

## [Sample force popup to do sometijng](https://support.literatecomputing.com/t/sample-force-popup-to-do-sometijng/1045)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [June 2, 2023, 5:25pm UTC](https://support.literatecomputing.com/t/sample-force-popup-to-do-sometijng/1045 "2023-06-02T17:25:56Z")

</div>

---

## [Create new topic permissions](https://support.literatecomputing.com/t/create-new-topic-permissions/1068)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [June 20, 2023, 10:10pm UTC](https://support.literatecomputing.com/t/create-new-topic-permissions/1068 "2023-06-20T22:10:42Z")

</div>

---

## [Add text to only the home page](https://support.literatecomputing.com/t/add-text-to-only-the-home-page/1056)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [June 14, 2023, 4:52pm UTC](https://support.literatecomputing.com/t/add-text-to-only-the-home-page/1056 "2023-06-14T16:52:08Z")

</div>

---

## [Override settings in a plugin](https://support.literatecomputing.com/t/override-settings-in-a-plugin/1067)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [June 20, 2023, 10:08pm UTC](https://support.literatecomputing.com/t/override-settings-in-a-plugin/1067 "2023-06-20T22:08:46Z")

</div>

---

## [Get current route name](https://support.literatecomputing.com/t/get-current-route-name/1069)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [June 20, 2023, 10:17pm UTC](https://support.literatecomputing.com/t/get-current-route-name/1069 "2023-06-20T22:17:18Z")

</div>

api.onPageChange((url, title) =\>{ const router = api.container.lookup('service:router'); console.log(router.currentRoute.name); }

---

## [Change defaults on polls (and maybe other stuff)](https://support.literatecomputing.com/t/change-defaults-on-polls-and-maybe-other-stuff/1057)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [June 16, 2023, 3:45pm UTC](https://support.literatecomputing.com/t/change-defaults-on-polls-and-maybe-other-stuff/1057 "2023-06-16T15:45:33Z")

</div>

api.modifyClass("controller:poll-ui-builder", { onShow() { this.\_super(...arguments); if (settings.Public) {this.set('publicPoll', true)}; if (settings.Advanced) {this.set('showAdvanced', true)}; } })…

---

## [Customize new topic button text based on category or tag](https://support.literatecomputing.com/t/customize-new-topic-button-text-based-on-category-or-tag/1070)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [June 20, 2023, 10:25pm UTC](https://support.literatecomputing.com/t/customize-new-topic-button-text-based-on-category-or-tag/1070 "2023-06-20T22:25:13Z")

</div>

---

## [Referral links](https://support.literatecomputing.com/t/referral-links/1161)

<div class="topic-metadata">

**Author:** [@pfaffman](https://support.literatecomputing.com/u/pfaffman)\
**Replies:** 0\
**Last updated:** [September 1, 2023, 6:42pm UTC](https://support.literatecomputing.com/t/referral-links/1161 "2023-09-01T18:42:36Z")

</div>

We use UptimeRobot to track uptime on hosted sites. Need a CDN? Check out Bunny.net Use this link for free credit at Digital Ocean to get started.
