├── .dockerignore ├── scripts ├── logs.sh ├── clean.sh └── run-helper.sh ├── src ├── modules │ └── user │ │ ├── user-resolvers.js │ │ ├── user-mocks.json │ │ └── user-types.js ├── resolvers.js ├── type-defs.js └── index.js ├── Dockerfile ├── .gitignore ├── package.json └── README.md /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log -------------------------------------------------------------------------------- /scripts/logs.sh: -------------------------------------------------------------------------------- 1 | docker logs -f $(docker ps | grep $npm_package_config_imageName | awk '{print $1}') -------------------------------------------------------------------------------- /src/modules/user/user-resolvers.js: -------------------------------------------------------------------------------- 1 | const user = require('./user-mocks.json'); 2 | 3 | module.exports = { 4 | me: () => user 5 | }; 6 | -------------------------------------------------------------------------------- /src/modules/user/user-mocks.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Rodrigo Oler", 3 | "email": "roodrigoprogrammer@gmail.com", 4 | "github": "@rodrigooler" 5 | } 6 | -------------------------------------------------------------------------------- /src/resolvers.js: -------------------------------------------------------------------------------- 1 | const userResolvers = require('./modules/user/user-resolvers'); 2 | 3 | module.exports = { 4 | Query: { 5 | me: userResolvers.me 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /scripts/clean.sh: -------------------------------------------------------------------------------- 1 | app=$npm_package_config_imageName 2 | if docker ps | awk -v app="$app" 'NR > 1 && $NF == app{ret=1; exit} END{exit !ret}'; then 3 | docker stop "$app" && docker rm -f "$app" 4 | fi -------------------------------------------------------------------------------- /scripts/run-helper.sh: -------------------------------------------------------------------------------- 1 | cross-conf-env docker run -e NODE_ENV=local \ 2 | --name $npm_package_config_imageName -d \ 3 | -p $npm_package_config_imagePort:3000 \ 4 | $npm_package_config_imageRepo -------------------------------------------------------------------------------- /src/modules/user/user-types.js: -------------------------------------------------------------------------------- 1 | const {gql} = require('apollo-server'); 2 | 3 | module.exports = gql` 4 | type User { 5 | name: String 6 | email: String 7 | github: String 8 | } 9 | `; 10 | -------------------------------------------------------------------------------- /src/type-defs.js: -------------------------------------------------------------------------------- 1 | const {gql} = require('apollo-server'); 2 | 3 | const userTypes = require('./modules/user/user-types'); 4 | 5 | const queryTypes = gql` 6 | type Query { 7 | me: User 8 | } 9 | `; 10 | 11 | module.exports = [ 12 | userTypes, 13 | queryTypes 14 | ]; 15 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Download base image nodejs 2 | FROM node:8-alpine 3 | 4 | # Create app directory 5 | RUN mkdir -p src 6 | 7 | COPY package.json /src/package.json 8 | 9 | RUN cd /src; npm install 10 | 11 | COPY . /src 12 | 13 | WORKDIR src 14 | 15 | CMD ["npm", "start"] 16 | 17 | # Set port and start service 18 | EXPOSE 3000 -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const {ApolloServer} = require('apollo-server'); 2 | 3 | const typeDefs = require('./type-defs'); 4 | const resolvers = require('./resolvers'); 5 | 6 | const server = new ApolloServer({ 7 | typeDefs, 8 | resolvers, 9 | tracing: true 10 | }); 11 | 12 | const opts = { 13 | http: { 14 | port: process.env.PORT || 3000 15 | } 16 | }; 17 | 18 | server.listen(opts).then(({url}) => { 19 | console.log(`🚀 Server ready at ${url}`); 20 | }); 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "apollo-server-beta", 3 | "description": "Generic project for quick creation of a GraphQL with apollo-server@beta", 4 | "version": "0.0.1", 5 | "author": "Rodrigo Oler ", 6 | "bugs": { 7 | "url": "https://github.com/rodrigooler/apollo-server-beta/issues" 8 | }, 9 | "config": { 10 | "imageRepo": "apollo-server-beta", 11 | "imageName": "apollo-server-beta", 12 | "imagePort": "3000" 13 | }, 14 | "contributors": [ 15 | "Erick Wendel ", 16 | "Rafael Martins " 17 | ], 18 | "dependencies": { 19 | "apollo-server": "2.0.0-beta.7", 20 | "graphql": "0.13.2", 21 | "graphql-tag": "2.9.2" 22 | }, 23 | "devDependencies": { 24 | "cross-conf-env": "1.1.2", 25 | "husky": "0.14.3", 26 | "lint-staged": "7.2.0", 27 | "nodemon": "1.17.5", 28 | "npm-run-all": "4.1.3", 29 | "xo": "0.21.1" 30 | }, 31 | "homepage": "https://github.com/rodrigooler/apollo-server-beta#readme", 32 | "keywords": [ 33 | "Apollo", 34 | "Beta", 35 | "GraphQL", 36 | "Javascript", 37 | "Node" 38 | ], 39 | "license": "MIT", 40 | "lint-staged": { 41 | "*.js": [ 42 | "npm run xo:fix", 43 | "npm run xo", 44 | "git add" 45 | ] 46 | }, 47 | "main": "src/index.js", 48 | "repository": { 49 | "type": "git", 50 | "url": "git+https://github.com/rodrigooler/apollo-server-beta.git" 51 | }, 52 | "scripts": { 53 | "dev": "nodemon src/index", 54 | "docker:build": "cross-conf-env docker build -t $npm_package_config_imageName .", 55 | "docker:clean": "cross-conf-env ./scripts/clean.sh", 56 | "docker:debugmessage": "echo Docker Debug Completed Successfully! Hit Ctrl+C to terminate log tailing.", 57 | "docker:run": "run-s -c docker:clean docker:build docker:runHelper", 58 | "docker:runHelper": "cross-conf-env ./scripts/run-helper.sh", 59 | "docker:taillogs": "cross-conf-env ./scripts/logs.sh", 60 | "precommit": "lint-staged", 61 | "start": "node src/index", 62 | "xo": "xo", 63 | "xo:fix": "xo --fix" 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Apollo Server Beta 2 | 3 | [![npm version](https://badge.fury.io/js/apollo-server-core.svg)](https://badge.fury.io/js/apollo-server-core) 4 | [![Build Status](https://circleci.com/gh/apollographql/apollo-cache-control-js.svg?style=svg)](https://circleci.com/gh/apollographql/apollo-cache-control-js) 5 | [![Get on Slack](https://img.shields.io/badge/slack-join-orange.svg)](https://www.apollographql.com/#slack) 6 | 7 | Apollo Server is a community-maintained open-source GraphQL server. It works with pretty much all Node.js HTTP server frameworks, and we're happy to take PRs for more! Apollo Server works with any GraphQL schema built with [GraphQL.js](https://github.com/graphql/graphql-js), so you can build your schema with that directly or with a convenience library such as [graphql-tools](https://www.apollographql.com/docs/graphql-tools/). 8 | 9 | ## Documentation 10 | 11 | [Read the docs!](https://www.apollographql.com/docs/apollo-server/) 12 | 13 | ## Principles 14 | 15 | Apollo Server is built with the following principles in mind: 16 | 17 | * **By the community, for the community**: Apollo Server's development is driven by the needs of developers 18 | * **Simplicity**: by keeping things simple, Apollo Server is easier to use, easier to contribute to, and more secure 19 | * **Performance**: Apollo Server is well-tested and production-ready - no modifications needed 20 | 21 | Anyone is welcome to contribute to Apollo Server, just read [CONTRIBUTING.md](./CONTRIBUTING.md), take a look at the [roadmap](./ROADMAP.md) and make your first PR! 22 | 23 | ## Getting started 24 | 25 | - 1 - `git clone git@github.com:rodrigooler/apollo-server-beta.git` 26 | - 2 - `cd apollo-server-beta` 27 | - 3 - `npm run start or npm run dev (nodemon)`; 28 | 29 | >### Running with Docker 30 | >- 1 - Install [Docker](https://www.docker.com/get-docker) 31 | >- 2 - `npm run docker:run` or `sudo npm run docker:run` 32 | 33 | ## Features 34 | * **Cross-Platform:**. 35 | * **`npm run docker:run`:** Run the image you built on your local Docker instance. When you run `docker ps` your image will identified by the `imageName` you specify in `package.json`. 36 | 37 | ## Running 38 | You're done. Now run your scripts. To build and publish an image you only need to use two of the commands frequently. 39 | 1. **`npm run docker:taillogs`:** Shows logs for webserver. 40 | 2. **`npm run docker:clean`:** Kills the container that is running. 41 | 42 | 43 | [Thanks for duluca!](https://gist.github.com/duluca/d13e501e870215586271b0f9ce1781ce/) --------------------------------------------------------------------------------