以前作的幾個項目都託管在阿里雲服務器,可是最近要到期了。想着到底要不要續期,畢竟100/月。後面看着阿里雲有個活動,800/三年。果斷買下。環境部署折騰了一天,其中也遇到幾個坑。html
1、安裝環境 1.1 安裝NodeJS環境 1.2 安裝版本控制軟件Git 1.3 安裝MongoDB數據庫 1.4 安裝Nginx 2、導入數據 3、安裝項目 4、部署項目 4.1 Nginx配置 4.2 啓用HTTPS 4.3 使用PM2部署項目 4.4 開啓阿里雲外網訪問 5、踩坑記錄 5.1 數據庫導入失敗 5.2 PM2部署失敗
爲了保證項目運行不出問題,在新服務器安裝和原服務器一致的環境。項目遷移歷時一天,兩臺服務器的系統都是Ubuntu 16.04 64位。node
自帶的NodeJS版本是4.2.6,版本有點低,使用npm的n模塊更新到最新版。python
安裝NPMnginx
sudo apt-get install npm
使用淘寶源git
阿里雲訪問npm的速度很是慢,這裏經過設置,讓NPM從淘寶鏡像更新模塊github
npm set registry https://registry.npm.taobao.org // 設置從淘寶鏡像更新 npm set disturl https://npm.taobao.org/dist npm cache clean // 清除緩存
更新NodeJSmongodb
npm install n // 更新NodeJS的模塊 n stable // 更新到最新穩定版 node -v // v8.2.1
sudo apt-get install git
sudo apt-get install mongodb // 安裝MongoDB service mongodb start // 啓動服務 mongod // 進入交互式控制檯,能加入說明啓動成功,ctrl+c退出
sudo apt-get install nginx // 安裝Nginx
把之前的數據庫完整的遷移過來數據庫
從源服務器導出數據庫npm
mongodump -h localhost --port 27017 -d test -o database_dump
導入MongoDB數據庫ubuntu
mongorestore -d test database_dump/test
項目是在Github開源,直接拉取就行。
git clone https://github.com/bergwhite/nchat.git // 克隆項目 cd nchat // 進入目錄 npm install 安裝模塊 npm run build
vim /etc/nginx/nginx.conf // 編輯Nginx的配置 http { server { listen 80; server_name hostName; rewrite ^(.*) https://$server_name$1 permanent; } server { listen 443 ssl; server_name hostName; ssl on; # SSL證書會插入到這裏 # 完整根目錄 location / { root /*/*/*; index index.html; } # 反向代理V2EX API到本地,解決跨域問題 location /api/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://www.v2ex.com/api/; } } ...
sudo apt-get update // 更新軟件源 sudo apt-get install software-properties-common // 安裝 sudo add-apt-repository ppa:certbot/certbot // 添加倉庫 sudo apt-get update // 更新軟件源 sudo apt-get install python-certbot-nginx // 安裝 sudo certbot --nginx // 生成證書(自動添加到Nginx) sudo certbot --nginx certonly // 生成證書(手動添加到Nginx)
sudo apt-get install pm2 // 安裝pm2
在安全組裏添加須要放行的NodeJS項目端口便可。
導入數據庫的時候,有一個Collection沒有導入成功
Assertion failure amt == (size_t)( size - 4 ) src/mongo/tools/tool.cpp 330
解決方案
把報錯的Collection單獨導出,而後從新導入到新服務器的數據庫
運行下面的代碼會失敗
pm2 start -i 0 --name test ./bin/www
解決方案
使用fork模式啓動
pm2 start --name nchat3 ./bin/www