DocPad
  • DocPad
  • Start
    • Install
    • Overview
    • Beginners Guide
    • Deploy
    • FAQ
    • Troubleshoot
    • Support
    • Upgrade
    • Performance
  • Core
    • API
    • Command Line Interface
    • Configuration
    • Events
    • Meta Data
    • Sequence Flow
    • Template Data & Helpers
  • Extend
    • Extending
    • Write a Plugin
  • Community
    • Contribute
    • Participate
    • Plugins
    • Showcase
    • Roadmap
Powered by GitBook
On this page
  • Deploying DocPad
  • To Static Servers (Apache, Nginx, etc.)
  • To a Node.js Hosting Provider
  • Continuous Deployment

Was this helpful?

  1. Start

Deploy

DocPad websites can be deployed anywhere. Here are a few of the most common deployments.

Deploying DocPad

Preparing DocPad for Deployment

  1. Ensure your project's package.json file contains the following:

    package.json
     "engines" : {
         "node": "6",
         "npm": "3"
     },
     "dependencies": {
         "docpad": "6",
         "docpad-plugin-blah": "2"
     },
     "main": "node_modules/.bin/docpad-server",
     "scripts": {
         "start": "docpad-server",
         "test": "docpad generate --debug --silent --env static",
         "info": "docpad info --silent"
     }

    Correct dependencies with what you are actually using.

To Static Servers (Apache, Nginx, etc.)

For deployment to a Custom Static Server

  1. Perform a generation for a static production environment using docpad generate --env static

  2. Upload the generated directory to your server's public_html or htdocs directory

  1.  docpad install ghpages
  2. Deploy to GitHub Pages using the plugin

     docpad deploy-ghpages --env static

For deployment to a Cloud Data Storage Provider (AWS S3, Google Storage, etc.)

To a Node.js Hosting Provider

  1. Create a Procfile file inside your project that contains:

    Procfile
     web: npm start
  2. Set your heroku instance to run in production mode

     heroku config:add NODE_ENV=production
    1. Login to your domain's DNS manager

    2. Create an CNAME Record for your domain pointing to your app url (e.g., balupton.herokuapp.com)

  1. Create a new OpenShift application for your project:

     rhc app create PROJECTNAME https://raw.githubusercontent.com/kyrylkov/openshift-iojs/master/metadata/manifest.yml
  2. Set environment variables using:

     rhc set-env -a PROJECTNAME NODE_ENV='production'
  3. If you'd like a custom domain, run:

     rhc alias-add PROJECTWEBSITE.COM -a PROJECTNAME

    Then create CNAME record with your DNS host pointing PROJECTWEBSITE.COM to PROJECTNAME-YOUR_OPENSHIFT_NAMESPACE.rhcloud.com

    If you don't know what your OpenShift namespace is, run:

     rhc app show -a PROJECTNAME

    And it will be listed within the SSH URL.

  4. Deploy your project's code to openshift:

     rhc app deploy "https://github.com/USER/REPO.git#master" -a PROJECTNAME
  5. You should be all good now! Check the logs of your app with:

     rhc tail -a PROJECTNAME
  1.  azure site deploymentscript --basic -t bash
  2. deploy.sh
     echo Handling deployment.
    
     # 1. Install npm packages
     if [ -e "$DEPLOYMENT_SOURCE/package.json" ]; then
       cd "$DEPLOYMENT_SOURCE"
       npm install --production --silent
       exitWithMessageOnError "npm failed"
       cd - > /dev/null
     fi
    
     # 2. Build DocPad Site
     echo Building the DocPad site
     cd "$DEPLOYMENT_SOURCE"
     npm test
     exitWithMessageOnError "DocPad generation failed"
    
     # 3. KuduSync
     echo Kudu Sync from "$DEPLOYMENT_SOURCE/out" to "$DEPLOYMENT_TARGET"
     $KUDU_SYNC_COMMAND -q -f "$DEPLOYMENT_SOURCE/out" -t "$DEPLOYMENT_TARGET" -n "$NEXT_MANIFEST_PATH" -p "$PREVIOUS_MANIFEST_PATH" -i ".git;.deployment;deploy.sh" 2> /dev/null
     exitWithMessageOnError "Kudu Sync failed"
  3. web.config
     <rule name="RemoveHTMLExtensions" stopProcessing="true">
         <match url="^(.*)\.html$" />
         <action type="Redirect" url="{R:1}" appendQueryString="true" />
     </rule>
     <rule name="RewriteHTMLExtensions" stopProcessing="true">
         <match url="(.*)" />
         <conditions>
             <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
             <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
         </conditions>
         <action type="Rewrite" url="{R:1}.html" />
     </rule>

Continuous Deployment

To GitHub Pages

  1. Inside your project directory, do the following:

    1.  npm install --save-dev docpad-plugin-ghpages
    2. Add a deploy script to your package.json "scripts" section:

      package.json
       {
           "scripts": {
               "deploy": "docpad deploy-ghpages --silent --env static"
           }
       }
    3. Remove the regenerateEvery property from your DocPad Configuration File if you have set it, as it will no longer be needed.

