Преглед изворни кода

Add docker-compose file and improve dockerfile

poeti8 пре 6 година
родитељ
комит
4de7665f9d
6 измењених фајлова са 41 додато и 228 уклоњено
  1. 12 35
      Dockerfile
  2. 27 0
      docker-compose.yml
  3. 0 63
      docker-examples/README.md
  4. 0 36
      docker-examples/server-config.example.js
  5. 2 0
      package.json
  6. 0 94
      run.sh

+ 12 - 35
Dockerfile

@@ -1,40 +1,17 @@
-FROM node:9.5.0-alpine
+FROM node:10-alpine
 
 
-ADD . /code
-WORKDIR /code
-RUN apk add --no-cache bash
-RUN npm install
-RUN npm run build
-
-ENV KUTT_PORT 3000
-ENV KUTT_DOMAIN 'kutt.it'
-
-ENV NEO4J_HOST '127.0.0.1'
-ENV NEO4J_USER ''
-ENV NEO4J_PASS ''
-
-ENV REDIS_HOST '127.0.0.1'
-ENV REDIS_PORT 6379
-ENV REDIS_PASSWORD ''
+# Setting working directory. 
+WORKDIR /usr/src/app
 
 
-ENV USER_LIMIT_PER_DAY 50
-ENV JWT_SECRET 'mysecurekey'
-ENV ADMIN_EMAILS '[]'
-
-ENV RECAPTCHA_SECRET_KEY ''
-ENV RECAPTCHA_SITE_KEY ''
-
-ENV GOOGLE_SAFE_BROWSING_KEY ''
-ENV GOOGLE_ANALYTICS ''
+# Installing dependencies
+COPY package*.json ./
+RUN npm install
 
 
-ENV MAIL_HOST ''
-ENV MAIL_PORT ''
-ENV MAIL_SECURE 'false'
-ENV MAIL_USER ''
-ENV MAIL_FROM ''
-ENV MAIL_PASSWORD ''
-ENV MAIL_REPORT ''
-ENV CONTACT_EMAIL ''
+# Copying source files
+COPY . .
 
 
-CMD /code/run.sh
+# Building app
+RUN npm run build
 
 
+# Running the app
+CMD [ "npm", "start" ]

+ 27 - 0
docker-compose.yml

@@ -0,0 +1,27 @@
+version: '3'
+
+services:
+  kutt:
+    build: .
+    container_name: kutt
+    links:
+      - neo4j
+      - redis
+    ports:
+      - "3000:3000"
+    env_file: 
+      - .env
+    
+  redis:
+    image: "redis:alpine"
+    container_name: kutt-redis
+    expose:
+      - 6379
+
+  neo4j:
+    image: neo4j:3.5
+    container_name: kutt-neo4j
+    environment:
+      - NEO4J_AUTH=neo4j/test
+    expose:
+      - 7687

+ 0 - 63
docker-examples/README.md

@@ -1,63 +0,0 @@
-# Running Kutt in Docker
-
-Assumptions:
-The domain in this example is `kutt.local`. This needs to be configured in your hosts file for this example to work _as written_. You should, of course, modify this domain to suit your needs. 
-
-### Configure Kutt
-
-server/config.js
-```
-module.exports = {
-
-	PORT: process.env.KUTT_PORT, # Or whatever you want to name the env var
-    
-    /* The domain that this website is on */
-    DEFAULT_DOMAIN: process.env.KUTT_DOMAIN, # Or whatever..
-    
-    ...
-    
-}
-```
-
-No docker-relevant modifications are necessary for client/config.js. However, you will still need to configure this as part of the standard kutt setup. 
-
-### Neo4j in a container
-
-You can run neo4j in a container and link it to the kutt container in Docker. 
-
-Properly installing and running neo4j is outside of the scope of this document. But here's a simple one-liner to get neo4j running on docker for dev/test:
-
-```
-docker run \
-    --publish=7474:7474 --publish=7687:7687 \
-    --name neo4j \
-    neo4j
-```
-**This is not a production-ready setup. There is no data persistence, nor proper security. Use for test/dev only.**
-
-Then, configure Kutt:
-server/config.js
-```
-...
-/* Neo4j database credential details */
-DB_URI: 'bolt://neo4j',
-DB_USERNAME: 'neo4j', # Or pass this in via env var as before 
-DB_PASSWORD: 'neo4j', # Or via env var..
-...
-```
-
-Once you have neo4j running in a container, you'll link your Kutt container to it. This will be documented below.
-
-### Build Kutt Image
-
-First you'll need to build Kutt.
-From the root directory of Kutt, execute the following:
-`docker build -t kutt .`
-
-### Run Kutt
-
-Once you've built the image, then all that is left to do is run Kutt.
-
-`docker run -d -p80:3000 -e KUTT_PORT=3000 -e KUTT_DOMAIN=kutt.local --link=neo4j kutt`
-
-Direct your browser to http://kutt.local/ and begin kutting URLs!

+ 0 - 36
docker-examples/server-config.example.js

