ブックマーク管理やあとで読むに便利な「Linkwarden」

以前、ブックマーク管理やあとで読む系として「Karakeep」を紹介しましたが、 似たようなものとして「Linkwarden」があり、使いやすそうだったので導入してみました。
シンプルで分かりやすくて良いですね。 さらに、似たようなサービスとして「Readeck」があり、こちらは試していませんが、 Linkwardenはブックマーク管理、Readeckはあとで読むと使い分けている人もいるようですね。

Docker-composeでインストール

ポートは3300に変更しています。

#!/bin/bash
set -e

# ─────────────────────────────────────────
#  Linkwarden セルフホスト セットアップスクリプト
# ─────────────────────────────────────────

INSTALL_DIR="/opt/docker/linkwarden"

echo "📁 インストールディレクトリを作成: $INSTALL_DIR"
sudo mkdir -p "$INSTALL_DIR"
cd "$INSTALL_DIR"

# ── シークレットキー自動生成 ──────────────────
NEXTAUTH_SECRET=$(openssl rand -base64 36)
POSTGRES_PASSWORD=$(openssl rand -base64 24 | tr -dc 'a-zA-Z0-9' | head -c 32)

echo "🔑 シークレットキーを自動生成しました"

# ── .env 生成 ────────────────────────────────
sudo tee .env > /dev/null <<EOF
# ── PostgreSQL ──────────────────────────────
POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

# ── Linkwarden ──────────────────────────────
NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
NEXTAUTH_URL=http://localhost:3300

# ── (オプション) メール認証を使う場合は以下を設定 ──
# EMAIL_FROM=no-reply@example.com
# EMAIL_SERVER=smtp://user:pass@smtp.example.com:587
EOF

echo "✅ .env を生成しました"

# ── docker-compose.yml 生成 ──────────────────
sudo tee docker-compose.yml > /dev/null <<'COMPOSE'
services:
  postgres:
    image: postgres:16-alpine
    container_name: linkwarden-db
    restart: unless-stopped
    env_file: .env
    environment:
      POSTGRES_DB: linkwarden
      POSTGRES_USER: linkwarden
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U linkwarden -d linkwarden"]
      interval: 10s
      timeout: 5s
      retries: 5

  linkwarden:
    image: ghcr.io/linkwarden/linkwarden:latest
    container_name: linkwarden-app
    restart: unless-stopped
    env_file: .env
    environment:
      DATABASE_URL: postgresql://linkwarden:${POSTGRES_PASSWORD}@postgres:5432/linkwarden
      NEXTAUTH_URL: ${NEXTAUTH_URL}
      NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
    ports:
      - "3300:3000"
    volumes:
      - linkwarden_data:/data/data
    depends_on:
      postgres:
        condition: service_healthy

volumes:
  postgres_data:
  linkwarden_data:
COMPOSE

echo "✅ docker-compose.yml を生成しました"

# ── パーミッション設定 ────────────────────────
sudo chmod 600 .env

# ── 起動 ─────────────────────────────────────
echo ""
echo "🚀 Linkwarden を起動します..."
sudo docker compose pull
sudo docker compose up -d

echo ""
echo "════════════════════════════════════════"
echo "  ✅  Linkwarden の起動が完了しました!"
echo "════════════════════════════════════════"
echo ""
echo "  🌐 アクセスURL : http://localhost:3300"
echo "  📂 インストール先: $INSTALL_DIR"
echo ""
echo "  🔑 生成された認証情報 (.env に保存済み)"
echo "  POSTGRES_PASSWORD : ${POSTGRES_PASSWORD}"
echo "  NEXTAUTH_SECRET   : ${NEXTAUTH_SECRET}"
echo ""
echo "  📋 よく使うコマンド"
echo "  ログ確認   : sudo docker compose -f $INSTALL_DIR/docker-compose.yml logs -f"
echo "  停止       : sudo docker compose -f $INSTALL_DIR/docker-compose.yml down"
echo "  更新       : sudo docker compose -f $INSTALL_DIR/docker-compose.yml pull && sudo docker compose up -d"
echo ""

スクリプトがやること

ステップ内容
① ディレクトリ作成/opt/docker/linkwarden を作成
② シークレット自動生成opensslNEXTAUTH_SECRETPOSTGRES_PASSWORD をランダム生成
.env 生成生成した値を自動で書き込み
docker-compose.yml 生成PostgreSQL + Linkwarden の2コンテナ構成
⑤ 起動docker compose up -d で即起動

構成のポイント

  • PostgreSQL 16 Alpine — 軽量で安定したDBイメージ
  • ヘルスチェック付き — DBが準備完了してからアプリが起動
  • データ永続化postgres_data / linkwarden_data の named volume で再起動後もデータ保持
  • .envchmod 600 でセキュアに保護

起動後は http://localhost:3300 でアクセスでき、初回は新規ユーザー登録画面が表示されます。

アップデート方法

cd /opt/docker/linkwarden

# 最新イメージを取得
sudo docker compose pull

# コンテナを再作成して起動
sudo docker compose up -d
タイトルとURLをコピーしました