Ubuntu 22.04 安装 Bigcapital v0.25.44 指南
在 Ubuntu 22.04 上以源码方式安装 Bigcapital v0.25.44 的完整实测指南,覆盖在线源码包与离线包两种方案、systemd 服务托管、Nginx 反向代理、数据库初始化、升级降级与排障实录。
Ubuntu 22.04 安装 Bigcapital v0.25.44 指南
Bigcapital 是一套开源(AGPL-3.0)的财务记账与库存管理 Web 系统,采用 React 前端 + NestJS 后端的多包(monorepo)源码结构,运行时依赖 MariaDB(系统库 + 租户库)与 Redis(任务队列)。本文以 Ubuntu 22.04 为目标环境,给出两条完整的源码安装路径:方案 A(在线源码包安装) 与 方案 B(离线包安装),并在同一环境中完成了 systemd 托管、Nginx 前端托管与 API 反向代理、首个组织初始化、升级降级演练与排障沉淀。
软件定位与选型分析见 《Bigcapital v0.25.44 介绍与选型指南》;如更倾向使用官方打包的整套部署形态,参见 《Bigcapital v0.25.44 Docker Compose 部署指南》;环境变量逐项含义见 《Bigcapital v0.25.44 配置参数详解》。
本文所有命令与回显均在下述实测环境中逐条执行并采集,面向真实服务器视角书写;同一命令在不同机器上的耗时、进度条等非确定性输出会有差异,关键状态行(版本号、批次号、HTTP 状态码等)以实测为准。
一、环境信息
服务器配置(实测环境):
| 项目 | 说明 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS(x86_64) |
| CPU | 12 核 |
| 内存 | 31 GiB |
| 磁盘 | 可用空间 334 GB |
| 网络时间 | UTC |
软件版本清单(均为实测安装后的实际版本):
| 软件 | 版本 | 安装来源 |
|---|---|---|
| Node.js | v18.20.8 | NodeSource apt 仓库(node_18.x) |
| pnpm | 9.0.5 | npm 全局安装(npm 10.8.2) |
| MariaDB | 10.6.23 | Ubuntu 22.04 官方仓库 |
| Redis | 6.0.16 | Ubuntu 22.04 官方仓库 |
| Nginx | 1.18.0 | Ubuntu 22.04 官方仓库 |
| Git | 2.34.1 | Ubuntu 22.04 官方仓库 |
版本核实命令与回显:
cat /etc/os-release | head -2
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
node -v; pnpm -v; nginx -v; mariadb --version; redis-server -v
v18.20.8
9.0.5
nginx version: nginx/1.18.0 (Ubuntu)
mariadb Ver 15.1 Distrib 10.6.23-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Redis server v=6.0.16 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=d6ed09173b889769
二、前置条件
- 一台 Ubuntu 22.04 服务器,具备 root 或 sudo 权限;本文命令均以 root 执行(构建 Bigcapital 时切换到专用普通用户,见 4.6)。
- 方案 A 要求服务器能访问 GitHub 发布物站点(codeload.github.com)与 npm 依赖源;方案 B 只要求目标服务器与维护机之间可传输文件。
- 端口规划:80(Nginx 对外)、3000(Bigcapital Server,仅监听本机使用)。数据库与 Redis 均为本机访问。
- 资源建议:2 核 4 GiB 起步;前端构建阶段内存占用较高,4 GiB 以下机器建议增加交换分区。实测环境为 12 核 31 GiB,全程构建顺利。
- 演示约定(后文所有示例沿用):
- 数据库专用账号:
bigcapital/q1w2e3r4; - 系统管理员账号:
admin@bigcapital.local/q1w2e3r4t6(Bigcapital 注册口令强制要求不少于 10 位,8 位的q1w2e3r4会被拒绝,实测报错见 9.6); - 服务器对内地址:
127.0.0.1,示例访问地址http://localhost/。
- 数据库专用账号:
三、版本选型说明
3.1 Bigcapital 版本选择
本文安装 v0.25.44,为官方 GitHub 仓库当前最新稳定发布版(发布于 2026-10-15,版本信息查询日期 2026-10-22),发布物随仓库源码一同提供。安装统一采用官方发布源码包(refs/tags/v0.25.44),不使用开发分支——实测发现开发分支默认 HEAD(提交 d2a0bf1,2026-09-23)对应的标签仍是 v0.25.42,落后最新发布版两个版本,直接克隆默认分支得到的并非最新稳定版。
3.2 运行时版本对照
源码包根目录 package.json 对 Node.js 的约束(实测摘录):
grep -A3 '"engines"' /opt/bigcapital/package.json
"engines": {
"node": "16.x || 17.x || 18.x"
},
据此确定的运行时选型:
| 组件 | 实测选型 | 说明 |
|---|---|---|
| Node.js | 18.20.8 | engines 允许 16.x/17.x/18.x,取 18.x LTS 最新版;NodeSource 仓库安装 |
| pnpm | 9.0.5 | 仓库为 pnpm workspace 工程,锁文件(pnpm-lock.yaml)按 pnpm 9 生成 |
| MariaDB | 10.6.23 | Ubuntu 22.04 官方仓库默认版本,实测可完整跑通全部迁移(31 个系统迁移 + 70 张租户表) |
| Redis | 6.0.16 | Ubuntu 22.04 官方仓库默认版本,可运行;服务日志提示推荐 6.2.0 及以上(见 9.5) |
| Nginx | 1.18.0 | 用于托管前端静态文件并反向代理 API |
四、方案A:在线源码包安装
4.1 方案说明
从官方发布地址下载 v0.25.44 源码包(含 pnpm-lock.yaml 锁定依赖版本),在服务器上联网安装依赖、构建前后端、初始化数据库,并用 systemd 托管常驻。该方案版本与官方发布物严格一致,适合可联网的服务器环境。
流程总览:系统依赖 → Node.js 18 与 pnpm → MariaDB 与 Redis → 数据库与账号 → 下载源码包 → 编写 .env → 安装依赖 → 构建后端 → 数据库迁移 → 构建前端 → 直接启动验证 → systemd 托管。
4.2 安装系统依赖
apt-get update && apt-get install -y git curl build-essential nginx mariadb-server redis-server
实测回显(在已完成安装的环境复跑,全新服务器会显示逐包下载与安装过程):
git is already the newest version (1:2.34.1-1ubuntu1.18).
nginx is already the newest version (1:18.0-6ubuntu14.21).
mariadb-server is already the newest version (1:10.6.23-0ubuntu0.22.04.1).
redis-server is already the newest version (5:6.0.16-1ubuntu1.2).
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
build-essential 提供编译工具链(部分依赖包安装时需要),git/curl 为下载与辅助工具。
4.3 安装 Node.js 18 与 pnpm
添加 NodeSource 的 Node 18 仓库并安装:
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
3 packages can be upgraded. Run 'apt list --upgradable' to see them.
2026-10-22 18:04:01 - Repository configured successfully.
2026-10-22 18:04:01 - To install Node.js, run: apt install nodejs -y
2026-10-22 18:04:01 - You can use N|solid Runtime as a node.js alternative
2026-10-22 18:04:01 - To install N|solid Runtime, run: apt install nsolid -y
apt-get install -y nodejs
nodejs is already the newest version (18.20.8-1nodesource1).
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
全局安装 pnpm 9(Bigcapital 仓库为 pnpm workspace 工程,不要用 yarn/npm 安装依赖):
npm install -g pnpm@9
1 package is looking for funding
run `npm fund` for details
验证:
node -v; pnpm -v
v18.20.8
9.0.5
4.4 启用 MariaDB 与 Redis
systemctl enable --now mariadb redis-server
Synchronizing state of redis-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable redis-server
Synchronizing state of mariadb.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable mariadb
验证两个服务均已运行:
systemctl is-active mariadb redis-server; redis-cli ping
active
active
PONG
4.5 初始化数据库与专用账号
Bigcapital 使用两类数据库:系统库(固定库名 bigcapital_system,存放用户、租户、组织登记等全局数据)与租户库(每个组织一个,库名 bigcapital_tenant_<组织ID>,在组织初始化时由程序自动创建,见 4.12)。因此专用账号必须对 bigcapital% 前缀的所有库具备完整权限:
mysql -u root <<'EOF'
CREATE DATABASE bigcapital_system CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'bigcapital'@'localhost' IDENTIFIED BY 'q1w2e3r4';
GRANT ALL PRIVILEGES ON `bigcapital%`.* TO 'bigcapital'@'localhost';
FLUSH PRIVILEGES;
EOF
确认授权结果:
mysql -u root -e "SHOW GRANTS FOR 'bigcapital'@'localhost';"
Grants for bigcapital@localhost
GRANT USAGE ON *.* TO `bigcapital`@`localhost` IDENTIFIED BY PASSWORD '*0971389F8E7F1AEB999104BDA7A0FA145087F348' WITH GRANT OPTION
GRANT ALL PRIVILEGES ON `bigcapital%`.* TO `bigcapital`@`localhost`
⚠️ 若跳过本步骤直接迁移,会得到
ER_BAD_DB_ERROR: Unknown database 'bigcapital_system'报错(源码路径下的迁移 CLI 不会自动建库,详见 9.3)。账号权限收窄到bigcapital%前缀已实测足够:组织初始化时程序用该账号自动创建租户库成功(见 4.12 验证)。
4.6 下载并解压源码包
创建专用运行账号并下载解压(构建与运行均使用该账号,避免 root 运行应用):
useradd -r -m -d /opt/bigcapital-user -s /bin/bash bigcapital
cd /opt
curl -fsSL -o bigcapital-v0.25.44.tar.gz https://codeload.github.com/bigcapitalhq/bigcapital/tar.gz/refs/tags/v0.25.44
确认下载产物:
ls -lh /opt/bigcapital-v0.25.44.tar.gz
-rw-r--r-- 1 root root 8.7M Oct 22 18:06 bigcapital-v0.25.44.tar.gz
解压到 /opt/bigcapital:
cd /opt && tar xzf bigcapital-v0.25.44.tar.gz && mv bigcapital-0.25.44 bigcapital && rm bigcapital-v0.25.44.tar.gz
确认目录内容与体积:
ls /opt/bigcapital | head -8; du -sh /opt/bigcapital
AGENTS.md
CHANGELOG.md
CONTRIBUTING.md
DISCLAIMER
LICENSE
README.md
bin
commitlint.config.js
72M /opt/bigcapital
4.7 编写环境配置文件 .env
在源码根目录创建 .env(Server 启动时会读取,本文件为最小可运行配置;完整变量模板见源码包内 .env.example,逐项含义见 《Bigcapital v0.25.44 配置参数详解》):
cat > /opt/bigcapital/.env <<'EOF'
APP_JWT_SECRET=ptsviuCqijT6S/3v4lM+ueLFJZiVwANRwmcZ54nWmVkLpTNrZlUK9ZDKPCnksZPc
DB_HOST=127.0.0.1
DB_USER=bigcapital
DB_PASSWORD=q1w2e3r4
DB_CHARSET=utf8
SYSTEM_DB_NAME=bigcapital_system
TENANT_DB_NAME_PERFIX=bigcapital_tenant_
BASE_URL=http://localhost
SIGNUP_DISABLED=false
SIGNUP_EMAIL_CONFIRMATION=false
EOF
关键项说明:
| 变量 | 实测取值 | 说明 |
|---|---|---|
APP_JWT_SECRET | 64 位随机串 | 登录令牌签名密钥,生产环境必须更换为自己的随机值 |
DB_USER / DB_PASSWORD | bigcapital / q1w2e3r4 | 与 4.5 中创建的数据库账号一致 |
SYSTEM_DB_NAME | bigcapital_system | 系统库名 |
TENANT_DB_NAME_PERFIX | bigcapital_tenant_ | 租户库库名前缀(变量名中的 PERFIX 为项目原始拼写,照抄即可) |
BASE_URL | http://localhost | 对外访问地址,生产环境改为 http://<服务器IP或域名> |
SIGNUP_DISABLED | false | 是否关闭注册入口 |
将目录属主交给运行账号(后续构建与运行都用 bigcapital 用户):
chown -R bigcapital:bigcapital /opt/bigcapital
4.8 安装项目依赖
sudo -u bigcapital bash -c 'cd /opt/bigcapital && pnpm install'
实测回显(关键行):
Scope: all 7 workspace projects
Lockfile is up to date, resolution step is skipped
Progress: resolved 1, reused 0, downloaded 0, added 0
Packages: +2864
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 2864, reused 1686, downloaded 0, added 0
收尾行:
. prepare: fatal: not a git repository (or any of the parent directories): .git
. prepare: husky - git command not found, skipping install
. prepare: Done
Done in 5.6s
💡 两点说明:其一,回显中的
Done in 5.6s是依赖缓存已就绪环境下的复跑耗时,全新服务器首次安装(联网下载 2864 个包)实测约 2 分 30 秒;其二,prepare阶段的.git报错来自 husky 钩子安装——发布源码包本身不含 Git 仓库,husky 自动跳过属正常现象,不影响安装(见 9.6)。
4.9 构建后端
sudo -u bigcapital bash -c 'cd /opt/bigcapital && pnpm build:server'
实测回显(头部):
> bigcapital-monorepo@ build:server /opt/bigcapital
> lerna run build --scope "@bigcapital/server" --scope "@bigcapital/utils" --scope "@bigcapital/pdf-templates" --scope "@bigcapital/email-components"
lerna notice cli v8.1.3
lerna info versioning independent
lerna notice filter including ["@bigcapital/server","@bigcapital/utils","@bigcapital/pdf-templates","@bigcapital/email-components"]
实测回显(尾部):
Lerna (powered by Nx) Successfully ran target build for 4 projects
⚠️ 若构建报
ERR_DLOPEN_FAILED ... failed to map segment from shared object(涉及/tmp/nx-native-file-cache/...路径),是系统/tmp挂载了noexec所致,按 9.1 处理后重跑即可。
4.10 初始化数据库迁移
迁移 CLI 必须在 packages/server 目录下执行(迁移目录按当前工作目录解析,在其他目录执行会报 ENOENT,见 9.4):
sudo -u bigcapital bash -c 'cd /opt/bigcapital/packages/server && node dist/cli.js system:migrate:latest'
Batch 1 run: 31 migrations
sudo -u bigcapital bash -c 'cd /opt/bigcapital/packages/server && node dist/cli.js tenants:migrate:latest'
All tenants are migrated.
验证系统库表数量:
mysql -u bigcapital -pq1w2e3r4 -e "SELECT COUNT(*) AS system_tables FROM information_schema.tables WHERE table_schema='bigcapital_system';"
system_tables
17
4.11 构建前端
sudo -u bigcapital bash -c 'cd /opt/bigcapital && pnpm build:webapp'
实测回显(头部):
> bigcapital-monorepo@ build:webapp /opt/bigcapital
> lerna run build --scope "@bigcapital/webapp" --scope "@bigcapital/utils" --scope "@bigcapital/pdf-templates" --scope "@bigcapital/sdk-ts"
lerna notice cli v8.1.3
lerna info versioning independent
lerna notice filter including ["@bigcapital/webapp","@bigcapital/utils","@bigcapital/pdf-templates","@bigcapital/sdk-ts"]
实测回显(尾部):
Lerna (powered by Nx) Successfully ran target build for 4 projects
构建产物位于 /opt/bigcapital/packages/webapp/dist/(静态站点,由 Nginx 托管,见 7.2)。
4.12 直接启动验证
先以前台方式直接启动一次,确认 Server 能正常工作再交给 systemd:
sudo -u bigcapital bash -c 'cd /opt/bigcapital && nohup node packages/server/dist/main.js > /tmp/bigcapital-server.log 2>&1 &'
等待约 8 秒后验证 API:
curl -s http://127.0.0.1:3000/api/users
{"message":"Unauthorized","statusCode":401}
401 为预期结果——接口已被认证保护,匿名访问被拒绝。再确认 Swagger 文档页:
curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:3000/swagger
200
验证通过后停掉该进程,改用 systemd 托管:
pkill -f 'packages/server/dist/main.js'
4.13 systemd 服务托管
创建服务单元 /etc/systemd/system/bigcapital-server.service:
cat > /etc/systemd/system/bigcapital-server.service <<'EOF'
[Unit]
Description=Bigcapital API Server (NestJS)
After=network.target mariadb.service redis-server.service
Wants=mariadb.service redis-server.service
[Service]
Type=simple
User=bigcapital
WorkingDirectory=/opt/bigcapital
ExecStart=/usr/bin/node /opt/bigcapital/packages/server/dist/main.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
启动并设置开机自启:
systemctl daemon-reload && systemctl enable --now bigcapital-server
查看运行状态:
systemctl status bigcapital-server --no-pager | head -10
● bigcapital-server.service - Bigcapital API Server (NestJS)
Loaded: loaded (/etc/systemd/system/bigcapital-server.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2026-10-22 17:51:24 UTC; 6s ago
Main PID: 10854 (node)
Tasks: 7 (limit: 94371)
Memory: 190.1M
CPU: 2.232s
日志中确认启动成功:
journalctl -u bigcapital-server --no-pager | grep Started | tail -1
Oct 22 17:51:24 bigcapital-src systemd[1]: Started Bigcapital API Server (NestJS).
五、方案B:离线包安装
5.1 方案说明
目标服务器完全无外网时的安装方式:在一台能联网的维护机上(可以是按方案 A 已装好的服务器),把含依赖(node_modules)的完整源码目录打成离线包,传输到目标服务器解包启动。离线包同时包含已构建好的前后端产物,目标服务器无需联网、无需 NodeSource 仓库、无需 pnpm,只需 Node.js 运行时与 MariaDB/Redis。
5.2 在联网机制作离线包
前提:联网机已按方案 A 完成 4.2~4.11(依赖已安装、前后端已构建)。排除 Git 目录、端到端测试目录与含密码的 .env 后打包:
cd /opt
tar --exclude='bigcapital/.git' --exclude='bigcapital/e2e' --exclude='bigcapital/.env' -czf /tmp/bigcapital-v0.25.44-dist.tar.gz bigcapital
ls -lh /tmp/bigcapital-v0.25.44-dist.tar.gz
-rw-r--r-- 1 bigcapital bigcapital 281M Oct 22 17:55 /tmp/bigcapital-v0.25.44-dist.tar.gz
打包内容(含依赖与构建产物)的总体积:
du -sh /opt/bigcapital
1.5G /opt/bigcapital
💡 离线包必须包含 node_modules(目标机无法联网安装依赖),因此体积较大;
.env含数据库口令,通过单独拷贝配置的方式交付,不进包。
5.3 传输与解包
把离线包与 .env 拷贝到目标服务器的 /tmp(按实际维护机地址执行;传输命令本身无回显):
scp /tmp/bigcapital-v0.25.44-dist.tar.gz root@<目标服务器IP>:/tmp/
scp /opt/bigcapital/.env root@<目标服务器IP>:/tmp/bigcapital.env
目标服务器上准备运行账号并解包:
useradd -r -m -d /opt/bigcapital-user -s /bin/bash bigcapital
mkdir /opt/offline-extract && cd /opt/offline-extract && tar xzf /tmp/bigcapital-v0.25.44-dist.tar.gz && mv bigcapital /opt/bigcapital-offline && cd /opt && rmdir offline-extract
套用配置并修正属主:
cp /tmp/bigcapital.env /opt/bigcapital-offline/.env
chown -R bigcapital:bigcapital /opt/bigcapital-offline
确认解包结果(注意与源码包不同,离线解包目录已含依赖与构建产物):
du -sh /opt/bigcapital-offline && ls /opt/bigcapital-offline/packages/server/dist/main.js /opt/bigcapital-offline/packages/webapp/dist/index.html
1.5G /opt/bigcapital-offline
/opt/bigcapital-offline/packages/server/dist/main.js
/opt/bigcapital-offline/packages/webapp/dist/index.html
5.4 配置数据库并启动验证
目标服务器需先完成与 4.2~4.5 相同的系统依赖、MariaDB/Redis 与数据库账号准备(这些均可离线进行:Ubuntu 安装光盘/本地源提供全部系统包,数据库初始化不依赖外网),.env 中的 BASE_URL 改为目标服务器的实际访问地址。
先以临时端口直接启动验证(不与已有实例冲突,此处用 3100 端口实测):
sudo -u bigcapital bash -c 'cd /opt/bigcapital-offline && PORT=3100 nohup node packages/server/dist/main.js > /tmp/bigcapital-offline.log 2>&1 &'
等待约 10 秒后验证:
curl -s http://127.0.0.1:3100/api/users
{"message":"Unauthorized","statusCode":401}
401 即离线部署成功。停止临时进程,按 4.13 创建 systemd 服务单元(把 WorkingDirectory 与 ExecStart 中的 /opt/bigcapital 改为 /opt/bigcapital-offline),即可交由 systemd 常驻。
六、方案对比与选择建议
| 维度 | 方案A:在线源码包 | 方案B:离线包 |
|---|---|---|
| 网络要求 | 服务器需访问 codeload.github.com 与 npm 依赖源 | 仅传输阶段需要维护机与目标机连通 |
| 依赖安装 | pnpm 联网安装 2864 个包(首次约 2.5 分钟) | 无需安装,node_modules 随包携带 |
| 构建产物 | 目标机构建(需要构建工具链与内存) | 维护机构建,目标机直接使用 |
| 离线包体积 | 下载源码包 8.7M | 离线包 281M(解包后 1.5G) |
| 版本一致性 | 与官方发布物严格一致 | 与制作包时的源码一致 |
| 适用场景 | 可联网服务器、批量新装 | 无外网内网环境、机房隔离部署 |
选择建议:服务器能联网优先方案 A——流程标准、便于后续按第八章升级;内网隔离环境用方案 B,并在维护机上保留离线包与对应 .env 模板,作为后续升级的基础。两方案产出的运行形态完全一致(同样的 systemd 单元与 Nginx 配置),可随时从方案 A 切到方案 B 的分发模式做批量装机。
七、服务管理与配置说明
7.1 systemd 日常管理
systemctl restart bigcapital-server # 重启
systemctl stop bigcapital-server # 停止
systemctl status bigcapital-server # 状态
journalctl -u bigcapital-server -f # 跟踪日志
服务异常退出时由 systemd 按 Restart=on-failure 自动拉起(间隔 5 秒)。
7.2 Nginx 前端托管与 API 反向代理
创建站点配置 /etc/nginx/sites-available/bigcapital.conf:
cat > /etc/nginx/sites-available/bigcapital.conf <<'EOF'
server {
listen 80 default_server;
server_name _;
root /opt/bigcapital/packages/webapp/dist;
index index.html;
# API 反向代理:转发到本机 3000 端口的 Bigcapital Server
location /api/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 25m;
}
# 前端单页应用:所有未命中路径回退到 index.html
location / {
try_files $uri $uri/ /index.html;
}
}
EOF
ln -sf /etc/nginx/sites-available/bigcapital.conf /etc/nginx/sites-enabled/bigcapital.conf
检查语法并重载:
nginx -t && systemctl reload nginx
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
验证前端页面与 API 代理两条链路:
curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1/
200
curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1/api/users
401
200 说明前端站点已托管,401 说明 /api/ 前缀的请求已正确代理到 Server 并被认证保护。此时浏览器访问 http://<服务器IP>/ 即可打开 Bigcapital 登录/注册页面。
7.3 .env 核心配置项
除 4.7 的最小配置外,常用的可选项:
| 变量 | 默认行为 | 说明 |
|---|---|---|
PORT | 3000 | Server 监听端口,启动时可用环境变量覆盖(方案 B 的 3100 端口验证即通过 PORT=3100 实现) |
SIGNUP_ALLOWED_DOMAINS / SIGNUP_ALLOWED_EMAILS | 空(不限制) | 注册邮箱白名单,多账号场景建议配置 |
GOTENBERG_URL | 空 | PDF 导出服务地址,不配置时相关导出功能不可用,其余功能不受影响 |
MAIL_* 系列 | 空 | 出站邮件(邀请、通知)配置,不配置不影响核心记账功能 |
全部环境变量的逐项解释与取值约束见 《Bigcapital v0.25.44 配置参数详解》。
八、升级、降级与多版本管理
8.1 升级流程(实测:v0.25.42 → v0.25.44)
升级本质是「换源码 → 重装依赖 → 重新构建 → 迁移数据库」,全程数据保留在 MariaDB 中,操作前先停服并备份当前目录:
systemctl stop bigcapital-server
cd /opt && mv bigcapital bigcapital-v0.25.42-bak
部署新版源码(联网机可直接下载新版本发布源码包,或按方案 B 用离线包),套用原配置:
cd /opt && tar xzf bigcapital-v0.25.44.tar.gz && mv bigcapital-0.25.44 bigcapital
cp bigcapital-v0.25.42-bak/.env bigcapital/.env
chown -R bigcapital:bigcapital /opt/bigcapital
重装依赖并构建(本次实测 v0.25.42 → v0.25.44,依赖有少量更新,安装耗时 52.1 秒):
sudo -u bigcapital bash -c 'cd /opt/bigcapital && pnpm install && pnpm build:server && pnpm build:webapp'
Done in 52.1s
Lerna (powered by Nx) Successfully ran target build for 4 projects
Lerna (powered by Nx) Successfully ran target build for 4 projects
执行迁移(本次升级实测新增 1 个系统迁移):
sudo -u bigcapital bash -c 'cd /opt/bigcapital/packages/server && node dist/cli.js system:migrate:latest && node dist/cli.js tenants:migrate:latest'
Batch 2 run: 1 migrations
-------------------
All tenants are migrated.
重启服务并验证:
systemctl start bigcapital-server
curl -s -o /dev/null -w 'api:%{http_code} ' http://127.0.0.1/api/users && curl -s -o /dev/null -w 'web:%{http_code}\n' http://127.0.0.1/
api:401 web:200
8.2 降级
Bigcapital 的数据库迁移不支持自动回退,降级采用「目录整体回退」:停服后把备份目录换回原路径,再重启服务。数据库层面需自行把系统库与租户库恢复到升级前的备份(升级前的 mysqldump 备份是降级的前提,建议每次升级前先执行)。
systemctl stop bigcapital-server
cd /opt && mv bigcapital bigcapital-v0.25.44-broken && mv bigcapital-v0.25.42-bak bigcapital
systemctl start bigcapital-server
8.3 多版本共存
如需并行验证多个版本,为每个版本准备独立目录、独立 .env(不同 PORT 与不同 SYSTEM_DB_NAME 前缀)与独立 systemd 单元即可;同一套 MariaDB 上多版本共存时,迁移记录按库名隔离,互不影响。生产环境建议单版本运行,多版本仅用于验证。
九、常见问题排障实录
9.1 构建报 ERR_DLOPEN_FAILED:failed to map segment from shared object
现象:pnpm build:server 失败,报错关键行:
Error: /tmp/nx-native-file-cache/2922472c08696a6abca9e97b97971d04f6f076227182e3ba025d610baa410592/19.0.7-nx.linux-x64-gnu.node: failed to map segment from shared object
code: 'ERR_DLOPEN_FAILED'
ELIFECYCLE Command failed with exit code 1.
定位:构建器(Nx)会把原生二进制辅助文件解压到 /tmp/nx-native-file-cache/ 再动态加载,而该服务器 /tmp 挂载了 noexec(安全加固的常见配置),导致 .node 文件无法映射执行:
mount | grep ' /tmp '
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noexec,relatime,inode64)
解决:对 /tmp 重新挂载放开执行权限,清掉缓存后重跑构建:
mount -o remount,exec /tmp
rm -rf /tmp/nx-native-file-cache
复测构建通过(Successfully ran target build for 4 projects)。若 /tmp 加固策略不允许放开 noexec,可改为在 fstab 中为构建机单独挂载可执行的 tmpfs,或把构建临时目录指到其他可执行路径。
9.2 构建缓存权限冲突:nx postinstall EACCES
现象:先后用 root 与普通用户执行过构建的机器上,pnpm install 阶段 nx 的 postinstall 失败:
.../.pnpm/nx@19.0.7/node_modules/nx postinstall: code: 'EACCES',
.../.pnpm/nx@19.0.7/node_modules/nx postinstall: path: '/tmp/nx-native-file-cache/329f7b2ebd261c758970c346f1c8875ad8e09cb9d0c868adcfc591265a0cffa3'
定位与解决:/tmp/nx-native-file-cache 已被 root 用户创建,普通用户(bigcapital)无写入权限。删除缓存目录后重跑即可:
rm -rf /tmp/nx-native-file-cache
实测删除后 pnpm install 顺利完成。原则:同一台机器上构建始终使用同一个用户(本文统一为 bigcapital)。
9.3 迁移报 ER_BAD_DB_ERROR:Unknown database 'bigcapital_system'
现象:执行 node dist/cli.js system:migrate:latest 时报:
Error: ER_BAD_DB_ERROR: Unknown database 'bigcapital_system'
定位与解决:源码路径下的迁移 CLI 不会自动建库,必须先按 4.5 手工创建系统库。补齐后重跑迁移正常。
9.4 迁移报 ENOENT:scandir src/database/system/migrations
现象:在源码根目录直接执行迁移 CLI 时报:
Error: ENOENT: no such file or directory, scandir '/opt/bigcapital/src/database/system/migrations'
定位:迁移目录按「当前工作目录 + 相对路径 ./src/database/system/migrations」解析,在根目录执行时被解析成 /opt/bigcapital/src/...(不存在)。
解决:迁移类 CLI 一律在 packages/server 目录下执行:
cd /opt/bigcapital/packages/server && node dist/cli.js system:migrate:latest
实测切换目录后迁移正常(Batch 1 run: 31 migrations)。
9.5 Redis 版本告警:highly recommended to use a minimum Redis version of 6.2.0
现象:Server 日志中反复出现:
It is highly recommended to use a minimum Redis version of 6.2.0
定位:Ubuntu 22.04 官方仓库的 Redis 为 6.0.16,低于项目建议的 6.2.0。实测 6.0.16 下任务队列(组织初始化、租户库创建)工作正常,该提示为兼容性建议而非硬性阻断。
建议:生产环境建议接入 6.2+ 的 Redis(如从 Redis 官方 apt 仓库安装),或使用发行版可提供的更新版本;短期内保持 6.0.16 亦可运行,需在监控中关注队列相关日志。
9.6 注册口令不足 10 位被拒绝
现象:用 8 位口令 q1w2e3r4 注册时报:
{"message":"password must be longer than or equal to 10 characters","statusCode":400}
说明:注册接口对口令长度有强校验(≥10 位),本文演示账号统一使用 q1w2e3r4t6。另外,发布源码包安装时 pnpm install 尾部出现的 fatal: not a git repository 与 husky - git command not found, skipping install 属正常现象(husky 是 Git 钩子工具,源码包无 .git 目录时自动跳过),不影响安装与运行。
十、卸载与清理
按依赖顺序完整卸载:
# 1. 停止并移除应用服务
systemctl stop bigcapital-server
systemctl disable bigcapital-server
rm -f /etc/systemd/system/bigcapital-server.service
systemctl daemon-reload
# 2. 移除 Nginx 站点配置
rm -f /etc/nginx/sites-enabled/bigcapital.conf /etc/nginx/sites-available/bigcapital.conf
systemctl reload nginx
# 3. 删除数据库与账号(会连带删除全部财务数据,务必先确认备份)
mysql -u root -e 'DROP DATABASE IF EXISTS bigcapital_system;'
mysql -u root -e "SHOW DATABASES LIKE 'bigcapital_tenant%';" # 先核对要删除的租户库
mysql -u root -e "DROP DATABASE IF EXISTS bigcapital_tenant_xxxx;"
mysql -u root -e "DROP USER IF EXISTS 'bigcapital'@'localhost';"
# 4. 删除应用目录与离线包
rm -rf /opt/bigcapital /opt/bigcapital-offline /opt/bigcapital-v0.25.42-bak /tmp/bigcapital-v0.25.44-dist.tar.gz
# 5. (可选)卸载不再需要的依赖组件
apt-get purge -y mariadb-server redis-server nginx
如需保留数据仅下线应用,执行第 1、2、4 步即可。
十一、参考链接
- Bigcapital 官方仓库:https://github.com/bigcapitalhq/bigcapital
- v0.25.44 发布页:https://github.com/bigcapitalhq/bigcapital/releases/tag/v0.25.44
- 官方文档站:https://docs.bigcapital.app/
- 站内相关文档:
- 《Bigcapital v0.25.44 介绍与选型指南》——软件定位、架构与同类对比
- 《Bigcapital v0.25.44 Docker Compose 部署指南》——官方整套打包部署形态
- 《Bigcapital v0.25.44 配置参数详解》——环境变量逐项说明
- 《Bigcapital v0.25.44 常用 CLI 命令与工具详解》——迁移/种子/OpenAPI 等 CLI 用法