最近在學習微信小程序,就順便想了解下上線的那套部署流程~
服務器:阿里云ECS共享型 n4
云服務器
后端:NodeJs
數據庫:MySQL
前端:Vue
一、服務器購買與搭建MySQL
1.1 服務器購買
圖1-1:服務器一般有阿里云,百度云,騰訊云,各自選擇即可,我這里選擇阿里云
圖1-2:購買成功后,可以在“管理控制臺中”看到
1.2 連接服務器
連接的方式有很多種,這里以阿里云網頁連接為列,還有Xshell軟件
密碼重置與遠程連接(端口默認22)
至此,服務器連接成功。
1.3 CentOS-8安裝mysql-8.0
- 通過以root用戶使用CentOS軟件包管理器來安裝MySQL 8.0服務器:
sudo dnf install @mysql
圖1-5
會自動下載,下載完畢后,直接啟動mysql服務 - 啟動mysql服務
systemctl start mysqld.service
圖1-6 - 登錄mysql
mysql -u root -p
圖1-7
圖1-8 - 修改mysql密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY '密碼';
圖1-9 - 創建遠程訪問
CREATE USER 'root'@'%' IDENTIFIED BY '你設置的密碼';
GRANT ALL ON *.* TO 'root'@'%';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你設置的密碼';
- 訪問
關閉防火墻 或者 開啟我們的3306端口就可以進行訪問了
# 查看firewall服務狀態
systemctl status firewalld
# 開啟、重啟、關閉、firewalld.service服務
# 開啟
service firewalld start
# 重啟
service firewalld restart
# 關閉
service firewalld stop
# 查看防火墻規則
firewall-cmd --list-all # 查看全部信息
firewall-cmd --list-ports # 只看端口信息
# 開啟端口
開端口命令:firewall-cmd --zone=public --add-port=80/tcp --permanent
重啟防火墻:systemctl restart firewalld.service
命令含義:
--zone #作用域
--add-port=80/tcp #添加端口,格式為:端口/通訊協議
--permanent #永久生效,沒有此參數重啟后失效
關閉防火墻(不建議)
systemctl stop firewalld.service
開啟端口(建議)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
成功之后我們需要重啟我們的防火墻
systemctl restart firewalld.service
然后就可以連接啦~
如果不行,檢查下阿里云服務器MySQL是否開啟了遠程訪問(見1.4)
1.4 阿里云服務器MySQL開啟遠程訪問
上一步連接成功的,可以跳過此步~
登錄阿里云進入控制臺,依次訪問 實例 ->(升降配下的)更多 -> 網絡和安全組 -> 安全組配置 -> 配置規則
二、部署后端包(nodejs)
2.1 安裝 nodejs
在 node 官網上下載對應的安裝包,上傳到服務器并解壓,我把安裝包放在 /usr/local/lib/nodejs 下,執行以下5句
# 創建nodejs文件夾,并上傳nodejs壓縮包
mkdir /usr/local/lib/nodejs
# 解壓nodejs壓縮包
tar -xzvf /usr/local/lib/nodejs/node-v12.12.0-linux-x64.tar.gz -C /usr/local/lib/nodejs
# 重命名為node-v12.12.0
mv /usr/local/lib//nodejs/node-v12.12.0-linux-x64 /usr/local/lib/nodejs/node-v12.12.0
# 建立軟連接 在 bin 下創建 node、npm快捷方式,方便全局使用
ln -s /usr/local/lib/nodejs/node-v12.12.0/bin/npm /usr/local/bin
ln -s /usr/local/lib/nodejs/node-v12.12.0/bin/node /usr/local/bin
2.2 測試 nodejs是否安裝成功
2.3 上傳后端代碼
我是以nodejs作為后端滴
# 1. 進入/usr/local文件夾
cd /usr/local
# 2. 創建develop文件夾,用于放前后端代碼
mkdir develop
# 3. 進入develop文件夾,并上傳node服務代碼
cd develop
# 4. 安裝依賴包
npm i
# 5. 安裝supervisor (supervisor 是 node 應用的進程管理器)
npm install supervisor -g
-
注意:執行supervisor app.js時,如果遇到報"-bash: supervisor: command not found", supervisor已經安裝的情況下,請注意看下是否裝在 /usr/local/bin/ 目錄下;如果不是說明安裝目錄不對,Mac默認訪問執行文件的目錄在 /usr/local/bin/,所以需要保證我們的執行模塊安裝在該目錄下。
圖2-2 - 解決辦法如下
npm config get prefix // 獲取npm全局安裝目錄
npm config set prefix /usr/local // 修改安裝目錄為Mac可執行文件目錄;注意這里不需要加上/bin
npm install supervisor -g
supervisor app.js
2.4 開啟后端端口
-
檢查防火墻是否開啟
圖2-3 - 查看端口是否開放(這里后端開啟13666端口)
# 查看13666端口是否開放 yes表示開啟;no表示未開啟。
firewall-cmd --query-port=13666/tcp
# 添加指定需要開放的端口:
firewall-cmd --add-port=13666/tcp --permanent
# 重載入添加的端口:
firewall-cmd --reload
# 查詢指定端口是否開啟成功:
firewall-cmd --query-port=13666/tcp
2.5 守護進程--supervisord
到這里,nodejs和后端就部署完成啦~但還差一步就是安裝守護進程supervisord并設置開機自啟動,因為如果不安裝supervisord,當我們關閉xshell時后端就會停止服務,所以我們需要一個工具去讓我們的后端進程一直開啟,這就是supervisord存在的意義(當然守護進程還有很多 這里以supervisord為例)
- 安裝supervisor
yum install -y supervisor
圖2-5 - 設置開機自啟動
systemctl enable supervisord
- supervisord管理命令
systemctl stop supervisord
systemctl start supervisord
systemctl status supervisord
systemctl reload supervisord
systemctl restart supervisord
- 修改配置文件
輸入指令vim /etc/supervisord.conf
圖2-7
輸入指令cat /etc/supervisord.conf
圖2-8
圖2-9 - 創建Supervisord文件
mkdir /etc/supervisord.d
cd /etc/supervisord.d
touch supervisord.ini
輸入指令
vim /etc/supervisord.d/supervisord.ini
并粘貼下列代碼
#這里的node-supervisord就是我們顯示在web前端以及終端的監控名稱
[program:node-supervisord]
#啟動命令 : 此處我的node服務啟動命令是supervisor app.js (/usr/local/develop/back-end/app.js為我們要監控的文件地址)
command=supervisor /usr/local/develop/back-end/app.js
autostart=true
autorestart=true
startsecs=1
startretries=3
redirect_stderr=true
#日志地址,可自行配置目錄(需要自己創建)
stdout_logfile=/etc/supervisord.log/access_supervisord.log
#日志地址,可自行配置目錄(需要自己創建)
stderr_logfile=/etc/supervisord.log/error_supervisord.log
- 創建日志文件
mkdir /etc/supervisord.log
cd /etc/supervisord.log
touch {error_supervisord.log,access_supervisord.log}
- 重啟supervisor
輸入命令systemctl restart supervisord
圖2-13
# 參考Centos7.x 安裝 Supervisord
三、安裝nginx
在linux下安裝nginx,首先需要安裝 gcc-c++編譯器。然后安裝nginx依賴的pcre和zlib包。最后安裝nginx即可。
# 1.先安裝gcc-c++編譯器
yum install gcc-c++
yum install -y openssl openssl-devel
# 2.再安裝pcre包
yum install -y pcre pcre-devel
# 3.再安裝zlib包
yum install -y zlib zlib-devel
# 4. 添加rpm源(一般/etc放配置文件,/usr/local放用戶代碼)
rpm -Uvh [http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm](https://links.jianshu.com/go?to=http%3A%2F%2Fnginx.org%2Fpackages%2Fcentos%2F7%2Fnoarch%2FRPMS%2Fnginx-release-centos-7-0.el7.ngx.noarch.rpm)
# 5. 查看源是否添加成功
yum search nginx
# 6. 安裝nginx
yum install -y nginx
# 7. 設置開機自啟動
systemctl enable nginx
# 8. 允許HTTP和HTTPS通信
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
圖3-1:安裝nginx
圖3-2:查看nginx狀態是否為active
圖3-3:查看nginx開啟的端口(nginx 默認80端口)
圖3-4:修改nginx端口為8081
圖3-5:重啟nginx,并查看8081端口是否開啟
圖3-6: 開放8081端口
圖3-7:查看url是否可達
圖3-8:外網映射
圖3-10:訪問 公網ip+nginx端口
- 最后設置開機自啟動
systemctl enable nginx
四、部署前端包
-
將前端包放到/usr/local/develop/web-front-end中
圖4-1 -
修改nginx配置(/etc/nginx/nginx.conf)
圖4-2 - 重啟nginx
systemctl restart nginx
-
訪問 公網ip+nginx端口
圖4-3
文件位置
nodejs包:/usr/local/lib/nodejs
后端代碼:/usr/local/develop/back-end
前端代碼:/usr/local/develop/web-front-end
nginx:/etc/nginx
supervisor配置文件(修改ip、端口等): /etc/supervisord.conf
supervisor設置啟動命令:/etc/supervisord.d/supervisord.ini
supervisor日志文件:/etc/supervisord.log
常用指令
(1)基本命令
創建a文件夾 :mkdir /usr/local/lib/a
創建b文件:touch b.txt
創建c、d文件:touch {c.txt,d.txt}
解壓a.tar.gz壓縮包:tar -xzvf /usr/local/lib/nodejs/a.tar.gz -C /usr/local/lib/nodejs
重命名為b:mv /usr/local/lib/nodejs/a /usr/local/lib/nodejs/b
建立軟連接 在 bin 下創建 node、npm快捷方式,方便全局使用:
ln -s /usr/local/lib/nodejs/node-v12.12.0/bin/npm /usr/local/bin
ln -s /usr/local/lib/nodejs/node-v12.12.0/bin/node /usr/local/bin
(2)查看防火墻狀態
查看防火墻狀態:systemctl status firewalld
開啟防火墻:systemctl start firewalld 或 service firewalld start
關閉防火墻:systemctl stop firewalld 或 service firewalld stop
重啟防火墻:systemctl restart firewalld 或 service firewalld restart
設置開機自啟動:systemctl enable firewalld
# 查看防火墻規則
查看全部信息 firewall-cmd --list-all
只看端口信息firewall-cmd --list-ports
若遇到無法開啟
先用:systemctl unmask firewalld.service
然后:systemctl start firewalld.service
(3)查看對外開放的端口狀態
查詢已開放的端口:netstat -anp
查詢指定端口是否已開 :firewall-cmd --query-port=666/tcp (提示 yes,表示開啟;no表示未開啟。)
查詢nginx進程:netstat -anop | grep nginx
殺進程:kill -9 進程pId
(4)對外開發端口
查看想開的端口是否已開:firewall-cmd --query-port=6379/tcp
添加指定需要開放的端口:firewall-cmd --add-port=123/tcp --permanent
重載入添加的端口:firewall-cmd --reload
查詢指定端口是否開啟成功:firewall-cmd --query-port=123/tcp
移除指定端口:firewall-cmd --permanent --remove-port=123/tcp
(5)supervisor
停止:systemctl stop supervisord
開啟:systemctl start supervisord
查看狀態:systemctl status supervisord
重載:systemctl reload supervisord
重啟:systemctl restart supervisord
開機自啟動:systemctl enable supervisord
(6)虛擬機相關
查看虛擬機列表:virsh list --all
虛擬機關機:virsh shutdown 虛擬機名稱
虛擬機開機:virsh start 虛擬機名稱
(7)服務器相關
服務器立即關機:shutdown -h now
服務器重啟:reboot
(8) 其他
url是否可達:curl -XGET http://1.1.1.1:8081
后臺運行進程:nohup 命令 &
示例:nohup node app.js &,這種關閉xshell,進程就關了,所以需要寫啟動關閉腳本 + 服務