forked from nocobase/nocobase
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
152 lines (134 loc) · 6.01 KB
/
Copy pathDockerfile
File metadata and controls
152 lines (134 loc) · 6.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
FROM node:22-bookworm AS app-builder
ARG VERDACCIO_URL=http://host.docker.internal:10104/
ARG APPEND_PRESET_LOCAL_PLUGINS
ARG BEFORE_PACK_NOCOBASE="ls -l"
ARG PLUGINS_DIRS
ARG USE_ALIYUN_MIRROR=0
ENV PLUGINS_DIRS=${PLUGINS_DIRS}
RUN set -eux; \
rm -f /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources; \
if [ "$USE_ALIYUN_MIRROR" = "1" ]; then \
printf '%s\n' \
'deb http://mirrors.aliyun.com/debian bookworm main contrib non-free non-free-firmware' \
'deb http://mirrors.aliyun.com/debian bookworm-updates main contrib non-free non-free-firmware' \
'deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free non-free-firmware' \
> /etc/apt/sources.list; \
else \
printf '%s\n' \
'deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware' \
'deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware' \
'deb http://deb.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware' \
> /etc/apt/sources.list; \
fi; \
apt-get update && apt-get install -y jq expect
SHELL ["/bin/bash", "-c"]
RUN expect <<EOD
spawn npm login --auth-type=legacy --registry $VERDACCIO_URL
expect {
"Username:" {send "test\r"; exp_continue}
"Password:" {send "test\r"; exp_continue}
"Email: (this IS public)" {send "test@nocobase.com\r"; exp_continue}
}
EOD
RUN yarn config set registry $VERDACCIO_URL && \
mkdir /app && \
cd /app && \
yarn config set network-timeout 600000 -g && \
yarn create nocobase-app my-nocobase-app -a --skip-dev-dependencies -e APP_ENV=production -e APPEND_PRESET_LOCAL_PLUGINS=$APPEND_PRESET_LOCAL_PLUGINS && \
cd /app/my-nocobase-app && \
yarn install --production && \
yarn add newrelic --production -W && \
$BEFORE_PACK_NOCOBASE && \
rm -rf /app/my-nocobase-app/packages/app/client/src/.umi
COPY ./docker/nocobase/cleanup-node-modules.sh /usr/local/bin/cleanup-node-modules.sh
RUN chmod +x /usr/local/bin/cleanup-node-modules.sh && \
cleanup-node-modules.sh /app/my-nocobase-app && \
tar -zcf /nocobase.tar.gz -C /app/my-nocobase-app . && \
rm -rf /app/my-nocobase-app
FROM scratch AS app-artifact
COPY --from=app-builder /nocobase.tar.gz /nocobase.tar.gz
FROM node:22-bookworm-slim AS docs-archive
ARG INCLUDE_DOCS_ARCHIVE=1
RUN mkdir -p /out
COPY dist.tar.gz /tmp/dist.tar.gz
RUN if [ "$INCLUDE_DOCS_ARCHIVE" = "1" ]; then \
cp /tmp/dist.tar.gz /out/nocobase-docs.tar.gz; \
fi && \
rm -f /tmp/dist.tar.gz
FROM mysql:8.0.39 AS mysql-client-assets
FROM node:22-bookworm-slim AS runtime
ARG COMMIT_HASH
ARG INCLUDE_DOCS_ARCHIVE=1
ARG INSTALL_POSTGRES_16_CLIENT=1
ARG INSTALL_CJK_FONTS=1
ARG NGINX_VERSION=1.30.1-1~bookworm
ARG USE_ALIYUN_MIRROR=0
ENV NB_SKIP_STARTUP_UPDATE=1 \
NOCOBASE_RUNNING_IN_DOCKER=true
COPY --from=mysql-client-assets /usr/bin/mysql /usr/bin/mysql
COPY --from=mysql-client-assets /usr/bin/mysqldump /usr/bin/mysqldump
RUN set -eux; \
rm -f /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources; \
if [ "$USE_ALIYUN_MIRROR" = "1" ]; then \
printf '%s\n' \
'deb http://mirrors.aliyun.com/debian bookworm main contrib non-free non-free-firmware' \
'deb http://mirrors.aliyun.com/debian bookworm-updates main contrib non-free non-free-firmware' \
'deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free non-free-firmware' \
> /etc/apt/sources.list; \
PGDG_MIRROR='http://mirrors.aliyun.com/postgresql/repos/apt'; \
else \
printf '%s\n' \
'deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware' \
'deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware' \
'deb http://deb.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware' \
> /etc/apt/sources.list; \
PGDG_MIRROR='http://apt.postgresql.org/pub/repos/apt'; \
fi; \
apt-get update; \
apt-get install -y --no-install-recommends wget gnupg ca-certificates; \
echo "deb [signed-by=/usr/share/keyrings/pgdg.asc] ${PGDG_MIRROR} bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list; \
wget --quiet -O /usr/share/keyrings/pgdg.asc https://www.postgresql.org/media/keys/ACCC4CF8.asc; \
wget --quiet -O /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key; \
gpg --batch --yes --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg /tmp/nginx_signing.key; \
printf '%s\n' \
'deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] https://nginx.org/packages/debian bookworm nginx' \
> /etc/apt/sources.list.d/nginx.list; \
apt-get update; \
apt-get install -y --no-install-recommends \
"nginx=${NGINX_VERSION}" \
libaio1 \
postgresql-client-17 \
libfreetype6 \
fontconfig \
libgssapi-krb5-2 \
libncurses6 \
fonts-liberation; \
if [ "$INSTALL_POSTGRES_16_CLIENT" = "1" ]; then \
apt-get install -y --no-install-recommends postgresql-client-16; \
fi; \
if [ "$INSTALL_CJK_FONTS" = "1" ]; then \
apt-get install -y --no-install-recommends fonts-noto-cjk; \
fi; \
nginx -v; \
mysql --version; \
mysqldump --version; \
apt-get purge -y --auto-remove wget gnupg dirmngr; \
rm -rf \
/etc/apt/sources.list.d/nginx.list \
/tmp/nginx_signing.key \
/usr/share/keyrings/nginx-archive-keyring.gpg \
/var/lib/apt/lists/* \
/usr/share/doc/* \
/usr/share/man/*
RUN rm -rf /etc/nginx/conf.d/default.conf
COPY ./docker/nocobase/nocobase-docs.conf /etc/nginx/conf.d/nocobase-docs.conf
ADD nocobase.tar.gz /app/nocobase/
COPY --from=docs-archive /out/ /app/
WORKDIR /app/nocobase
RUN ln -sf /app/nocobase/node_modules/.bin/nb /usr/local/bin/nb && \
mkdir -p /app/nocobase/docs /app/nocobase/storage/uploads /app/nocobase/node_modules/@nocobase/app/dist/client && \
touch /app/nocobase/node_modules/@nocobase/app/dist/client/index.html && \
echo "$COMMIT_HASH" > /app/commit_hash.txt
COPY ./docker/nocobase/docker-entrypoint.sh /app/
RUN chmod +x /app/docker-entrypoint.sh
CMD ["/app/docker-entrypoint.sh"]