Glavin001 / Gitlab Pages
Programming Languages
GitLab Pages
GitHub Pages, for GitLab.
Author
Glavin Wiechert (Glavin001) - Twitter @GlavinW - LinkedIn
Installation
Requirements
It requires Jekyll to be installed. GitLab Pages will build Jekyll sites or simply copy content from non-jekyll sites to publicPagesDir
.
Step 1) Create your deploy key pair
Create a SSH key pair for GitLab to use as deploy keys.
ssh-keygen -t rsa -C "[email protected]" -f "$(pwd)/keys/id_rsa"
They should be in path keys/id_rsa
and keys/id_rsa.pub
.
Step 2) Configure GitLab Pages server
Clone this repo and install it's necessary dependencies:
# Already cloned repo
npm install
bower install
Copy default config to custom config file.
cp default_config.js _config.js
Edit your new _config.js file for your setup.
Step 3) Start your GitLab Pages server
And start the server!
npm start
Deploy with Docker
Docker support is also available and the following env vars are used to configure the installation:
- GITLAB_URL - Url to your gitlab server
- DEPLOY_BRANCH - Specific branch that will be deployed when pushed
- DEPLOY_PAGEDIR - Public directory of GitLab Pages
- SERVER_URL - The public gitlab-pages server url
The /app/keys directory SHOULD be mount using docker volumes, this will allow you to use leave the ssh key outside of the docker. If the rsa key doesn't exist the docker_start.sh script will generate it.
Profit!
Login using your GitLab User Token at http://localhost:1337.
How It Works
- User logs into Web UI, which authenticates against GitLab with node-gitlab and retrieves a private key for subsequent requests.
- Select the Project to enable GitLab Pages support for it. Available Projects list is pulled from GitLab with node-gitlab.
- The selected project will setup a Deploy Key and Webhook for GitLab Pages. (Note: when adding a Deploy Key, type "GitLab Pages" as a Title)
- When the user pushes to GitLab, a webhook event is sent to GitLab Pages server.
- The Webhook is handled by gitlab-webhook and the project is pulled (or cloned) with nodegit to the GitLab Pages configured clones install directory.
- The
gl-pages
branch is checked out with nodegit. (This can optionally be configured to begh-pages
branch to work on both GitHub and GitLab). - The public content, a GitLab Page, is served using Expressjs. Each project will be served from a different subdirectory in the form of
server.publicUrl
/pages/:username/:projectName/. It is recommended that thepublicPagesDir
be served using Nginx or Apache.