😇

CertbotでMeilisearchをSSL化する

2023/06/12に公開

概要

というわけで試してみた

※自分のドメインを使って試したので、人によってはすぐできないかも

検証環境用意

ホストしているドメインに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証明証を作成する

こちらの記事を参考に進めました

https://hiroshi-nagayama.com/ローカルホスト(127-0-0-1)用のssl証明書を取得する/

$ docker compose run --rm certbot certonly --manual -d localhost.hogehoge.link --preferred-challenges dns-01

途中、TXTレコードを表示された値をいれて作成してくれ。と言われるので、TXTレコードを用意する

作成後1分ぐらいまってタイプする → 成功したらおk

作成したファイルの種類はこちらを確認した

https://blog.symdon.info/posts/1604571228/

起動する

.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が叩けた

雑感

できた

CBcloud Tech Blog

Discussion