https://github.com/piku/piku Skip to content Navigation Menu Toggle navigation Sign in * Product + Actions Automate any workflow + Packages Host and manage packages + Security Find and fix vulnerabilities + Codespaces Instant dev environments + GitHub Copilot Write better code with AI + Code review Manage code changes + Issues Plan and track work + Discussions Collaborate outside of code Explore + All features + Documentation + GitHub Skills + Blog * Solutions For + Enterprise + Teams + Startups + Education By Solution + CI/CD & Automation + DevOps + DevSecOps Resources + Learning Pathways + White papers, Ebooks, Webinars + Customer Stories + Partners * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles Repositories + Topics + Trending + Collections * Enterprise + Enterprise platform AI-powered developer platform Available add-ons + Advanced Security Enterprise-grade security features + GitHub Copilot Enterprise-grade AI features + Premium Support Enterprise-grade 24/7 support * Pricing Search or jump to... Search code, repositories, users, issues, pull requests... Search [ ] Clear Search syntax tips Provide feedback We read every piece of feedback, and take your input very seriously. [ ] [ ] Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Name [ ] Query [ ] To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} piku / piku Public * * Notifications You must be signed in to change notification settings * Fork 98 * Star 3.7k * The tiniest PaaS you've ever seen. Piku allows you to do git push deployments to your own servers. piku.github.io License MIT license 3.7k stars 98 forks Branches Tags Activity Star Notifications You must be signed in to change notification settings * Code * Issues 7 * Pull requests 0 * Discussions * Actions * Projects 2 * Security * Insights Additional navigation options * Code * Issues * Pull requests * Discussions * Actions * Projects * Security * Insights piku/piku This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. master BranchesTags Go to file Code Folders and files Name Name Last commit Last commit message date Latest commit History 704 Commits .github .github binary binary docs docs examples examples img img legacy legacy .gitignore .gitignore CONTRIBUTING.md CONTRIBUTING.md LICENSE LICENSE README.md README.md nginx.default.dist nginx.default.dist piku piku piku-nginx.path piku-nginx.path piku-nginx.service piku-nginx.service piku.py piku.py requirements.txt requirements.txt uwsgi-piku.dist uwsgi-piku.dist uwsgi-piku.service uwsgi-piku.service View all files Repository files navigation * README * MIT license piku logo piku, inspired by dokku, allows you do git push deployments to your own servers, no matter how small they are. Demo asciicast License: MIT Documentation: Install | Using | Procfile | ENV | Examples | Roadmap | Contributing | LinuxConf Talk | Fast Web App Tutorial | Discussion Forum Install TL;DR: curl https://piku.github.io/get | sh There are also other installation methods available, including cloud-init and manual installation. Project Activity piku is considered STABLE. It is actively maintained, but "actively" here means the feature set is pretty much done, so it is only updated when new language runtimes are added or reproducible bugs crop up. It currently requires Python 3.7 or above, since even though 3.8+ is now the baseline Python 3 version in Ubuntu LTS 20.04 and Debian 11 has already moved on to 3.9, there are no substantial differences between those versions. Motivation We wanted an Heroku/CloudFoundry-like way to deploy stuff on a few ARM boards, but since dokku didn't work on ARM at the time and even docker can be overkill sometimes, a simpler solution was needed. piku is currently able to deploy, manage and independently scale multiple applications per host on both ARM and Intel architectures, and works on any cloud provider (as well as bare metal) that can run Python, nginx and uwsgi. Workflow piku supports a Heroku-like workflow: * Create a git SSH remote pointing to your piku server with the app name as repo name: git remote add piku piku@yourserver:appname. * Push your code: git push piku master (or if you want to push a different branch than the current one use git push piku release-branch-name). * piku determines the runtime and installs the dependencies for your app (building whatever's required). + For Python, it segregates each app's dependencies into a virtualenv. + For Go, it defines a separate GOPATH for each app. + For Node, it installs whatever is in package.json into node_modules. + For Java, it builds your app depending on either pom.xml or build.gradle file. + For Clojure, it can use either leiningen or the Clojure CLI and a deps.edn file. + For Ruby, it does bundle install of your gems in an isolated folder. * It then looks at a Procfile and starts the relevant workers using uwsgi as a generic process manager. * You can optionally also specify a release worker which is run once when the app is deployed. * You can then remotely change application settings (config:set) or scale up/down worker processes (ps:scale). * You can also bake application and nginx settings into an ENV file. You can also deploy a gh-pages style static site using a static worker type, with the root path as the argument, and run a release task to do some processing on the server after git push. Virtual Hosts and SSL piku has full virtual host support - i.e., you can host multiple apps on the same VPS and use DNS aliases to access them via different hostnames. piku will also set up either a private certificate or obtain one via Let's Encrypt to enable SSL. If you are on a LAN and are accessing piku from macOS/iOS/Linux clients, you can try using piku/avahi-aliases to announce different hosts for the same IP address via Avahi/mDNS/Bonjour. Caching and Static Paths Besides static sites, piku also supports directly mapping specific URL prefixes to filesystem paths (to serve static assets) or caching back-end responses (to remove load from applications). These features are configured by setting appropriate values in the ENV file. Supported Platforms piku is intended to work in any POSIX-like environment where you have Python, nginx, uwsgi and SSH: it has been deployed on Linux, FreeBSD, Cygwin and the Windows Subsystem for Linux. As a baseline, it began its development on an original 256MB Rasbperry Pi Model B, and still runs reliably on it. But its main use is as a micro-PaaS to run applications on cloud servers with both Intel and ARM CPUs, with Debian and Ubuntu Linux as target platforms. Supported Runtimes piku currently supports apps written in Python, Node, Clojure, Java and a few other languages (like Go) in the works. But as a general rule, if it can be invoked from a shell, it can be run inside piku. Core values * Run on low end devices. * Accessible to hobbyists and K-12 schools. * ~1500 lines readable code. * Functional code style. * Few (single?) dependencies * 12 factor app. * Simplify user experience. * Cover 80% of common use cases. * Sensible defaults for all features. * Leverage distro packages in Raspbian/Debian/Ubuntu (Alpine and RHEL support is WIP) * Leverage standard tooling (git, ssh, uwsgi, nginx). * Preserve backwards compatibility where possible About The tiniest PaaS you've ever seen. Piku allows you to do git push deployments to your own servers. piku.github.io Topics nodejs python heroku raspberry-pi arm ubuntu paas raspbian Resources Readme License MIT license Activity Custom properties Stars 3.7k stars Watchers 29 watching Forks 98 forks Report repository Releases 2 The One Latest Apr 6, 2024 + 1 release Sponsor this project * * Learn more about GitHub Sponsors Packages 0 No packages published Contributors 23 * @rcarmo * @chr15m * @mariusa * @ewalk153 * @jsenin * @dwightmulcahy * @mlainez * @clusterfudge * @matrixjnr * @luisfcorreia * @dependabot[bot] * @alperkal * @rssnyder * @axelbdt + 9 contributors Languages * Python 95.1% * Shell 4.6% * Makefile 0.3% Footer (c) 2024 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact * Manage cookies * Do not share my personal information You can't perform that action at this time.