Creating your own Super Repo

Printing Options
If you would like to print this tutorial, you can print this page from your browser, or select one of the PDFs below. PDFs are formatted for printing on 8.5" x 11" paper.

Small (3 steps per page, small images, least paper)
Medium (2 steps per page, smaller images, less paper)
Large (1 step per page, large images, more paper)


Step 1

Create the repo

First you need to create a repository at Alternatively you can create a repo on your own machine if you prefer.

... more
Step 2

Clone your repo

Clone the repository and make sure the master is checked out.

git clone
cd newsuper
git checkout master

... more
Step 3

Add your documentation

It's best practise to add a and to your super repo. Both of these files are in markdown format and the README will automatically be presented on

The README should have the following information on what the purpose of your super repo is, and how to install it.

The should contain information about what license the repo falls under.

Once you have created the files, add them to git.

git add

... more
Step 4

Create the .gitignore file

The .gitignore file contains the files and directories that git should ignore when checking in. This is useful for your development directory so config files don't get included in the repository.

The following files should be included in the .gitignore file


Add .gitignore to git:
git add .gitignore

... more
Step 5

Setup your dev web server

Setup your development server to point at your checked out super repo directory. It's recommended to setup a separate virtual host and keep a logs directory. It's unnecessary for development, but you can also include a self signed SSL cert if required.

... more
Step 6

Setup your htaccess file

Create your htaccess file. The following is recommended:

