snikket-server/docs/setup/quickstart.md

176 lines
6.1 KiB
Markdown

---
title: "Quick-start guide"
date: 2020-01-14T16:32:02Z
---
# Introduction
Hi, welcome! This is a guide to help you set up your own [Snikket service](/service/). Once it is set up,
you will be able to invite others to join you using the [Snikket app](/app/) and chat over your own
private messaging server!
Right, let's get started...
!!! warning
Heads up! Snikket is currently in its early stages (we launched at FOSDEM 2020!). Although you can
use Snikket today, there are many features that are still to come, and we're working on improving the setup
experience.
If you have any questions, feedback, or words of encouragement, we'd love to hear from you! Email us at
feedback@snikket.org.
## Requirements
To follow this guide you will need:
- A server running Linux that you have SSH or terminal access to
- A domain name that you can create subdomains on
For the server, you can use a VPS from a provider such as [DigitalOcean](https://digitalocean.com/) (you can use this [referral link for $100 credit](https://m.do.co/c/3ade5a32d0e0)),
or you can use a physical device such as a Raspberry Pi. Note that if you run your server at home (which is _really_ cool!) you may need to forward some ports on your
router.
!!! warning
**Important:** Snikket provides a built-in web server that must be accessible on port 80. Therefore this guide assumes you are _not_ running any existing
websites on the same server. We are working to remove this requirement in a future version.
## Get Started
### Step 1: DNS
First you need to find your server's public ("external") IP address. If you are using a hosted server, this may be shown in your management dashboard.
At a pinch you can use an online service, e.g. by running `curl -4 ifconfig.co` in your terminal.
Now, add an A record for your IP address on the domain you want to run Snikket on. In the examples I'm going to use 'chat.example.com' as the domain,
and '10.0.0.2' as the IP address. This will be the primary domain for your Snikket service.
```
# Domain TTL Class Type Target
chat.example.com. 300 IN A 10.0.0.2
```
How to add records depends on where your DNS is hosted. Here are links to guides for a few common providers:
- [GoDaddy](https://uk.godaddy.com/help/add-an-a-record-19238)
- [Gandi](https://docs.gandi.net/en/domain_names/faq/record_types/a_record.html)
- [Namecheap](https://www.namecheap.com/support/knowledgebase/article.aspx/319/2237/how-can-i-set-up-an-a-address-record-for-my-domain)
**Tip:** If you have an IPv6 address too, this is where you can add it - simply make another record for `chat.example.com.` with the record
type `AAAA` and put your IPv6 address as the target.
Now that you have an A record, you also need a couple more records. To avoid repeating the IP address everywhere, we'll use CNAME records,
which are just like aliases of the main domain:
```
# Domain TTL Class Type Target
groups.chat.example.com 300 IN CNAME chat.example.com.
share.chat.example.com 300 IN CNAME chat.example.com.
```
These subdomains provide group chat functionality and file-sharing respectively.
### Step 2: Docker
Docker is a handy tool for running self-contained services known as "containers". We use Docker to provide Snikket
in a clean way that works reliably across all different systems.
If you have the `docker` and `docker-compose` commands already available on your system, great! You can skip to Step 3 below. If not, continue reading.
#### docker
Getting docker up and running can vary depending on what OS you're running. Luckily Docker provides an installation guide
for a range of operating systems. Follow the guide for your system:
- [CentOS](https://docs.docker.com/install/linux/docker-ce/centos/)
- [Debian](https://docs.docker.com/install/linux/docker-ce/debian/)
- [Fedora](https://docs.docker.com/install/linux/docker-ce/fedora/)
- [Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/)
#### docker-compose
The Docker folks also provide a handy tool called `docker-compose` which is not installed by default. We're going to use it
as an easy way to launch and configure Snikket.
As per the [installation instructions](https://docs.docker.com/compose/install/) (see the 'Linux' tab there), install
`docker-compose` with the following commands:
```
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod a+x /usr/local/bin/docker-compose
```
### Step 3: Prepare for Snikket!
This is exciting, we're so close!
Create a configuration directory and switch to it:
```
mkdir /etc/snikket
cd /etc/snikket
```
And then create a new file there called `docker-compose.yml` using a text editor (such as nano, or vim).
```
nano docker-compose.yml
```
And here is what you should put in the file:
```
version: "3.3"
services:
snikket:
container_name: snikket
image: snikket/snikket:alpha
env_file: snikket.conf
restart: unless-stopped
network_mode: host
volumes:
- snikket_data:/snikket
volumes:
snikket_data:
```
Now create another file in the same directory, `snikket.conf` with the following contents:
```
# The primary domain of your Snikket instance
SNIKKET_DOMAIN=chat.example.com
# An email address where the admin can be contacted
# (also used to register your Let's Encrypt account to obtain certificates)
SNIKKET_ADMIN_EMAIL=you@example.com
```
Change the values to match your setup.
### Step 4: Launch
Here we go! Run:
```
docker-compose up -d
```
The first time you run this command docker will download Snikket. In a moment it should complete,
and Snikket should be running.
Now to set up your first account. To create yourself an admin account, run the following command:
```
docker exec snikket create-invite --admin
```
Follow the link to open the invitation, and follow the instructions get signed in.
You can create as many links as you want and share them with people. Each link can
only be used once. Don't forget to drop the `--admin` part to create normal user accounts!
That's it! How did it go? Let us know at feedback@snikket.org