DockerコンテナによるFlexisipのTLS接続
NginxリバースプロキシとLet’sEncryptによるSSL/TLS接続をサポートするDockerコンテナを利用して、FlexisipをTLS接続に対応させます。Dockerによる新たなブリッジネットワークnginx-proxyを作成し、全てのコンテナをこのネットワーク内で稼働します。
Dockerブリッジネットワークnginx-proxyの作成
$ docker network create nginx-proxy
ネットワークの確認
$ docker network inspect nginx-proxy
Docker共有ボリューム"shared"の作成
docker-composeにより作成されたコンテナ間でLetsencryptによる認証ファイルを共有するためのボリュームを予め作成します。
$ docker volume create shared
ボリューム一覧・確認
$ docker volume ls
$ docker volume inspect shared
[
{
"CreatedAt": "2019-11-10T20:52:30+09:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/shared/_data",
"Name": "shared",
"Options": {},
"Scope": "local"
}
]
Docker-Composeファイルnginx-lets.ymlを作成
以下Nginx-ProxyとLet’s EncryptによるTLS認証をサポートするイメージからComposeファイルを作成します。
ファイルの格納場所は任意です(但し、FlexisipのComposeファイルと同一のディレクトリは避けて下さい)。
nginx-proxy
LetsEncrypt companion container for nginx-proxy
nginx-lets.yml
version: '2'
services:
nginx-proxy:
container_name: nginx-proxy
image: jwilder/nginx-proxy
ports:
- 80:80
- 443:443
volumes:
- shared:/etc/nginx/certs
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: always
networks:
- proxy-tier
nginx-proxy-letsencrypt:
container_name: nginx-proxy-letsencrypt
image: jrcs/letsencrypt-nginx-proxy-companion
volumes_from:
- nginx-proxy:rw
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- [email protected]
restart: always
networks:
- proxy-tier
networks:
proxy-tier:
external:
name: nginx-proxy
volumes:
shared:
external: true
上記Composeファイルにより各コンテナを起動します。
$ docker-compose -f nginx-lets.yml up -d
Flexisipコンテナを起動
Docker-Composeファイルは以下参照願います。(UbuntuまたはDebianバージョン)
LetsEncryptによる認証ファイルを共有するためdocker-compose.ymlファイルに以下内容を追加します。
version: '3'
services:
........................
.......................
volumes: これをubuntu(debisn)-flexisipの項目に追加
- shared:/etc/flexisip/tls
..........................
.........................
volumes: これを最後尾に追加
shared:
external: true
上記ComposeファイルによりFlexisipを起動します。
デフォルトのファイル名docker-compose.ymlの場合、ファイル名を指定する必要はありません。
$ docker-compose up -d
FlexisipのTLS設定
中間証明書chain.pemとサーバ証明書(認証局から配布)cert.pemを連結したfullchain.pemからcafile.pemファイルを、サーバ証明書cert.pemとプライベートキーkey.pemからagent.pemファイルを作成します。
$ docker exec -ti ubuntu(debian)-flexisip bash
# cd /etc/flexisip/tls/www.example.com
# ls
account_key.json cert.pem chain.pem fullchain.pem key.pem
# cp fullchain.pem cafile.pem
# awk 1 key.pem cert.pem > agent.pem
/etc/flexisip/flexisip.confのTLS認証の箇所を編集します。
transports=sips:www.example.com:5071;maddr=172.18.0.5
tls-certificates-dir=/etc/flexisip/tls/www.example.com/
最後にFlexisipコンテナを再起動します。
$ docker container restart ubuntu(debian)-flexisip
<オプション>SNMPを起動する場合
ubuntu(debian)-flexisipコンテナへアクセス、execコマンドによるbashスクリプトを実行
$ docker exec -ti ubuntu(debian)-flexisip /etc/init.d/snmpd start
またはflexisipコンテナ起動時にexecコマンドによるbashスクリプトを実行してSNMPを起動
$ docker container start ubuntu(debian)-flexisip && docker exec -it ubuntu(debian)-flexisip /etc/init.d/snmpd start