Linux中LAMP架构自动部署和wordpress自动上线

Linux中LAMP架构自动部署就是写一个shell脚本(存命令行文件),里面存着我们部署LAMP时的命令行,然后运行它。

基础知识:

一.echo

1.在Linux中打印内容

[root@VM_0_11_centos ~]# echo hello world
hello world
[root@VM_0_11_centos ~]# echo "hello world"

hello world

2.Linux中的echo有重定向的功能,即:在命令行中直接往文件中添加内容

[root@VM_0_11_centos ~]# echo "hello" > test1.txt   【把"hello"这个字符串输入到文件test1.txt中,因为本来没有这个文件,所以这里会新创建这个文件,注:>会覆盖原文件内容】
[root@VM_0_11_centos ~]# ls
a.php  a.sh  test1.txt  test.sh  wordpress  wordpress-4.9.4-zh_CN.tar.gz

[root@VM_0_11_centos ~]# vim test1.txt

[root@VM_0_11_centos ~]# echo "world" >test1.txt
[root@VM_0_11_centos ~]# vim test1.txt


world     

【原来的hello被覆盖了】

[root@VM_0_11_centos ~]# echo "aaaaa" >>test1.txt
[root@VM_0_11_centos ~]# vim test1.txt


world

aaaaa

【注:>>表示标准的输入,也就是说,它表示在文件最后一行进行追加】


二.$?

一条命令正确执行,返回状态码0

一条命令非正确执行,返回状态码非0

$?是状态码变量,它表示状态码,表示Linux中执行命令是否正确。

[root@VM_0_11_centos ~]# cd /etc/a
-bash: cd: /etc/a: No such file or directory
[root@VM_0_11_centos ~]# echo $?
1
[root@VM_0_11_centos ~]# cd /etc/b
-bash: cd: /etc/b: No such file or directory
[root@VM_0_11_centos ~]# echo $?

1

[root@VM_0_11_centos ~]# ls -yyyyyy
ls: invalid option -- 'y'
Try 'ls --help' for more information.
[root@VM_0_11_centos ~]# echo $?
2
[root@VM_0_11_centos ~]# ls -zzzz
ls: invalid option -- 'z'
Try 'ls --help' for more information.
[root@VM_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可以这样用 】

[root@VM_0_11_centos ~]# vim test2.sh

在这个文件中写如下代码:

#!/usr/bin/env bash
cd /etc/a
if [ $? == 0 ];then   【注意:==两边有空格, [空格 空格],在脚本中"="  和"=="都表示等于】
        echo "true"
else
        echo "false"
fi


[root@VM_0_11_centos ~]# bash test2.sh

显示:

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

false


三.cat 文件名

1.cat 用于查看文件中的内容

例子:[root@VM_0_11_centos html]# cat index.php

2.cat有重定向的功能,它是对整个文件进行操作的

[root@VM_0_11_centos ~]# cat a.txt
1234
[root@VM_0_11_centos ~]# cat a.txt >> b.txt  【a.txt的整个文件都追加到了b.txt中,因为没来本来b.txt,这里自动创建了b.txt】【>>和echo中一样,表示标准输入,即追加到末行】
[root@VM_0_11_centos ~]# cat b.txt
1234
[root@VM_0_11_centos ~]# cat a.txt >>b.txt  【又追加了一遍a.txt】
[root@VM_0_11_centos ~]# cat b.txt
1234
1234
[root@VM_0_11_centos ~]# cat a.txt > b.txt【>和echo中一样表示覆盖】 
[root@VM_0_11_centos ~]# cat b.txt

1234

3.可以用cat创建一个文件并编写内容

[root@VM_0_11_centos ~]# cat <<-EOF >a.php   【>表覆盖,因为本来就没有这个文件所以这里会重新创建】
> <?php phpinfo() ?>

> EOF

【这条指令的意思是:将两个EOF间的内容覆盖到a.php中】

例子:

[root@VM_0_11_centos ~]# cat <<-EOF >q.txt
> hahahahaha
> EOF
[root@VM_0_11_centos ~]# pwd
/root
[root@VM_0_11_centos ~]# cat q.txt
hahahahaha
[root@VM_0_11_centos ~]# cat <<-EOF >>q.txt
> bobibobi
> 1234
> EOF
[root@VM_0_11_centos ~]# cat q.txt
hahahahaha
bobibobi
1234

开始部署

1.重装服务器系统 ,就填个密码就行,别的默认就好

2. 【注,把命令行放在shell中,运行时相当在界面用手输入】

[root@VM_0_11_centos ~]# date

Wed Jul  4 13:27:08 CST 2018

[root@VM_0_11_centos ~]# echo date  
date

[root@VM_0_11_centos ~]# echo `date`  【这个点是F1下面的按键】

Wed Jul 4 13:26:55 CST 2018

[root@VM_0_11_centos ~]# date1=`date` 【定义变量date1】
[root@VM_0_11_centos ~]# echo $date1  【输出自己定义的变量要加$】
Wed Jul 4 17:05:45 CST 2018
[root@VM_0_11_centos ~]# echo $date1

Wed Jul 4 17:05:45 CST 2018  【两次输出相同的时间】

为什么date1=`date` 要写两个点呢

[root@VM_0_11_centos ~]# a=date
[root@VM_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写一个自动应答脚本

进入命令行,输入[root@VM_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自动上线:

[root@VM_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退出 会自动生成一个隐藏文件,源文件不会改变,这个隐藏文件中存的是改变后的内容,注意删除这个文件时,要输入文件名前面的"."



猜你喜欢

转载自blog.csdn.net/weixin_42594318/article/details/80910520