AWSでGrafana用のEC2インスタンスをたてている。AWSならば、ELB経由にすると、ELBにACMで発行した証明書を割り当てられて楽なのだが、今回は漢のEC21本立ちなので、Let's Encrypt を使って発行することにした。
grafana-serverでcertbotコマンドがうまくいかなかったので、nginxのリバースプロキシ機能を使い、nginx経由にしている。
環境
- AWS, EC2, Ubuntu 18.0.4, t2.micro
- Grafana 6.7.2
- nginx 1.14.0(ubuntu)
- certbot 0.31.0
やること
GrafanaのWeb UIにhttpsで入れるようにする。特にELBなど使わないので、証明書の発行はLet's Encryptを使う。
(User) -> nginx -> grafana-server
というように、nginxのリバースプロキシ経由にする。なんでそんな面倒なことをするかというと、certbotでうまいこと証明書が発行できなかったからだ。
手順自体は、port=80をあけて「Setup Grafana on Ubuntu 18.04 with LetsEncrypt – Hack‧zen‧werk」に則ってやればよさそうなのだが、うまくいかない。certbotを実行すると以下のようなエラーが出る。
Problem binding to port 80: Could not bind to IPv4 or IPv6.
調べてみると下記のようになぜかgrafana-serverがIPv6になっている模様。
$ sudo lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
grafana-s 14168 grafana 6u IPv6 1972314 0t0 TCP *:http (LISTEN)
軽く調べるとなんだか非常にややこしそうだったので、それなら慣れたnginxを使ったほうがいいや、と。
ちなみに余談だが、root権限以外で1024以下のportを開けるときにはそのように明示してやる必要があるようで、「Configuration | Grafana Labs」によると以下のコマンドがいる。
$ sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/grafana-server
手順
手順については「How To Install and Secure Grafana on Ubuntu 18.04 | DigitalOcean」を参考にさせていただきました。
Grafanaについてはインストールしていて、DNSの設定も完了しているものとする。また、EC2のSGは80と443のTCPを開けておく。
nginxのインストール
$ sudo apt update
$ sudo apt install nginx
$ sudo systemctl enable nginx.service
$ systemctl status nginx.service
-> enabledになっていることを確認
ブラウザからドメインにアクセスして、nginxのデフォルト画面が表示されることを確認する。1サイトしか使わないので、これ以上の設定はここではしない。
証明書の発行
「Certbot - Ubuntubionic Nginx」に基づいて、certbotを導入してドメイン証明書を発行する。
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo certbot --nginx
ここから対話式
-> Emailアドレスの入力
-> A (規約にAgree)
-> Y/N (メール飛ばしていいか)
-> 2 (httpきたらRedirectする)
ブラウザからhttpsでドメインにアクセスできるか確認する。httpにしたらhttpsに飛ばされるかも確認。
証明書の有効期限は90日と割と短いので、はcronなどで自動的に更新してやるとよい。なお更新コマンド。
$ sudo certbot renew
リバースプロキシの設定
grafana-serverに飛ばす設定をする。
/etc/nginx/sites-avalable/default (ドメイン毎に設定ファイル作っているならそれ)より、SSLの時の server ブロックにある location ブロックを以下のように編集。try_filesをコメントアウトして、proxy_passを追加する。
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
#try_files $uri $uri/ =404;
proxy_pass http://localhost:3000;
}
編集したら、文法チェックしてOKならreload。
$ sudo nginx -t
$ sudo systemctl reload nginx.service
ブラウザからドメインに飛んで、Grafanaのダッシュボードに飛べたらOK。
以上。
コメント