node /nginx/pm2環境及自動部署-centos

答案xxz發表於2018-02-25

連線伺服器並建立新使用者

ssh root@139.199.209.96
adduser xxz     // 新增xxz使用者
passwd xxz      // 設定xxz密碼
groupadd wheel  // 新增wheel組
usermod -aG wheel xxz   // 為wheel和xxz增加root許可權
複製程式碼

本地

本地生成私鑰/公鑰

~ ssh-keygen -t rsa -b 4096 -C "759811542@qq.com"
// 3個回車
複製程式碼

開啟ssh代理

.ssh eval "$(ssh-agent -s)"
複製程式碼

加入代理中

.ssh ssh-add ~/.ssh/id_rsa
複製程式碼

伺服器

伺服器生成私鑰和公鑰

~ ssh-keygen -t rsa -b 4096 -C "759811542@qq.com"
// 3個回車
複製程式碼

開啟ssh代理

.ssh eval "$(ssh-agent -s)"
複製程式碼

加入代理中

.ssh ssh-add ~/.ssh/id_rsa
複製程式碼

生成授權檔案authorized_keys

.ssh vi authorized_keys
複製程式碼

把想要免密登入伺服器的電腦的公鑰 ip_rsa.pub 複製 authorized_keys

服務端授權 authorized_keys

.ssh chmod 600 authorized_keys
複製程式碼

重啟ssh 服務

// 烏班圖  
.ssh  service ssh restart
// centos
.ssh systemctl restart sshd.service
複製程式碼

安裝node

更新yum源

sudo yum update
複製程式碼

安裝一些必備軟體

sudo yum install vim openssl build-essential libssl-dev wget curl git
複製程式碼

安裝nvm

網址

https://github.com/creationix/nvm
複製程式碼

程式碼段

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
複製程式碼

使用nvm安裝node

nvm install node    // 安裝最新
複製程式碼

註冊cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org
複製程式碼

安裝一些包

npm i pm2 webpack vue-cli -g
複製程式碼

nginx

安裝nginx

yum install nginx
複製程式碼

新增conf檔案

// 進入nginx的conf.d目錄
cd /etc/nginx/conf.d
// 新增配置
sudo vi xgjun-cn-3000
複製程式碼

conf內容

upstream app {
        server 139.199.209.96:3000
}

server {
        listen 80;
        server_name 139.199.209.96;
        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
                proxy_set_header HOST $http_host;
                proxy_set_header X-Nginx-Proxy true;
                proxy_pass http://xgjun.cn;
                proxy_redirect off;
        }
}
~
複製程式碼

檢視nginx.conf

nginx sudo vi nginx.conf
// include /etc/nginx/conf.d/*.conf;
複製程式碼

檢測nginx配置檔案是否正確

nginx sudo nginx -t
複製程式碼

重啟nginx

sudo service nginx restart
// sudo systemctl start nginx
複製程式碼

node程式碼部署

將本地的id_rsa.pub複製到碼雲

cat ~/.ssh/id_rsa.pub
https://gitee.com/profile/sshkeys
複製程式碼

用ssh拉去倉庫

提示就輸入yes

git clone git@gitee.com:xuxiaozhou08/deploy.git
複製程式碼

將伺服器的id_rsa.pub複製到碼雲

cat ~/.ssh/id_rsa.pub
https://gitee.com/profile/sshkeys
複製程式碼

用ssh拉去倉庫

提示就輸入yes

git clone git@gitee.com:xuxiaozhou08/deploy.git
複製程式碼

pm2程式碼部署

本地安裝pm2

npm i pm2 -g
複製程式碼

本地專案裡面deploy新增ecosystem.json檔案

vi ecosystem.json
複製程式碼

內容

{
	"apps":[
		{
			"name": "deploy",	// 應用名稱
			"script":"app.js",	// 啟動的指令碼
			"env":{
				"COMMON_VARIABLE":"true"
			},
			"env_production":{
				"NODE_ENV":"production"
			}
		}
	],
	// 部署的任務
	"deploy":{
		"production":{
			"user":"xxz",	// 使用者
			"host":["139.199.209.96"],	// 主機
			"ref":"origin/master", 	// 主分支
			"repo":"git@gitee.com:xuxiaozhou08/deploy.git",	// 倉庫地址
			"path":"/www/web/production",		// 部署到伺服器的哪個位置
			"ssh_options":"StrictHostKeyChecking=no",	// 關閉ssh校驗
			"env": {
				"NODE_ENV":"production"
			}
		}
	}
}
複製程式碼

伺服器建立目錄

sudo mkdir /www/web/
sudo chmod 777 /www
複製程式碼

