前情提要:最近幫朋友開發了一套網站,由於前后端都是自己一個人做,部署也是自己弄,所以在這里記錄下,下次再有需要部署的項目可以直接用,不用再去挨着查找文章;
我前台項目采用了nuxt.js框架,管理系統使用了vue框架,后台服務使用了node.js的egg框架,所以本篇文章將介紹在linux上安裝node.js、pm2、nginx、mongodb以及jekins等,以及相關配置實現自動化部署; 我的linux系統是 centos 7.6;
一、linux上安裝jdk(在linux控制台中執行下面命令):
yum install -y java-1.8.0-openjdk-devel.x86_64 #安裝命令
java -version #查看版本
二、linux安裝node.js
2.2、為node與npm建立軟連接(注意紅色部分是否是你node的安裝路徑)
ln -s /etc/sysconfig/node-v14.16.1-linux-x64/bin/node /usr/bin/node ln -s /etc/sysconfig/node-v14.16.1-linux-x64/bin/npm /usr/bin/npm
2.3、下載cnpm並建立軟連接
npm install -g cnpm --registry=https://registry.npm.taobao.org
ln -s /etc/sysconfig/node-v14.16.1-linux-x64/bin/cnpm /usr/bin/cnpm
2.4、服務器配置node環境變量(不配置jenkins無法正常執行pm2命令)
vim /etc/profile # 打開配置文件 a鍵進入編輯模式 # 在最后面添加node環境變量(注意NODE_HOME后面的路徑是否為你node的安裝路徑) export NODE_HOME=/etc/sysconfig/node-v14.16.1-linux-x64 export PATH=$PATH:$NODE_HOME/bin # 按Esc 后輸入 :wq 保存退出 source /etc/profile # 然后執行這個命令使配置文件立即生效
您可能需要用到的命令;
whereis node-v14.16.1-linux-x64.tar.gz #查詢安裝包路徑 pwd #查看當前所處路徑 ln -s #建立軟連接 ln -snf #覆蓋軟連接 查看已經建立的軟連接: 在 /usr/local/bin/ 目錄執行: ls -lR
三、linux安裝git
yum install git
四、linux安裝nginx
4.1、確認系統屬否安裝了gcc、pcre-devel、zlib-devel、openssl-devel
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
4.2、安裝nginx
4.3、啟動成功后

