diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..3b40663030 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,72 @@ +# Various Node ignoramuses. + +logs +*.log +npm-debug.log* +pids +*.pid +*.seed +lib-cov +coverage +.grunt +.lock-wscript +build/Release +node_modules +jspm_modules +.npm +.node_repl_history + +# Various Windows ignoramuses. +Thumbs.db +ehthumbs.db +Desktop.ini +$RECYCLE.BIN/ +*.cab +*.msi +*.msm +*.msp +*.lnk + +# Various OSX ignoramuses. +.DS_Store +.AppleDouble +.LSOverride +Icon +._* +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# Various Linux ignoramuses. + +.fuse_hidden* +.directory +.Trash-* + +# Various Magic Mirror ignoramuses and anti-ignoramuses. + +# Don't ignore the node_helper core module. +!/modules/node_helper +!/modules/node_helper/** + +# Ignore all modules except the default modules. +/modules/** +!/modules/default/** + +# Ignore changes to the custom css files. +/css/custom.css + +# Ignore unnecessary files for docker +CHANGELOG.md +LICENSE.md +README.md +Gruntfile.js +.* diff --git a/.gitignore b/.gitignore index 1e17ef8b37..e130a22e8a 100644 --- a/.gitignore +++ b/.gitignore @@ -53,7 +53,7 @@ Temporary Items # Various Magic Mirror ignoramuses and anti-ignoramuses. -# Don't ignore the node_helper nore module. +# Don't ignore the node_helper core module. !/modules/node_helper !/modules/node_helper/** diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bb9e8f09e..ea196b917e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). + ## [2.1.1] - Unreleased **Note:** This update uses new dependencies. Please update using the following command: `git pull && npm install` @@ -19,6 +20,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Run task jsonlint to check translation files. ### Added +- Added Docker support (Pull Request [#673](https://github.com/MichMich/MagicMirror/pull/673)) - Calendar-specific support for `maximumEntries`, and ` maximumNumberOfDays` - Add loaded function to modules, providing an async callback. - Made default newsfeed module aware of gesture events from [MMM-Gestures](https://github.com/thobach/MMM-Gestures) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..d845bac0f4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM node:latest + +WORKDIR /opt/magic_mirror +COPY . . +COPY /modules unmount_modules +COPY /config unmount_config + +ENV NODE_ENV production +ENV MM_PORT 8080 + +RUN npm install +RUN ["chmod", "+x", "docker-entrypoint.sh"] + +EXPOSE $MM_PORT +ENTRYPOINT ["/opt/magic_mirror/docker-entrypoint.sh"] diff --git a/README.md b/README.md index b13b5f5445..a94a7db526 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,41 @@ curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installer **Note:** if you want to debug on Raspberry Pi you can use `npm start dev` which will start the MagicMirror app with Dev Tools enabled. ### Server Only +In some cases, you want to start the application without an actual app window. In this case, you can start MagicMirror² in server only mode by manually running `node serveronly` or using Docker. This will start the server, after which you can open the application in your browser of choice. Detailed description below. -In some cases, you want to start the application without an actual app window. In this case, execute the following command from the MagicMirror folder: `node serveronly`. This will start the server, after which you can open the application in your browser of choice. +#### Docker + +MagicMirror² in server only mode can be deployed using [Docker](https://docker.com). After a successful [Docker installation](https://docs.docker.com/engine/installation/) you just need to execute the following command in the shell: + +```bash +docker run -d \ + --publish 80:8080 \ + --restart always \ + --volume ~/magic_mirror/config:/opt/magic_mirror/config \ + --volume ~/magic_mirror/modules:/opt/magic_mirror/modules \ + --name magic_mirror \ + MichMich/MagicMirror +``` + +| **Volumes** | **Description** | +| --- | --- | +| `/opt/magic_mirror/config` | Mount this volume to insert your own config into the docker container. | +| `/opt/magic_mirror/modules` | Mount this volume to add your own custom modules into the docker container. | + +You may need to add your Docker Host IP to your `ipWhitelist` option. If you have some issues setting up this configuration, check [this forum post](https://forum.magicmirror.builders/topic/1326/ipwhitelist-howto). + +```javascript +var config = { + ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:172.17.0.1"] +}; +``` + +#### Manual + +1. Download and install the latest Node.js version. +2. Clone the repository and check out the master branch: `git clone https://github.com/MichMich/MagicMirror` +3. Enter the repository: `cd ~/MagicMirror` +4. Install and run the app: `npm install && node serveronly` ### Raspberry Configuration & Auto Start. diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh new file mode 100644 index 0000000000..9d91492f0a --- /dev/null +++ b/docker-entrypoint.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +if [ ! -f /opt/magic_mirror/modules ]; then + cp -R /opt/magic_mirror/unmount_modules/. /opt/magic_mirror/modules +fi + +if [ ! -f /opt/magic_mirror/config ]; then + cp -R /opt/magic_mirror/unmount_config/. /opt/magic_mirror/config +fi + +node serveronly diff --git a/js/defaults.js b/js/defaults.js index 4639e2b3b5..e7e960363b 100644 --- a/js/defaults.js +++ b/js/defaults.js @@ -8,7 +8,7 @@ */ var defaults = { - port: 8080, + port: process.env.MM_PORT || 8080, kioskmode: false, electronOptions: {}, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"],