Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.dockerignore
.gitignore
README.md

node_modules/
build/
public/
npm-debug.log
49 changes: 31 additions & 18 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,34 +1,47 @@
# .travis.yml
sudo: required

services:
- docker

env:
global:
secure: "i9TsESPUaytcKK4NYOtKgQuiKwvwyRKRqnCWJ9GUBmN7nnk6LeOeD63qFDhF3Kyap9Vkml2Ky6Dzg1enWYOsvCs+8Mb+0ZGbUGGn86cGSYQauOscH3BzMZBLKYon7LzPY183ucoT83E4gHxlnzpf43B+UvwLsnWUf6h8FRhknuk+Ff6AgEDct1bDGNwJITWCnS75Q4q6Wl3GtTusZtFe2oHhgcYpsWa6u7/b8PfAoCsxu5FeYbaRUWmUYAFqSuTJfUvVnGRGraNGaWosIV6yeYpJMco4kkdZH46ReAU1aGRTobrYEpiA2kzmhVDuWHiK+75sItHeQMHENGztfxaPGPT61L6t2r51MXJBKzCq9Xe2Er5/fK7vgL6fzBCLrY2A3ICIxwmMJgRUEl7k+0ED9ezdUMgWfGU/LQZ1XWgpYB+DKC1ZJ+19NoswBJAWe3SUVvkSV+I+NYoMVGPwR73qIDglUXwyR7Ol4uRlQrIBGH+xjK4RdSQbZIPGM+fK9unJgD1k3SWD1QQSc0/BXY52KN/VkJpsUL0uV2YoYv/uvxh5OHZP+9PVfz6+7jxUUJw4iha0rMNb+R4kqpR9yjSOYvEP58ctSGtaDWkIiAI7wpS2oib2eTxhQe1Vtfdq/aLCfhThZYzflWWkueFxFNnRQ27dMCPLz9NfByQUfcxz1Ec="
- secure: "i9TsESPUaytcKK4NYOtKgQuiKwvwyRKRqnCWJ9GUBmN7nnk6LeOeD63qFDhF3Kyap9Vkml2Ky6Dzg1enWYOsvCs+8Mb+0ZGbUGGn86cGSYQauOscH3BzMZBLKYon7LzPY183ucoT83E4gHxlnzpf43B+UvwLsnWUf6h8FRhknuk+Ff6AgEDct1bDGNwJITWCnS75Q4q6Wl3GtTusZtFe2oHhgcYpsWa6u7/b8PfAoCsxu5FeYbaRUWmUYAFqSuTJfUvVnGRGraNGaWosIV6yeYpJMco4kkdZH46ReAU1aGRTobrYEpiA2kzmhVDuWHiK+75sItHeQMHENGztfxaPGPT61L6t2r51MXJBKzCq9Xe2Er5/fK7vgL6fzBCLrY2A3ICIxwmMJgRUEl7k+0ED9ezdUMgWfGU/LQZ1XWgpYB+DKC1ZJ+19NoswBJAWe3SUVvkSV+I+NYoMVGPwR73qIDglUXwyR7Ol4uRlQrIBGH+xjK4RdSQbZIPGM+fK9unJgD1k3SWD1QQSc0/BXY52KN/VkJpsUL0uV2YoYv/uvxh5OHZP+9PVfz6+7jxUUJw4iha0rMNb+R4kqpR9yjSOYvEP58ctSGtaDWkIiAI7wpS2oib2eTxhQe1Vtfdq/aLCfhThZYzflWWkueFxFNnRQ27dMCPLz9NfByQUfcxz1Ec="
- secure: "lhgrjdfq/PbYx6xguYXTE1u8fx/UGi56sR4oE5lJPTeViBNsaiQFpwoUlMQS5IlRHWX6ilH1l4XIh6Glp23iycSX73W1AJqzJa9UKEFm4D6tW2R3UWP6fOprekQ7Hl+Sy/uNoKGEA5d7u+U+/cxJ0rhlai2FiBEulr6PaoWcnbivW53bwlRjewIVmITjYzDhAapn4Gl7Ki3rScslJ/aDyPJHd4/N4xAWJ99Y4kDSSFSmdo+EWoeXOb1v6lStB6ULxl/xcGGNsbqP08E3k3tER25lYFnyx7qFA3az338sFrlVU0uGnwU8sgyeLkg1WZM7tqYutGc+5hPqG0Ko4yrrY08rpKOdcLfQVC9L94YdgTwaSwaA2TGN7O78RbCQfX8QWhAnKn2xpVa8zuuh4262oJh43HZFWFoR+afW/9NNaFksHDtfVWw1K+IhzgAnGHPXxbJzGYalcUCT2BsriUSHmP5qsgbMfoOAUfVvQAt6d6Dal9Mz0LlOOe/Twa8FZapcpsq77vIrLhlFUNEZUzd/LjFNy9VlvMjw6lWQfNAg3Zfuty0bd5vmEgj6lVnv83VGB6R+fPeLfTrBbMIWMfM/IUZVsAJ1AMGy8oQynjCAsuGO5P0jSycN3Fyy69PmGL0C7wph4xkEAPlrAgAxfy1KFTVxzcZ1RmVxMtZ1iDXVbwY=" # DOCKER_USER
- secure: "JevDYrp+pskYhXBoXGwbrMQd398DTswwEsxj+4GEPt9yE9ppi1ey8USjr3/VdmrhkzaEuyuH7wLsqD8TYog+F8n6ALbkQUXiOQZcZL7J7f+fRS1Ox79xyfH97ABOsUQXvKhwGSYBaSv5UIVqrwrkOIvUu4nsUKhw0cP0SBFuNAka5iSk5wOHw8uQXM/WGqbt0BULijH4cEtVt0kyTgzj4xaGvrom+vmvy6UuKo0LR+vRXWHV+ApE9Oib5a9aduAWJuGF/glEUZF7x5atT8jjO7C/B7EhlqV4/+lo9x0JAINPWJ01JSJmeBqn4xg0HayPcLhJ2jiipEgMNeB+2nNsjYaSMZlBQy8fZ5q5MHXTeGwLY24J6kkYT54y+zFfw+R6fGFd1AJn30s1cT/pCnyDoog9IAAAticnJgQIrbk2JXbM4RD234/zeOPKGvGto86781sFcJDxI9zZ1m+6/b96lgAgXnNEW/MzgQ3vv4zr2HZAnSuBGVESJhocdmfMs+3n1Aq3b8KCI/3yc/mysht1QULN9CLB+atzKMnWnlzfWWrZedBusL2VTbPruPnSLTQ55YIaff/4VcIu+oirUGfZS+S+Eu5qvMzI7CrXcS1BXYcwWB906zFyK2O6/q9163agHwPUPZhTpBPdMwxSmSQfnq0FWH5B09nxGeDr06khwms=" # DOCKER_PASS
- DOCKER_COMPOSE_VERSION=1.20.1
- COMMIT=${TRAVIS_COMMIT::8}
- API_REPO=keelerh/omniscience-api
- UI_REPO=keelerh/omniscience-ui

