【第1回:自宅サーバーでWiki.jsを構築!】Docker ComposeでWiki.js構築!PostgreSQL連携まで一気に終わらせる爆速ガイド

PC

こんにちは、てつです!

今回は、前回のイントロダクションでも言った通り「Docker ComposeでWiki.js + PostgreSQLを一気に立ち上げる」爆速構築編をお届けしたいと思います。

早速やっていきましょう!

イントロダクションを見てからの方が全体像の把握がしやすいと思うので、下記に前回の記事を掲載しておきます!

新連載【第0回:自宅サーバーでWiki.jsを構築!】構築ロードマップ及びイントロダクション編
こんにちは、てつです!これから5回にわたって、Wiki.jsを使って自分専用「技術Wiki」を構築していきます!ところで、皆さんは日々の学習や技術の備忘録、どう管理していますか?「Notionにまとめているけれど、動作の重さや無料プランの制…

まずは、サーバーのターミナルで作業用のディレクトリを作成します

運用管理において、データを「コンテナの外」に逃がしておくことは、コンテナを再起動してもデータが消えないようにするための必須作業です !

基本的にはホームディレクトリ直下の docker または services ディレクトリ内に、プロジェクトごとのフォルダを作る形が管理しやすく、バックアップも容易です!

~/
└── wikijs/                # 【親】今回のプロジェクトのルート
    ├── docker-compose.yml  # 設計図(Wiki.jsとDBの連携定義)
    ├── .env                # 環境変数(DBのパスワードなどを分離する場合)
    ├── data/               # Wiki.js本体のデータ(画像やアップロードファイル)
    │   └── (Wiki.jsコンテナ内のデータがここに同期される)
    └── db/                 # PostgreSQLのデータベース実体
        └── (データベースの全データ。ここを消すと中身が消える最重要フォルダ)

このプロジェクトの「城」の敷地です。バックアップを取る際は、このフォルダを丸ごと固めるだけで復旧できる状態を目指します。

Wiki.jsとデータベース(PostgreSQL)をどう動かすか、どう繋ぐかを記した「設計図」です。

Wiki.jsのエディタで貼り付けた画像ファイルや、システムの設定ファイルなどが保存される場所です。Dockerの「Volume(ボリューム)」機能を使って、コンテナ内のデータと同期させます。

  • 理由: コンテナをアップデート(作り直し)しても、書いた内容や画像が消えないようにするためです。

今回の「心臓部」です。Wiki.jsで書いた記事の本文やユーザー情報は、すべてこの中のPostgreSQLに保存されます。

  • 注意点: 非常に重要なデータなので、基本的には手動で中身をいじることはありません。運用編(第4回)で行う「Gitバックアップ」とは別に、物理的なデータとしてここを守る意識が大切です。

ターミナルで以下のコマンドを順に叩いて、この「受け皿」を事前に用意しておきましょう!

# プロジェクトフォルダの作成
mkdir -p ~/wikijs/data
mkdir -p ~/wikijs/db

# フォルダへ移動
cd ~/wikijs

この器が整ったら、次はここに 「設計図(docker-compose.yml)」 を設置して、いよいよ起動(命を吹き込む作業)へと移ります!

次に、Wiki.jsとPostgreSQLを連携させるための定義ファイルを作成します!

コマンド:nano docker-compose.yml などのエディタで以下の内容を保存してください。

ポイント: Wiki.jsのポートは外部に公開せず、NPM経由でアクセスするため、ホスト側のポートは 3001 など任意のものに設定しておきます。

version: "3"

services:
  wiki:
    image: ghcr.io/requarks/wiki:2
    container_name: wiki-app
    depends_on:
      - db
    # 外部の .env ファイルから設定を読み込みます
    env_file:
      - .env
    environment:
      # .env内の変数を使用して、コンテナ内の設定を上書きします
      DB_TYPE: postgres
      DB_HOST: db
      DB_PORT: 5432
      DB_USER: ${DB_USER}
      DB_PASS: ${DB_PASSWORD}
      DB_NAME: ${DB_NAME}
    restart: unless-stopped
    ports:
      - "3001:3000"
    networks:
      - default
      - npm_network


  db:
    image: postgres:15-alpine
    container_name: wiki-db
    environment:
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C"
    logging:
      driver: "none"
    restart: unless-stopped
    volumes:
      - ./db:/var/lib/postgresql/data
    networks:
      - default

