#目的
Nginx Proxy Managerにリバースプロキシさせその後ろにdocker-composeで立ち上げたWebアプリをぶら下げていく事ができる環境を構築する。
#環境
Ubuntu 20.04.1 LTS
名前解決できるドメイン所持
#概要
- Docker、Docker Compose のインストール
- docker-compose.ymlの作成
- Nginx Proxy Managerの設定
- 動作確認
##1. Docker、Docker Compose のインストール
###Dockerのインストール
公式が用意しているシェルスクリプトを実行しDockerをインストールします。
curl https://get.docker.com | sh
Dockerが常時起動するようにします。
sudo systemctl start docker
sudo systemctl enable docker
正常にインストール出来ているか確認します。
$ docker --version
Docker version 20.10.11, build dea9396
###Docker Compose のインストール
Dockerプラグインディレクトリを作成します。
mkdir -p $HOME/.docker/cli-plugins
Docker Composeのgithub上のリリースページから最新バージョンを確認します。(執筆時 v2.1.1)
以下の2.1.1の部分を確認したバージョンに置き換えてください。↓
curl -Lf -o $HOME/.docker/cli-plugins/docker-compose "https://github.com/docker/compose/releases/download/v2.1.1/docker-compose-linux-x86_64"
バイナリに対して実行権限を付与します。
sudo chmod +x /usr/local/bin/docker-compose
正常にインストール出来ているか確認します。
$ docker compose version
Docker Compose version v2.1.1
##2. docker-compose.ymlの作成
コンテナ間を接続するためにネットワークを作ります。
sudo docker network create front
作業ディレクトリを作成します。
mkdir docker
mkdir docker/{nginx-proxy,nextcloud}
nginx-proxy、nextcloudそれぞれのディレクトリにdocker-compose.ymlを作成し実行していきます。
###Nginx Proxy Managerコンテナ
cd docker/nginx-proxy
sudo vim docker-compose.yml
version: "3"
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: always
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
networks:
- front
- back
db:
image: 'jc21/mariadb-aria:latest'
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./mysql:/var/lib/mysql
networks:
- back
volumes:
data:
letsencrypt:
mysql:
networks:
front:
external: true
back:
Docker Composeを実行します。
sudo docker-compose up -d
コンテナが正常に動作しているか確認します
$ sudo docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------
nginxproxy_app_1 /init Up 0.0.0.0:443->443/tcp,:::443->443/tcp,
0.0.0.0:80->80/tcp,:::80->80/tcp,
0.0.0.0:81->81/tcp,:::81->81/tcp
nginxproxy_db_1 /scripts/run.sh Up 3306/tcp
###Nextcloudコンテナ
cd docker/nextcloud
sudo vim docker-compose.yml
version: '3'
services:
nextcloud-app:
image: nextcloud:latest
restart: always
environment:
MYSQL_HOST: "db"
MYSQL_USER: "nextcloud"
MYSQL_PASSWORD: "nextcloud"
MYSQL_DATABASE: "nextcloud"
# PHP_MEMORY_LIMIT=5120M
# PHP_UPLOAD_MAX_FILESIZE=512M
# PHP_POST_MAX_SIZE=512M
volumes:
- ./data:/var/www/html
networks:
- front
- back
db:
image: mariadb
restart: always
environment:
MYSQL_USER: "nextcloud"
MYSQL_ROOT_PASSWORD: "nextcloud"
MYSQL_PASSWORD: "nextcloud"
MYSQL_DATABASE: "nextcloud"
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb_read_only_compressed=OFF
volumes:
- ./db:/var/lib/mysql
networks:
- back
volumes:
nextcloud-data:
nextcloud-db:
networks:
front:
external: true
back:
Docker Composeを実行します。
sudo docker-compose up -d
コンテナが正常に動作しているか確認します。
$ sudo docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------
nextcloud_db_1 docker-entrypoint.sh --tra ... Up 3306/tcp
nextcloud_nextcloud-app_1 /entrypoint.sh apache2-for ... Up 80/tcp
docker
├── nextcloud
│ ├── data
│ ├── db
│ ├── docker-compose.yml
│ └── mysql
└── nginx-proxy
├── data
├── docker-compose.yml
├── letsencrypt
└── mysql
##3. Nginx Proxy Managerの設定
ブラウザのアドレスバーにlocalhost:81
と入力し、Nginx Proxy Managerを開く。
デフォルトのメールアドレスとパスワードを入力しログインする。
Email: admin@example.com Password: changeme
ユーザ情報変更を促されるので変更します。
メールアドレスは証明書発行の際に使うので架空のものはやめたほうが良いと思います。
Save後、右上のアイコンをクリックしChangePasswordからパスワードを変更しておきます。
次回から変更したメールアドレスとパスワードでログインするので忘れないようにしましょう。
「Dashboard > Proxy Host > Add Proxy Host」からプロキシの設定を行う。
Domain Namesには取得しているドメインを入力してください。
このドメインへアクセスすると、今回立ち上げたnextcloudへ接続されるようになります。
次にSSL証明書を発行しSaveします。
##4. 動作確認
先程入力したドメインにアクセスしhttps接続になっていることを確認します。
お疲れさまでした。
#一応
余計な情報は表示させたくないので
Nginx Proxy ManagerのSettingsからNginxのデフォルトページをNotFoundに変更しておく。
#引っ掛かりそうなところ
- ファイアウォールを設定している場合80,443ポートを開けていない
- ルーターのポート開放をしていない
- ヘアピンNAT非対応のルーターを使っている(宅内からWAN側にアクセス出来ない)
#あとがき
追加でnextcloud以外のアプリをぶら下げたい場合は同じネットワークに所属させてあげれば良いです。
networks:
front:
external: true
#参考
https://docs.docker.jp/linux/step_one.html
#更新履歴
- 2021/11/24: 初版