From f5993373200746856ccdcd8629d8180c8d3d1b5a Mon Sep 17 00:00:00 2001 From: Masaya Suzuki <15100604+massongit@users.noreply.github.com> Date: Sun, 5 Feb 2023 14:04:02 +0900 Subject: [PATCH] =?UTF-8?q?Dockle=E3=81=AECI=E8=BF=BD=E5=8A=A0=20(#9568)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Dockerイメージ検査のCI追加 * Add cp * step分離 * step分離 * rm depends_on * Dockle実行時に必要なイメージタグ付与処理をCI内で行う * 末尾に移動 * Add comment * .git削除処理をビルドステージに移動 * docker-compose.yml作成処理追加 * aptのキャッシュ削除処理追加 * ヘルスチェック用スクリプト追加 * yqインストール処理修正 * Add ca-certificates * yqインストール処理をビルドステージに移動 * インデントを揃える * インデントをタブに変更 --- .dockerignore | 6 ++++++ .dockleignore | 2 ++ .github/workflows/dockle.yml | 30 ++++++++++++++++++++++++++++++ Dockerfile | 12 ++++++++++-- healthcheck.sh | 4 ++++ 5 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 .dockleignore create mode 100644 .github/workflows/dockle.yml create mode 100644 healthcheck.sh diff --git a/.dockerignore b/.dockerignore index 854e643d3..8f984831e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -16,9 +16,15 @@ files/ misskey-assets/ fluent-emojis/ .pnp.* + +# .yarn関連 .yarn/* !.yarn/patches !.yarn/plugins !.yarn/releases !.yarn/sdks !.yarn/versions + +.idea/ +packages/*/.vscode/ +packages/backend/test/docker-compose.yml diff --git a/.dockleignore b/.dockleignore new file mode 100644 index 000000000..7b17e9c9b --- /dev/null +++ b/.dockleignore @@ -0,0 +1,2 @@ +DKL-DI-0006 +DKL-LI-0003 diff --git a/.github/workflows/dockle.yml b/.github/workflows/dockle.yml new file mode 100644 index 000000000..9b79ee54f --- /dev/null +++ b/.github/workflows/dockle.yml @@ -0,0 +1,30 @@ +--- +name: Dockle + +on: + push: + branches: + - master + - develop + pull_request: + +jobs: + dockle: + runs-on: ubuntu-latest + env: + DOCKER_CONTENT_TRUST: 1 + steps: + - uses: actions/checkout@v3.2.0 + - run: | + curl -L -o dockle.deb "https://github.com/goodwithtech/dockle/releases/download/v0.4.10/dockle_0.4.10_Linux-64bit.deb" + sudo dpkg -i dockle.deb + - run: | + cp .config/docker_example.env .config/docker.env + cp ./docker-compose.yml.example ./docker-compose.yml + - run: | + docker compose up -d web + docker tag "$(docker compose images web | awk 'OFS=":" {print $4}' | tail -n +2)" misskey-web:latest + - run: | + cmd="dockle --exit-code 1 misskey-web:latest ${image_name}" + echo "> ${cmd}" + eval "${cmd}" diff --git a/Dockerfile b/Dockerfile index 3876b5f6c..9b6f2f7e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,9 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache \ && apt-get update \ && apt-get install -yqq --no-install-recommends \ - build-essential + build-essential wget ca-certificates \ + && wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq \ + && chmod +x /usr/bin/yq RUN corepack enable @@ -29,6 +31,7 @@ ARG NODE_ENV=production RUN git submodule update --init RUN pnpm build +RUN rm -rf .git/ FROM node:${NODE_VERSION}-slim AS runner @@ -42,13 +45,17 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ && apt-get update \ && apt-get install -y --no-install-recommends \ ffmpeg tini \ + && rm -rf /var/lib/apt/lists \ && corepack enable \ && groupadd -g "${GID}" misskey \ - && useradd -l -u "${UID}" -g "${GID}" -m -d /misskey misskey + && useradd -l -u "${UID}" -g "${GID}" -m -d /misskey misskey \ + && find / -type f -perm /u+s -ignore_readdir_race -exec chmod u-s {} \; \ + && find / -type f -perm /g+s -ignore_readdir_race -exec chmod g-s {} \; USER misskey WORKDIR /misskey +COPY --from=builder /usr/bin/yq /usr/bin/yq COPY --chown=misskey:misskey --from=builder /misskey/node_modules ./node_modules COPY --chown=misskey:misskey --from=builder /misskey/built ./built COPY --chown=misskey:misskey --from=builder /misskey/packages/backend/node_modules ./packages/backend/node_modules @@ -58,5 +65,6 @@ COPY --chown=misskey:misskey --from=builder /misskey/fluent-emojis /misskey/flue COPY --chown=misskey:misskey . ./ ENV NODE_ENV=production +HEALTHCHECK --interval=5s --retries=20 CMD ["/bin/bash", "/misskey/healthcheck.sh"] ENTRYPOINT ["/usr/bin/tini", "--"] CMD ["pnpm", "run", "migrateandstart"] diff --git a/healthcheck.sh b/healthcheck.sh new file mode 100644 index 000000000..f8e598b28 --- /dev/null +++ b/healthcheck.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +PORT=$(yq '.port' /misskey/.config/default.yml) +curl -s -S -o /dev/null "http://localhost:${PORT}"