I would like to introduce what I have done with a NodeBB and a docker.
GitHub - qgp9/nodebb-docker-dev
Contribute to qgp9/nodebb-docker-dev development by creating an account on GitHub.
GitHub (github.com)
This docker chain of Nginx, NodeBB, Redis, MongoDB(!!) is based on Alpine Linux and docker-compose
.
This design is mainly for developments and small standalone service rather than large distributable/scalable service.
A Major Difference from other many(?) docker implementations is that I don't embed source and config files into images but just mount most of files on a host directory to containers even include NodeBB source and node_modules. There are pros and cons. I'll explain them briefly and we could discuss them.
UPDATE
A MongoDB
is added as a default DB !!!
And redis is intened to be used for websock blabla, but I'm not sure it's properly working.
What I know actually, no errors, no warnings and I can see both of mongo and redis at admin web UI.
If anybody would try this docker chain, please let me know results.
!!! WARNING !!!
I haven't checked yet how mongod
and redis-server
manage SIGTERM
which docker send.
This means that in worst case one can loose data !
Does any body know about this?
mongod
andredis-server
has been checked. Safe withdocker stop
but not withdocker kill
Installation
- This chain consists of 4 docker containers each of NodeBB, Redis, MongoDB, Nginx.
- I don't provide compiled images but 10 mins will be more than enough to build them by yourself with this instructions.
- You will get error from a nginx docker if you already have any web server with port 80. I'll explain solutions after lines.
git clone https://github.com/qgp9/nodebb-docker-dev.git nodebb-docker-dev
cd nodebb-docker-dev
git clone -b v1.x.x https://github.com/NodeBB/NodeBB.git nodebb
./bin/com-nodebb npm install
./bin/com-nodebb npm install socket.io-redis connect
./bin/com-nodebb npm setup
./bin/utils jq -M -s add nodebb/config.json conf/example/redis.josn > tmp.json && mv tmp.json nodebb/config.json
./bin/docker-compose up
- DB:
mongo
, DB address:mongodb
, DB user:admin
, no DB password - If you have a web server already, you have two options
- Remove a nginx from
docker-compose.xml
, connect a port 4567 of NodeBB to host, and you may know how you can connect from your webserver tohttp://127.0.0.1:4567
. Here is a example docker-compose.xml - change a external port of a nginx docker ( example is 8080 ) and connect from your web server to
http://127.0.0.1:8080
. Here is a example docker-compose.xml
- Remove a nginx from
Command line Settings, Upgrade, npm and so on
When you want to do ./nodebb setup
or ./nodebb upgrade
or npm install
on your nodebb, don't do it on Host directory. You have a helper script, do next.
./bin/com-nodebb ./nodebb setup
./bin/com-nodebb ./nodebb upgrade
./bin/com-nodebb npm install <package>
Also you can open bash and do whatever you want
./bin/com-nodebb bash
- But to edit/add/delete files,
git pull
, you can do it on the host directory ( or with docker, doesn't matter )
Structure
nodebb-docker-dev
├── bin
│  ├── com-nodebb # Helper to control NodeBB docker
│  └── docker-compose # Docker version of docker-compose for portability
├── conf # All Dockerfile and configuration.
│  ├── nginx
│  │  ├── Dockerfile
│  │  └── nginx.conf
│  ├── nodebb-dev
│  │  └── Dockerfile
│  └── redis
│  ├── Dockerfile
│  └── redis.conf
├── data
│  ├── nginx
│  │  └── logs # nginx, site logs
│  ├── nodebb # Empty. reserved for future plans.
│  └── redis # dump.rgb ( db data ) , redis.log ( log file )
├── docker-compose.yml
└── nodebb # NodeBB source will be here
- All configuration, data( log file ), NodeBB codes are mounted to dockers ( not copied ). So you can just edit them on a host directory.
- All configurations are in a
conf
directory. All data files genereated by nginx, redis are in adata
directory.- Exceptionally
config.json
and a logfile of NodeBB are in nodebb directory for easy management.
- Exceptionally
- This desigin is aimed to archive easy and best development/management system for small standalone service.
- Every improtant files are just under a main directory on a host and dockers act just like applications,
- so you can remove/rebuild docker containers/images freely without any effect to data.
- Also you can easily migrate this chain to new server. What you need is just copy the main directory to new server and rebuild dockers.
- But large distributing/scaling can meet some side effects.
Project Name
When you build a system by ./bin/docker-compose up
, you will see a wired long name of images/container like nodebbdockerdev_nginx
by docker images
or docker ps -a
. This is because docker-compose
use a directory name as a project nam.
To get a short/readable name , you have recommontable 2 options.
- Change the directory name
- Shell variables ( RECOMMENDED but easilly one can make mistakes. smartcd can help )
export COMPOSE_PROJECT_NAME=qgp9
- or you can embed this variable to
./bin/com-nodebb
and./bin/docker-compose
Then you will seeqgp9_nginx
.
And
More details will be .. updated at the github repo soon.
Any questions/comments/ideas/criticizing/WOW/BOO~ ?