This is an old revision of the document!
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:
useradd -d /data/daemons/silverbullet -m silverbullet -g users
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:
echo "umask 0002" >> /data/saemons/silverbullet/.bashrc
Now, just download the latest release from https://github.com/silverbulletmd/silverbullet/releases:Github releases page and unzip it:
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
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 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:
- silverbullet.conf
# Manage tunnels request from external server # casa.gardiol.org is the main domain # old.gardiol.org is the "backup" domain # HTTPS listen on a custom port (8443) because this is authenticated server { server_name notes.mydomain.com; listen 8443 ssl; auth_pam "Home"; auth_pam_service_name "nginx"; access_log /var/log/nginx/notes.mydomain.com_access_log main; error_log /var/log/nginx/notes.mydomain.com_error_log info; location / { client_max_body_size 512M; proxy_pass http://127.0.0.1:8001$uri; } include certbot.conf; } # 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.gardiol.org; listen 443 ssl; access_log /var/log/nginx/notes.mydomain.com_access_log main; error_log /var/log/nginx/notes.mydomain.com_error_log info; location / { client_max_body_size 512M; proxy_pass http://127.0.0.1:8001$uri; } include certbot.conf; }
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:
- /etc/init.d/silverbullet
#!/sbin/openrc-run # Copyright 1999-2021 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 description="Silverbullet.md - personal note taking app" pidfile="/run/silverbullet.pid" command_background=true command="/deposito/daemons/silverbullet/silverbullet" command_args="/home/notes/ --hostname 127.0.0.1 --port 8001" command_user="silverbullet:users" depend() { need net }
Make it executable and add the service to the default runlevel:
chmod +x /etc/init.d/silverbullet rc-update add silverbullet default
Update
Download new binary (see link above) and simply replace old one and restart service.