1.技能需求

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

2.最终效果

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

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

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-core

git config--global user.name "YourName"git config--global user.email YourMailecho "Git installation completed."

这一段代码失败率很高,原因不详,我Linux也是初级,如果失败可以尝试一句一句手打,还不行可能是Linux的yum源有问题,没有git下载地址什么的。

安装好之后运行git --version,像这样:

[root@XXX tmp]# git --version

git version 1.8.2.1

就OK。接下来服务器一个合适的位置git clone 下来代码库。就可以了。

4.如何做的Part2-Shell

基本工作都在这里,包含几部分内容:更新代码,备份代码,部署代码,修改项目config信息,备份数据库,跑数据库脚本。

大概的代码在下面,我删了一些项目相关的,你也可以根据自己的需求删减或添加:

1 #!/bin/bash2 #--------------------------------------------------------------------------------------------------

3 #@auther dreamingodd4 #@20160226

5 #My project name is ocdp.6 #1.git pull7 #2.backup PHP8 #3.deploy PHP.9 #4.change config inPHP 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/YourProjectName

18 if [ -d /home/git ]19 then

20 echo "Git folder exists."

21 cd /home/git/YourProjectName22 git pull23 else

24 mkdir /home/git25 echo "created Git folder"

26 cd /home/git27 git clone https://github.com/YourGitName/YourProjectName

28 fi

29

30 #Deploy YourProjectName31 echo "----2.backing up PHP"

32 cd /var/www/html/

33 if [ -d /var/www/html/YourProjectName ]34 then

35 echo "YourProjectName exists."

36 if [ -d /home/back ]37 then

38 echo "Backup folder exists."

39 else

40 mkdir /home/back41 fi

42 mv /var/www/html/YourProjectName /home/back/YourProjectName_${sys_time}43 mkdir /var/www/html/YourProjectName44 else

45 #some config file creation for the first timedeployment.一些首次部署的config设置46 #...47 echo "YourProjectName config files are created."

48 fi

49 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

5 #container {

6 margin: 0auto;7 border:1px solid grey;8 width:500px;9 padding:15px;10 margin-top:100px;11 }12 h3 {13 text-align:center;14 }15

16

17

18

19

Auto-deploy Tool

20 <?php21 $pwd = $_POST["pwd"];22 if (empty($pwd)) {23 ?>

24

25 Input Password:

26

27

28

29 <?php30 } 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项目自动布署mysql_如何自动化一键部署PHP项目相关推荐

  1. php项目自动布署mysql_PHP工程布署教程

    安装准备### 1.phpStudy 布署软件 2.PHP工程及数据库edu.sql 安装步骤### 1.先安装phpStudy程序 2.将php工程解压至.../WWW/文件夹下 3.在phpStu ...

  2. 自动布署java项目(shell 脚本)

    使用 git 建一个远程仓库 在线上服务器上安装 maven ,因为我们要使用 maven 的打包功能 注意一下, maven 的仓库地址, 和配置一下maven 的镜像地址,使用国内的源 自动布署的 ...

  3. 【Docker】11、IDEA集成Docker插件实现一键部署SpringBoot项目

    日常开发项目的过程中,我们每次需要部署线上的时候,都需要安装一大堆的运行环境,例如:JDK.MySQL.Redis 等,非常花费时间.我们可以使用 Docker 的容器技术,方便快捷地搭建项目启动所需 ...

  4. IDEA配置Docker一键部署SpringBoot项目(企业级做法)

    Docker一键部署SpringBoot项目 前言 一.开启Linux的Docker远程访问 1.1 安装vim工具: 1.2 修改`daemon.json`的配置: 1.3 加入配置: 1.4 重新 ...

  5. Vue-cli 项目打包布署(简单清晰)

    · 第一步:项目打包前更改项目config配置 打开项目的 config>index.js文件修改build对象的assetsPublicPath: 属性值为 './ ' 如下 · 第二步:对v ...

  6. vue 项目打包布署到 github 上刷新后出现空白和 404 页面

    一般有两种情况,一种是页面空白,但没有 404,一种是 404. 第一种,如果出现空白,且没有加载出资源,一般是因为资源的基础路径出现了问题.解决这个问题的思路就是将资源的基础路径设置为正确的路径. ...

  7. VSTO 2005 项目的布署和运行

    服务器端建议: 最好不要发布到带有WSS/SPS的IIS上,因为那是一件相当麻烦的事: 最好使用标准的HTTP端口发布你的应用程序 应用程序发布时要特别注意manifest指向正确的位置,Web.Co ...

  8. 手把手教你配置:Jenkins+Github+Webhook +Nginx自动化打包部署Vue项目

    前面的话 为了前端项目的工程化,减少项目发布环境的部署,实现自动化打包部署. 传统的做法,在服务器初始一个 git 仓库,然后每次代码更新后,手动去拉取,次数多了也就烦了,而自动化打包部署每次只需在项 ...

  9. 使用jenkins自动化打包部署Vue项目。详细教程。

    此教程 jenkins是直接部署到linux服务器上.服务器系统:CentOS 7.3 64位. 流程:jenkins关联码云仓库,点击立即构建,执行shell进行构建,打包,把打包后的dist目录文 ...

最新文章

  1. jquery easy ui 简单字段选择搜索实现
  2. 这次拿下Python全靠它了!一个交互式的学习资源!
  3. ajax基础学习笔记
  4. rtsp服务器搭建_如何从“零”开始搭建直播平台
  5. Dijkstra和动态规划
  6. ASP.NET 抓取网页内容
  7. 禁止访问磁盘的注册表
  8. C语言中连续两个printf,在C中两个连续的printf()调用的奇怪行为
  9. 硬盘测试软件di,磁盘检测(Folder Size Professional)
  10. css flex布局 padding,css三栏布局的三种实现方式(圣杯布局、双飞翼布局、Flex布局)...
  11. android中xmlns的作用
  12. 03.【Axure 10 】win系统软件汉化
  13. 游戏程序开发的工作主要包括哪些方面
  14. 自定义数据类型的指针的含义
  15. 系统架构师论文-图书馆网络应用体系安全设计
  16. 工厂都离不开的“人机料法环”
  17. mk16i android 8,索爱MK16i评测:机身做工优良
  18. 惠普HP LaserJet 5L 打印机出纸口卡纸的维修
  19. 优思学院|德国制造为何被受推崇?
  20. 计算机故障代码ff,电脑开机时主板上只显示FF怎么回事?

热门文章

  1. Linux下无法进入windows的NTFS分区并挂载错误的问题的解决方法
  2. 学会用core dump调试程序错误(转)
  3. linux qemu 源码编译
  4. golang go get 命令行安装库 报错 go: cannot use path@version syntax in GOPATH mode 解决方法
  5. mysql limit 限制查询记录数
  6. linux 内核编译错误 Makefile:416: *** mixed implicit and normal rules: deprecated syntax
  7. linux shell 单行多行注释
  8. sqlite database is locked 问题解决方案
  9. linux 系统运行状况 shell命令 watch 监控进程是否存在
  10. ARM、Intel、MIPS处理器的区别