FROM nocodb/nocodb:latest # 创建数据目录、设置权限并安装 PostgreSQL 和 Redis RUN adduser -D -u 1000 nocodb && \ mkdir -p /usr/app/data /run/postgresql /var/log/redis /var/log/postgresql /var/run/redis && \ chown -R nocodb:nocodb /usr/app /usr/src/app /usr /run/postgresql /var/log/redis /var/log/postgresql /var/log && \ apk add --no-cache postgresql postgresql-contrib redis && \ echo "nocodb:nocodb_password" | chpasswd && \ chown nocodb:nocodb /run/postgresql && \ su - nocodb -c "initdb -D /usr/app/data/pgdata" && \ echo "host all all 0.0.0.0/0 md5" >> /usr/app/data/pgdata/pg_hba.conf && \ echo "listen_addresses='*'" >> /usr/app/data/pgdata/postgresql.conf && \ sed -i 's/# requirepass foobared/requirepass redis_password/' /etc/redis.conf && \ sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /etc/redis.conf && \ sed -i 's/dir .\//dir \/usr\/app\/data\//' /etc/redis.conf && \ sed -i 's/logfile ""/logfile "\/var\/log\/redis\/redis.log"/' /etc/redis.conf && \ sed -i 's/# unixsocket/unixsocket/' /etc/redis.conf && \ sed -i 's/# unixsocketperm 700/unixsocketperm 777/' /etc/redis.conf && \ echo "pidfile /var/run/redis/redis.pid" >> /etc/redis.conf && \ chmod 644 /etc/redis.conf && \ chown -R nocodb:nocodb /etc/redis.conf /var/log/redis /var/run/redis /usr/app/data /var/lib/redis && \ apk add --update --no-cache dasel dumb-init nodejs # 复制启动脚本和 Node.js 示例程序并设置权限 COPY docker/startup.sh /usr/src/appEntry/startup.sh COPY docker/app.js /usr/src/app/docker/app.js RUN chmod +x /usr/src/appEntry/startup.sh # 切换到 nocodb 用户 USER nocodb WORKDIR /usr/src/app ENV LITESTREAM_S3_SKIP_VERIFY=false \ LITESTREAM_RETENTION=1440h \ LITESTREAM_RETENTION_CHECK_INTERVAL=72h \ LITESTREAM_SNAPSHOT_INTERVAL=24h \ LITESTREAM_SYNC_INTERVAL=60s \ NC_DOCKER=0.6 \ NC_TOOL_DIR=/usr/app/data/ \ NODE_ENV=production \ PORT=8080 \ NC_ALLOW_LOCAL_HOOKS=true \ NC_DB="pg://localhost:5432?u=nocodb&p=nocodb_password&d=nocodb" \ NC_REDIS_URL="redis://:redis_password@localhost:6379/4" EXPOSE 8080 5432 6379 7860 ENTRYPOINT ["/usr/bin/dumb-init", "--"] # 运行启动脚本 CMD ["/usr/src/appEntry/startup.sh"]