💽

Synology NAS上でPostgreSQLをDockerコンテナとして動かす

2022/05/06に公開

2行まとめ

  • Synology NASではDockerコンテナを起動できる。
  • Synology NAS上でPostgreSQLを起動することで、RAID構成のデータベース環境を手軽に構築できる。

はじめに

Synology製のNAS(Network Attached Storage)は、比較的自由度が高く、普通のLinuxマシンのようにいろいろなことができます。
今回は、そんなSynology NASでPostgreSQLを動かしてみました。

環境

今回使用したSynology NASは「DS720+」という機種で、スペックは以下の通りです。

  • 3.5インチベイ: 2つ
  • CPU: Intel Celeron J4125 2GHz
  • メモリ: 2GB
  • ネットワーク: 1Gbps Ethernet 2つ

Dockerパッケージをインストールする

Synology NASには「パッケージ」と呼ばれるソフトウェアを追加する機構があり、そのパッケージを使ってDocker環境を簡単に構築することができます。手順は以下の通りです。

  1. 管理者権限のあるユーザでDSM(DiskStation Manager)にログインする。
  2. 「パッケージセンター」を起動する。
  3. 画面上部の検索ボックスに「Docker」を入力して検索する。
  4. 「Docker」パッケージの「インストール」ボタンを押下する。

https://www.synology.com/ja-jp/dsm/packages/Docker

PostgreSQLコンテナを起動する

Dockerパッケージをインストールした後、以下の手順でPostgreSQLのコンテナを起動します。

  1. DSMにログインする。
  2. データ保存用の共有フォルダ、データ用ディレクトリを作成する。
  3. メニューから「Docker」を起動する。
  4. Dockerイメージをダウンロードする。
    1. タブの「レジストリ」を選択する。
    2. 右上の検索ボックスに「postgres」と入力して検索する。
    3. postgres」イメージを選択する。
    4. 「ダウンロード」ボタンを押下する。
    5. 「タグの選択」ダイアログボックスで使用したいタグを選択する。(今回はHasuraを使用する関係で13.5-alpineを選択しました)
    6. 「選択」ボタンを押下する。
    7. ダウンロード完了の通知が表示されるまで待機する。
  5. Dockerコンテナを起動する。
    1. タブの「イメージ」を選択する。
    2. PostgreSQLのDockerイメージを選択する。
    3. 「起動」ボタンを押下する。
    4. 「全般設定」ダイアログボックスで「自動起動を有効にする」をチェックする。(必要に応じて)
    5. 「全般設定」ダイアログボックスで「詳細設定」ボタンを押下して、以下の環境変数を設定する。
      • TZ: Asia/Tokyo
      • POSTGRES_PASSWORD: postgresユーザのパスワード
    6. 「ポート設定」ダイアログボックスで5432/tcpをローカルポートにマップする。
    7. 「ボリューム設定」ダイアログボックスで/var/lib/postgresql/dataディレクトリにデータ用ディレクトリをマップする。

PostgreSQLのDockerイメージの詳細については、Docker Hubをご参照ください。環境変数についても説明があります。

https://registry.hub.docker.com/_/postgres/

設定例

Synology NASのDockerコンテナは、その設定をエクスポートすることができます。具体例を以下に示します。

インポートする場合は、以下の箇所を適宜書き換える必要があります。

  • env_variables:
    • TZ: タイムゾーンを指定します。
    • POSTGRES_PASSWORD: postgresユーザのパスワードを指定します。
  • name: Dockerコンテナの名称を指定します。
  • port_bindings: マップするポートを指定します。
  • volume_bindings: データを保存するディレクトリを指定します。
{
   "CapAdd" : null,
   "CapDrop" : null,
   "cmd" : "postgres",
   "cpu_priority" : 50,
   "enable_publish_all_ports" : false,
   "enable_restart_policy" : true,
   "enabled" : true,
   "entrypoint_default" : "docker-entrypoint.sh",
   "env_variables" : [
      {
         "key" : "PATH",
         "value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      },
      {
         "key" : "LANG",
         "value" : "en_US.utf8"
      },
      {
         "key" : "PG_MAJOR",
         "value" : "13"
      },
      {
         "key" : "PG_VERSION",
         "value" : "13.5"
      },
      {
         "key" : "PG_SHA256",
         "value" : "9b81067a55edbaabc418aacef457dd8477642827499560b00615a6ea6c13f6b3"
      },
      {
         "key" : "PGDATA",
         "value" : "/var/lib/postgresql/data"
      },
      {
         "key" : "TZ",
         "value" : "Asia/Tokyo"
      },
      {
         "key" : "POSTGRES_PASSWORD",
         "value" : "password"
      }
   ],
   "exporting" : false,
   "id" : "d58a4b3a7b43035e9435fe991fbff9e3248e8145e17baadc29e524de36f7880d",
   "image" : "postgres:13.5-alpine",
   "is_ddsm" : false,
   "is_package" : false,
   "links" : [],
   "memory_limit" : 0,
   "name" : "postgresql-13.5",
   "network" : [
      {
         "driver" : "bridge",
         "name" : "bridge"
      }
   ],
   "network_mode" : "bridge",
   "port_bindings" : [
      {
         "container_port" : 5432,
         "host_port" : 15432,
         "type" : "tcp"
      }
   ],
   "privileged" : false,
   "shortcut" : {
      "enable_shortcut" : false,
      "enable_status_page" : false,
      "enable_web_page" : false,
      "web_page_url" : ""
   },
   "use_host_network" : false,
   "volume_bindings" : [
      {
         "host_volume_file" : "/docker/postgresql",
         "mount_point" : "/var/lib/postgresql/data",
         "type" : "rw"
      }
   ]
}

PostgreSQLにpsqlコマンドを使って接続する

PostgreSQLを起動した後は、同じDockerイメージに含まれているpsqlコマンドを使って接続することができます。以下に例を示します。

docker run -it --rm postgres:13.5-alpine psql -h <NASのホスト名/IPアドレス> -p <コンテナのポート番号> -U postgres

最後に

Synology NAS上に、PostgreSQL環境を簡単に構築することができました。
Dockerイメージが提供されているソフトウェアであれば、同じように手軽に起動できると思います。

自由度の高いSynology NAS、なかなかおすすめです。

関連記事

Discussion