lex00.flask-uwsgi-nginx

README.md

Ansible 角色: flask-uwsgi-nginx

这个 Ansible 角色用于从 git 来源库部署你的 Flask 应用程序。

该角色将你的 Flask 应用打包成 wheel,然后安装到一个虚拟环境中。

要求

  • .python-version 文件

    此文件必须包含你所使用的 Python 版本。

  • python setup.py bdist_wheel

    该角色会运行此命令。请提前测试,确保你的项目可以构建 wheel。

角色变量

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

  • 包含 Flask 应用的 Python 仓库

app_subfolder: ''

  • 如果你的项目在仓库的子文件夹中,请在此处指定,否则留空

app_description: 'A Flask that lists jobs from the github jobs API'

  • 这将用于系统服务脚本

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
拥有者