lex00.flask-uwsgi-nginx

README.md

Ansible Role: flask-uwsgi-nginx

このAnsibleロールは、gitソースリポジトリからFlaskアプリケーションをデプロイします。

このロールは、Flaskアプリをホイールとしてパッケージし、その後、仮想環境にインストールします。

要件

  • .python-version ファイル

    このファイルには、ターゲットのPythonバージョンが含まれている必要があります。

  • python setup.py bdist_wheel

    このコマンドをロールが実行します。事前にテストして、プロジェクトがホイールをビルドできることを確認してください。

ロール変数

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

  • Flaskアプリケーションを含むPythonリポジトリ

app_subfolder: ''

  • プロジェクトがリポジトリ内のサブフォルダーにある場合はここに指定し、そうでない場合は空白にします。

app_description: 'Github jobs APIからの求人をリストするFlask'

  • これはシステムサービススクリプトに使用されます。

app_name: 'flask_github_jobs'

  • アプリフォルダーおよびサービス名

app_user: 'flask_github_jobs'

  • システムユーザーとグループはこの値になります。

app_domain: 'notarealdomain.com'

  • nginxが応答するドメイン

app_module: 'flask_github_jobs'

  • uwsgi.ini用のPythonモジュール

app_callable: 'app'

  • uwsgi.ini用のPythonコール可能オブジェクト

app_port: '80'

  • サービスポート

app_health_ep: '/'

  • ヘルスエンドポイント

uwsgi_process_count: '4'

  • uwsgiプロセスの数

uwsgi_thread_count: '2'

  • uwsgiスレッドの数

依存関係

なし

例となるプレイブック

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

Python設定

お好きなPythonのバージョンを使用できます。

  • .python-version ファイル

    • プロジェクトにはこのファイルが必要です。
  • /home/{{ app_user }}/.pyenv/versions

    • pyenvがここにPythonをビルドしてインストールします。
  • /opt/{{ app_name }}/venv

    • アプリケーションはこの仮想環境にインストールされます。

Uwsgi設定

Uwsgiは仮想環境にインストールされます。Uwsgi用のシステムパッケージはインストールされません。

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

    • Uwsgi設定ファイル。
  • /var/run/{{ app_name }}/{{ app_name }}.sock

    • Uwsgiソケットファイル。

Flask静的アセット

このロールは静的アセットフォルダーを自動的に検出し、nginxに設定します。

これを機能させるためには:

  • アセットをFlaskアプリモジュール内のstaticというフォルダーに入れます。

  • static_url_pathを空白に設定します。

    app = Flask(__name__, static_url_path='')
    

サービス管理

Ubuntu 14.04 Uwsgiサービスの開始/停止

sudo start {{ app_name }}

Ubuntu 14.04 Nginxの開始/停止

sudo start nginx

Ubuntu >= 16 Uwsgiサービスの開始/停止

sudo systemctl start {{ app_name }}

Ubuntu >= 16 Nginxの開始/停止

sudo systemctl start nginx

ログ

ログは/var/log/{{ app_name }}に配置されます。

これらは{{ app_user }}が所有します。

Vagrant + Galaxyの例

以下の内容でrequirements.ymlを作成します:

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

プロビジョナーにはgalaxy_role_fileをこれに設定する必要があります。

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の例

以下の内容でrequirements.ymlを作成します:

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

プロビジョナーにはgalaxy_fileをこれに設定する必要があります。

{
  "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\"" ]
}

Vagrantでのテスト

このロールをローカルでテストするためのVagrantfileが含まれています。

Vagrant > 2.0が必要です。

Vagrantを起動する

最初にこれを行う時にAnsibleを実行します。

flask-uwsgi-nginx$ vagrant up

Vagrantはクリーンにプロビジョニングされるはずです。

Vagrantを再プロビジョンする

もう一度ロールを実行するには:

flask-uwsgi-nginx/tests $ vagrant provision

ライセンス

MIT

プロジェクトについて

Deploy Flask from a git source repository

インストール
ansible-galaxy install lex00.flask-uwsgi-nginx
ライセンス
mit
ダウンロード
76
所有者