Linux—多项目部署


在多项目部署上,用的nginx进行代理转发,遇到了不同的问题,配置多次,进行测试。最后达到了想要的效果。特地记录下,防止下次在走丢。。。

项目:

  • 基于vuepress的个人博客 blog

  • 在github找的一个vue搭建的官网项目 website

  • 前面介绍的vue-admin-template项目 contract

需求:实现三个项目都可以访问使用。

环境及项目部署测试

  • linux 8.0

  • nginx version: nginx/1.14.1

  • mysql 8

部署项目

1、将 blog项目打包后(dist),传到服务器上,路径 /home/,上传完后,修改dist为blog

2、将website项目打包后(dist),传到服务器上,路径/home/,上传后,修改dist为website。

3、将contract前端项目打包后(dist),传到服务器上,路径/home/,上传后,修改dist为contract;并且将后端项目jar文件也上传到/home/contract/下;并且将sql文件也上传到相应目录,我自己传到了contract下,用于导入mysql中。

关于linux的操作,上面所用的都是基础操作,就不介绍了。主要是cp、mv、ls等。

将contract项目中的sql文件导入mysql数据库中:

  • 登录mysql。输入mysql -u root -p后输入mysql密码

  • 创建数据库contract

  • 导入sql文件。输入source /home/contract/contract.sql

配置Nginx

上面的步骤仅将项目部署到了相应的目录下,如果想要通过域名访问,需要配置相应的转发代理等,我用的Nginx。另外,因为是想要通过域名访问,准备域名:www.fuzm.wang和ai.fuzm.wang。一个是主域名,一个是二级域名。二级域名根据自己的需求建立并解析到一样的服务器上。

规划:

  • 通过www.fuzm.wang直接访问blog项目。网站:http://www.fuzm.wang

  • 通过www.fuzm.wang加上website项目名称,访问website项目。网站:http://www.fuzm.wang/website

  • 通过二级域名ai.fuzm.wang访问contract的前端。网站:http://ai.fuzm.wang

  • 通过二级域名ai.fuzm.wang/api访问contract的后端接口。

1、编辑nginx配置文件nginx.conf。根据自己安装的来

vim /etc/nginx/nginx.conf

2、添加blog的访问配置

在nginx.conf的server节点中配置如下

location / {
    root /home/blog/;
    try_files $uri $uri/ @router;
    index index.html index.htm;
}

location @router {
    rewrite ^.*$ /index.html last;
}

这里用了try_files来匹配访问的路径。具体可以参考这篇文章了解一下:

nginx中alias、root、try_files的用法_My_Bells的博客-CSDN博客_alias try_files

配置后的server节点如下:

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  www.fuzm.wang;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
              root /home/blog/;
              try_files $uri $uri/ @router;
              index index.html index.htm;
        }

        location @router {
              rewrite ^.*$ /index.html last;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
}

3、添加website的访问配置,因为blog和website计划用www.fuzm.wang进行访问,那就都配置在同一个server节点下。

在nginx.conf中继续配置如下

location /website {
    root /home/;
    try_files $uri $uri/ @router_website;
    index index.html index.htm;
}

location @router_website {
    rewrite ^.*$ /website/index.html last;
}

注意看:

lcaltion /website  里的  root  /home/; 
这里的配置不能像location /  里的  root  /home/blog/;  一样配成 /home/website

可以看我上面推荐参考的文章。

root的使用,会匹配将/website作为一个url接入访问的链接中,去到/website里查找index。

(1)如果用root /home/website/ 那么nginx会将/home/website/website/中的文件返回。然而我们没有这个

(2)如果用root /home/ 那么nginx会将/home/website/中的文件返回。我们正好是这么部署的。就可以正常访问到。

或者看起来更舒服,明显看出是指向/home/website/下访问的,可以这样:

不用root,使用 alias 配置为如下:

location /website {
    # root /home/;
    alias /home/website/;
    try_files $uri $uri/ @router_website;
    index index.html index.htm;
}

这样的话,因为alias,会直接替换location中的 /website。nginx会将/home/website/中的返回,也正是我们需要的。

小结一下:

root:http://www.fuzm.wang 访问这个,因为用root,nginx会找到/home/blog/下的文件,返回正常。

