Lumen is an open-source group discussion platform with dual web-email access. It can be compared to Discourse, Loomio, Slack, Google Groups or Facebook Groups. An outline of its features:
- Open-source (under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported)
- Hosted using DigitalOcean/dokku
- Designed for custom domains (group email addresses of the form yourgroup@yourdomain.org)
- Sends and receives mail via regular SMTP and IMAP accounts
- Dual web/email access
- Extensible member profiles
- Loomio-style proposals
- Events calendar
- Maps placing people, organisations and venues
- Google Docs integration
- Optional Facebook-style wall view
Lumen is written in Ruby using the Padrino framework. It was originally created for the New Economy Organisers Network (hosted by the New Economics Foundation) who kindly agreed to open source the project and continue to sponsor its development.
## How the mailing lists work, in brief
- Your mail server receives a mail to yourgroup@yourdomain.org
- The mail triggers a simple notification script on the mail server that in turn alerts your web app to the fact there's a new message for the group
- Your web app connects to the mail server via IMAP to fetch the new mail
- Your web app distributes the message to group members via SMTP
-
Create a 2GB (or greater) droplet, which will act as both your web and mail server, with the image 'Dokku 0.9.4 on 16.04' and hostname
$DOMAIN
(this could be a root domain like lumenapp.com, or a subdomain like network.lumenapp.com). SSH into the server viassh root@$DROPLET_IP
. -
Run the installation script, replacing
$DROPLET_IP
and$DOMAIN
with the appropriate values:wget https://raw.github.com/wordsandwriting/lumen/master/script/lumen-install.sh; chmod +x lumen-install.sh; ./lumen-install.sh $DROPLET_IP $DOMAIN
-
Add DNS records (get DKIM key with
nano -$ /etc/opendkim/keys/$DOMAIN/mail.txt
):$DOMAIN MX $DOMAIN $DOMAIN A $DROPLET_IP $DOMAIN TXT "v=spf1 mx -all" mail._domainkey.$DOMAIN TXT "v=DKIM1; k=rsa; p=..."
-
Visit
$DOMAIN
. (You should be automatically logged in as an administrator. If not, sign in with the email addressadmin@example.com
and the passwordlumen
.) Change the admin name, email address and password, then click 'Configuration' in the footer to set configuration variables. You're done!
If you switch your mail server, you'll need to re-setup the group mail accounts on the new server. Fire up a console (padrino c
) and run:
Group.each { |group| group.setup_mail_accounts_and_forwarder }
ConversationPost.update_all(imap_uid: nil)