• Stars
    star
    508
  • Rank 86,941 (Top 2 %)
  • Language
    JavaScript
  • License
    BSD 3-Clause "New...
  • Created over 11 years ago
  • Updated about 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

No Longer Maintained | A server that listens for GitHub webhook posts and renders a Jekyll site

jekyll-hook

Note: This tool is no longer maintained. There are a number of newer and better approaches to update jekyll-powered websites. We use Continious Integration (e.g. Travis) as a replacement for jekyll-hook at Development Seed. Read more here: https://jekyllrb.com/docs/deployment-methods/

A server that listens for webhook posts from GitHub, generates a website with Jekyll, and moves it somewhere to be published. 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 below for an 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.

This guide is tested on Ubuntu 14.0

Dependencies Installation

First install main dependencies

$: sudo apt-get update
$: sudo apt-get install git nodejs ruby ruby1.9.1-dev npm

Symlink nodejs to node

$: sudo ln -s /usr/bin/nodejs /usr/bin/node

To keep server running we use Forever:

$: sudo npm install -g forever

We also need Jekyll and Nginx

$: sudo gem install jekyll rdiscount json
$: sudo apt-get install nginx

Installation

Clone the repo

$: git clone https://github.com/developmentseed/jekyll-hook.git

Install dependencies:

$: cd jekyll-hook
jekyll-hook $: npm install

If you receive an error similar to this npm ERR! Error: EACCES, mkdir '/home/ubuntu/tmp/npm-2223-4myn3niN' run:

$: sudo chown -R ubuntu:ubuntu /home/ubuntu/tmp
$: npm install

You should replace ubuntu with your username

Configuration

Copy config.sample.json to config.json in the root directory and customize:

$: cp config.sample.json config.json
$: vim config.json

Configuration attributes:

  • gh_server The GitHub server from which to pull code, e.g. github.com
  • temp A directory to store code and site files
  • public-repo Whether the repo is public or private (default is public)
  • scripts
    • [branch-name] (optional)
      • build The build script to run for a specific branch.
      • publish The publish script to run for a specific branch.
    • #default
      • build The build script to run if no match was found for the branch specified in the webhook.
      • publish The publish script to run if match was found for the branch specified in the webhook.
  • secret Optional. GitHub webhook secret.
  • email Optional. Settings for sending email alerts
    • isActivated If set to true email will be sent after each trigger
    • user Sending email account's user name (e.g. [email protected])
    • password Sending email account's password
    • host SMTP host for sending email account (e.g. smtp.gmail.com)
    • ssl true or false for SSL
  • accounts An array of accounts or organizations whose repositories can be used with this server

You can also adjust build.sh and publish.sh to suit your workflow. By default, they generate a site with Jekyll and publish it to an NGINX web directory.

Webhook Setup on Github

Set a Web hook on your GitHub repository that points to your jekyll-hook server http://example.com:8080/hooks/jekyll/:branch, where :branch is the branch you want to publish. Usually this is gh-pages or master for *.github.com / *.github.io repositories.

For every branch you want to build/publish (as defined in the scripts) you need to set up a different webhook.

Configure a webserver (nginx)

The default publish.sh is setup for nginx and copies _site folder to /usr/share/nginx/html/rep_name.

If you would like to copy the website to another location, make sure to update nginx virtual hosts which is located at /etc/nginx/nginx/site-available on Ubuntu 14.

You also need to update publish.sh

For more information Google or read this:

Launch

$: ./jekyll-hook.js

To launch in background run:

$: forever start jekyll-hook.js

To kill or restart the background job:

    $: forever list
    info:    Forever processes running
    data:        uid  command         script         forever pid  logfile                        uptime
    data:    [0] ZQMF /usr/bin/nodejs jekyll-hook.js 4166    4168 /home/ubuntu/.forever/ZQMF.log 0:0:1:22.176
    $: forever stop 0

Publishing content

S3

To publish the site on Amazon S3, you need to install S3cmd. On Ubuntu run:

$: sudo apt-get install s3cmd
$: s3cmd --configure

For more information read this.

scripts/publish-s3.sh does the rest of the job for you. Just make sure to add your bucket name there.

More details on build.sh

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.

You probably want to configure your server to only respond POST requests from GitHub's public IP addresses, found on the webhooks settings page.

More Repositories

1

titiler

Build your own Raster dynamic map tile services
Python
746
star
2

landsat-util

A utility to search, download and process Landsat 8 satellite imagery
Python
688
star
3

lonboard

A Python library for fast, interactive geospatial vector data visualization in Jupyter.
Python
628
star
4

bones

A client/server web application framework built on Express and Backbone
JavaScript
482
star
5

label-maker

Data Preparation for Satellite Machine Learning
Python
445
star
6