networks:
  npm_network:
    external: true
    name: nginx-proxy-manager
  • env_file: - .env: .envという別ファイルに書いたパスワード設定などを自動で読み込む設定です。
  • ${DB_PASSWORD}: .envファイルの中にある DB_PASSWORD という名前の値をここに当てはめます。
  • networks: コンテナ同士の通り道を指定します。これがないと、NPMから wiki-app という名前が見えません。
  • external: true: 「このネットワークは既に別の場所(NPM側など)で作られているものを使います」という意味です。
# データベースのユーザー名
DB_USER=wikijs
# データベースのパスワード(必ず自分専用に変更!)
DB_PASSWORD=your_secure_password_here
# データベースの名前
DB_NAME=wiki

POSTGRES_DB=postgres_db
POSTGRES_PASSWORD=your_secure_password_here
POSTGRES_USER=user

これまでの作業が完了していたら、作業ディレクトリ(~/wikijs)にいることを確認して、以下の手順を進めてください。

ターミナルで以下のコマンドを打ち込みます!

sudo docker compose up -d

このコマンドを打つと、Dockerが「設計図(docker-compose.yml)」を読み取り、以下の作業を自動で代行してくれます!

  • イメージの取得: Wiki.jsとPostgreSQLの最新プログラムを公式からダウンロードします。
  • コンテナの生成: 独立した実行環境(コンテナ)を2つ作成します。
  • ネットワーク構築: Wiki.jsがデータベースを見つけられるように、専用の通り道を作ります。
  • 永続化設定: 先ほど作った datadb フォルダとコンテナを連結します。

こんな感じになればコンテナが立ち上がった証拠です!

コマンド実行後、1分ほど待ってからブラウザで以下のアドレスを開いてみてください!

http://サーバーのIPアドレス:3001

Wiki.jsの「Setup」画面(管理者アカウント作成画面)が表示されれば、構築は成功です!

まだ設定は進めなくて大丈夫です。次に「URLを美しく整える」作業が待っています。

※僕はここで小一時間ほど格闘しました(笑)

原因としては、以前必要なポート以外閉じたことあったのですが、それをすっかり忘れていて時間を浪費しました。ポート開放については下記コマンドを実行すればよいので、もしつながらない場合はこの点も調べてみるといいと思います!

sudo ufw allow 3001/tcp

sudo ufw reload
【自宅サーバー入門】不要なポートは全部閉じろ!UFWとDockerの正しいセキュリティ設定ガイド
UbuntuでUFWを設定したはずなのに、Dockerのポートが開いたままになっていませんか?本記事では、初心者がハマりやすい『Dockerのファイアウォール無視問題』の解決策から、nmapを使った動作確認、UFWのログの読み方まで、実体験を元に分かりやすく解説します。

1.すでにあるNPMの管理画面にログインします。

2.「Proxy Hosts」→「Add Proxy Host」をクリック。以下の通りに入力します:

  • Domain Names: wiki.local
  • Forward Host: wiki-app (※同じDockerネットワークにNPMがいる場合)
  • Forward Port: 3000 (※コンテナ内部の待受ポートを指定)

「Save」を押します。

検索バーのところ見てください!ちゃんと保存した名前で検索かけれてますね!成功です!

今回のポイントをおさらい

  • データの受け皿(永続化):コンテナを壊してもデータが消えない仕組みを構築
  • 設計図(docker-compose.yml):アプリとDBの連携をコードで1発定義
  • トラブルシューティング:繋がらない時はまず「ポート開放(UFW)」を疑う
  • リバースプロキシ(NPM):ポート番号を隠して、美しいURLでアクセス可能に

LinuxやDocker、AWSといった技術は、こうして「実際に手を動かして、エラーと戦いながら突破する」ことでしか身につきません。今回のポート開放での格闘も、立派なインフラエンジニアへの第一歩です!

まずは今回の構築成功を大いに自信にしてくださいね。

次回は、いよいよ実用性を一気に引き上げる「第2回:日本語検索&デザイン最適化編」をお届けします!

「Wiki.jsは日本語検索に弱い」——そんな定説を過去のものにします。データベースの微調整で検索機能をしっかり機能させ、読みやすいテーマやフォントを設定。デフォルトの「ただのツール」を、毎日書き込みたくなる「自分専用のノート」へと昇格させます!

ナレッジベースをどんどん最強に育てていきましょう!最後まで読んでいただき、ありがとうございました。また次回の記事でお会いしましょう!

[X(旧Twitter)]

▶︎ ブログの更新通知や、インフラ・開発に関するリアルタイムな実践メモを呟いています!

[note]

▶︎ ブログとは少し視点を変えて、副業・キャリアの考え方や、自動化プロジェクトの裏舞台などをディープに書き綴っています。 お気軽にフォローや「いいね」をお願いします。励みになります!

コメント

タイトルとURLをコピーしました