All Projects → Osedea → Nodock

Osedea / Nodock

Licence: mit
Docker Compose for Node projects with Node, MySQL, Redis, MongoDB, NGINX, Apache2, Memcached, Certbot and RabbitMQ images

Programming Languages

shell
77523 projects

Projects that are alternatives of or similar to Nodock

Devilbox
A modern Docker LAMP stack and MEAN stack for local development
Stars: ✭ 3,598 (+390.19%)
Mutual labels:  redis, postgresql, docker-compose, apache
Netkiller.github.io
Netkiller Free ebook - 免费电子书
Stars: ✭ 861 (+17.3%)
Mutual labels:  redis, postgresql, memcached, apache
Machinery
Machinery is an asynchronous task queue/job queue based on distributed message passing.
Stars: ✭ 5,821 (+693.05%)
Mutual labels:  redis, memcached, rabbitmq
Kickoff Docker Php
🐳 🐘 🚀 Easily setup a PHP project with Docker
Stars: ✭ 213 (-70.98%)
Mutual labels:  redis, rabbitmq, docker-compose
Filterlists
🛡 The independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.
Stars: ✭ 653 (-11.04%)
Mutual labels:  redis, postgresql, docker-compose
Docker Compose
一些基础服务的docker-compose配置文件,方便在一台新电脑上快速开始工作
Stars: ✭ 163 (-77.79%)
Mutual labels:  redis, rabbitmq, docker-compose
Zend Diagnostics
Universal set of diagnostic tests for PHP applications.
Stars: ✭ 192 (-73.84%)
Mutual labels:  redis, memcached, rabbitmq
Neard
🎲 Portable WAMP software stack
Stars: ✭ 296 (-59.67%)
Mutual labels:  postgresql, memcached, apache
Docker Magento Mutagen
Mage2click Docker-based development environment for Magento with mutagen.io sync for files on macOS
Stars: ✭ 64 (-91.28%)
Mutual labels:  redis, rabbitmq, docker-compose
Stacker
Stacker - The environment for local web development, ready for use.
Stars: ✭ 356 (-51.5%)
Mutual labels:  redis, workspace, docker-compose
Enferno
A Python framework based on Flask microframework, with batteries included, and best practices in mind.
Stars: ✭ 385 (-47.55%)
Mutual labels:  redis, postgresql, docker-compose
Fastapi Celery
Minimal example utilizing fastapi and celery with RabbitMQ for task queue, Redis for celery backend and flower for monitoring the celery tasks.
Stars: ✭ 154 (-79.02%)
Mutual labels:  redis, rabbitmq, docker-compose
Docker Laravel
🐳 Docker Images for Laravel development
Stars: ✭ 101 (-86.24%)
Mutual labels:  redis, postgresql, docker-compose
Docker Alpine
Docker containers running Alpine Linux and s6 for process management. Solid, reliable containers.
Stars: ✭ 574 (-21.8%)
Mutual labels:  redis, rabbitmq, apache
Docker Superset
Repository for Docker Image of Apache-Superset. [Docker Image: https://hub.docker.com/r/abhioncbr/docker-superset]
Stars: ✭ 86 (-88.28%)
Mutual labels:  redis, docker-compose, apache
dockerX
Examples of amazing Docker/Docker-Compose/Docker Swarm technologies
Stars: ✭ 17 (-97.68%)
Mutual labels:  rabbitmq, certbot, docker-images
Invenio
Invenio digital library framework
Stars: ✭ 469 (-36.1%)
Mutual labels:  redis, postgresql, rabbitmq
Phalcon Vm
Vagrant configuration for PHP7, Phalcon 3.x and Zephir development.
Stars: ✭ 43 (-94.14%)
Mutual labels:  redis, postgresql, rabbitmq
Gokv
Simple key-value store abstraction and implementations for Go (Redis, Consul, etcd, bbolt, BadgerDB, LevelDB, Memcached, DynamoDB, S3, PostgreSQL, MongoDB, CockroachDB and many more)
Stars: ✭ 314 (-57.22%)
Mutual labels:  redis, postgresql, memcached
Gnomock
Test your code without writing mocks with ephemeral Docker containers 📦 Setup popular services with just a couple lines of code ⏱️ No bash, no yaml, only code 💻
Stars: ✭ 398 (-45.78%)
Mutual labels:  redis, memcached, rabbitmq

NoDock

Docker Compose for Node projects with Node, MySQL, MongoDB, NGINX, Memcached, Redis, Certbot and RabbitMQ images

Node + Docker

Why NoDock?

The docker Node.js image is very simple, you give it an entrypoint and it runs it. This is fine for very simple/small scripts but for larger projects you'll probably want something a bit more robust.

The goal of NoDock is to provide a complete environment for your node project: Node.js service(s), databases, web servers, queues, etc. while doing the "wiring" for you.

You can use NoDock for simple projects by using one of the examples or you can build upon them.

Contents

Requirements

Installation

As a git submodule:

git submodule add https://github.com/Osedea/nodock.git

Clone into your project:

git clone https://github.com/Osedea/nodock.git

We recommend you fork this repository if you intend to add project specific scripts/configurations.

Usage

cd nodock
# Run "node" and "nginx"
docker-compose up -d node nginx

To overwrite the docker-compose.yml file you can use a docker-compose.override.yml

# docker-compose.override.yml

version: '3'

services:
    [...]

Examples

We provide examples of configurations you might use for a specific stack. Each example has it's own README file with instructions.

Workspace

The workspace container is where you want to be manually running commands for NoDock. You can use this container to initialize your project, for task-automation, for cronjobs, etc.

Using HTTPS

By default HTTPS is disabled. To enable it, you may use the following settings

# docker-compose.override.yml
[...]
    nginx:
        build:
            args:
                - WEB_SSL=true

Add your certificate to nginx/certs/cacert.pem and the private key to nginx/certs/privkey.pem.

Generate and use a self-signed cert

SELF_SIGNED: "true" will generate the necessary files, do note that SELF_SIGNED: "true" as no effect if WEB_SSL: "false"

# docker-compose.override.yml
[...]
    nginx:
        build:
            args:
                - WEB_SSL=true
                - SELF_SIGNED=true

Use Certbot (Let's Encrypt) to generate the cert

CN must be a publicly accessible address and EMAIL should be the server admin contact email.

# docker-compose.override.yml
[...]
    nginx:
        build:
            args:
                - WEB_SSL=true
    certbot:
        environment:
            - CN=example.com
            - [email protected]

Don't forget to bring up the container if you plan on using certbot (docker-compose up -d certbot).

Running a single non-web container

The default NGINX server block configuration is aimed at web projects but if you want to have a single non-web container you can do something similar to the following configuration.

# docker-compose.override.yml
[...]
    nginx:
        build:
            args:
                -NO_DEFAULT=true
        ports:
            - "10000:10000"

Do note that using NO_DEFAULT makes WEB_REVERSE_PROXY_PORT, WEB_SSL and SELF_SIGNED have no effect.

You will then have to provide your own NGINX server block like so

# nginx/sites/custom-node.conf

server {
    listen 10000 default_server;

    location / {
        proxy_pass http://node:5000;
    }
}

Running multiple node containers

To add more node containers, simply add the following to your docker-compose.override.yml or environment specific docker-compose file.

# docker-compose.override.yml
[...]
    node2: # name of new container
        build:  # reuse the same values from the node service, cannot use extends in docker-compose 3+
            context: ./node
            args:
                - NODE_VERSION=latest
                - PROJECT_PATH=/opt/app/
                - NODE_ENV=production
                - YARN=false
        volumes:
            - ../:/opt/app
        entrypoint: run-nodock "node alternate.js" # the entrypoint for the "node2" container
    nginx:
        ports:
            - "10000:10000" # the port(s) to forward for the "node2" container
        links:
            - node2 # link "nginx" to "node2"

You'll also need to add a server block for "node2".

# nginx/sites/node2.conf

server {
    listen 10000 default_server;

    location / {
        proxy_pass http://node2:8000;
    }
}

Cronjobs

You can run cronjobs in the Workspace by storing them in the workspace/crontab/root file.

# workspace/crontab/root

* * * * * echo "Every Minute" >> /var/log/cron.log

More Options

To customize the NoDock installation, either add a docker-compose.override.yml in the NoDock directory or store environment specific configurations.

docker-compose -f nodock/docker-compose.yml -f docker-compose.dev.yml up -d

Use Yarn

Set the YARN argument to true.

# docker-compose.override.yml
[...]
    node:
        build:
            args:
                - YARN=true

Change the node entrypoint

Use main.js instead of index.js

# docker-compose.override.yml
[...]
    node:
        entrypoint: run-nodock "node main.js"

Change the Node Environment

The default NODE_ENV value is production, you can change it to development by doing the following

# docker-compose.override.yml
[...]
    node:
        build:
            args:
                - NODE_ENV=development

Use a specific Node version

The default node version is latest, this is NOT advisable for production

# docker-compose.override.yml
[...]
    node:
        build:
            args:
                - NODE_VERSION=4.6.0

Change the Node project path

You can specify a PROJECT_PATH to change the directory in which npm will perform it's install command and the directory in which run-nodock will run the entrypoint script. This is most desirable when running more than one Node project at a time since they are bound to each have their own package.json file.

# docker-compose.override.yml
[...]
    node:
        build:
            args:
                PROJECT_PATH: somefolder # note that this is the same as "/opt/app/somefolder"

Change the MySQL database/user/password

# docker-compose.override.yml
[...]
    mysql:
        build:
            args:
                - MYSQL_DATABASE=default_database
                - MYSQL_USER=default_user
                - MYSQL_PASSWORD=secret

Change the PostgreSQL database/user/password

# docker-compose.override.yml
[...]
    postgresql:
        build:
            args:
                - POSTGRES_DB=default_db
                - POSTGRES_USER=default_user
                - POSTGRES_PASSWORD=secret

Change the NGINX reverse proxy port

Use port 8080 instead of 8000 to bind your Node server

# docker-compose.override.yml
[...]
    nginx:
        build:
            args:
                - WEB_REVERSE_PROXY_PORT=8080

Change the timezone

To change the timezone for the workspace container, modify the TZ build argument in the Docker Compose file to one in the TZ database.

For example, if I want the timezone to be New York:

# docker-compose.override.yml
[...]
     workspace:
        build:
            context: ./workspace
            args:
                - TZ="America/New_York"

Use RabbitMQ plugins

At the moment, NoDock supports 2 plugins: Management and Federation.

To activate them, change their values to true in your docker-compose file:

# docker-compose.override.yml
[...]
    rabbitmq:
        build:
            args:
                - MANAGEMENT=true
                - FEDERATION=true

Change the RabbitMQ user/password

# docker-compose.override.yml
[...]
    rabbitmq:
        build:
            args:
                - RABBITMQ_DEFAULT_USER=custom_user
                - RABBITMQ_DEFAULT_PASS=custom_pass

Modify the Redis config

You can edit redis/redis.conf to modify the redis config.

Contributing

Do not hesitate to contribute to NoDock by creating an issue, fixing a bug or bringing a new idea to the table.

To fix a bug or introduce a new feature, please create a PR, we will merge it in to the master branch after review.

We thank you in advance for contributing.

License

MIT License (MIT)

Credits

NoDock uses Open Source components. You can find the source code of their open source projects along with license information below. We acknowledge and are grateful to these developers for their contributions to open source.

Project: LaraDock https://github.com/LaraDock/laradock
Copyright (c) 2016 Mahmoud Zalt ([email protected])
License (MIT) https://github.com/LaraDock/laradock/blob/master/LICENSE

Project: baseimage-docker https://github.com/phusion/baseimage-docker
Copyright (c) 2013-2015 Phusion Holding B.V.
License (MIT) https://github.com/phusion/baseimage-docker/blob/master/LICENSE.txt

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].