Edited at

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の構築

遠くね?