本地环境:
开发环境: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即可,中间不用人工干预。