前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【ansible 自动化部署方案】

【ansible 自动化部署方案】

作者头像
py3study
发布2020-01-06 17:36:11
9060
发布2020-01-06 17:36:11
举报
文章被收录于专栏:python3python3

更新下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

代码语言:javascript
复制
  将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.

ansible_ssh_port

代码语言:javascript
复制
  ssh端口号.如果不是默认的端口号,通过此变量设置.

ansible_ssh_user

代码语言:javascript
复制
  默认的 ssh 用户名

ansible_ssh_pass

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

ansible_sudo_pass

代码语言:javascript
复制
  sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)

ansible_sudo_exe (new in version 1.8)

代码语言:javascript
复制
  sudo 命令路径(适用于1.8及以上版本)

ansible_connection

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

ansible_ssh_private_key_file

代码语言:javascript
复制
  ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.

ansible_shell_type

代码语言:javascript
复制
  目标系统的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:

代码语言:javascript
复制
- 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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档