Colophon

What is a colophon?

We use the term colophon  as a way to tell you something about the website you’re viewing. We do this for 2 reasons:

  1. To explain exactly how tiaa-forum.org is put together (what technologies and hosting we use in support of what you see on the site.
  2. If you know better technologies or practices than you see us using here, you might be able to suggest them to us for our consideration. The best way to do that is to post a topic in the forum category “#forum-site-feedback.” If you’re not a member of the forum (please, sign up! 😉 ), you can send email to info@tiaa-forum.org and at least one of our administrators will be happy to consider your suggestions.

Basic Information

The forum is comprised of a WordPress front end and a Discourse discussion forum.

The Discourse forum was originally brought up in late 2015 and made public in early 2016 (originally named naatw-forum.org, it was renamed tiaa-forum.org in late 2016).

It was the group conscience of the forum and the forum administrators to only allow forum members to share in the forum. The WordPress front end is used primarily for:

  1. giving potential new members an interface to request an invitation
  2. providing a “public” face to the forum:
    • allows us to improve search engine optimization to allow others to find the forum easier (with the Discourse software, we had no simple way to improve our visibility on the web without risking forum security)
    • provides a platform for publishing technical information that might be useful to non-members
  3. allowing us to develop tools in a WordPress environment which might be better supported going forward (e.g. – there seems to be more skilled talent available for a PHP/WordPress environment than the ruby/rails ember environment of the Discourse platform)
  4. supporting an ability for forum members to contribute financially to forum support

Forum (Discourse)

As a few attendees of the first couple of the National AA Technical Workshops  looked into ways of persisting and extending conversations between annual workshops, several platform options (e.g. phpBB, Vbulletin, etc.) including both hosted services and stand-alone software.

Some attractive features of setting up an instance of Discourse included (arbitrary – may be more):

  1. open source
  2. modern, responsive web interface
  3. emoji support
  4. markdown style editing
  5. scalable to small and large communities (some Discourse communities are in the 100”s of thousands and more members)
  6. fairly good support community (meta) with folks who are really into communities (developed by the same folks who brought us stackexchange and stackoverflow)
  7. wide community support and general use (thousands of popular forums)
  8. fairly simple administration

Discourse is built as a ruby on rails application with an ember Javascript framework front end that runs in the browser. This means that, even for huge forums with lots of active members, little additional load is presented to the host per each transaction by a single forum member. As a mature app serving millions of members across hundreds of forums, there are hundreds of dependencies of ruby gems and other components to improve performance and throughput.

Discourse is packaged as docker container so it’s simpler to install, admin and keep updated (more in the Plumbing section below).

Front End (WordPress)

We (the forum admins) chose WordPress as a front end because of WordPress’s impressive popularity and market share, both in general and within the tiaa-forum.org member community. As we presume admins will all eventually rotate on or disappear, we felt using WP would give us the broadest talent pool whereby admins could be replaced when needed.

WordPress theme

Our current configuration uses a fairly heavily modified TwentySeventeen theme. We wanted to use a standard (WordPress provided) theme for maximum simplicity but, to meet certain design suggestions, we opted to create a WordPress Child Theme  to support a different placement of the navigation menu as well as some widgets to allow for calls to action (e.g. sign up, login) in the header area. Since we were using a child theme, we also are doing quite a bit of additional customization to meet design/style tastes (e.g. using the child theme’s styles.css for managing over-all presentation of the site). In the future, we may find a better/simpler way to use a supported non-WordPress provided theme while accomplishing other design priorities using available plugins.

WordPress Plugins

As of 8/15/18, we are still “trying out” various plugins. We are always open to suggestions based on others’ experiences…

  1. Akismet — a common WP anti-spam filter used primarily for blocking spam in comments (which we have turned off) but we hope it will be useful in protecting us from other vulnerabilities
  2. Arconix FAQ – allows us to have a FAQ outside our Discourse forum (in public)
  3. Duplicator – allows us to create backups/images of our WP site easily. Can also automate this using their pro version which we will probably want to do at some point
  4. Easy WP SMTP – makes it simple to work with our mail gateway solution. Unfortunately, as of 8/18/18, we have a hack on this plugin to allow our Sign Up form to work the way we  want… Developer has been handed to code so hopefully will be integrated in a future update…
  5. Formidable Forms – this forms package allows us to do fairly simple forms for sign up, contact and donations. Since their Stripe plugin (Stripe is our is our payment processor for contributions) requires their pro version, we had to upgrade to the paid version.
  6. Gutenberg – we’re trying this new WP provided editor out – probably a blog post coming on this…
  7. If Menu – allows us to show different navigation/pages based on whether a member is logged in or not
  8. Popup Maker – allows buttons f(e.g. for signup and login) to bring up forms
  9. Redirection – works with Discourse login to make sure the WP and Discourse instance maintain the same logged in state
  10. Simple history – tracks changes to the site so that a number of administrators can share work without stepping on each other as much…
  11. Widget Logic – allows us to use modal logic (e.g. when a member is logged in or not) with our widgets.
  12. WP-Discourse – this plugin is provided by the Discourse developers so that we can use Discourse as our login for our site and connect a WordPress environment to the Discourse environment via an API.

In addition to these plugins, we have a couple of Must Use Plugins wherein we override some pluggable WP functions in order to get the login/logout behavior we desired.

Hosting

The entire site is hosted on a DigitalOcean virtual host. Unlike other hosting companies, you basically rent “raw iron” (the equivalent of a standalone computer) from the hosting company and, as such, one has to do all the basic system administration tasks (software installation, updates, backups, etc.) oneself.

We (the initial forum admins) selected DO as a VPN provider because:

  1. we had some experience with them
  2. they were fairly competitive in price with other, similar services
  3. in 2015, they were one of the few providers that assured all disk was SSD based (has much higher performance) which impressed us
  4. they have a good reputation for support and ability to scale
  5. the DO tutorials about setting up Discourse and WordPress droplets as well as the DO specific help on the Discourse support site (meta) and the WordPress support forums seemed to give us all the information we needed to get started with a deployment

Our entire site (all containers as explained below in the “Plumbing” section) is run on a single DO “droplet” (VPN) configured with one processor, 2GB memory,  and 50 GB of storage.

We keep one “snapshot” of an image from each time we change something major in the configuration as well as we take automatic live backups weekly.

We also keep an near-equivalent droplet image we can quickly spin up or spin down for testing (both WordPress and Discourse) without impacting the production forum droplet.

Plumbing

When a request comes to the virtual machine (VM) from the web, based on the URL requested, the nginx server running on the VM will pass the transaction to either the container for WordPress (if tiaa-forum.org) or the container for Discourse (if discourse.tiaa-forum.org).

The WordPress environment is run on a Docker-compose container (actually, the WordPress instance and the Database server that supports it are run on two separate containers but managed from a single configuration file) which is running an Apache server supporting a PHP environment.

The forum Discourse environment is run on another Docker container which is running another nginx server supporting a ruby-on-rails environment.

As currently configured, all containers are run on the same virtual machine (VM). This can be changed in the future should the forum grow or should additional resources be required. While this may seem like a complicated configuration, web response per transaction is quite good.

Our outbound email services are currently supported by Sendgrid.

Inbound email services (as well as some other administrative/documentation needs ) are served by a Google G Suite account.