A tool for generating static sites from ghost blogs. This is based loosely on buster but since that project has been abandoned I've decided to create a new tool.
There are many reasons for wanting to generate a static site. For example security benefits and speed. It's also possible to integrate this tool into a continuous integration process and deploy the generated site.
You need to have the following installed.
- Node >=12 or LTS
- wget v1.16 (Versions prior to will need to use the --silent flag as --show-progress is not available)
- Chocolatey (Windows only)
Note: Chocolatey usually comes with NodeJS and you don't need to install it separately.
- Install wget
$ brew install wget
- Clone this repository
$ git clone https://github.com/itsignacioportal/ghost-static-site-generator/
$ cd ghost-static-site-generator
$ npm install
- Install wget via chocolatey
$ choco install wget
- Clone this repository
$ git clone https://github.com/itsignacioportal/ghost-static-site-generator/
$ cd ghost-static-site-generator
$ npm install
By default the tool will default to http://localhost:2368
for the domain and generate a folder called static
in the directory that you run the tool in.
NOTE: Themes other than Casper aren't fully supported. If you use another theme, you might have to manually copy the assets\built\THEME-NAME.js
file from your server.
NOTE: gssg has been tested only on ghost 4.48.2
Assuming you are hosting locally on http://localhost:2368
and your domain is http://www.myblog.com
then you can run the following. You need to pass the url flag because all links need to be replaced with your domain name instead of localhost
$ node src\index.js --productionDomain http://www.myblog.com
Assuming you are hosting remotely on http://www.myhiddenserver.com:4538
and your domain is http://www.myblogbucket.com
then you can run the following. You need to pass the url flag because all links need to be replaced with your domain name instead of localhost
$ node src\index.js --domain http://www.myhiddenserver.com:4538 --productionDomain http://www.myblog.com
Assuming you are hosting remotely on http://www.myhiddenserver.com:4538
and you want to pull into a separate folder instead of static you can use the following command
$ node src\index.js --domain http://www.myhiddenserver.com:4538 --dest myblog-static-folder
This assumes that your site is running locally at http://localhost:2368
and will output to a folder called static.
$ node src\index.js
If your site is not hosted locally you can use the --domain
flag to target the your site.
$ node src\index.js --domain "http://localhost:2369"
To change the folder that the static site is generated into using the --dest
flag.
$ node src\index.js --dest "myStaticSiteFolder"
This will generated the site and then open the site in a new browser window. Please note: If you want to preview the site then the --productionDomain
flag is ignored. This is because the links need to replace with the preview server's url.
$ node src\index.js --preview
Use this flag to replace the url, use this option if your site url differs to your ghost url
$ node src\index.js --productionDomain 'http://www.mydomain.com'
Use this flag in conjunction with the --dest
flag to host sites in directories. This flag will replace all relative path urls with absolute path urls
$ node src\index.js --dest 'a-random-folder' --subDir 'a-random-folder'
Use this flag to hide wget output
$ node src\index.js --silent
This option will output the failed wget command and also any errors to the stdout before exiting.
$ node src\index.js --fail-on-error
This option is intended for users who do no worry about SEO. This option will make your site truly relative and swap out all domain names for relative paths.
$ node src\index.js --ignore-absolute-paths
This option saves redirected content with the original referer path instead of the destination path. Note: from a file size perspective this is suboptimal as it results in each redirect saving a copy of the original file.
$ node src\index.js --saveAsReferer
This is still a work in progress, please feel free to contribute by raising issues or creating pr's.