orztv
commited on
Commit
·
b7f848a
1
Parent(s):
4ca4af3
update
Browse files- Dockerfile +18 -22
- Dockerfile-1 +46 -0
- docker/startup.sh +47 -8
Dockerfile
CHANGED
@@ -1,20 +1,24 @@
|
|
1 |
FROM nocodb/nocodb:latest
|
2 |
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
|
|
|
|
|
|
|
|
11 |
|
12 |
# 复制启动脚本并设置权限
|
13 |
COPY docker/startup.sh /usr/src/appEntry/startup.sh
|
14 |
RUN chmod +x /usr/src/appEntry/startup.sh
|
15 |
|
16 |
-
#
|
17 |
-
USER
|
18 |
|
19 |
WORKDIR /usr/src/app
|
20 |
|
@@ -28,19 +32,11 @@ ENV LITESTREAM_S3_SKIP_VERIFY=false \
|
|
28 |
NODE_ENV=production \
|
29 |
PORT=8080 \
|
30 |
NC_ALLOW_LOCAL_HOOKS=true \
|
31 |
-
|
32 |
-
|
33 |
-
S3_ENDPOINT=${NC_S3_ENDPOINT} \
|
34 |
-
S3_ACCESS_KEY=${NC_S3_ACCESS_KEY} \
|
35 |
-
S3_ACCESS_SECRET=${NC_S3_ACCESS_SECRET} \
|
36 |
-
LITESTREAM_S3_BUCKET=${NC_S3_BUCKET_NAME} \
|
37 |
-
LITESTREAM_S3_REGION=${NC_S3_REGION} \
|
38 |
-
LITESTREAM_S3_ENDPOINT=${NC_S3_ENDPOINT} \
|
39 |
-
LITESTREAM_S3_ACCESS_KEY_ID=${NC_S3_ACCESS_KEY} \
|
40 |
-
LITESTREAM_S3_SECRET_ACCESS_KEY=${NC_S3_ACCESS_SECRET}
|
41 |
|
42 |
-
EXPOSE 8080
|
43 |
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
|
44 |
|
45 |
# 运行启动脚本
|
46 |
-
CMD ["/usr/src/appEntry/startup.sh"]
|
|
|
1 |
FROM nocodb/nocodb:latest
|
2 |
|
3 |
+
# 创建数据目录、设置权限并安装 PostgreSQL 和 Redis
|
4 |
+
RUN mkdir -p /usr/app/data /run/postgresql && \
|
5 |
+
chown -R 1000:1000 /usr/app /usr/src/app /usr && \
|
6 |
+
apk add --no-cache postgresql postgresql-contrib redis && \
|
7 |
+
adduser -D -u 1000 nocodb && \
|
8 |
+
echo "nocodb:nocodb_password" | chpasswd && \
|
9 |
+
chown nocodb:nocodb /run/postgresql && \
|
10 |
+
su - nocodb -c "initdb -D /usr/app/data/pgdata" && \
|
11 |
+
echo "host all all 0.0.0.0/0 md5" >> /usr/app/data/pgdata/pg_hba.conf && \
|
12 |
+
echo "listen_addresses='*'" >> /usr/app/data/pgdata/postgresql.conf && \
|
13 |
+
sed -i 's/# requirepass foobared/requirepass redis_password/' /etc/redis.conf && \
|
14 |
+
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /etc/redis.conf
|
15 |
|
16 |
# 复制启动脚本并设置权限
|
17 |
COPY docker/startup.sh /usr/src/appEntry/startup.sh
|
18 |
RUN chmod +x /usr/src/appEntry/startup.sh
|
19 |
|
20 |
+
# 切换到 nocodb 用户
|
21 |
+
USER nocodb
|
22 |
|
23 |
WORKDIR /usr/src/app
|
24 |
|
|
|
32 |
NODE_ENV=production \
|
33 |
PORT=8080 \
|
34 |
NC_ALLOW_LOCAL_HOOKS=true \
|
35 |
+
NC_DB="pg://localhost:5432?u=nocodb&p=nocodb_password&d=nocodb" \
|
36 |
+
NC_REDIS_URL="redis://:[email protected]:6380/4"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
|
38 |
+
EXPOSE 8080 5432 6380
|
39 |
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
|
40 |
|
41 |
# 运行启动脚本
|
42 |
+
CMD ["/usr/src/appEntry/startup.sh"]
|
Dockerfile-1
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
FROM nocodb/nocodb:latest
|
2 |
+
|
3 |
+
ARG NC_S3_BUCKET_NAME
|
4 |
+
ARG NC_S3_REGION
|
5 |
+
ARG NC_S3_ENDPOINT
|
6 |
+
ARG NC_S3_ACCESS_KEY
|
7 |
+
ARG NC_S3_ACCESS_SECRET
|
8 |
+
|
9 |
+
# 创建数据目录并设置适当的权限
|
10 |
+
RUN mkdir -p /usr/app/data && chown -R 1000:1000 /usr/app /usr/src/app /usr
|
11 |
+
|
12 |
+
# 复制启动脚本并设置权限
|
13 |
+
COPY docker/startup.sh /usr/src/appEntry/startup.sh
|
14 |
+
RUN chmod +x /usr/src/appEntry/startup.sh
|
15 |
+
|
16 |
+
# 切换到非 root 用户
|
17 |
+
USER 1000
|
18 |
+
|
19 |
+
WORKDIR /usr/src/app
|
20 |
+
|
21 |
+
ENV LITESTREAM_S3_SKIP_VERIFY=false \
|
22 |
+
LITESTREAM_RETENTION=1440h \
|
23 |
+
LITESTREAM_RETENTION_CHECK_INTERVAL=72h \
|
24 |
+
LITESTREAM_SNAPSHOT_INTERVAL=24h \
|
25 |
+
LITESTREAM_SYNC_INTERVAL=60s \
|
26 |
+
NC_DOCKER=0.6 \
|
27 |
+
NC_TOOL_DIR=/usr/app/data/ \
|
28 |
+
NODE_ENV=production \
|
29 |
+
PORT=8080 \
|
30 |
+
NC_ALLOW_LOCAL_HOOKS=true \
|
31 |
+
S3_BUCKET_NAME=${NC_S3_BUCKET_NAME} \
|
32 |
+
S3_REGION=${NC_S3_REGION} \
|
33 |
+
S3_ENDPOINT=${NC_S3_ENDPOINT} \
|
34 |
+
S3_ACCESS_KEY=${NC_S3_ACCESS_KEY} \
|
35 |
+
S3_ACCESS_SECRET=${NC_S3_ACCESS_SECRET} \
|
36 |
+
LITESTREAM_S3_BUCKET=${NC_S3_BUCKET_NAME} \
|
37 |
+
LITESTREAM_S3_REGION=${NC_S3_REGION} \
|
38 |
+
LITESTREAM_S3_ENDPOINT=${NC_S3_ENDPOINT} \
|
39 |
+
LITESTREAM_S3_ACCESS_KEY_ID=${NC_S3_ACCESS_KEY} \
|
40 |
+
LITESTREAM_S3_SECRET_ACCESS_KEY=${NC_S3_ACCESS_SECRET}
|
41 |
+
|
42 |
+
EXPOSE 8080
|
43 |
+
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
|
44 |
+
|
45 |
+
# 运行启动脚本
|
46 |
+
CMD ["/usr/src/appEntry/startup.sh"]
|
docker/startup.sh
CHANGED
@@ -1,18 +1,57 @@
|
|
1 |
#!/bin/sh
|
|
|
2 |
|
3 |
-
|
|
|
|
|
|
|
|
|
4 |
whoami
|
5 |
cat /etc/passwd
|
6 |
|
7 |
-
|
8 |
-
node --version
|
9 |
-
which node
|
10 |
-
|
11 |
-
echo "\n系统信息:"
|
12 |
cat /etc/os-release
|
13 |
|
14 |
-
|
15 |
env | grep -E "NC_|LITESTREAM_|S3_"
|
16 |
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
exec /usr/src/appEntry/start.sh
|
|
|
1 |
#!/bin/sh
|
2 |
+
set -e
|
3 |
|
4 |
+
log() {
|
5 |
+
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
|
6 |
+
}
|
7 |
+
|
8 |
+
log "当前用户:"
|
9 |
whoami
|
10 |
cat /etc/passwd
|
11 |
|
12 |
+
log "系统信息:"
|
|
|
|
|
|
|
|
|
13 |
cat /etc/os-release
|
14 |
|
15 |
+
log "环境变量:"
|
16 |
env | grep -E "NC_|LITESTREAM_|S3_"
|
17 |
|
18 |
+
log "启动 PostgreSQL..."
|
19 |
+
pg_ctl -D /usr/app/data/pgdata -l /usr/app/data/pgdata/logfile start
|
20 |
+
|
21 |
+
# 等待 PostgreSQL 启动
|
22 |
+
for i in $(seq 1 30); do
|
23 |
+
if pg_isready -U nocodb; then
|
24 |
+
break
|
25 |
+
fi
|
26 |
+
log "等待 PostgreSQL 启动..."
|
27 |
+
sleep 2
|
28 |
+
done
|
29 |
+
|
30 |
+
if ! pg_isready -U nocodb; then
|
31 |
+
log "PostgreSQL 启动失败"
|
32 |
+
exit 2
|
33 |
+
fi
|
34 |
+
|
35 |
+
log "检查并创建 PostgreSQL 数据库和用户..."
|
36 |
+
psql -U nocodb -tc "SELECT 1 FROM pg_database WHERE datname = 'nocodb';" | grep -q 1 || psql -U nocodb -c "CREATE DATABASE nocodb;"
|
37 |
+
psql -U nocodb -tc "SELECT 1 FROM pg_roles WHERE rolname = 'nocodb';" | grep -q 1 || psql -U nocodb -c "ALTER USER nocodb WITH PASSWORD 'nocodb_password';"
|
38 |
+
|
39 |
+
log "启动 Redis..."
|
40 |
+
redis-server /etc/redis.conf --port 6380 --daemonize yes
|
41 |
+
|
42 |
+
# 等待 Redis 启动
|
43 |
+
for i in $(seq 1 30); do
|
44 |
+
if redis-cli -p 6380 ping; then
|
45 |
+
break
|
46 |
+
fi
|
47 |
+
log "等待 Redis 启动..."
|
48 |
+
sleep 1
|
49 |
+
done
|
50 |
+
|
51 |
+
if ! redis-cli -p 6380 ping; then
|
52 |
+
log "Redis 启动失败"
|
53 |
+
exit 1
|
54 |
+
fi
|
55 |
+
|
56 |
+
log "启动主程序..."
|
57 |
exec /usr/src/appEntry/start.sh
|