内网建站软件怎么选?3步图解步骤搞定内网部署避坑
域名服务器搞不懂,是不是让你在内网建站时寸步难行?很多团队负责人觉得内网环境简单,结果一上手发现DNS解析、端口映射全是坑。别慌,今天拆解一个真实案例,用图解步骤带你理清思路。
项目背景与需求:为什么大厂也要建内网站
去年接手一个制造业客户的内网知识管理平台项目,团队规模200人,主要痛点是员工经常问重复问题,HR和IT部门天天被“怎么连打印机”“怎么申请权限”刷屏。客户原本想用企业微信知识库,但发现数据都在公有云,涉及核心工艺参数,安全合规过不了。
于是决定自建内网站点。需求很明确:
- 数据不出内网:所有文档、视频、问答必须存储在本地服务器。
- 快速检索:支持全文搜索,响应时间低于1秒。
- 低维护成本:IT人员只有1名,不懂复杂架构,最好有现成的内网建站软件或开源方案。
- 权限分级:普通员工只能看,管理员可编辑,高管可看财务数据。
很多团队负责人容易踩的坑是:直接买一套昂贵的商业CMS,结果发现内网环境下许可证校验失败,或者更新包下载需要外网,直接卡死。所以选型必须考虑离线部署能力。
技术选型:拒绝过度设计,选对工具比选贵工具重要
针对这个案例,我们对比了三种方案:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Confluence + Jira | 功能强大,生态完善 | 授权费用高,内网部署复杂,依赖Java环境 | 大型研发型企业 |
| WordPress 多站点 | 插件多,上手快 | 安全性较差,内网DNS配置麻烦,性能瓶颈 | 内容型站点,非核心业务 |
| Docusaurus + 自建后端 | 开源免费,静态生成快,文档友好 | 需要前端基础,权限系统需自行开发 | 技术团队,知识沉淀为主 |
最终选择了Docusaurus作为前端框架,配合Node.js + Express搭建轻量级后端API,数据库选用SQLite。
为什么选SQLite?
- 零配置:不需要部署MySQL或PostgreSQL,单文件数据库,备份方便,直接拷贝
.db文件即可。 - 性能足够:200人规模,并发量极低,SQLite完全hold住。
- 离线友好:所有依赖包都可以提前下载到本地,断网也能部署。
关键决策点:很多团队喜欢用Docker,但在内网环境中,Docker镜像拉取往往因为网络隔离而失败。我们建议直接使用Node.js全局安装,配合npm的离线缓存机制。
核心实现:图解步骤拆解,代码即真相
这里用图解步骤的方式,拆解从环境准备到代码落地的全过程。
步骤一:离线环境准备
在内网服务器(Linux CentOS 7)上,确保以下软件已安装:
- Node.js v16+
- Git(用于版本管理)
- Nginx(反向代理)
注意:由于内网无法直接访问外网npm仓库,我们需要在联网机器上下载依赖,打包成离线包。
在联网机器上执行:
# 初始化项目
mkdir intranet-wiki && cd intranet-wiki
npm init -y
npm install docusaurus react react-dom --save
npm install express sqlite3 --save# 打包所有依赖
npm pack
tar -czvf node_modules-offline.tar.gz node_modules
将node_modules-offline.tar.gz和代码包通过U盘或内网文件传输工具传到服务器。
步骤二:前端静态资源生成
Docusaurus本质是静态网站生成器。在内网服务器上,我们不需要每次访问都生成,而是定时构建。
docusaurus.config.js 核心配置:
module.exports = {title: '内部知识库',tagline: '高效沉淀团队知识',url: 'http://192.168.1.100', // 内网IPbaseUrl: '/',organizationName: 'mycompany',projectName: 'wiki',presets: [['docusaurus-preset-classic',{docs: {routeBasePath: '/',},theme: {customCss: require.resolve('./src/css/custom.css'),},},],],
};
执行构建命令:
npx docusaurus build
生成的静态文件在build目录。
步骤三:后端API与权限控制
虽然前端是静态的,但权限控制和动态数据(如用户反馈)需要后端支持。我们写一个简单的Express服务。
server.js 核心代码片段:
const express = require('express');
const sqlite3 = require('sqlite3').verbose();
const path = require('path');
const app = express();
const db = new sqlite3.Database('wiki.db');// 静态文件服务
app.use(express.static(path.join(__dirname, 'build')));// 简单的Token验证中间件
app.use((req, res, next) => {const token = req.headers['authorization'];if (!token || token !== 'INTERNAL_SECRET_2023') {return res.status(403).json({ error: 'Forbidden' });}next();
});// 搜索接口
app.get('/api/search', (req, res) => {const query = req.query.q;if (!query) return res.json([]);const stmt = db.prepare('SELECT title, url, content FROM documents WHERE content LIKE ?');stmt.all(`%${query}%`, (err, rows) => {if (err) return res.status(500).json({ error: err.message });res.json(rows);});
});app.listen(3000, '0.0.0.0', () => {console.log('Intranet Wiki Server running on port 3000');
});
安全提示:生产环境务必替换INTERNAL_SECRET_2023为随机长字符串,并考虑使用JWT替代简单的Token比较。
步骤四:Nginx反向代理配置
内网用户通过浏览器访问http://intranet.company.com,Nginx负责将请求转发到Node.js服务。
/etc/nginx/conf.d/wiki.conf:
server {listen 80;server_name intranet.company.com;location / {proxy_pass http://127.0.0.1:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}
重启Nginx:sudo systemctl restart nginx
上线与优化:细节决定成败
1. 内网DNS配置
很多团队忽略这一步,导致用户必须输入IP地址访问,体验极差。
- 在内网DNS服务器(如AD域控)中添加A记录:
intranet.company.com指向192.168.1.100。 - 或者在每台电脑的
hosts文件中手动添加(不推荐,维护成本高)。
2. 性能优化
- 图片压缩:Docusaurus默认不压缩图片。我们使用
squoosh工具批量压缩,体积减少60%。 - CDN缓存:虽然内网没有CDN,但可以在Nginx中配置静态资源缓存。
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public, immutable";
}
3. 备份策略
SQLite单文件数据库,备份极其简单。编写Cron脚本:
#!/bin/bash
BACKUP_DIR="/backup/wiki"
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
cp /var/www/intranet-wiki/wiki.db $BACKUP_DIR/wiki_$DATE.db
# 保留最近7天
find $BACKUP_DIR -name "wiki_*.db" -mtime +7 -delete
设置每日凌晨2点执行。
4. 安全加固
- 禁用目录浏览:Nginx中确保
autoindex off;。 - 日志监控:开启Nginx错误日志,定期查看是否有异常请求。
- 依赖更新:虽然内网无法实时更新,但每季度在联网机器上检查npm安全漏洞,生成补丁包,在内网应用。
经验总结:避坑指南与成本分析
成本核算
- 服务器:复用现有闲置服务器,0元。
- 域名:内网域名免费。
- 软件:Docusaurus、Node.js、SQLite均开源免费。
- 人力:前端开发1人天,后端开发1人天,运维配置0.5人天。
- 总计:约3人天,按外包价格约5000-8000元,远低于商业软件授权费(通常数万/年)。
常见坑点
- 时区问题:服务器时区设置为UTC,导致日志时间偏差8小时。解决:
timedatectl set-timezone Asia/Shanghai。 - 端口冲突:Node.js默认3000端口可能被占用。解决:修改代码中的
listen端口,并同步更新Nginx配置。 - HTTPS证书:内网通常不需要HTTPS,但如果需要,必须使用自签名证书,并在浏览器中信任该CA。否则每次访问都会报警告,用户体验差。
关于证书与年审的特别提醒
虽然内网建站主要走HTTP,但如果你的内网建站软件涉及与外部系统对接(如单点登录SSO),可能会用到SSL证书。
- 有效期:自签名证书可以设置很长(如10年),但商业CA签发的证书通常只有1年或2年。
- 年审:内网自签名证书没有“年审”概念,只需确保证书未过期。如果是商业证书,需设置日历提醒,提前30天续签,避免服务中断。
报考学历与工作年限要求的误区
这里要纠正一个常见误解:很多非技术人员以为建内网站需要像考软考一样有学历和工作年限要求。完全不需要。
- 建站本身:只要会基本的Linux命令和JavaScript语法即可,无门槛。
- 软考(计算机技术与软件专业技术资格):这是职称考试,与建站无直接关系。初级(程序员)无学历和工作年限要求,中级(软件设计师)通常要求大专以上或工作满1年,高级(系统架构师)要求本科以上或工作满4年。
- 建议:如果你的团队负责人想提升技术管理能力,可以考取PMP(项目管理专业人士)或软考中级,但这不是建站的前提条件。
最后的话
内网建站的核心不是技术多高深,而是稳定和可控。不要盲目追求微服务、K8s这些重型架构,对于200人以下的团队,单体应用+SQLite+Docusaurus的组合,简单、高效、易维护。
图解步骤的价值在于,它把复杂的部署过程拆解成可执行的原子操作,让不懂底层原理的人也能照着做。
你所在的团队有没有类似的内部工具建设需求?或者你在内网环境中遇到过哪些让人头疼的网络问题?建站花了多少钱?留言说说真实价格,咱们一起聊聊,看看谁被坑得最惨,谁又省下了大笔预算。


