プライベートでさくらのVPS(Docker)にNginx Proxy Managerを導入してDockerコンテナ(PHP + Apache)を公開する機会があったのでその備忘録です。
80、81、443番ポートを開放している。サーバー: さくらのVPSOS: Ubuntu 22.04 amd64CPU: 仮想2Coreメモリー: 1GBSSD: 100GBNginx Proxy Managerを設置するディレクトリを作成する。
mkdir /var/docker/nginx-proxy-managercd /var/docker/nginx-proxy-managercompose.ymlを作成する。
touch compose.ymlcompose.ymlにNginx Proxy Managerコンテナの設定を記述する。
vi compose.yml今回はNginx Proxy Managerで利用するDBにMariaDBを採用します。
ユーザー名やパスワードは適宜修正してください。
services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' - '443:443' - '81:81'
environment: DB_MYSQL_HOST: 'db' DB_MYSQL_PORT: 3306 DB_MYSQL_USER: '<DB_MYSQL_USER>' DB_MYSQL_PASSWORD: '<DB_MYSQL_PASSWORD>' DB_MYSQL_NAME: 'npm'
volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt depends_on: - db
db: image: 'jc21/mariadb-aria:latest' restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: '<MYSQL_ROOT_PASSWORD>' MYSQL_DATABASE: 'npm' MYSQL_USER: '<DB_MYSQL_USER>' MYSQL_PASSWORD: '<DB_MYSQL_PASSWORD>' volumes: - ./mysql:/var/lib/mysqlコンテナを作成、起動する。
docker compose up -dコンテナが問題なく立ち上がれば、Nginx Proxy Managerの管理画面にアクセスできるようになります。
管理画面にログインする。
URL: http://<さくらのVPS管理パネルに記載されているIPv4アドレス>:81Email: admin@example.comPassword: changeme
管理画面にログインするとメールアドレスとパスワードの変更を求められるので、適当なものに変更してください。
SSL CertificatesからSSL証明書設定ページへ移動する。

SSLの設定を行う。
画面のAdd SSL CertificateをクリックしてLet’s Encryptを選択すると画像のポップアップが表示されます。

表示されたポップアップに以下の設定を記述します。

Domain Names: SSL証明書を発行したいドメインEmail Address for Let's Encrypt: メールアドレスUse a DNS Challenge: NoI Agree to the Let's Encrypt Terms of Service: Yes設定の記述が完了したらSaveで保存します。SSL証明書の発行は以上で完了です。
コンテナの構成ファイルを設置する。
mkdir /var/docker/projectcd /var/docker/projectディレクトリ構造は以下の通りです。
.├── html│ ├── index.php└── compose.yml<?php phpinfo(); ?>services: web: image: php:8.3.0-apache volumes: - ./html:/var/www/html networks: - <Nginx Proxy Managerで利用しているDockerネットワーク名>
networks: <Nginx Proxy Managerで利用しているDockerネットワーク名>: external: trueNginx Proxy Managerで利用しているDockerネットワークはdocker network lsで確認できます。
docker network ls
画像の赤線部分がNginx Proxy Managerで利用しているDockerネットワーク名です。
コンテナを作成、起動する。
docker compose up -dHosts > Proxy Hostsからプロキシ設定一覧画面へ移動する。

プロキシの設定を行う。
Add Proxy Hostをクリックし、表示されたポップアップに以下の設定を記述します。

Domain Names: 設定したいドメインScheme: httpForward Hostname / IP: コンテナ名 => この記事の場合は'web'Forward Port: 80Cache Assets: NoBlock Common Exploits: YesWebsockets Support: NoポップアップのSSLから適用するSSL証明書を選択します。

Saveで保存、以上で設定が完了しました。
ファイアウォールの設定やNginx Proxy Managerへのアクセス権を絞るなど、セキュリティ対策をしっかり行ってください。