行完全指南:從 Docker 快速上手到 NC_DB 元數(shù)據(jù)庫(kù)配置解析)
NocoDB 安裝與運(yùn)行完全指南從 Docker 快速上手到 NC_DB 元數(shù)據(jù)庫(kù)配置解析【免費(fèi)下載鏈接】nocodb A Free Self-hostable Airtable Alternative項(xiàng)目地址: https://gitcode.com/GitHub_Trending/no/nocodb本文以 NocoDB 官方 README 的德語(yǔ)版markdown/readme/languages/german.md為主體內(nèi)容覆蓋其全部核心章節(jié)——Docker 快速啟動(dòng)、生產(chǎn)環(huán)境部署、環(huán)境變量、本地開發(fā)搭建與功能特性清單并結(jié)合當(dāng)前倉(cāng)庫(kù)的實(shí)際源碼配置解析器、Docker Compose 示例、pnpm 工作區(qū)腳本逐層擴(kuò)充使每條命令和參數(shù)都能追溯到真實(shí)的實(shí)現(xiàn)依據(jù)。讀完后你可以獨(dú)立完成用 Docker 一鍵拉起 NocoDB、通過(guò)NC_DB將其元數(shù)據(jù)庫(kù)指向 PostgreSQL/MySQL 等外部數(shù)據(jù)庫(kù)、理解 SQLite 回退機(jī)制的底層邏輯并在源碼級(jí)理解端口、JWT 密鑰與連接池等環(huán)境變量的實(shí)際作用。NocoDB 是什么README德語(yǔ)版對(duì)產(chǎn)品的定位一句話概括為將任何 MySQL、PostgreSQL、SQL Server、SQLite、MariaDB 轉(zhuǎn)換成一張 Smart-Tabelle智能表格。即 NocoDB 并不替代你的數(shù)據(jù)庫(kù)而是在既有數(shù)據(jù)庫(kù)之上生成一套類電子表格的協(xié)作界面讓你以 No-Code 方式完成建表、篩選、分享與集成。這一點(diǎn)在源碼中得到直接印證NocoDB 啟動(dòng)時(shí)需要一個(gè)元數(shù)據(jù)庫(kù)來(lái)存放表格視圖的元數(shù)據(jù)與外部數(shù)據(jù)庫(kù)的連接信息連接參數(shù)通過(guò)環(huán)境變量NC_DB指定。若未指定則回退到內(nèi)置 SQLite。這一元數(shù)據(jù)庫(kù) 外部數(shù)據(jù)表的雙層結(jié)構(gòu)是理解后文所有部署方式的鑰匙??焖匍_始Docker 方式最簡(jiǎn)啟動(dòng)內(nèi)置 SQLite原文檔給出的最簡(jiǎn)命令docker run -d \ --name noco \ -v $(pwd)/nocodb:/usr/app/data/ \ -p 8080:8080 \ nocodb/nocodb:latest兩個(gè)要點(diǎn)均出自原文檔且與源碼一致容器內(nèi)元數(shù)據(jù)庫(kù)默認(rèn)目錄為/usr/app/data/。原文檔指出若未提供外部數(shù)據(jù)庫(kù)輸入NocoDB 回退到 SQLite要讓 SQLite 持久化就掛載該目錄即-v那行。NocoDB 要求一個(gè)數(shù)據(jù)庫(kù)來(lái)存元數(shù)據(jù)SQLite 只是零配置回退生產(chǎn)環(huán)境建議顯式指定。從源碼看這一回退機(jī)制NcConfig 的默認(rèn)值即為client: sqlite3、filename: noco.db且文件名會(huì)與數(shù)據(jù)目錄拼接path.join(ncConfig.toolDir, filename)。toolDir的取值鏈在 helpers.ts 中定義為NC_APP_DATA_DIR → NC_TOOL_DIR → process.cwd()因此 Docker 鏡像將其指到/usr/app/data/后SQLite 文件才會(huì)落在掛載卷內(nèi)。指定外部數(shù)據(jù)庫(kù)PostgreSQL 示例docker run -d \ --name noco \ -v $(pwd)/nocodb:/usr/app/data/ \ -p 8080:8080 \ -e NC_DBpg://host.docker.internal:5432?urootppassworddd1 \ -e NC_AUTH_JWT_SECRET569a1821-0a93-45e8-87ab-eb857f20a010 \ nocodb/nocodb:latest這里有兩個(gè)關(guān)鍵環(huán)境變量NC_DB元數(shù)據(jù)庫(kù)連接串格式為driver://host:port?uuserppasswordddatabaseNC_AUTH_JWT_SECRETJWT 簽名的密鑰用于登錄態(tài)與 API Token 的簽發(fā)。關(guān)于NC_DB的解析細(xì)節(jié)源碼給出了比原文檔更完整的規(guī)則驅(qū)動(dòng)前綴映射。constants.ts 定義了mysql/mariadb → mysql2、postgres/postgresql → pg、sqlite → sqlite3、oracle → oracledb并給出默認(rèn)端口映射MySQL 3306、PostgreSQL 5432、SQL Server 1433、Oracle 1521——即連接串中省略端口時(shí)按此補(bǔ)全。短參數(shù)別名。URL 查詢參數(shù)支持縮寫別名constants.ts參數(shù)別名databased、dbpasswordpuserutitletoptionsopt、optsssl/keyFilePath/certFilePath/caFilePath無(wú)別名SSL 自動(dòng)啟用規(guī)則。從 jdbcToXcConfig 的結(jié)構(gòu)看當(dāng)驅(qū)動(dòng)為pg且未顯式配置ssl時(shí)若主機(jī)名不在白名單[localhost, 127.0.0.1, host.docker.internal, 172.17.0.1]avoidSSL內(nèi)會(huì)自動(dòng)開啟 SSL。這解釋了為何面向公網(wǎng)托管數(shù)據(jù)庫(kù)的連接串往往無(wú)需顯式寫ssltrue。連接池。元數(shù)據(jù)庫(kù)連接池上限由NC_DB_POOL_MAX控制默認(rèn) 10defaultConnectionOptions。連接建立時(shí)的建庫(kù)邏輯。NcConfig.create 在裝配完成后會(huì)調(diào)用metaDbCreateIfNotExist()SQLite 場(chǎng)景確保數(shù)據(jù)庫(kù)文件存在其他驅(qū)動(dòng)則在數(shù)據(jù)庫(kù)名缺失時(shí)報(bào)錯(cuò)Meta database configuration missing database name——也就是說(shuō)外部數(shù)據(jù)庫(kù)實(shí)例需已存在NocoDB 會(huì)自動(dòng)創(chuàng)建其中的元數(shù)據(jù)庫(kù)/文件。NPM 方式原文檔的 NPM 安裝方式npm install create-nocodb-app需要說(shuō)明當(dāng)前倉(cāng)庫(kù)的實(shí)際狀態(tài)該包名僅出現(xiàn)在這篇德語(yǔ) README 中當(dāng)前代碼庫(kù)的 README 與安裝入口均已收斂到 Docker 與倉(cāng)庫(kù)內(nèi)置的部署腳本見下文pnpm 工作區(qū)pnpm-workspace.yaml內(nèi)也未包含該腳手架包。因此create-nocodb-app屬于文檔歷史記載的便捷安裝途徑以倉(cāng)庫(kù)現(xiàn)狀為準(zhǔn)推薦的運(yùn)行方式仍是 Docker 鏡像或下述 Compose 方案。生產(chǎn)環(huán)境部署Docker Compose原文檔Produktivaufbau生產(chǎn)構(gòu)建一節(jié)指出NocoDB 需要一套數(shù)據(jù)庫(kù)來(lái)保存表格視圖元數(shù)據(jù)與外部數(shù)據(jù)庫(kù)連接信息并通過(guò)NC_DB指定。原文檔給出的 Compose 流程是克隆倉(cāng)庫(kù)后進(jìn)入docker-compose/pg子目錄執(zhí)行docker compose up -d。對(duì)照當(dāng)前倉(cāng)庫(kù)docker-compose/目錄已演進(jìn)為三種形態(tài)功能上是原文檔docker-compose/pg的超集替代1. 交互式向?qū)etup.sh / Auto-Upstallsetup.sh 是一個(gè)輕量包裝器直接執(zhí)行同級(jí)的 1_Auto_Upstall/noco.shbash docker-compose/setup.sh該向?qū)_本noco.sh會(huì)交互式收集參數(shù)并生成db.json、docker.env等文件——注意腳本頭部注釋明確寫道這些生成文件包含數(shù)據(jù)庫(kù)憑據(jù)需以 owner-only 權(quán)限創(chuàng)建umask 077對(duì)生產(chǎn)環(huán)境憑據(jù)管理是不錯(cuò)的實(shí)踐參考。2. 現(xiàn)成示例目錄docker-compose/examples當(dāng)前倉(cāng)庫(kù)提供五套開箱即用的 Compose 配置見 docker-compose/examples/README.md示例PostgreSQLRedis代理適用場(chǎng)景quickstart-demo內(nèi)置內(nèi)置無(wú)8080 端口本地評(píng)估m(xù)anaged-postgres外部托管RDS 等外部無(wú)生產(chǎn)環(huán)境自帶 LBexternal-postgres-and-redis外部自管外部無(wú)最小 Docker 占用traefik-custom-ssl外部托管外部Traefik 自定義證書自帶 SSL 證書的生產(chǎn)環(huán)境postgres-private-ca私有 CA外部Traefik Lets Encrypt私有云/內(nèi)網(wǎng) DB以最簡(jiǎn)的 quickstart-demo 為例其核心環(huán)境變量配置是docker-compose.ymlnocodb: image: nocodb/nocodb:latest environment: NC_DB: pg://db:5432?unocodbpquickstart_demo_pw_change_mednocodb NC_REDIS_URL: redis://redis:6379 NC_SITE_URL: http://localhost:8080 NC_DISABLE_MUX: true volumes: - nocodb_data:/usr/app/data這比原文檔的docker run示例多出了NC_REDIS_URLRedis 用于緩存/實(shí)時(shí)協(xié)作等與NC_SITE_URL站點(diǎn)對(duì)外地址。官方示例 README 明確提醒生產(chǎn)形態(tài)的示例中所有占位符如CHANGE_ME_db_password必須在docker compose up -d之前替換。環(huán)境變量速查從源碼讀出完整取值原文檔將環(huán)境變量列表外鏈到官方文檔站這里依據(jù)源碼 NcConfig.createByEnv 給出與當(dāng)前代碼一一對(duì)應(yīng)的核心項(xiàng)環(huán)境變量來(lái)源作用NC_DBprocess.env.NC_DB元數(shù)據(jù)庫(kù)連接串URL 形式NC_DB_JSON/NC_DB_JSON_FILE同上以 JSON或 JSON 文件形式提供元數(shù)據(jù)庫(kù)配置是 URL 形式的等價(jià)替代NC_AUTH_JWT_SECRET同上JWT 密鑰NC_PORTport ?? 8080監(jiān)聽端口默認(rèn)8080NC_TRYtryMode置真時(shí)元數(shù)據(jù)庫(kù)退化為sqlite3 :memory:單連接池用于測(cè)試/試用模式NC_WORKERworker為真時(shí)進(jìn)程作為 worker 運(yùn)行不暴露端口NC_DASHBOARD_URLdashboardPathDashboard 掛載路徑默認(rèn)/一個(gè)值得注意的健壯性細(xì)節(jié)NC_DB_JSON_FILE路徑不存在時(shí)直接拋錯(cuò)NC_DB_JSON_FILE not found: pathNcConfig.ts而不是靜默回退避免生產(chǎn)環(huán)境誤連到錯(cuò)誤的存儲(chǔ)。GUI 訪問(wèn)啟動(dòng)后瀏覽器訪問(wèn)http://localhost:8080/dashboard原文檔GUI一節(jié)即此一句。從源碼結(jié)構(gòu)看Dashboard 頁(yè)面由后端 Express 應(yīng)用提供見 run/docker.tsserver.set(view engine, ejs)并啟用 CORS、禁用 etag 等前端靜態(tài)資源由構(gòu)建產(chǎn)物內(nèi)嵌提供而NC_DASHBOARD_URL允許將該路徑改掛到子目錄如反向代理場(chǎng)景下/nocodb/dashboard。功能特性Merkmale完整繼承原文檔特性清單并結(jié)合倉(cāng)庫(kù)結(jié)構(gòu)補(bǔ)充佐證富表格界面Rich-Tabellenschnittstelle簡(jiǎn)單的搜索、排序、過(guò)濾與列隱藏視圖創(chuàng)建GitterGrid、GalerieGallery、Kanban、FormularForm——當(dāng)前倉(cāng)庫(kù)前端在 packages/nc-gui/composables 下可看到useGridViewData、useKanbanViewStore、useFormViewStore、useGalleryViewData等與各視圖一一對(duì)應(yīng)的組合式函數(shù)視圖分享公開與密碼保護(hù)兩種方式個(gè)人視圖與鎖定視圖單元格圖片上傳兼容 S3、Minio、GCP、Azure、DigitalOcean、Linode、OVH、Backblaze——存儲(chǔ)集成插件位于 packages/nocodb/src/plugins角色體系所有者Eigentümer、創(chuàng)建者Ersteller、編輯者Bearbeiter、查看者Betrachter、評(píng)論者Kommentator及自定義角色——角色徽章資源可參考 packages/nc-mail-assets/badges訪問(wèn)控制細(xì)粒度到數(shù)據(jù)庫(kù)、表、列級(jí)別。工作流自動(dòng)化 App-StoreChatMicrosoft Teams、Slack、Discord、Mattermost郵件SMTP、SES、MailChimpSMSTwilioWhatsApp以及任意第三方 API。程序化 API 訪問(wèn)REST APISwaggerOpenAPI 規(guī)范見 packages/nocodb/src/schema/swagger.json 與根目錄 APIs.jsonGraphQL APIJWT 認(rèn)證與社交登錄認(rèn)證策略實(shí)現(xiàn)位于 packages/nocodb/src/strategiesAPI Token 用于 Zapier、Integromat 等集成。本地開發(fā)搭建原文檔Entwicklungsaufbau開發(fā)構(gòu)建一節(jié)包含三步全部保留并補(bǔ)充了倉(cāng)庫(kù)現(xiàn)狀說(shuō)明1. 克隆項(xiàng)目git clone https://gitcode.com/GitHub_Trending/no/nocodb cd nocodb2. 本地啟動(dòng)后端cd packages/nocodb pnpm install pnpm run watch:run # 瀏覽器訪問(wèn) localhost:8080/dashboardwatch:run的真實(shí)定義packages/nocodb/package.json為cross-env NODE_ENVdevelopment NC_DISABLE_TELEtrue ENTRYPOINTsrc/run/docker rspack --config rspack.dev.config.js即通過(guò) rspack 的 dev 配置、以src/run/docker.ts為入口的熱重載啟動(dòng)NC_DISABLE_TELEtrue關(guān)閉遙測(cè)。同文件還提供watch:run:mysql、watch:run:pg兩個(gè)變體分別指向src/run/dockerRunMysql、src/run/dockerRunPG用于直接連 MySQL/PG 元數(shù)據(jù)庫(kù)調(diào)試。3. 本地啟動(dòng)前端cd packages/nc-gui pnpm install pnpm run dev # 瀏覽器訪問(wèn) localhost:3000/dashboarddev即nuxt devpackages/nc-gui/package.json。原文檔承諾代碼修改自動(dòng)重啟這正是 Nuxt dev 模式與 rspack watch 的熱更新行為。注意事項(xiàng)原文檔提示框 倉(cāng)庫(kù)事實(shí)原文檔提示packages/nocodb依賴nc-lib-guipackages/nc-lib-gui 下提供編譯好的 GUI 庫(kù)發(fā)布在 npm Registry。若只想改后端可直接啟動(dòng)后端后訪問(wèn)localhost:8080/dashboard無(wú)需跑前端包管理器約束根 package.json 中preinstall使用npx only-allow pnpm即只能用 pnpmnpm/yarn 會(huì)被拒絕Node 版本原文檔徽章標(biāo)注node 14.18.0但當(dāng)前倉(cāng)庫(kù) packages/nocodb/package.json 的engines已要求node 22以當(dāng)前倉(cāng)庫(kù)為準(zhǔn)。項(xiàng)目動(dòng)機(jī)Why Mission最后完整保留原文檔的Warum bauen wir das auf?我們?yōu)槭裁礃?gòu)建它與Unsere Aufgabe我們的使命兩節(jié)的核心論述中文轉(zhuǎn)述為什么絕大多數(shù)互聯(lián)網(wǎng)業(yè)務(wù)用電子表格或數(shù)據(jù)庫(kù)承載業(yè)務(wù)需求。電子表格每天被十億以上的人協(xié)作使用而數(shù)據(jù)庫(kù)是遠(yuǎn)比表格強(qiáng)大的計(jì)算工具人卻無(wú)法以同樣速度在其上工作。用 SaaS 產(chǎn)品解決這一問(wèn)題的嘗試往往意味著糟糕的訪問(wèn)控制、廠商鎖定、數(shù)據(jù)鎖定、突如其來(lái)的漲價(jià)以及對(duì)未來(lái)可能性的天花板。使命提供最強(qiáng)大的數(shù)據(jù)庫(kù) No-Code 界面讓世界上每個(gè)互聯(lián)網(wǎng)業(yè)務(wù)都能使用通過(guò)公平且可持續(xù)的模式廣泛開放這一能力把強(qiáng)大的計(jì)算工具民主化讓超過(guò)十億人能在互聯(lián)網(wǎng)上獲得大膽折騰與創(chuàng)造的能力。小結(jié)零配置試用docker run 掛載/usr/app/data/內(nèi)置 SQLite 回退生產(chǎn)部署NC_DB指向外部數(shù)據(jù)庫(kù)連接串支持u/p/d短別名與 SSL 自動(dòng)啟用配合 docker-compose/setup.sh 向?qū)Щ?docker-compose/examples 現(xiàn)成模板訪問(wèn)入口http://localhost:8080/dashboard可用NC_PORT、NC_DASHBOARD_URL調(diào)整本地開發(fā)pnpm 工作區(qū)下packages/nocodbpnpm run watch:run與packages/nc-guipnpm run dev兩條線并行。【免費(fèi)下載鏈接】nocodb A Free Self-hostable Airtable Alternative項(xiàng)目地址: https://gitcode.com/GitHub_Trending/no/nocodb創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考