0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Synology NASにDocker(Container Manager)でPostgreSQLを構築する手順

0
Posted at

はじめに

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

対象読者

  • 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を有効化します。

  1. コントロールパネル端末とSNMP端末タブ
  2. 「SSHサービスを有効化する」にチェック
  3. ポート: 22(デフォルト)
  4. 「適用」をクリック

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 でプロジェクト作成

  1. Container Manager を開く
  2. 左メニューの「プロジェクト」をクリック
  3. 「作成」ボタンをクリック
  4. 以下を入力:
    • プロジェクト名: postgres
    • パス: /volume1/docker/postgres を選択
    • ソース: 「既存の docker-compose.yml を使用」
  5. docker-compose.yml の内容がプレビューされる → 内容を確認
  6. Webポータル設定スキップでOK(PostgreSQLはWebサービスではないため不要)
  7. 「次へ」→「完了」

初回は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_buffers256MB に下げてコンテナを再起動してください。

社外からのアクセス(参考)

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でデータベース環境が作れるので、個人開発や小規模チームにはコスト面でもおすすめです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?