diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4cd7565091c9a8a27c6f2125a9a6ce8234f93dd7..5d0aaa54acbf05e562233df52263aab0a985a6d7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -32,7 +32,7 @@ ppc64le: tags: - ppc64le script: - - docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA --build-arg CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME --build-arg CI_PROJECT_NAME=$CI_PROJECT_NAME --build-arg CI_JOB_TOKEN=$CI_JOB_TOKEN --pull -t $IMAGE_ppc64le -f Dockerfile . + - docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA --build-arg CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME --build-arg CI_PROJECT_NAME=$CI_PROJECT_NAME --build-arg GITLAB_LOGIN=gitlab-ci-token --build-arg GITLAB_PASSWORD=$CI_JOB_TOKEN --pull -t $IMAGE_ppc64le -f Dockerfile . - docker push $IMAGE_ppc64le amd64: @@ -41,7 +41,7 @@ amd64: tags: - amd64 script: - - docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA --build-arg CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME --build-arg CI_PROJECT_NAME=$CI_PROJECT_NAME --build-arg CI_JOB_TOKEN=$CI_JOB_TOKEN --pull -t $IMAGE_amd64 -f Dockerfile . + - docker build --build-arg CI_COMMIT_SHA=$CI_COMMIT_SHA --build-arg CI_COMMIT_REF_NAME=$CI_COMMIT_REF_NAME --build-arg CI_PROJECT_NAME=$CI_PROJECT_NAME --build-arg GITLAB_LOGIN=gitlab-ci-token --build-arg GITLAB_PASSWORD=$CI_JOB_TOKEN --pull -t $IMAGE_amd64 -f Dockerfile . - docker push $IMAGE_amd64 manifest: @@ -63,8 +63,9 @@ deploy: - master script: - apk add curl - - for ref in $DEPLOYENVS; do curl -X POST -F token=$TRIGGER_TOKEN -F ref=$ref -F variables[branch]=$CI_COMMIT_REF_NAME $TRIGGER_CODE_BUILD; done - + - for ref in $DEPLOYENVS; do curl -X POST -F token=$TRIGGER_TOKEN -F ref=$ref -F variables[branch]=$CI_COMMIT_REF_NAME $TRIGGER_CODE_BUILD; done + - curl -X POST -F token=$TRIGGER_TOKEN_VCL -F ref=$CI_COMMIT_REF_NAME $TRIGGER_CODE_VCL + duplicate: stage: tech_registry tags: diff --git a/Dockerfile b/Dockerfile index 8f44a426deeb6b7e664fca4bcfb0a967a9fe9960..d490aab0d50ada83e42072892192bb5e85e4be7f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,39 +1,38 @@ -FROM registry.vereign.com/docker/go-with-dep:master +FROM registry.vereign.com/docker/go-with-dep:with-codecgen -#RUN echo deb http://deb.debian.org/debian buster main > /etc/apt/sources.list.d/buster.list \ -# && apt-get update \ -# && apt-get install -y --no-install-recommends npm zlib1g-dev +ARG GITLAB_LOGIN +ARG GITLAB_PASSWORD ENV GOPATH /srv/ -ENV SERVER_OUT "bin/server" -ENV SERVER_PKG_BUILD ${PKG} ENV PATH "$PATH:/srv/bin/" -ARG CI_JOB_TOKEN ARG CI_PROJECT_NAME ARG CI_COMMIT_REF_NAME ARG CI_COMMIT_SHA ENV CI_PROJECT_NAME ${CI_PROJECT_NAME} -RUN echo project is $CI_PROJECT_NAME && mkdir -p /srv/src/code.vereign.com/code/$CI_PROJECT_NAME +RUN mkdir -p /srv/src/code.vereign.com/code/$CI_PROJECT_NAME COPY . /srv/src/code.vereign.com/code/$CI_PROJECT_NAME/ RUN cd /srv/src/code.vereign.com/code/$CI_PROJECT_NAME && \ - git config --global credential.https://code.vereign.com.username gitlab-ci-token && \ - git config --global credential.helper "store --file /tmp/store" && \ - echo https://gitlab-ci-token:$CI_JOB_TOKEN@code.vereign.com > /tmp/store && cat /tmp/store && \ - export PKG=code.vereign.com/code/$CI_PROJECT_NAME && \ - go get -u github.com/ugorji/go/codec/codecgen && \ - echo PATH $PATH && \ - make && rm /tmp/store - -#FROM debian:stretch -#RUN mkdir -p /srv/src/code.vereign.com/code/ -#COPY --from=0 /srv/src/code.vereign.com/code/data-storage-agent /srv/src/code.vereign.com/code/ -#RUN find /srv/src/code.vereign.com/code/ - -ENTRYPOINT /srv/src/code.vereign.com/code/$CI_PROJECT_NAME/bin/server + git config --global url."https://$GITLAB_LOGIN:$GITLAB_PASSWORD@code.vereign.com".insteadOf "https://code.vereign.com" && \ + dep ensure && \ + go generate vendor/github.com/coreos/etcd/client/keys.go && \ + go build -ldflags="-X code.vereign.com/code/${CI_PROJECT_NAME}/handler.version=${CI_COMMIT_REF_NAME}.${CI_COMMIT_SHA}" -i -v -o /srv/${CI_PROJECT_NAME} code.vereign.com/code/${CI_PROJECT_NAME} + +FROM buildpack-deps:buster-curl + +ARG CI_PROJECT_NAME +ENV CI_PROJECT_NAME ${CI_PROJECT_NAME} + +COPY --from=0 /srv/${CI_PROJECT_NAME} /srv/${CI_PROJECT_NAME} + +WORKDIR /srv + +RUN mkdir -p /srv/src/code.vereign.com/code/key-storage-agent/bin/ && ln /srv/key-storage-agent /srv/src/code.vereign.com/code/key-storage-agent/bin/server && ln -s /srv/ /go + +ENTRYPOINT ["/srv/key-storage-agent"] diff --git a/Dockerfile-x86 b/Dockerfile-x86 deleted file mode 100644 index 27220b526713cb61b4c29bef5171ff48231020de..0000000000000000000000000000000000000000 --- a/Dockerfile-x86 +++ /dev/null @@ -1,35 +0,0 @@ -FROM registry.vereign.com/docker/go-with-dep:master-x86 - -#RUN echo deb http://deb.debian.org/debian buster main > /etc/apt/sources.list.d/buster.list \ -# && apt-get update \ -# && apt-get install -y --no-install-recommends npm zlib1g-dev - -ENV GOPATH /srv/ -ENV SERVER_OUT "bin/server" -ENV SERVER_PKG_BUILD ${PKG} - -ARG CI_JOB_TOKEN -ARG CI_PROJECT_NAME -ARG CI_COMMIT_REF_NAME -ARG CI_COMMIT_SHA - -ENV CI_PROJECT_NAME ${CI_PROJECT_NAME} - -RUN echo project is $CI_PROJECT_NAME && mkdir -p /srv/src/code.vereign.com/code/$CI_PROJECT_NAME - -COPY . /srv/src/code.vereign.com/code/$CI_PROJECT_NAME/ - -RUN cd /srv/src/code.vereign.com/code/$CI_PROJECT_NAME && \ - git config --global credential.https://code.vereign.com.username gitlab-ci-token && \ - git config --global credential.helper "store --file /tmp/store" && \ - echo https://gitlab-ci-token:$CI_JOB_TOKEN@code.vereign.com > /tmp/store && cat /tmp/store && \ - export PKG=code.vereign.com/code/$CI_PROJECT_NAME && \ - make && rm /tmp/store - -#FROM debian:stretch -#RUN mkdir -p /srv/src/code.vereign.com/code/ -#COPY --from=0 /srv/src/code.vereign.com/code/data-storage-agent /srv/src/code.vereign.com/code/ -#RUN find /srv/src/code.vereign.com/code/ - -ENTRYPOINT /srv/src/code.vereign.com/code/$CI_PROJECT_NAME/bin/server - diff --git a/config.yaml.sample b/config.yaml.sample index f89eed8f9c48a1f22636edc31195bff0aeb8698d..728fa2d92067de3f32df1f4a18c3d13613766734 100644 --- a/config.yaml.sample +++ b/config.yaml.sample @@ -6,6 +6,8 @@ dataStorageUrl: localhost:7777 grpcListenAddress: localhost:7877 restListenAddress: localhost:7878 +# This one using by rest-gateway. Must contain the same domain name with issued certificate +grpcURL: key-storage-agent:7877 # VIAM Variables viamUUID: viam-system diff --git a/config/configs.go b/config/configs.go index 9f835140f2a576ff2d84b12358ac7c58e70afe4e..2bb565e5c26338927d9dacd50136ec6a9643f77f 100644 --- a/config/configs.go +++ b/config/configs.go @@ -29,6 +29,7 @@ var MaxMessageSize int var GrpcListenAddress string var RestListenAddress string +var GrpcURL string var DataStorageUrl string var EntitiesManagerUrl string var CertDir string @@ -37,10 +38,11 @@ func SetConfigValues(configFile, etcdURL string) { // Set Default Values For Config Variables // Vereign API Related - viper.SetDefault("grpcListenAddress", "localhost:7877") - viper.SetDefault("restListenAddress", "localhost:7878") - viper.SetDefault("dataStorageUrl", "localhost:7777") - viper.SetDefault("entitiesManagerUrl", "localhost:7779") + viper.SetDefault("grpcListenAddress", ":7877") + viper.SetDefault("restListenAddress", ":7878") + viper.SetDefault("dataStorageUrl", "data-storage-agent:7777") + viper.SetDefault("entitiesManagerUrl", "entities-management-agent:7779") + viper.SetDefault("grpcURL", "key-storage-agent:7877") viper.SetDefault("viamUUID", "viam-system") viper.SetDefault("viamSession", "viam-session") @@ -122,6 +124,7 @@ func SetConfigValues(configFile, etcdURL string) { } GrpcListenAddress = viper.GetString("grpcListenAddress") + GrpcURL = viper.GetString("grpcURL") RestListenAddress = viper.GetString("restListenAddress") DataStorageUrl = viper.GetString("dataStorageUrl") diff --git a/main.go b/main.go index 4b937e1f6de264df8ccf987299d4beeff654063a..75743bbbae377146ea5eabfb33d775219a20e899 100644 --- a/main.go +++ b/main.go @@ -42,6 +42,7 @@ func main() { grpcAddress := config.GrpcListenAddress restAddress := config.RestListenAddress + grpcURL := config.GrpcURL dataStorageAddress := config.DataStorageUrl certPem := config.CertificatePEM keyPem := config.PrivateKeyPEM @@ -62,7 +63,7 @@ func main() { // fire the REST server in a goroutine go func() { - err := server.StartRESTServer(restAddress, grpcAddress, certPem) + err := server.StartRESTServer(restAddress, grpcURL, certPem, keyPem) if err != nil { log.Fatalf("failed to start gRPC server: %s", err) } diff --git a/run.sh b/run.sh index 7d2db8a5f5b3dd3c6eaf8c73e7e9cf27d298320b..6cdffbd43e1844b1111f1019d70b483b67a242ec 100755 --- a/run.sh +++ b/run.sh @@ -2,7 +2,7 @@ [ -d cert ] || mkdir cert openssl genrsa -out cert/server.key 2048 -openssl req -new -key cert/server.key -out cert/server.csr -subj "/CN=localhost" +openssl req -new -key cert/server.key -out cert/server.csr -subj "/CN=key-storage-agent" openssl x509 -req -days 365 -in cert/server.csr -signkey cert/server.key -out cert/server.crt diff --git a/server/server.go b/server/server.go index 8c00656f1d30efb20c0b78c099531acc1a3b70ef..8ee39c1237cb2009f6de628f778ba72709a427b7 100644 --- a/server/server.go +++ b/server/server.go @@ -54,6 +54,9 @@ func credMatcher(headerName string) (mdName string, ok bool) { if headerName == "Session" { return headerName, true } + if headerName == "Uuid" { + return headerName, true + } return "", false } @@ -177,7 +180,8 @@ func StartGRPCServer(address string, certPEM, privateKeyPEM, caCertPEM, vereignC return nil } -func StartRESTServer(address, grpcAddress string, certPEM []byte) error { +func StartRESTServer(address, grpcURL string, certPEM, keyPEM []byte) error { + log.Println("grpcAddress: ", grpcURL) ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -200,14 +204,31 @@ func StartRESTServer(address, grpcAddress string, certPEM []byte) error { opts := []grpc.DialOption{grpc.WithTransportCredentials(creds)} // Register RedisStorageServer - err = api.RegisterKeyStorageHandlerFromEndpoint(ctx, mux, grpcAddress, opts) + err = api.RegisterKeyStorageHandlerFromEndpoint(ctx, mux, grpcURL, opts) if err != nil { log.Printf("Error: %v", err) return fmt.Errorf("could not register service RedisStorageServer: %s", err) } - log.Printf("starting HTTP/1.1 REST server on %s", address) - http.ListenAndServe(address, mux) + // server certificate + certificate, err := tls.X509KeyPair(certPEM, keyPEM) + if err != nil { + log.Printf("Error: %v", err) + return fmt.Errorf("could not load server key pair: %s", err) + } + + serverTLSConfig := &tls.Config{ + Certificates: []tls.Certificate{certificate}, + } + + tlsServer := &http.Server{ + Addr: address, + Handler: mux, + TLSConfig: serverTLSConfig, + } + + log.Printf("starting HTTP/1.1 REST server on %s", address) + tlsServer.ListenAndServeTLS("","") return nil }