Skip to content

Commit

Permalink
Merge pull request #355 from BennettChina/main
Browse files Browse the repository at this point in the history
修复一些BUG以及增加Action构建基础镜像的功能
  • Loading branch information
MarryDream authored Aug 24, 2024
2 parents 34c5004 + e6f82cd commit f6d1e9a
Show file tree
Hide file tree
Showing 13 changed files with 362 additions and 187 deletions.
1 change: 1 addition & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,7 @@ ij_markdown_max_lines_between_paragraphs = 1
ij_markdown_min_lines_around_block_elements = 1
ij_markdown_min_lines_around_header = 1
ij_markdown_min_lines_between_paragraphs = 1
ij_yaml_indent_size = 2

[{*.yaml,*.yml}]
indent_size = 2
Expand Down
51 changes: 51 additions & 0 deletions .github/workflows/docker-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Docker Image CI

on:
push:
branches:
- 'main'
- 'dev'
tags:
- 'v*'

jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
# list of Docker images to use as base name for tags
images: |
ghcr.io/${{ github.repository }}
# generate Docker tags based on the following events/attributes
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile.base
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
USE_MIRROR=false
platforms: linux/amd64,linux/arm64
51 changes: 40 additions & 11 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,25 +1,44 @@
FROM alpine
FROM alpine:3.20 AS resource

ARG USE_MIRROR=true

RUN set -eux; \
emoji_url="https://github.com/samuelngs/apple-emoji-linux/releases/latest/download/AppleColorEmoji.ttf"; \
if $USE_MIRROR; then \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories; \
emoji_url="https://mirror.ghproxy.com/${emoji_url}"; \
fi; \
apk add --no-cache --update ca-certificates; \
update-ca-certificates; \
emoji_dir="/usr/share/fonts/emoji"; \
mkdir -p "${emoji_dir}"; \
wget "${emoji_url}" -O "${emoji_dir}/AppleColorEmoji.ttf"

FROM node:18-alpine3.20 as adachi-base

ARG USE_MIRROR=true

ENV TZ=Asia/Shanghai \
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser \
GOSU_VERSION=1.16
GOSU_VERSION=1.17 \
CI=1

COPY --from=resource /usr/share/fonts/emoji/AppleColorEmoji.ttf /usr/share/fonts/emoji/AppleColorEmoji.ttf
COPY public/fonts/wqy-microhei-regular.ttf /usr/share/fonts/win/wqy-microhei-regular.ttf