alias:http://www.fuzm.wang/website 访问这个,因为用alias,nginx会找到/home/website/下的文件,返回正常。

通过浏览器,正常访问这两个网站。目前nginx配置文件server节点如下:

server {
   listen       80 default_server;
   listen       [::]:80 default_server;
   server_name  www.fuzm.wang;
   # root         /usr/share/nginx/html;

   # Load configuration files for the default server block.
   include /etc/nginx/default.d/*.conf;

   # 第一项目:blog配置
   location / {
       root /home/blog/;
       try_files $uri $uri/ @router;
       index index.html index.htm;
   }

   location @router {
       rewrite ^.*$ /index.html last;
   }

   # 第二项目:website配置
   location /website {
       # root /home/;
       alias /home/website/;
       try_files $uri $uri/ @router_website;
       index index.html index.htm;
    }

    location @router_website {
           rewrite ^.*$ /website/index.html last;
    }


    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

到这里,可以正常通过域名访问这两个项目了

4、要配置template项目了。因为要通过域名ai.fuzm.wang访问,所以就新建一个server节点进行配置了

在上面www.fuzm.wang的server节点下,新建

server {
    listen  80;
    server_name  ai.fuzm.wang;

    location / {
        root /home/contract/;
        index index.html index.htm;
    }
}

这样就可通过http://ai.fuzm.wang访问了前端页面

前端的生产环境配置如下:

module.exports = {
  NODE_ENV: '"production"',
  BASE_API: '"http://ai.fuzm.wang/api"',
}

意思就是所有与后端api请求,都是通过"http://ai.fuzm.wang/api"进行交互,比如要访问登录,请求就是:http://ai.fuzm.wang/api/login

后端的配置文件application.yml配置包含如下:

server:
  port: 8082
  servlet:
    context-path: /api

这样的话,这里的/api用于给nginx进行http://ai.fuzm.wang/api访问的匹配转发到8082端口

正常访问了前端页面后,试着登录下:

可以发现右侧的报错:POST http://ai.fuzm.wang/api/login 502 (Bad Gateway)

很正常,因为我们后端都没用在运行,访问不了,并且还未配置相应的路由转发。

将jar包运行起来后,会监听8082端口。

说明我们后端jar已经运行起来。这个使用直接在服务器上wget localhost:8082是可连接的。

我们想要使用前端配置的 BASE_API: '"http://ai.fuzm.wang/api 访问后端接口。那就继续配置nginx代理转发:

在上面ai.fuzm.wang的server节点里,添加配置

location /api {
    proxy_pass http://localhost:8082/api/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

意思就是将请求:http://ai.fuzm.wang/api的请求(也就是前端配置的BASE_API)代理转发proxy_pass到 http://localhost:8082/api/ 下,而这个又是我们后端接口所在。自然的就可以进入我们后端请求中。

登录,后端返回密码不正确,状态码200。输入正确密码,登录成功,查看请求正常。

这样,我们就可以通过前端请求访问到我们后端接口了。

附上完整的nginx.conf文件

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  www.fuzm.wang;
        # root         /usr/share/nginx/html;
    	# root /home/zhaomei/fzm;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
	    root /home/blog/;
	    try_files $uri $uri/ @router;
	    index index.html index.htm;
        }

	    location @router {
	        rewrite ^.*$ /index.html last;
	    }

	    location /website {
	        alias /home/website/;
	        try_files $uri $uri/ @router_website;
	        index index.html index.htm;
	    }

	    location @router_website {
	        rewrite ^.*$ /website/index.html last;
	    }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

    server {
        listen  80;
	    server_name  ai.fuzm.wang;
	    location / {
	        root /home/contract/;
	        index index.html index.htm;
	    }

	    location /api {
	        proxy_pass http://tomcatserver/api/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	    }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers PROFILE=SYSTEM;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}


测试

通过浏览器访问以上三个项目都正常,就表示配置成功啦。可以收工了。总感觉好像少了什么,但是一下想不起来。先这样了。

可以看看我的学习——基于Hexo的个人博客:
网站:http://www.fuzm.wang
—————————————————————————
作为初学者,很多知识都没有掌握,见谅,如有错误请指出,以期进步,感谢!。后续有新的学习,继续补充上来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值