在CentOS 7(騰訊云)部署node+mongodb項目全過程(上)

太長了......為了不影響閱讀體驗決定分上下兩篇,下篇鏈接:在CentOS 7(騰訊云)部署node+mongodb服務器全過程(下)

前提是你已經(jīng)購買了服務器。
我電腦的操作系統(tǒng)是MacOS的,Windows下我沒有實際操作,所以這邊的步驟以MacOS為準。

一、首先在終端登錄服務器

也可以在騰訊云-控制臺-云服務器的實例里直接登錄(官方有視頻教程我這里不贅述了),但官方的網(wǎng)頁版在線終端不是很方便,還是建議用自己電腦上的,我的是iTerm2,之后都是在這個上面操作的。十分推薦把默認端口修改一下(默認是22),防止黑客攻擊。官方文檔貼在這里:修改云服務器遠程默認端口

ssh root@188.131.142.151   
// 修改過默認端口需要加上端口號
ssh root@188.131.142.151 -p 1234
// root 是騰訊云服務器默認的賬號名,
// @后面是你的服務器公網(wǎng) ip,比如 188.131.142.151 
登錄成功截圖

之后輸入騰訊云站內(nèi)信給我們的默認密碼即可。

但每次輸密碼太麻煩了,這里推薦ssh用密鑰登錄結(jié)合配置終端Profile的方式。
關(guān)于Profiles配置,不清楚的直接看這里:iTerm2 Profiles 實現(xiàn) ssh 自動登錄遠程服務器。
密鑰相關(guān),也貼上鏈接??:騰訊云官方文檔-管理 SSH 密鑰
使用 SSH 登錄 Linux 實例

二、在服務器上安裝所需環(huán)境

我搭建的項目基于NodeJS+Express+MongoDB,所以安裝配置的是Node和Mongodb所需的相關(guān)環(huán)境。

1. 首先騰訊云默認提供的CentOS不是最新的,目前是7.6,我們一般都先升級一下CentOS
yum -y update

這里提一嘴,用yum指令升級有兩個參數(shù):updateupgrade,其實它們的功能基本都=是一樣的,都是將需要更新的package更新到源中的最新版。唯一不同的是,yum upgrade會刪除舊版本的package,而yum update則會保留(obsoletes=0)。

生產(chǎn)環(huán)境中建議使用yum update,防止因為被替換,導致舊的軟件包依賴出現(xiàn)問題。
升級完畢后,你可以查看下現(xiàn)在的版本,或者再執(zhí)行下升級操作試試,它會告訴你已經(jīng)No packages marked for update

cat /etc/redhat-release
2. 緊跟著一定要安裝新版本的gcc

我這邊安裝node到預編譯的時候報了個警告WARNING: C++ compiler (CXX=g++, 4.8.5) too old, need g++ 6.3.0 or clang++ 8.0.0,沒有處理,再執(zhí)行make就會報錯。CentOS7自帶的最高版本就是4.8.5,無法用yum升級得我們自己安裝。

2.1 完美升級gcc版本方法(萬分推薦這個,2.2手動編譯gcc真的可以跳過)

在某些應用場景中,需要特定的gcc版本支持,但是輕易不要去編譯gcc,這里推薦使用紅帽提供的開發(fā)工具包來管理gcc版本,這樣做的好處是隨時切換版本,并且可以并存多個版本,不破壞原有g(shù)cc環(huán)境。

# 安裝 centos-release-scl
yum install centos-release-scl
# 安裝devtoolset-9包 對應gcc9.x.x
yum install devtoolset-9
# 啟用激活gcc 9,這是臨時切換,退出shell或重啟就會恢復原系統(tǒng)gcc版本
scl enable devtoolset-9 bash
# 要長期使用的話執(zhí)行:
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile

至此就大功告成啦。

2.2 手動編譯安裝gcc
其實不推薦手動下載編譯,容易各種坑和報錯,最最主要的是非常耗時。我第一次用的是這個方法(真的虐你千百遍),加上已經(jīng)寫了還寫了這么多所以還是記錄在這里,以下是步驟:

(1)選擇需要升級的版本

gcc ftp 下載地址列表
(比如我選擇gcc-7.5.0)

(2)獲取安裝包并解壓

# 切換到/usr/local/src,這個目錄通常放軟件源碼
cd /usr/local/src
# 下載
wget https://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.gz
# 解壓
tar -zxvf gcc-7.5.0.tar.gz

(3)進入解壓后的gcc文件夾,下載供編譯需求的依賴項

cd gcc-7.5.0
# 下面這個命令會自動去下載所需的4個依賴包,這個過程會稍微有點費時間
./contrib/download_prerequisites

