怎麼自動化一鍵部署PHP項目

來源:互聯網
上載者:User
如何自動化一鍵部署PHP項目

1.技能需求

完成自動化一鍵部署PHP需要:PHP(略懂),Shell(略懂),git(略懂)

2.最終效果

輸入密碼,斷行符號,5~20秒後(一般一天一次持續傳遞,部署的代碼量和sql指令碼都不會很大)

執行產生的log檔案、Database Backup和資料庫執行結果在這裡:

3.如何做的Part1-Git

首先要有一個VCS系統,我這裡用的是Git用戶端,本地和伺服器都是。(沒用過Git可以看這篇文章,我就是用它入門的)

這裡只用到Git pull,其他的如svn等,都是一樣的。

Linux伺服器裝Git用戶端,我有一個指令碼:

#Git relatedyum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel#Gityum -y install git-coregit config --global user.name "YourName"git config --global user.email YourMailecho "Git installation completed."


這一段代碼失敗率很高,原因不詳,我Linux也是初級,如果失敗可以嘗試一句一句手打,還不行可能是Linux的yum源有問題,沒有git下載地址什麼的。

安裝好之後運行git --version,像這樣:

[[email protected] tmp]# git --version

git version 1.8.2.1

就OK。接下來伺服器一個合適的位置git clone 下來程式碼程式庫。就可以了。

4.如何做的Part2-Shell

基本工作都在這裡,包含幾部分內容:更新代碼,備份代碼,部署代碼,修改項目config資訊,備份資料庫,跑資料庫指令碼。

大概的代碼在下面,我刪了一些項目相關的,你也可以根據自己的需求刪減或添加:

 1 #!/bin/bash 2 #-------------------------------------------------------------------------------------------------- 3 [email protected] dreamingodd 4 #@20160226 5 #My project name is ocdp. 6 #1.git pull 7 #2.backup PHP 8 #3.deploy PHP. 9 #4.change config in PHP project.10 #5.backup DB...11 #6.deploy SQLs12 #--------------------------------------------------------------------------------------------------13 14 sys_time=`date "+%Y%m%d_%H%M%S"`15 #Refresh git folder16 echo "----1.git processing"17 #Let's pretend your project is in /home/git/YourProjectName18 if [ -d /home/git ]19 then20     echo "Git folder exists."21     cd /home/git/YourProjectName22     git pull23 else24     mkdir /home/git25     echo "created Git folder"26     cd /home/git27     git clone https://github.com/YourGitName/YourProjectName28 fi29 30 #Deploy YourProjectName31 echo "----2.backing up PHP"32 cd /var/www/html/33 if [ -d /var/www/html/YourProjectName ]34 then35     echo "YourProjectName exists."36     if [ -d /home/back ]37     then38         echo "Backup folder exists."39     else40         mkdir /home/back41     fi42     mv /var/www/html/YourProjectName /home/back/YourProjectName_${sys_time}43     mkdir /var/www/html/YourProjectName44 else45     #some config file creation for the first time deployment.一些首次部署的config設定46     #...47     echo "YourProjectName config files are created."48 fi49 echo "----3.deploying PHP."50 cd /var/www/html51 cp -r /home/git/YourProjectName ./YourProjectName52 #config change.你的項目部署需要的config修改53 #...54 55 #MySQL backup56 echo "----5.backing up DB..."57 backupFile=/tmp/DB_backup${sys_time}.sql58 mysqldump -uroot -p${pwd} YourProjectName>${backupFile}59 60 #MySQL script deployment61 echo "----6.deploying SQLs"62 if [ -f /home/git/YourProjectName/sql/deployment/*.sql ]63 then64     for FILE in /home/git/YourProjectName/sql/deployment/*.sql65     do66         sys_time=`date "+%Y%m%d_%H%M%S"`67         mysql -uroot -p${pwd} -e "source $FILE" | tee /tmp/DB_log_${sys_time}.sql68     done69 fi

現在運行這個指令碼測試一下,新手注意許可權問題,大多shell指令碼的失敗都是許可權問題。

其實現在已經算是完成了,log和sql都在/tmp中可供查看,但是我們是要連登陸伺服器這一步都要省略掉的變態,所以我們還要研究一下apache。

5.如何做的Part3-PHP

想要讓php運行shell指令碼需要以下步驟,我也是從跟別人學的,這裡說一下思路,具體看一看這篇文章

你需要一個執行shell的使用者(EXECUTOR),在httpd.conf裡面把apache運行使用者改成EXECUTOR,在sudo裡面給EXECUTOR加上無需密碼的運行許可權。

PHP範例程式碼如下:

 1  2  3 OCDP 4 16 17 18 19 

Auto-deploy Tool

20 php 21 $pwd = $_POST["pwd"];22 if (empty($pwd)) {23 ?>24 29 php 30 } else {31 $command = "sudo /home/git/ocdp/sh/deploy.sh $pwd";32 $logFileName = "/tmp/deploy_".date('Ymd_His').".log";33 $logFile = fopen($logFileName, 'w') or die('File: '.$logFileName.' open failed!');;34 exec($command, $outputArray, $returnVal);35 foreach ($outputArray as $line) {36 echo $line.'
';37 fwrite($logFile, $line.'\n');38 }39 fclose($logFile);40 if ($returnVal) {41 echo '
執行失敗!
Details refer to /etc/httpd/logs/error_log';42 } else {43 echo '
執行完畢!
Logs save in '.$logFileName.'';44 }45 }46 ?>47 48 49


密碼可以在php或者shell中檢查,我這裡輸入的是資料庫密碼。

6.總結

麻煩是麻煩了點,但是完成之後當你每天部署4、5次,加起來只用了2分鐘的時候,你就能感覺到慢慢的成就感了。

github 項目地址:https://github.com/dreamingodd/ocdp

如果以上對你有一點點用處的話,請到github上給我點個star吧,拜謝!

dreamingodd原創文章,如轉載請註明出處。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.