1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
# jekyll-hook
A server that listens for webhook posts from GitHub, generates a site with Jekyll, and moves it somewhere to be served. Use this to run your own GitHub Pages-style web server. Great for when you need to serve your websites behind a firewall, need extra server-level features like HTTP basic auth (see `default` file for Nginx config with basic auth), or want to host your site directly on a CDN or file host like S3. It's cutomizable with two user-configurable shell scripts and a config file.
## Installation
- `build.sh` installs server dependencies for Ubuntu Linux
- run `$ npm install` to install app dependencies
## Configuration
Copy the following JSON to `config.json` in the application's root directory.
```json
{
"gh_server": "github.com",
"branch": "master",
"temp": "/home/ubuntu/jekyll-hook",
"scripts": {
"build": "./scripts/build.sh",
"publish": "./scripts/publish.sh"
},
"email": {
"user": "",
"password": "",
"host": "",
"ssl": true
}
}
```
Configuration attributes:
- `gh_server` The GitHub server from which to pull code
- `branch` The branch to watch for changes
- `temp` A directory to store code and site files
- `scripts`
- `build` A script to run to build the site
- `publish` A script to run to publish the site
- `email` Optional. Settings for sending email alerts
- `user` Sending email account's user name (e.g. `example@gmail.com`)
- `password` Sending email account's password
- `host` SMTP host for sending email account (e.g. `smtp.gmail.com`)
- `ssl` `true` or `false` for SSL
## Usage
- run as executable: `$ ./jekyll-hook.js`
## Publishing content
The stock `build.sh` copies rendered site files to subdirectories under a web server's `www` root directory. For instance, use this script and NGINX with the following configuration file to serve static content behind HTTP basic authentication:
```
server {
root /usr/share/nginx/www;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
try_files $uri $uri/ /index.html;
# Optional basic auth restriction
# auth_basic "Restricted";
# auth_basic_user_file /etc/nginx/.htpasswd;
}
}
```
Replace this script with whatever you need for your particular hosting environment.
## Dependencies
Here's a sample script to install the approriate dependencies on an Ubunutu server:
```sh
#!/bin/sh
# Install node and depencencies
sudo apt-get update -y
sudo apt-get install python-software-properties python g++ make -y
sudo add-apt-repository ppa:chris-lea/node.js -y
sudo apt-get update -y
sudo apt-get install nodejs npm -y
# Forever to keep server running
sudo npm install -g forever
# Git
sudo apt-get install git -y
# Ruby
sudo apt-get install ruby1.8 -y
sudo apt-get install rubygems -y
# Jekyll
sudo gem install jekyll --version "0.12.0"
sudo gem install rdiscount -- version "1.6.8"
sudo gem install json --version "1.6.1"
# Nginx for static content
sudo apt-get install nginx -y
```
|