Shumoku

インストール

Docker、systemd、手動で Shumoku Server をデプロイ

ワンコマンドインストール(新規 Linux ホスト)

SSH したばかりの素の VM 向け。Docker が無ければ導入し、./shumokucompose.yaml.env を配置してサービスを起動します:

curl -fsSL https://raw.githubusercontent.com/konoe-akitoshi/shumoku/main/apps/server/scripts/install.sh | sh

本番では、バージョンを固定しポート 80 で公開するのが推奨です:

curl -fsSL https://raw.githubusercontent.com/konoe-akitoshi/shumoku/main/apps/server/scripts/install.sh \
  | SHUMOKU_VERSION=0.1.4 SHUMOKU_PORT=80 sh

環境変数で調整: SHUMOKU_VERSION(既定 latest)、SHUMOKU_PORT(既定 8080)、 DEMO_MODE(既定 false)、INSTALL_DIR(既定 ./shumoku)。パイプ前に中身を確認したい 場合はスクリプト本体を参照してください: apps/server/scripts/install.sh

Docker(推奨)

最も簡単な方法 — 公開イメージを取得するだけ(clone 不要):

docker run -d -p 8080:8080 -v shumoku-data:/data ghcr.io/konoe-akitoshi/shumoku:latest
# → http://localhost:8080   (`-e DEMO_MODE=true` でサンプルネットワークを投入)

イメージは server-v* リリースタグでのみ公開されます(main からは push されません)。利用可能なタグ: X.Y.Z / X.Y.Z-beta.N(正確なバージョン)、latest(最新の安定版リリース)、beta(最新のベータリリース)、edge(安定版・ベータを問わず最新のリリース)— コンテナパッケージを参照。

ソースからビルドする場合は Compose:

git clone https://github.com/konoe-akitoshi/shumoku.git
cd shumoku/apps/server
docker compose up -d

http://localhost:8080 を開き、管理者パスワードを設定すれば準備完了です。

Docker Compose オプション

compose.yaml は編集せず、隣に置いた .env で設定します(docker compose が自動で読み込みます)。テンプレートをコピーして調整:

cp .env.example .env     # SHUMOKU_VERSION / SHUMOKU_PORT / DEMO_MODE
docker compose up -d

単発なら環境変数を直接渡しても構いません:

SHUMOKU_PORT=80 docker compose up -d        # ポート変更
DEMO_MODE=true docker compose up -d         # サンプルネットワーク付きで起動

バージョンの固定(本番では推奨)

latest最新の安定版リリースに追従する可動タグです。中身は取得時点の最新安定版と同じですが、新しいリリースが出た後に再度 up -d すると気付かないうちに更新されます。再現性とロールバックのため、本番では .env に正確なバージョンを固定してください:

# .env
SHUMOKU_VERSION=0.1.4

利用可能なタグは上記「Docker」節を参照。

アップデート

公開イメージ(Compose / ワンコマンドインストール)の場合.envSHUMOKU_VERSION を上げてから再作成します:

cd ~/shumoku          # compose.yaml と .env のあるディレクトリ
# .env の SHUMOKU_VERSION を新しいバージョンに編集
docker compose pull
docker compose up -d

latest を使っている場合は編集不要で pullup -d だけで最新安定版に上がります。データは shumoku-data ボリュームに保持されるため失われません。DB マイグレーションは起動時に自動適用されます。

ソースからビルドしている場合 — リポジトリを更新して再ビルド:

cd shumoku/apps/server
git pull
docker compose up -d --build

--build フラグにより最新のソースでイメージが再ビルドされます。

イメージの検証(署名・SBOM)

公開イメージには GitHub Actions の OIDC を用いた Cosign キーレス署名が付き、 SBOM と SLSA provenance が OCI アテステーションとして添付されています(本機能導入 以降に公開されたリリースが対象)。取得前に、正規の CI が作ったイメージか検証できます:

cosign verify \
  --certificate-identity-regexp '^https://github.com/konoe-akitoshi/shumoku/' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  ghcr.io/konoe-akitoshi/shumoku:latest

SBOM / provenance の確認:

# SBOM(含まれるパッケージ一覧)
cosign download sbom ghcr.io/konoe-akitoshi/shumoku:latest

# provenance(どのビルドで作られたか)
docker buildx imagetools inspect ghcr.io/konoe-akitoshi/shumoku:latest \
  --format '{{ json .Provenance }}'

イメージは linux/amd64linux/arm64 のマルチアーキで公開されるため、ARM の VPS や Apple Silicon でも同じタグがそのまま動きます。

Systemd(Linux)

前提条件

  • Bun ランタイム
  • Git

インストール

git clone https://github.com/konoe-akitoshi/shumoku.git /opt/shumoku
cd /opt/shumoku/apps/server

make setup

sudo mkdir -p /var/lib/shumoku
sudo chown shumoku:shumoku /var/lib/shumoku

sudo cp scripts/shumoku.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable shumoku
sudo systemctl start shumoku

管理

