1. 程式人生 > >Linux中LAMP架構自動部署和wordpress自動上線

Linux中LAMP架構自動部署和wordpress自動上線

Linux中LAMP架構自動部署就是寫一個shell指令碼(存命令列檔案),裡面存著我們部署LAMP時的命令列,然後執行它。

基礎知識:

一.echo

1.在Linux中列印內容

[[email protected]_0_11_centos ~]# echo hello world hello world [[email protected]_0_11_centos ~]# echo "hello world"

hello world

2.Linux中的echo有重定向的功能,即:在命令列中直接往檔案中新增內容

[[email protected]_0_11_centos ~]# echo "hello" > test1.txt   【把"hello"這個字串輸入到檔案test1.txt中,因為本來沒有這個檔案,所以這裡會新建立這個檔案,注:>會覆蓋原檔案內容】 [

[email protected]_0_11_centos ~]# ls a.php  a.sh  test1.txt  test.sh  wordpress  wordpress-4.9.4-zh_CN.tar.gz

[[email protected]_0_11_centos ~]# vim test1.txt

[[email protected]_0_11_centos ~]# echo "world" >test1.txt [[email protected]_0_11_centos ~]# vim test1.txt world     

【原來的hello被覆蓋了】

[[email protected]_0_11_centos ~]# echo "aaaaa" >>test1.txt [[email protected]_0_11_centos ~]# vim test1.txt world

aaaaa

【注:>>表示標準的輸入,也就是說,它表示在檔案最後一行進行追加】

二.$?

一條命令正確執行,返回狀態碼0

一條命令非正確執行,返回狀態碼非0

$?是狀態碼變數,它表示狀態碼,表示Linux中執行命令是否正確。

[[email protected]_0_11_centos ~]# cd /etc/a -bash: cd: /etc/a: No such file or directory [

[email protected]_0_11_centos ~]# echo $? 1 [[email protected]_0_11_centos ~]# cd /etc/b -bash: cd: /etc/b: No such file or directory [[email protected]_0_11_centos ~]# echo $?

1

[[email protected]_0_11_centos ~]# ls -yyyyyy ls: invalid option -- 'y' Try 'ls --help' for more information. [[email protected]_0_11_centos ~]# echo $? 2 [[email protected]_0_11_centos ~]# ls -zzzz ls: invalid option -- 'z' Try 'ls --help' for more information. [[email protected]_0_11_centos ~]# echo $? 2

【注:同一命令的錯誤狀態碼一樣,cd為1,ls為2,不同命令的錯誤狀態碼不一樣】

指令碼(shell)檔案的字尾為.sh,Linux中自帶shell環境:bash編譯器,即用bash編譯.sh檔案

#!/usr/bin/env bash     【這一行稱為she一聲bang四聲】【宣告用哪個編譯器】【這句話的意思是在/usr/bin/env路徑下找bash的環境變數】 【還有別的寫法,但是這麼寫是因為所有Linux版本的環境變數都在/usr/bin/env下,這種寫法適用所有的linux版本】

【注:如果想寫python程式也可以用這種寫法,即第一行寫#!/usr/bin/env python,只有shell指令碼和python可以這樣用 】

[[email protected]_0_11_centos ~]# vim test2.sh

在這個檔案中寫如下程式碼:

#!/usr/bin/env bash cd /etc/a if [ $? == 0 ];then   【注意:==兩邊有空格, [空格 空格],在指令碼中"="  和"=="都表示等於】         echo "true" else         echo "false" fi

[[email protected]_0_11_centos ~]# bash test2.sh

顯示:

test2.sh: line 2: cd: /etc/a: No such file or directory

false

三.cat 檔名

1.cat 用於檢視檔案中的內容

例子:[[email protected]_0_11_centos html]# cat index.php

2.cat有重定向的功能,它是對整個檔案進行操作的

[[email protected]_0_11_centos ~]# cat a.txt 1234 [[email protected]_0_11_centos ~]# cat a.txt >> b.txt  【a.txt的整個檔案都追加到了b.txt中,因為沒來本來b.txt,這裡自動建立了b.txt】【>>和echo中一樣,表示標準輸入,即追加到末行】 [[email protected]_0_11_centos ~]# cat b.txt 1234 [[email protected]_0_11_centos ~]# cat a.txt >>b.txt  【又追加了一遍a.txt】 [[email protected]_0_11_centos ~]# cat b.txt 1234 1234 [[email protected]_0_11_centos ~]# cat a.txt > b.txt【>和echo中一樣表示覆蓋】  [[email protected]_0_11_centos ~]# cat b.txt

1234

3.可以用cat建立一個檔案並編寫內容

[[email protected]_0_11_centos ~]# cat <<-EOF >a.php   【>表覆蓋,因為本來就沒有這個檔案所以這裡會重新建立】 > <?php phpinfo() ?>

> EOF

【這條指令的意思是:將兩個EOF間的內容覆蓋到a.php中】

例子:

[[email protected]_0_11_centos ~]# cat <<-EOF >q.txt > hahahahaha > EOF [[email protected]_0_11_centos ~]# pwd /root [[email protected]_0_11_centos ~]# cat q.txt hahahahaha [[email protected]_0_11_centos ~]# cat <<-EOF >>q.txt > bobibobi > 1234 > EOF [[email protected]_0_11_centos ~]# cat q.txt hahahahaha bobibobi 1234

開始部署

1.重灌伺服器系統 ,就填個密碼就行,別的預設就好

