プライベートでさくらのVPS(Docker)にNginx Proxy Managerを導入してDockerコンテナ(PHP + Apache)を公開する機会があったのでその備忘録です。
80
、81
、443
番ポートを開放している。サーバー: さくらのVPSOS: Ubuntu 22.04 amd64CPU: 仮想2Coreメモリー: 1GBSSD: 100GB
Nginx Proxy Managerを設置するディレクトリを作成する。
mkdir /var/docker/nginx-proxy-managercd /var/docker/nginx-proxy-manager
compose.ymlを作成する。
touch compose.yml
compose.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: true
Nginx Proxy Managerで利用しているDockerネットワークはdocker network ls
で確認できます。
docker network ls
画像の赤線部分がNginx Proxy Managerで利用しているDockerネットワーク名です。
コンテナを作成、起動する。
docker compose up -d
Hosts > 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へのアクセス権を絞るなど、セキュリティ対策をしっかり行ってください。