# Block evil spam bots
# List found on :
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR]
RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR]
RewriteCond %{HTTP_USER_AGENT} ^attach [OR]
RewriteCond %{HTTP_USER_AGENT} ^autoemailspider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xenu [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus.*Webster [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule ^.* - [F,L]

# Block access to internal code

Options All -Indexes
RewriteEngine On
# Force redirect to strip www from front of domain names
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ %1/$1 [R=301,L]
# Allow access to artweb themes and cache, everything is considered public
RewriteRule ^ciniki-web-layouts/(.*\.)(css|js|png|eot|ttf|woff|svg)$ ciniki-mods/web/layouts/$1$2 [L]
RewriteRule ^ciniki-web-themes/(.*\.)(css|js|html|png|jpg)$ ciniki-mods/web/themes/$1$2 [L]
RewriteRule ^ciniki-web-cache/(.*\.)(css|js|jpg|gif||png|mp3|ogg|wav)$ ciniki-mods/web/cache/$1$2 [L]
RewriteRule ^ciniki-mail-cache/(.*\.)(pdf|js|jpg|png|mp3|ogg|wav)$ ciniki-mods/mail/cache/$1$2 [L]
RewriteRule ^ciniki-code/(.*\.)(zip|ini)$ ciniki-code/$1$2 [L]
RewriteBase /

AddType text/cache-manifest .manifest

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^manager/(.*)$ ciniki-manage.php [L] # allow all ciniki-manage
RewriteRule ^(manager)$ ciniki-manage.php [L] # allow all ciniki-manage
RewriteRule ^(ciniki-mods/[^\/]*/ui/.*)$ $1 [L] # Allow manage content
RewriteRule ^(ciniki-web-themes/.*)$ $1 [L] # Allow manage-theme content
RewriteRule ^(ciniki-mods/web/layouts/.*)$ $1 [L] # Allow web-layouts content
RewriteRule ^(ciniki-mods/web/themes/.*)$ $1 [L] # Allow web-themes content
RewriteRule ^(ciniki-mods/web/cache/.*\.(css|js|jpg|png|mp3|ogg|wav))$ $1 [L] # Allow web-cache content
RewriteRule ^(ciniki-mods/mail/cache/.*\.(pdf|js|jpg|png|mp3|ogg|wav))$ $1 [L] # Allow mail-cache content
RewriteRule ^(phpinfo|paypal-ipn|ciniki-login|ciniki-sync|ciniki-json|ciniki-rest|index|ciniki-manage|ciniki-iframe|ciniki-apis).php$ $1.php [L] # allow entrance php files
RewriteRule ^([_0-9a-zA-Z-]+/)(.*\.php)$ index.php [L] # Redirect all other php requests to index
RewriteRule . index.php [L] # Redirect all other requests to index

php_value post_max_size 20M
php_value upload_max_filesize 20M
php_value magic_quotes 0
php_flag magic_quotes off
php_value magic_quotes_gpc 0
php_flag magic_quotes_gpc off

... more
Step 7

Create the directory structure

The following directories should be created inside your super repo:

mkdir site
mkdir site/ciniki-backups
mkdir site/ciniki-cache
mkdir site/ciniki-lib
mkdir site/ciniki-mods
mkdir site/ciniki-storage

The following directories may need their permissions changes so your web server has write permissions to them. If you are running in production these directories should be set to the web server user instead of making them world writable. World writable is easier in a development environment.

chmod a+w site/ciniki-cache
chmod a+w site/ciniki-storage

... more
Step 8

Add the submodules

You'll need some base ciniki modules for your super repo. The following modules are required unless you are going to build your own versions of them.

git submodule add git:// site/ciniki-mods/businesses
git submodule add git:// site/ciniki-mods/bugs
git submodule add git:// site/ciniki-mods/core
git submodule add git:// site/ciniki-mods/images
git submodule add git:// site/ciniki-mods/sysadmin
git submodule add git:// site/ciniki-mods/users

Recommended modules:
git submodule add git:// site/ciniki-mods/blog
git submodule add git:// site/ciniki-mods/customers
git submodule add git:// site/ciniki-mods/events
git submodule add git:// site/ciniki-mods/gallery
git submodule add git:// site/ciniki-mods/info
git submodule add git:// site/ciniki-mods/links
git submodule add git:// site/ciniki-mods/mail
git submodule add git:// site/ciniki-mods/subscriptions
git submodule add git:// site/ciniki-mods/web

... more
Step 9

Download supporting libraries

The following libraries are required by some modules.

git clone git:// site/ciniki-lib/PHPMailer
git clone git:// site/ciniki-lib/PHPWord
git clone git:// site/ciniki-lib/PHPExcel
git clone git:// site/ciniki-lib/dropbox

TCPDF will need to be downloaded and extracted into site/ciniki-lib/tcpdf

... more
Step 10

Setup the site files

One the modules have been added, their script files need to be linked into the root of the site directory:

cd site
ln -s ciniki-mods/core/scripts/apis.php ciniki-apis.php
ln -s ciniki-mods/core/scripts/json.php ciniki-json.php
ln -s ciniki-mods/core/scripts/login.php ciniki-login.php
ln -s ciniki-mods/core/scripts/manage.php ciniki-manage.php
ln -s ciniki-mods/core/scripts/rest.php ciniki-rest.php
ln -s ciniki-mods/core/scripts/sync.php ciniki-sync.php
ln -s ciniki-mods/web/scripts/index index.php
ln -s ciniki-mods/core/scripts/paypal-ipn.php paypal-ipn.php

... more
Step 11

Setup web module file permissions

The web module requires the web server to have permissions to some files for write.

chmod a+w site/ciniki-mods/web/cache

... more
Step 12

Create your commit script

Create the script. This script will automatically roll up the submodule commit logs and create a super repo commit message with them. An optional message can be added as an argument.


# This script will commit the submodule changes to the Ciniki super repo
if [ $# -eq 0 ]; then
MSG="Module Updates:

Module Updates:

if [ $# -gt 1 ]
echo "Too many arguments, put your message quotes.\n";

SUMMARY=`git submodule summary`;

git commit -am "$MSG$SUMMARY"

Set the script executable and add the script to git:
chmod +x
git add

... more
Step 13

Commit your changes

Commit your submodule additions and changes to the super repo.

./ 'Initial setup of my super repo'

Now push the changes to
git push

... more