2. 【注,把命令列放在shell中,執行時相當在介面用手輸入】

[[email protected]_0_11_centos ~]# date

Wed Jul  4 13:27:08 CST 2018

[[email protected]_0_11_centos ~]# echo date   date

[[email protected]_0_11_centos ~]# echo `date`  【這個點是F1下面的按鍵】

Wed Jul 4 13:26:55 CST 2018

[[email protected]_0_11_centos ~]# date1=`date` 【定義變數date1】 [[email protected]_0_11_centos ~]# echo $date1  【輸出自己定義的變數要加$】 Wed Jul 4 17:05:45 CST 2018 [[email protected]_0_11_centos ~]# echo $date1

Wed Jul 4 17:05:45 CST 2018  【兩次輸出相同的時間】

為什麼date1=`date` 要寫兩個點呢

[[email protected]_0_11_centos ~]# a=date [[email protected]_0_11_centos ~]# echo $a date 【這說明這兩個點表示它把這個字串封裝為一個命令】

3.1編寫lamp.sh

vim lamp.sh

在這個檔案中寫如下內容:

date1=`date`【要先寫這句,不然$? 輸出的是這句賦值語句的狀態碼】

yum -y install httpd mariadb-server mariadb php php-mysql php-gd gd

if [ $? == 0 ];  then

        echo "$date1-----yum install packages IS OK." >> /opt/lamp.log

【注:這裡要寫絕對路徑,這種東西一般都存在/opt/下,log表示日誌】

else         echo "$date1-----yum install packages IS NOT OK." >> /opt/lamp.log

fi

date2=`date` #這裡是全域性變數,也可以在if和else下分別定義兩個區域性的變數

systemctl start httpd mariadb systemctl enable httpd mariadb if [ $? == 0 ];  then         echo "$date2-----啟動服務成功." >> /opt/lamp.log else         echo "$date2-----啟動服務失敗" >> /opt/lamp.log fi echo "<?php phpinfo()?>" > /var/www/html/index.php  #測試httpd和php之間的配合關係 expect /root/expectd #更改資料庫密碼,expectd這個檔案中存的是修改資料庫密碼的程式碼,這個檔案我放在了下面 cat <<-EOF >/var/www/html/index.php <?php \$link=mysql_connect("localhost","root","onno799967"); 【\為轉移字元,如果不寫這個linux會認為這是一個linux變數,但它其實是php變數\取消了它是linux變數的意思】 if(!link)         echo "this connect is false"; else         echo "this connect is true"; ?> EOF systemctl restart httpd mariadb

3.2寫一個自動應答指令碼

進入命令列,輸入[[email protected]_0_11_centos ~]# expect,看是否有這個命令,如果沒有,用yum下載expect

【注:退出 expect用exit】

#vim expectd 【建立一個expectd指令碼,起名為expectd,指令碼不一定必須有後綴】

在內面寫如下內容:

#!/usr/bin/expect 【第一行she bang】

spawn mysqladmin -uroot -p password "onno799967" 【spawn後寫需執行的命令】【這之後一般會讓輸入舊密碼】

expect "Enter password:" 【expect會自動識別這條命令】 send "舊密碼\r" 【send自動傳送,\r表示回車,如第一次設定密碼不用填寫舊密碼】

interact【表示保持這種狀態,即回到敲程式碼的這種狀態,也就是回到lamp.sh這個指令碼中,這種寫法方便二次呼叫這個expect】

寫完這個expectd並儲存後需要給它許可權,在命令列中這樣做:

#chomd a+x expectd 【chomd=change mod(許可權),就是改變許可權的意思,a=all所有,x為執行許可權】

這時再#ls會發現expect變成了綠色

去訪問公網IP,如果顯示this connect is true,就表示成功部署了LAMP

 wordpress自動上線:【注::我這部分不會背寫...其他均已掌握】

[[email protected]_0_11_centos ~]# vim wordpress_online 【建立wordpress_online,這個指令碼】

寫如下內容:

wget -O  /root/wordpress-4.9.4-zh_CN.tar.gz  https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz

【-O表示將https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz下載到/root/目錄下,並重命名為wordpress-4.9.4-zh_CN.tar.gz】

tar xf /root/wordpress-4.9.4-zh_CN.tar.gz -C /root/ 

【tar的-C和wget的-O作用一樣,這裡沒有更名,只是更改了目錄】

mv /root/wordpress/wp-config-sample.php /root/wordpress/wp-config.php【更名】 mysql -uroot  -p"onno799967" -e "create database wordpress;"【在mysql中建立名為 wordpress的資料庫】

sed -i s/username_here/root/g /root/wordpress/wp-config.php

【sed可以在命令列中修改檔案的內容 ,-i表示告訴sed真的要修改,sed的格式:

sed -i s/被替換內容/替換的內容/g 檔名 】

sed -i s/database_name_here/wordpress/g /root/wordpress/wp-config.php sed -i s/password_here/onno799967/g /root/wordpress/wp-config.php rm -rf /var/www/html/* 【-rf避免互動式】 cp -rf /root/wordpress/* /var/www/html/

systemctl restart httpd mariadb

這時登入公網IP就能看到wordpress了

-----------------------------------------------------------------------------------------------------------------------------

注:

檢視目錄中隱藏的檔案 #ls -al

當用vim檢視一個檔案如果用 :q退出 會自動生成一個隱藏檔案,原始檔不會改變,這個隱藏檔案中存的是改變後的內容,注意刪除這個檔案時,要輸入檔名前面的"."