PHP MySQL和正确的开发/暂存,然后发送到生产服务器

4
我刚刚将生产网站上线并运行。我还有很多工作要做,现在意识到在将更改实时推送到生产网站(带有用户)之前需要开发服务器 - 显然...。
这个主题(以及Stack上的很多其他主题)描述了我: 设置暂存/开发服务器的最佳/更好/最优方式 无论如何...有时阅读这些主题会非常令人困惑,因为它们涉及到许多术语和我较少的CentOS / Apache知识。
我的目标是:
1.根据需要对文件进行一些更改。 2.在同一服务器上测试更改以确保设置相同。 3.如果一切正常,现在可以在某个地方保存此版本,也许仅在本地足够(Bazaar似乎是一个可能性?) 4.最后,通过SSH或SFTP或其他方式替换所有更改的文件...
我的担忧是:
1.在用户使用系统时上传更改。 2.如何仅上传已更改的文件。
我希望有人能够链接一个关于我所思考的问题的完美指南(希望不要有任何遗漏)-或者提供一些建议等等... 我正在尝试不同的SVN和程序来管理它们,但是却陷入了困境...
我是唯一的开发人员,只想要一个可重复、可信赖的解决方案,可以让我在设置(和保持设置)时不会过于痛苦。
非常感谢。
4个回答

3
如果您有在生产服务器上创建一个暂存子域的能力,这是我(也是我所)处理它的方法:
在开发机上进行开发,将代码存储在版本控制系统中。我使用Subversion,但您可能会找到其他喜欢的工具。做出更改后,您就可以提交代码。
在生产服务器上,在与生产VirtualHost完全相同但独立的Apache VirtualHost中创建一个子域。从版本控制系统中检出代码到暂存子域区域。做出更改后,您可以从版本控制系统运行更新,仅下载更改的文件。暂存和生产共享相同的数据集,或者您可能为每个数据集都有一个单独的数据库。
使用子域而不仅仅是不同的目录的原因是它使您可以同时使用暂存和生产的相同DocumentRoot。如果您使用诸如“staging.example.com”之类的内容,则很容易确定您的位置。
当您确信一切都按预期运行时,可以在生产端运行版本控制系统更新,以使代码保持最新状态。
重要的是确保您已经指示Apache禁止访问版本控制系统元数据目录(.svn、.git等)。
补充说明:
要禁止访问.svn目录,请使用重写规则,例如:
RewriteEngine on
RewriteRule .*\.svn/.* - [F]

这将对他们发出403。您也可以将他们重定向到主页,使其不那么明显地存在。

你具体使用哪个 SVN,以及哪个桌面应用程序来协助?另外,我该如何指示 Apache 禁止访问那些目录? - Shackrock
1
@Shackrock 我使用普通的命令行Subversion (svn) 而不是任何GUI,因为我在Linux上开发。我在Windows上使用过TortoiseSVN,它很好用。有关Apache信息,请参见上文。 - Michael Berkowski
好的,我刚刚重新阅读了你的帖子...在apache中有一些创建具有相同站点路径的暂存站点的能力?你能告诉我从哪里开始,也许是一些指南吗?我不明白我的/home/user/public_html怎么可能是一样的...我打算只是将子域指向另一个文件夹,但如果我能弄清楚你的方法听起来更好...谢谢! - Shackrock
1
@Shackrock,我不是指在相同路径下的暂存区,而是指将虚拟主机指向另一个目录,这样暂存和生产都可以在/下的DocumentRoot。你说得对,只需将子域指向另一个文件夹即可。 - Michael Berkowski
明白了...好的,我以为我可以使用CNAME将子域名指向另一个文件夹(它将充当其根目录)-但我无法弄清楚...能给我提示吗?哈哈。 - Shackrock

1
就第一项担忧而言,请记住,即使是 StackOverflow 在人们使用它时也会定期进行维护。只要为您提供一个良好的机制来切换网站到维护模式(然后退出),您就不用担心了。

好的,这是个好问题... 那么,有没有工具或指南可以教我们如何正确地关闭服务器进行更新,然后再重新启动呢? - Shackrock
1
由于您正在使用Apache,只需在您的.htaccess文件中创建一个mod_rewrite规则,将所有请求重定向到维护页面。RewriteRule ^ maintenance.html [L]。切换网站进入和退出维护模式的机制是更改.htaccess文件中的一个字符 - 将#注释掉该行或取消注释。 - Dan Grossman
或者,如果您有一个带有管理面板的数据库,可以拥有一个控制维护模式的数据库表,以便您可以按下按钮来控制它。 - Scott C Wilson

1

感谢大家提供的提示、建议等等...

我终于找到了完美符合我的需求的解决方案,SpringLoops... http://www.springloops.com/v2/

它可以管理我的 SVN(我使用 Tortoise SVN),并且能够将更改部署到我的两个站点:测试和生产环境。

我非常推荐它,目前它运作良好。

谢谢!


0

你需要一个版本控制系统,比如Subversion、Git或Mercurial。

当你更改文件时,你需要将这些更改提交到代码库。这样可以跟踪所有你所做的更改,并让你撤销它们,如果你发现自己做了一些愚蠢的事情。它还可以让你恢复你意外删除或丢失的文件。

此外,它使得更新部署变得非常简单,只需在生产服务器上键入“git update”或“svn update”即可。只有更改的文件会被传输并放置在相应位置。

无论问题被问了多少次,你都需要版本控制。


明白了。我确实喜欢版本控制,从我尝试过的来看。但我不完全理解如何将我在本地开发的控件与服务器测试环境链接起来(那个命令“svn update”不能只是“工作”,所以我正在寻找一个正确设置的指南)-然后一旦测试完成,将其推送到生产站点,这是实时的... - Shackrock
要创建工作目录,只需在计算机上的某个位置创建一个存储库的副本,并使用子版本控制命令“svn checkout [repo url]”。在您的家用电脑、测试电脑和生产电脑上运行该命令。所有这些电脑上都会有一个工作目录。您可以进行更改并键入“svn commit”以从任何这些目录保存它们。您可以运行“svn update”以从任何这些目录获取所有文件的最新版本。它“只是有效”。 - Dan Grossman
啊,听起来很酷啊...所以,我还是要问一遍 - 你知道有没有关于在Windows本地机器和CentOS服务器(测试和生产环境)上进行“首次设置”的指南吗? - Shackrock
如果您每个月有一些零花钱,最好让其他人创建和托管存储库来避免很多麻烦。Springloops、CVSDude和Github是提供此服务的公司的例子。在Windows中,如果想要GUI界面,请使用TortoiseSVN。它可以集成到Windows Explorer中,因此您只需在任何目录上右键单击即可出现“SVN checkout”和“SVN Update”等按钮。也有好书介绍这方面的知识。 - Dan Grossman
很好。SNV和GIT,你有什么想法? - Shackrock
我个人在独自工作时更喜欢使用Subversion,在与他人合作时则更倾向于使用Git。 - Dan Grossman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接