Using Travis CI

  1. Inside your GitHub account, do the following:

  2. Enable Travis CI for the repository, then inside the repository directory, do the following:

    1. Run the following commands (with the appropriate substitutions):

       travis encrypt "DEPLOY_USER=$YOUR_GITHUB_USERNAME" --add env.global
       travis encrypt "DEPLOY_TOKEN=$THE_PERSONAL_ACCESS_TOKEN" --add env.global
    2. Commit and push the changes.

  3. If you want to regenerate your website when an external GitHub Repository changes (for instance updating the DocPad Website when the DocPad Documentation repository changes), you will need to Enable Travis CI for that repository, then inside that repository directory, do the following:

    1. Run the following commands (with the appropriate substitutions):

       travis encrypt "GITHUB_TRAVIS_TOKEN=$THE_PERSONAL_ACCESS_TOKEN" --add env.global
    2. Commit and push the changes.

  4. All done, your next push to master will be automatically deployed.

Using Circle CI

  1. Inside your project directory, do the following:

    1. Commit and push the changes.

  2. Create a SSH Key that will be used by Circle CI to deploy to GitHub Pages, do this by:

    1. Create the SSH Key, make note of where it goes, don't bother with a password, use the email that was inside your circle.yml file:

       ssh-keygen -t rsa -b 4096 -C "circle@bevry.me"
    2. Make note of it's location. Two files will be generated. One with .pub at the end, which is the public key, and one without .pub which is the private key.

  3. Inside your Circle CI account, do the following:

    1. Add any environment variables you may need via Project Settings -> Tweaks -> Environment Variables

    2. Add the private key to CircleCI via Project Settings -> Permissions -> SSH Permissions. Set the hostname to github.com. Use the contents of the private key file for the private key text area.

  4. Inside your GitHub Project Settings, do the following:

    1. Add the public key to your GitHub Project by going to Settings -> Deploy Keys -> Add deploy key. Specify the title as CircleCI Deployment or whatever you like and set the key text area to the contents of the public key. Allow write access.

  5. If you want to regenerate your website when an external GitHub Repository changes (for instance updating the DocPad Website when the DocPad Documentation repository changes), you will need to:

    1. Go to the settings of the GitHub Repository that should cause the regeneration, and access Webhooks & Services -> Add webhook

      1. Specify the Payload URL to be:

         https://circleci.com/api/v1/project/YOUR_GITHUB_ORG/YOUR_GITHUB_REPO/tree/master?circle-token=THE_CIRCLECI_TOKEN
      2. Specify Content type to be application/json, select Just the push event, and check Active

      3. You can hit that Payload URL whenever you want to retest and rebuild your project.

  6. All done, your next push to master will be automatically deployed.

    1. You can now delete the local SSH key files that were made, as they serve no further purpose.

To GitLab Pages

Just add single file .gitlab-ci.yml to project root:

.gitlab-ci.yml
image: node

cache:
  paths:
  - node_modules/

pages:
  before_script:
  - npm install --production
  script:
  - npm test
  - mv out public
  artifacts:
    paths:
    - public
  only:
  - master
PreviousBeginners GuideNextFAQ

Last updated 5 years ago

Was this helpful?

If you use rsync,

For deployment to

Install the

If you'd like deployment automatically to GitHub Pages every time your repo updates, check out the

For deployment to

If you're also wanting to use custom domains for your website, , or alternatively here is a generic guide:

For deployment to

Create your account and

For deployment to

Create a deployment script that triggers the static content generation. To create the script run the following command using the :

Modify the deploy.sh file by changing the # Deployment section to the following lines. You can see a complete example of the deploy.sh file .

Last, create a web.config file in the static directory of your site with the URL rewrite rules shown below. These rules remove the HTML extensions from your URLs. You can see the main portions of this web.config file below. You can download the complete file .

For deployment to

For deployment to

Add the as a Development Dependency

called Travis CI Deployer that has repo and public_repo checked (uncheck everything else), make note of the token we'll use it later (this same token can be used for all the repos you have access to).

Add to your project (make any necessary changes to the Custom Configuration section).

Add to your project (make any necessary changes to the Custom Configuration section).

Add to your project (make any necessary changes to the Custom Configuration section).

Create yourself a Circle CI token via the

Project repository must be at . If it is already somewhere else, GitLab allows to setup automatic mirroring.

Commit, push, wait a minute and enjoy! :-)

checkout our DocPad rsync deploy script
GitHub Pages
GitHub Pages Plugin
Continuous Deployment Guide
Checkout the DocPad Sunny Plugin
Heroku
Follow the rest of the Heroku guide here
follow the Heroku Guide here
OpenShift
OpenShift
install their client tools
Windows Azure
Windows Azure Cross-Platform Command-Line Interface
here
here
Follow the rest of the Azure guide here
Modulus
Follow getting started guide
Docker
There is a docker file that should help with deployments.
GitHub Pages Plugin
Create a Personal Access Token
this .travis.yml file
this .travis.yml file
this circle.yml file
Circle CI Account API Page
GitLab