服务器部署

服务器

服务器部署要点

实际上只需要:node,npm,pm2,nginx,mongodb,xshell,xftp就可以了

git主要作用就是把代码拉到服务器中,如果有服务器管理工具xftp等就不需要git也行

node是环境

mongodb是数据库

pm2是实现node服务进程管理,就算关机也可以自己再服务器上跑

nginx可以实现静态web文件部署,就是前端build后的文件直接放服务器就可以,不需要保持服务器本地启动程序

xshell用来连接服务器,当然服务器官网也可以做到

下载git工具

yum install git -y
  1. sshkey生成

    ssh-keygen -t rsa -b 4096 -C "616833273@qq.com"
    
  2. 查看公钥

    cat /root/.ssh/id_rsa.pub
    
  3. 再把公钥放入github/gitlib中

安装node,npm,nrm

  1. 安装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
    
    
    
  2. 安装nrm 切换安装源,且阿里云的

    npm install nrm -g
    // nrm切换taobao镜像
    nrm use taobao
    
    

安装docker

node项目,其实可以不用

  1. 安装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
    
    
    
    
  2. 阿里云加速

    // 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.csdn.net/qq_43531694/article/details/117123230

项目启动

  1. 通过git拉代码到服务器

  2. npm启动项目

  3. node得server

    // 初始化一个pakeage.json文件
    npm init -y
    
  4. 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的核心数目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值