LoginSignup
5

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-08-13

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サーバで解決する.

Aレコードのワイルドカード設定

ここでは仮に.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の構築

遠くね?

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5