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