Guide to install NodeBB on Docker with Synology NAS (DSM)

  • GNU/Linux

    Sans titre3.png


    Here is a guide for those who want to install a small NodeBB forum on their Synology NAS using Docker.

    This guide is designed for those with no knowledge in servers management in CLI (command line interface), all the installation described here can be carried out in the DSM interface from Synology.

    For larger installations a Dedicated Server / VPS or hosting services like NodeBB Instant Hosting is probably preferable but for a small community or for testing purposes, this solution is functional.

    Prerequisites:

    • A static IP address from your ISP or a Dynamic DNS configured from the NAS. (I would not detail this part, I consider that you already have it)

    • A Domain name that redirects to your NAS. (From Synology DDNS, GoDaddy, Bluehost, OVH, etc...)

    • Ports 80/443 open in your router and that redirect to your NAS

    • A compatible Synology NAS with DSM 6.2.x or later (see list below)

    Applied Models:

    20 series:	FS6400, FS3400, RS820RP+, RS820+, DS620slim, SA3600, SA3400, SA3200D
    19 series:	RS1619xs+, RS1219+, DS2419+, DS1819+, DS1019+, DVA3219
    18 series:	FS1018, RS3618xs, RS2818RP+, RS2418RP+, RS2418+, RS818RP+, RS818+, DS3018xs, DS1618+, DS918+, DS718+, DS218+
    17 series:	FS3017, FS2017, RS18017xs+, RS4017xs+, RS3617xs+, RS3617RPxs, RS3617xs, DS3617xs, DS1817+, DS1517+
    16 series:	RS18016xs+, RS2416RP+, RS2416+, DS916+, DS716+, DS716+II, DS216+, DS216+II
    15 series:	RS815RP+, RS815+, RC18015xs+, DS3615xs, DS2415+, DS1815+, DS1515+, DS415+
    14 series:	RS3614xs+, RS3614RPxs, RS3614xs, RS2414RP+, RS2414+, RS814RP+, RS814+
    13 series:	RS10613xs+, RS3413xs+, DS2413+, DS1813+, DS1513+, DS713+
    12 series:	RS3412RPxs, RS3412xs, RS2212RP+, RS2212+, RS812RP+, RS812+, DS3612xs, DS1812+, DS1512+, DS712+, DS412+
    11 series:	RS3411RPxs, RS3411xs, RS2211RP+, RS2211+, DS3611xs, DS2411+, DS1511+, DS411+, DS411+II
    *10 series:	RS810RP+, RS810+, DS1010+, DS710+
    

    First Step: Docker and Database

    (We choose a redis database here given that we want to set up a fast small forum)


    • Install Docker on your Synology from the Package Center

    screenshot-zwcloud.ovh_5001-2020.05.29-23_09_17.png


    • Go in Registry and search for Redis. Then we download the latest bitnamli/redis Image by double-clicking on it. We're not using official Redis image for ease because Bitnami's image allows us to add environment variables that will be useful in the Synology GUI (the redis password in our case).

    screenshot-zwcloud.ovh_5001-2020.05.29-23_10_38.png


    • Once the image is downloaded, you can found it in the Image tab. Then launch it.

    screenshot-zwcloud.ovh_5001-2020.05.29-23_11_39.png


    • Name the container as you want (redis-nodebb in my case) and click Advanced Settings

    screenshot-zwcloud.ovh_5001-2020.05.29-20_55_03.png


    • Check Enable auto-restart

    screenshot-zwcloud.ovh_5001-2020.05.29-20_39_00.png


    • Go to Port Settings and set local port to 6379.

    screenshot-zwcloud.ovh_5001-2020.05.29-20_46_29.png


    • Go to Environment and add the variable REDIS_PASSWORD with a solid password by pressing the "+" button. (do not copy mypassword in my image example).

    screenshot-zwcloud.ovh_5001-2020.05.29-20_49_26.png


    • Click Apply and you should see your container starting in Container tab

    screenshot-zwcloud.ovh_5001-2020.05.29-20_58_22.png


    Second Step: NodeBB

    • Return in Registry tab and search and download latest nodebb/docker image

    screenshot-zwcloud.ovh_5001-2020.05.29-21_05_28.png


    • Go to Image tab. Launch nodebb/docker. Name it as you want, then go to Advanced Settings

    screenshot-zwcloud.ovh_5001-2020.05.29-21_08_26.png


    • Enable auto-restart

    • In Port Settings set local port to 4567 then Apply then Next and finally Apply again.

    screenshot-zwcloud.ovh_5001-2020.05.29-21_14_00.png


    • You should now see your two containers with redis and nodebb started in Container tab

    screenshot-zwcloud.ovh_5001-2020.05.29-21_20_08.png


    • Configure NodeBB installer on http://your-nas-ip:4567 in your favorite browser (your-nas-ip should be the same from Synology DSM access. Something like 192.168.X.X)

      • Note that in "Web address" you must indicate the external url of your forum with your own domain name with HTTPS. I don't detail in this tutorial how to buy a domain name, but if you only want to use nodebb locally, just leave the default url.

      • Fill in your login details for the administrator.

      • Fill in the information for the database as shown below

      • Click Install

    screenshot-192.168.1.3_32801-2020.05.29-21_32_46.png


    Third Step: Persistent Storage

    Datas in Docker containers are not persistent by default. However, it is essential for a forum to have control over the data and be able to perform backups and restores. This is why Docker allows us to mount volumes to associate a folder on your NAS with folders inside the containers.

    • In File Station > docker folder, create a new folder nodebb.
      You should have something like: /volume1/docker/nodebb

    Note: You have to identify the absolute path of your folder depending on your volumes on your NAS. In File Station, Right click on the folder > Properties > Location. For me, it's starting with /volume1.


    • Go to Control Panel > Task Scheduler and create a new task script

    screenshot-zwcloud.ovh_5001-2020.05.29-21_56_07.png


    • In General Settings let Root user and in Task Settings copy this example in Run command
    docker cp nodebb-docker:/usr/src/app/public/uploads /volume1/docker/nodebb
    
    docker cp redis-nodebb:/bitnami/redis/data /volume1/docker/nodebb
    

    if you've named your containers differently than I have, you have to change: nodebb-docker:/ and redis-nodebb:/ according to yours.

    screenshot-zwcloud.ovh_5001-2020.05.29-23_41_26.png


    • Click OK, then select your script and Run it

    screenshot-zwcloud.ovh_5001-2020.05.29-22_19_23.png


    • You should now have two new folders in /docker/nodebb. One /data and one /uploads. Check that they are present and not empty. You can then remove the script you created previously if it succeeded.

    screenshot-zwcloud.ovh_5001-2020.05.30-16_31_41.png


    • Return in Docker > Container tab, and turn off the Redis and NodeBB containers

    screenshot-zwcloud.ovh_5001-2020.05.29-22_23_39.png


    • Click Edit on your nodebb container turned off, and go to Volume tab > Add Folder

    screenshot-zwcloud.ovh_5001-2020.05.29-22_26_52.png


    • Select: /docker/nodebb/uploads on your NAS, and mount it to: /usr/src/app/public/uploads. Then Apply

    screenshot-zwcloud.ovh_5001-2020.05.29-22_31_46.png


    • Do the same procedure to your redis container by mounting /docker/nodebb/data to /bitnami/redis/data

    screenshot-zwcloud.ovh_5001-2020.05.29-22_34_39.png


    • Restart the two containers and check that there is no fail. (if container can't start, there is a problem in the mounted folders or permissions)

    Fourth Step: SSL and Reverse proxy

    Your forum should already be operational at this stage, but we now want to be able to access it from the outside (internet) with a domain name and an SSL certificate
    (the green padlock in the address bar of your browser).

    Sans titre4.png


    • Go to Control Panel > Security > Certificate. And Click Add

    screenshot-zwcloud.ovh_5001-2020.05.29-22_40_34.png


    • Add a new certificate with method Get a Certificate from Let's Encrypt (you have to open and redirect port 80/443 to your Synology to make it work)

    screenshot-zwcloud.ovh_5001-2020.05.29-22_42_15.png


    • Set your domain name for your forum and your personnal email address.

    screenshot-zwcloud.ovh_5001-2020.05.29-22_43_35.png


    • If the request is accepted, your certificate should appear here

    screenshot-zwcloud.ovh_5001-2020.05.29-22_45_33.png


    • Go to Application Portal > Reverse proxy > Create

    screenshot-zwcloud.ovh_5001-2020.05.29-22_49_02.png


    • Name your Rule. Set the hostname with your domain name, the same from your certificate. Fill port 443 and Destination.

    screenshot-zwcloud.ovh_5001-2020.05.29-22_51_48.png


    • In Custom Header, select Create > Websocket. Then click OK to valid the Rule.

    screenshot-zwcloud.ovh_5001-2020.05.29-22_55_23.png


    • Go to Control panel > Security > Certificate. And click Configure. You have to associate the NodeBB rule you just created in the reverse proxy with the certificate you created earlier. Then validate by clicking on OK.


    I hope this tutorial will help beginners. I think modern NAS can help everyone to get started for those who find it complicated to install NodeBB on their own. It's an easier introduction for them IMO compared to an installation from scratch on a CLI server.
    If you have any questions or if I have made any mistakes in this tutorial, please let me know so that I can correct them.
  • Community Rep

    @Per0x Not personally a fan of Docker but way cool that you posted this up for the benefit of others. Good on 'ya! 👍 😎

  • GNU/Linux

    @gotwf Thanks!
    Personally, I can't do without Docker anymore. Whether in production or for testing. 😁
    Using it with synology DSM, that's yet another story (no docker-composer for eg), but I think it's a good start for beginners. 😉


  • really nice documentation you did here 👍

  • Community Rep

    Very extensive, thanks!


  • Great guide and worked well. How do you proceed with an update when a new version is available?

  • GNU/Linux

    @ᴅᴀʀᴛʜ-ᴠᴀᴅᴇʀ Hello, normally it is enough to stop and clear the container (not delete) with the function provided in synology, to re-download the new image in the registry and to restart the container again. You will also need to add a persistent volume to map the /usr/src/app/config.json file

    Problems occur if you have installed plugins or themes. The docker image provided by nodebb is not really docker friendly so it will be possible, but more complicated.


  • @per0x said in Guide to install NodeBB on Docker with Synology NAS (DSM):

    /usr/src/app/config.json

    I make it and my Board is crahed 😕

    Can you help me?

    Sorry for my english, i speak German

    2021-06-12 19:44:35	stdout	[cluster] Child Process (37) has exited (code: 0, signal: null)
    2021-06-12 19:44:35	stdout	    at parseType (/usr/src/app/node_modules/redis-parser/lib/parser.js:302:14)
    2021-06-12 19:44:35	stdout	    at parseError (/usr/src/app/node_modules/redis-parser/lib/parser.js:179:12)
    2021-06-12 19:44:35	stdout	2021-06-12T19:44:35.326Z [4567/37] - error: ReplyError: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.
    2021-06-12 19:44:35	stdout	2021-06-12T19:44:35.293Z [4567/37] - info: [socket.io] Restricting access to origin: https://board.myteamspeak.online:*
    2021-06-12 19:44:34	stdout	2021-06-12T19:44:34.559Z [4567/37] - warn: [upgrade/appendPluginScripts] Unable to read plugin.json for plugin `nodebb-plugin-teamspeak-verify`. Skipping.
    2021-06-12 19:44:34	stdout	2021-06-12T19:44:34.558Z [4567/37] - warn: [upgrade/appendPluginScripts] Unable to read plugin.json for plugin `nodebb-widget-search-bar`. Skipping.
    2021-06-12 19:44:34	stdout	2021-06-12T19:44:34.557Z [4567/37] - warn: [upgrade/appendPluginScripts] Unable to read plugin.json for plugin `nodebb-theme-oxide`. Skipping.
    2021-06-12 19:44:34	stdout	2021-06-12T19:44:34.556Z [4567/37] - warn: [upgrade/appendPluginScripts] Unable to read plugin.json for plugin `nodebb-plugin-teamspeak`. Skipping.
    2021-06-12 19:44:34	stdout	2021-06-12T19:44:34.555Z [4567/37] - warn: [upgrade/appendPluginScripts] Unable to read plugin.json for plugin `nodebb-plugin-jwt-oauth2`. Skipping.
    2021-06-12 19:44:34	stdout	2021-06-12T19:44:34.554Z [4567/37] - warn: [upgrade/appendPluginScripts] Unable to read plugin.json for plugin `nodebb-plugin-sso-jwt`. Skipping.
    2021-06-12 19:44:34	stdout	2021-06-12T19:44:34.553Z [4567/37] - warn: [upgrade/appendPluginScripts] Unable to read plugin.json for plugin `nodebb-plugin-session-sharing`. Skipping.
    2021-06-12 19:44:34	stdout	2021-06-12T19:44:34.380Z [4567/37] - warn: [cache-buster] could not read cache buster ENOENT: no such file or directory, open '/usr/src/app/build/cache-buster' {"errno":-2,"code":"ENOENT","syscall":"open","path":"/usr/src/app/build/cache-buster","stack":"Error: ENOENT: no such file or directory, open '/usr/src/app/build/cache-buster'"}
    2021-06-12 19:44:31	stdout	2021-06-12T19:44:31.080Z [4567/37] - info: Initializing NodeBB v1.17.1 https://board.myteamspeak.online
    

    19da66bc-1a3b-4ad2-9f4a-f9201cdde1ae-image.png

    3e243c92-fcff-4d21-8902-c339576bce4b-image.png

    4406c5b9-19f4-41c5-ba20-a39a36c77fe4-image.png

  • GNU/Linux

    @ᴅᴀʀᴛʜ-ᴠᴀᴅᴇʀ It probably crashes because of the plugins you installed and nodebb can't find them (nodebb-theme-oxide in particular)

    I suggest you backup the redis database by copying the /data folder somewhere, then delete the contents of the original folder and also remove the config.json volume.

    Erase and restart redis and nodebb container (It should be like a fresh install) then installs the plugins and themes listed in the log file (nodebb-plugin-teamspeak-verify, nodebb-widget-search-bar, nodebb-theme-oxide, etc)

    When all plugins are installed and enabled, stop the nodebb container and restore the /data redis database with your backup, and remap config.json volume and I think it should be up.

    Next time you want to upgrade, disable all plugins before restarting the container with the new image.

Suggested Topics

  • 80
  • 2
  • 3
  • 1
  • 9
| |