lex00.flask-uwsgi-nginx

README.md

Ansible Rolle: flask-uwsgi-nginx

Diese Rolle für Ansible installiert deine Flask-Anwendung aus einem Git-Repository.

Die Rolle verpackt deine Flask-App als Wheel und installiert sie in einer virtuellen Umgebung.

Anforderungen

  • .python-version Datei

    Diese Datei muss die Python-Version enthalten, die du verwenden möchtest.

  • python setup.py bdist_wheel

    Die Rolle wird diesen Befehl ausführen. Teste vorher, ob dein Projekt ein Wheel bauen kann.

Rollenvariablen

app_repo_url: 'https://github.com/lex00/flask-github-jobs'

  • Python-Repository, das die Flask-Anwendung enthält

app_subfolder: ''

  • Wenn dein Projekt in einem Unterordner im Repository ist, gib diesen hier an, andernfalls lässt du es leer.

app_description: 'Eine Flask-Anwendung, die Jobs von der GitHub-API auflistet'

  • Dies wird in das Systemdienst-Skript eingefügt.

app_name: 'flask_github_jobs'

  • App-Ordner und Dienstname

app_user: 'flask_github_jobs'

  • Der Systembenutzer und die Gruppe werden beide diesen Wert haben.

app_domain: 'einefalschewebseite.com'

  • Die Domain, auf die Nginx antworten wird.

app_module: 'flask_github_jobs'

  • Python-Modul für uwsgi.ini

app_callable: 'app'

  • Python callable für uwsgi.ini

app_port: '80'

  • Dienstport

app_health_ep: '/'

  • Gesundheitsendpunkt

uwsgi_process_count: '4'

  • Anzahl der uwsgi-Prozesse

uwsgi_thread_count: '2'

  • Anzahl der uwsgi-Threads

Abhängigkeiten

Keine

Beispiel Playbook

- hosts: all
  tasks:
  - import_role:
       name: lex00.flask-uwsgi-nginx

Python-Konfiguration

Du kannst jede beliebige Python-Version verwenden.

  • .python-version Datei

    • Dein Projekt muss diese Datei haben.
  • /home/{{ app_user }}/.pyenv/versions

    • pyenv wird Python hier installieren.
  • /opt/{{ app_name }}/venv

    • Die Anwendung wird in dieser virtuellen Umgebung installiert.

Uwsgi-Konfiguration

Uwsgi wird in der virtuellen Umgebung installiert. Es werden keine Systempakete für Uwsgi installiert.

  • /etc/{{ app_name }}/app_name.ini

    • Uwsgi-Konfigurationsdatei.
  • /var/run/{{ app_name }}/{{ app_name }}.sock

    • Uwsgi-Socket-Datei.

Flask statische Assets

Diese Rolle wird deine statischen Asset-Ordner automatisch erkennen und sie in Nginx konfigurieren.

Damit dies funktioniert:

  • Lege deine Assets in einen Ordner namens static in deinem Flask-App-Modul.

  • Setze static_url_path auf leer.

    app = Flask(__name__, static_url_path='')
    

Dienstverwaltung

Ubuntu 14.04 Starte/Stoppe den Uwsgi-Dienst

sudo start {{ app_name }}

Ubuntu 14.04 Starte/Stoppe Nginx

sudo start nginx

Ubuntu >= 16 Starte/Stoppe den Uwsgi-Dienst

sudo systemctl start {{ app_name }}

Ubuntu >= 16 Starte/Stoppe Nginx

sudo systemctl start nginx

Protokolle

Protokolle werden in /var/log/{{ app_name }} abgelegt.

Sie gehören zu {{ app_user }}.

Vagrant + Galaxy Beispiel

Erstelle eine requirements.yml mit folgendem Inhalt:

---
- src: lex00.flask-uwsgi-nginx

Der Provisioner muss galaxy_role_file auf dies setzen.

config.vm.provision "ansible", type: "ansible_local" do |ansible|
  ansible.verbose = true
  ansible.become = true
  ansible.extra_vars = "vars.json"
  ansible.config_file = "ansible.cfg"
  ansible.galaxy_roles_path = "roles"
  ansible.galaxy_role_file = "requirements.yml"
  ansible.playbook = "playbook.yml"
end

Packer + Galaxy Beispiel

Erstelle eine requirements.yml mit folgendem Inhalt:

---
- src: lex00.flask-uwsgi-nginx

Der Provisioner muss galaxy_file auf dies setzen.

{
  "type": "ansible-local",
  "host_vars": "{{ user `vars_path` }}",
  "playbook_dir": "{{ user `ansible_path` }}",
  "playbook_paths": "{{ user `ansible_path` }}",
  "role_paths": "{{ user `ansible_path` }}/roles",
  "playbook_file": "{{ user `ansible_path` }}/playbook.yml",
  "galaxy_file": "{{ user `ansible_path` }}/requirements.yml",
  "extra_arguments": [ "--extra-vars \"@host_vars/vars.json\"" ]
}

Testen mit Vagrant

Eine Vagrantfile ist enthalten, um die Rolle lokal zu testen.

Vagrant > 2.0 ist erforderlich.

Starte den Vagrant

Das erste Mal, wenn du dies machst, wird Ansible ausgeführt.

flask-uwsgi-nginx$ vagrant up

Der Vagrant sollte problemlos bereitgestellt werden.

Stelle den Vagrant erneut bereit

Du kannst die Rolle erneut mit folgendem Befehl ausführen:

flask-uwsgi-nginx/tests $ vagrant provision

Lizenz

MIT

Über das Projekt

Deploy Flask from a git source repository

Installieren
ansible-galaxy install lex00.flask-uwsgi-nginx
GitHub Repository
Lizenz
mit
Downloads
76
Besitzer