一.购买阿里云服务器
首先我们进入 阿里云官网,在产品一栏中找到云服务器ECS。
购买一台适合自己的服务器,付款后进入主页面右上角的控制台。
在控制台中左侧栏找到云服务器ECS。
在云服务器ECS控制台的左侧栏找到实例一项,就可以看到我们之前购买的服务器了,同时也能看到服务器的公网ip。
点进服务器可以看到服务器的详细信息。如果在购买过程中没有要求设置密码的话,可以在详细信息中的重置实例密码来为服务器设置密码。
二.远程连接
我们通过Xshell来远程连接linux服务器。同时我们也要下载配套的Xftp用来向服务器传输文件。
打开Xshell,在弹出的窗口中选择新建。
在名称一栏中自定义该服务器在Xshell中的名称,在主机一栏填上控制台中的公网ip地址。
然后在左边栏选择用户身份验证,右边的方法选择 Password。用户名默认为root,密码为刚才在阿里云控制台设置的密码。
上面设置好后连接到服务器,当出现欢迎字样时说明已经成功连接到阿里云服务器了。
三.安装Node.JS
首先,进入Node.JS的官网查找之前项目的对应版本,以我使用的版本v14.15.0为例,进入对应路径,找到xz结尾的linux文件,右键复制其下载链接地址。
进入Xshell,连接服务器,下载刚才找到的Node链接对应的压缩文件。
输入
wget https://nodejs.org/dist/v14.15.0/node-v14.15.0-linux-x64.tar.xz
后面的链接可以换成刚才找到的对应版本的链接。
等待下载,下载好之后解压缩该文件。
tar xvf node-v14.15.0-linux-x64.tar.xz
这时通过Xshell上面的新建文件传输自动打开打开Xftp。
Xftp界面的左侧为你的电脑文件目录,右侧为服务器文件目录。
我们可以看到node文件是默认下载到根目录下root目录中的。这时可以直接对解压缩的文件夹改成更简单的名字(比如在这里我改成了node),方便后续操作。
接下来,我们要配置环境变量,设置软链接。
ln -s /root/node/bin/node /usr/local/bin/node
ln -s /root/node/bin/npm /usr/local/bin/npm
前一个地址为刚才解压缩文件的地址,根据自己实际情况进行更换。
执行之后,检测环境变量是否配置成功,在任意目录下执行
node -v
npm -v
若出现对应的版本号,则证明环境变量配置成功。
下面配置npm的淘宝镜像,执行
npm config set registry https://registry.npm.taobao.org
这时,我们的node就算配置完成。可以试试从Xftp中拖入一个Nodejs的文件到根目录下的home目录(网页服务器默认在/home下存放网页文件),然后在命令行中用node命令来启动。
node /home/app.js
这时我们可以在浏览器上输入公网IP+端口号来进行访问。
你可能发现此时在输入链接后服务器并没有响应数据,这是因为阿里云默认没有将端口开放出去,我们此时要到阿里云控制台手动开放js文件中的对应端口。
进入阿里云控制台,在实例一栏中选择服务器—更多—网络和安全组—安全组配置
选择服务器的配置规则。
点击手动添加。
在弹出来的一栏中配置端口开放。其中,目的里面输入你要开放的端口号(例如3000,5000等),在源中选择的默认第一个0.0.0.0/0,描述中可以备注你开放这个端口号的用途,方便日后查找。设置完后点击右面的保存。
再次在浏览器地址中输入公网IP+端口号就可以看到Node.JS相应的信息了。
我们的服务器可能不只同时运行一个服务,如果用node启动的话服务器就会进入等待状态,直到中断当前服务才能开启下一个服务。所以我们需要一个工具pm2来帮助我们持续运行多服务的Node.JS项目。
执行
npm i pm2 -g
来安装pm2。
安装完成之后,我们也可以通过软链接来配置pm2的环境变量。
ln -s /root/node/bin/pm2 /usr/local/bin/pm2
这时我们在对应目录下执行
pm2 start app.js --name testserver
来启动一个node项目。其中参数name是自定义此项目在pm2运行时的名称。运行成功后,我们可以看到一个列表,里面列出了正在同时运行的Node.JS的项目状态。(更多pm2命令可以参照此页面)
我们再次在浏览器输入公网IP+对应端口号来测试pm2启动的项目是否运行成功。
4.安装MongoDB
我们进入MongoDB的官网,找到Community Server。
选择On-premises,下面右侧选择对应的版本和系统。
我这里以CentOS 8举例,第三项文件格式一定要选择tgz而不是shell(tgz),然后点击下方的Copy Link获取对应版本的下载链接。
此时我们回到Xshell,打开目录到/usr/local路径下。
cd /usr/local
下载MongoDB压缩包。
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.4.4.tgz
对压缩包进行解压缩.
tar zxvf mongodb-linux-x86_64-rhel80-4.4.4.tgz
然后将解压缩的文件夹改成较短的名字(我这里改成了mongodb)
下面在 /var 目录下创建存储数据和日志的目录。
mkdir -p /var/mongodb/data
mkdir -p /var/mongodb/logs
同时也要创建日志文件和MongoDB的启动配置文件。
touch /var/mongodb/logs/log.log
touch /var/mongodb/mongodb.conf
下面添加CentOS开机启动
执行
chmod +x /etc/rc.d/rc.local
打开rc.local文件追加内容。
vi /etc/rc.d/rc.local
此时进入文本模式,按i键进入编辑模式,在touch命令的下一行追加
/usr/local/mongodb/bin/mongod --dbpath=/var/mongodb/data --logpath /var/mongodb/logs/log.log -fork
按esc退出编辑模式,输入:wq保存并退出该文件。
下面配置mongodb.conf文件。
用vim打开conf文件
vim /var/mongodb/mongodb.conf
在其中加入
dbpath = /var/mongodb/data
logpath = /var/mongodb/logs/log.log
logappend = true
port = 27017
fork = true
auth = true
之后保存并退出。
(我们可以看到配置的端口号为27017,如果我们想要远程连接该服务器上的数据库,就要去阿里云控制台打开27017端口。)
然后配置path
用vim打开path
vim ~/.bashrc
在文件最后追加
export PATH=$PATH:/usr/local/mongodb/bin
保存并退出
执行
source ~/.bashrc
来保存设置。
下面我们启动MongoDB服务
执行
mongod --config /var/mongodb/mongodb.conf
若出现successfully字样说明MongoDB成功启动。
因为我们要保证数据安全,于是我们需要进行远程加密。
首先添加账号密码,执行mongo
进入数据库的命令行界面,执行
use admin
db.createUser({user:"自定义账户名",pwd:"自定义密码",roles:["root"]})
exit
注意创建完用户后输入exit
退出MongoDB命令行。
然后我们需要关闭MongoDB服务并在启动一次。
在linux命令行执行
mongod -shutdown -dbpath=/var/mongodb/data
mongod --config /var/mongodb/mongodb.conf
然后我们执行mongo
进入MongoDB命令行,尝试登入账户。
执行
use admin
db.auth("刚才自定义的用户名","刚才自定义的密码")
若输出1,则代表连接成功。
5.修改项目文件
此时我们要将本地的项目放到服务器上需要进行一点代码修改。
1.将项目的相对路径./尽量换成动态路径__dirname
因为相对路径./
是针对执行node命令的目录来说的,所以如果你不在项目目录下开启node服务而直接用绝对路径开启项目服务的话是会出错的,所以为了避免出现此类情况要将相对路径全部替换。
2.修改MongoDB的连接方式
Node.JS的连接MongoDB代码由于运行在是在有账户的服务器中,所以要加上相关参数。
下面以mongoose来举例,原生MongoDB的代码也照此
作相应更改。
mongoose.connect('mongodb://test:123456@localhost:27017/question?authSource=admin')
这里我之前设置的服务器上的MongoDB的账户名为test,密码为123456,端口号为27017,连接的集合为question
所以通用格式为
mongodb://用户名:密码@localhost:端口号/集合名称?authSource=admin
6.上传项目文件
通过Xftp将本地项目文件上传到 /home
目录下,通过pm2启动项目,在浏览器上输入公网IP+端口号就可以看到之前的本地Node.JS项目已经成功运行在阿里云服务器上了。