# Installs latest Chromium (100) package.
# Non-mainland China servers can remove this sed replace and npm config registry. example: RUN apk add --no-cache ...
RUN set -eux; \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories; \
if $USE_MIRROR; then \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories; \
fi; \
apk add --no-cache --update \
chromium \
nss \
freetype \
harfbuzz \
ca-certificates \
git \
nodejs \
npm \
tzdata \
dos2unix \
dumb-init; \
Expand All @@ -30,7 +49,6 @@ RUN set -eux; \
pnpm config set registry https://registry.npmmirror.com; \
pnpm config set store-dir ~/.pnpm-store; \
rm -rf /var/cache/apk/*; \
addgroup -S -g 1000 adachi && adduser -S -G adachi -u 999 adachi; \
\
apk add --no-cache --update --virtual .gosu-deps \
ca-certificates \
Expand All @@ -40,8 +58,14 @@ RUN set -eux; \
\
update-ca-certificates; \
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
wget -O /usr/local/bin/gosu "https://mirror.ghproxy.com/https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
wget -O /usr/local/bin/gosu.asc "https://mirror.ghproxy.com/https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
gosu_exe="https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
gosu_asc="https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
if $USE_MIRROR; then \
gosu_exe="https://mirror.ghproxy.com/${gosu_exe}"; \
gosu_asc="https://mirror.ghproxy.com/${gosu_asc}"; \
fi; \
wget -O /usr/local/bin/gosu "${gosu_exe}"; \
wget -O /usr/local/bin/gosu.asc "${gosu_asc}"; \
\
# verify the signature
export GNUPGHOME="$(mktemp -d)"; \
Expand All @@ -58,11 +82,16 @@ RUN set -eux; \
gosu --version; \
gosu nobody true

FROM adachi-base

COPY . /bot
WORKDIR /bot

RUN chmod +x docker-entrypoint.sh && dos2unix docker-entrypoint.sh
RUN chmod +x docker-entrypoint.sh && \
dos2unix docker-entrypoint.sh && \
addgroup -S -g 1001 adachi && \
adduser -S -G adachi -u 1001 adachi

ENTRYPOINT ["sh", "docker-entrypoint.sh"]

CMD sh -c "pnpm install && pnpm docker-start"
CMD sh -c "pnpm docker-start"
83 changes: 83 additions & 0 deletions Dockerfile.base
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
FROM alpine:3.20 AS resource

ARG USE_MIRROR=true

RUN set -eux; \
emoji_url="https://github.com/samuelngs/apple-emoji-linux/releases/latest/download/AppleColorEmoji.ttf"; \
if $USE_MIRROR; then \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories; \
emoji_url="https://mirror.ghproxy.com/${emoji_url}"; \
fi; \
apk add --no-cache --update ca-certificates; \
update-ca-certificates; \
emoji_dir="/usr/share/fonts/emoji"; \
mkdir -p "${emoji_dir}"; \
wget "${emoji_url}" -O "${emoji_dir}/AppleColorEmoji.ttf"

FROM node:18-alpine3.20

ARG USE_MIRROR=true

ENV TZ=Asia/Shanghai \
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser \
GOSU_VERSION=1.17 \
CI=1

COPY --from=resource /usr/share/fonts/emoji/AppleColorEmoji.ttf /usr/share/fonts/emoji/AppleColorEmoji.ttf
COPY public/fonts/wqy-microhei-regular.ttf /usr/share/fonts/win/wqy-microhei-regular.ttf

# Installs base package.
RUN set -eux; \
if $USE_MIRROR; then \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories; \
fi; \
apk add --no-cache --update \
chromium \
nss \
freetype \
harfbuzz \
ca-certificates \
git \
tzdata \
dos2unix \
dumb-init; \
cp /usr/share/zoneinfo/$TZ /etc/localtime; \
echo $TZ > /etc/timezone; \
npm config set registry https://registry.npmmirror.com; \
npm i pnpm -g; \
pnpm config set registry https://registry.npmmirror.com; \
pnpm config set store-dir ~/.pnpm-store; \
rm -rf /var/cache/apk/*; \
\
apk add --no-cache --update --virtual .gosu-deps \
ca-certificates \
dpkg \
gnupg \
; \
\
update-ca-certificates; \
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
gosu_exe="https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
gosu_asc="https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
if $USE_MIRROR; then \
gosu_exe="https://mirror.ghproxy.com/${gosu_exe}"; \
gosu_asc="https://mirror.ghproxy.com/${gosu_asc}"; \
fi; \
wget -O /usr/local/bin/gosu "${gosu_exe}"; \
wget -O /usr/local/bin/gosu.asc "${gosu_asc}"; \
\
# verify the signature
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
command -v gpgconf && gpgconf --kill all || :; \
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
\
# clean up fetch dependencies
apk del --no-network .gosu-deps; \
\
chmod +x /usr/local/bin/gosu; \
# verify that the binary works
gosu --version; \
gosu nobody true
8 changes: 5 additions & 3 deletions docker-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
#!/bin/sh
set -e
# 设置文件所属的用户和用户组(排除数据库使用的database目录)
#find . -type d \( -path ./database -o -path ./qsign -o \) -prune -o -print | xargs chown adachi:adachi
find . \! -user adachi -exec chown adachi '{}' +

# 切换用户前执行依赖安装操作,处理 pnpm 创建文件夹权限不够的问题
pnpm i -P --no-frozen-lockfile

find . \! -user adachi -exec test -e '{}' \; -exec chown adachi '{}' +

# 使用 gosu 切换到 adachi 用户启动 dumb-init
exec gosu adachi dumb-init -- "$@"
25 changes: 14 additions & 11 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "adachi-bot",
"private": true,
"version": "3.3.2",
"version" : "3.4.0",
"description": "功能集成的 bot 开发框架",
"scripts": {
"dev": "cross-env NODE_ENV=development ts-node app.ts",
Expand All @@ -13,7 +13,6 @@
"log": "pm2 logs --lines 100 adachi-bot"
},
"dependencies": {
"@types/ws": "^8.5.5",
"axios": "^1.3.6",
"express": "^4.18.2",
"express-jwt": "^8.4.1",
Expand All @@ -34,9 +33,16 @@
"systeminformation": "^5.17.12",
"tencentcloud-sdk-nodejs-nlp": "^4.0.590",
"ws": "^8.13.0",
"yaml": "^2.2.2"
"yaml" : "^2.2.2",
"typescript" : "^5.0.4",
"compressing" : "^1.10.0",
"tsconfig-paths" : "^4.2.0",
"ts-node" : "^10.9.1",
"single-line-log" : "^1.1.2",
"vite" : "^4.4.5"
},
"devDependencies": {
"@types/ws" : "^8.5.5",
"@types/express": "^4.17.17",
"@types/express-ws": "^3.0.1",
"@types/lodash": "^4.14.194",
Expand All @@ -45,17 +51,14 @@
"@types/node-schedule": "^2.1.0",
"@types/nodemailer": "^6.4.10",
"@types/single-line-log": "^1.1.0",
"compressing": "^1.10.0",
"cross-env": "^7.0.3",
"nodemon": "^2.0.22",
"single-line-log": "^1.1.2",
"ts-node": "^10.9.1",
"ts-node-dev": "^2.0.0",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.0.4",
"vite": "^4.4.5"
"ts-node-dev" : "^2.0.0"
},
"workspaces": [
"src/plugins/**"
]
],
"engines" : {
"node" : ">=16"
}
}
Loading

0 comments on commit f6d1e9a

Please sign in to comment.