Synology NAS+Docker版GitLabとDecap CMS連携:ポート設定とPKCE認証の完全ガイド
Synology NASのDockerを利用してGitLab環境を構築中、ポート番号の変更やDecap CMS(旧Netlify CMS)との連携で丸一日溶かしてしまいました…。
標準とは異なるポート(例:HTTPを8081番、SSHを222番)を使用し、さらにPKCE認証で連携させようとすると、認証エラーや無限リダイレクトといった問題に直面することがあります。
今回は、同じようにSynology NASでのポート設定で迷子になっている方に向けて、私が解決した際の設定手順を自分の備忘録も兼ねてまとめておきます!
1. 今回の環境と課題
構築環境
- サーバー: Synology NAS
- プラットフォーム: Docker (Container Manager)
- GitLabバージョン: GitLab Community Edition (CE) v18
- GitLab HTTP: NAS(ホスト)
8081➡ コンテナ80 - GitLab SSH: NAS(ホスト)
222➡ コンテナ22 - GitLab URL:
http://192.168.1.1:8081 - CMS認証方式: PKCE (OAuth2)
発生しがちな問題
external_urlに:8081を指定するとブラウザでアクセスできなくなる。- Decap CMSからGitLabへログインしようとすると、APIの向き先がおかしくなり認証が通らない。
- GitLab側で不用意にHTTPS設定を有効にすると、証明書エラーや無限リダイレクトループが発生する。
2. 【解決策1】GitLab側(gitlab.rb)の正しい設定
HTTP(暗号化なし)で運用しつつ、Synology NAS側で設定したカスタムポートを正しく認識させるための /etc/gitlab/gitlab.rb の設定です。
ポイントは、「ユーザーがアクセスするURL」と「コンテナ内で待機するポート」を分け、HTTPS関連の設定を無効化することです。
# ① 表向きのURL(ポート8081を指定)
external_url "[http://192.168.1.1:8081](http://192.168.1.1:8081)"
# ② コンテナ内部の待機ポート(Docker側で 8081:80 としているため 80 に固定)
nginx['listen_port'] = 80
# ③ HTTPS設定の無効化(重要)
# HTTP運用の場合、以下を有効にすると証明書エラーやリダイレクトループになるため、
# コメントアウトするか false に設定します。これで80ポートでの認証が通るようになります。
nginx['listen_https'] = false
nginx['redirect_http_to_https'] = false
# ④ SSHのクローンURL用(ホストの222番を使用している場合)
gitlab_rails['gitlab_shell_ssh_port'] = 222
設定後は、Synologyのターミナル(またはSSH)からコンテナに入り、gitlab-ctl reconfigure を実行して反映させます。
3. 【解決策2】Decap CMS側(config.yml)の正しい設定
GitLabのポート番号を変更している場合、Decap CMS側にも「GitLabのAPIがどこにあるか」を正確に教えてあげる必要があります。
config.yml の backend セクションに api_root と base_url を明記し、認証方式を pkce に設定します。
backend:
name: gitlab
repo: owner/repo # 自分のリポジトリ名に変更
auth_type: pkce # PKCE認証を使用
# カスタムポートを含めたGitLabのURLを正確に指定
api_root: "[http://192.168.1.1:8081/api/v4](http://192.168.1.1:8081/api/v4)"
base_url: "[http://192.168.1.1:8081](http://192.168.1.1:8081)"
これにより、CMSは正しいポート(8081番)を経由してGitLab v18のAPIと通信できるようになり、無事にPKCE認証が通るようになります。
4. トラブルシューティング
① gitlab.rb 保存時に invalid multibyte char エラーが出る
設定ファイルに全角スペースや意図しない日本語が混じると発生します。エラー行を特定し、半角英数字で手入力し直してください。
② GitLabに全くアクセスできない
Synology NASのSSH接続から curl -I http://localhost:8081 を実行し、GitLabが応答しているか確認します。応答がなければ、Synologyのファイアウォール設定で8081番と222番ポートのアクセスが許可されているか確認してください。
5. まとめ
Synology NAS上のDocker版GitLab v18でポートカスタマイズとDecap CMS連携を成功させる鍵は以下の3点です。
- GitLabのポート明示:
external_urlとnginx['listen_port']の役割を分ける。 - HTTPS設定の除外: HTTP運用なら
listen_httpsやredirect_http_to_httpsはオフにする(これが認証を通すための最大のポイント!)。 - CMSへのAPIパス明示:
config.ymlにポート番号を含めたapi_rootを設定する。
この設定手順を押さえておけば、変則的なポート構成のプライベートGitLab環境でも安定してCMSと連携させることができます!