geolambda

Create and deploy Geospatial AWS Lambda functions
Dockerfile
285
star
7

geojson-pydantic

Pydantic data models for the GeoJSON spec
Python
220
star
8

skynet-train

Training and test the SegNet neural network on satellite imagery
JavaScript
203
star
9

eoAPI

[Active Development] Earth Observation API (Metadata, Raster and Vector services)
Shell
196
star
10

skynet-data

[DEPRECATED] Data pipeline for machine learning with OpenStreetMap
JavaScript
169
star
11

timvt

PostGIS based Vector Tile server.
PLpgSQL
164
star
12

rio-viz

Visualize Cloud Optimized GeoTIFF in browser
HTML
152
star
13

tipg

Simple and Fast Geospatial OGC Features and Tiles API for PostGIS.
PLpgSQL
152
star
14

osm-seed

A collection of Dockerfiles to run a containerized version of OpenStreetMap
Shell
149
star
15

jekyll-ga

A plugin for loading Google Analytics data into Jekyll
Ruby
128
star
16

fastai-serving

A Docker image for serving fast.ai models, mimicking the API of Tensorflow Serving
Python
119
star
17

dirty-reprojectors

Make quick and dirty projections to use in your web maps instead of Web Mercator
JavaScript
115
star
18

obstore

Simple, fast integration with Amazon S3, Google Cloud Storage, Azure Storage, and S3-compliant APIs like Cloudflare R2
Rust
106
star
19

segment-anything-services

Running segment-anything image embedding, prompting, and mask generation as torchserve services
Jupyter Notebook
93
star
20

cogeo-mosaic

Create and use COG mosaic based on mosaicJSON
Python
84
star
21

morecantile

Construct and use OGC TileMatrixSets (TMS)
Python
80
star
22

rubik

DEPRECATED. Please see new home on d.o
PHP
79
star
23

observe

Cross-platform, offline, field mapping tool for OpenStreetMap
JavaScript
66
star
24

landsat-api

[DEPRECATED] An API for Landsat Metadata using Elastic Search
JavaScript
64
star
25

openlayers_themes

63
star
26

openlayers_plus

Additional tools and behaviors for OpenLayers.
JavaScript
62
star
27

rio-stac

Create STAC item from raster datasets
Python
61
star
28

mosaicjson-spec

JSON format for describing SpatioTemporal Cloud Optimized Geotiff mosaic.
61
star
29

vt-geojson

Extract GeoJSON from Mapbox vector tiles.
JavaScript
60
star
30

tao

DEPRECATED. Please see new home on d.o
PHP
56
star
31

slingshotSMS

A tiny RESTful modem server
Tcl
55
star
32

pearl-backend

PEARL (Planetary Computer Land Cover Mapping) Platform API and Infrastructure
JavaScript
55
star
33

labs-gpt-stac

Experimental: connect ChatGPT to a STAC API backend
HTML
52
star
34

macrocosm

Macrocosm is a partial port of the Open Street Map Rails API in NodeJS
JavaScript
49
star
35

collecticons-lib

Collecticons svg icons
JavaScript
48
star
36

tifeatures

Simple and Fast Geospatial Feature Server for PostGIS.
PLpgSQL
48
star
37

FeatureServer

A simple feature server for Drupal.
PHP
46
star
38

spacenet-data

Scripts for setting up the SpaceNet dataset for training a SegNet model
Shell
45
star
39

gdal2mb

a version of gdal2tiles with MapBox support
Python
41
star
40

ml-hv-grid-pub

Code for high-voltage grid mapping project with the World Bank; early 2018
Python
41
star
41

geodex

Find all geospatial tile indices contained in an arbitrary boundary at an arbitrary zoom
Python
36
star
42

mapbox

THIS REPOSITORY HAS MOVED. https://github.com/mapbox/osm-bright/
36
star
43

geokit

Python
35
star
44

atrium_features

Core atrium features.
PHP
34
star
45

chip-n-scale-queue-arranger

Chip 'n scale: Queue Arranger helps you run machine learning models over satellite imagery at scale
Python
33
star
46

caffe-fcn

Run Long and Shelhamer's FCN image segmentation network using Caffe
Jupyter Notebook
33
star
47

planet-stream

Stream the planet!
JavaScript
31
star
48

sat-api-pg

A Postgres backed STAC API.
PLpgSQL
30
star
49

ml-enabler

ML Enabler - machine learning interaction tools in the browser
JavaScript
29
star
50

titiler-xarray

[DEMO] TiTiler extension for xarray
Python
28
star
51

singular

Dead simple Drupal theme with quick rebranding in mind
PHP
28
star
52

aiopmtiles

[WIP] PMTiles Async reader in python
Python
28
star
53

titiler-digitaltwin

