6

我曾在一家 Web 开发公司工作,那里有我们的本地机器、一个登台服务器和一些生产服务器。我们在 perl 中处理 mac 并使用 svn 提交到阶段,并使用 perl 脚本加载到生产服务器。现在我正在开发自己的项目,并希望在使用共享虚拟主机而不是在基于 unix 的环境中工作时找到 Web 开发的良好做法(我可以使用 perl / bash 脚本 / cron 作业等进行所有魔法)

所以我的问题是我的条件,它们是:

  • 我正在使用来自外部提供商的单一标准共享网络托管(具有 ssh 访问权限)
  • 我正在与至少另一个人合作,并打算使用 SVN 进行源代码控制
  • 我正在 Windows 下开发 php/mysql(但使用 linux 是可能的)

对于代码/数据的测试、部署和迁移,您建议使用什么设置?我在本地机器上安装了 xampp 服务器,但不确定在 windows 下使用哪些方法来迁移数据等。

4

3 回答 3

11

我有一些关于共享主机的 PHP 个人项目;这里有一些想法,来自我正在做的其中一个(最活跃的一个,并且需要一些至少半自动的同步方式)

关于我的设置的几句话:

  • 前段时间,我在 SVN 上拥有一切;现在,我正在使用bazaar;但想法完全一样(除了集市,我有当地历史等等)
  • 我有对生产服务器的 ssh 访问权限,就像你一样
  • 我专门在 Linux 上工作(所以,我在 Windows 上做的事情可能不那么容易)

现在,我如何工作:

  • 生产服务器上的所有内容(源代码,图像,...)都提交给 SVN/bazarr/whatever
  • 我在本地工作,使用 Apache/PHP/MySQL (我使用偶尔在本地导入的生产数据库的转储)
  • 我是唯一一个从事该项目的人;对于一个由 2/3 开发人员组成的小团队来说可能还可以,但不会更多。

我之前做了什么:

  • 我有一些 PHP 脚本检查 SVN 服务器是否在“最新版本推送到生产”和 HEAD 之间进行了修改
    • 我猜这个自制的 PHP 脚本看起来像你目前正在使用的 Perl 脚本^^
  • 该脚本构建了一个目录/文件列表以上传到生产环境
  • 并通过 FTP 访问上传
  • 这不是很令人满意(我想我的脚本中有错误;我从来没有花时间纠正这些错误);并强迫我记住我上次推送到生产的时间的修订号(好吧,它是由脚本自动存储在一个文件中的,所以并不难^^)

我现在应该做什么 :

  • 切换到 bazaar 时,我不想重写那个脚本,反正效果不太好
  • 我完全放弃了剧本
  • 因为我可以通过 ssh 访问生产服务器,所以我使用rsync从我的开发机器同步到生产服务器,当我在本地拥有的东西被认为是稳定/生产就绪时。

关于这种做事方式的几点说明:

  • 我没有登台服务器:我的本地设置与生产服务器足够接近
  • 对于只有一两个开发人员的简单项目,没有临时服务器是可以的
  • 如果我有一个登台服务器,我可能会选择:
    • 当你想登台时,对其进行“svn更新”
    • 当它正常时,从登台服务器启动 rsync 命令(它将在最新的“稳定”版本中进行,所以可以推送到生产环境)
  • 对于一个更大的项目,有更多的开发人员,我可能不会采用那种设置;但我觉得对于一个(不太大的)个人项目来说还可以。


这里唯一的“特别”,可能是“面向linux的”是使用 rsync ;快速搜索似乎表明可以在 Windows 上安装一个 rsync 可执行文件:http ://www.itefix.no/i2/node/10650

不过,我从未尝试过。


作为旁注,这是我的 rsync 命令的样子:

rsync --checksum \
    --ignore-times \
    --human-readable \
    --progress \
    --itemize-changes \
    --archive \
    --recursive \
    --update \
    --verbose \
    --executability \
    --delay-updates \
    --compress --skip-compress=gz/zip/z/rpm/deb/iso/bz2/t[gb]z/7z/mp[34]/mov/avi/ogg/jpg/jpeg/png/gif \
    --exclude-from=/SOME_LOCAL_PATH/ignore-rsync.txt \
    /LOCAL_PATH/ \
    USER@HOST:/REMOTE_PATH/

我正在使用私钥/公钥机制,所以 rsync 不要求输入密码,顺便说一句。

当然,我通常首先在“试运行”模式下使用相同的命令,以查看将要同步的内容,使用选项“ --dry-run

并且ignore-rsync.txt包含我不想被推送到生产的文件列表:

.svn
cache/cbfeed/*
cache/cbtpl/*
cache/dcstaticcache/*
cache/delicious.cache.html
cache/versions/*

在这里,我只是阻止将缓存目录推送到生产环境——不发送这些目录似乎是合乎逻辑的,因为生产数据与开发数据不同。

(我只是注意到.svn这个文件中仍然有“”...我可以删除它,因为我不再为那个项目使用 SVN ^^)


希望这个对你有帮助...

于 2009-08-15T12:38:46.983 回答
1

关于 SVN,我建议你使用像 beanstalk 这样的专用 SVN 主机,或者使用同一台服务器机器来运行 SVN 服务器,这样两个开发人员都可以解决它。

在后一种情况下,您的部署脚本只需将这些位移动到临时 Web 文件夹(可通过 beta.mysite.com 访问),然后另一个部署脚本可以将其移动到实时 Web 目录。直接部署到现场显然不是一个好主意。

如果您决定使用专用主机或想要从您的机器部署到服务器,请使用 rsync。这也是我目前的设置。RSync 进行差分同步(通过 SSH),因此速度很快,并且专为这类东西而构建。

随着您的成长,您可以开始使用带有单元测试之类的构建工具。这仅留下数据同步问题。

我只从远程 -> 本地同步数据,并使用 DOS 批处理文件通过 SSH 使用mysqldump执行此操作。Cygwin 对于 Windows 机器很有用,但您可以跳过它。SQL 导入脚本还运行单行查询来更新一些单元格,例如主机名和 Web 根目录以进行本地部署。

完成此设置后,您可以专注于编写代码和远程部署或本地同步和部署成为一键式过程。

于 2009-08-15T13:11:53.387 回答
1

一种选择是为任务使用专用框架。Capistrano非常适合脚本语言,例如 php。它基于 Ruby,但如果您进行搜索,您应该能够找到有关如何使用它来部署 php 应用程序的说明。

于 2009-08-15T14:08:30.110 回答