开始搭建

基础环境

兵马未动,粮草先行,既然是搭建企业级的应用,基础环境得备好。

  • Linux 服务器
  • node 环境
  • 数据库( Mysql )
  • nginx

环境搭建

1. Linux 服务器

这里示例使用的是腾讯云的云服务器,系统为centos7,linux 系统版本为7.x

2. 安装 nodejs

  1. 安装
1
2
3
4
5
6
7
8
# installs nvm (Node Version Manager)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
# download and install Node.js (you may need to restart the terminal)
nvm install 20
# verifies the right Node.js version is in the environment
node -v # should print `v20.18.0`
# verifies the right npm version is in the environment
npm -v # should print `10.8.2`
  1. 更换 npm 源
1
npm config set registry https://registry.npmmirror.com/

3. 安装 mysql

参考 Mysql 的安装与配置 文章。

4. nginx

参考 nginx 的安装与配置 文章。

私有仓库搭建

1. 安装 cnpmjs

建议先将 cnpmjs.org 项目源码克隆到本地计算机的目录中,修改完相关配置,再上传到服务器中进行部署。

1
git clone https://github.com/cnpm/cnpmjs.org.git

2. 修改配置

  1. 修改项目目录下的 config/index.js 中的配置,这里配置非常多,如需正常使用,先关注下面的一些配置即可。
  • 服务访问配置

    • registryPort: 7001, // 仓库服务访问端口
    • webPort: 7002, // web 站点访问端口
    • bindingHost:’127.0.0.1’, // 监听绑定的 Host,默认 127.0.0.1,外网访问注释掉此项即可。
  • 数据库配置(database)

    • db: ‘npm’, // 数据库名称
    • username: ‘root’,// 数据库链接用户名称
    • password: ‘mysqlpassword’, // 数据库链接密码,使用上面安装时的密码
    • dialect: ‘mysql’, // 数据库类型,这里改为 mysql
  • 是否启用私有模式 - enablePrivate: false, // 默认不启用。私有模式下,只有管理员才能发布模块。非管理员发只能拉取包。

  • 发布前缀

    • scopes: [ ‘@haozi’ ] // 只有该前缀的包能上传
  • 管理员设置 (admins)

  • 注册 url 地址

    • registryHost:’xxx.xx.xx.xx’, // 这里填写服务器地址,ip 或域名
  1. 修改下载配置
    如果我们把包存在了服务器本地,且使用了 ip 作为访问地址,则需修改该配置。打开 lib/common.js,找到setDownloadURL函数,将其修改为以下配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
exports.setDownloadURL = function (pkg, ctx, host) {
if (pkg.dist) {
host = host || config.registryHost || ctx.host;
var protocol = config.protocol || ctx.protocol;
// 包的下载链接host后需要拼接 registryPort 才能正确下载
pkg.dist.tarball = util.format(
"%s://%s:%s/%s/-/%s-%s.tgz",
protocol,
host,
config.registryPort,
pkg.name,
pkg.name,
pkg.version
);
}
};

3. 将修改后的项目上传到服务器

  1. 新建文件夹
1
mkdir usr/cnpmjs
  1. 上传项目文件到 usr/cnpmjs
    我使用的是 xshell 和 xftp 将文件压缩后上传到服务器中,也可使用其他工具。
  2. 解压
1
2
cd usr/cnpmjs
unzip xxx.zip
  1. 安装依赖
1
npm i

4. 创建数据库

  1. 登录数据库
1
mysql -u root -p
  1. 创建数据库
1
2
# 这里将数据库命名为 npm,可改成其他名称
create database npm;
  1. 创建数据库表
1
2
# 执行项目文件中 docs/db.sql 文件,这里默认在项目根目录下
source docs/db.sql;

5. 启动项目,配置 nginx

  1. 启动项目
1
npm run start
  1. 配置 nginx
1
vim /usr/local/nginx/conf/nginx.conf

配置 nginx 为以下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
server{
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://127.0.0.1:7002/; #代理到cnpmjs.org提供的web服务
proxy_set_header X-Real-IP $remote_addr;
}
location /registry/ {
proxy_pass http://127.0.0.1:7001/; # 代理到cnpmjs.org提供的注册服务
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
# error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

重启配置

1
/usr/local/nginx/sbin/nginx -s reload
  1. 访问 web 页面
    浏览器打开 xxx.xxx.xxx.xx(服务器地址),会看到 cnpm 页面。

  2. 重启项目
    如果修改了项目配置文件,需要重启项目才能生效

1
2
npm run stop
npm run start

6. 配置私有源

  1. 安装 nrm,用于 npm 源管理。
1
2
# 本地电脑安装,不是在服务器上
npm i nrm -g
  1. 新增私有源
1
2
# name:源名称,可随意更改  http://xxx.xx.xx.xx/registry:源地址,nginx上的 /registry/ 配置,指向的是 cnpmjs 启动的 7001 端口
nrm add name http://xxx.xx.xx.xx/registry
  1. 使用私有源
1
nrm use name
  1. 查看当前源
1
npm get registry

7. 测试发布 npm 包

  1. npm 包的编写请查看npm包编写文档。
  2. 注册 npm 用户
1
2
npm adduser
# 输入命令后会填写 username、password、email
  1. 登录
1
npm login
  1. 发布 npm 包
1
npm publish
  1. 查看 npm 包
    在发布成功后,打开 http://xxx.xx.xx.xx 会看到统计中数量增加,且能通过搜索,搜索到该包。

  2. 下载包

1
2
# 可在本地项目下通过 npm i 安装发布的包
npm i xxx

扩展

pm2 进程管理

  1. 安装 pm2
1
npm i pm2 -g
  1. 启动项目
1
2
# /dispatch.js 在 cnpmjs 项目文件根目录下
pm2 start /usr/cnpmjs/dispatch.js
  1. 查看进程
1
pm2 list

使用云存储

待续…