欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

怎么自动化一键部署PHP项目

程序员文章站 2022-05-12 18:49:07
...
如何自动化一键部署PHP项目

1.技能需求

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

2.最终效果

怎么自动化一键部署PHP项目

输入密码,回车,5~20秒后(一般一天一次持续交付,部署的代码量和sql脚本都不会很大)

怎么自动化一键部署PHP项目

执行产生的log文件、数据库备份和数据库执行结果在这里:

怎么自动化一键部署PHP项目

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
25 Input Password:26 $_POST['pwd'];?>">27 28
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原创文章,如转载请注明出处。

怎么自动化一键部署PHP项目

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • 怎么自动化一键部署PHP项目
  • 专题推荐

    作者信息
    怎么自动化一键部署PHP项目

    认证0级讲师

    推荐视频教程
  • 怎么自动化一键部署PHP项目javascript初级视频教程
  • 怎么自动化一键部署PHP项目jquery 基础视频教程
  • 视频教程分类