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 ~]# 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
[
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退出 會自動生成一個隱藏檔案,原始檔不會改變,這個隱藏檔案中存的是改變後的內容,注意刪除這個檔案時,要輸入檔名前面的"."