腳本安裝Discuz論壇(shell + Python 實現自動化安裝)

實驗環境

1.shell 腳本:linux centos 7 系統
2.Python shell 腳本:window 系統
3.其他:python selenium 模塊,谷歌瀏覽器, 谷歌瀏覽器驅動。
4.discuz 鏈接:https://pan.baidu.com/s/1vOwN_f56wJlIzauGrFoR1Q
提取碼:mijf

實驗步驟

1.上傳discuz包到Linux系統/opt目錄下

方法一:掛載 方法二:通過Xftp軟件上傳

2.編寫腳本package.sh (可查看上一篇博客,https://blog.51cto.com/13760351/2352154)

3.編寫腳本lnmp.sh

vim lnmp.sh

#!/bin/bash
#this is auto install lamp or lnmp shell!

#apache安裝
apache()
{
#apache編譯安裝
cd /opt/httpd-2.4.29 &&./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &&make && make install &&cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
#
#修改配置文件
#在/etc/init.d/httpd文件中第二行插入2段
sed -i "2i#chkconfig: 35 85 21 \n\
#description: Apache is a World Wide Web server." /etc/init.d/httpd
#將Listen 80 替換成 Listen $ip:80 ,$ip爲變量,是本機ip地址(特別注意變量的替換方法)
sed -i "s/^Listen 80/Listen $ip:80/g" /usr/local/httpd/conf/httpd.conf
#
#優化服務
ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd ;ln -s /usr/local/httpd/bin/* /usr/local/bin/
chkconfig --add httpd
systemctl daemon-reload
systemctl start httpd
#
#檢查端口和網頁測試
port=`netstat -anpt | grep httpd | wc -l`
if [ $? -eq 0 ] && [ $port -ne 0 ]; then
echo -e "\033\t\t\t[44;32m test http://$ip \033[0m"
read -p "input result:(y/n) " u
if [ $u == "y" ]; then
echo -e "\033\t\t\t[32m apache install success!\033[0m"
else
echo -e "\033\t\t\t[5;31m apache install fail!\033[0m"
fi
else
#"-e" 爲轉義,\033爲固定格式(同 \e),"/t"爲製表位,同tab鍵,"5"爲閃爍,31m爲字體顏色,此處紅色,"\033[0m "爲固定結束格式
echo -e "\033\t\t\t[5;31m apache install fail,check!!\033[0m"
exit 0
fi
}
#
#安裝nginx
nginxt()
{
#編譯安裝
useradd -M -s /sbin/nologin nginx
cd /opt/nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ ;nginx &&nginx -t;
#檢查服務啓動
stat=`netstat -ntap | grep "80" | wc -l`
if [ $? -eq 0 ]&&[ $stat -ne 0 ] ;then
echo -e "\033\t\t\t[32m nginx install success!!\033[0m"
else
echo -e "\033\t\t\t[5;31m nginx install fail!!\033[0m"
exit 0
fi
}
#
#mysql安裝
mysql_con()
{
#編譯安裝
#判斷有無/usr/local/mysql目錄,沒有就創建
[ ! -d /usr/local/mysql ] && mkdir -p /usr/local/mysql
/usr/sbin/useradd -s /sbin/nologin mysql
cd /opt/mysql-5.5.24
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/home/mysql \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306
if [ $? -eq 0 ];then
make && make install
#
#修改配置文件
echo "export PATH=$PATH:/usr/local/mysql/bin/ " >> /etc/profile
source /etc/profile && chown -R mysql:mysql /usr/local/mysql &&cd /usr/local/mysql/support-files &&cp my-medium.cnf /etc/my.cnf &&cp mysql.server /etc/init.d/mysqld &&chmod 755 /etc/init.d/mysqld &&chkconfig --add /etc/init.d/mysqld ;
chkconfig mysqld --level 35 on
else
echo -e "\e\t\t\t[5;31m set error,check ![0m"
exit 1
fi
#初始化數據庫
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
ln -s /usr/local/mysql/bin/ /usr/local/bin/
#
#搜索basedir=,datadir=,並替換
sed -i 's#^basedir=.
$#basedir=/usr/local/mysql#' /etc/init.d/mysqld
sed -i 's#^datadir=.*$#datadir=/home/mysql#' /etc/init.d/mysqld
#mysql啓動和檢查
systemctl daemon-reload && systemctl start mysqld
port=`netstat -ntap | grep mysql |wc -l`
if [ $? -eq 0 ]&&[ $port -ne 0 ];then
echo -e "\033\t\t\t[32m mysql install success!! \033[0m"
else
echo -e "\033\t\t\t[5;31m mysql install fail,check!! \033[0m"
exit 0
fi
}
#
#apache-php安裝
apa_php()
{
#php編譯安裝
cd /opt/php-5.6.11
./configure \
--prefix=/usr/local/php5 \
--with-gd \
--with-zlib \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-config-file-path=/usr/local/php5 \
--enable-mbstring
make && make install &&cp php.ini-development /usr/local/php5/php.ini && ln -s /usr/local/php5/bin/ /usr/local/bin/ ; ln -s /usr/local/php5/sbin/ /usr/local/sbin/ ;
useradd -M -s /sbin/nologin php

#檢查httpd.conf文件中是否有php5_module,並統計
num=`cat /usr/local/httpd/conf/httpd.conf | grep "php5_module" | wc -l`
#判斷是否有php5_module
if [ $num -eq 0 ] ;then
echo -e "\e\t\t\t[5;31m no php5_module, check! \e[0m"
exit 0
else
echo -e "\e\t\t\t[32m php5_module is exist! \e[0m"
fi
#
#修改httpd配置,測試php
#在第258行行尾加index.php
sed -i '258s/$/ index.php/' /usr/local/httpd/conf/httpd.conf
#在383行插入相關文件
sed -i "383iAddType application/x-httpd-php .php\n\
AddType application/x-httpd-php-source .phps" /usr/local/httpd/conf/httpd.conf
systemctl restart httpd
#
#echo文件到index.php裏面
echo -e "<?php\nphpinfo();\n?>" >>/usr/local/httpd/htdocs/index.php
#輸出用戶測試網頁鏈接
echo -e "\e\t\t\t[5;34m test http://$ip/index.php \e[0m"
#php連接mysql測試
read -p "if connect mysql? (y/n)? " an
if [ $an == "y" ];then
#echo文件到index.php中,注意單引號中不識別$ip
echo -e '<?php\n$link=mysql_connect(localhost);\nif($link) echo "Success!!";\nelse echo "Fail!!";\nmysql_close();\n?>' >>/usr/local/httpd/htdocs/index1.php
#將localhost替換成 $ip','root' ,注意雙引號中不識別$link(要特別注意單引號和雙引號之間的區別!)
sed -i "s/localhost/'$ip','root'/g" /usr/local/httpd/htdocs/index1.php
echo -e "\e\t\t\t[32m http://$ip/index.php \e[0m"
else
echo -e "\e\t\t\t[32m lamp install finish!\e[0m"
exit 0
fi
}
#
#nginx-php安裝
nginx_php()
{
useradd -M -s /sbin/nologin php
cd /opt/php-5.6.11
./configure \
--prefix=/usr/local/php5 \
--with-gd \
--with-zlib \
--with-mysql=/usr/local/mysql \
--with-config-file-path=/usr/local/php5 \
--enable-mbstring \
--with-jpeg-dir \
--with-openssl \
--disable-ipv6 \
--enable-fpm
make && make install
#安裝gd和修改php配置文件
cd /opt/zend-loader-php5.5-linux-x86_64/ && cp ZendGuardLoader.so /usr/local/php5/lib/php
#
echo -e "[Zend Guard Loader]\nzend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so\nzend_loader.enable=1" >>/usr/local/php5/php.ini
cd /usr/local/php5/etc/ && cp php-fpm.conf.default php-fpm.conf
#替換文件
sed -i 's#^user = .$#user = php#' php-fpm.conf
sed -i 's#^group = .
$#group = php#' php-fpm.conf
sed -i 's#^pm.max_children = .$#pm.max_children = 50#' php-fpm.conf
sed -i 's#^pm.max_spare_server = .
$#pm.max_children = 35#' php-fpm.conf
sed -i 's#^pm.min_spare_server = .$#pm.min_children = 5#' php-fpm.conf
sed -i 's#^pm.start_server = .
$#pm.min_children = 20#' php-fpm.conf
#php服務啓動和檢查
/usr/local/php5/sbin/php-fpm
port=`netstat -ntap | grep ":9000" | wc -l`
if [ $? -eq 0 ]&&[ $port -ne 0 ];then
echo -e "\033\t\t\t[32m php install success! \033[0m"
else
echo -e "\033\t\t\t[5;31m php install fail! \033[0m"
exit 0
fi
}
#
#nginx和php結合
ngin_vim()
{
#修改nginx配置
mkdir -p /var/www/html/btcom
#將45行 ; 替換成index.php; (或者在 ; 前面加 index.php,這個命令不好寫)
sed -i '45s/;/ index.php;/g' /usr/local/nginx/conf/nginx.conf
#在64行插入
sed -i "64ilocation ~ .php$ {\n\
root /var/www/html/btcom;\n\
fastcgi_pass 127.0.0.1:9000;\n\
fastcgi_index index.php;\n\
fastcgi_param SCRIPT_FILENAME;\n\
include fastcgi_params;\n\
}" /usr/local/nginx/conf/nginx.conf
#在68行;後插入語句,注意雙引號不識別$document_root$fastcgi_script_name,才用單引號重新插入
sed -i '68s/;/ $document_root$fastcgi_script_name;/g' /usr/local/nginx/conf/nginx.conf
echo -e "<?php\nphpinfo();\n?>" >>/var/www/html/btcom/index.php
nginx -s reload
echo -e "\e[32m test http://$ip/index.php \e[0m"
#
#php連接mysql
read -p "php connect mysql (y/n)? " answer
if [ $answer == "y" ];then
#echo文件,注意但,雙引號,原因同上
echo -e '<?php\n$link=mysql_connect(localhost);\nif($link) echo "Success!!";\nelse echo "Fail!!";\nmysql_close();\n?>' >>/var/www/html/btcom/index1.php
sed -i "s/localhost/'$ip','root'/g" /var/www/html/btcom/index1.php
echo -e "\e\t\t\t[32m test http://$ip/index.php \e[0m"
else
echo -e "\e\t\t\t[32m lnmp install finish!\e[0m"
exit 0
fi
}
#
#論壇安裝
discuz()
{
#不登錄mysql,創建數據庫,授權。
mysql -e "create database bbs;grant all on bbs.* To 'bbsuser'@'%' identified BY 'admin123';flush privileges;"
#bbsuser 連接 數據庫
echo -e '<?php\n$link=mysql_connect(localhost);\nif($link) echo "Success!!";\nelse echo "Fail!!";\nmysql_close();\n?>' >>/usr/local/httpd/htdocs/index1.php
sed -i "s/localhost/'$ip','bbsuser','admin123'/g" /usr/local/httpd/htdocs/index1.php
#去網頁驗證連接數據庫是否成功
echo -e "\e\t\t\t[32m test http://$ip/index1.php \e[0m"
#進行人機交互,連接成功進行discuz安裝
read -p "bbs connect mysql success (y/n)? " aw
if [ $aw == "y" ];then
unzip Discuz_X2.5_SC_UTF8.zip -d /opt && mkdir -p /usr/local/httpd/htdocs/bbs/ &&cp -r /opt/upload/ /usr/local/httpd/htdocs/bbs/ &&cd /opt/httpd/htdocs/bbs/upload/
chown -R daemon ./config/
chown -R daemon ./data/
chown -R daemon ./uc_client/
chown -R daemon ./uc_server/data/
sed -i '927s/;date.timezone =/ date.timezone = UTC/g' /usr/local/php5/php.ini
#輸出完成信息,提醒用戶去網頁安裝,給出安裝鏈接
echo -e "\e\t\t\t[5;31m you can install discuz at http://$ip/bbs/upload/install \e[0m"
#數據庫連接失敗,直接退出腳本
else echo -e "\e\t\t\t[5;31m bbs connect mysql fail,check! \e[0m"
exit 0
fi
}
#
#執行package.sh腳本
./package.sh
#關閉防火牆,增強性
systemctl stop firewalld.service
setenforce 0
#過濾出本機ip
ip=`ifconfig ens33 | grep "netmask" | awk '{print $2}'`
#查看e.sh,將2個腳本連接起來
num=`cat /root/e.sh`
#2腳本已經建立連接,刪除e.sh,防止佔用空間
rm -rf e.sh
#lamp腳本安裝
if [ $num == "lamp" ]
then
#apache 安裝
apache
#mysql 安裝
mysql_con
#apache和php連接
apa_php
discuz
#lnmp腳本安裝
elif [ $num == "lnmp" ]
then
#nginx.mysql,php安裝
nginxt &&mysql_con &&nginx_php
#修改nginx配置文件
ngin_vim
discuz
else
echo -e "\e\t\t\t[5;31m input error,check! \e[0m"
exit 1
fi

4.賦予腳本權限

chmod +x *.sh

5.執行腳本

./lnmp.sh

6.編輯python shell

from selenium import webdriver
import time
#採用谷歌瀏覽器
driver = webdriver.Chrome()
#進入安裝鏈接
driver.get("http://192.168.65.185/bbs/upload/install/")
print(driver.title)
#定位“同意”元素,點擊鼠標
driver.find_element_by_name("submit").click()

腳本安裝Discuz論壇(shell + Python 實現自動化安裝)

#定位“下一步”元素,點擊鼠標

driver.find_element_by_xpath("//input[@type='submit']").click()

腳本安裝Discuz論壇(shell + Python 實現自動化安裝)

#定位“下一步”元素,點擊鼠標
driver.find_element_by_name("submitname").click()

腳本安裝Discuz論壇(shell + Python 實現自動化安裝)

#定位"數據庫服務器填寫框", 清除原有文本
driver.find_element_by_name("dbinfo[dbhost]").clear()
#在上一步,清除文本後,輸入新文本
driver.find_element_by_name("dbinfo[dbhost]").send_keys("192.168.65.185")
#定位,清除文本
driver.find_element_by_name("dbinfo[dbname]").clear()
#填寫新文本
driver.find_element_by_name("dbinfo[dbname]").send_keys("bbs")
driver.find_element_by_name("dbinfo[dbuser]").clear()
driver.find_element_by_name("dbinfo[dbuser]").send_keys("bbsuser")
driver.find_element_by_name("dbinfo[dbpw]").clear()
driver.find_element_by_name("dbinfo[dbpw]").send_keys("admin123")
driver.find_element_by_name("admininfo[password]").send_keys("admin123")
driver.find_element_by_name("admininfo[password2]").send_keys("admin123")
#定位"下一步"元素,點擊鼠標
driver.find_element_by_name("submitname").click()

腳本安裝Discuz論壇(shell + Python 實現自動化安裝)
腳本安裝Discuz論壇(shell + Python 實現自動化安裝)

#跳轉到論壇首頁

driver.get("http://192.168.65.185/bbs/upload")
print(driver.title)

#自動輸入用戶名,密碼
driver.find_element_by_name("username").send_keys("admin")
driver.find_element_by_name("password").send_keys("admin123")

#點擊自動登錄
driver.find_element_by_xpath("//button[@type='submit']").click()

#點擊登錄
driver.find_element_by_name("cookietime").click()

腳本安裝Discuz論壇(shell + Python 實現自動化安裝)
腳本安裝Discuz論壇(shell + Python 實現自動化安裝)

7.執行python shell (快捷鍵 F5)

腳本安裝Discuz論壇(shell + Python 實現自動化安裝)

溫馨提示:

1.本次腳本是在上一篇博客的基礎上完成的,package.sh腳本查看上一篇博客https://blog.51cto.com/13760351/2352154
2.window 網頁自動安裝方法是採用python selenium 模塊,這部分知識將在後面的博客中發佈,請期待!
3.此腳本不適用於新手安裝discuz論壇(腳本執行太快,出現問題,無法找到問題,解決問題),只適合作爲shell和Python shell 腳本愛好者練習使用。
4.腳本安裝的方法很多,這只是其中一種,若大家有更方便快捷的腳本,歡迎留言交流!
5.腳本資料下載地址:http://down.51cto.com/data/2459604
6.每個人的服務器地址不一樣,需要手動去python shell修改,shell腳本執行完成後,需要手動去執行python shell 腳本!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章