使用SVN为我的PHP站点设置我的DEV环境

时间:2012-03-15 20:15:47

标签: php svn

我正在创建我的第一个即将上线的网站。这是一个很大的应用程序,我希望最终会在某个地方,但我会在它实际上在网络上工作。我想以正确的方式做到并有效地设置一切。实际上很难从书本甚至网络上获得如何做到这一点的知识。

首先,我一直在做很多关于SVN的研究,虽然我目前是唯一一个在网站上工作的人,但我希望能够最终为项目添加更多人。我知道你必须为你的项目实际所在的SVN创建一个存储库,并且有一些地方可以像Codesion一样免费提供它。我很清楚它是如何工作的。

我想要一个开发者。当前网站的子域名,以便我可以测试和处理我正在开发的所有内容以及SVN将承诺的内容。您的SVN存储库如何通信并将文件上传到该子域?这甚至是你怎么做这个?我将如何管理每个域的所有不同数据库?

当我完成对新推出的更改的几项更改后,我是否只是手动将所有文件上传到实际网站?我对所有这些东西的过程非常非常,并且很难找到它的信息。推出新更新的最佳做法是什么?是否有任何其他不同的机制或应用程序,我需要知道如何保持我的网站增长?

请非常感谢任何正确方向的帮助。

3 个答案:

答案 0 :(得分:2)

这取决于您对Web服务器的控制程度。

大多数(IMO)人员通过FTP / SFTP等方式将文件推送到服务器。许多SVN托管服务都将此作为“部署”服务提供。如果您没有shell访问权限或任何此类性质,则绝对应该使用此选项。

就个人而言,我更喜欢拥有更好的控制级别,让Web服务器完成拉动。使用具有完全SSH访问权限的系统,您可以让服务器执行代码检查:

 svn co http://server/project/trunk --username foo --password bar

如果您想要易用性(与潜在的控制级别混合使用),您还可以创建一个PHP管理类来为您执行此操作。

<?php
echo `svn co http://server/project/trunk --username foo --password bar --non-interactive`;

通常,我构建了一个桥接解决方案。您可以创建提交后挂钩并进行设置,以便SVN服务器通过注释扩展到指定的URL。然后,客户端服务器检查注释并根据注释执行操作(例如,如果没有标记“ AUTODEPLOY ”,它可能会忽略任何操作。)

还有GIT(你应该可以做类似的事情),但我还没有炸毁我当前的进程(和数百个SVN回购)才能到那里去。

答案 1 :(得分:1)

这是一个涵盖所有问题的很多概念。首先 - 我直接在我的网络服务器上托管我的仓库 - 但我可以覆盖在远程服务器上发生的情况。

当您设置SVN回购时,您应该有一个提交后(.tmpl)文件 - 将其重命名为post-commit - 这是每次提交时运行的内容。

内部:

    #!/bin/sh

    # POST-COMMIT HOOK
    #   [1] REPOS-PATH   (the path to this repository)
    #   [2] REV          (the number of the revision just committed)

    REPO="$1"
    REV="$2"

    if ( svnlook log -r $REV $REPO | grep "*DEPLOY-DEV*" )
    then
        rm -rf ~/tmp/path/to/repo
        svn export -r $REV "file://$REPO" ~/tmp/path/to/repo
        rsync -az ~/tmp/path/to/repo/trunk/ ~/path/to/webroot
    fi

    if ( svnlook log -r $REV $REPO | grep "*DEPLOY-LIVE*" )
    then
        rm -rf ~/tmp/path/to/repo
        svn export -r $REV "file://$REPO" ~/tmp/path/to/repo
        rsync -avz -e "ssh -i /path/to/.ssh/rsync" ~/tmp/path/to/repo/trunk/ root@website.com:/path/to/webroot
        ssh -i /path/to/.ssh/rsync root@website.com chown -R apache:apache /path/to/webroot/
    fi

现在通过重要部分 - 在您的提交中包含* DEPLOY-DEV *或* DEPLOY-LIVE *,以将您的网站部署到您指定的路径。

示例的DEPLOY-DEV部分在同一服务器上运行良好 - 您只需要应用正确的路径。

如果服务器位于其他地方,可能需要一些ssh密钥和其他比我更深入的技巧 - 但是如果需要,这应该为您提供设置它所需的方向。

答案 2 :(得分:1)

如果您具有对Web服务器的ssh访问权限,则在服务器上检出两个工作副本(在开发人员和生产文档根目录中)。 这样您就可以轻松部署任何更改。

您可以使用合并更改的稳定分支进行生产。

您在版本控制下的config ini(或类似的)文件中定义的数据库连接。这样你就可以为dev和prod提供不同的值。

如果您没有ssh访问权限,并且您希望“高效”地查找具有ssh访问权限的其他服务器。