Yutaka Kurosaki e66ece71e3 Preserve sidebar scroll position when navigating between documents
- Add x-navigate:scroll directive to sidebar container to maintain scroll position
- Add x-navigate:scroll to all document links in sidebar (tree-item.blade.php)
- Add x-navigate:scroll to 'New Document' button
- When clicking a link in sidebar, the sidebar scroll position is now preserved during page navigation
- Fixes issue where sidebar would scroll to top after loading a document
2025-12-04 01:37:19 +09:00
2025-11-29 15:54:35 +09:00
2025-11-29 11:28:25 +09:00

Knowledge Base

Markdown対応のナレッジベースアプリケーションです。Wiki風のリンク記法[[ページ名]])をサポートし、ドキュメント間の相互リンクを簡単に作成できます。

機能

  • 📝 Markdownエディタ - リアルタイムプレビュー付きのドキュメント編集
  • 🔗 Wikiリンク - [[ページ名]] 記法でドキュメント間リンクを作成
  • 🔍 クイックスイッチャー - Ctrl+K (Cmd+K) で高速ドキュメント検索
  • 📁 階層構造 - フォルダ形式でドキュメントを整理(タイトルに / を含めると自動で階層化)
  • 🌳 サイドバーツリー - 折りたたみ可能なドキュメントツリー
  • 👥 ユーザー管理 - 管理者によるユーザーのCRUD操作
  • 🔒 認証 - Laravel Breezeによるログイン/登録機能
  • 🎨 シンタックスハイライト - コードブロックの自動ハイライト
  • 🌐 多言語対応 - 8言語サポートユーザーごとに言語設定可能

対応言語

言語 コード
English en
日本語 ja
Deutsch de
Français fr
Español es
简体中文 zh-CN
繁體中文 zh-TW
한국어 ko

技術スタック

  • Backend: Laravel 11 + Livewire 3
  • Frontend: Alpine.js + Tailwind CSS
  • Database: MySQL 8.0
  • Server: Nginx + PHP-FPM 8.2

Docker構成

サービス コンテナ名 ポート 説明
Nginx kb_nginx 9700 Webサーバー
PHP kb_php - PHP-FPM + Composer + Node.js
MySQL kb_mysql 9702 データベース
phpMyAdmin kb_phpmyadmin 9701 DB管理ツール
MailHog kb_mailhog 9725 メールテストSMTP: 1025

ディレクトリ構成

.
├── docker/
│   ├── nginx/
│   │   └── default.conf
│   ├── php/
│   │   ├── Dockerfile
│   │   └── php.ini
│   └── mysql/
│       └── my.cnf
├── src/
│   ├── app/
│   │   ├── Console/Commands/    # Artisanコマンド
│   │   ├── Http/Controllers/    # コントローラー
│   │   ├── Livewire/            # Livewireコンポーネント
│   │   ├── Models/              # Eloquentモデル
│   │   └── Services/            # ビジネスロジック
│   ├── lang/                    # 言語ファイルi18n
│   ├── resources/views/
│   │   ├── layouts/             # レイアウト
│   │   ├── livewire/            # Livewireビュー
│   │   └── admin/               # 管理画面
│   └── routes/
│       └── web.php              # ルーティング
├── compose.yml
└── README.md

セットアップ

1. リポジトリのクローン

git clone <repository-url>
cd knowledge-base

2. 環境変数の設定

cp src/.env.example src/.env

src/.env を編集:

DB_CONNECTION=mysql
DB_HOST=kb_mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root

MAIL_MAILER=smtp
MAIL_HOST=kb_mailhog
MAIL_PORT=1025

3. Dockerコンテナの起動

docker compose up -d

4. 依存関係のインストール

# Composer
docker exec kb_php composer install

# npm
docker exec kb_php npm install
docker exec kb_php npm run build

5. データベースのセットアップ

# マイグレーション
docker exec kb_php php artisan migrate

# 初期データの投入(管理者ユーザー + 初期ドキュメント)
docker exec kb_php php artisan db:seed

個別にシーダーを実行する場合:

# 管理者ユーザーのみ
docker exec kb_php php artisan db:seed --class=UserSeeder

# 初期ドキュメントのみ
docker exec kb_php php artisan db:seed --class=DocumentSeeder

6. 管理者の設定

# 既存ユーザーを管理者に設定
docker exec kb_php php artisan user:set-admin admin@example.com

