Hyper simplified Proxmox API wrapper made for VPS hosting solutions
Explore the docs »
View Demo
·
Report Bug
·
Request Feature
Table of Contents
There are many options available for managing Proxmox nodes and clusters while running a business. Almost all of them are first and foremost billing systems that allow you to install Proxmox support via plugins and modules. This design decision makes it very hard to customize the look and feel of your site. I started this project with the goal of taking the opposite approach where an easy to use Proxmox integration API is exposed to any app.
Here's why:
- WHMCS and Blesta and their Proxmox plugins are crap
- You should be able to create beautiful vuejs, react, or react sites to support your business
- Billing systems shouldn't manage provisioning. Billing systems should manage billing.
Besides a proxmox node you will also need a machine to run the app (perhaps a vps :)
- Postgresql 13
- Redis
- Optional: Nginx or Apache for reverse proxy
$ sudo apt install postgresql postgresql-contrib redis-server nginx libpq-dev -y
Basic installation with Ubuntu Focal Server
- Set up your environment using conda, virtualenv, or whatever. In this example i'll use Ubuntu's packaged python and pip. Ubuntu Focal users will need to run the following:
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1
update-alternatives: using /usr/bin/python3 to provide /usr/bin/python (python) in auto mode
- Install pip:
$ sudo apt install python3-pip -y
- Clone and install requirements
$ git clone https://github.com/hosler/inveterate.git
$ cd inveterate
$ pip install --user -r requirements.txt
- Populate the env file
$ vim .env
At a minimum you will need database and redis info:
DEBUG=on # Turn off in production
REDIS_HOST=localhost
DB_HOST=localhost #leave blank to use socket
DB_USER=<username>
DB_PASSWORD=<paassword>
DB=<username>
SECRET_KEY=randomstring
- Setup tables and admin user
$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py createcachetable
$ python manage.py createsuperuser
Inveterate was designed to run via supervisord and sit behind a reverse proxy. Let's go ahead and set that up.
$ cd ~/inveterate
$ mkdir logs
$ vim supervisord.conf
Here is a basic supervisor config file
[supervisord]
logfile = ~/inveterate/supervisord.log
childlogdir = ~/inveterate/logs
logfile_maxbytes = 50MB
pidfile = ~/inveterate/supervisord.pid
directory=~/inveterate
[inet_http_server]
port=127.0.0.1:9001
[supervisorctl]
serverurl=http://127.0.0.1:9001
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[program:celery_worker]
numprocs=1
process_name=%(program_name)s-%(process_num)s
command=celery -A app worker -l INFO --concurrency=4 -Q celery
autostart=true
autorestart=true
startretries=99999
startsecs=10
stopsignal=TERM
stopwaitsecs=7200
killasgroup=false
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:celery_beat]
numprocs=1
process_name=%(program_name)s-%(process_num)s
command=celery -A app beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
autostart=true
autorestart=true
startretries=99999
startsecs=10
stopsignal=TERM
stopwaitsecs=7200
killasgroup=false
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:inveterate]
command=gunicorn -k gevent -b 127.0.0.1:8000 --worker-connections=1000 --timeout 60 --workers 4 app.wsgi
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
- Stripe Support
- Proxmox Clusters
- Customer Life Cycles
- Plans and Templates
- KVM
- LXC
- Inventory Management
- Clusters
- Nodes
- IP Pools
- Health Monitoring
- VM Stats
- Cluster Stats
- VM Controls
- Start/Stop/Provision
- Console
- Domain Management
- NAT port forwarding
- Documetation
See the open issues for a full list of proposed features (and known issues).
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the LGPLv3 License. See LICENSE.txt
for more information.