This is the v3 source for latenight.blue and eleventhirty.am. This code aims to provide no fluff, no unnecessary extras.
This code has been deprecated in favour of lnb-server, lnb-client and etam-client.
Current master is v3. It sports the following new and old features:
- Multiple vHosts New
- Updating published content New
- KoaJS as the base framework
- Let's Encrypt integration Automatic renewal
- Theming
- Three views (index, admin, error)
- One API route (GET /playlist)
- Support for 1 (one!) data submission type
- External hosting and streaming of all relevant data via YouTube and SoundCloud Classic
- Publishing queue
- One admin access
- SEO friendly URLs like example.com/, example.com/23, example.com/40, or even example.com/80085 Classic
- No database and caching for minimal filesystem interaction Classic
Clone the repository
git clone git@github.com:b12f/latenight.blue.git
Enter the directory and install the required node modules.
cd latenight.blue
npm install
Create the config file.
cp config.js.example config.js
Edit the config to fit your needs.
nano config.js
Start the server
npm start
The admin panel can be found under /ap
If you use ports below 1024, you need to run as root. This is not recommended, I wouldn't trust myself with root level access to your system. See also "Port fix" below.
sudo npm start
Enjoy.
If you wish to run this on port 80 or 443, a good practice would be to redirect the port.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
One object for each vhost you want to be running.
.hostname: string Site hostname without http(s)://
.site_title: string Site title, displayed on the homepage
.keywords: string SEO keywords
.description: object{episode: string, default: string} SEO description. episode for episode pages, default for homepage / error page.
.title: object{episode: string, default: string} Same as above, for page title
.theme: string Theme name to be used
.apUser: string Admin username
.apPass: string Admin password
.databaseFile: string Path to the desired database File
.scApiId: string (optional) SoundCloud API ID
.gaId: string (optional) Google Analytics ID
- 0: Error
- 1: Warn
- 2: Info
- 3: Debug
Let's Encrypt enabled flag
Email address to complete Let's Encrypt ACME callback with
Migrating from v2 to v3? Apart from the obvious settings changes, run
node ./bin/migrate [playlistDir] [queueDir] [outputDbFile]
Themes are stored in the /themes/[theme-name]/ folder, and have the following base structure:
public/
views/
ap.html
error.html
index.html
function.js
settings.json
public/ is the theme's static root dir, all files in here will be served directly.
views/ is the view dir, in which the three view files (index.EXT, ap.EXT, error.EXT) reside.
functions.js can be used to define extra function to be used in the view templating.
settings.json stores the themes settings. Currently the only supported setting is engineMap, which should be an object mapping file extensions to view engines for koa-views.
Views get the following data to be used for rendering:
settings: [object site settings (config.js current site)]
themeSettings: [object theme settings],
themeFn: [object theme functions],
buildMeta: [function build meta],
playlist: [array playlist],
queue: [array queue],
song: [undefined OR object submitted song (ap view only)],
episode: [undefined OR object current requested episode (index view only)],
success: [undefined OR string success message (ap view only)],
error: [undefined OR string error message]
Just fork and submit pull requests. Please stay true to the philosophy of "no fluff, no unnecessary extras" and please write code in the current style. If you feel a feature is missing open an issue, we'll see if we think it fits our philosophy.