Flask Restful API backend template - project generator/development environment. Can be used by Python developers for quick start on building Restful API on Flask.
- rabbitmq
- redis
- elasticsearch
- logstash
- postgresql
- nginx
- supervisord
- kibana
- apidoc
Extra python libs and validator classes included.
Before installing this project, please, make sure you have installed docker and docker-compose
To install docker execute:
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sh get-docker.sh
$ pip install docker-composeClone this project into your work directory:
$ git clone "https://github.com/trydirect/flask-formula.git"Then build it with the following command:
$ cd flask-formula
$ ./setup.shAdd localdomain to your hosts file Linux, OSX:
echo "127.0.0.1 localdomain kibana.localdomain" | sudo tee -a /etc/hosts
Now, let's check it out
$ curl -i localhost/api/v1/hello
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Fri, 24 May 2019 15:33:02 GMT
Content-Type: application/json
Content-Length: 14
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With, Content-Type, X-Custom-Header
Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE
"Hello World"
Default kibana creds:
- login: admin
- password: admin
| URL | App |
|---|---|
| http://localhost | Api doc |
| http://localhost/api/v1/hello | Api hello endpoint |
| http://kibana.localdomain | Kibana dashboard |
- Full Docker integration
- Docker Compose integration and optimization for local development
- Production ready Python web server using Nginx and uWSGI
- Python Flask backend:
- Nginx plus HTTPS certificate generation with Let's Encrypt
The final project structure will look like this:
~/flask_formula$ tree
.
βββ backend
βΒ Β βββ app
βΒ Β βΒ Β βββ apidoc.json
βΒ Β βΒ Β βββ apps
βΒ Β βΒ Β βΒ Β βββ hello
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ resource_schemas.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ views.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ rabbitmq
βΒ Β βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ resource_schemas.py
βΒ Β βΒ Β βΒ Β βΒ Β βββ views.py
βΒ Β βΒ Β βΒ Β βββ user
βΒ Β βΒ Β βΒ Β βββ forms.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ models.py
βΒ Β βΒ Β βΒ Β βββ resource_schemas.py
βΒ Β βΒ Β βΒ Β βββ views.py
βΒ Β βΒ Β βββ config
βΒ Β βΒ Β βΒ Β βββ acl.py
βΒ Β βΒ Β βΒ Β βββ config.py
βΒ Β βΒ Β βΒ Β βββ config.py.dist
βΒ Β βΒ Β βΒ Β βββ dev.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ nginx.conf
βΒ Β βΒ Β βββ docs
βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βββ libs
βΒ Β βΒ Β βΒ Β βββ app.py
βΒ Β βΒ Β βΒ Β βββ auth.py
βΒ Β βΒ Β βΒ Β βββ controllers.py
βΒ Β βΒ Β βΒ Β βββ forms.py
βΒ Β βΒ Β βΒ Β βββ __init__.py
βΒ Β βΒ Β βΒ Β βββ models.py
βΒ Β βΒ Β βΒ Β βββ rabbitmq.py
βΒ Β βΒ Β βΒ Β βββ redis_session.py
βΒ Β βΒ Β βΒ Β βββ resource_schemas.py
βΒ Β βΒ Β βΒ Β βββ validators.py
βΒ Β βββ manage.py
βΒ Β βββ migrations
βΒ Β βΒ Β βββ alembic.ini
βΒ Β βΒ Β βββ env.py
βΒ Β βΒ Β βββ README
βΒ Β βΒ Β βββ script.py.mako
βΒ Β βΒ Β βββ versions
βΒ Β βΒ Β βββ 9d5e165bc45e_.py
βΒ Β βΒ Β βββ ce716beab747_.py
βΒ Β βββ README.md
βΒ Β βββ run.py
βΒ Β βββ wsgi.ini
βΒ Β βββ wsgi.py
βββ certs
βΒ Β βββ letsencrypt
βΒ Β βββ ssl
βΒ Β βββ cert.pem
βΒ Β βββ key.pem
βββ config.json
βββ configs
βΒ Β βββ elasticsearch
βΒ Β βΒ Β βββ elasticsearch.yml
βΒ Β βββ logstash
βΒ Β βΒ Β βββ Dockerfile
βΒ Β βΒ Β βββ logstash.conf
βΒ Β βΒ Β βββ templates
βΒ Β βΒ Β βββ filebeat.template.json
βΒ Β βΒ Β βββ packetbeat.template.json
βΒ Β βΒ Β βββ topbeat.template.json
βΒ Β βββ nginx
βΒ Β βΒ Β βββ conf.d
βΒ Β βΒ Β βΒ Β βββ flask_formula.conf
βΒ Β βΒ Β βββ letsencrypt-conf.d
βΒ Β βΒ Β βΒ Β βββ flask_formula.conf
βΒ Β βΒ Β βββ nginx.conf
βΒ Β βΒ Β βββ ssl-conf.d
βΒ Β βΒ Β βββ flask_formula.conf
βΒ Β βββ postgresql
βΒ Β βΒ Β βββ pg_hba.conf
βΒ Β βββ supervisord
βΒ Β βΒ Β βββ flask_formula.conf
βΒ Β βΒ Β βββ nginx.conf
βΒ Β βββ systemd
βΒ Β βΒ Β βββ flask_formula.service
βΒ Β βββ upstart
βΒ Β βββ flask_formula.sh
βββ cron
βΒ Β βββ root
βββ docker-compose.yml
βββ docker-firewall.sh
βββ elasticsearch
βΒ Β βββ data
βΒ Β βββ nodes
βΒ Β βββ 0
βΒ Β βββ node.lock
βΒ Β βββ _state
βΒ Β βββ node-157.st
βββ flask_app.tar.gz
βββ init-user-db.sh
βββ nginx
βΒ Β βββ conf.d
βΒ Β βΒ Β βββ flask_formula.conf
βΒ Β βββ letsencrypt-conf-d
βΒ Β βββ nginx.conf
βΒ Β βββ ssl-conf.d
βββ nginx_original
βΒ Β βββ conf.d
βΒ Β βΒ Β βββ flask_formula.conf
βΒ Β βββ letsencrypt-conf.d
βΒ Β βΒ Β βββ flask_formula.conf
βΒ Β βββ ssl-conf.d
βΒ Β βββ flask_formula.conf
βββ scripts
βββ supervisord
βββ flask_formula.conf
βββ nginx.conf
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------
db docker-entrypoint.sh postgres Up (healthy) 5432/tcp
elasticsearch /docker-entrypoint.sh elas ... Up 9200/tcp, 9300/tcp
flask_formula_pmm_1 docker-entrypoint.sh postgres Up 5432/tcp
kibana /docker-entrypoint.sh kibana Up 0.0.0.0:5601->5601/tcp
logstash /docker-entrypoint.sh -e Up 0.0.0.0:5044->5044/tcp
mq docker-entrypoint.sh rabbi ... Up (healthy) 15671/tcp, 0.0.0.0:21072->15672/tcp, 25672/tcp, 4369/tcp, 5671/tcp, 0.0.0.0:2172->5672/tcp,0.0.0.0:32770->5672/tcp
nginx /usr/bin/supervisord -c /e ... Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
redis docker-entrypoint.sh redis ... Up (healthy) 6379/tcp
web /usr/bin/supervisord -c /e ... Up 0.0.0.0:8000->8000/tcp
$ ./scripts/apidoc.sh- Fork it (https://github.com/trydirect/flask-formula/fork)
- Create your feature branch (git checkout -b feature/fooBar)
- Commit your changes (git commit -am 'Add some fooBar')
- Push to the branch (git push origin feature/fooBar)
- Create a new Pull Request
