diff --git a/README.FREEBSD.md b/README.FREEBSD.md new file mode 100644 index 000000000..92f9064d0 --- /dev/null +++ b/README.FREEBSD.md @@ -0,0 +1,35 @@ +# FreeBSD/FreeNAS Installation Instructions + +## Before Installing + +These instructions assume that you are installing to a completely new, fresh FreeBSD/FreeNAS jail. As such, some steps will not be necessary if you are installing to an existing FreeBSD/FreeNAS install. + +## Installation instructions + +1. Create a new jail, with the appropriate network settings to access the internet. + +2. Install wget (`pkg install -y wget`). On a fresh jail, you will be prompted to press 'Y' to set up `pkg`. + +3. Download the installation script (`wget --no-check-certificate https://raw.githubusercontent.com/naturalcrit/homebrewery/master/freebsd/install.sh`). The parameter `--no-check-certificate` is required as we haven't set up any trusted certificates/authorities yet. + +4. Make the downloaded file executable (`chmod +x install.sh`). + +5. Run the script (`./install.sh`). This will automatically download all of the required packages, install both them and HomeBrewery, configure the system and finally start HomeBrewery. + +**NOTE:** At this time, the script **ONLY** installs HomeBrewery. It does **NOT** install the NaturalCrit login system, as that is currently a completely separate project. + +--- + +### Testing + +These installation instructions have been tested on the following FreeBSD/FreeNAS platforms: + +* FreeNAS-11.3-U5; Jail 11.4-RELEASE-p2 + +## Final Notes + +While this installation process works successfully at the time of writing (December 28, 2020), it relies on all of the Node.JS packages used in the HomeBrewery project retaining their cross-platform capabilities to continue to function under FreeBSD. This is one of the inherent advantages of Node.JS, but it is by no means guaranteed and as such, functionality or even installation under FreeBSD may fail without warning at some point in the future. + +Regards, +G +December 28, 2020 diff --git a/README.md b/README.md index 9645f29bf..9a5faeaf4 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,10 @@ in your browser and use the Homebrewery offline. Please see the docs here: [README.DOCKER.md](./README.DOCKER.md) +### Running the application on FreeBSD or FreeNAS + +Please see the docs here: [README.FreeBSD.md](./README.FREEBSD.md) + ### Standalone PHB Stylesheet If you just want the stylesheet that is generated to make pages look like they are from the Player's Handbook, you will find it in the diff --git a/config/default.json b/config/default.json index 1dc3dcb86..daf77e82e 100644 --- a/config/default.json +++ b/config/default.json @@ -1,5 +1,6 @@ { "host" : "homebrewery.local.naturalcrit.com:8000", "naturalcrit_url" : "local.naturalcrit.com:8010", - "secret" : "secret" -} \ No newline at end of file + "secret" : "secret", + "web_port" : 8000 +} diff --git a/freebsd/install.sh b/freebsd/install.sh new file mode 100644 index 000000000..0b3bb7fdc --- /dev/null +++ b/freebsd/install.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +pkg install -y git nano node npm mongodb44 + +sysrc mongod_enable=YES +service mongod start + +cd /usr/local/ +git clone https://github.com/naturalcrit/homebrewery.git + +cd homebrewery +npm install +npm audit fix +npm run postinstall + +cp freebsd/rc.d/homebrewery /usr/local/etc/rc.d/ +chmod +x /usr/local/etc/rc.d/homebrewery + +sysrc homebrewery_enable=YES +service homebrewery start \ No newline at end of file diff --git a/freebsd/rc.d/homebrewery b/freebsd/rc.d/homebrewery new file mode 100644 index 000000000..20f2bc7e6 --- /dev/null +++ b/freebsd/rc.d/homebrewery @@ -0,0 +1,65 @@ +#!/bin/sh +# +# PROVIDE: homebrewery +# REQUIRE: NETWORKING +# KEYWORD: shutdown + +# Author: S Robertson +# Version: 1.0.0 + +# Description: +# This script runs HomeBrewery as a service under the supplied user on boot + +# How to use: +# Place this file in /usr/local/etc/rc.d/ +# Add homebrewery_enable="YES" to /etc/rc.config +# (Optional) To run as non-root, add homebrewery_runAs="homebrewery" to /etc/rc.config +# (Optional) To pass HomeBrewery args, add homebrewery_args="" to /etc/rc.config + +# Freebsd rc library +. /etc/rc.subr + +# General Info +name="homebrewery" # Safe name of program +location="/usr/local/" # Install location +program_name="homebrewery" # Name of exec +title="HomeBrewery" # Title to display in top/htop + +# RC.config vars +load_rc_config $name # Loading rc config vars +: ${homebrewery_enable="NO"} # Default: Do not enable HomeBrewery +: ${homebrewery_runAs="root"} # Default: Run HomeBrewery as root +: ${homebrewery_port=8000} # Default: Run HomeBrewery on port 8000 +: ${homebrewery_NODE_ENV="local"} # Default: Run HomeBrewery in local mode + +# Freebsd Setup +rcvar=homebrewery_enable # Enables the rc.conf YES/NO flag +pidfile="/var/run/${program_name}.pid" # File that allows the system to keep track of HomeBrewery status + +# Env Setup +export HOME=$( getent passwd "homebrewery_runAs" | cut -d: -f6 ) # Gets the home directory of the runAs user +export NODE_ENV=${homebrewery_NODE_ENV} +export PORT=${homebrewery_port} + +# Command Setup +exec_cmd="${location}/${program_name}/server.js" # Path to the HomeBrewery server.js, /usr/local/bin/ when installed globally +output_file="/var/log/${program_name}.log" # Path to HomeBrewery output file + +# Command +command="/usr/sbin/daemon" +command_args="-r -t ${title} -u ${homebrewery_runAs} -o ${output_file} -P ${pidfile} /usr/local/bin/node ${exec_cmd} ${homebrewery_args}" + +# Extra Commands +extra_commands="dev_mode" + +dev_mode_cmd="homebrewery_dev_mode" + +homebrewery_dev_mode() { +echo "Starting HomeBrewery in live rebuild Developer mode..." +cd ${location}/${program_name}/ +/usr/local/bin/node ${location}/${program_name}/scripts/buildHomebrew.js --dev +} + +# Loading Config +load_rc_config ${name} +run_rc_command "$1" diff --git a/server.js b/server.js index 57b5b71f9..5528a3762 100644 --- a/server.js +++ b/server.js @@ -14,6 +14,8 @@ app.use('/', expressStaticGzip(`${__dirname}/build`, { index : false })); +process.chdir(__dirname); + //app.use(express.static(`${__dirname}/build`)); app.use(require('body-parser').json({ limit: '25mb' })); app.use(require('cookie-parser')()); @@ -230,6 +232,6 @@ app.use((req, res)=>{ }); -const PORT = process.env.PORT || 8000; +const PORT = process.env.PORT || config.get('web_port') || 8000; app.listen(PORT); console.log(`server on port:${PORT}`);