language: go

go:
- "1.10"

before_install:
install:
# Coveralls
- go get github.com/mattn/goveralls

# dep
- curl -L -s https://github.com/golang/dep/releases/download/v0.4.1/dep-linux-amd64 -o $GOPATH/bin/dep
- chmod +x $GOPATH/bin/dep

install:
- dep ensure

script:
- $HOME/gopath/bin/goveralls -v -service=travis-ci

services:
- docker
- dep ensure

after_success:
- test -n "$TRAVIS_TAG" && curl -sL https://git.io/goreleaser | bash
# - mkdir -p dist
# - CGO_ENABLED="0" GOARCH="amd64" GOOS="linux" go build -a -installsuffix cgo -o ./dist/gomotics
# - docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
# - export REPO=$DOCKER_USER/gomotics
# - export TAG=`if [ "$TRAVIS_BRANCH" == "master" ]; then echo "latest"; else echo $TRAVIS_TAG ; fi`
# - echo $REPO:$TAG
# - docker build -f Dockerfile -t $REPO:$TAG .
# - docker push $REPO
- echo "$DOCKER_PASS" | docker login -u "$DOCKER_USER" --password-stdin
- export TAG=`if [ "$TRAVIS_BRANCH" == "master" ]; then echo "latest"; else echo $TRAVIS_BRANCH ; fi`

# Build Ingestion service image
- docker build -t $API_REPO:$COMMIT .
- docker tag $API_REPO:$COMMIT $API_REPO:$TAG
- docker tag $API_REPO:$COMMIT $API_REPO:travis-$TRAVIS_BUILD_NUMBER
- docker push $API_REPO

# Build React frontend image
- docker build -t $UI_REPO:$COMMIT ./ui
- docker tag $UI_REPO:$COMMIT $UI_REPO:$TAG
- docker tag $UI_REPO:$COMMIT $UI_REPO:travis-$TRAVIS_BUILD_NUMBER
- docker push $UI_REPO
35 changes: 35 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# 1) BUILD INGESTION API
FROM golang:alpine AS build-go
RUN apk --no-cache add git

