2014-04-14 13:49:39 +08:00
The [Discourse Docker Image][dd] makes it easy to set up Discourse on a cloud server. We will use [Digital Ocean][do], although these steps may work on other cloud providers that support Docker.
2014-02-23 15:16:56 +08:00
2014-03-25 07:51:16 +08:00
This guide assumes that you have no knowledge of Ruby/Rails or Linux shell.
2014-02-23 15:16:56 +08:00
2014-02-23 19:03:21 +08:00
# Create New Digital Ocean Droplet
2014-02-23 15:16:56 +08:00
2014-03-25 07:51:16 +08:00
[Sign up for Digital Ocean][do], update billing info, then begin creating your new cloud server (Droplet).
2014-04-09 14:38:48 +08:00
Discourse requires a minimum of 1 GB RAM for small communities; we recommend 2 GB RAM for medium communities. We'll use "discourse" as the Hostname.
2014-02-23 15:16:56 +08:00
2014-03-01 07:34:34 +08:00
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/3506/a6b550bd2b05b76b.png" width = "638" height = "500" >
2014-02-23 15:16:56 +08:00
2014-04-14 13:49:39 +08:00
Install Discourse on Ubuntu 12.04.4 LTS x64. We always recommend using [the current LTS distribution][lts].
2014-02-23 15:16:56 +08:00
2014-02-23 16:36:09 +08:00
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/3399/f3fc67ee6aa90ea4.png" width = "690" height = "477" >
2014-02-23 15:16:56 +08:00
2014-04-14 13:49:39 +08:00
You will receive a mail from Digital Ocean with the root password to your Droplet. (However, if you know [how to use SSH keys ](https://www.google.com/search?q=digitalocean+ssh+keys ), you may not need a password to log in.)
2014-02-23 15:16:56 +08:00
2014-02-23 19:03:21 +08:00
# Access Your Droplet
2014-02-23 15:16:56 +08:00
2014-02-24 01:38:06 +08:00
Connect to your Droplet via SSH:
2014-02-23 15:16:56 +08:00
ssh root@192.168.1.1
2014-02-24 01:38:06 +08:00
(Alternately, use [Putty][put] on Windows)
Replace `192.168.1.1` with the IP address of your Droplet.
2014-02-23 15:16:56 +08:00
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/2999/0934a0158459ec3f.png" width = "571" height = "130" >
2014-04-14 13:49:39 +08:00
You will be asked for permission to connect, type `yes` , then enter the root password, which is in the email Digital Ocean sent you when the Droplet was set up.
2014-02-23 15:16:56 +08:00
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/3000/8209c1e40c9d70a8.png" width = "570" height = "278" >
2014-04-04 07:17:30 +08:00
# Update the kernel
2014-03-16 10:56:23 +08:00
2014-02-27 22:36:14 +08:00
apt-get update
apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
2014-02-23 15:16:56 +08:00
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/3001/e94722e882f28994.png" width = "566" height = "339" >
Reboot the server:
2014-02-27 22:36:14 +08:00
reboot
2014-02-23 15:16:56 +08:00
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/3003/d3cc759ced335d25.png" width = "532" height = "155" >
2014-02-25 17:19:12 +08:00
This will log you out from your SSH session, so reconnect:
2014-02-23 15:16:56 +08:00
ssh root@192.168.1.1
2014-04-09 14:38:48 +08:00
# Set up Swap (if needed)
- If you're using the minimum 1 GB install, you *must* [set up a swap file ](https://meta.discourse.org/t/create-a-swapfile-for-your-linux-server/13880 ) of 1 GB minimum.
- If you're using 2 GB+ memory, you can probably get by without a swap file.
2014-04-04 07:17:30 +08:00
# Install Git
apt-get install git
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/3002/eafbf14df8eee832.png" width = "572" height = "263" >
# Install Docker
2014-02-23 15:16:56 +08:00
2014-02-27 22:36:14 +08:00
wget -qO- https://get.docker.io/ | sh
2014-02-23 15:16:56 +08:00
# Install Discourse
2014-02-23 15:40:04 +08:00
Create a `/var/docker` folder where all the Docker related stuff will reside:
2014-02-23 15:16:56 +08:00
mkdir /var/docker
2014-02-23 16:02:29 +08:00
Clone the [Official Discourse Docker Image][dd] into this `/var/docker` folder:
2014-02-23 15:16:56 +08:00
2014-02-25 17:27:34 +08:00
git clone https://github.com/discourse/discourse_docker.git /var/docker
2014-02-23 15:16:56 +08:00
2014-02-25 17:19:12 +08:00
Switch to your Docker folder:
2014-02-23 15:16:56 +08:00
cd /var/docker
Copy the `samples/standalone.yml` file into the `containers` folder as `app.yml` , so the path becomes `containers/app.yml` :
cp samples/standalone.yml containers/app.yml
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/3005/5c253f4657e2133f.png" width = "571" height = "56" >
2014-04-14 13:49:39 +08:00
# Editing Discourse Configuration
2014-02-24 02:11:34 +08:00
Edit `app.yml` :
2014-02-23 15:16:56 +08:00
nano containers/app.yml
2014-04-09 14:38:48 +08:00
(We recommend Nano because it works like a typical GUI text editor, just use your arrow keys. Hit < kbd > Ctrl< / kbd > < kbd > O< / kbd > then < kbd > Enter< / kbd > to save and < kbd > Ctrl< / kbd > < kbd > X< / kbd > to exit. However, feel free to choose whatever text editor you like.)
2014-02-23 15:16:56 +08:00
2014-04-14 13:49:39 +08:00
- Set `DISCOURSE_DEVELOPER_EMAILS` and `DISCOURSE_HOSTNAME` .
2014-02-23 15:16:56 +08:00
2014-04-09 14:38:48 +08:00
- If you are using a 1 GB instance, set `UNICORN_WORKERS` to 2 so you have more memory room.
2014-02-23 15:16:56 +08:00
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/2979/e6fedbde9b471880.png" width = "565" height = "172" >
2014-04-14 13:49:39 +08:00
If you set `DISCOURSE_HOSTNAME` to `discourse.example.com` , this means you want your Discourse available at `http://discourse.example.com/` . You'll need to update the DNS A record for this domain with the IP address of your server.
2014-02-23 15:16:56 +08:00
2014-04-14 13:49:39 +08:00
**Email is critical to notifications in Discourse. If you do not configure email before bootstrapping you will have a broken site!**
2014-02-23 15:16:56 +08:00
2014-02-23 15:40:04 +08:00
- If you already have a mail server, put your existing mail server credentials in the `app.yml` file.
2014-02-23 15:16:56 +08:00
2014-02-24 01:41:04 +08:00
- Otherwise, create a free account on [**Mandrill**][man] (or [Mailgun][gun], or [Mailjet][jet]), and put your mail credentials (available via the Mandrill dashboard) in the `app.yml` file. The settings you want to change are `DISCOURSE_SMTP_ADDRESS` , `DISCOURSE_SMTP_PORT` , `DISCOURSE_SMTP_USER_NAME` , `DISCOURSE_SMTP_PASSWORD` .
2014-02-23 15:16:56 +08:00
2014-03-16 06:29:26 +08:00
- Be sure you remove the comment character and space `# ` from the beginning of these mail configuration lines!
2014-04-14 13:49:39 +08:00
- Don't forget to set the [SPF and DKIM records ](http://help.mandrill.com/entries/21751322-What-are-SPF-and-DKIM-and-do-I-need-to-set-them-up- ) up for your domain name. In Mandrill, that's under Sending Domains, View DKIM/SPF setup instructions. Also, the name of your droplet is your reverse PTR record; rename your droplet to match your domain name `discourse.example.com` .
2014-02-23 15:16:56 +08:00
# Bootstrap Discourse
2014-02-23 15:40:04 +08:00
Be sure to save the `app.yml` file, and begin bootstrapping Discourse:
2014-02-23 15:16:56 +08:00
2014-02-27 22:36:14 +08:00
./launcher bootstrap app
2014-02-23 15:16:56 +08:00
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/3007/c0596ad3d330ae71.png" width = "567" height = "138" >
2014-04-06 03:07:09 +08:00
This command can take up to 8 minutes. It is automagically configuring your Discourse environment.
2014-02-23 15:16:56 +08:00
After that completes, start Discourse:
2014-02-27 22:36:14 +08:00
./launcher start app
2014-02-23 15:16:56 +08:00
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/3008/ced00cf4782f020c.png" width = "568" height = "137" >
2014-02-24 01:38:06 +08:00
Congratulations! You now have your own instance of Discourse, accessible via the domain name you entered in `app.yml` earlier.
2014-02-23 15:16:56 +08:00
2014-03-01 08:16:01 +08:00
< img src = "https://meta-discourse.r.worldssl.net/uploads/default/3507/d01eee7415f860f2.png" width = "690" height = "291" >
2014-02-23 15:16:56 +08:00
2014-02-23 17:55:01 +08:00
You can also access it by visiting the server IP address directly, e.g. `http://192.168.1.1` .
2014-02-23 15:16:56 +08:00
2014-02-23 18:12:40 +08:00
# Log In and Become Admin
2014-02-23 15:16:56 +08:00
2014-03-18 05:39:19 +08:00
Sign into your Discourse instance. There should be a reminder visible on the site about which email was used for the `DISCOURSE_DEVELOPER_EMAILS` address. Be sure you log in with that email, and your account will be made Admin by default.
2014-02-23 15:16:56 +08:00
2014-03-15 02:26:38 +08:00
# Post-Install Maintenance
To **upgrade Discourse to the latest version** , visit `/admin/docker` , refresh the page a few times (yes, seriously) and then press the Upgrade button at the top. View the live output at the bottom of your browser to see when things are complete. You should see:
Killed sidekiq
Restarting unicorn pid: 37
Then you know it's complete. (Yes, we will be improving this process soon!)
2014-04-09 14:45:48 +08:00
The `launcher` command in the `/var/docker` folder can be used for various kinds of maintenance:
```
Usage: launcher COMMAND CONFIG
Commands:
start: Start/initialize a container
stop: Stop a running container
restart: Restart a container
destroy: Stop and remove a container
ssh: Start a bash shell in a running container
logs: Docker logs for container
bootstrap: Bootstrap a container for the config based on a template
rebuild: Rebuild a container (destroy old, bootstrap, start new)
```
2014-03-23 14:43:05 +08:00
# Other Optional Stuff
Do you want...
- Users to log in via Facebook? [Configure Facebook logins ](https://meta.discourse.org/t/configuring-facebook-login-for-discourse/13394 ).
- Users to log in via Twitter? [Configure Twitter logins ](https://meta.discourse.org/t/configuring-twitter-login-for-discourse/13395/last ).
- Users to post reples via email? [Configure reply via email ](https://meta.discourse.org/t/set-up-reply-via-email-support/14003 ).
2014-03-25 07:51:16 +08:00
- Automatic daily backups? [Configure backups ](https://meta.discourse.org/t/hot-off-the-presses-automated-backup-support/13805 )
2014-02-23 16:02:29 +08:00
If anything needs to be improved in this guide, feel free to ask on [meta.discourse.org][meta], or even better, submit a pull request.
2014-02-23 15:16:56 +08:00
2014-02-23 16:02:29 +08:00
[dd]: https://github.com/discourse/discourse_docker
[man]: https://mandrillapp.com
[ssh]: https://help.github.com/articles/generating-ssh-keys
[meta]: https://meta.discourse.org
2014-03-25 07:51:16 +08:00
[do]: https://www.digitalocean.com/?refcode=5fa48ac82415
2014-02-23 16:02:29 +08:00
[lts]: https://wiki.ubuntu.com/LTS
2014-02-24 01:38:06 +08:00
[jet]: http://www.mailjet.com/pricing
[gun]: http://www.mailgun.com/
[put]: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html