はじめに
Synology NASにPostgreSQLデータベースを構築し、社内外からアクセスできる環境を作りました。本記事では、Container Manager(旧Docker)を使ったPostgreSQLの設置手順を、実際にハマったポイントを含めて解説します。

対象読者
- Synology NASを持っていて、データベース環境を構築したい方
- Docker(Container Manager)を初めて使う方
- NAS上のDBに社外からアクセスしたい方
動作確認環境
| 項目 | 内容 |
|---|---|
| NAS | Synology DS920+(DS923+でも同様) |
| DSM | 7.2 |
| Container Manager | 最新版 |
| PostgreSQL | 16-alpine(Docker公式イメージ) |
前提条件: Intel CPU搭載のSynology NAS(DS220+, DS720+, DS920+, DS923+, DS1621+ など)が必要です。ARM系CPUのモデルではContainer Managerが使えません。
1. Container Manager のインストール
DSMにブラウザでログインし、パッケージセンターから「Container Manager」を検索してインストールします。旧DSMバージョンでは「Docker」という名前のパッケージです。
2. SSHの有効化
GUIだけでは完結できない操作(フォルダ権限設定、接続テスト)があるため、SSHを有効化します。
- コントロールパネル → 端末とSNMP → 端末タブ
- 「SSHサービスを有効化する」にチェック
- ポート:
22(デフォルト) - 「適用」をクリック
PCからの接続:
ssh あなたのDSMユーザー名@NASのIPアドレス
セキュリティTip: セットアップ完了後にSSHを無効に戻しても構いません。
3. データフォルダの作成と権限設定
3-1. フォルダ作成(GUI)
File Station で以下のフォルダ構造を作成します。
/volume1/docker/
└── postgres/
└── data/
3-2. 権限設定(SSH)⚠️ 重要
sudo chown -R 999:999 /volume1/docker/postgres/data
ここが最初のハマりポイントです。 PostgreSQL公式Dockerイメージは内部ユーザー postgres(UID 999)でデータを書き込みます。この権限設定を忘れると、コンテナが起動直後に停止します。
4. docker-compose.yml の作成
/volume1/docker/postgres/ 配下に docker-compose.yml を作成します。
作成方法
- 方法A: PCのテキストエディタで作成 → File Stationでアップロード
- 方法B: SSHから直接作成(後述)
docker-compose.yml の内容
version: "3.8"
services:
postgres:
image: postgres:16-alpine
container_name: kintone_db
restart: always
ports:
- "5433:5432"
environment:
POSTGRES_USER: your_user
POSTGRES_PASSWORD: YourSecurePassword!
POSTGRES_DB: your_database
PGTZ: Asia/Tokyo
TZ: Asia/Tokyo
volumes:
- /volume1/docker/postgres/data:/var/lib/postgresql/data
shm_size: 256mb
command:
- "postgres"
- "-c"
- "listen_addresses=*"
- "-c"
- "max_connections=50"
- "-c"
- "shared_buffers=512MB"
- "-c"
- "work_mem=16MB"
- "-c"
- "log_timezone=Asia/Tokyo"
設定のポイント
| 項目 | 値 | 理由 |
|---|---|---|
postgres:16-alpine |
Alpine版イメージ | 約80MBと軽量。NASのストレージに優しい |
ports: "5433:5432" |
ホスト側5433 | Synology内蔵PostgreSQLが5432を使用しているため(後述) |
shm_size: 256mb |
共有メモリ | デフォルト64MBでは不足する場合がある |
shared_buffers=512MB |
バッファサイズ | DS920+はRAM 4GB(最大8GB増設可)なので512MBは適正 |
listen_addresses=* |
全IPから受付 | Docker外(VPN経由など)からの接続を許可 |
PGTZ: Asia/Tokyo |
タイムゾーン | タイムスタンプが日本時間になる |
SSHから直接作成する場合:
cat << 'EOF' > /volume1/docker/postgres/docker-compose.yml
# ↑ 上記の内容を貼り付け
EOF
5. Container Manager でプロジェクト作成
- Container Manager を開く
- 左メニューの「プロジェクト」をクリック
- 「作成」ボタンをクリック
- 以下を入力:
-
プロジェクト名:
postgres -
パス:
/volume1/docker/postgresを選択 - ソース: 「既存の docker-compose.yml を使用」
-
プロジェクト名:
- docker-compose.yml の内容がプレビューされる → 内容を確認
- Webポータル設定 → スキップでOK(PostgreSQLはWebサービスではないため不要)
- 「次へ」→「完了」
初回はPostgreSQLイメージのダウンロードに数分かかります。
6. 起動確認
GUIで確認
Container Manager → 「コンテナ」で kintone_db が 「実行中」 になっていればOKです。
コンテナをクリック → 「ログ」タブで以下のメッセージが出ていれば正常起動しています。
LOG: database system is ready to accept connections
SSHで接続テスト
sudo docker exec -it kintone_db psql -U your_user -d your_database
PostgreSQLのプロンプトが表示されたら成功です。
-- バージョン確認
SELECT version();
-- → PostgreSQL 16.x ... が表示される
-- 終了
\q
ハマりポイントまとめ
❌ コンテナが起動直後に停止する
原因: データフォルダの権限不足
sudo chown -R 999:999 /volume1/docker/postgres/data
❌ ポート競合エラー(Error starting userland proxy)
原因: Synology NASには内蔵PostgreSQLが存在する
SynologyのDSMは、一部のアプリ(Synology Chat、Note Station、Synology Office など)のバックエンドとして独自のPostgreSQLを内部で稼働させています。これが 127.0.0.1:5432 を使用しています。
確認コマンド:
sudo netstat -tlnp | grep 5432
# → tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN xxxx/postgres
この内蔵PostgreSQLは絶対に停止しないでください。 依存するSynologyアプリが動かなくなります。
対処法: docker-compose.yml のポートを 5433:5432 に変更してホスト側のポートをずらします。
ports:
- "5433:5432" # ← 5432 → 5433
以降、外部からの接続時はポート 5433 を指定します。
psql -h NASのIPアドレス -p 5433 -U your_user -d your_database
❌ DSMが重くなった
shared_buffers を 256MB に下げてコンテナを再起動してください。
社外からのアクセス(参考)
NAS上のPostgreSQLに社外からアクセスする方法としては以下があります。
| 方法 | セキュリティ | 手軽さ | 特徴 |
|---|---|---|---|
| Tailscale | ◎ | ◎ | ポート開放不要。NASとPCの両方にインストールするだけ |
| Synology VPN Server | ◎ | ○ | NAS標準機能。OpenVPN / L2TP対応 |
| Cloudflare Tunnel | ◎ | △ | TCP接続には追加設定が必要 |
| ポートフォワーディング | ✕ | ○ | セキュリティリスクが高いため非推奨 |
少人数チームであれば Tailscale が最も手軽で安全です。NASのパッケージセンターから直接インストールでき、100.x.x.x:5433 で社外からDB接続できます。
まとめ
Synology NASでのPostgreSQL構築は、Container Manager(Docker)を使えば比較的簡単に実現できます。
主なポイント:
- Alpine版イメージを使うことでNASへの負荷を軽減
- データフォルダの権限設定(UID 999)を忘れずに
- ポート5432はSynology内蔵PostgreSQLと競合するので5433を使う
- 社外アクセスにはTailscaleが手軽で安全
クラウドDBサービスを契約せずに、手元のNASでデータベース環境が作れるので、個人開発や小規模チームにはコスト面でもおすすめです。