forked from cerc-io/ipld-eth-server
Dockerize postgraphile
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
node_modules
|
||||
Dockerfile
|
||||
README.md
|
||||
spec
|
||||
.dockerignore
|
||||
@@ -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"]
|
||||
+13
-1
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user