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
DateiDiese 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