太长了......为了不影响阅读体验决定分上下两篇,下篇链接:在CentOS 7(腾讯云)部署node+mongodb服务器全过程(下)
前提是你已经购买了服务器。
我电脑的操作系统是MacOS的,Windows下我没有实际操作,所以这边的步骤以MacOS为准。
一、首先在终端登录服务器
也可以在腾讯云-控制台-云服务器的实例里直接登录(官方有视频教程我这里不赘述了),但官方的网页版在线终端不是很方便,还是建议用自己电脑上的,我的是iTerm2,之后都是在这个上面操作的。十分推荐把默认端口修改一下(默认是22
),防止黑客攻击。官方文档贴在这里:修改云服务器远程默认端口
ssh root@188.131.142.151
// 修改过默认端口需要加上端口号
ssh root@188.131.142.151 -p 1234
// root 是腾讯云服务器默认的账号名,
// @后面是你的服务器公网 ip,比如 188.131.142.151
之后输入腾讯云站内信给我们的默认密码即可。
但每次输密码太麻烦了,这里推荐ssh用密钥登录结合配置终端Profile的方式。
关于Profiles配置,不清楚的直接看这里:iTerm2 Profiles 实现 ssh 自动登录远程服务器。
密钥相关,也贴上链接🔗:腾讯云官方文档-管理 SSH 密钥
使用 SSH 登录 Linux 实例
二、在服务器上安装所需环境
我搭建的项目基于
NodeJS+Express+MongoDB
,所以安装配置的是Node和Mongodb所需的相关环境。
1. 首先腾讯云默认提供的CentOS不是最新的,目前是7.6,我们一般都先升级一下CentOS
yum -y update
这里提一嘴,用yum指令升级有两个参数:update
和upgrade
,其实它们的功能基本都=是一样的,都是将需要更新的package更新到源中的最新版。唯一不同的是,yum upgrade
会删除旧版本的package,而yum update
则会保留(obsoletes=0)。
生产环境中建议使用yum update,防止因为被替换,导致旧的软件包依赖出现问题。
升级完毕后,你可以查看下现在的版本,或者再执行下升级操作试试,它会告诉你已经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
,没有处理,再执行make
就会报错。CentOS7自带的最高版本就是4.8.5,无法用yum升级得我们自己安装。
2.1 完美升级gcc版本方法(万分推荐这个,2.2手动编译gcc真的可以跳过)
在某些应用场景中,需要特定的gcc版本支持,但是轻易不要去编译gcc,这里推荐使用红帽提供的开发工具包来管理gcc版本,这样做的好处是随时切换版本,并且可以并存多个版本,不破坏原有gcc环境。
# 安装 centos-release-scl
yum install centos-release-scl
# 安装devtoolset-9包 对应gcc9.x.x
yum install devtoolset-9
# 启用激活gcc 9,这是临时切换,退出shell或重启就会恢复原系统gcc版本
scl enable devtoolset-9 bash
# 要长期使用的话执行:
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
至此就大功告成啦。
2.2 手动编译安装gcc
其实不推荐手动下载编译,容易各种坑和报错,最最主要的是非常耗时。我第一次用的是这个方法(真的虐你千百遍),加上已经写了还写了这么多所以还是记录在这里,以下是步骤:
(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)执行预编译
/usr/local/gcc-7.5.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
(6)生成 Makefile 文件
在gcc-build-7.5.0目录下执行
make
这一步我又报错了,g++: fatal error:Killed signal terminated program cc1plus
,百度后得知原来腾讯云服务器默认没有分配虚拟内存,要自己分配一下。这边直接上干货:
#选择swap文件要放置的位置,这边我直接放在根目录
cd /
#获取要增加的2G的swap文件块
dd if=/dev/zero of=/swapfile bs=1k count=2048000
#创建swap文件
mkswap /swapfile
#激活swap文件
swapon /swapfile
# 执行完这一步会报“不安全的权限 0644,建议使用 0600。”的警告,其实已经激活了,可以忽略,如果要修改权限可以执行下面这一命令:
chmod -R 0600 /swapfile
#查看swap信息是否正确
swapon -s 或者 free -m
#添加到fstab文件,让系统启动时自动启用swap分区
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
如果不再需要swap,可以清理该分区:swapoff /swapfile
,删除rm -rf /swapfile
内存分配完毕,继续执行make
,这次不报错了。但时间非常emmmmmm(以小时记),需要耐心,注意不要让电脑进入休眠。。。
(7)终于能安装gcc了
make install
(8)重启服务器,检查下我们有没有安装成功
gcc -v
折腾了这么久,欢欣鼓舞有木有!
然而,革命刚刚开始。。。不知道是不是版本太高(我自己尝试的时候装的最新版10.2.0),后面NodeJS安装make又报错,所以我想是不是CentOS默认的包都较低,兼容性不好,自定义编译安装时不要一味去找最高版本。
3. 安装NodeJS(其实直接看3.2即可,比心❤️)
3.1手动编译安装(仍然不推荐)
虽然CentOS出于保证稳定的目的,yum源的包版本都很低(低到和世界脱节的程度),但是我们有很多方式可解决,实现能不手动编译
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参数是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share,比较凌乱。
以上配置把node所有资源文件放在/usr/local/node/14.15.1的路径中,方便统一查看管理。
谁能想到,到make这一步又报错了。。。
/usr/local/src/node-v14.15.1/out/Release/icupkg: /lib64/libstdc++.so.6: version
CXXABI_1.3.9' not found (required by /usr/local/src/node-v14.15.1/out/Release/icupkg)
直接上解决方案:将gcc最新版本的动态库替换系统中老版本的动态库
#查找编译gcc时生成的最新动态库
find / -name "libstdc++.so*"
#将找到的动态库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,删除原来的软连接, 将默认库的软连接指向最新动态库。
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源码(二进制发行版)文档,它对应不同的平台都有具体说明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版本,后续使用也极为方便。
n是nodeJS管理工具,是TJ写的,Github: https://github.com/tj/n
# 清除下node缓存
npm cache clean -f # -f 等于 --force
# 安装n
npm install -g n
# 安装nodejs版本
# 安装最新稳定版
n stable
# 安装最新版
n latest
# 安装指定版本
n 14.15.1
# 切换nodejs版本
n
# 选择已安装的版本
ο node/14.15.1
node/10.4.1
# 查看当前版本,查看是否切换成功
node -v
但问题来了,切换后发现还是原来的v6.16.0,别着急,紧跟着是 使用n切换NodeJS版本失效的解决办法
# 查看 node 当前安装路径
which node
# /usr/local/bin/node # 举个例子
n 默认安装路径是 /usr/local,若你的 node 不是在此路径下,n 切换版本就不能把bin、lib、include、share 复制该路径中,所以我们必须通过在环境变量添加/usr/local(node的实际安装位置)。
# 编辑环境配置文件:
vim ~/.bash_profile
# 原来的
export PATH=$PATH:$HOME/bin
# 修改成
export PATH=$PATH:$HOME/bin:/usr/local/bin
# :wq保存退出后,执行source使修改生效
source ~/.bash_profile
这时候再node -v
就发现版本切换成功了。npm -v
也是最新的了。
4. 安装mongodb
官方推荐通过yum包管理器安装,我基本是官网能找到相关文档都尽量参考官网,这样比较靠谱,步骤如下:
(1)新建一个mongodb-org-4.2.repo文件,用vim打开编辑
vim /etc/yum.repos.d/mongodb-org-4.2.repo
复制如下内容粘贴在里面,然后保存退出
[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了
安装最新的稳定版MongoDB
sudo yum install -y mongodb-org
或者,要安装特定版本的MongoDB,请分别指定每个组件包,并将版本号附加到包名中,比如我装的是4.2.11(最新的稳定版)
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参数在/etc/yum.conf
文件中添加以下指令来固定包的版本:
exclude=mongodb-org,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
(3)也可以自行下载.rpm文件来安装
去mongoDB官网软件下载中心找到MongoDB Community Server,根据自己的平台(CentOS版本)选择,复制下载链接
然后下载到某个文件夹,当然还有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
(数据目录)
/var/log/mongodb
(日志目录)
要自定义配置可以编辑mongod.conf
,比如修改默认的数据/日志目录和端口号(强烈建议修改默认端口)等等。
vim /etc/mongod.conf
(5)启动服务
/# 启动mongoDB服务
sudo systemctl start mongod
# 验证mongoDB是否成功启动
sudo systemctl status mongod
# 确保mongoDB在系统开机后自动启动
sudo systemctl enable mongod
# 停止服务
sudo systemctl stop mongod
# 重启服务,修改完mongod.conf一定要重启
sudo systemctl restart mongod
(6)使用mongo shell
创建管理员/普通用户账户后,在/etc/mongod.conf
配置开启安全验证
security:
authorization: enabled
未完待续,下篇地址在此~ 在CentOS 7(腾讯云)部署node+mongodb服务器全过程(下)