WORKDIR /go/src/github.com/keelerh/omniscience

RUN go get -u github.com/golang/dep/...
COPY Gopkg.toml Gopkg.lock ./
RUN dep ensure -v --vendor-only

COPY ./pkg ./pkg
COPY ./protos ./protos
COPY ./cmd/api ./cmd/api

RUN cd cmd/api && go build -o api && cp api /tmp/


# 2) INSTALL DOCKERIZE
FROM alpine AS install-dockerize
RUN apk update && apk add wget
RUN wget https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-linux-amd64-v0.6.1.tar.gz
RUN tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.6.1.tar.gz


# 3) BUILD FINAL IMAGE
FROM alpine
RUN apk --no-cache add ca-certificates

WORKDIR /app/server/

COPY --from=build-go /tmp/api /app/server/
COPY --from=install-dockerize /usr/local/bin/dockerize /usr/local/bin/dockerize

EXPOSE 50051
ENTRYPOINT ["dockerize", "-wait", "http://elasticsearch:9200", "-timeout", "30s", "./api"]
16 changes: 12 additions & 4 deletions cmd/omniscience_server/main.go → cmd/api/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package main

import (
"flag"
"log"
"net"

Expand All @@ -12,19 +13,26 @@ import (
"google.golang.org/grpc"
)

const (
port = ":50051"
var (
fElasticsearchUrl = flag.String(
"elasticsearch_url",
"http://elasticsearch:9200",
"Defines the URL endpoint of the Elasticsearch node")
)

// TODO: Port should be set as an ENV variable.
const port = ":50051"

func main() {
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()

// Obtain a client and connect to the default Elasticsearch installation on 127.0.0.1:9200.
esClient, err := elastic.NewClient()
// Obtain a client and connect to the Elasticsearch installation at the URL endpoint.
opts := elastic.SetURL(*fElasticsearchUrl)
esClient, err := elastic.NewClient(opts)
if err != nil {
log.Fatalf("failed to initialise Elasticsearch client: %v", err)
}
Expand Down
38 changes: 38 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
version: '3'

services:
api: # Go Ingestion service
container_name: om-api
build: .
ports:
- "50051:50051" # Expose API port
environment: # Set ENV vars
- ES_HOST=elasticsearch
- PORT=50051
depends_on:
- elasticsearch
command: dockerize -wait http://elasticsearch:9200 -timeout 30s ./api

ui: # React frontend
# TODO: Enable hot reloading.
container_name: om-ui
build: ./ui
ports:
- "3000:3000" # Expose Node dev port
environment: # Set ENV vars
- NODE_ENV=local
depends_on:
- elasticsearch

elasticsearch:
container_name: om-es
image: docker.elastic.co/elasticsearch/elasticsearch:6.2.3
ports:
- "9200:9200"
environment:
- http.cors.enabled=true
- http.cors.allow-origin=*
- http.cors.allow-methods=OPTIONS, HEAD, GET, POST, PUT, DELETE
- http.cors.allow-headers=X-Requested-With, X-Auth-Token, Content-Type, Content-Length
volumes:
- "/tmp/esdata:/usr/share/elasticsearch/data"
21 changes: 12 additions & 9 deletions ui/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
FROM node:alpine AS build-react
ENV D=/go/src/github.com/keelerh/omniscience
# WORKDIR $D/ui
RUN mkdir -p /src/ui
ADD ./ui/package.json /src/ui/
ADD ./ui /src/ui
RUN cd /src/ui && npm install
COPY . .
CMD [ "npm", "start" ]
# 1) BUILD REACT FRONTEND
FROM node:9.10.0-alpine
RUN apk --no-cache add ca-certificates

COPY package.json package.json
RUN npm install

COPY . /app/ui
WORKDIR /app/ui

EXPOSE 3000
ENTRYPOINT ["npm", "start"]
3 changes: 3 additions & 0 deletions ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
"test": "react-scripts-ts test --env=jsdom",
"eject": "react-scripts-ts eject"
},
"optionalDependencies": {
"fsevents": "*"
},
"devDependencies": {
"@types/jest": "^22.1.4",
"@types/node": "^9.4.6",
Expand Down
3 changes: 2 additions & 1 deletion ui/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
"noImplicitAny": true,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"noUnusedLocals": true
"noUnusedLocals": true,
"baseUrl": "."
},
"exclude": [
"node_modules",
Expand Down