【ansible 自动化部署方案】

发布时间:2019-10-08 20:14:46编辑:auto阅读(2078)

    更新下122(189)的前端?----front_end.yml
    更新下122(189)的后端?----back_end.yml
    一键装机。----webenv.yml

    ssh apache2(源:ubuntu) mysql5.6 nginx php5.6 (redis-server php5-redis php5-mysql php5-gd) SVN npm webpack
    /var/lib/dpkg

    把189的数据库和122的数据库保持一致。
    数据库更新到和线上的一样。

    把122的前端(后端)和189的前端(后端)保持一致。
    把某个文件单独替换下。
    把某些文件单独替换下。
    给一份sql备份,要把它导入189(122)中。

    //把122的前后端和189的前后端保持一致。
    //备份下122(189)环境的数据库。
    //返回部署前的一个版本。

    通过Apt (Ubuntu)安装最新发布版本:
    $ sudo apt-get install software-properties-common
    $ sudo apt-add-repository ppa:ansible/ansible
    $ sudo apt-get update
    $ sudo apt-get install ansible

    ssh-keygen -t rsa
    主控机上执行。在/root/.ssh/下生成了id_rsa.pub,复制里面的内容,粘贴到被控制机器的/root/.ssh/authorized_keys里面并执行ssh-agent bash。

    ansible_ssh_host

      将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
    

    ansible_ssh_port

      ssh端口号.如果不是默认的端口号,通过此变量设置.
    

    ansible_ssh_user

      默认的 ssh 用户名
    

    ansible_ssh_pass

      ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
    

    ansible_sudo_pass

      sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
    

    ansible_sudo_exe (new in version 1.8)

      sudo 命令路径(适用于1.8及以上版本)
    

    ansible_connection

      与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.
    

    ansible_ssh_private_key_file

      ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
    

    ansible_shell_type

      目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.
    

    ansible_python_interpreter

      目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如  \*BSD, 或者 /usr/bin/python
      不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).
    
      与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
      
      
      

    pattern:http://www.ansible.com.cn/doc...
    ansible <pattern_goes_here> -m <module_name> -a <arguments>
    示例如下:

    ansible webservers -m service -a "name=httpd state=restarted"

    --ask-pass -k :带该参数,需要密码登陆

    1、Ad Hoc commands
    ansible atlanta -a "/sbin/reboot" -f 10
    ansible raleigh -m shell -a 'echo $TERM'

    ansible atlanta -m copy -a "src=/etc/hosts dest=/tmp/hosts"
    $ ansible webservers -m file -a "dest=/srv/foo/a.txt mode=600" //赋值权限
    $ ansible webservers -m file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan" //赋值权限、更改用户组
    ansible all -m file -a "dest=/usr/yangshu/ss mode=755 owner=root group=root state=directory" //创建文件夹ss
    ansible webservers -m file -a "dest=/path/to/c state=absent"//删除目录
    ansible all -m yum -a "name=acme state=present" //确认一个软件包已经安装,但不去升级它:

    确认一个软件包的安装版本:

    $ ansible webservers -m yum -a "name=acme-1.5 state=present"
    确认一个软件包还没有安装:

    $ ansible webservers -m yum -a "name=acme state=absent"
    ansible all -m git -a "repo=git://github.com/NeverMoreForD/picMonitor.git dest=/usr/yangshu2 version=HEAD" //直接通过git 源码部署

    确认某个服务在所有的webservers上都已经启动:
    $ ansible webservers -m service -a "name=httpd state=started"
    或是在所有的webservers上重启某个服务(译者注:可能是确认已重启的状态?):
    $ ansible webservers -m service -a "name=httpd state=restarted"
    确认某个服务已经停止:
    $ ansible webservers -m service -a "name=httpd state=stopped"

    Time Limited Background Operations
    需要长时间运行的命令可以放到后台去,在命令开始运行后我们也可以检查运行的状态.如果运行命令后,不想获取返回的信息, 可执行如下命令:

    $ ansible all -B 3600 -P 0 -a "/usr/bin/long_running_operation --do-stuff"
    如果你确定要在命令运行后检查运行的状态,可以使用 async_status 模块.前面执行后台命令后会返回一个 job id, 将这个 id 传给 async_status 模块:

    $ ansible web1.example.com -m async_status -a "jid=488359678239.2844"
    获取状态的命令如下:

    $ ansible all -B 1800 -P 60 -a "/usr/bin/long_running_operation --do-stuff"
    其中 -B 1800 表示最多运行30分钟, -P 60 表示每隔60秒获取一次状态信息.

    Polling 获取状态信息的操作会在后台工作任务启动之后开始.若你希望所有的工作任务快速启动, --forks 这个选项的值 要设置得足够大,这是前面讲过的并发进程的个数.在运行指定的时间(由-B选项所指定)后,远程节点上的任务进程便会被终止.

    一般你只能在把需要长时间运行的命令或是软件升级这样的任务放到后台去执行.对于 copy 模块来说,即使按照前面的示例想放到 后台执行文件传输,实际上并不会如你所愿.

    在执行一个 playbook 之前,想看看这个 playbook 的执行会影响到哪些 hosts,你可以这样做: ansible-playbook playbook.yml --list-hosts

    2、Ansible playbook
    host、vars、tasks、handlers、remote_user
    包含tasks:

    tasks:

    • include: wordpress.yml wp_user=timmy
    • include: wordpress.yml wp_user=alice
    • include: wordpress.yml wp_user=bob

    tasks:

    • { include: wordpress.yml, wp_user: timmy, ssh_keys: [ 'keys/one.txt', 'keys/two.txt' ] }
      那么在 wordpress.yml里面,tasks用变量为:{{ wp_user }}

    svn checkout 代码:/usr/bin/svn --non-interactive --trust-server-cert --no-auth-cache --username yangshu --password 'yangshu' export --force -r HEAD https://192.168.0.115/svn/zhu... /var/www/kukuapp
    "msg": "svn: E000022: Can't convert string from 'UTF-8' to native encoding:n :
    问题解决,加上如下代码:environment:

    - LC_ALL: en_US.UTF-8
    

    linux环境下如何快速升级你的Node.js:
    npm install -g n
    n -V
    n stable 或者 到指定版本: n v6.0.0
    ①ln -s /var/lib/nodev8/bin/node /usr/bin/
    ②ln -s /var/lib/nodev8/bin/npm /usr/bin/
    ansible-playbook webenv.yml --ask-pass
    fatal: [192.168.0.129]: FAILED! => {"changed": false, "failed": true, "module_stderr": "Shared connection to 192.168.0.129 closed.rn", "module_stdout": "/bin/sh: 1: /usr/bin/python: not foundrn", "msg": "MODULE FAILURE", "rc": 0}
    解决:ln -s /usr/bin/python3 /usr/bin/python

    新装的机器:189的这份ubuntu.source.list拿来覆盖掉原来的。在apt update

    dpkg --configure -a


    最近在debian系统上apt-get install -y ia32-libs安装软件到最后时总是出现如下错误:
    Sub-process /usr/bin/dpkg returned an error code (1)

    1解决办法:
    cd /var/lib/dpkg
    sudo mv info info.bak
    sudo mkdir info
    sudo apt-get install -y ia32-libs
    开始我是想在一条命令中同时安装几个软件包,
    结果还是出现E: Sub-process /usr/bin/dpkg returned an error code (1) 。
    于是把新的info删掉,一个个地来安装,每装好一个软件包,就把info删掉,再新建一个,这样就没有提示E: Sub-process /usr/bin/dpkg returned an error code (1) 了。
    最后用原来的info.bak 替换新的info

    sudo mv info.bak info
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get autoremove
    执行完以上操作,再安装软件的时候都不再有E: Sub-process /usr/bin/dpkg returned an error code (1)了。

    2\
    cd /var/lib/dpkg
    sudo mv info{,.bak}
    sudo mkdir info
    sudo dpkg --configure -a
    sudo apt-get install -f

    3\
    sudo fc-cache -fv 2>&1 | grep failed | cut -f1 -d":" | xargs -i sudo touch {} && sudo fc-cache -fv

    E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
    E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
    ps -ef | grep apt-get命令找到相关进程 然后使用Kill -9 进程号



    Aug 03 02:49:52 ubuntu apache2[33684]: AH00526: Syntax error on line 14 of /etc/apache2/sites-enabled/kukuapi1.conf:
    Aug 03 02:49:52 ubuntu apache2[33684]: Invalid command 'XSendFile', perhaps misspelled or defined by a module not included in the server configuration

    --Download

    mod_xsendfile.c
    SHA256: 8e8c21ef39bbe86464d3831fd30cc4c51633f6e2e002204509e55fc7c8df9cf9
    Source tarball (gz): mod_xsendfile-0.12.tar.gz
    SHA256: 9078ec28697d672a7f8aa3a19180109c1ccf73dc6aa335e856d1129344566b7e
    Source tarball (bz2): mod_xsendfile-0.12.tar.bz2
    SHA256: 6184d3f7535b34f08ea4e665b55498d5f76673d2a816cf2ee3eaae203c2d780b
    Win32 binaries: mod_xsendfile-0.12.zip
    SHA256: 75e6a8af00112a7262880e5e6823d02f14b6e84fed8305fa0351a428d1c1529e
    GitHub repository: http://github.com/nmaier/mod_...
    Beta version: version 1.0 beta1
    Installation

    步骤:
    Grab the source.
    Compile and install
    apxs -cia mod_xsendfile.c
    ---apxs -cia mod_xsendfile.c 依赖 apache2-dev ,安装apache2-dev要用ali的源.
    Restart apache
    That's all.


    /etc/nginx/sites-available
    default
    /etc/nginx/sites-enabled
    default1.config

    /etc/apache2/sites-available
    default-ssl.conf
    /etc/apache2/sites-enabled
    kukuapi1.conf


    nginx 的时候出现["E: Sub-process /usr/bin/dpkg returned an error code (1)"], 屏蔽掉其他已安装的yml模块和即将安装的yml模块.单独安装nginx的yml
    cd /var/lib/dpkg
    sudo mv info info.bak
    sudo mkdir info
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get autoremove


    mysql安装的时候:
    apt-get -f install


    svn
    E230001: Server SSL certificate verification failed: certificate issued for a different hostname, issuer is not trusted",

    第一次拷贝的时候,要输入账户和密码:
    svn co https://192.168.0.115/svn/zhu...
    提示:选p,然后输入账号密码.以后不用输入了.

    拷贝kukuannex:
    scp -r root@192.168.0.122:/var/www/kukuannex /var/www/

    拷贝pc模板:
    cd /var/www/kukuapp/public
    scp -r root@192.168.0.122:/var/www/kukuapp/public/pc ./





    先用阿里的源 安装mysql
    sudo passwd root 设置root密码
    su root 切换到root下面.
    1、先换阿里的源scp root@192.168.0.189:/etc/ansible/packages/ali.sources.list /etc/apt

    cp ali.sources.list sources.list
    apt update
    apt list --upgradable
    

    2 安装vim / openssh-server
    2、ln -s /usr/bin/python3 /usr/bin/python
    3、vim /etc/ssh/sshd_config 设置root 可以登录 关闭防火墙:ufw disable

    ", " mysql-community-server depends on perl; however:", " Package perl is not installed.", "", "dp
    mysql 在第一次安装的时候报错时,执行这个:apt-get -f install

    拷贝kukuannex:
    scp -r root@192.168.0.122:/var/www/kukuannex /var/www/

    拷贝pc模板:
    cd /var/www/kukuapp/public
    scp -r root@192.168.0.122:/var/www/kukuapp/public/pc ./

    第一次play后台代码的时候,要输入账户和密码:
    svn co https://192.168.0.115/svn/zhu...
    提示:选p,然后输入账号密码.以后不用输入了.

    cd /root/.ssh/
    vim authorized_keys

关键字