提交ecosystem.json程式碼

git add .
git commit -m '111'
git push origin master
複製程式碼

本地執行deploy

pm2 deploy ecosystem.json production setup
複製程式碼

伺服器會出現3個資料夾

// 路徑
/www/web/production
// current  shared  source
複製程式碼

修改bash

使用者根目錄


複製程式碼

修改程式碼後提交到git倉庫後執行

pm2 deploy ecosystem.json production
複製程式碼

問題是centos執行後git的head會一直停在初始化狀態

{
	"apps":[
		{
			"name": "deploy",	// 應用名稱
			"script":"app.js",	// 啟動的指令碼
			"env":{
				"COMMON_VARIABLE":"true"
			},
			"env_production":{
				"NODE_ENV":"production"
			}
		}
	],
	// 部署的任務
	"deploy":{
		"production":{
			"user":"xxz",	// 使用者
			"host":["139.199.209.96"],	// 主機
			"port":"22",	// 埠
			"ref":"origin/master", 	// 主分支
			"repo":"git@gitee.com:xuxiaozhou08/deploy.git",	// 倉庫地址
			"path":"/www/web/production",		// 部署到伺服器的哪個位置
			"ssh_options":"StrictHostKeyChecking=no",	// 關閉ssh校驗
			// 加粗git pull origin master
			"post-deploy" : "git pull origin master && npm install && pm2 startOrRestart ecosystem.json --env production",
      		// Environme
			"env": {
				"NODE_ENV":"production"
			}
		}
	}
}
複製程式碼

域名解析

ip指向域名

修改/etc/nginx/conf.d中的xgjun-cn-3000.conf

upstream app {
	server 139.199.209.96:3000;
}

server {
	listen 80;
	# server_name 139.199.209.96;
	server_name www.xgjun.cn;
	location / {
		proxy_set_header X-Real-IP $remote_addr;
      		proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        	proxy_set_header HOST $http_host;
        	proxy_set_header X-Nginx-Proxy true;
        	proxy_pass http://app;
        	proxy_redirect off;
	}
}
複製程式碼

重啟nginx

sudo service nginx restart
複製程式碼

https

申請證照可以通過騰訊雲

上傳證照

scp -P 22 ./2_www.xgjun.cn.key xxz@139.199.209.1:/home/xxz
scp -P 22 ./1_www.xgjun.cn_bundle.crt xxz@139.199.209.96:/home/xxz
複製程式碼

修改nginx配置

找到

cd /etc/nginx/conf.d/
複製程式碼

修改

參考https://cloud.tencent.com/document/product/400/4143

程式碼

upstream api {
	server 139.199.209.96:3001;
}

server {
	listen 80;
	# server_name 139.199.209.96;
	server_name api.xgjun.cn;
	#rewrite ^(.*) https://$host$1 permanent;
	return 301 https://api.xgjun.cn$request_uri;
}
server {

	listen 443;
        server_name api.xgjun.cn; #填寫繫結證照的域名
        ssl on;
        ssl_certificate /home/xxz/1_api.xgjun.cn_bundle.crt;
        ssl_certificate_key /home/xxz/2_api.xgjun.cn.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置
        ssl_prefer_server_ciphers on;
    // 注意空格
	if ($ssl_protocol = "") {
		rewrite ^(.*) https://$host$1 permanent;
	}

	location / {
		proxy_set_header X-Real-IP $remote_addr;
      		proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        	proxy_set_header HOST $http_host;
        	proxy_set_header X-Nginx-Proxy true;
        	proxy_pass http://api;
        	proxy_redirect off;
	}
}
複製程式碼

mongo ->centos

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

進入目錄

cd /etc/yum.repos.d
複製程式碼

建立

sudo vi mongodb-org-3.6.repo
複製程式碼

寫入內容

[mongodb-org-3.4] 
name = MongoDB 3.4版本庫
baseurl = https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ 
gpgcheck = 0 
enabled = 1
gpgkey = https:// www.mongodb.org/static/pgp/server-3.6.asc
複製程式碼

安裝

sudo yum install -y mongodb-org
複製程式碼

開啟mongo

sudo service mongod start
複製程式碼

測試mongo

mongo
複製程式碼

設定使用者名稱密碼並且授權

use admin
// 新增管理員
db.createUser({user:'xxz_ad',pwd:'ai081012',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})
// 授權
        // 賬號     密碼
db.auth('xxz_ad','ai081012')
複製程式碼

修改mongo.conf配置檔案進行使用者登陸驗證

mongo.conf路徑

/etc/mongod.conf
複製程式碼
// 找到#security修改為如下
security:
  authorization:'enabled'
複製程式碼

相關文章