Skip to main content
50% off all plans, limited time. Starting at $2.48/mo
Linkwarden

Linkwarden

Linkwarden is a self-hosted bookmark manager that keeps a full copy of every page you save, so a dead link still has its content. Organize with collections and tags, and search the whole archive. AGPL-3.0 licensed with 19,500+ GitHub stars.

At a glance

License AGPL-3.0 Version v2.16.1 OS Ubuntu Server 24.04 LTS Min RAM 1 GB IP IPV4,IPV6

Access

  1. Open http://<SERVER_IP>.
  2. Click Sign Up.
  3. Create the first account.
  4. The first account becomes the server administrator because NEXT_PUBLIC_ADMIN=1 is enabled.

Registration

Registration is enabled by default.

After creating the administrator account, registration can be disabled.

To disable it, edit /root/linkwarden/.env and set:

NEXT_PUBLIC_DISABLE_REGISTRATION=true

Then apply the configuration:

cd /root/linkwarden
docker compose up -d

Important Paths

  • Install Path: /root/linkwarden
  • Compose File: /root/linkwarden/docker-compose.yml
  • Environment File: /root/linkwarden/.env
  • App Data: /root/linkwarden/data
  • PostgreSQL Data: /root/linkwarden/pgdata
  • Meilisearch Data: /root/linkwarden/meili_data
  • Nginx Config: /etc/nginx/sites-available/linkwarden

Docker Management

Check the containers:

cd /root/linkwarden
docker compose ps

View logs:

cd /root/linkwarden
docker compose logs -f

View Linkwarden logs:

cd /root/linkwarden
docker compose logs -f linkwarden

Restart Linkwarden:

cd /root/linkwarden
docker compose restart linkwarden

Stop the stack:

cd /root/linkwarden
docker compose down

Start the stack:

cd /root/linkwarden
docker compose up -d

NGINX Management

Check NGINX:

systemctl status nginx

Test the configuration:

nginx -t

Restart NGINX:

systemctl restart nginx

Reload NGINX:

systemctl reload nginx

Domain & HTTPS

1. Create an A record for your app hostname and point it at your server's public IP address (e.g., app.example.com).

2. Install Certbot:

apt update
apt install -y certbot python3-certbot-nginx

3. Edit NGINX config and replace server_name _; with your domain (e.g., server_name app.example.com;):

vim /etc/nginx/sites-available/linkwarden

4. Test the config:

nginx -t

5. Reload NGINX:

systemctl reload nginx

6. Issue a TLS certificate:

certbot --nginx -d app.example.com

7. Update Linkwarden's environment variables (.env file):

NEXTAUTH_URL=https://app.example.com/api/v1/auth
BASE_URL=https://app.example.com

8. After changing the environment variables, restart Linkwarden:

cd /root/linkwarden
docker compose down
docker compose up -d

9. Open your browser and visit: https://app.example.com

Notes

  • Linkwarden is exposed publicly through Nginx on port 80.
  • The Linkwarden application itself listens only on 127.0.0.1:3000.
  • PostgreSQL and Meilisearch are internal Docker services and are not directly exposed to the host.
  • When configuring the domain, make sure to replace http:// with https:// wherever the application URL is configured, including NEXTAUTH_URL and BASE_URL.
  • Use the same HTTPS domain consistently throughout the NGINX and Linkwarden configuration.
  • BASE_URL is especially useful when using email features such as password resets or verification emails.
  • Change the Linkwarden configuration based on your preferences.

More in Self Hosted

Related apps.

Deploy Linkwarden now. From $2.48/mo.