今回はさくらのVPS(Docker環境)にNginx Proxy Managerを導入する方法と、導入したNginx Proxy Managerを利用してSSL証明書(Let’s Encrypt)の発行、リバースプロキシを設定する方法を紹介します。
勉強を兼ね実際に私が作業した内容を基にこの記事を執筆しています。
誤字脱字、間違い等ありましたら私のTwitterまでお願いいたします。
1. さくらのVPSにSSH接続を行える
2. さくらのVPSでDockerが利用できる状態になっている
3. さくらのVPS管理パネル「パケットフィルター設定」で「80」,「81」,「443」を開放している
4. リバースプロキシで利用したいドメインのDNSをさくらのVPS管理パネルに記載されているIPv4アドレスに向けている
サーバー: さくらのVPS
OS: Ubuntu 22.04 amd64
公式: https://nginxproxymanager.com/
※今後を見据え、/home/<ユーザー名>ではなく/var/dockerディレクトリを作成して、そこにDockerプロジェクトを設置するようにする。
mkdir /var/docker/nginx-proxy-manager
# /var/docker/nginx-proxy-manager
touch docker-compose.yml
公式ドキュメントに記載されている内容を記述する。
https://nginxproxymanager.com/guide/#hosting-your-home-network
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '81:81'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Nginx Proxy Managerで利用するデータベースをMySQLやMariaDBに変更したい場合は以下の内容を記述する。
https://nginxproxymanager.com/setup/#running-the-app
データベース名やユーザー、パスワードなどは適宜修正してください。
version: '3.8'
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: "npm"
DB_MYSQL_PASSWORD: "npm"
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: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./mysql:/var/lib/mysql
# /var/docker/nginx-proxy-manager
docker compose up -d
これでNginx Proxy Managerにアクセスできるようになります。
http://<さくらのVPS管理パネルに記載されているIPv4アドレス>:81
URL: http://<さくらのVPS管理パネルに記載されているIPv4アドレス>:81/login
Email: admin@example.com
Password: changeme
画面に沿って設定を進めてください。推測されないパスワードを設定してください。
表示されたポップアップに内容を記述します。
Domain Names: SSL証明書を発行したいドメイン
Email Address for Let's Encrypt: メールアドレス
Use a DNS Challenge: No
I Agree to the Let's Encrypt Terms of Service: Yes
内容を記述したら「Save」を押して少し待ちます。これでSSL証明書の発行が完了しました。
Dockerプロジェクトの設置・稼働を行います。
mkdir /var/docker/apache-php83
ディレクトリ構造は以下の通りです。
/var/docker/apache-php83
- html
- index.php
- docker-compose.yml
# /var/docker/apache-php83/docker-compose.yml
version: '3.8'
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
# /var/docker/apache-php83/html/index.php
<?php phpinfo(); ?>
Nginx Proxy Managerで利用しているDockerネットワーク名は以下の手順で確認できます。
docker network ls
赤線部分がNginx Proxy Managerで利用しているDockerネットワーク名です。
最後にコンテナを起動します。
# /var/docker/apache-php83
docker compose up -d
やっとリバースプロキシ設定。
「Add Proxy Host」をクリックし、表示されたポップアップに内容を記述します。
Domain Names: 設定したいドメイン
Scheme: http
Forward Hostname / IP: Dockerプロジェクトのコンテナ名 => この記事の場合は'web'
Forward Port: 80
Cache Assets: No
Block Common Exploits: Yes
Websockets Support: No
ここではまだ「Save」をクリックしません。
ポップアップのヘッダーにある「SSL」からSSL証明書を適用します。
「SSL Certificate」の選択項目から先ほど発行したSSL証明書を選択します。
Force SSL: Yes
HTTP/2 Support: Yes
HSTS Enabled: No
HSTS Subdomains: No
そして「Save」、リバースプロキシの設定が完了しました。
これで設定したドメインに対してアクセスを行うとDockerプロジェクトの「web」コンテナのコンテンツが表示されるようになります。
Firewalldの設定やNginx Proxy Managerへのアクセス権を絞るなど、セキュリティ対策はしっかりしましょう。