Add container service files and docker README

This commit is contained in:
Edvard 2019-01-30 13:18:24 +01:00
parent e4968c4a75
commit e6e66d58dd
7 changed files with 83 additions and 6 deletions

View File

@ -3,7 +3,6 @@
.idea
bin
.gitignore
environments
integration_test
LICENSE
postgraphile
@ -15,4 +14,3 @@ test_config
.travis.yml
vulcanizedb.log
Dockerfile

View File

@ -14,8 +14,16 @@ RUN GCO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-extldflag
# Second stage
FROM alpine
RUN apk --no-cache --update add openrc
RUN mkdir -p /run/openrc/ && touch /run/openrc/softlevel
COPY --from=builder /go/src/github.com/vulcanize/vulcanizedb/vulcanizedb /app/vulcanizedb
COPY --from=builder /go/src/github.com/pressly/goose/cmd/goose/goose /app/goose
COPY --from=builder /go/src/github.com/vulcanize/vulcanizedb/environments/staging.toml /app/environments/
COPY --from=builder /go/src/github.com/vulcanize/vulcanizedb/dockerfiles/lightSync-service /etc/init.d/lightSync
COPY --from=builder /go/src/github.com/vulcanize/vulcanizedb/dockerfiles/continuousLogSync-service /etc/init.d/continuousLogSync
COPY --from=builder /go/src/github.com/vulcanize/vulcanizedb/dockerfiles/startup_script.sh /app/
COPY --from=builder /go/src/github.com/vulcanize/vulcanizedb/db/migrations/* /app/
COPY --from=builder /go/src/github.com/pressly/goose/cmd/goose/goose /app/goose
WORKDIR /app
RUN rc-status
CMD ["./goose"]

33
dockerfiles/README.md Normal file
View File

@ -0,0 +1,33 @@
S
`Dockerfile` will build an alpine image containing:
- vDB as a binary with runtime deps statically linked: `/app/vulcanizedb`
- The migration tool goose: `/app/goose`
- Two services for running `lightSync` and `continuousLogSync`, started with the default configuration `environments/staging.toml`.
By default, vDB is configured towards the Kovan deploy. The configuration values can be overridden using environment variables, using the same hierarchical naming pattern but in CAPS and using underscores. For example, the contract address for the `Pit` can be set with the variable `CONTRACT_ADDRESS_PIT="0x123..."`.
## To use the container:
1. Setup a postgres database with owner `vulcanize`
* `vulcanize` does not _have_ to be owner, but otherwise permissions for
connection, tables, and sequences need to be added for the `public` and
`maker` schemas manually when the migrations have been run.
2. Set the env variables `DATABASE_NAME`, `DATABASE_HOSTNAME`,
`DATABASE_PORT`, `DATABASE_USER` & `DATABASE_PASSWORD`
3. Run the DB migrations:
* `./goose postgres "postgresql://$(DATABASE_USER):$(DATABASE_PASSWORD)@$(DATABASE_HOSTNAME):$(DATABASE_PORT)/$(DATABASE_NAME)?sslmode=disable"
e`
4. Set `CLIENT_IPCPATH` to a node endpoint
5. Set the contract variables:
* `CONTRACT_ADDRESS_[CONTRACT NAME]=0x123...`
* `CONTRACT_ABI_[CONTRACT NAME]="ABI STRING"`
* `CONTRACT_DEPLOYMENT-BLOCK_[CONTRACT NAME]=0` (doesn't really matter on a short chain, just avoids long unnecessary searching)
6. Start the `lightSync` and `continuousLogSync` services:
* `rc-service lightSync start`
* `rc-service continuousLogSync start`
### Automated
The steps above have been rolled into a script: `/app/startup_script.sh`, which just assumes the DB env variables have been set, and defaults the rest to Kovan according to `environments/staging.toml`.
### Logging
When running, vDB services log to `/vulcanizedb.log`.

View File

@ -0,0 +1,6 @@
#!/sbin/openrc-run
command=/app/vulcanizedb
command_args="continuousLogSync --config /app/environments/staging.toml &"
pidfile=
name="continuousLogSync"
description="runs vDB in continuousLogSync mode using staging.toml"

6
dockerfiles/lightSync-service Executable file
View File

@ -0,0 +1,6 @@
#!/sbin/openrc-run
command=/app/vulcanizedb
command_args="lightSync --config /app/environments/staging.toml &"
pidfile=
name="lightSync"
description="runs vDB in lightSync mode using staging.toml"

29
dockerfiles/startup_script.sh Executable file
View File

@ -0,0 +1,29 @@
#!/bin/sh
# Runs the migrations and starts the lightSync and continuousLogSync services
# Exit if the variable tests fail
set -e
# Check the database variables are set
test $DATABASE_NAME
test $DATABASE_HOSTNAME
test $DATABASE_PORT
test $DATABASE_USER
test $DATABASE_PASSWORD
# Construct the connection string for postgres
CONNECT_STRING=postgresql://$DATABASE_USER:$DATABASE_PASSWORD@$DATABASE_HOSTNAME:$DATABASE_PORT/$DATABASE_NAME?sslmode=disable
echo "Connecting with: $CONNECT_STRING"
set +e
# Run the DB migrations
./goose postgres "$CONNECT_STRING" up
if [ $? -eq 0 ]; then
# Fire up the services
rc-service lightSync start
rc-service continuousLogSync start
else
echo "Could not run migrations. Are the database details correct?"
fi

View File

@ -19,8 +19,6 @@ package frob
import (
"encoding/json"
"fmt"
log "github.com/sirupsen/logrus"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
@ -32,7 +30,6 @@ type FrobConverter struct{}
func (FrobConverter) ToEntities(contractAbi string, ethLogs []types.Log) ([]interface{}, error) {
var entities []interface{}
log.Info("blah")
for _, ethLog := range ethLogs {
entity := FrobEntity{}
address := ethLog.Address