(4)新建一個編譯目錄,用來存放編譯文件

mkdir gcc-build-7.5.0
cd gcc-build-7.5.0

(5)執(zhí)行預編譯

/usr/local/gcc-7.5.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

(6)生成 Makefile 文件
在gcc-build-7.5.0目錄下執(zhí)行

make

這一步我又報錯了,g++: fatal error:Killed signal terminated program cc1plus,百度后得知原來騰訊云服務器默認沒有分配虛擬內(nèi)存,要自己分配一下。這邊直接上干貨:

#選擇swap文件要放置的位置,這邊我直接放在根目錄
cd / 
#獲取要增加的2G的swap文件塊
dd if=/dev/zero of=/swapfile bs=1k count=2048000
#創(chuàng)建swap文件
mkswap /swapfile 
#激活swap文件
swapon /swapfile   
# 執(zhí)行完這一步會報“不安全的權(quán)限 0644,建議使用 0600。”的警告,其實已經(jīng)激活了,可以忽略,如果要修改權(quán)限可以執(zhí)行下面這一命令:
chmod -R 0600 /swapfile
#查看swap信息是否正確
swapon -s  或者 free -m
#添加到fstab文件,讓系統(tǒng)啟動時自動啟用swap分區(qū)
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab

如果不再需要swap,可以清理該分區(qū):swapoff /swapfile,刪除rm -rf /swapfile
內(nèi)存分配完畢,繼續(xù)執(zhí)行make,這次不報錯了。但時間非常emmmmmm(以小時記),需要耐心,注意不要讓電腦進入休眠。。。
(7)終于能安裝gcc了

make install

(8)重啟服務器,檢查下我們有沒有安裝成功

gcc -v
版本更新了

折騰了這么久,歡欣鼓舞有木有!
然而,革命剛剛開始。。。不知道是不是版本太高(我自己嘗試的時候裝的最新版10.2.0),后面NodeJS安裝make又報錯,所以我想是不是CentOS默認的包都較低,兼容性不好,自定義編譯安裝時不要一味去找最高版本。

3. 安裝NodeJS(其實直接看3.2即可,比心??)
3.1手動編譯安裝(仍然不推薦)

雖然CentOS出于保證穩(wěn)定的目的,yum源的包版本都很低(低到和世界脫節(jié)的程度),但是我們有很多方式可解決,實現(xiàn)能不手動編譯make就不手動。只是我一開始沒找到其他好辦法,就如此操作了一遍.....愛折騰愛自虐的同學可以試試,不然直接跳過,謝謝??

cd /usr/local/src
#下載源碼版node
wget https://nodejs.org/dist/v14.15.1/node-v14.15.1.tar.gz
#下載完成后解壓
tar -xzvf node-v14.15.1.tar.gz
#編譯安裝,make過程稍長,稍作等待
cd node-v14.15.1
./configure --prefix=/usr/local/node/14.15.1
# -j4可以同時運行4個編譯,可以幫助減少編譯時間
make -j4
make install

prefix參數(shù)是配置安裝的路徑,如果不配置該選項,安裝后可執(zhí)行文件默認放在/usr/local/bin,庫文件默認放在/usr/local/lib,配置文件默認放在/usr/local/etc,其它的資源文件放在/usr/local/share,比較凌亂。
以上配置把node所有資源文件放在/usr/local/node/14.15.1的路徑中,方便統(tǒng)一查看管理。

誰能想到,到make這一步又報錯了。。。
/usr/local/src/node-v14.15.1/out/Release/icupkg: /lib64/libstdc++.so.6: versionCXXABI_1.3.9' not found (required by /usr/local/src/node-v14.15.1/out/Release/icupkg)
直接上解決方案:將gcc最新版本的動態(tài)庫替換系統(tǒng)中老版本的動態(tài)庫

#查找編譯gcc時生成的最新動態(tài)庫
find / -name "libstdc++.so*"
#將找到的動態(tài)庫libstdc++.so.6.0.28復制到/usr/lib64
cp /usr/local/src/gcc-build-10.2.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28 /usr/lib64
#切換工作目錄至/usr/lib64,刪除原來的軟連接, 將默認庫的軟連接指向最新動態(tài)庫。
cd /usr/lib64
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.28 libstdc++.so.6

make -j4 make install就可以了

3.2 推薦安裝NodeJS的方式

在有epel源的前提下,可以直接直接指定nodejs版本安裝。沒有就先安裝下yum install epel-release 安裝后用yum repolist查看源倉庫,可以看到epel有1萬多軟件包源。
不清楚版本和安裝指令可以查看這個node源碼(二進制發(fā)行版)文檔,它對應不同的平臺都有具體說明https://github.com/nodesource/distributions`

