php项目自动布署mysql_如何自动化一键部署PHP项目
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项目相关推荐
- php项目自动布署mysql_PHP工程布署教程
安装准备### 1.phpStudy 布署软件 2.PHP工程及数据库edu.sql 安装步骤### 1.先安装phpStudy程序 2.将php工程解压至.../WWW/文件夹下 3.在phpStu ...
- 自动布署java项目(shell 脚本)
使用 git 建一个远程仓库 在线上服务器上安装 maven ,因为我们要使用 maven 的打包功能 注意一下, maven 的仓库地址, 和配置一下maven 的镜像地址,使用国内的源 自动布署的 ...
- 【Docker】11、IDEA集成Docker插件实现一键部署SpringBoot项目
日常开发项目的过程中,我们每次需要部署线上的时候,都需要安装一大堆的运行环境,例如:JDK.MySQL.Redis 等,非常花费时间.我们可以使用 Docker 的容器技术,方便快捷地搭建项目启动所需 ...
- IDEA配置Docker一键部署SpringBoot项目(企业级做法)
Docker一键部署SpringBoot项目 前言 一.开启Linux的Docker远程访问 1.1 安装vim工具: 1.2 修改`daemon.json`的配置: 1.3 加入配置: 1.4 重新 ...
- Vue-cli 项目打包布署(简单清晰)
· 第一步:项目打包前更改项目config配置 打开项目的 config>index.js文件修改build对象的assetsPublicPath: 属性值为 './ ' 如下 · 第二步:对v ...
- vue 项目打包布署到 github 上刷新后出现空白和 404 页面
一般有两种情况,一种是页面空白,但没有 404,一种是 404. 第一种,如果出现空白,且没有加载出资源,一般是因为资源的基础路径出现了问题.解决这个问题的思路就是将资源的基础路径设置为正确的路径. ...
- VSTO 2005 项目的布署和运行
服务器端建议: 最好不要发布到带有WSS/SPS的IIS上,因为那是一件相当麻烦的事: 最好使用标准的HTTP端口发布你的应用程序 应用程序发布时要特别注意manifest指向正确的位置,Web.Co ...
- 手把手教你配置:Jenkins+Github+Webhook +Nginx自动化打包部署Vue项目
前面的话 为了前端项目的工程化,减少项目发布环境的部署,实现自动化打包部署. 传统的做法,在服务器初始一个 git 仓库,然后每次代码更新后,手动去拉取,次数多了也就烦了,而自动化打包部署每次只需在项 ...
- 使用jenkins自动化打包部署Vue项目。详细教程。
此教程 jenkins是直接部署到linux服务器上.服务器系统:CentOS 7.3 64位. 流程:jenkins关联码云仓库,点击立即构建,执行shell进行构建,打包,把打包后的dist目录文 ...
最新文章
- jquery easy ui 简单字段选择搜索实现
- 这次拿下Python全靠它了!一个交互式的学习资源!
- ajax基础学习笔记
- rtsp服务器搭建_如何从“零”开始搭建直播平台
- Dijkstra和动态规划
- ASP.NET 抓取网页内容
- 禁止访问磁盘的注册表
- C语言中连续两个printf,在C中两个连续的printf()调用的奇怪行为
- 硬盘测试软件di,磁盘检测(Folder Size Professional)
- css flex布局 padding,css三栏布局的三种实现方式(圣杯布局、双飞翼布局、Flex布局)...
- android中xmlns的作用
- 03.【Axure 10 】win系统软件汉化
- 游戏程序开发的工作主要包括哪些方面
- 自定义数据类型的指针的含义
- 系统架构师论文-图书馆网络应用体系安全设计
- 工厂都离不开的“人机料法环”
- mk16i android 8,索爱MK16i评测:机身做工优良
- 惠普HP LaserJet 5L 打印机出纸口卡纸的维修
- 优思学院|德国制造为何被受推崇?
- 计算机故障代码ff,电脑开机时主板上只显示FF怎么回事?
热门文章
- Linux下无法进入windows的NTFS分区并挂载错误的问题的解决方法
- 学会用core dump调试程序错误(转)
- linux qemu 源码编译
- golang go get 命令行安装库 报错 go: cannot use path@version syntax in GOPATH mode 解决方法
- mysql limit 限制查询记录数
- linux 内核编译错误 Makefile:416: *** mixed implicit and normal rules: deprecated syntax
- linux shell 单行多行注释
- sqlite database is locked 问题解决方案
- linux 系统运行状况 shell命令 watch 监控进程是否存在
- ARM、Intel、MIPS处理器的区别