Ansible快速部署web application

Ansible快速部署web application

目标
通过ansible快速搭建web应用, 包括 python flask , mysql
大致步骤分为:

  1. 安装依赖包 python mysql
  2. 初始化数据库
  3. 安装flask
  4. 上传代码文件
  5. 启动应用程序

我这里的环境是 master-1 作为ansible server , worker-1 worker-2 作为客户机.
机器信息

主机名IP
master-1192.168.5.101
worker-1192.168.5.201
worker-2192.168.5.202

ansible安装过程,我这里不作讲解。直接开始ansible playbook的内容。

创建 inventory.txt

[root@master-1 ~]# cat inventory.txt
db_and_web_server-2 ansible_ssh_host=worker-2 ansible_ssh_user=root ansibel_ssh_pass=vagrant

这里只在 worker-2上面做部署。

部署web application的playbook-- db_and_web_application.yml

- name: Deploy a web application
  hosts: db_and_web_server-2
  tasks:
    - name: Install all required dependencies
      yum: 
        name: [ 'python', 'python-setuptools', 'python-pip', 'MySQL-python' ]
        state: present
    
    - name: Add repository
      yum_repository:
        name: mysql57-community
        description: MySQL 5.7 Community Server
        baseurl: http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
        gpgkey: http://repo.mysql.com/RPM-GPG-KEY-mysql

    - name: Install and Configure Database
      yum: name=mysql-community-server state=present
        
    - name: Start MySQL Service
      service: name=mysqld state=started enabled=yes
    
    - name: check file /tmp/init-mysql.log exist 
      stat:
        path: /tmp/init-mysql.log
      register: init_mysql_log

    - name: Init mysql password
      shell: mysql -uroot -p`grep 'temporary password' /var/log/mysqld.log| awk '{print $NF}'` --connect-expired-password -e "alter user root@localhost identified by 'zaq1@WSX123';" > /tmp/init-mysql.log
      when: not init_mysql_log.stat.exists

    - name: Create application Database
      mysql_db: name=employee_db login_host=127.0.0.1 login_user=root login_password='zaq1@WSX123' state=present 
    
    - name: Create Database User 
      mysql_user: name='db_user' host=% password='zaq1@WSX123' priv='*.*:ALL' login_user=root login_password='zaq1@WSX123' state=present

    - name: Create Table 
      shell: |
        mysql -uroot -pzaq1@WSX123 --connect-expired-password -e "USE employee_db;CREATE TABLE employees (name VARCHAR(20));INSERT INTO employees VALUES ('JasonLong');"

    - name: pip update to 20.2.4
      shell: /usr/bin/python -m pip install --upgrade pip==20.2.4

    - name: pip update to latest
      shell: /usr/bin/python -m pip install --upgrade pip

    - name: Install Python Flask dependency
      pip:  name={{ item }} state=present
      with_items:
        - flask
        - flask-mysql
    
    - name: Copy source code
      copy: src=app.py dest=/opt/app.py
    
    - name: Running flask app
      shell:  FLASK_APP=/opt/app.py nohup flask run --host=0.0.0.0 &    




关于- name: Init mysql password ,判断/tmp/init-mysql.log 不存在,就初始化mysql root密码。
- name: Create application Database 创建数据库
- name: Create Database User 创建应用账号
- name: Running flask app 运行flask应用程序

应用程序app.py

import os
from flask import Flask
from flaskext.mysql import MySQL      # For newer versions of flask-mysql 
# from flask.ext.mysql import MySQL   # For older versions of flask-mysql
app = Flask(__name__)

mysql = MySQL()

mysql_database_host = 'MYSQL_DATABASE_HOST' in os.environ and os.environ['MYSQL_DATABASE_HOST'] or  'localhost'

# MySQL configurations
app.config['MYSQL_DATABASE_USER'] = 'db_user'
app.config['MYSQL_DATABASE_PASSWORD'] = 'zaq1@WSX123'
app.config['MYSQL_DATABASE_DB'] = 'employee_db'
app.config['MYSQL_DATABASE_HOST'] = mysql_database_host
mysql.init_app(app)

conn = mysql.connect()

cursor = conn.cursor()

@app.route("/")
def main():
    return "Welcome!"

@app.route('/welcome')
def hello():
    return 'Hello , welcome to JasonLong Blog'

@app.route('/read from database')
def read():
    cursor.execute("SELECT * FROM employees")
    row = cursor.fetchone()
    result = []
    while row is not None:
      result.append(row[0])
      row = cursor.fetchone()

    return ",".join(result)

if __name__ == "__main__":
    app.run()

注意: 数据库名和密码是否正确。

运行ansible部署

[root@master-1 ~]# ansible-playbook db_and_web_application.yml -i inventory.txt

在这里插入图片描述

我的测试机环境,由于网络问题,下载包有时会超时,失败时多执行几次,就可以了。

上面的部署成功后,我们开始检查一下页面是否正常。

网页访问 http://192.168.5.202:5000/
在这里插入图片描述
网页访问 http://192.168.5.202:5000/welcome
在这里插入图片描述

网页访问 http://192.168.5.202:5000/read%20from%20database
在这里插入图片描述
至此,ansible playbook 部署 python mysql的例子完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城狮JasonLong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值