# 先設置要安裝的版本
curl -sL https://rpm.nodesource.com/setup_14.x | bash -
# 安裝
yum install nodejs -y
# 完成后查看下node版本
node -v
# 顯示是v14.15.1,成功!

我們還可以通過n安裝/切換nodejs版本,后續(xù)使用也極為方便。
n是nodeJS管理工具,是TJ寫的,Github: https://github.com/tj/n

# 清除下node緩存
npm cache clean -f # -f 等于 --force

# 安裝n
npm install -g n

# 安裝nodejs版本

# 安裝最新穩(wěn)定版
n stable

# 安裝最新版
n latest

# 安裝指定版本
n 14.15.1  

# 切換nodejs版本
n

# 選擇已安裝的版本

ο  node/14.15.1
   node/10.4.1

# 查看當前版本,查看是否切換成功
node -v

但問題來了,切換后發(fā)現(xiàn)還是原來的v6.16.0,別著急,緊跟著是 使用n切換NodeJS版本失效的解決辦法

# 查看 node 當前安裝路徑
which node
# /usr/local/bin/node # 舉個例子

n 默認安裝路徑是 /usr/local,若你的 node 不是在此路徑下,n 切換版本就不能把bin、lib、include、share 復制該路徑中,所以我們必須通過在環(huán)境變量添加/usr/local(node的實際安裝位置)。

# 編輯環(huán)境配置文件:
vim ~/.bash_profile
# 原來的
export PATH=$PATH:$HOME/bin
# 修改成
export PATH=$PATH:$HOME/bin:/usr/local/bin
# :wq保存退出后,執(zhí)行source使修改生效
source ~/.bash_profile

這時候再node -v就發(fā)現(xiàn)版本切換成功了。npm -v也是最新的了。

4. 安裝mongodb

官方推薦通過yum包管理器安裝,我基本是官網(wǎng)能找到相關(guān)文檔都盡量參考官網(wǎng),這樣比較靠譜,步驟如下:
(1)新建一個mongodb-org-4.2.repo文件,用vim打開編輯

vim /etc/yum.repos.d/mongodb-org-4.2.repo

復制如下內(nèi)容粘貼在里面,然后保存退出

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

(2)這樣配置完就可以用yum來安裝mongoDB了
安裝最新的穩(wěn)定版MongoDB

sudo yum install -y mongodb-org

或者,要安裝特定版本的MongoDB,請分別指定每個組件包,并將版本號附加到包名中,比如我裝的是4.2.11(最新的穩(wěn)定版)

sudo yum install -y mongodb-org-4.2.11 mongodb-org-server-4.2.11 mongodb-org-shell-4.2.11 mongodb-org-mongos-4.2.11 mongodb-org-tools-4.2.11

yum當有新版本可用時會升級軟件包。為防止意外升級,可以通過exclude參數(shù)在/etc/yum.conf文件中添加以下指令來固定包的版本:

exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools

(3)也可以自行下載.rpm文件來安裝
去mongoDB官網(wǎng)軟件下載中心找到MongoDB Community Server,根據(jù)自己的平臺(CentOS版本)選擇,復制下載鏈接

image.png

然后下載到某個文件夾,當然還有shell和tools等包,這里不一一示例了。

cd /usr/local
wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/x86_64/RPMS/mongodb-org-server-4.2.11-1.el7.x86_64.rpm

通過rpm指令安裝

rpm -ivh mongodb-org-server-4.2.11-1.el7.x86_64.rpm

(4)配置
默認情況下,MongoDB使用mongod用戶帳戶運行,并自動設定以下目錄存放指定文件:
/var/lib/mongo (數(shù)據(jù)目錄)
/var/log/mongodb (日志目錄)

要自定義配置可以編輯mongod.conf,比如修改默認的數(shù)據(jù)/日志目錄和端口號(強烈建議修改默認端口)等等。

vim /etc/mongod.conf

(5)啟動服務

/# 啟動mongoDB服務
sudo systemctl start mongod
# 驗證mongoDB是否成功啟動
sudo systemctl status mongod
# 確保mongoDB在系統(tǒng)開機后自動啟動
sudo systemctl enable mongod
# 停止服務
sudo systemctl stop mongod
# 重啟服務,修改完mongod.conf一定要重啟
sudo systemctl restart mongod

(6)使用mongo shell創(chuàng)建管理員/普通用戶賬戶后,在/etc/mongod.conf配置開啟安全驗證

security:
  authorization: enabled

未完待續(xù),下篇地址在此~ 在CentOS 7(騰訊云)部署node+mongodb服務器全過程(下)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容