forked from cerc-io/ipld-eth-server
Dockerize postgraphile
This commit is contained in:
parent
e6e66d58dd
commit
85cec480dc
@ -7,10 +7,7 @@ S
|
||||
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.
|
||||
1. Setup a postgres database with superuser `vulcanize`
|
||||
2. Set the env variables `DATABASE_NAME`, `DATABASE_HOSTNAME`,
|
||||
`DATABASE_PORT`, `DATABASE_USER` & `DATABASE_PASSWORD`
|
||||
3. Run the DB migrations:
|
||||
@ -26,7 +23,9 @@ e`
|
||||
* `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`.
|
||||
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`. This can be called with something like:
|
||||
|
||||
`docker run -d -e DATABASE_NAME=vulcanize_pubic -e DATABASE_HOSTNAME=localhost -e DATABASE_PORT=5432 -e DATABASE_USER=vulcanize -e DATABASE_PASSWORD=vulcanize ./startup_script.sh`
|
||||
|
||||
### Logging
|
||||
When running, vDB services log to `/vulcanizedb.log`.
|
||||
|
7
postgraphile/.dockerignore
Normal file
7
postgraphile/.dockerignore
Normal file
@ -0,0 +1,7 @@
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
node_modules
|
||||
Dockerfile
|
||||
README.md
|
||||
spec
|
||||
.dockerignore
|
9
postgraphile/Dockerfile
Normal file
9
postgraphile/Dockerfile
Normal file
@ -0,0 +1,9 @@
|
||||
FROM mhart/alpine-node:10
|
||||
RUN apk --update --no-cache add make g++ python findutils postgresql-dev
|
||||
|
||||
WORKDIR /app
|
||||
COPY . /app
|
||||
run yarn install
|
||||
RUN ["./node_modules/typescript/bin/tsc"]
|
||||
EXPOSE 3000
|
||||
CMD ["node", "/app/build/dist/src/index.js"]
|
@ -2,6 +2,18 @@
|
||||
|
||||
This application utilizes Postgraphile to expose GraphQL endpoints for exposure of the varied data that VulcanizeDB tracks.
|
||||
|
||||
## Docker use
|
||||
_Note: currently this image is ~500MB large (unpacked)_
|
||||
|
||||
Build the docker image in this directory. Start the `GraphiQL` frontend by:
|
||||
* Setting the env variables for the database connection: `DATABASE_HOST`,
|
||||
`DATABASE_NAME`, `DATABASE_USER`, `DATABASE_PASSWORD` (and optionally
|
||||
`DATABASE_PORT` if running on non-standard port).
|
||||
* The specified user needs to be `superuser` on the vulcanizeDB database
|
||||
* Run the container (ex. `docker run -e DATABASE_HOST=localhost -e DATABASE_NAME=vulcanize_public -e DATABASE_USER=vulcanize -e DATABASE_PASSWORD=vulcanize -d postgraphile:latest`)
|
||||
* GraphiQL is available at `:3000/graphiql`
|
||||
|
||||
|
||||
## Building
|
||||
|
||||
*This application assumes the use of the [Yarn package manager](https://yarnpkg.com/en/). The use of npm may produce unexpected results.*
|
||||
@ -16,4 +28,4 @@ Provide the built bundle to node as a runnable script: `node ./build/dist/vulcan
|
||||
|
||||
## Testing
|
||||
|
||||
Tests are executed via Jasmine with a console reporter via the `yarn test` task.
|
||||
Tests are executed via Jasmine with a console reporter via the `yarn test` task.
|
||||
|
@ -22,22 +22,22 @@
|
||||
"homepage": "https://github.com/vulcanize/vulcanizedb",
|
||||
"dependencies": {
|
||||
"express-session": "1.15.6",
|
||||
"graphql-subscriptions": "0.5.8",
|
||||
"lodash": "4.17.10",
|
||||
"passport": "0.4.0",
|
||||
"pg": "6.4.2",
|
||||
"pg-native": "3.0.0",
|
||||
"postgraphile": "4.0.0-rc.4",
|
||||
"graphql-subscriptions": "0.5.8",
|
||||
"subscriptions-transport-ws": "0.9.14",
|
||||
"toml": "2.3.3",
|
||||
"pg": "6.4.2"
|
||||
"toml": "2.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/graphql": "^0.13.4",
|
||||
"@types/express": "4.16.0",
|
||||
"@types/express-session": "1.15.10",
|
||||
"@types/graphql": "^0.13.4",
|
||||
"@types/jasmine": "2.8.8",
|
||||
"@types/lodash": "4.14.116",
|
||||
"@types/node": "10.9.3",
|
||||
"@types/node": "^10.12.21",
|
||||
"@types/passport": "0.4.6",
|
||||
"awesome-typescript-loader": "5.2.0",
|
||||
"jasmine": "3.2.0",
|
||||
|
@ -6,34 +6,49 @@ export const MISSING_PATH_MESSAGE = `No path to config toml file provided, `
|
||||
+ `please check the value of ${CONFIG_PATH_KEY} in your environment`;
|
||||
|
||||
export const MISSING_HOST_MESSAGE = 'No database host provided in config toml';
|
||||
export const MISSING_DATABASE_MESSAGE = 'No database name provided in config '
|
||||
+ 'toml';
|
||||
export const MISSING_USER_MESSAGE = 'No database user & password provided in config toml';
|
||||
export const MISSING_DATABASE_MESSAGE = 'No database name provided in config toml';
|
||||
|
||||
export function parseConfig(
|
||||
readCallback: ReadFileSyncCallback,
|
||||
tomlParseCallback: TomlParseCallback,
|
||||
configPath?: string
|
||||
): DatabaseConfig {
|
||||
if (!configPath || configPath.length < 1) {
|
||||
throw new Error(MISSING_PATH_MESSAGE);
|
||||
let host = '';
|
||||
let port = '';
|
||||
let database = '';
|
||||
let user = '';
|
||||
let password = '';
|
||||
|
||||
if (configPath) {
|
||||
const tomlContents = readCallback(`${configPath}`).toString();
|
||||
const parsedToml = tomlParseCallback(tomlContents);
|
||||
|
||||
host = parsedToml['database']['hostname'];
|
||||
port = parsedToml['database']['port'];
|
||||
database = parsedToml['database']['name'];
|
||||
user = parsedToml['database']['user'];
|
||||
password = parsedToml['database']['password'];
|
||||
}
|
||||
|
||||
const tomlContents = readCallback(`${configPath}`).toString();
|
||||
const parsedToml = tomlParseCallback(tomlContents);
|
||||
// Overwrite config values with env. vars if such are set
|
||||
host = process.env.DATABASE_HOST || host;
|
||||
port = process.env.DATABASE_PORT || port;
|
||||
database = process.env.DATABASE_NAME || database;
|
||||
user = process.env.DATABASE_USER || user;
|
||||
password = process.env.DATABASE_PASSWORD || password;
|
||||
|
||||
const host = parsedToml['database']['hostname'];
|
||||
const port = parsedToml['database']['port'];
|
||||
const database = parsedToml['database']['name'];
|
||||
const user = parsedToml['database']['user'] || '';
|
||||
const password = parsedToml['database']['password'] || '';
|
||||
|
||||
if (!host || host.length < 1) {
|
||||
if (!host) {
|
||||
throw new Error(MISSING_HOST_MESSAGE);
|
||||
}
|
||||
|
||||
if (!database || database.length < 1) {
|
||||
if (!database) {
|
||||
throw new Error(MISSING_DATABASE_MESSAGE);
|
||||
}
|
||||
|
||||
if (!user || !password) {
|
||||
throw new Error(MISSING_USER_MESSAGE);
|
||||
}
|
||||
|
||||
return { host: `postgres://${user}:${password}@${host}:${port}`, database };
|
||||
}
|
||||
|
@ -108,9 +108,10 @@
|
||||
version "10.9.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.4.tgz#0f4cb2dc7c1de6096055357f70179043c33e9897"
|
||||
|
||||
"@types/node@10.9.3":
|
||||
version "10.9.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.3.tgz#85f288502503ade0b3bfc049fe1777b05d0327d5"
|
||||
"@types/node@^10.12.21":
|
||||
version "10.12.21"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.21.tgz#7e8a0c34cf29f4e17a36e9bd0ea72d45ba03908e"
|
||||
integrity sha512-CBgLNk4o3XMnqMc0rhb6lc77IwShMEglz05deDcn2lQxyXEZivfwgYJu7SMha9V5XcrP6qZuevTHV/QrN2vjKQ==
|
||||
|
||||
"@types/passport@0.4.6":
|
||||
version "0.4.6"
|
||||
|
Loading…
Reference in New Issue
Block a user