Statixite
Statixite is a management tool for static websites originally designed to work with Jekyll, but with the hopes to support other static site generators. This project rocks and uses MIT-LICENSE and we always welcome contributors. Statixite is also available as a service. The project is made so that developers can create there own management tool and setup custom deployment options, such as Github Pages, Amazon S3, or Rackspace Cloud Files
Demo
Requirements
-
Ruby on Rails
-
Postgres
-
Imagemagick
Getting started
Statixite is a Rails::Engine packaged into a gem, so it can be added to any Rails project. To start with a fresh project, use the following command:
Create a new rails app
bash$ rails new myapp --database=postgresql
Add Statixite to your gemfile
gem 'statixite'
Run bundle and the Statixite generator to write the config file.
bash$ bundle install
bash$ rails generate statixite
This will generate the following file:
# config/initializers/statixite.rb
Statixite.setup do |config|
# Used for Media Uploader
# Valid options -
# :file which commit media files directly to the associated site repo
# :fog use Fog::Storage => A carrierwave.rb initializer file is required: see https://github.com/carrierwaveuploader/carrierwave
config.carrierwave_storage = :file
# Where to deploy
# Valid options -
# :local stores sites at /path/to/app/sites/:site_name/build
# :github pushes sites to your github account requires github creds and ssh access to account
# :fog pushes sites using fog storage requires fog creds tested against S3 and Rackspace Cloud Files
config.deploy_sites_to = :local
# Deploying sites to github requires a personal access token to create repos
# github creds => get personal token from github https://github.com/blog/1509-personal-api-tokens
# config.github_user = username
# config.github_token = ENV["GITHUB_TOKEN"]
# fog creds AWS S3 example
# config.fog_credentials = {
# :provider => 'AWS',
# :aws_access_key_id => ENV["AWS_ACCESS_KEY_ID"],
# :aws_secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"]
# }
# fog creds Rackspace Cloud Files example
# config.fog_credentials {
# :provider => 'Rackspace',
# :rackspace_username => ENV['RACKSPACE_USERNAME'],
# :rackspace_api_key => ENV['RACKSPACE_API_KEY'],
# :rackspace_region => :dfw
# }
end
Mount the Engine
Make sure to mount the Statixite Engine in your routes file
# config/routes.rb
Rails.application.routes.draw do
mount Statixite::Engine => "/statixite"
# ...
end
Migrate the tables
bash$ rake db:migrate
You can now start your dev server and begin creating sites at [localhost:3000/statixite/sites]
Site Structure
- root
|__ sites
|__ :site_name # As defined when a site is created
|__ clone # Main directory where changes are made
|__ repo # Where changes are pushed which can be configured to be a remote repository
|__ build # Similar to the _site folder built when a deployment is made
|__ public
|__ statixite # Statixite Namespace
|__ previews
|__ :site_name
Deployment Options
Local
Sites are built locally. In production you could use a similar NGINX config to serve the sites:
server {
listen 80;
server_name ~^(?<subdomain>.+)\.example\.com$;
root /path/to/app/sites/$subdomain/build;
index index.html;
error_page 404 /404.html;
location /404.html {
root /path/to/app/sites/$subdomain/build;
}
}
Github
This option requires a personal access token to be created through your github account. Sites will be deployed to a repo prefixed with “statixite-” and deployed to the “gh-pages” branch.
config.deploy_sites_to = :github
config.github_token = 'some token'
Fog
Fog is a cloud service Ruby gem that can allow you to deploy sites to cloud containers. Fog
config.deploy_sites_to = :fog
# Amazon S3 example
config.fog_crednentials {
:provider => 'AWS',
:aws_access_key_id => ENV["AWS_ACCESS_KEY_ID"],
:aws_secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
}
Contributing
This repo needs some love! We always encourage contributors. Please follow a few simple guidelines:
-
No nonsense
-
Write Some Good Specs (It needs more!)
-
Refactoring, other suggestions welcome