# 管理者権限を削除する場合
docker exec kb_php php artisan user:set-admin admin@example.com --remove

アクセスURL

サービス URL
アプリケーション http://localhost:9700
phpMyAdmin http://localhost:9701
MailHog http://localhost:9725

初期データ

初期アカウント

UserSeederを実行した場合

初期ドキュメント

DocumentSeederを実行すると以下のドキュメントが作成されます

ドキュメント 内容
Home ホームページ(ウェルカムメッセージ、機能紹介)
Getting Started 使い方ガイドドキュメント作成、Wikiリンク、ショートカット
Markdown Guide Markdown記法ガイド見出し、リスト、コード、テーブル等

※ 既存のドキュメントがある場合、DocumentSeederはスキップされます。

本番環境へのデプロイ

⚠️ 重要: サブドメインを使用してください

このアプリケーションは サブドメイン でのデプロイを推奨します。

✅ 推奨: kb.example.com
❌ 非推奨: example.com/kb (サブディレクトリ)

理由: Livewire 3はサブディレクトリデプロイに完全対応していません。/livewire/update エンドポイントがサブディレクトリを考慮しないため、AJAX通信が失敗します。

デプロイ手順

  1. サブドメインのDNS設定

    kb.example.com → サーバーIPアドレス
    
  2. Webサーバー設定nginx例

    server {
        listen 80;
        server_name kb.example.com;
        root /var/www/knowledge-base/src/public;
    
        index index.php;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
    
        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
    
  3. 環境変数の設定

    APP_URL=https://kb.example.com
    APP_ENV=production
    APP_DEBUG=false
    
  4. 本番用の最適化

    php artisan config:cache
    php artisan route:cache
    php artisan view:cache
    php artisan optimize
    

よく使うコマンド

# コンテナ操作
docker compose up -d          # 起動
docker compose down           # 停止
docker compose restart        # 再起動
docker compose logs -f        # ログ確認

# PHPコンテナ内でコマンド実行
docker exec kb_php php artisan [command]
docker exec kb_php composer [command]
docker exec kb_php npm [command]

# コンテナに入る
docker exec -it kb_php bash

# キャッシュクリア
docker exec kb_php php artisan config:clear
docker exec kb_php php artisan route:clear
docker exec kb_php php artisan view:clear
docker exec kb_php php artisan cache:clear

管理者機能

管理者(is_admin = true)は以下の機能にアクセスできます:

  • ユーザー管理 (/admin/users)
    • ユーザー一覧表示
    • 新規ユーザー作成
    • ユーザー編集(名前、メール、パスワード、管理者権限)
    • ユーザー削除

管理者はログイン後ダッシュボードへ、一般ユーザーはフロントページへリダイレクトされます。

ドキュメントの作成

基本的な使い方

  1. サイドバーの「New Document」をクリック
  2. タイトルとMarkdownコンテンツを入力
  3. 保存

階層構造の作成

タイトルに / を含めると自動的に階層化されます:

  • Laravel/Livewire/ComponentsLaravel/Livewire/ フォルダ内に作成
  • git/認証設定git/ フォルダ内に作成

Wikiリンク

[[ページ名]] 記法でリンクを作成できます:

詳細は [[Getting Started]] を参照してください。
[[Laravel/Livewire/Components]] も確認してください。

言語設定

ユーザーは「プロフィール」ページから使用言語を変更できます。

  1. 右上のユーザー名をクリック
  2. 「プロフィール」を選択
  3. 「言語設定」セクションで言語を選択
  4. 「保存」をクリック

トラブルシューティング

パーミッションエラー

docker exec kb_php chmod -R 775 storage bootstrap/cache
docker exec kb_php chown -R www-data:www-data storage bootstrap/cache

コンテナが起動しない

docker compose down --remove-orphans
docker compose up -d

Nginxがエラーで停止する

docker/nginx/default.conffastcgi_passkb_php:9000 になっているか確認してください。

データベース接続エラー

src/.envDB_HOSTkb_mysql になっているか確認してください。

Livewireのエラー本番環境

「404 /livewire/update」エラーが出る場合は、サブディレクトリではなくサブドメインでデプロイしてください。

# キャッシュをクリア
php artisan config:clear
php artisan route:clear
php artisan cache:clear

ライセンス

MIT License

Description
Simple Markdown Knowledge base site
Readme 904 KiB
Languages
PHP 57.3%
Blade 42.2%
JavaScript 0.2%
Dockerfile 0.2%