如何在不覆盖用户文件的情况下更新生产服务器?
How to update a production server without overwriting user files?
我是网络开发新手,找不到这个简单问题的答案。 我已经无计可施了,如有任何帮助,我们将不胜感激!
我需要定期更新我的实时网站上的文件,但我觉得我遵循的工作流程非常低效:
- 我手动跟踪 directory/file 是否在我的本地主机上相对于生产服务器进行了修改
- 对于已修改的directories/files,我使用FTP
将服务器文件替换为更新后的文件
- 某些目录中有用户上传的文件(例如照片),我必须格外小心以确保我不会用本地主机上使用的测试目录覆盖这些 "live" 目录。 (这感觉太不对劲了!)
显然,我在这里缺少最佳实践 - 但尽管在网上搜索了几天,我还是找不到答案:
- 我考虑过使用 Git/SVN - 但它对我来说似乎没有意义,因为我是一个孤独的开发人员并且没有多个人在处理同一个文件
- Filezilla 有这个有用的功能,可以帮助标记已修改 directories/file - 但这似乎不是一个理想的解决方案
我错过了什么?
PS - 我在共享主机服务器上使用 PHP、MySQL、Apache 堆栈。
我建议你还是选择 Git / Tortoise SVN
最好的部分是基于 feature
的分支。当每个分支都是一个新功能时,您总是可以在那里进行试验而不会影响已经在工作的功能。一旦新功能正常运行并合并到您的主分支,您就可以删除功能分支
除了分支和分叉,GIT 和 Tortoise SVN 中还有很多功能。它显示了用于添加的代码(+ 和绿色)和用于删除的代码(- 和红色)之间的比较变化。我发现在 RWD
中处理 CSS 时非常方便
合并也变得更容易和无摩擦。解决冲突也是一门学问
即使对于单独的开发人员来说,它也是值得的。单独的分支不仅适用于多个用户。您可以创建一个分支进行试验。在一个分支中,即使您领先于许多步骤,您也可以随时切换回您分支的位置。
供参考
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-preface-features.html
听起来您需要自动化部署过程。这被称为 continuous-integration in the web world. Personally I use jenkins, but there are many other options such as travis-ci。就像@pala_ 的评论一样,我绝对建议使用版本控制软件,如果您最终使用持续集成服务器,这可能是必要的。
如果您想花时间自动化您的流程,您需要将您的来源与用户生成的内容分开,并将它们置于版本控制中。通常我喜欢将用户生成的内容保存在与源所在的目录完全不同的目录中,这样我可以在服务器更新文件时替换整个目录。
如果您使用像 GitHub 或 BitBucket 这样的服务来托管您的代码,那么您可以选择使用 webhooks,当您推送更新的代码时,它可以在您的持续集成服务器上触发操作。
Github's documentation on webhooks
在持续集成服务器上,您可以使用 rsync 之类的工具来更新网络服务器中的文件。该命令看起来像这样:
rsync -avz -e ssh myproject/ user@example.com:/path/to/example.com
我是网络开发新手,找不到这个简单问题的答案。 我已经无计可施了,如有任何帮助,我们将不胜感激!
我需要定期更新我的实时网站上的文件,但我觉得我遵循的工作流程非常低效:
- 我手动跟踪 directory/file 是否在我的本地主机上相对于生产服务器进行了修改
- 对于已修改的directories/files,我使用FTP 将服务器文件替换为更新后的文件
- 某些目录中有用户上传的文件(例如照片),我必须格外小心以确保我不会用本地主机上使用的测试目录覆盖这些 "live" 目录。 (这感觉太不对劲了!)
显然,我在这里缺少最佳实践 - 但尽管在网上搜索了几天,我还是找不到答案:
- 我考虑过使用 Git/SVN - 但它对我来说似乎没有意义,因为我是一个孤独的开发人员并且没有多个人在处理同一个文件
- Filezilla 有这个有用的功能,可以帮助标记已修改 directories/file - 但这似乎不是一个理想的解决方案
我错过了什么?
PS - 我在共享主机服务器上使用 PHP、MySQL、Apache 堆栈。
我建议你还是选择 Git / Tortoise SVN
最好的部分是基于 feature
的分支。当每个分支都是一个新功能时,您总是可以在那里进行试验而不会影响已经在工作的功能。一旦新功能正常运行并合并到您的主分支,您就可以删除功能分支
除了分支和分叉,GIT 和 Tortoise SVN 中还有很多功能。它显示了用于添加的代码(+ 和绿色)和用于删除的代码(- 和红色)之间的比较变化。我发现在 RWD
中处理 CSS 时非常方便合并也变得更容易和无摩擦。解决冲突也是一门学问
即使对于单独的开发人员来说,它也是值得的。单独的分支不仅适用于多个用户。您可以创建一个分支进行试验。在一个分支中,即使您领先于许多步骤,您也可以随时切换回您分支的位置。
供参考
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-preface-features.html
听起来您需要自动化部署过程。这被称为 continuous-integration in the web world. Personally I use jenkins, but there are many other options such as travis-ci。就像@pala_ 的评论一样,我绝对建议使用版本控制软件,如果您最终使用持续集成服务器,这可能是必要的。
如果您想花时间自动化您的流程,您需要将您的来源与用户生成的内容分开,并将它们置于版本控制中。通常我喜欢将用户生成的内容保存在与源所在的目录完全不同的目录中,这样我可以在服务器更新文件时替换整个目录。
如果您使用像 GitHub 或 BitBucket 这样的服务来托管您的代码,那么您可以选择使用 webhooks,当您推送更新的代码时,它可以在您的持续集成服务器上触发操作。
Github's documentation on webhooks
在持续集成服务器上,您可以使用 rsync 之类的工具来更新网络服务器中的文件。该命令看起来像这样:
rsync -avz -e ssh myproject/ user@example.com:/path/to/example.com