GithubHelp home page GithubHelp logo

dokku's Introduction

Dokku

Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen.

Build Status

Requirements

Assumes Ubuntu 13 x64 right now. Ideally have a domain ready to point to your host. It's designed for and is probably best to use a fresh VM. The bootstrapper will install everything it needs.

Installing

$ wget -qO- https://raw.github.com/progrium/dokku/master/bootstrap.sh | sudo bash

This may take around 5 minutes. Certainly better than the several hours it takes to bootstrap Cloud Foundry.

Configuring

Set up a domain and a wildcard domain pointing to that host. Make sure /home/git/VHOST is set to this domain. By default it's set to whatever the hostname the host has. This file only created if the hostname can be resolved by dig (dig +short $HOSTNAME). Otherwise you have to create the file manually and set it to your prefered domain. If this file still not present when you push your app, dokku will publish the app with a port number (i.e. http://example.com:49154 - note the missing subdomain).

You'll have to add a public key associated with a username as it says at the end of the bootstrapper. You'll do something like this from your local machine:

$ cat ~/.ssh/id_rsa.pub | ssh progriumapp.com "sudo gitreceive upload-key progrium"

That's it!

Deploy an App

Right now Buildstep supports buildpacks for Node.js, Ruby, Python, and more. It's not hard to add more, go add more! Let's deploy the Heroku Node.js sample app. All you have to do is add a remote to name the app. It's created on-the-fly.

$ cd node-js-sample
$ git remote add progrium [email protected]:node-js-app
$ git push progrium master
Counting objects: 296, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (254/254), done.
Writing objects: 100% (296/296), 193.59 KiB, done.
Total 296 (delta 25), reused 276 (delta 13)
remote: -----> Building node-js-app ...
remote:        Node.js app detected
remote: -----> Resolving engine versions

... blah blah blah ...

remote: -----> Application deployed:
remote:        http://node-js-app.progriumapp.com

You're done!

Removing a deployed app

Currently this is a manual process.

To remove an app, ssh to the server, then run:

$ sudo docker ps
# Then from the list, take repository name of your app and run:
$ sudo docker stop app/node-js-sample
# To find the ids of images to delete, run:
$ sudo docker images
# Then from that list, take the IDs corresponding to your app, and
# those corresponding to no tag at all, and for each run:
$ sudo docker rmi 123456789

Environment setup

Typically application requires some environment variables to be set up for proper run. Environment variables might contain some private data, like passwords and API keys, so it's not recommend to store them as part of source code.

To setup environment for your application, create file /home/git/APP_NAME/ENV. This file is a script that would expose all required environment variables, like:

export NODE_ENV=production
export MONGODB_PASSWORD=password

Next time the application is deployed, those variables would be exposed by start script.

Advanced installation (for development)

If you plan on developing dokku, the easiest way to install from your own repository is cloning the repository and calling the install script. Example:

$ git clone https://github.com/yourusername/dokku.git
$ cd dokku
$ sudo make all

The Makefile allows source URLs to be overridden to include customizations from your own repositories. The DOCKER_URL, GITRECEIVE_URL, PLUGINHOOK_URL, SSHCOMMAND_URL and STACK_URL environment variables may be set to override the defaults (see the Makefile for how these apply). Example:

$ sudo GITRECEIVE_URL=https://raw.github.com/yourusername/gitreceive/master/gitreceive make all

Advanced installation (bootstrap a server from your own repository)

The bootstrap script allows the dokku repository URL to be overridden to bootstrap a host from your own clone of dokku using the DOKKU_REPO environment variable. Example:

$ wget https://raw.github.com/progrium/dokku/master/bootstrap.sh
$ chmod +x bootstrap.sh
$ sudo DOKKU_REPO=https://github.com/yourusername/dokku.git ./bootstrap.sh

Upgrading

Dokku is in active development. You can update the deployment step and the build step separately.

To update the deploy step (this is updated less frequently):

$ cd ~/dokku
$ git pull origin master
$ sudo make install

Nothing needs to be restarted. Changes will take effect on the next push / deployment.

To update the build step:

$ git clone https://github.com/progrium/buildstep.git
$ cd buildstep
$ git pull origin master
$ sudo make build

This will build a fresh Ubuntu Quantal image, install a number of packages, and eventually replace the Docker image for buildstep.

Support

You can use Github Issues, check Troubleshooting on the wiki, or join us on Freenode in #dokku

Components

Ideas for Improvements

  • Custom domain support for apps
  • HTTPS support on default domain
  • Support more buildpacks (see Buildstep)
  • Use dokku as the system user instead of git
  • Heroku-ish commands to be run via SSH (like Dokuen)

Looking to keep codebase as simple and hackable as possible, so try to keep your line count down.

Things this project won't do

  • Multi-host. Not a huge leap, but this isn't the project for it. Maybe as Super Dokku.
  • Multitenancy. It's ready for it, but again, probably for Super Dokku.
  • Client app. Given the constraints, running commands remotely via SSH is fine.

License

MIT

dokku's People

Contributors

adelevie avatar alexbeletsky avatar asm89 avatar dgryski avatar ekristen avatar ema avatar eugeneware avatar fcoury avatar frio avatar gaaady avatar grigio avatar hwartig avatar interstateone avatar k4ml avatar progrium avatar rnorth avatar silasb avatar soulou avatar unclejack avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.