orztv commited on
Commit
b7f848a
·
1 Parent(s): 4ca4af3
Files changed (3) hide show
  1. Dockerfile +18 -22
  2. Dockerfile-1 +46 -0
  3. docker/startup.sh +47 -8
Dockerfile CHANGED
@@ -1,20 +1,24 @@
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
 
@@ -28,19 +32,11 @@ ENV LITESTREAM_S3_SKIP_VERIFY=false \
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"]
 
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
- echo "当前用户:"
 
 
 
 
4
  whoami
5
  cat /etc/passwd
6
 
7
- echo "\nNode.js 版本:"
8
- node --version
9
- which node
10
-
11
- echo "\n系统信息:"
12
  cat /etc/os-release
13
 
14
- echo "\n环境变量:"
15
  env | grep -E "NC_|LITESTREAM_|S3_"
16
 
17
- echo "\n启动主程序..."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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