最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 教你如何在服务器部署前后端分离项目

    正文概述 掘金(alanyf)   2021-02-07   601

    一、简介

    文章结构:

    • 介绍nginx配置
    • 编写脚本实现一键发布
    • 如何使用 pm2 部署 node 服务

    思路:

    将 nginx 作为静态资源服务器托管html、css、js图片等静态文件,然后将满足某些条件的ajax请求代理转发到后端服务上。即可实现前后端项目的部署。

    由于前后端分离模式下,前后端各自部署自己的项目,前端发送的请求到后端某一端口的服务会产生跨域,因此通过Nginx设置转发来解决跨域问题。

    二、nginx配置

    如果对nginx不太熟悉的同学可以参考我的另外一篇文章: 前端需要了解的Nginx知识

    • 这里直接贴出 Nginx 配置
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        access_log  /usr/local/etc/nginx/logs/access.log;  #nginx请求日志地址
        sendfile        on;
        keepalive_timeout  65;
        server {
            listen       80;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
            # 前端
            location /blog {
                root /data/sites/;
                autoindex on;
                expires 30d; # 缓存30天
                if (!-e $request_filename) {
                    rewrite ^/(.*) /blog/index.html;
                }
            }
            # 后端,只转发 /blog/api 开头的请求
    	location /blog/api {
                proxy_pass  http://127.0.0.1:3000;
                proxy_redirect     off;
                proxy_set_header   Host             $host;        # 传递域名
                proxy_set_header   X-Real-IP        $remote_addr; # 传递ip
                proxy_set_header   X-Scheme         $scheme;      # 传递协议
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            }
            # redirect server error pages to the static page /50x.html
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    

    三、一个命令部署前端静态资源

    # 直接运行脚本
    sh publish.sh
    
    # 在项目中配置启动脚本后就可以使用 npm 启动
    "scripts": {
        "publish": "sh build/publish.sh"
    }
    npm run publish
    
    • publish.sh
    #!/bin/bash
    branch_name=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
    publishFolder='/data/sites/blog' # nginx目标目录
    echo On branch: $branch_name
    # 发布函数
    fun_publish () {
        echo '\n2. start publish...'
        if [ ! -d $publishFolder ];
            then sudo mkdir -p $publishFolder
        fi
        # 递归覆盖拷贝
        sudo cp -f -r 'dist/.' $publishFolder
        fun_green_log 'publish success!over~\n'
    }
    fun_run_log () {
        echo "\033[33m \n$ $* \033[0m"
        $*
    }
    fun_green_log () {
        echo "\033[32m$* \033[0m"
    }
    if [ $branch_name == 'master' ] || [ $branch_name == 'gray' ];
        then
            # build
            echo '\n1. start build...'
            fun_run_log npm run build
            current_path=$(pwd)
            fun_green_log 'build success, publish file list:'
            find ${current_path}/dist -type f
            # make sure
            echo "\nAre you sure to publish to ${publishFolder}?(yes/no)"
            read answer
            if [ $answer != 'yes' ]
                then echo Cancel publish, return!
                else fun_publish # publish
            fi
        else 
            echo "Only the branch:master can publish!You are on $branch_name."
    fi
    

    四、使用 pm2 部署服务

    通常在本地启动服务时需要打开终端,运行 npm run start 来启动服务,但是当退出终端服务就停了,或者需要手动杀掉服务,才能再次重启。

    pm2(process manager)是一个进程管理工具,维护一个进程列表,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,以守护进程的方式启动node进程,终端退出也可以继续运行,也支持性能监控,负载均衡等功能。

    • 常用命令
    pm2 start server.js   #  启动服务
    pm2 list      # 列出所有进程
    pm2 restart 0 # 0秒重启服务
    pm2 stop 0    # 关闭服务
    pm2 log 0     # 查看进程控制台日志
    
    • 参数说明
    启动参数作用
    watch实时监控app.js的方式启动,当app.js文件有变动时,pm2会自动reloadname为进程取名字,方便在列表中识别
    • 启动服务举例
    pm2 start npm --name blog-server  -- run start
    

    教你如何在服务器部署前后端分离项目

    idnamenamespaceversionmodepiduptimestatuscpumemuserwatching
    0blog-serverdefaultN/Afork26647s0online5.3%44.6mbusernamedisabled

    五、参考

    • 使用pm2自动化部署node项目
    • 前端需要了解的Nginx知识

    起源地下载网 » 教你如何在服务器部署前后端分离项目

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元