Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 

README.md

FVANG

Flask-Vagrant-Ansible-Nginx-Gunicorn Starter Pack

This is a starter pack for quickly developing a new Flask project locally with Vagrant, which is then easily deployed into production with Ansible. It installs and configures all the services you'll need:

  • Vagrant VM based on Ubuntu 18.04
  • Python 3.6 virtualenv for your Flask app and its dependencies
  • Nginx to serve static files and proxy to Gunicorn
  • Supervisor to automatically start/restart Gunicorn
  • Node.js for installing front-end components (optional)

Features

  • Disposable environment is fully self-contained within the Vagrant VM
  • Ansible playbooks for both local development and production
  • Develop with Flask dev server, then test/deploy with Gunicorn/Nginx
  • Easily add Ansible galaxy roles (ansible/requirements.yml)
  • Activates Python virtualenv on login
  • Installs Python packages from requirements.txt
  • Installs Node packages from package.json

Shortcuts

  • activate - activate the virtualenv
  • deactivate - deactivate the virtualenv
  • make run - run Flask development server
  • make restart - start/restart Gunicorn & Nginx
  • make provision-dev - run playbook for dev (must deactivate virtualenv)
  • make provision-prod - run playbook production (must deactivate virtualenv)

Local Development

  1. Install Vagrant

  2. Clone this repo as your project name: (This is important, the project folder name will be used for configuring hostname, etc.)

    git clone git@github.com:paste/fvang.git my-project-name
  3. Build your Vagrant VM:

    vagrant up
  4. Log into the VM via SSH:

    vagrant ssh
  5. Start Flask development server:

    cd my-project-name
    make run
  6. Modify your computer's local /etc/hosts:

    192.168.33.11   my-project-name.local
    
  7. Visit your app:

    http://my-project-name.local
    
  8. Profit ✔️


In Production

  1. You'll need a remote user with sudo privileges to run Ansible.

  2. Edit the host_name and other settings in ansible/prod.yml as necessary.

  3. Clone your project onto the server in your remote user's home folder, e.g. ~/my-project-name

  4. Install Ansible with the included script:

    cd ~/my-project-name
    sudo ansible/install.sh
  5. Install Ansible Galaxy roles:

    make install-galaxy-roles
  6. Run the Ansible production playbook:

    make provision-prod
  7. Profit ✔️


HTTPS in Production

  1. To use HTTPS you will need an SSL certificate. Get one from Certbot here: https://certbot.eff.org/lets-encrypt/ubuntubionic-nginx

  2. Copy the certificate and key to your remote user's home folder. The Nginx configuration expects the files to be named after the host_name, like this:

    ~/fvang.io.crt
    ~/fvang.io.key
    
  3. Update the production playboook to use SSL, in ansible/prod.yml:

    nginx_use_ssl: true
  4. Re-run the Ansible production playbook:

    make provision-prod
  5. Profit ✔️

About

Flask-Vagrant-Ansible-Nginx-Gunicorn Starter Pack

Topics

Resources

Releases

No releases published

Packages

No packages published
You can’t perform that action at this time.