纯小白nodejs+mongdb项目在云服务器部署初体验
关于服务器部署方面完全小白,最近也想整一个服务器摸索一下,顺便搞个小项目练练手,于是整了一个服务器,小白日常记录:
一、小白篇
进入腾讯云服务器--实例
操作设备 mac
1.1、安装nginx和httpd
输入密码
进入根目录cd /
安装nginx和httpd
yum install nginx
yum install httpd
进入目录/usr/share/nginx/html
touch test2.html新建文件
vi test2.html编辑文件
退出保存:wq
然后
注意一开始nginx默认放在/usr/share/nginx/html下面
要想放在其他的目录需要修改配置文件:
查找配置文件目录
find path -name nginx.conf(find 目录 -name 文件名)
nginx -t
1.2、启动
which nginx
/usr/sbin/nginx 目录下执行./nginx 启动
ps -ef|grep nginx 查看是否执行
/etc/init.d/nginx status 查看状态
/etc/init.d/nginx 启动
start stop reload (启动、停止、重启)
1.3、知识补充
文档:
http://nginx.org/en/docs/
Nginx教程(二) Nginx虚拟主机配置
https://www.cnblogs.com/crazylqy/p/6891954.html
Vim的6种基本模式及基本操作
https://www.cnblogs.com/shiyanlou/archive/2017/09/05/7478346.html
二、nodejs+mongdb项目在云服务器部署
2.1、node安装
打开官网鼠标右键复制的链接
一种方法:
https://nodejs.org/en/download/
下载
wget -c https://nodejs.org/dist/v12.16.2/node-v12.16.2.tar.gz
解压:
tar -zxvf node-v12.16.2.tar.gz
进入文件夹:
cd node-v12.16.2
在编译代码之前,还需要在机器上安装一些软件包,使得编译可以正常运行:
sudo yum install gcc gcc-c++
对源代码进行配置:
./configure
进行编译:
make
安装:
sudo make install
安装完成后,可以输入命令 node -v
然而 Nodejs 在编译的时候往往需要花费较多的时间,在配置较低的服务器上编译则需要更久。所以对于配置较低的服务器,我更推荐下面的方法,利用已编译的二进制文件安装 Nodejs 。
第二种方法:
直接使用已编译好的包
Node 官网已经把 linux 下载版本更改为已编译好的版本了,我们可以直接下载解压后使用
打开https://nodejs.org/dist/latest-v12.x/
tar -xvf node-v12.16.2-linux-x64.tar.zx
进入解压的node文件夹
cd node-v12.16.2-linux-x64
创建链接
ln -s /root/node-v12.16.2-linux-x64/bin/node /usr/local/bin/node ln -s /root/node-v12.16.2-linux-x64/bin/npm /usr/local/bin/npm
查看 node, npm 版本
node -v
npm -v
安装node.js本版管理工具
npm install -g n
参考https://github.com/tj/n
2.2、mongdb安装
打开这个链接选择你需要的本版
https://www.mongodb.com/download-center/community
下载安装包
cd /usr/local wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.4.tgz
解压安装包,重命名文件夹为 mongodb
tar -zxvf mongodb-linux-x86_64-4.0.4.tgz mv mongodb-linux-x86_64-3.0.6 mongodb
建立日志文件夹
mkdir /var/mongodb mkdir /var/mongodb/data mkdir /var/mongodb/logs
cd usr/local/mongodb/bin
启动 ./mongod
如果报错server版本与shell2版本不一致,需要退出再重新进来
然后又会报错,如下
MongoDB shell version v4.0.4 connecting to: mongodb://127.0.0.1:27017 [js] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException: Error connecting to 127.0.0.1:27017 :: caused by :: No connection could be made because the target machine actively refused it. : connect@src/mongo/shell/mongo.js:257:13 @(connect):1:6 exception: connect failed
如下解决:
设备 Mac 1 - first open the terminal as root. sudo bash 2 - make db folder mkdir -p /data/db 3 - give the chmod 777 to the directory. chmod 777 /data chmod 777 /data/db 4 - confirm the /data/db is 777 ls -ld /data/db 5 - exit the root shell 6 - run the mongod cmd at mongodb_path/bin directory. mongod make sure it is listing port. By default, it listens to the 27017 port. 7- open the new terminal window and run the mongo cmd at mongodb_path/bin directory. mongo
在bin如果启动mongod报错的话用./mongod试试
在/etc/rc.local文件里配置我们需要开机启动的服务rc.local 文件,添加 CentOS 开机启动项
/usr/local/mongodb/bin/mongod --dbpath=/var/mongodb/data --logpath /var/mongodb/logs/log.log -fork
启动 mongodb
/usr/local/mongodb/bin/mongod --dbpath=/var/mongodb/data --logpath /var/mongodb/logs/log.log -fork
链接参考文档:
https://stackoverflow.com/questions/13312358/mongo-couldnt-connect-to-server-127-0-0-127017
https://stackoverflow.com/questions/51812931/does-not-start-mongodb-4?answertab=votes#tab-top
2.3、安装git
使用 yum 安装(推荐。这个安装方便),安装后可直接使用
yum install git
安装同node,版本链接如下
https://mirrors.edge.kernel.org/pub/software/scm/git/
安装 git 的时候你可能还需要安装 curl-devel
yum install curl-devel
你还需要生成一个 key 用于git的识别
生成 sshkey,敲三次回车即可
ssh-keygen -t rsa -C"xxxxx@xxxxx.com"
查看你的 public key,并把他添加到github
cat ~/.ssh/id_rsa.pub
直接 建一个文件夹
git clone https://github.com/你的地址.git.
启动你的项目别忘了npm install
效果如下:
2.4、安装pm2 通过pm2配置文件来自动部署项目
这个依赖是可以在服务器上面运行node项目的,相比于原生的node启动的文件
npm install -g pm2
设置软链
# 设置软链 ln -s node的具体路径/bin/pm2 /usr/local/bin/pm2
在项目根目录下新建一个 deploy.yaml 文件
# deploy.yaml apps: - script: ./start.js # 入口文件 name: 'app' # 程序名称 env: # 环境变量 COMMON_VARIABLE: true env_production: NODE_ENV: production deploy: # 部署脚本 production: # 生产环境 user: lentoo # 服务器的用户名 host: 192.168.2.166 # 服务器的ip地址 port: 22 # ssh端口 ref: origin/master # 要拉取的git分支 ssh_options: StrictHostKeyChecking=no # SSH 公钥检查 repo: https://github.com/**.git # 远程仓库地址 path: /home # 拉取到服务器某个目录下 pre-deploy: git fetch --all # 部署前执行 post-deploy: npm install && pm2 reload deploy.yaml --env production # 部署后执行 env: NODE_ENV: production
使用pm2部署项目
每次部署前先将本地的代码提交到远程git仓库
首次部署
pm2 deploy deploy.yaml production setup
再次部署
pm2 deploy deploy.yaml production update
该部署流程同样适用前端项目
如vue-cli的项目,自动部署到服务器,自动执行npm run build 命令,生成的dist目录,指定到nginx的静态文件目录下。
PM2 的主要特性
内建负载均衡(使用 Node cluster 集群模块)
后台运行
0 秒停机重载,我理解大概意思是维护升级的时候不需要停机.
具有 Ubuntu 和 CentOS 的启动脚本
停止不稳定的进程(避免无限循环)
控制台检测
提供 HTTP API
远程控制和实时的接口 API ( Nodejs 模块,允许和 PM2 进程管理器交互 )
#启动 pm2 start xxx.js #停止 (AppName|id) 如下放图 pm2 stop (AppName|id)
2.5、解决ssh登录后闲置时间过长而断开连接
修改sshd_config配置文件
cd / vim /etc/ssh/ssh_config
找到下面两行打开注释,并修改你想要的时间
ClientAliveInterval 30 #客户端每隔多少秒向服务发送一个心跳数据 ClientAliveCountMax 69120 #客户端多少秒没有相应,服务器自动断掉连接
重启sshd服务
service sshd restart(service sshd reload )
2.6、安装Tmux,即使服务断了,网站还是可以访问的
2.6.1、Tmux是什么?
Tmux是一个终端多用复用器,可以替代GNU屏幕。启动一个Ymux会话,然后在该会话中打开多个窗口。每个窗口占据整个屏幕可以分割成矩形窗格。
2.6.2、Tmux主要是用处
1、使用Tmux可以轻松的在一个终端的多个程序进行切换将他们分离链接到不同的的终端
2、Tmux会话是持久性的,即使断开连接,在TMux运行的程序也将继续运行
2.6.3、安装Tmux
你可以使用发行版的包管理器轻松安装TMux:
Installing Tmux on Ubuntu and Debian
sudo apt install tmux
Installing Tmux on CentOS and Fedora
sudo yum install tmux
Installing Tmux on macOS
brew install tmux
我用的是 CentOS系统所以
sudo yum install tmux -y
启动Tmux
tmux
Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是Ctrl+b,即先按下Ctrl+b,快捷键才会生效。
举例来说,帮助命令的快捷键是Ctrl+b ?。它的用法是,在 Tmux 窗口中,先按下Ctrl+b,再按下?,就会显示帮助信息。
然后,按下 ESC 键或q键,就可以退出帮助。
会话管理命令
#新建会话-第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推 tmux new -s <session-name> #分离会话-在Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。 tmux detach #tmux ls命令可以查看当前所有的 Tmux 会话。 tmux ls 或者 tmux list-session #接入会话 # 使用会话编号 tmux attach -t 0 # 使用会话名称 tmux attach -t <session-name> #杀死会话 tmux kill-session命令用于杀死某个会话。 # 使用会话编号 tmux kill-session -t 0 # 使用会话名称 tmux kill-session -t <session-name> #切换会话 tmux switch命令用于切换会话 # 使用会话编号 tmux switch -t 0 # 使用会话名称 tmux switch -t <session-name> #重命名会话-tmux rename-session命令用于重命名会话 tmux rename-session -t 0 <new-name>
窗口操作命令查询
#划分窗格- tmux split-window命令用来划分窗格 # 划分上下两个窗格 tmux split-window # 划分左右两个窗格 tmux split-window -h #移动光标-tmux select-pane命令用来移动光标位置。 # 光标切换到上方窗格 tmux select-pane -U # 光标切换到下方窗格 tmux select-pane -D # 光标切换到左边窗格 tmux select-pane -L # 光标切换到右边窗格 tmux select-pane -R # 交换窗格位置-tmux swap-pane命令用来交换窗格位置。 # 当前窗格上移 $ tmux swap-pane -U # 当前窗格下移 $ tmux swap-pane -D
了解更多:
https://linuxize.com/post/getting-started-with-tmux/
https://www.youtube.com/watch?v=BHhA_ZKjyxo&feature=youtu.be
待更新