Get Rewarded! We will reward you with up to €50 credit on your account for every tutorial that you write and we publish!

A quick and easy way to install Trilium Notes

profile picture
Author
Srikanth Perinkulam
Published
2020-07-31
Time to read
5 minutes reading time

Introduction

Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. See the Trilium Github page for more details. In this tutorial we will deploy a Trilium instance to install this open source and self-hosted alternative to Evernote on a fresh Debian server.

Prerequisites

To get this running you would need

  • A server with Docker and Docker-compose installed. There's an easy step-by-step tutorial that you could follow.
  • A domain pointing to the IP address of your server instance. The tutorial assumes you have pointed the domain notes.example.com to your server IP address.

Step 1 - Setup Docker network and our work folder

For ease of deployment and maintenance, we will use Docker in swarm mode. For security certificates and application mapping we will use Traefik as a reverse proxy. It's perfectly fine if you've not used these services before. All necessary steps to get them working are outlined in detail below.

  • Initialise the docker swarm: sudo docker swarm init
  • Setup a network for the Traefik container: sudo docker network create --driver=overlay traefik-net
  • Create a directory where we will save all our stack yml files and navigate to that directory: mkdir stacks && cd stacks

Step 2 - Create the yml files

Step 2.1 - Create the yml file for Traefik

  • Create a yml file for traefik: nano traefik-ssl.yml
  • Copy over the following contents into the yml file:
version: "3.7"

services:
  traefik:
    image: traefik:${VERSION:-v1.7.24-alpine}
    ports:
      - { target: 80, published: 80, mode: host, protocol: tcp }
      - { target: 443, published: 443, mode: host, protocol: tcp }
    command:
      # - --debug
      # - --loglevel=INFO
      - --entryPoints=Name:http Address::80 Compress:true Redirect.EntryPoint:https
      - --entryPoints=Name:https Address::443 Compress:true TLS
      - --defaultEntryPoints=https,http
      - --providers.docker.endpoint=tcp://socket-proxy:2375
      - --docker.swarmmode=true
      - --docker.exposedbydefault=false
      - --docker.network=traefik-net
      - --metrics.prometheus=true
      - --consul
      - --consul.endpoint=consul:8500
      - --consul.prefix=traefik
      - --acme
      - --acme.onHostRule=true
      - --acme.storage=traefik/acme/account
      - --acme.acmeLogging=true
      - --acme.entryPoint=https
      - --acme.httpChallenge.entryPoint=http
      - --acme.email=${ACME_EMAIL:-noreply@example.com}
      - --api
    deploy:
      mode: ${MODE:-replicated}
      placement:
        constraints: [node.role==manager]
    networks:
      - internal
      - traefik

  socket-proxy:
    image: tecnativa/docker-socket-proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      CONTAINERS: 1
    networks:
      - internal
      - traefik

  consul:
    image: consul:1.7.2
    command: agent -server -bootstrap-expect=1 -client=0.0.0.0
    environment:
      CONSUL_BIND_INTERFACE: eth0
      CONSUL_CLIENT_INTERFACE: eth0
      CONSUL_LOCAL_CONFIG: '{ "limits": { "txn_max_req_len": 2048000, "kv_max_value_size": 2048000 } }'
    volumes:
      - ${VOLUME_PATH}consul:/consul/data
    networks:
      - traefik
      - internal

volumes:
  consul:

networks:
  internal:
    driver: overlay
    attachable: true
  traefik:
    external: true
    name: traefik-net

Step 2.2 - Create the yml file for Trilium

  • Create a yml file for trilium: nano trilium.yml
  • Copy over the following contents into the yml file:
version: '3.7'
services:
  web:
    image: zadam/trilium:0.42.7
    volumes:
      - ${VOLUME_PATH}trilium-data:/root/trilium-data
    deploy:
      labels:
        - traefik.port=8080
        - traefik.enable=true
        - traefik.frontend.rule=Host:${DOMAIN:-notes.localhost}
    networks:
      - traefik
volumes:
  trilium-data:
networks:
  traefik:
    external: true
    name: traefik-net

Step 3 - Deploy the stacks

  • Deploy the Traefik stack: sudo docker stack deploy -c traefik-ssl.yml traefik
  • Deploy the Trilium stack: DOMAIN=notes.example.com SCHEME=https docker stack deploy -c trilium.yml trilium

Give the system a few minutes to fetch the docker images and setup and run the containers in the background. To check the status of the containers you can run the command: docker ps -a

Step 4 - Finish the setup in your browser

  • Navigate to notes.example.com in your browser. You should now be presented with the following options as shown in the image below:

Trilium Browser setup

  • Select the first option and click 'Next'
  • Create a user account for your Trilium Notes instance in the next screen and you should be all set now!

Conclusion

With a few simple steps we were able to setup and run a good alternative to Evernote. You can even import your notes from Evernote if you'd like.

Go ahead and explore your new setup! The Wiki is also very informative for what you can do next.

License: MIT
Want to contribute?

Get Rewarded: Get up to €50 in credit! Be a part of the community and contribute. Do it for the money. Do it for the bragging rights. And do it to teach others!

Report Issue
Try Hetzner Cloud

Get 20€ free credit!

Valid until: 31 December 2024 Valid for: 3 months and only for new customers
Get started
Want to contribute?

Get Rewarded: Get up to €50 credit on your account for every tutorial you write and we publish!

Find out more