簡單記錄一下
- # 先更新 index 和 ports
- cd /usr/ports && make fetchindex
- cvsup -L 2 -h cvsup.tw.FreeBSD.org /usr/share/examples/cvsup/ports-supfile
-
- # 通過 ports 安裝 node
- cd /usr/ports/www/node
- make install clean
-
- # 通過 ports 安裝 mongodb (需等待)
- cd /usr/ports/databases/mongodb
- make install clean
-
- (選擇 V8 引擎取代 SpiderMonkey)
- (之後的用預設)
- (之後再用預設)
-
- # 將安裝 mongodb 時新增的 mongodb 用戶 shell 改為 nologin
- chsh -s /usr/sbin/nologin mongodb
-
- # 通過 ports 安裝 supervisor
- # Python 寫的,用來管理 node app
- cd /usr/ports/sysutils/py-supervisor
- make install clean
-
- # 重新進入 root 環境,使上面安裝的指令可作用
- su -
-
- # 接下來,設定 supervisor
- # 編輯 supervisord.conf
- # ports 預設位置是這裡.
- # 可複製到 /etc/supervisord.conf
- vim /usr/local/etc/supervisord.conf
-
- # 裡面的內容如下
- # ================
- [unix_http_server]
- file=/var/run/supervisor/supervisor.sock
- chmod=0700
- chown=www:www
-
- [supervisord]
- user=root
-
- ;最後在最下面加入 (前面加 ; 代表註解)
- [program:node_app]
- command=/usr/local/bin/node /home/[用戶]/node-app.example.com/app.js
- directory=/home/[用戶]/node-app.example.com
- autostart=true
- startsecs=5
- user=[執行者]
- ;redirect_stderr=true
- ;stdout_logfile = /var/log/supervisord/node_note.log
- # ================
-
- # 將 sock 存放目錄設為 www 用戶和用戶組才可讀取
- chown -Rf www:www /var/run/supervisor
-
- # 之後修改 nginx 加入 proxy 轉向到內部端口
- server {
- listen 80;
- charset utf-8;
- server_name node-app.example.com;
- root /home/[用戶]/node-app.example.com;
-
- location / {
- proxy_pass http://127.0.0.1:[端口]/;
- }
- }
-
- # 運行 MongoDB
- mongod --dbpath /var/db/mongodb/ --logpath /var/log/mongodb.log --fork
-
- # 進入命令窗口,測試操作資料庫(或者加權限)
- mongo 127.0.0.1:27017
-
- # 簡單記錄一下權限設置,
- # 重新運行 MongoDB 後,再用 admin 時就需要權限了
- use admin
- db.auth("username", "password")
- exit
-
- killall mongod
- mongod --dbpath /var/db/mongodb/ --logpath /var/log/mongodb.log --fork --auth
-
- # 為確保開發環境和上線環境內的依賴套件一致使用如下指令
- # 更新自機中的 NPM 確保可使用 npm shrinkwrap 指令 (>= 1.1.2)
- # 生成 npm-shrinkwrap.json
- npm update npm -g
- npm shrinkwrap
-
- # 再到主機中更新 npm
- # 再安裝 app (應用) 的依賴套件
- npm update npm -g
- npm install
-
- # 之後兩邊再比對一下 npm list 是否一樣
- npm list
-
- # 最後通過 supervisor 執行 node app 應用
- # 使 node app 應用打開 127.0.0.1:[端口] 的端口
- supervisord -c /usr/local/etc/supervisord.conf
- supervisorctl start node_app
-
- # 當 supervisord 運行後,以後就可經 supervisorctl 操作
- supervisorctl stop [node_app],停止某個 supervisord.conf 中的 [program:(應用)]
- supervisorctl start node_app,運行某個應用
- supervisorctl restart programxxx,重新運行某個應用
- supervisorctl stop all,停止重部應用
- supervisorctl reload,重新載入最新的配置文件,並按照配置文件執行每個應用
-
- *** 註 ***
- 當修改 supervisord.conf 後,需使用 reload 重新加載,start,stop,restart都不會加新文件
-
- # 最後將 supervisor 和 mongod 都放到 /etc/rc.local
- # ===========
- # Supervisord (因不是預設的檔案位置,所以不用前者)
- #supervisord_enable="YES"
- supervisord -c /usr/local/etc/supervisord.conf
-
- # MongoDB
- mongod --dbpath /var/db/mongodb/ --logpath /var/log/mongodb.log --fork --auth
# 參考
http://cuppster.com/2011/05/12/diy-node-js-server-on-amazon-ec2/
http://serverfault.com/questions/134179/how-do-i-automatically-start-supervisor-on-boot-in-freebsd
http://feilong.me/2011/03/monitor-processes-with-supervisord
http://www.aiezu.com/Article/FreeBSD_MongoDB.aspx