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