文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【ansible 自动化部署方案】

2023-01-31 08:18

关注

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