4.3、nginx常用命令
/usr/sbin/nginx -s stop #停止
/usr/sbin/nginx -s reload #重啟
nginx安裝目錄:/usr/local/nginx nginx
日志查看: vim /var/log/nginx/error.log
打開nginx配置文件:vim /etc/nginx/nginx.conf
測試配置文件是否正確:nginx -t
4.4、nginx配置(這里是我項目的配置,根據自己的項目差異配置會有差別)
運行 vim /etc/nginx/nginx.conf 打開配置文件后按a鍵進入編輯模式,配置以下內容后點擊Esc鍵輸入:wq保存后退出,再執行 nginx -t 檢查配置文件是否存在問題,
沒問題就執行: /usr/sbin/nginx -s reload 重啟nginx;
upstream nodenuxt { server 127.0.0.1:3001; #nuxt項目 keepalive 64; } server { listen 80; # 監聽端口80 server_name nuxt.xxx.com; # 匹配域名(前台nuxt項目) # 代理騰訊接口 location ^~ /api/getonline { rewrite ^/api/(.*)$ /$1 break; proxy_pass https://webpresence.qq.com; } # 代理前台接口 location ^~ /api/nk { proxy_pass http://127.0.0.1:7001; } # 代理管理系統接口 location ^~ /api/yk { proxy_pass http://127.0.0.1:7001; } # 代理圖片地址 location ^~ /public/avatar/upload { proxy_pass http://127.0.0.1:7001; } location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Nginx-Proxy true; proxy_cache_bypass $http_upgrade; proxy_pass http://nodenuxt; # 反向代理地址 } } server { listen 80; server_name manage.xxx.cn; # 管理系統(vue項目) location / { autoindex on; root /home/webapps/manage; index index.html; try_files $uri $uri/ /index.html; } # 代理圖片地址 location ^~ /public/avatar/upload { proxy_pass http://127.0.0.1:7001; } location = /favicon.ico { log_not_found off; access_log off; } }
五、linux安裝pm2
sudo cnpm install -g pm2 #安裝命令 sudo ln -s /etc/sysconfig/node-v14.16.1-linux-x64/bin/pm2 /usr/local/bin/ #建立軟連接(注意pm2的安裝地址)
vim /etc/profile #打開配置文件
export PM2_HOME=/root/.pm2/ #添加環境變量,加在配置文件最后按 Esc后輸入:wq保存退出
source /etc/profile # 然后執行這個命令使配置文件立即生效
pm2常用命令:
# 啟動項目 pm2 start npm --name "xxx" -- run start # 查看所用已啟動進程: $ pm2 list # 重啟某一個進程: $ pm2 restart XXX # 停止某一個進程: $ pm2 stop XXX # 刪除某一個進程: $ pm2 delete XXX # 查看某個進程詳情 pm2 show 0 或者 # pm2 info 0 #查看進程詳細信息,0為PM2進程id jekins 使用PM2 啟動項目后,在控制台無法看到進程的解決方案: https://www.jianshu.com/p/3c628003a4e5 清空日志信息:pm2 flush
六、linux安裝
我的后台服務數據存儲用到了mongodb。
注意:(首先服務器記得開放27017端口,否則后續無法啟動mogodb服務)
6.1、mongodb安裝
# 下載安裝包 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.24.tgz # 解壓 tar -zxvf mongodb-linux-x86_64-rhel70-4.0.24.tgz # 刪除安裝包 rm -rf mongodb-linux-x86_64-rhel70-4.0.24.tgz # 將解壓包拷貝到指定目錄重命名為mongodb mv mongodb-src-r4.2.8 /usr/local/mongodb # cd 移動到安裝目錄 cd /usr/local/mongodb/ # 創建mongodb數據存儲文件和日志文件 mkdir data mkdir logs cd ./logs touch mongodb.log cd ../ mkdir etc cd etc touch mongodb.conf
6.2、修改配置文件
# 打開配置文件 vim mongodb.conf
# 添加下列內容 ········································· #數據庫路徑 dbpath=/usr/local/mongodb/data #日志輸出文件路徑 logpath=/usr/local/mongodb/logs/mongodb.log #錯誤日志采用追加模式 logappend=true #啟用日志文件,默認啟用 journal=true #這個選項可以過濾掉一些無用的日志信息,若需要調試使用請設置為false quiet=true #端口號 默認為27017 port=27017 #允許遠程訪問 bind_ip=0.0.0.0 #開啟子進程 fork=true #開啟認證,必選先添加用戶,先注釋(不用驗證賬號密碼) #auth=true ·········································
#添加后按Esc輸入:wq保存退出
source mongodb.conf # 執行配置生效
6.3、配置mongodb環境變量
# 將mongodb服務加入環境變量 vi /etc/profile #打開配置文件
# 加在文件最后 export MONGODB_HOME=/usr/local/mongodb export PATH=$PATH:/usr/local/mongodb/bin
#添加后按Esc輸入:wq保存退出
source /etc/profile #執行配置生效
6.4、啟動mongodb服務()
cd /usr/local/mongodb/bin
./mongod --config /usr/local/mongodb/etc/mongodb.conf
netstat -lanp | grep "27017"

6.5、操作mongo數據庫、添加用戶、安全認證
mongo
show dbs # 查看當前所有數據庫。
use admin
db
# 創建賬戶
db.createUser({user:"root",pwd:"admin001",roles:[{role:"root",db:"admin"}]})
6.6、
db.shutdownServer()
exit #退出mondodb命令行 # 打開配置文件,放開auth=true注釋 vim /usr/local/mongodb/etc/mongodb.conf
source mongodb.conf #執行配置生效
# 啟動數據庫 cd /usr/local/mongodb/bin ./mongod --config /usr/local/mongodb/etc/mongodb.conf # 進入mongodb命令行 mongo show dbs # 此時看不到任何數據庫表,說明我們的安全認證用戶配置生效了 use admin db.auth('root','admin001') # 輸出1,說明驗證成功
mongodb插入一條數據(此項可忽略)
# 向用戶表添加一條初始用戶數據用於管理系統登錄
# use myDbData
# db.user.save({ name: 'admin', account: 'admin001', password: 'admin001',isDelete:NumberInt(0) })
七、
cd /home
mkdir webapps # 代碼全放這里/home/webapps
cd webapps # 進入該文件夾
mkdir client # 創建放前台項目的文件夾
mkdir manage # 創建放管理系統項目的文件夾
mkdir serve # 創建放服務端項目的文件夾
八、linux上安裝 jenkins
8.1、安裝jekins
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key yum install jenkins rpm -ql jenkins # 查找jenkins安裝路徑
修改jenkins配置文件;修改默認端口與目錄權限
vim /etc/sysconfig/jenkins # 打開jenkins配置文件
$JENKINS_USER="root"
JENKINS_PORT="8080"
修改成功后
8.3、運行下方命令啟動jenkins服務(出現OK表示Jenkins啟動成功)
service jenkins start
tail /var/lib/jenkins/secrets/initialAdminPassword
8.6、jenkins安裝node.js插件

8.7、jekins新建任務與配置
在jekins首頁,點擊“新建任務”然后操作如下步驟:
點保存后進入到任務配置界面,首先配置項目git倉庫地址;
然后配置任務構建環境:
最后配置構建執行的shell:
1、vue項目的構建命令:

2、nuxt.js執行的shell
rm -rf /home/webapps/client/* # 刪除之前的所有文件 cnpm install # 安裝依賴 cnpm run build # 打包項目 tar czvf nuxt_build_web.tar.gz .nuxt static nuxt.config.js package.json config # 壓縮文件 mv ./nuxt_build_web.tar.gz /home/webapps/client # 移動壓縮包到指定目錄 rm -rf ./nuxt_build_web.tar.gz # 刪除當前文件夾下的壓縮包(jenkins目錄下的壓縮包) cd /home/webapps/client # 移動到項目所在目錄 tar xzvf nuxt_build_web.tar.gz # 解壓壓縮包 rm -rf nuxt_build_web.tar.gz # 刪除壓縮包 cnpm install # 安裝依賴 source ~/.bashrc source /etc/profile pm2 restart "kangyu-nuxt-client" # 重啟進程(非第一次構建執行這個命令重啟) # pm2 start cnpm --name "kangyu-nuxt-client" -- run start # 使用pm2啟動項目(第一次構建時執行這個命令啟動)
3、egg項目構建執行的shell
BUILD_ID=DONTKILLME rm -rf ./app/public/* # 先刪除工作空間public下所有靜態資源 cp -R ./* /home/webapps/serve # 拷貝工作空間中文件到指定目錄 cd /home/webapps/serve cnpm install cnpm run stop cnpm run start
九、配置開機啟動命令(服務器重啟自動啟動某些項目)
9.1、開機pm2啟動nuxt項目
9.2、開機啟動nginx、mogodb、egg
cd /home mkdir custom vi /home/custom/auto_run_script.sh
# 開機啟動nginx /usr/sbin/nginx # 開機啟動mogodb sudo /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/etc/mongodb.conf # 開機啟動egg服務 cd /home/webapps/serve cnpm run start
chmod +x /home/custom/auto_run_script.sh
$ vim /etc/rc.d/rc.local # 打開配置文件
/home/custom/auto_run_script.sh #添加需要執行的腳本
$ source /etc/rc.d/rc.local # 生效
