---
title: Node.js で自前のサーバーに設置する
description: "@hakoniwajs/node をインストールし、npx hakoniwa serve で HTTP サーバーを起動します。"
sidebar:
  label: Node.js
---

VPS や自宅サーバーなど、自分で管理しているサーバーで動かす方法です。データは `node:sqlite` による SQLite のファイルに保存されます。

## 必要なもの

- Node.js 22.13 以降 (`node:sqlite` を使います)

## インストールと起動

```sh
npm install @hakoniwajs/node
npx hakoniwa serve
```

`@hakoniwajs/node` をインストールすると `hakoniwa` コマンドが使えるようになり、`serve` サブコマンドで HTTP サーバーが起動します (既定のポートは 3000。`PORT` で変更できます)。

- 待ち受け先を指定しない `npx hakoniwa serve` は、すべてのインターフェースで待ち受けます。このときは `HAKONIWA_BASE_URL` が必要です。未設定だと起動前にエラーで終了します。既定ポートなら `HAKONIWA_BASE_URL=http://localhost:3000` です。メールログインのリンクと OAuth のコールバックに使います
- 自分の PC だけで開くなら `HAKONIWA_HOST=127.0.0.1` (または `localhost`、`::1`) にしてください。ループバックで待ち受けるときは `HAKONIWA_BASE_URL` を省略でき、`http://localhost:<実際のポート>` になります。この URL はリクエストの Host ヘッダからは決めません
- データベースは既定で `./data/hakoniwa.sqlite` に作られます (`HAKONIWA_DB_PATH` で変更できます)
- ログインのセッションなどに使う秘密鍵 (`HAKONIWA_AUTH_SECRET`) は、未設定なら初回の起動時に自動で生成されてデータベースに保存されます
- 最初の管理者は、ログインしてから `/admin/setup` を開き、サーバーのコンソールに出力されるセットアップコードを入力すると登録できます。`HAKONIWA_ADMIN_EMAILS=you@example.com` のように環境変数で指定しておくこともできます

設定できる項目は [環境変数一覧](/hakoniwa/setup/environment-variables) を参照してください。

## 公開する

サーバー自体は HTTPS を扱いません。インターネットに公開する場合は、nginx や Caddy などのリバースプロキシを前段に置いて HTTPS を終端し、`HAKONIWA_BASE_URL` にはブラウザで開く公開 URL を設定してください。同じマシンのリバースプロキシからだけ届ければよいときは `HAKONIWA_HOST=127.0.0.1` のままで構いません。公開 URL が `http://localhost:<ポート>` ではないときは、ループバック待ち受けでも `HAKONIWA_BASE_URL` を設定してください。プロセス自体を LAN や公開アドレスで待ち受けるときは `HAKONIWA_HOST=0.0.0.0` (または `::` やその IP) にし、`HAKONIWA_BASE_URL` も設定します。未設定のままでは起動前にエラーで終了します。

## ゲームを開始する

ブラウザで `/login` からログインし、`/admin` の「新しいゲームを開始」でゲームを始めます。CLI から始めることもできます。

```sh
npx hakoniwa game new --name 第1回 --start-at 2026-10-01T21:00:00+09:00 --final-turn 100 --unit-time 6h
```

ゲームの開始・終了やバックアップなどは CLI からも操作できます。[CLI](/hakoniwa/operation/cli) を参照してください。

## ターンの進行

Node.js 版は、サーバー内のタイマーが 60 秒ごと (`HAKONIWA_TURN_CHECK_INTERVAL_SEC` で変更可) にターンの進行を確認します。アクセスがなくてもターンは進みます。

## 静的ファイル

地形の画像や CSS は `@hakoniwajs/core` パッケージ内の `public/` から配信されます。`HAKONIWA_PUBLIC_DIR` で別のディレクトリに差し替えられます。
