美文网首页
在CentOS 7(腾讯云)部署node+mongodb项目全过

在CentOS 7(腾讯云)部署node+mongodb项目全过

作者: AizawaSayo | 来源:发表于2020-11-25 11:10 被阅读0次

    太长了......为了不影响阅读体验决定分上下两篇,下篇链接:在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指令升级有两个参数:updateupgrade,其实它们的功能基本都=是一样的,都是将需要更新的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: versionCXXABI_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版本)选择,复制下载链接

    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 (数据目录)
    /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服务器全过程(下)

    相关文章

      网友评论

          本文标题:在CentOS 7(腾讯云)部署node+mongodb项目全过

          本文链接:https://www.haomeiwen.com/subject/xuhbiktx.html