@@ -1,36 +0,0 @@
-module.exports = {
-  PORT: process.env.KUTT_PORT,
-
-  /* The domain that this website is on */
-  DEFAULT_DOMAIN: process.env.KUTT_DOMAIN,
-
-  /* Neo4j database credential details */
-  DB_URI: 'bolt://localhost',
-  DB_USERNAME: '',
-  DB_PASSWORD: '',
-
-  /* A passphrase to encrypt JWT. Use a long and secure key. */
-  JWT_SECRET: 'securekey',
-
-  /*
-    Invisible reCaptcha secret key
-    Create one in https://www.google.com/recaptcha/intro/
-  */
-  RECAPTCHA_SECRET_KEY: '',
-
-  /* 
-    Google Cloud API to prevent from users from submitting malware URLs.
-    Get it from https://developers.google.com/safe-browsing/v4/get-started
-  */
-  GOOGLE_SAFE_BROWSING_KEY: '',
-
-  /*
-    Your email host details to use to send verification emails.
-    More info on http://nodemailer.com/
-  */
-  MAIL_HOST: '',
-  MAIL_PORT: 587,
-  MAIL_SECURE: false,
-  MAIL_USER: '',
-  MAIL_PASSWORD: '',
-};

+ 2 - 0
package.json

@@ -6,6 +6,8 @@
   "scripts": {
   "scripts": {
     "test": "mocha --compilers js:@babel/register ./client/**/__test__/*.js",
     "test": "mocha --compilers js:@babel/register ./client/**/__test__/*.js",
     "dev": "nodemon ./server/server.js",
     "dev": "nodemon ./server/server.js",
+    "docker:build": "docker build -t kutt .",
+    "docker:run": "docker run -p 3000:3000 --env-file .env -d kutt:latest",
     "build": "next build ./client",
     "build": "next build ./client",
     "start": "NODE_ENV=production node ./server/server.js",
     "start": "NODE_ENV=production node ./server/server.js",
     "lint": "./node_modules/.bin/eslint . --fix",
     "lint": "./node_modules/.bin/eslint . --fix",

+ 0 - 94
run.sh

@@ -1,94 +0,0 @@
-#!/bin/bash
-
-
-echo "Configuring client"
-
-cat <<EOF > client/config.js
-module.exports = {
-  /*
-    Invisible reCaptcha site key
-    Create one in https://www.google.com/recaptcha/intro/
-  */
-  RECAPTCHA_SITE_KEY: "${RECAPTCHA_SITE_KEY}",
-
-  // Google analytics tracking ID
-  GOOGLE_ANALYTICS_ID: "${GOOGLE_ANALYTICS}",
-
-  // Contact email address
-  CONTACT_EMAIL: "${CONTACT_EMAIL}",
-
-  // Report email address
-  REPORT_EMAIL: "${MAIL_REPORT}",
-};
-EOF
-
-cat <<EOF > server/config.js
-module.exports = {
-  PORT: process.env.KUTT_PORT,
-
-  /* The domain that this website is on */
-  DEFAULT_DOMAIN: process.env.KUTT_DOMAIN,
-
-  /* Neo4j database credential details */
-  DB_URI: 'bolt://' + process.env.NEO4J_HOST,
-  DB_USERNAME: process.env.NEO4J_USER,
-  DB_PASSWORD: process.env.NEO4J_PASS,
-
-  /* Redis host and port */
-  REDIS_HOST: process.env.REDIS_HOST,
-  REDIS_PORT: process.env.REDIS_PORT,
-  REDIS_PASSWORD: process.env.REDIS_PASS,
-
-  /* The daily limit for each user */
-  USER_LIMIT_PER_DAY: parseInt(process.env.USER_LIMIT_PER_DAY || 50, 10),
-
-  /* A passphrase to encrypt JWT. Use a long and secure key. */
-  JWT_SECRET: process.env.JWT_SECRET,
-
-  /*
-    Admin emails so they can access admin actions on settings page
-    Array of strings
-  */
-  ADMIN_EMAILS: JSON.parse(process.env.ADMIN_EMAILS || '[]'),
-
-  /*
-    Invisible reCaptcha secret key
-    Create one in https://www.google.com/recaptcha/intro/
-  */
-  RECAPTCHA_SECRET_KEY: process.env.RECAPTCHA_SECRET_KEY,
-
-  /*
-    Google Cloud API to prevent from users from submitting malware URLs.
-    Get it from https://developers.google.com/safe-browsing/v4/get-started
-  */
-  GOOGLE_SAFE_BROWSING_KEY: process.env.GOOGLE_SAFE_BROWSING_KEY,
-
-  /*
-    Google Analytics tracking ID for universal analytics.
-    Example: UA-XXXX-XX
-  */
-  GOOGLE_ANALYTICS: process.env.GOOGLE_ANALYTICS,
-
-  /*
-    Your email host details to use to send verification emails.
-    More info on http://nodemailer.com/
-  */
-  MAIL_HOST: process.env.MAIL_HOST,
-  MAIL_PORT: process.env.MAIL_PORT,
-  MAIL_SECURE: process.env.MAIL_SECURE == 'true',
-  MAIL_USER: process.env.MAIL_USER,
-  MAIL_FROM: process.env.MAIL_FROM, // Example: "Kutt <support@kutt.it>". Leave empty to use MAIL_USER
-  MAIL_PASSWORD: process.env.MAIL_PASS,
-
-  /*
-    The email address that will receive submitted reports.
-  */
-  REPORT_MAIL: process.env.MAIL_REPORT,
-};
-EOF
-
-echo "Building Client"
-./node_modules/.bin/next build ./client
-
-echo "Starting"
-npm start