服务器
服务器部署要点
实际上只需要:node,npm,pm2,nginx,mongodb,xshell,xftp就可以了
git主要作用就是把代码拉到服务器中,如果有服务器管理工具xftp等就不需要git也行
node是环境
mongodb是数据库
pm2是实现node服务进程管理,就算关机也可以自己再服务器上跑
nginx可以实现静态web文件部署,就是前端build后的文件直接放服务器就可以,不需要保持服务器本地启动程序
xshell用来连接服务器,当然服务器官网也可以做到
下载git工具
yum install git -y
-
sshkey生成
ssh-keygen -t rsa -b 4096 -C "616833273@qq.com"
-
查看公钥
cat /root/.ssh/id_rsa.pub
-
再把公钥放入github/gitlib中
安装node,npm,nrm
-
安装node可以找更好得,安装nvm,
最好装14或者8,稳定node-sass不易报错(服务器本地跑前端项目的时候)
1.下载 wget https://cdn.npm.taobao.org/dist/node/v12.13.1/node-v12.13.1-linux-x64.tar.xz 2.解压: xz -d node-v12.13.1-linux-x64.tar.xz tar -xvf node-v12.13.1-linux-x64.tar 3.移动 mv node-v12.13.1-linux-x64 /usr/local/ 4.重命名 mv /usr/local/node-v12.13.1-linux-x64/ /usr/local/node 5.编辑配置文件 vim /etc/profile 6.文件末尾增加内容,按 i 命令,进行新增 export NODE_HOME=/usr/local/node export PATH=$NODE_HOME/bin:$PATH ps:内容新增后,先按esc键,退出插入模式,然后按住shift键,并连按两次z字符, 即可保存刚才的编辑并退出vim编辑状态 7.执行source才能使环境变量立即有效 source /etc/profile 安装成功后,查看对应版本信息 node -v npm js
-
安装nrm 切换安装源,且阿里云的
npm install nrm -g // nrm切换taobao镜像 nrm use taobao
安装docker
node项目,其实可以不用
-
安装docker
// 安装工具 yum install -y yum-utils device-mapper-persistent-data lvm2 // 指定安装源 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
阿里云加速
// tee就是往这个文件里面写 tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://fwvjnv59.mirror.aliyuncs.com"] } EOF // 重载所有修改过的配置文件 systemctl daemon-reload systemctl restart docker
安装mongoDB
菜鸟教程:https://www.runoob.com/mongodb/mongodb-linux-install.html
// 安装包 https://www.mongodb.com/download-center#community
这里找,安装那个版本,那种服务器
1. wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz # 下载
2. tar -zxvf mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz #解压
3. mv mongodb-src-r4.2.8 /usr/local/mongodb4 # 将解压包拷贝到指定目录
MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:
export PATH=<mongodb-install-directory>/bin:$PATH
<mongodb-install-directory> 为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb4 。
4. export PATH=/usr/local/mongodb4/bin:$PATH
默认情况下 MongoDB 启动后会初始化以下两个目录:
数据存储目录:/var/lib/mongodb
日志文件目录:/var/log/mongodb
我们在启动前可以先创建这两个目录并设置当前用户有读写权限:
5. sudo mkdir -p /var/lib/mongo
6. sudo mkdir -p /var/log/mongodb
7. sudo chown `whoami` /var/lib/mongo # 设置权限
8. sudo chown `whoami` /var/log/mongodb # 设置权限
接下来启动 Mongodb 服务:
9. mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
然后启动mongo终端
10. cd /usr/local/mongodb4/bin
11. ./mongo
使用本地mongodb-compass去连接服务器得mongodb
这里连接超时的话,需要在腾讯云配置安全组https://console.cloud.tencent.com/cvm/securitygroup
添加一个开放端口,27017 这是mongodb默认端口
这一段是不是必须,暂时未求证...............
外网访问需要关闭防火墙:
CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。
如果是centos8就不知道了,可以后续验证。
关闭firewall:
1. systemctl stop firewalld.service #停止firewall
2. systemctl disable firewalld.service #禁止firewall开机启动
然后compass中 点击 Fill in connection fields individually
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dts9qdXj-1669304803410)(C:\Users\61683\AppData\Roaming\Typora\typora-user-images\image-20220330011943870.png)]
选择More Options
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQZqK4qn-1669304803412)(C:\Users\61683\AppData\Roaming\Typora\typora-user-images\image-20220330012024371.png)]
使用SSH 的Use Password
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TViwJ66n-1669304803413)(C:\Users\61683\AppData\Roaming\Typora\typora-user-images\image-20220330012058209.png)]
报错:socket is closed,这有可能是日志满了导致的
比较粗暴的解决方法是删除了mongodb的存储data与日志的文件
然后重新创建,再重新关联 ,再重新启动
sudo mkdir -p /var/lib/mongo
sudo mkdir -p /var/log/mongodb
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
有可能还会报错:mongod command is no find
export PATH=/usr/local/mongodb4/bin:$PATH
重新把mongodb的bin加入环境变量
然后再
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
文献来自:
https://blog.youkuaiyun.com/qq_43531694/article/details/117123230
项目启动
-
通过git拉代码到服务器
-
npm启动项目
-
node得server
// 初始化一个pakeage.json文件 npm init -y
-
npm node-sass的时候可能失败
npm install --unsafe-perm node-sass
nginx
nginx的三大主要功能之一(静态web服务器、反向代理、负载均衡)
nginx安装
创建nginx目录,在/usr/local/nginx
1. cd /usr/local
2. mkdir nginx
下载并解压nginx
3. cd /usr/local/nginx
4. wget https://nginx.org/download/nginx-1.18.0.tar.gz
5. tar -zxvf nginx-1.18.0.tar.gz
进入安装包目录
6. cd /usr/local/nginx/nginx-1.18.0
编译安装nginx,默认安装到 /usr/local/nginx中
7. ./configure
8. make
9. make install
进入到usr/local/nginx/sbin 目录,启动nginx
10. ./nginx
查看启动的nginx进程
11. ps -ef|grep nginx
查看是否可以访问
12. curl localhost:80
出现html脚本代表可以访问成功
然后就可以配置nginx.conf文件
cd /usr/loacal/nginx/conf
vim nginx.conf
再打包前端项目,丢紧nginx的目标目录中
实现nginx 静态Web文件部署
# 意思就是,监听175.178.216.236:9001 ,如果/就打开root ,如果有/srSystem 就代理到这个上:http://127.0.0.1:8000 请求就会变成http://127.0.0.1:8000/srSystem/....
http:{
server:{
listen 9001;
server_name 175.178.216.236; #域名解析
location / {
# 把文件放在/usr/local/nginx/html/dist这里
root /usr/local/nginx/html/dist;
index index.html index.htm;
}
# 这里的/srSystem/ 格式不能错,接口固定字段前后需要带/
# 实际接口是 /srSystem/fish/getQuestion
# 实际前端请求 http://175.178.216.236:9001/srSystem/fish/getQuestion
# 如果直接在url请求接口,出现nginx字眼!! 代表nginx已经运行,但是location的规格有问题,大部分都是上述的情况。
location /srSystem/ {
#代理转发到后台服务接口,注意后面英文分号;不要少了
proxy_pass http://127.0.0.1:8000;
}
#location位置只有在相同的匹配项中才会按顺序执行第一个
完整nginx文件
# 完整nginx文件
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 9001;
server_name 175.178.216.236; #域名解析
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/local/nginx/html/dist;
index index.html index.htm;
}
location /srSystem/ {
#代理转发到后台服务接口,注意后面英文分号;不要少了
proxy_pass http://127.0.0.1:8000;
}
location @router{
#rewrite ^.*/index.html last;
rewrite ^(.+)$ /index.html last;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
pm2
使用目的
使用pm2来管理node进程
效果:不需要本机一直连接着服务器且在服务器上保持进程 既使用:node index.js启动node服务
挂载的pm2上,进行管理。
安装pm2
把pm2安装到全局中
npm install pm2 -g # 命令行安装 pm2
用法
# 可以先cd到node服务所在文件夹
pm2 start app.js --name my-api # 命名进程
pm2 list # 显示所有进程状态
pm2 monit # 监视所有进程
pm2 logs # 显示所有进程日志
pm2 stop all # 停止所有进程
pm2 restart all # 重启所有进程
pm2 reload all # 0秒停机重载进程 (用于 NETWORKED 进程)
pm2 stop 0 # 停止指定的进程
pm2 restart 0 # 重启指定的进程
pm2 startup # 产生 init 脚本 保持进程活着
pm2 web # 运行健壮的 computer API endpoint (http://localhost:9615)
pm2 delete 0 # 杀死指定的进程
pm2 delete all # 杀死全部进程
pm2 start app.js -i 4 #后台运行pm2,启动4个app.js
# 也可以把'max' 参数传递给 start
# 正确的进程数目依赖于Cpu的核心数目