A demo titiler for Sentinel 2 Digital Twin dataset
HTML
27
star
54

scoreboard

Encouraging OpenStreetMap mappers with badges, graphs & stats! ✨🕹
JavaScript
27
star
55

tilebench

Inspect Rasterio/GDAL HEAD/GET/LIST Requests
Python
27
star
56

vt-grid

Build up a pyramid of mapbox vector tiles by aggregating quantitative data into grids at lower zooms.
JavaScript
26
star
57

thatchertiler

ThatcherTiler: expect some features to be dropped.
Python
26
star
58

twitter-server

A simple node.js program that pulls data from Twitter's 1.1 API and pushes the response to a cloud service.
JavaScript
26
star
59

stac-react

React components and hooks for building STAC-API front-ends
TypeScript
25
star
60

tensorflow-eo-training

Deep learning with TensorFlow and earth observation data.
Jupyter Notebook
25
star
61

AtriumDesign

Design Components for Open Atrium
25
star
62

mapbox-gl-layers

Layer toggle control for Mapbox GL JS
JavaScript
24
star
63

remote-workstation

A Dockerised work environment hosted on AWS Fargate which can be SSH'd into ☁️🌎📦
Python
24
star
64

sentinel-util

A CLI for downloading, processing, and making a mosaic from Sentinel-1, -2 and -3 data
Python
24
star
65

osm-teams

Teams for OpenStreetMap!
JavaScript
23
star
66

mrworldwide

Query OSM planet stats with AWS Athena
JavaScript
22
star
67

sat-ml-training

Jupyter Notebook
22
star
68

tf-lambda-proxy-apigw

Terraform Module for API Gateway Proxy + AWS Lambda
HCL
22
star
69

supercluster-rs

Rust implementation of Supercluster for fast hierarchical point clustering
Rust
22
star
70

JosmMagicWand

JOSM Plugin allows select areas to label using a range of colors,
Java
21
star
71

ginkgo

Default theme for Open Atrium.
PHP
21
star
72

python-seed

Project template for Python projects
Python
21
star
73

gl-director

GL Director, an interface to easily generate terrain flyovers for your app using Mapbox GL JS
JavaScript
21
star
74

our-forests-tomorrow

Visualizing European forests future. Based on the EU-Trees4F study by Mauri et al.
TypeScript
21
star
75

project-seed

A basic starting point for projects.
JavaScript
20
star
76

satTS

ML pipeline to classify crop types with multi-spectral and multi-temporal EO data
Jupyter Notebook
19
star
77

titiler-image

TiTiler extension to work with non-geo images
Python
18
star
78

pearl-frontend

PEARL (Planetary Computer Land Cover Mapping) Frontend
JavaScript
18
star
79

bones-auth

Base authentication model, view and middleware
JavaScript
18
star
80

pydantic-ssm-settings

Replace Pydantic's builtin Secret Support with a configuration provider that loads parameters from AWS Systems Manager Parameter Store.
Python
18
star
81

openlayers_slim

A configured and compressed version of OpenLayers, suitable for most common applications.
JavaScript
17
star
82

litecal

A lite clean calendar UI.
PHP
17
star
83

seed

DS templates for everything
JavaScript
17
star
84

sentinel-2-cog

Convert Sentinel-2 JPEG 2000 to COG with AWS Lambda
Python
17
star
85

kenya-bank

Kenya Educational Mapping Site
JavaScript
17
star
86

co2ordinate

Find the most efficient place to gather GHG-wise
TypeScript
16
star
87

skynet-scrub

GUI for editing machine learning outputs
JavaScript
16
star
88

fastapi-authorization-gateway

Python
16
star
89

aiocogeo-rs

Async GeoTIFF reader for Rust
Rust
15
star
90

warp-resample-profiling

Guidance and profiling results for warp resampling in Python
Dockerfile
15
star
91

geofield

Defines a six column field for storing lat/lon data and bounding box data.
JavaScript
15
star
92

couch-sqlite

JavaScript
15
star
93

pointcloud-to-cog

Convert Point cloud data to Cloud Optimized GeoTIFF using AWS Lambda
Python
15
star
94

stac-admin

UI to update collection and item meta data in STAC catalogs
TypeScript
15
star
95

hapi-paginate

A simple pagination for hapijs responses
JavaScript
14
star
96

connectivity-atlas

An interactive map of global infrastructure.
HTML
14
star
97

jake

Minimal, lightweight theme for Managing News.
PHP
13
star
98

skynet-scrub-server

Backing store for developmentseed/skynet-scrub
JavaScript
13
star
99

titiler-mvt

Create MVT dynamically from COG
Python
13
star
100

simpleshare

Simple sharing of URLs using various methods. Supports Twitter, Facebook and email.
PHP
13
star