😇
CertbotでMeilisearchをSSL化する
概要
- この前こんな記事書いた
- 最近Meilisearchのドキュメントを散歩しているとこんなオプションに気づいた
- なんだと・・・・?もしやNginx必要ないのでは・・・・?
というわけで試してみた
※自分のドメインを使って試したので、人によってはすぐできないかも
検証環境用意
ホストしているドメインにlocalhostにアクセスできるように、Aレコードを用意する
hogehgoe.link
というドメインをRoute53でホストしているとします
localhost.hogehgoe.link
というAレコードを作成し、値に 127.0.0.1
と設定してください。
ローカルに準備
$ mkdir ./letsencrypt
$ touch .env
$ API_KEY=`python3 -c "import uuid; print(uuid.uuid4())"`
$ echo "MEILI_ENV=production
MEILI_MASTER_KEY=${API_KEY}
MEILI_NO_ANALYTICS=false
MEILI_LOG_LEVEL=INFO
MEILI_SCHEDULE_SNAPSHOT=86400
# MEILI_HTTP_ADDR=localhost.hogehoge.link:443
# MEILI_SSL_CERT_PATH=/etc/letsencrypt/live/localhost.hogehgoe.link/cert.pem
# MEILI_SSL_KEY_PATH=/etc/letsencrypt/live/localhost.hogehgoe.link/privkey.pem" >.env
docker compose yamlファイルを用意する
services:
meilisearch:
image: getmeili/meilisearch:prototype-japanese-2
volumes:
- ./meili_data:/meili_data
- ./letsencrypt:/etc/letsencrypt
ports:
- 443:443
hostname: localhost.hogehoge.link
env_file:
- .env
certbot:
image: certbot/certbot:latest
container_name: certbot
volumes:
- ./letsencrypt:/etc/letsencrypt
- ./dist:/dist
command: ["--version"]
手順
SSL証明証を作成する
こちらの記事を参考に進めました
$ docker compose run --rm certbot certonly --manual -d localhost.hogehoge.link --preferred-challenges dns-01
途中、TXTレコードを表示された値をいれて作成してくれ。と言われるので、TXTレコードを用意する
作成後1分ぐらいまってタイプする → 成功したらおk
作成したファイルの種類はこちらを確認した
起動する
.env
のコメントアウト削除
$ vim .env
MEILI_ENV=production
MEILI_MASTER_KEY=5fd20d77-f2ac-4970-b5a4-10b500fff8bb
MEILI_NO_ANALYTICS=false
MEILI_LOG_LEVEL=INFO
MEILI_SCHEDULE_SNAPSHOT=86400
MEILI_HTTP_ADDR=localhost.hogehoge.link:443
MEILI_SSL_CERT_PATH=/etc/letsencrypt/live/localhost.hogehgoe.link/cert.pem
MEILI_SSL_KEY_PATH=/etc/letsencrypt/live/localhost.hogehgoe.link/privkey.pem
$ docker compose up -d
動作確認
curl -s \
-X GET 'https://localhost.hogehoge.link/keys' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer dba2c282-95d7-431b-a8ca-6e43299dbc8d' \
| jq .
{
"results": [
{
"name": "Default Search API Key",
"description": "Use it to search from the frontend",
"key": "ac99525fe942564bf485d3ce8b1c23e576asdfa323rvasdg234b1bfa42d4afa1a76d7bb3493c9316e",
"uid": "0d059de8-48ba-4376-86b9-4d407cb5a03d",
"actions": [
"search"
],
"indexes": [
"*"
],
"expiresAt": null,
"createdAt": "2023-06-12T13:44:32.282786875Z",
"updatedAt": "2023-06-12T13:44:32.282786875Z"
},
{
"name": "Default Admin API Key",
"description": "Use it for anything that is not a search operation. Caution! Do not expose it on a public frontend",
"key": "9bdeaa8109f8ea9090555f7234123f67b1402e02e65ecd909234asdf231ddc170f53df4179de7b1",
"uid": "36f41b70-2c54-4118-aa21-a829f9f31b58",
"actions": [
"*"
],
"indexes": [
"*"
],
"expiresAt": null,
"createdAt": "2023-06-12T13:44:32.280509792Z",
"updatedAt": "2023-06-12T13:44:32.280509792Z"
}
],
"offset": 0,
"limit": 20,
"total": 2
}
httpsでcurlが叩けた
雑感
できた
Discussion