sudo systemctl status shumoku      # ステータス確認
sudo journalctl -u shumoku -f      # ログ表示
sudo systemctl restart shumoku     # 再起動

アップデート

cd /opt/shumoku
git pull
cd apps/server
make setup
sudo systemctl restart shumoku

手動

インストール

git clone https://github.com/konoe-akitoshi/shumoku.git
cd shumoku/apps/server
make setup
make start

# カスタム設定で起動
DATA_DIR=/path/to/data PORT=8080 bun dist/index.js

アップデート

cd shumoku
git pull
cd apps/server
make setup
make start

リバースプロキシ(nginx)

server {
    listen 80;
    server_name shumoku.example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

WebSocket(/ws)には上記の Upgrade / Connection ヘッダーが必要です。

環境変数

変数説明デフォルト
PORTサーバーポート8080
HOSTバインドアドレス0.0.0.0
DATA_DIRデータディレクトリ(SQLite)/data
SHUMOKU_PORT外部ポート(Docker Compose)8080
DEMO_MODE空の DB にサンプルネットワークを読み込むfalse

バックアップとリストア

全データは /data 以下の SQLite DB(shumoku.db)に格納されています。ただし WAL モードで動作するため、直近の書き込みは shumoku.db-wal 側に残ります。 どのタイミングで本体へ反映されるかは SQLite の自動チェックポイント任せで、停止 しても強制されません。そのため shumoku.db 単体のコピーは不完全になり得ます (ほぼ空になることもあります)。バックアップは shumoku.db / shumoku.db-wal / shumoku.db-shm を揃えて取得するか、/data を丸ごとコピーしてください。

Docker — 一時停止して /data ボリュームを丸ごと固めるのが最も確実です:

# バックアップ
docker compose stop
docker run --rm -v shumoku-data:/data -v "$PWD":/backup alpine \
  tar czf /backup/shumoku-backup.tgz -C /data .
docker compose start

# リストア
docker compose stop
docker run --rm -v shumoku-data:/data -v "$PWD":/backup alpine \
  sh -c 'rm -rf /data/* && tar xzf /backup/shumoku-backup.tgz -C /data'
docker compose start

Systemd — DB ファイルを 3 つまとめて(shumoku.db*)コピーします:

sudo systemctl stop shumoku
cp /var/lib/shumoku/shumoku.db* ./backup/
sudo systemctl start shumoku

# リストア
sudo systemctl stop shumoku
cp ./backup/shumoku.db* /var/lib/shumoku/
sudo systemctl start shumoku

スキーマ変更を含むアップデートの前には、必ずバックアップを取ってください。

本番での継続バックアップ(推奨)

上記の手動バックアップは「時々・手元に」取る最小構成です。本番では、SQLite を止めずに オフサイトへ継続複製する Litestream の併用を推奨します。WAL を 購読して S3 / MinIO / Azure Blob などへ near-real-time にレプリケートし、任意時点への復元 (point-in-time restore)ができます。生ファイルコピーではなく SQLite の仕組みを使うため、 アプリを止めず・DB を壊さずに動きます。compose.yaml にサイドカーを 1 つ足すだけです:

services:
  # shumoku サービスはそのまま(同じ shumoku-data volume を共有します)
  litestream:
    image: litestream/litestream:0.5.9
    restart: unless-stopped
    depends_on: [shumoku]
    volumes:
      - shumoku-data:/data
      - ./litestream.yml:/etc/litestream.yml:ro
    command: replicate
    environment:
      - LITESTREAM_ACCESS_KEY_ID=${S3_ACCESS_KEY}
      - LITESTREAM_SECRET_ACCESS_KEY=${S3_SECRET_KEY}

litestream.yml:

dbs:
  - path: /data/shumoku.db
    replica:
      url: s3://my-backups/shumoku
      # MinIO など非 AWS の場合のみ:
      # endpoint: https://minio.example.com

復元は別コンテナで実行します:

docker run --rm \
  -v shumoku-data:/data \
  -v "$PWD/litestream.yml":/etc/litestream.yml:ro \
  -e LITESTREAM_ACCESS_KEY_ID=... -e LITESTREAM_SECRET_ACCESS_KEY=... \
  litestream/litestream:0.5.9 restore /data/shumoku.db

MinIO を使う場合の注意: MinIO のイメージは比較的新しい CPU(x86-64-v2 命令セット)を要求します。古い/最小構成の VM では Fatal glibc error: CPU does not support x86-64-v2 で起動しないことがあります。その場合は本物の S3 互換 ストレージか、軽量な S3 プロキシ(例: gaul/s3proxy)を宛先にしてください。 Litestream 本体(replicaterestore)は影響を受けません。

アプリ改修を避けつつ定期・自動化したい場合は、対象コンテナを自動停止してから volume を 固める offen/docker-volume-backup (cron・暗号化・S3・世代管理に対応)をサイドカーにする方法もあります。

いずれの方式でも、リストアを定期的に試すことが最も重要です(復元できて初めてバックアップです)。

目次