User Tools

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
services:silverbullet [2024/03/06 15:10] – created willyservices:silverbullet [2025/04/17 06:53] (current) willy
Line 1: Line 1:
 ====== Silverbullet ====== ====== Silverbullet ======
  
 +[[https://silverbullet.md/|Silverbullet]] is an amazing and powerfull note taking app. It's actually incredibly more than that.
  
 +===== Installation =====
 +
 +As usual you need a dedicated user:
 +<code bash>
 useradd -d /data/daemons/silverbullet -m silverbullet -g users useradd -d /data/daemons/silverbullet -m silverbullet -g users
 +</code>
 +
 +Note that i am adding it to the **users** group because i want to share the notes (which are plain md files) via Syncthing later on.
 +
 +Set umask to 0002 in bashrc, so that any md files created by Silverbullet will also be accessible to all users in **users** group:
 +<code bash>
 +echo "umask 0002" >> /data/saemons/silverbullet/.bashrc
 +</code>
 +
 +Now, just download the latest release from  [[https://github.com/silverbulletmd/silverbullet/releases|Github releases page]] and unzip it:
 +<code bash>
 +mkdir /var/log/silverbullet
 +chown silverbullet:users /var/log/silverbullet
 +su - silverbullet
 +wget 'https://github.com/silverbulletmd/silverbullet/releases/download/ [[[X.Y.Z]]] /silverbullet-server-linux-x86_64.zip' 
 +unzip silverbullet-server-linux-x86_64.zip 
 +</code>
 +
 +And you are all set! You will need to define a folder to store the notes, i will assume it's /home/notes, but you can pick your path, and a port, i assume will be 8001, for the reverse proxy.
 +
 +===== Reverse proxy =====
 +
 +Silverbullet requires a dedicated subdomain, it will not work on subpath. I will assume it's **notes.mydomain.com**. Also, since Silverbullet do not manage authentication, i will show you how to use proxy authentication. Please refer to [[selfhost:nginx|The Reverse Proxy concept]] for more details, specially on how to setup dual access: without authentication from inside your home, and authenticated from outside.
 +
 +Here is the NGINX configuration file:
 +<file - silverbullet.conf>
 +
 +access_log /var/log/nginx/notes.mydomain.com_access_log main;                                                                                                                                 
 +error_log /var/log/nginx/notes.mydomain.com_error_log info;                                                                                                                                   
 +
 +# login protected access from outside
 +server {
 +        server_name notes.mydomain.com;
 +        listen 8443 ssl; 
 +        http2 on;
 +        include "com.mydomain/authelia_location.conf";
 +        
 +        location / {                                                                                                                                                                                 
 +             include "com.mydomain/authelia_proxy.conf";                                                                                                                                           
 +             include "com.mydomain/authelia_authrequest.conf";                                                                                                                                                                                                                                                                                 
 +             if ($http_origin = ''){                                                                                                                                                              
 +                 set $http_origin "*";
 +             }
 +             proxy_hide_header Access-Control-Allow-Origin;  
 +             add_header Access-Control-Allow-Origin $http_origin;
 +
 +             client_max_body_size 512M;
 +             proxy_pass http://127.0.0.1:8001$uri;
 +        }
 +}
 +
 +# Manage direct request inside home network
 +# It's identical to the remote one, but it has no authentication
 +# HTTPS on port 443 for direct local connections
 +server {
 +        server_name notes.mydomain.com;
 +        listen 443 ssl; 
 +        http2 on;
 +        
 +        location / {                                                                                                                                                                 
 +             if ($http_origin = ''){                                                                                                                                                              
 +                 set $http_origin "*";
 +             }
 +             proxy_hide_header Access-Control-Allow-Origin;
 +             add_header Access-Control-Allow-Origin $http_origin;
 +             client_max_body_size 512M;
 +             proxy_pass http://127.0.0.1:8001$uri;
 +     }
 +}                                                                                                                                                                    
 +</file>
 +
 +Note: do not just copy and paste this file, you need to understand it and adapt where needed.
 +
 +===== Startup =====
 +
 +Since i use OpenRC, to start silverbullet simply create the following script under /etc/init.d:
 +<file - /etc/init.d/silverbullet>
 +#!/sbin/openrc-run
 +# Copyright 1999-2021 Gentoo Authors
 +# Distributed under the terms of the GNU General Public License v2
  
-umask 0002 in bashrc+description="Silverbullet.md - personal note taking app" 
 +pidfile="/run/silverbullet.pid" 
 +command_background=true 
 +command="/data/daemons/silverbullet/silverbullet" 
 +command_args="/home/notes/ --hostname 127.0.0.1 --port 8001" 
 +command_user="silverbullet:users" 
 +output_log="/var/log/silverbullet/silverbullet.log" 
 +output_err="/var/log/silverbullet/silverbullet.log"
  
-Download: +depend() { 
-https://github.com/silverbulletmd/silverbullet/releases+        need net 
 +
 +</file>
  
-https://github.com/silverbulletmd/silverbullet/releases/download/0.7.5/silverbullet-server-linux-x86_64.zip+Make it executable and add the service to the default runlevel: 
 +<code bash> 
 +chmod +x /etc/init.d/silverbullet 
 +rc-update add silverbullet default 
 +</code>
  
- unzip silverbullet-server-linux-x86_64.zip +===== Update =====
  
-./silverbullet /data/common/willy/Notes/ --hostname 127.0.0.1 --port 8001+Download new binary (see link above) and simply replace old one and restart service.