Beginners Guide to Install Discourse on Ubuntu for Development

:warning: This guide covers installation instructions in development environment, for a production guide see: How to install Discourse in production

So you want to set up Discourse on Ubuntu to hack on and develop with?

We’ll assume that you don’t have Ruby/Rails/Postgre/Redis installed on your Ubuntu system. Let’s begin!

Although this guide assumes that you are using Ubuntu, but the set-up instructions will work fine for any Debian based distribution.

(If you want to install Discourse for production use, see our install guide)

Install Discourse Dependencies

As regular user run this script in terminal, to setup Rails development environment:

bash <(wget -qO- https://raw.githubusercontent.com/techAPJ/install-rails/master/linux)

This will install following new packages on your system:

In case you have any of this package pre-installed and don’t want to run entire script, see the script and pick the packages you don’t have currently installed. The script is fine-tuned for Discourse, and includes all the packages required for Discourse installation.

Now that we have installed Discourse dependencies, let’s move on to install Discourse itself.

Clone Discourse

Clone the Discourse repository (or your fork) in ~/discourse folder:

git clone https://github.com/discourse/discourse.git ~/discourse

Setup Database

Create role with the same name as your ubuntu system username:

sudo -u postgres createuser -s "$USER"

Bootstrap Discourse

Switch to your Discourse folder:

cd ~/discourse

Install the needed gems

source ~/.bashrc
bundle install

Now that you have successfully configured database connection, run these commands:

bundle exec rake db:create 
bundle exec rake db:migrate
RAILS_ENV=test bundle exec rake db:create db:migrate

Now, try running the specs:

bundle exec rake autospec

Start rails server: (to have it available only on localhost)

bundle exec rails server

or use this command to have it listening on all interfaces and available remotely

bundle exec rails server --binding=0.0.0.0

You should now be able to connect to discourse app on http://localhost:3000 - try it out!

Create New Admin

To create a new admin, run the following command:

RAILS_ENV=development bundle exec rake admin:create

Follow the prompts, and a new admin account will be created.

Configure Mail

Run MailHog:

mailhog

Congratulations! You are now the admin of your own Discourse installation!

Happy hacking! And to get started with that, see Beginner’s Guide to Creating Discourse Plugins.

35 Likes
Beginners Guide to Install Discourse on Windows 10 for Development
HOWTO Set up a development environment using vagrant (Ubuntu guide)
Share your Discourse dev setup
Discourse Development Contribution Guidelines
Docker setup for development
Why is my dev server not showing me uploaded images in Topics?
Discourse as Your First Rails App
Moderation Tools
Jhead and svgo errors while running specs
Rspec failing to load when using the official beginners guide
Not receiving Activation Email
Migrating to Discourse from another Forum software
How to install Discourse on windows
Share your Discourse dev setup
Discourse running very slow on local machine
Override profile background via SSO
Can't find the Discourse folder inside virtual box via ssh
Importing MyBB database to Discourse
How to install Discourse on windows
Install Discourse on Ubuntu for Development
How to create new user with verified email in development mode?
Issue in setup discourse on ubuntu server
Can't set up dev environment due to cppjieba_rb failing to install
Unable to create Vagrant local installation
Installing problem - bundle install
How to get a docker image of discourse using bash on windows 10?
Attachment filename not set on download
[PAID] Import from Legacy Postgres DB
Dev Category sidebar
How to add a new language
Beginner's Guide to Creating Discourse Plugins Part 1: Creating a basic plugin
Discourse Server logs show DB queries when I run the server
Using the Discourse API Ruby Gem
Does Gemfile need to include svg?
Does Gemfile need to include svg?
Find app.yml on unsupported-install
Database wont migrate Discourse
I want to build a debug version of discourse
How To Use Screen To Bootstrap A Development Install (Ubuntu)
Can I install discourse on my local machine
How to reset discourse on dev mode? (w/o docker)
Migrating from Ning to Discourse
Beginners Guide to Install Discourse on Windows 10 for Development
Nodebb to Discourse
Beginners Guide to Install Discourse on Windows 10 for Development
Beginners Guide to Install Discourse on Windows 10 for Development
RSpec search_spec.rb RateLimiter LimitExceeded problems
Discourse as Your First Rails App
Issue with vagrant version following the dev guide
NULL first_visited_at dates in the topic_users table
Multiple instances. Visiting the second instance signs out the logged in account on the running instance
Can't run my Discourse locally
I want to install a plugin for development, what should I do?
Mini_racer installation issues on ubuntu vagrant (OSX)
Bundle exec rake fails
Vbulletin 4 import -
Hello from Gitpod! (installing on google cloud + automated dev setup)
How to Install Discourse on LocalHost in Windows?
Migration from Yahoo! Groups
Does the forum for development start up 24 hours*?
Two issues: Are they related to sidekiq? uninitialized constant Jobs::Jobs ::Scheduled (Discourse Newbie)
How to allow customs hosts in development mode
Any interest in Podman?
Beginners Guide to Install Discourse for Development using Docker
Bundler cannot continue due installation error of mini_racer 0.4.0
How to setup discourse in my local for development?
How might we better structure #howto?
Please help, how do I install Discourse on macOS?
How might we better structure #howto?
Can't reach Discourse server in VM from Host
Importing / migrating MyBB to Discourse
Export only database data Postgres (for users, posts and topics)
Images are not being populated in discourse
How to install Discourse locally?
Setting up Discourse for development on Fedora
Beginner's Guide to Creating Discourse Plugins Part 1: Creating a basic plugin
How to open via internal IP?
Discourse Local setup
Is this correct? How long to install dev Version?
Overriding user_guardian.rb in a plugin (no fork necessary!)
Overriding user_guardian.rb in a plugin (no fork necessary!)
Importing / migrating from Kunena 3
Importing / migrating Phorum to Discourse
Importing / migrating MyBB to Discourse
Importing / migrating from FluxBB
Importing / migrating PunBB to Discourse
Importing / migrating NodeBB (MongoDB) to Discourse
Importing / migrating from vBulletin 4
Importing / migrating NodeBB (Redis) to Discourse
Installing Plugins in Discourse Development Install
How Sam's Windows development environment is configured
Site setting is different Every time on Ubuntu development installation
Problems with understanding the development of Discourse
How do I change the address in the database?
Discourse on local pc
Error while importing topics from Flarum (users, groups import OK)
Importing / migrating from phpBB3
Importing / migrating MyBB to Discourse
Unable to Install Discourse for development
Docker in VMWare - How to access to Discourse
How can I make my own Discourse plugins?
Beginners Guide to Install Discourse on Windows 10 for Development
What is the latest recommended workflow for local development? (Ubuntu 16.04)
What is the latest recommended workflow for local development? (Ubuntu 16.04)
How to customize the Discourse app using docker container?
Update PhantomJS to latest for Ubuntu dev guide?
A check for updates has not been performed lately. Ensure sidekiq is running
How to fix bundler executable conflicts in the `techAPJ/install-rails` script?
How do I set up a local Discourse Development Environment?
Ubuntu development install: Permission denied @ apply2files
Install discourse on localhost
Trouble getting a top level page to Ember
Formal german available?
Any interest in Podman?
Rake aborted message is showing when installing vagrant development
Where is the db connection information discourse?
How to install the bootsnap gem?
Google Groups Import Script Fails (Due to Invalid Browser)
MailCatcher not catching email
Migrating from GetSatisfaction to Discourse
State of disqus to discourse importer
Connecting to Droplet
Connecting to Droplet
Migrating from bbPress WordPress plugin to Discourse
Beginners Guide to Install Discourse on Windows 10 for Development
Install and import Mysql on the development environment
Can't uninstall on Ubuntu 18.04

Hi @techAPJ

I’m trying to get this working (again) but I’m getting a fatal error

FATAL: database "discourse_development" does not exist

I also had to add this step before I could set up the database?
(Borrowed from the Windows10 install guide)

sudo service postgresql start
redis-server --daemonize yes

Any ideas?
I also got a warning about an old version of node.js as it installed dependencies.
I’m not sure if it automatically updated.

So these instructions were working very well right up to the point where my localhost:3000 landing page said there were no accounts and invited me to register. So I shut the server down and created an admin account as shown.

RAILS_ENV=development bundle exec rake admin:create

Which appears to have switched environments and upon restarting the server and navigating to localhost:3000 it now tells me I have to run ember-cli instead.

ember-cli however is not at all happy.

First telling me that the node engine is sad.

bin/ember-cli
error discourse@0.0.0: The engine "node" is incompatible with this module. Expected version ">= 12.*". Got "10.24.1"
error Found incompatible module.

And then telling me after I updated nodejs

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:67:19)
    at Object.createHash (node:crypto:130:10)
    at module.exports (/home/cmacfarl/discourse/app/assets/javascripts/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/home/cmacfarl/discourse/app/assets/javascripts/node_modules/webpack/lib/NormalModule.js:417:16)
    at handleParseError (/home/cmacfarl/discourse/app/assets/javascripts/node_modules/webpack/lib/NormalModule.js:471:10)
    at /home/cmacfarl/discourse/app/assets/javascripts/node_modules/webpack/lib/NormalModule.js:503:5
    at /home/cmacfarl/discourse/app/assets/javascripts/node_modules/webpack/lib/NormalModule.js:358:12
    at /home/cmacfarl/discourse/app/assets/javascripts/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/home/cmacfarl/discourse/app/assets/javascripts/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at Array.<anonymous> (/home/cmacfarl/discourse/app/assets/javascripts/node_modules/loader-runner/lib/LoaderRunner.js:205:4) {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

Node.js v17.0.1

I’m using Unbuntu 20.04 LTS on WSL.

Any Ember CLI thoughts here @eviltrout @techAPJ?

After posting that ember-cli failure, I was able to get it installed and working as I documented in this post

However, it seemed fundamentally broken when trying to do plugin development. The beginner development documentation, or the “how to get started with plugin development” documentation, would benefit from some discussion of ember-cli and how to manage development within it’s framework.

I kind of just consider myself lucky to have run across NO_EMBER_CLI, and that seemed to work. Otherwise I likely would have ended up in abject failure.

I no longer run ubuntu but I bet @techAPJ can figure out the missing steps.

I’m curious what hurdles you hit? We do all our plugin development in Ember CLI so I know it works.