Synology の NAS の一部モデルは Docker コンテナを動かすことができる。
NAS は自宅のコンピュータの中でも「常時稼働している」「ストレージが冗長化されている」という都合の良い存在であるので、ちょっとしたアプリケーションをホストしたりタスクランナーになってくれたりすると便利な事この上ない。
今回は Synology NAS を GitHub Actions の Self-Hosted Runner として動かしてやろうと思って試したところ、通常とちょっと違う手順があったのでまとめる。
試した環境
-
Synology DiskStation DS224+
- CPU は x64 (Intel Celeron 4コア) なので Docker が動くモデル
- メモリは 2GB であるものの拡張スロットがあり、適当に DDR4 SO-DIMM 8GB を刺したら合計 10GB として認識されてワロタ (公式情報では +4GB が上限とされている)
- DSM 7.4.1-90080
- 2026年9月時点での最新バージョン
SSH まわりの設定
SSH を有効化する
DiskStation Manager (Web UI) から、SSH を有効化する。
- 端末と SNMP > 端末 > SSH サービスを有効化する
- ユーザーとグループ > 詳細 > ユーザーホームサービスを有効にする
- SSH 接続するだけならこれは必須ではないが、あとで公開鍵認証を設定するので今回は必要
設定したら、administrator グループに所属するユーザで SSH 接続できることを確認する。
公開鍵認証できるようにする
そもそも ~/.ssh/authorized_keys が無いので作る。
$ mkdir -p -m 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 644 ~/.ssh/authorized_keys
公開鍵を登録する (手順は割愛)
パスワードログインを禁止する
公開鍵認証で SSH 接続できることが確認してからやったほうがよい。接続できなくなると面倒なことになる。
$ sudo sed -i 's/^#\?PasswordAuthentication\s\+yes/PasswordAuthentication no/' /etc/ssh/sshd_config
$ sudo systemctl restart sshd
Docker まわりの設定
今回は GitHub Actions の Self-Hosted Runner の話なので Docker は関係ないのだけど、だいたいは一緒に使うと思うのでついでに書いておく。
Docker (Container Manager) をインストールする
DiskStation Manager (Web UI) のパッケージセンターから Container Manager をインストールする。これは Synology 公式が提供するパッケージで、内部的には普通に Docker がインストールされる。
ちなみにパッケージバージョンと Docker バージョンは連動していて、例えば Container Manager 24.0.2-1706 を入れたら Docker 24.0.2 が入っている。
sudo なしで Docker を操作できるようにする
sudo なしで Docker を操作できるようにするためには通常通り docker.sock にアクセスする権限をグループに割り当てればいいだけだが、DSM には groupadd usermod などのコマンドは入っていないので synogroup を使う。
$ sudo synogroup --add docker && sudo chown root:docker /var/run/docker.sock && sudo synogroup --member docker ${USER}
設定したら、一度切断して再接続してから docker ps などを実行して docker.sock にアクセスできることを確認する。
GitHub Actions Runner まわりの設定
基本的には通常の Self-Hosted Runner を追加する手順と同じだが、少しだけひねるイメージ。
設定時に使用するトークンは組織またはリポジトリの「New self-hosted runner」のところから入手する。
GitHub Actions Runner を入れる
今回は /github-actions-runner に GitHub Actions Runner を入れることにする。
/etc 以下とかは DSM をアップデートしたときに削除されてしまったりするかもしれないので気をつけたほうがよい。/github-actions-runner は大丈夫なのかというとよくわからない。
$ sudo mkdir /github-actions-runner
$ sudo chown ${USER}:administrators /github-actions-runner
$ sudo chmod 755 /github-actions-runner
$ cd /github-actions-runner
2026年9月時点での最新版である v2.337.0 を入れる。
$ curl \
-o github-actions-runner.tar.gz \
-L https://github.com/actions/runner/releases/download/v2.337.0/actions-runner-linux-x64-2.337.0.tar.gz
$ tar xzf ./github-actions-runner.tar.gz
設定する
通常の手順通り config.sh で設定しようとすると、エラーが出る。
$ ./config.sh --url https://github.com/... --token ...
Can not find 'ldd'. Please install 'ldd' and try again.
「ldd コマンドがない」とか「ldconfig コマンドがない」とか言われるが、apt のようなパッケージマネージャが使えるわけでもないので、そう簡単に入れることはできない。
しかしこれらは依存関係のチェックに使っているだけなので実は bypass できる。
実際に必要となる glibc や libicu などは Synology NAS には既に入っているため問題ない。
というわけで、config.sh ではなく内部で使用されている ./bin/Runner.Listener configure を直接呼び出して設定を行う。
$ ./bin/Runner.Listener configure --url https://github.com/... --token ...
動作確認する
$ ./run.sh
GitHub に接続でき、GitHub 側で Runner として認識されていれば成功。
Systemd サービス化する
Synology NAS の DSM は Systemd が動いているので、これで run.sh をサービス化できる。
[Unit]
Description=GitHub Actions Runner
After=network.target
[Service]
Type=simple
User=hoto
WorkingDirectory=/github-actions-runner
ExecStart=/github-actions-runner/bin/Runner.Listener run
Restart=always
RestartSec=5
KillMode=process
KillSignal=SIGTERM
[Install]
WantedBy=multi-user.target
$ sudo systemctl start github-actions-runner
$ sudo systemctl enable github-actions-runner