🗂️

Windows PCをサーバー化してGrowiを動かす方法

に公開

はじめに

「社内でWikiを立てたいけど、サーバーやクラウドの予算が下りない。」
そんなとき、OSSのWikiツール「Growi」を手元のWindows PCをサーバー代わりにして運用する方法を紹介します。
WSLやタスクスケジューラーを活用し、PCを再起動しても自動でGrowiが立ち上がるようにするノウハウです。
「とりあえず社内でナレッジを貯める場所がほしい」「サーバーやネットワークの調達が難しい」と感じている方の助けになれば幸いです。

準備するもの

  • Windows 10/11 PC(WSL2対応機種)
  • 管理者権限
  • インターネット接続
  • 会社のネットワーク設定が許可されていること
  • (必要に応じて)PCのIPアドレスを固定できる権限

手順全体の流れ

  1. WSL2+Ubuntuの導入
  2. Docker & docker-composeインストール
  3. Growi-dockerのセットアップ
  4. WindowsでIPアドレスを固定
  5. 起動&自動化スクリプトの配置
  6. タスクスケジューラーで自動起動設定

1. WSL2とUbuntuの導入

まず、WSL2(Windows Subsystem for Linux)を有効化し、Ubuntuをインストールします。
公式ガイドはこちら:
Microsoft公式:WSLのインストール

手順(管理者PowerShellで実行):

wsl --install

PC再起動後、Ubuntuを初回起動してユーザー名とパスワードを設定します。
この記事では説明の都合上、ユーザー名を「user」としています(例:/home/user/)。他のユーザー名にした場合は、以降のパスを適宜読み替えてください。

2. Dockerインストール

Ubuntuのターミナルで、Dockerとdocker-composeをインストールします。

sudo apt update
sudo apt install -y docker.io
sudo apt install -y docker-compose
sudo usermod -aG docker $USER

一度WSLを再起動して、docker --version などで動作確認しましょう。

3. Growi-dockerのセットアップ

cd ~
git clone https://github.com/weseek/growi-docker-compose.git growi
cd growi
# (必要に応じてdocker-compose.ymlを修正)
docker-compose up -d

ブラウザで「http://<PCのIPアドレス>:3000」にアクセスして、Growiの初期画面が出ればOKです。

4. PCのIPアドレスを固定

Growiを他のPCからアクセスできるように、WindowsでIPアドレスを固定します。

手順例:
コントロールパネル
> ネットワークとインターネット
> ネットワークと共有センター
> アダプターの設定
> 使用中のネットワークのプロパティ
> 「インターネット プロトコル バージョン4 (TCP/IPv4)」のプロパティ

以下のような値を設定します(※ネットワーク環境に合わせて変更してください):

IPアドレス:例)192.168.1.100
サブネットマスク:例)255.255.255.0
デフォルトゲートウェイ:例)192.168.1.1
DNSサーバー:例)8.8.8.8, 8.8.4.4

※設定値は会社や自宅ネットワークのアドレス体系に合わせて決めてください。
分からない場合はネットワーク管理者などに確認するのが確実です。

5. 自動起動スクリプトの配置

Growiを自動起動・ポートフォワード自動設定するため、以下のシェルスクリプトを作成し、/home/user/start_growi.sh に保存します。
※以降の手順では、パスに含まれる「user」の部分は、ご自身のUbuntuユーザー名に読み替えてください。

#!/bin/bash
LOGFILE=/home/user/start_growi.log

# ログファイルを初期化
echo "====== Script Execution Started at $(date) ======" > $LOGFILE

# Dockerサービスの起動
sudo service docker start >> $LOGFILE 2>&1

# Growiを起動
cd /home/user/growi && docker-compose up -d >> $LOGFILE 2>&1

# WSLのIPアドレス取得
WSL_IP=$(hostname -I | awk '{print $1}')

# ポートフォワード再設定
PORT=3000
POWERSHELL_CMD="netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=$PORT connectaddress=$WSL_IP connectport=$PORT"
powershell.exe -Command "netsh interface portproxy delete v4tov4 listenport=$PORT"
powershell.exe -Command "$POWERSHELL_CMD" >> $LOGFILE 2>&1

# スリープでWSL維持
sleep infinity

ポイント

  • Dockerサービス・Growiの自動起動
  • WSLのIP→Windowsポートフォワード
    ここでいう「ポートフォワード」とは、Windows側のネットワーク(例:PCの3000番ポート)に来たアクセスを、WSL内で動いているGrowi(同じく3000番ポート)へ転送する設定のことです。
    WSL2はネットワーク的には「仮想マシン」なので、外部PCからアクセスするにはWindowsの「netsh」コマンドで、TCPポートの中継(portproxy)を手動設定しています。この処理をスクリプトで自動化しています。
  • ログも出力されるので、トラブル時も安心
  • そして特に重要なのが最後のsleep infinity
    実はWSL(Windows Subsystem for Linux)は、ユーザーの操作がない状態が続くと、勝手にプロセスを終了してしまう仕様があります。そのため、sleep infinityでシェルスクリプトを無限に実行し続け、WSLのセッションを維持しています。これに気付かず「しばらくするとGrowiにアクセスできなくなる」といった現象にかなり苦労しました。

6. タスクスケジューラーで自動実行

PCを再起動したときに、上記スクリプトが自動的にWSLで起動するように設定します。

6.1 一般タブの設定

「タスクの作成」から「一般」タブを開き、

  • 名前:WSL_Start_Growi
  • 説明:WSLでGrowiを自動起動する
  • 「ユーザーがログオンしているかどうかにかかわらず実行する」を選択
  • 「最上位の特権で実行する」にチェック

6.2 トリガータブの設定

「トリガー」タブで

  • トリガー:任意のユーザーのログオン時 など

6.3 操作タブの設定

「操作」タブで

  • プログラム/スクリプト:wsl
  • 引数の追加(オプション):-d Ubuntu -e /home/user/start_growi.sh

6.4 条件タブの設定

「条件」タブは、必要に応じてデフォルトのままでOKですが、
「AC電源接続時のみ」や「アイドル時のみ」など、動作環境に合わせて変更できます。

6.5 設定タブの設定

「設定」タブは、基本的にはデフォルトのままで問題ありませんが、
「タスクを要求時に実行する」など、必要なオプションにチェックします。

まとめ

これで、Windows PCが「Growiサーバー」として自動運用できるようになりました。
低コスト&手元のPCだけで手軽に始めたい方には特におすすめです。
トラブル時は、スクリプトのログやタスクスケジューラーの履歴から原因を調べてみてください。

Discussion