Open3

Cloud Run + Cloud Storage で Meilisearch を動かす

シロシロ
mkdir meilisearch-with-gcsfuse && cd meilisearch-with-gcsfuse
  • Dockerfile
# Go言語の環境を用意して、gcsfuseをビルド
FROM golang:1.21.0-alpine as builder
RUN apk add --no-cache git
RUN go install github.com/googlecloudplatform/gcsfuse@master

# MeiliSearchの基本イメージ
FROM getmeili/meilisearch:prototype-japanese-6

# 必要なパッケージをインストール
RUN apk add --update --no-cache bash ca-certificates fuse

# ビルダーステージからgcsfuseバイナリをコピー
COPY --from=builder /go/bin/gcsfuse /usr/local/bin/gcsfuse

# 環境変数設定
ENV MEILI_DATA /meilisearch_data
ENV MEILI_DB_PATH $MEILI_DATA/data.ms/
ENV MEILI_DUMP_DIR $MEILI_DATA/dumps/
ENV MEILI_SNAPSHOT_DIR $MEILI_DATA/snapshots/

# entrypoint.shをコピーして実行権限を付与
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# ポートを開放
EXPOSE 7700/tcp

# エントリーポイント指定
ENTRYPOINT ["/entrypoint.sh"]

# 作業ディレクトリ指定
WORKDIR $MEILI_DATA

# CMD指定
CMD ["/bin/meilisearch"]
  • entrypoint.sh
#!/bin/sh

# スクリプトがエラーで停止する場合には即時終了
set -eo pipefail

# データ用ディレクトリ作成
mkdir -p $MEILI_DATA

# GCSFUSE_DEBUGの環境変数が存在する場合にはデバッグオプションを付与
echo "Mounting GCS Fuse."
if [ -n "$GCSFUSE_DEBUG" ]; then
  gcsfuse --debug_gcs --debug_fuse $BUCKET $MEILI_DATA
else
  gcsfuse $BUCKET $MEILI_DATA
fi
echo "Mounting completed."

# MeiliSearch関連のデータ用ディレクトリを作成
mkdir -p $MEILI_DB_PATH
mkdir -p $MEILI_DUMP_DIR
mkdir -p $MEILI_SNAPSHOT_DIR

# 入力されたコマンドを実行
exec tini -- "$@"
シロシロ
gcloud auth login

gcloud config set project [Project ID]

gcloud auth configure-docker asia-northeast1-docker.pkg.dev

docker build -t asia-northeast1-docker.pkg.dev/[Project ID]/[Repository Name]/meilisearch-with-gcsfuse:latest .

docker push asia-northeast1-docker.pkg.dev/[Project ID]/[Repository Name]/meilisearch-with-gcsfuse:latest
シロシロ

起動はできるがindex作成時にエラーが発生する

Rename: operation not supported, cannot rename open file \".tmpXUVQFL\": operation not supported
fuse: *fuseops.RenameOp error: operation not supported
FlushFile: interrupted system call, FileInode.Sync: StatObject: Error in fetching object attributes: context canceled
fuse: *fuseops.FlushFileOp error: interrupted system call