公開日: 2023年12月25日

さくらのVPS(Docker)にNginx Proxy Managerを導入してDockerコンテナ(PHP + Apache)を公開する

プライベートでさくらのVPS(Docker)にNginx Proxy Managerを導入してDockerコンテナ(PHP + Apache)を公開する機会があったのでその備忘録です。

目次

前提条件

環境

サーバー: さくらのVPS
OS: Ubuntu 22.04 amd64
CPU: 仮想2Core
メモリー: 1GB
SSD: 100GB

作業手順

Nginx Proxy Managerを導入する

Nginx Proxy Manager

Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt
https://nginxproxymanager.com/
  1. Nginx Proxy Managerを設置するディレクトリを作成する。

    Terminal window
    mkdir /var/docker/nginx-proxy-manager
    cd /var/docker/nginx-proxy-manager
  2. compose.ymlを作成する。

    Terminal window
    touch compose.yml
  3. compose.ymlにNginx Proxy Managerコンテナの設定を記述する。

    Terminal window
    vi compose.yml

    今回はNginx Proxy Managerで利用するDBにMariaDBを採用します。
    ユーザー名やパスワードは適宜修正してください。

    compose.yml
    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

    Guide | Nginx Proxy Manager

    Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt
    https://nginxproxymanager.com/guide/#hosting-your-home-network

    Full Setup Instructions | Nginx Proxy Manager

    Docker container and built in Web Application for managing Nginx proxy hosts with a simple, powerful interface, providing free SSL support via Let's Encrypt
    https://nginxproxymanager.com/setup/#running-the-app
  4. コンテナを作成、起動する。

    Terminal window
    docker compose up -d

    コンテナが問題なく立ち上がれば、Nginx Proxy Managerの管理画面にアクセスできるようになります。

  5. 管理画面にログインする。

    URL: http://<さくらのVPS管理パネルに記載されているIPv4アドレス>:81
    Email: admin@example.com
    Password: changeme

    image1

    管理画面にログインするとメールアドレスとパスワードの変更を求められるので、適当なものに変更してください。

Nginx Proxy ManagerでSSL証明書(Let’s Encrypt)の発行を行う

  1. SSL CertificatesからSSL証明書設定ページへ移動する。

    image2

  2. SSLの設定を行う。

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

    image3

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

    image4

    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証明書の発行は以上で完了です。

Nginx Proxy Managerで公開するDockerコンテナ(PHP + Apache)を設置する

  1. コンテナの構成ファイルを設置する。

    Terminal window
    mkdir /var/docker/project
    cd /var/docker/project

    ディレクトリ構造は以下の通りです。

    .
    ├── html
    │ ├── index.php
    └── compose.yml
    html/index.php
    <?php phpinfo(); ?>
    compose.yml
    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で確認できます。

    Terminal window
    docker network ls

    image5

    画像の赤線部分がNginx Proxy Managerで利用しているDockerネットワーク名です。

  2. コンテナを作成、起動する。

    Terminal window
    docker compose up -d

Nginx Proxy Managerでリバースプロキシの設定を行う

  1. Hosts > Proxy Hostsからプロキシ設定一覧画面へ移動する。

    image6

  2. プロキシの設定を行う。

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

    image7

    Domain Names: 設定したいドメイン
    Scheme: http
    Forward Hostname / IP: コンテナ名 => この記事の場合は'web'
    Forward Port: 80
    Cache Assets: No
    Block Common Exploits: Yes
    Websockets Support: No

    ポップアップのSSLから適用するSSL証明書を選択します。

    image8

    Saveで保存、以上で設定が完了しました。

注意

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

© 2024 blog.tksn.jp. All Rights Reserved.