Skip to content

Commit

Permalink
feat(nodebb): add NodeBB custom images
Browse files Browse the repository at this point in the history
  • Loading branch information
n0bodysec committed Feb 22, 2023
1 parent cb76507 commit 63c0918
Show file tree
Hide file tree
Showing 9 changed files with 193 additions and 0 deletions.
3 changes: 3 additions & 0 deletions nodebb/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
data/
.env
docker-compose.override.yml
21 changes: 21 additions & 0 deletions nodebb/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# NodeBB

**WARNING: Test images only. Not intensively tested!**
\
These two docker images provide a plug n' play installation of NodeBB.
The [v1 image](v1/) provides an helper installation script and the entire nodebb package on a mounted volume.
The [v2 image](v2/) provides a custom docker image with the specified NodeBB version and only necessary data for NodeBB on a mounted volume.

## ❓ Should I choose v1 or v2?

**v1** is simpler and has better support for plugins and source code modifications (because it is loaded from a mounted volume). This is similar to a non-Docker installation.

**v2** is the "traditional" way to use a program within Docker. The NodeBB volume contains only the forum data and to update it, the Docker base image must be updated. **It has not been fully tested and may contain bugs.**

## 🚀 Deploy

1. Choose between v1 or v2.
2. (***optional***) Create a `docker-compose.override.yml` file and edit it to suit your needs.
3. Copy `.env.example` to `.env` and edit it accordingly.
4. (***v1 only***) Run `docker compose up install`.
5. Run `docker compose up -d`.
12 changes: 12 additions & 0 deletions nodebb/v1/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# NodeBB
NODE_ENV=production
daemon=false
silent=false

# PostgreSQL
POSTGRES_USER=postgres
POSTGRES_DB=nodebb
POSTGRES_PASSWORD=secret

# Installer script
CHECKOUT=master
50 changes: 50 additions & 0 deletions nodebb/v1/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
version: '3.9'

services:
app:
image: node:alpine
restart: unless-stopped
expose: [ '4567' ]
networks: [ 'default' ]
env_file: [ '.env' ]
depends_on: [ 'db' ]
volumes: [ './data/nodebb:/app' ]
user: node
working_dir: /app
entrypoint: ./nodebb
command: start

db:
image: postgres:latest
restart: unless-stopped
expose: [ '5432' ]
networks: [ 'default' ]
env_file: [ '.env' ]
volumes: [ './data/postgres:/var/lib/postgresql/data' ]

install:
image: node:alpine
profiles: [ 'dev' ]
volumes: [ './data/nodebb:/app' ]
working_dir: /app
environment:
CHECKOUT: ${CHECKOUT:-master}
SETUP: ${SETUP}
command:
- /bin/sh
- -c
- |
apk add --no-cache git
git clone https://github.com/NodeBB/NodeBB.git .
git checkout $CHECKOUT
cp install/package.json .
npm install --only=prod
test -n "${SETUP}" && ./nodebb setup
chown -R node:node *
node:
image: node:alpine
profiles: [ 'dev' ]
volumes: [ './data/nodebb:/app' ]
user: node
working_dir: /app
12 changes: 12 additions & 0 deletions nodebb/v2/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# PostgreSQL
POSTGRES_USER=postgres
POSTGRES_DB=nodebb
POSTGRES_PASSWORD=secret

# MongoDB
# MONGO_INITDB_ROOT_USERNAME=mongoadmin
# MONGO_INITDB_ROOT_PASSWORD=secret
# MONGO_INITDB_DATABASE=nodebb

# Builder image
CHECKOUT=tags/v2.8.0
32 changes: 32 additions & 0 deletions nodebb/v2/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Builder image
FROM node:alpine AS builder

ARG CHECKOUT=master

WORKDIR /app
RUN apk add --no-cache git dos2unix \
&& chown -R node:node /app

USER node
RUN git clone https://github.com/NodeBB/NodeBB.git . \
&& git checkout $CHECKOUT \
&& cp install/package.json .
RUN npm install --only=prod

COPY --chown=node:node entrypoint.sh .
RUN chmod +x *.sh && dos2unix *.sh

# Main image
FROM node:alpine

ENV NODE_ENV=production \
daemon=false \
silent=false

WORKDIR /usr/src/app
RUN chown -R node:node /usr/src/app
USER node
COPY --from=builder /app .

ENTRYPOINT [ "/usr/src/app/entrypoint.sh" ]
CMD [ "node", "loader.js" ]
11 changes: 11 additions & 0 deletions nodebb/v2/docker-compose.mongodb.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
version: '3.9'

services:
db:
image: mongo:bionic
restart: unless-stopped
expose: [ '27017' ]
networks: [ 'default' ]
env_file: [ '.env' ]
volumes: [ './data/mongodb/:/data/db' ]
profiles: [ 'mongodb' ]
21 changes: 21 additions & 0 deletions nodebb/v2/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
version: '3.9'

services:
app:
build:
context: .
args:
CHECKOUT: ${CHECKOUT:-master}
restart: unless-stopped
expose: [ '4567' ]
networks: [ 'default' ]
depends_on: [ 'db' ]
volumes: [ './data/nodebb:/data' ]

db:
image: postgres:latest
restart: unless-stopped
expose: [ '5432' ]
networks: [ 'default' ]
env_file: [ '.env' ]
volumes: [ './data/postgres:/var/lib/postgresql/data' ]
31 changes: 31 additions & 0 deletions nodebb/v2/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/sh
set -e

# Thanks to rez0n (https://github.com/rez0n/docker-nodebb/blob/master/entrypoint.sh)

DATA_PATH=/data
APP_PATH=/usr/src/app

# config.json
# if [ ! -e $DATA_PATH/config.json ]; then mv $APP_PATH/config.json $DATA_PATH/config.json; else rm $APP_PATH/config.json; fi
if [ ! -e $APP_PATH/config.json ]; then ln -s $DATA_PATH/config.json $APP_PATH/config.json; fi

# public/uploads
if [ ! -e $DATA_PATH/uploads ]; then mv $APP_PATH/public/uploads $DATA_PATH/uploads; else rm -rf $APP_PATH/public/uploads; fi
ln -s $DATA_PATH/uploads $APP_PATH/public/uploads

# logs
if [ ! -e $DATA_PATH/logs ]; then mv $APP_PATH/logs $DATA_PATH/; else rm -rf $APP_PATH/logs; fi
ln -s $DATA_PATH/logs $APP_PATH/logs

# package.json
if [ ! -e $DATA_PATH/package.json ]; then mv $APP_PATH/package.json $DATA_PATH/package.json; else rm $APP_PATH/package.json; fi
ln -s $DATA_PATH/package.json $APP_PATH/package.json

# commands
if [ -f $APP_PATH/config.json ]; then
$APP_PATH/nodebb build --series
$APP_PATH/nodebb upgrade -mips
fi

exec "$@"

0 comments on commit 63c0918

Please sign in to comment.