Skip to content

Setup Linkwarden

Overview

Linkwarden is an open-source collaborative bookmark manager to collect, organize and preserve webpages.

Important Docker Files

.env file

.env
NAME=linkwarden
SUB=link
DOMAIN=
TZ=America/New_York
SECRET=
APPDATA=
PORT=3000
DB_NAME=linkwarden
DB_USER=linkwarden
DB_PASS=

# Additional Optional Settings

PAGINATION_TAKE_COUNT=
STORAGE_FOLDER=
AUTOSCROLL_TIMEOUT=
NEXT_PUBLIC_DISABLE_REGISTRATION=
IMPORT_SIZE_LIMIT=

# AWS S3 Settings
SPACES_KEY=
SPACES_SECRET=
SPACES_ENDPOINT=
SPACES_REGION=

# SMTP Settings
NEXT_PUBLIC_EMAIL_PROVIDER=
EMAIL_FROM=
EMAIL_SERVER=

docker-compose.yml file

docker-compose.yml
services:
  linkwarden:
    container_name: ${NAME}
    image: ghcr.io/linkwarden/linkwarden
    restart: unless-stopped
    volumes:
      - ${APPDATA}/${NAME}/config:/data/data
    depends_on:
      - ${NAME}-db
    environment:
      DATABASE_URL: postgresql://${DB_USER}:${DB_PASS}@${NAME}-db:5432/${DB_NAME}
      NEXTAUTH_URL: https://${NAME}.${DOMAIN}
      NEXTAUTH_SECRET: ${SECRET}
      NEXT_PUBLIC_DISABLE_REGISTRATION: true
    networks:
      - proxy
      - internal-db
    dns:
      - '10.1.10.1'
    labels:
      swag: enable
      swag_address: ${NAME}
      swag_port: ${PORT}
      swag_proto: http
      swag_url: ${SUB}.${DOMAIN}
      com.centurylinklabs.watchtower.enable: true
  linkwarden-db:
    container_name: ${NAME}-db
    #image: pgautoupgrade/pgautoupgrade:17-alpine
    image: postgres:17-alpine
    restart: unless-stopped
    healthcheck:
      interval: 10s
      retries: 10
      test: pg_isready -U ${DB_USER} -d ${DB_NAME}
      timeout: 2s
    networks:
      - internal-db
    environment:
      TZ: ${TZ}
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
    volumes:
      - ${APPDATA}/${NAME}/${NAME}-db:/var/lib/postgresql/data
    labels:
      traefik.enable: false
      com.centurylinklabs.watchtower.enable: true
networks:
  proxy:
    external: true
  internal-db:
    external: true

Start the Container

Start the Container
docker compose up -d