Nextcloud in Docker を自宅に構築 01章_証明書


Nextcloud in Docker を自宅に構築

NextcloudをDocker使って,自宅のNAPT配下に構築する.
何章まで行くかわかりません.終わるといいな.

  1. (今回) Nextcloud in Docker を自宅に構築 01章_証明書
  2. 内部DNSサーバの構築
  3. リバースプロキシの構築
  4. Nextcloudの構築

前提条件

必要なもの

  • Linuxサーバ
  • DockerとDocker Compose
  • 記事の内容に対して,補填できる知識

ネットワーク環境

ネットワーク環境
[GLOBAL]----[ONU]--[Router (192.168.1.1)]
                          ├-[Server (192.168.1.2)]
                          └-[Client (192.168.1.3)]

ドメイン(DDNS)

まずは,ドメインを取ろう.MyDNS.JPが楽そう.
まあ,あまり説明することもないでしょう.
Domain* : (FQDN) って書いてるところに,自分の欲しいドメインを入れる.
Aレコードのホスト名に,ワイルドカード設定をすることで,ホスト名に問わず自宅まで問い合わせさせることができる.
その後,内部DNSサーバで解決する.

ここでは仮に.var_mydomain_var.mydns.jp を取得したとする.

MyDNSは,Dynamic DNSを提供しているので,定期的に,現在のGlobal IPを教えなきゃいけない.
以下のスクリプトをServerのcronとかに登録しておく.

IPアドレス報告
#!/bin/sh

curl https://MyDNSのユーザID:MyDNSのユーザパスワード@www.mydns.jp/login.html 1 > /dev/null

取得できたかどうかは,
ping var_mydomain_var.mydns.jp
ping hoge.var_mydomain_var.mydns.jp
で確認する.

証明書

今回の本題である.
Let's EncryptのDNS-01で習得する.

DNS-01方式

DNSのTXTレコードを用いて,証明書を発行する(よく分かっていない).
従来のHTTPS方式のように,Port443を解放しなくても良い.

MyDNS + Let's Encrypt + DNS-01

取得するPHPスクリプトが公開されているので,Dockerコンテナ化する.

コンテナ化

コンテナ化したものがこちらである.
Cloneして,表の様にrun時の引数と, txtedit.conf ファイルを編集する.

変数 設定する内容
YOURDOMAIN var_mydomain_var.mydns.jp
YOURMAILADDR 証明書に使用するメールアドレス
MYDNSJP_MASTERID MyDNSのID
MYDNSJP_MASTERPWD MyDNSのパスワード
MYDNSJP_DOMAIN var_mydomain_var.mydns.jp
doc_direct_editのrun
docker run --rm \
    -e YOURDOMAIN=$YOURDOMAIN \
    -e YOURMAILADDR=$YOURMAILADDR \
    -v $(pwd)/etc/letsencrypt:/etc/letsencrypt \
    doc_direct_edit
txtedit.conf
<?php
    $MYDNSJP_URL       = 'https://www.mydns.jp/directedit.html';
    $MYDNSJP_MASTERID  = '';
    $MYDNSJP_MASTERPWD = '';
    $MYDNSJP_DOMAIN = '';
?>

証明書取得

怖い人は,Dockerfile内で,certbot 実行時 に,dry-run オプションを付けてBuildすることで,テストできる(筈).

DockerfileをBuildして,Runすると,その場に,etc ディレクトリができる.
./etc/letsencrypt/live/var_mydomain_var.mydns.jp/ 配下に証明書ができている.

etc配下
etc/
└── letsencrypt
    ├── accounts
    │   └── acme-v02.api.letsencrypt.org
    │       └── directory
    │           └── hogehogehoge
    │               ├── meta.json
    │               ├── private_key.json
    │               └── regr.json
    ├── archive
    │   └── var_mydomain_var.mydns.jp
    │       ├── cert1.pem
    │       ├── chain1.pem
    │       ├── fullchain1.pem
    │       └── privkey1.pem
    ├── csr
    │   └── 0000_csr-certbot.pem
    ├── keys
    │   └── 0000_key-certbot.pem
    ├── live
    │   ├── var_mydomain_var.mydns.jp
    │   │   ├── cert.pem -> ../../archive/var_mydomain_var.mydns.jp/cert1.pem
    │   │   ├── chain.pem -> ../../archive/var_mydomain_var.mydns.jp/chain1.pem
    │   │   ├── fullchain.pem -> ../../archive/var_mydomain_var.mydns.jp/fullchain1.pem
    │   │   ├── privkey.pem -> ../../archive/var_mydomain_var.mydns.jp/privkey1.pem
    │   │   └── README
    │   └── README
    ├── renewal
    │   └── var_mydomain_var.mydns.jp.conf
    └── renewal-hooks
        ├── deploy
        ├── post
        └── pre

16 directories, 16 files

まとめと今後

証明書が,DNS-01方式で取得できた.
今後は,以下のとおりである.
1. 内部DNSサーバの構築
2. リバースプロキシの構築
3. Nextcloudの構築

遠くね?