【ansible 自動化部署方案】

更新下122(189)的前端?----front_end.yml
更新下122(189)的後端?----back_end.yml
一鍵裝機。----webenv.ymlphp

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

把189的數據庫和122的數據庫保持一致。
數據庫更新到和線上的同樣。前端

把122的前端(後端)和189的前端(後端)保持一致。
把某個文件單獨替換下。
把某些文件單獨替換下。
給一份sql備份,要把它導入189(122)中。node

//把122的先後端和189的先後端保持一致。
//備份下122(189)環境的數據庫。
//返回部署前的一個版本。python

經過Apt (Ubuntu)安裝最新發布版本:
$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansiblemysql

ssh-keygen -t rsa
主控機上執行。在/root/.ssh/下生成了id_rsa.pub,複製裏面的內容,粘貼到被控制機器的/root/.ssh/authorized_keys裏面並執行ssh-agent bash。linux

ansible_ssh_hostwebpack

將要鏈接的遠程主機名.與你想要設定的主機的別名不一樣的話,可經過此變量設置.

ansible_ssh_portnginx

ssh端口號.若是不是默認的端口號,經過此變量設置.

ansible_ssh_usergit

默認的 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 :帶該參數,須要密碼登錄

一、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

二、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下面.
一、先換阿里的源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
二、ln -s /usr/bin/python3 /usr/bin/python
三、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

相關文章
相關標籤/搜索