本地环境:
开发环境:Windows
测试环境:CentOS in Virtualbox
虚拟机和宿主机之间有网络桥连接,可以互相访问网络。
服务器生产环境: Amazon Linux AMI (从CentOS修改而来)。
本地环境和生产环境颇有不同,数据库用的虽然都是MySQL,但是用户名密码什么的不一样。缓存,本地用的
是Redis,服务器上用的是Memcache。我想要的效果是:本地的程序传到服务器上后,不用修改任何一处,程序
都能正常运行。于是我做了多个配置文件,程序运行时自动判断运行环境并加载不同的配置,从而生成不同的
缓存实例等。
程序文件在本地开发环境与服务器生产环境之间同步是个问题,FTP肯定不能用,太弱了,SVN我又不太喜欢,最终
选了Git。本地的文件修改后,git add . ,git commit,再 git push上去,服务器上写一个shell脚本,该
脚本的工作:
1.清空原有程序及git配置
2.重新初始化git,并 git remote add 。
3.将master从仓库中直接pull下来。Git仓库服务器我用的是Bitbucket。
4.配置文件权限。
这样一来就极大的简化了同步流程。
安全起见,git仓库设为私有,git pull时需要密码,脚本每次执行都要输入密码,有点麻烦,后经改进,实现了自
动化交互,即脚本自动输入密码,用的工具是expect。
expect这个工具Linux上默认没有安装,需要自己安装,由于我用的是CentOS,所以直接用yum安装它:
1 | yum install expect |
附上服务器的自动化git pull的脚本,eims.sh :
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/bin/bash cd /var/www/html/ rm -rf reponame mkdir reponame cd reponame git init git remote add reponame https: //username @bitbucket.org /username/reponame .git expect /root/autopwd .sh rm -rf .git rm -rf .settings rm -f .project rm -f .buildpath chmod -R 777 /var/www/html/reponame |
这脚本中expect执行了一个自动输入密码的脚本, autopwd.sh:
1 2 3 4 5 6 | #!/usr/bin/expect spawn git pull reponame master expect "Password for 'https://username@bitbucket.org':" send "yourpassword\r" expect eof exit |
git pull的时候直接执行 eims.sh即可,中间不用人工干预。