Readeck Installation on Debian 12
Info
Readeck is a handy tool for saving web content, especially articles and texts, so you can read them later in a simple, easy-to-read view. You can change the font, font size and line height to suit your needs. The app is open source and it can be self-hosted. You can use a browser extension to save just certain parts of a website, and if you provide a video link, the transcript will be saved. I think the e-book export feature is pretty unique compared to the alternatives, such as Pocket, Instapaper, Omnivore and Wallabag.
I’ve installed Readeck 0.14 on Debian 12.
Binary Installation
You can run Readeck in a container using Docker or Podman, or you can use the binary file, which is what I’ve done here.
Just create a directory, and download the binary file and make it executable:
mkdir -p readeck-install
cd readeck-install
wget https://codeberg.org/readeck/readeck/releases/download/0.14.0/readeck-0.14.0-linux-amd64
chmod +x readeck-0.14.0-linux-amd64
First launch
You can start it for the first time with the serve
parameter:
./readeck-0.14.0-linux-amd64 serve
Now you can access it on http://localhost:8000/
and try it out, and if you like it, you can create a systemd service for permanent use.
Deploy as systemd service
You should definitely not run it as root, so create a readeck user and group:
groupadd --system readeck
useradd --system -d /var/lib/readeck -M -s /bin/false -g readeck readeck
mkdir /var/lib/readeck
chown readeck:readeck /var/lib/readeck
Next, download the Readeck binary file, or take the one you used before, and make it executable:
wget -O /usr/local/bin/readeck https://codeberg.org/readeck/readeck/releases/download/0.14.0/readeck-0.14.0-linux-amd64
chown readeck:readeck /usr/local/bin/readeck
chmod +x /usr/local/bin/readeck
Now we create a configuration directory and set the correct permissions:
mkdir /etc/readeck
chown readeck:root /etc/readeck
chmod 0750 /etc/readeck
After that, we create a systemd service unit file based on the template in the Readeck documentation. But here I had to add ReadWritePaths=/etc/readeck
, because ProtectSystem=full
makes /boot
, /usr
, /etc
, /home
, /root
, /run/user
not writable and the Readeck service needs write permissions on /etc/readeck
to work properly.
vim /etc/systemd/system/readeck.service
[Unit]
Description=Readeck - Open Source bookmark manager
After=network.target
[Service]
User=readeck
Group=readeck
ExecStart=/usr/local/bin/readeck serve -config /etc/readeck/config.toml
Restart=on-failure
RestartSec=5
ProtectSystem=full
ReadWritePaths=/etc/readeck
PrivateTmp=true
SystemCallArchitectures=native
MemoryDenyWriteExecute=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
As always with a new unit file, reload and start the service:
systemctl daemon-reload
systemctl start readeck
Check the status:
systemctl status readeck
Web access
- http://«your-local-ip-address»:8000
If you want to change the IP address that the service listens on, by default it uses 0.0.0.0
, so it uses all available network interfaces, you can easily do this in /etc/readeck/config.toml
:
[server]
host = "192.168.0.111"
Reverse Proxy and certificate
Of course you can set up a reverse proxy in front of Readeck or use an existing one and use a TLS certificate to access it securely with https
. I haven’t done this on my system yet because I’m doing some major changes in my HomeLab using Ansible, Terraform and a Linux-based PKI.
But for full coverage, this is what /etc/readeck/config.toml
should look like if you have the reverse proxy on the same host:
[server]
host = "127.0.0.1"
port = 8000
allowed_hosts = ["read.example.net"]
use_x_forwarded_for = true
use_x_forwarded_host = true
use_x_forwarded_proto = true
Example nginx reverse proxy configuration code:
server {
server_name readeck.example.net;
listen 443 ssl http2;
listent [::]:443 ssl http2;
# ... certificate configuration
location / {
proxy_pass http://127.0.0.1:8000/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_buffering off;
client_max_body_size 50M;
}
}
Troubleshooting
If you come across any errors, you can always check the logs: journalctl -fu readeck
UPDATE-2024-08-10: With the Readeck 0.15 release, they have added the information about the systemd unit file to their documentation.
To update Readeck, simply stop the service with systemctl stop readeck
, download the new binary file and move it to /usr/local/bin/
named as readeck
and then start the service again.