標籤:windows 伺服器 資料庫 用戶端 文章
該文章所對應的 cnpm版本為 v2.12.2,上下浮動一些相容的版本問題也都不是特別大。
想要部署 CNPM,你需要做以下的一些準備。
部署的宿體,如伺服器、雲主機、自己的電腦等;
資料庫,支援 MySQL、PostgreSQL、MariaDB,如果使用 SQLite 則無需準備;
Git 用戶端(推薦)。
下面兄弟連教育(www.lampbrother.net)就來指導大家開始部署複製 CNPM
首先在本地選擇一個目錄,比如我將它選擇在 /usr/app,然後預想 CNPM 的目錄為 /usr/app/cnpm,那麼需要在終端 $ cd /usr/app。
接下去執行 Git 指令將 CNPM 複製到相應目錄。
$ git clone https://github.com/cnpm/cnpmjs.org.git
Windows 使用者
Windows 使用者也可以用類似 Cygwin、MinGW、Powershell 甚至直接是 Command 等來運行 Git。
當然也可以直接下載一些 GUI 工具來複製,如 SourceTree。
非 Git 使用者
跑到 CNPM 的 Release 頁面,選擇相應的版本下載,比如這裡會選擇 v2.12.2 版。
下載完畢後將檔案夾解壓到相應目錄即可。
安裝依賴
安裝依賴其實就是一個 npm install,不過 CNPM 把該指令已經寫到 Makefile 裡面了,所以直接執行下面的命令就好了。
$ make install
當然萬一你是 Windows 使用者或者不會 make,那麼還是要用 npm install。
$ npm install --build-from-source --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/mirrors/node
修改設定檔
建立一份 config/config.js 檔案,並且寫入如下的骨架:
JavaScript
‘use strict‘;
module.exports = {
};
在這裡面輸入你需要的索引值對。
這裡將會列舉一些常用的配置項,其餘的一些配置項請自行參考 config/index.js 檔案。
配置欄位參考
enableCluster:是否啟用 cluster-worker 模式啟動服務,預設 false,生產環節推薦為 true;
registryPort:API 專用的 registry 服務連接埠,預設 7001;
webPort:Web 服務連接埠,預設 7002;
bindingHost:監聽綁定的 Host,預設為 127.0.0.1,如果外面架了一層本地的Nginx 反向 Proxy或者 Apache 反向 Proxy的話推薦不用改;
sessionSecret:session 用的鹽;
logdir:日誌目錄;
uploadDir:臨時上傳檔案目錄;
viewCache:視圖模板緩衝是否開啟,預設為 false;
enableCompress:是否開啟 gzip 壓縮,預設為 false;
admins:管理員們,這是一個 JSON Object,對應各鍵名為各管理員的使用者名稱,索引值為其郵箱,預設為 { fengmk2: ‘[email protected]‘, admin: ‘[email protected]‘, dead_horse: ‘[email protected]‘ };
logoURL:Logo 地址,不過對於我這個已經把 CNPM 前端改得面目全非的人來說已經忽略了這個配置了;
adBanner:廣告 Banner 的地址;
customReadmeFile:實際上我們看到的 cnpmjs.org 首頁中間一大堆冗長的介紹是一個 Markdown 檔案轉化而成的,你可以設定該項來自行替換這個檔案;
customFooter:自訂頁尾模板;
npmClientName:預設為 cnpm,如果你有自己開發或者 fork 的 npm 用戶端的話請改成自己的 CLI 命令,這個應該會在一些頁面的說明處替換成你所寫的;
backupFilePrefix:備份目錄;
database:資料庫相關配置,為一個對象,預設如果不配置將會是一個 ~/.cnpmjs.org/data.sqlite 的 SQLite;
db:資料的庫名;
username:資料庫使用者名稱;
password:資料庫密碼;
dialect:資料庫適配器,可選 "mysql"、"sqlite"、"postgres"、"mariadb",預設為 "sqlite";
hsot:資料庫地址;
port:資料庫連接埠;
pool:資料庫連接池相關配置,為一個對象;
maxConnections:最大串連數,預設為 10;
minConnections:最小串連數,預設為 0;
maxIdleTime:單條連結最大空閑時間,預設為 30000 毫秒;
storege:僅對 SQLite 配置有效,資料庫地址,預設為 ~/.cnpmjs/data.sqlite;
nfs:包檔案系統處理對象,為一個 Node.js 對象,預設是 fs-cnpm 這個包,並且配置在 ~/.cnpmjs/nfs 目錄下,也就是說預設所有同步的包都會被放在這個目錄下;開發人員可以使用別的一些檔案系統外掛程式(如上傳到又拍雲等),又或者自己去按介面開發一個邏輯層,這些都是後話了;
registryHost:暫時還未試過,我猜是用於 Web 頁面顯示用的,預設為r.cnpmjs.org;
enablePrivate:是否開啟私人模式,預設為 false;
如果是私人模式則只有管理員能發布包,其它人只能從來源站點同步包;
如果是非私人模式則所有登入使用者都能發布包;
scopes:非管理員發布包的時候只能用以 scopes 裡面列舉的命名空間為首碼來發布,如果沒設定則無法發布,也就是說這是一個必填項,預設為 [ ‘@cnpm‘, ‘@cnpmtest‘, ‘@cnpm-test‘ ],據蘇千大大解釋是為了便於管理以及讓公司的員工自覺按需發布;更多關於 NPM scope 的說明請參見 npm-scope;
privatePackages:就如該配置項的注釋所述,出於曆史包袱的原因,有些已經存在的私人包(可能之前是用 Git 的方式安裝的)並沒有以命名空間的形式來命名,而這種包本來是無法上傳到 CNPM 的,這個配置項數組就是用來加這些例外白名單的,預設為一個空數組;
sourceNpmRegistry:更新源 NPM 的 registry 地址,預設為 https://registry.npm.taobao.org;
sourceNpmRegistryIsCNpm:源 registry 是否為 CNPM,預設為 true,如果你使用的源是官方 NPM 源,請將其設為 false;
syncByInstall:如果安裝包的時候發現包不存在,則嘗試從更新源同步,預設為 true;
syncModel:更新模式(不過我覺得是個 typo),有下面幾種模式可以選擇,預設為 "none";
"none":永不同步,只管理私人使用者上傳的包,其它源包會直接從來源站點擷取;
"exist":定時同步已經存在於資料庫的包;
"all":定時同步所有來源站點的包;
syncInterval:同步間隔,預設為 "10m" 即十分鐘;
syncDevDependencies:是否同步每個包裡面的 devDependencies 包們,預設為 false;
badgeSubject:包的 badge 顯示的名字,預設為 cnpm;
userService:使用者驗證介面,預設為 null,即無使用者相關功能也就是無法有使用者去上傳包,該部分需要自己實現介面功能並配置,如與公司的 Gitlab 相對接,這也是後話了;
alwaysAuth:是否始終需要使用者驗證,即便是 $ cnpm install 等命令;
httpProxy:Proxy 位址設定,用於你在牆內來源站點在牆外的情況。
CNPM 的基礎部署方法介紹