# 部署服务

# 服务端

务必:dataServer数据服务节点务必启动6个节点及以上

建议:apiServer接口服务节点建议启动2个节点以上并设置负载均衡

Git克隆源码

git clone

进入项目根目录下,创建初始化脚本和启动项目脚本

cd oss
touch init.sh
touch start.sh

init.sh初始化脚本示例如下

#!/bin/bash
go build -o apiServer apiServer/apiServer.go
go build -o dataServer dataServer/dataServer.go
go build -o deleteOldMetadata deleteOldMetadata/deleteOldMetadata.go
go build -o deleteOrphanObject deleteOrphanObject/deleteOrphanObject.go
go build -o objectScanner objectScanner/objectScanner.go

#关闭服务
killall apiServer
killall dataServer

chmod 777 apiServer/apiServer
chmod 777 dataServer/dataServer
chmod 777 deleteOldMetadata/deleteOldMetadata
chmod 777 deleteOrphanObject/deleteOrphanObject
chmod 777 objectScanner/objectScanner

启动项目脚本示例如下(因为数据服务最低要求为6个节点,而我这里只在一台机器上运行,所以使用使用1~6数字创建目录)

#!/bin/bash
for i in `seq 1 6`
do
    mkdir -p /tmp/$i/objects
    mkdir -p /tmp/$i/temp
    mkdir -p /tmp/$i/garbage
    rm -rf /tmp/$i/objects/*
    rm -rf /tmp/$i/temp/*
    rm -rf /tmp/$i/garbage/*
done

LISTEN_ADDRESS=10.29.1.1:12345 STORAGE_ROOT=/tmp/1 ./$1/dataServer/dataServer &
LISTEN_ADDRESS=10.29.1.2:12345 STORAGE_ROOT=/tmp/2 ./$1/dataServer/dataServer &
LISTEN_ADDRESS=10.29.1.3:12345 STORAGE_ROOT=/tmp/3 ./$1/dataServer/dataServer &
LISTEN_ADDRESS=10.29.1.4:12345 STORAGE_ROOT=/tmp/4 ./$1/dataServer/dataServer &
LISTEN_ADDRESS=10.29.1.5:12345 STORAGE_ROOT=/tmp/5 ./$1/dataServer/dataServer &
LISTEN_ADDRESS=10.29.1.6:12345 STORAGE_ROOT=/tmp/6 ./$1/dataServer/dataServer &

LISTEN_ADDRESS=10.29.2.1:12345 ./$1/apiServer/apiServer &
LISTEN_ADDRESS=10.29.2.2:12345 ./$1/apiServer/apiServer &

LISTEN_ADDRESS指定服务所在的IP,STORAGE_ROOT指定对象存储的位置,需要提前objects、temp、garbage创建目录

Nginx 负载均衡示例,值得注意的是,项目中存在HEAD请求,Nginx会将head请求以get请求的方式发送给上游服务器,以下示例前三行解决了这个问题:

proxy_cache_convert_head off;
proxy_cache_methods GET HEAD;
proxy_cache_key $scheme$request_method$proxy_host$request_uri;

upstream ossApiServer { // apiServer接口服务地址
	...
	server ip:port;
	server ip:port;
	server ip:port;
	...
}

server {
	...
	listen       port;
	server_name  ip:port;

	location / {
		proxy_pass http://ossApiServer;
	}
	...
}

如果您追求更加高可用的策略,或可以选择其它,例如 OpenResty+Keepalived

# 客户端

Git克隆源码

git clone

修改项目根目录下vue.config.js中关于接口地址等信息,如果您在之前设置了负载均衡策略,请将target改为反向代理的地址

module.exports = {
	...
    devServer: {
        disableHostCheck: true,
        host: '域名',
        port: 端口,
        proxy: {
            '/api': {
                target: '后端接口Base Url',
                secure:false,
                changeOrigin: true,
                pathRewrite:{
                    "^/api":""
                }
            }
        }
    }
    ...
}

项目根目录下执行,启动项目

npm install
npm run serve

打包vue项目

npm run build

Nginx跨域配置示例,location /apis/ { ... }为反向代理,将ApiServer_URL替换为接口地址

server
{
    listen 80;
    server_name lploss.cn;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/lploss.cn;
    
    try_files $uri $uri/ /index.html;
  
    # 反向代理
    location /apis/ {
        proxy_pass ApiServer_URL;
    }
    
    ...
}

另外上述示例中try_files $uri $uri/ /index.html;一行解决了vue-router中使用history模式导致刷新页面404状态码的问题,如果是您使用Tomact部署,解决此问题请移步:Vue项目部署服务器后刷新页面报404 (opens new window)