こんにちは、てつです!
今回は、前回のイントロダクションでも言った通り「Docker ComposeでWiki.js + PostgreSQLを一気に立ち上げる」爆速構築編をお届けしたいと思います。
早速やっていきましょう!
イントロダクションを見てからの方が全体像の把握がしやすいと思うので、下記に前回の記事を掲載しておきます!

データの「受け皿」を作る
まずは、サーバーのターミナルで作業用のディレクトリを作成します!
運用管理において、データを「コンテナの外」に逃がしておくことは、コンテナを再起動してもデータが消えないようにするための必須作業です !
ディレクトリ構成の全体像
基本的にはホームディレクトリ直下の docker または services ディレクトリ内に、プロジェクトごとのフォルダを作る形が管理しやすく、バックアップも容易です!
~/
└── wikijs/ # 【親】今回のプロジェクトのルート
├── docker-compose.yml # 設計図(Wiki.jsとDBの連携定義)
├── .env # 環境変数(DBのパスワードなどを分離する場合)
├── data/ # Wiki.js本体のデータ(画像やアップロードファイル)
│ └── (Wiki.jsコンテナ内のデータがここに同期される)
└── db/ # PostgreSQLのデータベース実体
└── (データベースの全データ。ここを消すと中身が消える最重要フォルダ)
各ディレクトリ・ファイルの役割解説
1. wikijs/ (ルートディレクトリ)
このプロジェクトの「城」の敷地です。バックアップを取る際は、このフォルダを丸ごと固めるだけで復旧できる状態を目指します。
2. docker-compose.yml
Wiki.jsとデータベース(PostgreSQL)をどう動かすか、どう繋ぐかを記した「設計図」です。
3. data/
Wiki.jsのエディタで貼り付けた画像ファイルや、システムの設定ファイルなどが保存される場所です。Dockerの「Volume(ボリューム)」機能を使って、コンテナ内のデータと同期させます。
- 理由: コンテナをアップデート(作り直し)しても、書いた内容や画像が消えないようにするためです。
4. db/
今回の「心臓部」です。Wiki.jsで書いた記事の本文やユーザー情報は、すべてこの中のPostgreSQLに保存されます。
- 注意点: 非常に重要なデータなので、基本的には手動で中身をいじることはありません。運用編(第4回)で行う「Gitバックアップ」とは別に、物理的なデータとしてここを守る意識が大切です。
構築前の準備コマンド
ターミナルで以下のコマンドを順に叩いて、この「受け皿」を事前に用意しておきましょう!
# プロジェクトフォルダの作成
mkdir -p ~/wikijs/data
mkdir -p ~/wikijs/db
# フォルダへ移動
cd ~/wikijs
この器が整ったら、次はここに 「設計図(docker-compose.yml)」 を設置して、いよいよ起動(命を吹き込む作業)へと移ります!

「設計図」を書く:docker-compose.yml
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側など)で作られているものを使います」という意味です。
環境変数ファイル(.env)の作成
# データベースのユーザー名
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がデータベースを見つけられるように、専用の通り道を作ります。
- 永続化設定: 先ほど作った
dataやdbフォルダとコンテナを連結します。
こんな感じになればコンテナが立ち上がった証拠です!

NPM(Nginx Proxy Manager)への登録
起動の確認:まずは「IPアドレス:ポート」で
コマンド実行後、1分ほど待ってからブラウザで以下のアドレスを開いてみてください!
http://サーバーのIPアドレス:3001
Wiki.jsの「Setup」画面(管理者アカウント作成画面)が表示されれば、構築は成功です!
まだ設定は進めなくて大丈夫です。次に「URLを美しく整える」作業が待っています。

※僕はここで小一時間ほど格闘しました(笑)
原因としては、以前必要なポート以外閉じたことあったのですが、それをすっかり忘れていて時間を浪費しました。ポート開放については下記コマンドを実行すればよいので、もしつながらない場合はこの点も調べてみるといいと思います!
sudo ufw allow 3001/tcp
sudo ufw reload

NPM(Nginx Proxy Manager)でURLをスマートに
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]
▶︎ ブログとは少し視点を変えて、副業・キャリアの考え方や、自動化プロジェクトの裏舞台などをディープに書き綴っています。 お気軽にフォローや「いいね」をお願いします。励みになります!

コメント