部署是指将网站从本地环境迁移到实时服务器的过程。看似简单的事情实际上可能非常复杂。实现部署的方式有很多。它们范围从用户友好的软件和服务,到更复杂的命令行工具,再到具有许多移动部件的完整系统。
我不是这方面所有内容的专家,但我在日常工作中也设置了一些不同的部署系统,并使用过许多不同的系统。我认为我们可以尝试在这里尽可能多地收集和分解它们。
直接操作
如果您直接在服务器上编辑文件,那么您基本上根本没有部署步骤。您可以使用支持 FTP 的编辑器(如 Coda 或 Adobe Dreamweaver)来实现这一点。很多人这样做,因此像 Media Temple 这样受欢迎的主机甚至有关于 设置 的文档。
您甚至可以使用类似 WebDAV 的工具将 远程服务器挂载为本地硬盘,并使用您喜欢的任何本地编辑器。Transmit 具有一个 “磁盘”功能,使这变得非常容易。
这里吸引力很强,因为您可以快速获得实时结果。但是,通常不建议这样做。因为
- 这很危险,人们会立即看到错误
- 没有测试
- 没有更改记录 - 什么/谁/何时
- 您无法撤消更改
- 在团队中,您可以覆盖其他人的工作
- 如果没有额外的设置,您无法处理大型、长期项目
手动使用 FTP
一种非常原始的部署技术是,简单地在本地工作,并在准备好后,使用 FTP 软件(如 Transmit)将文件移动到实时服务器。
虽然这种方法有效,但可能会很繁琐。我修改了哪些文件?哦,算了,我直接移动所有文件。天啊,这太慢了。
这仍然存在与上面许多相同的缺点。您仍然有覆盖他人工作的风险,您仍然无法轻松地撤消更改,等等。
以这种方式使用 FTP 并不自动意味着您没有使用版本控制,但可能性很大。如果您使用了版本控制,您将完全独立地管理它,并且会感觉格外繁琐。而且,仍然没有任何东西可以防止您犯错(例如,在从存储库拉取之前将文件发送到 FTP)。如果您正在使用版本控制,您可能已经在寻找一种将其与部署结合起来的方法。
版本控制部分
版本控制非常重要,并且将在我们讨论的每个其他部署事物中发挥作用。但是,版本控制本身并不会自动为您处理部署。在不进行过多详细说明的情况下,项目保存在存储库(或“存储库”)中。它们可以有多个贡献者。文件保持同步。贡献者的工作是确保他们拥有最新的代码,以及他们的新代码是否合适。所有更改都有记录。
Git 可能是最常见的版本控制工具,但请注意 Subversion(“SVN”)和 Mercurial 类似,并且发挥相同的作用。
在服务器上安装版本控制,并从此处拉取
版本控制软件就是这样,软件。您购买的服务器上可能没有标准配置(即使是那些通常自动包含 PHP 等内容的“完全加载”服务器)。但是,您也可能能够在这些服务器上安装它。
然后,就像您可以从本地机器执行git push和git pull一样,您也可以 SSH 到服务器并从那里执行git pull,这会将最新文件从该存储库下载到实时服务器上。
这就是简单的部署。
Jeremy Harris 有一篇文章对此进行了扩展,向您展示了如何从本地机器推送并将.git 目录保留在 Web 根目录之外。Joe Maller 有一篇文章介绍了在服务器上使用“Hub”区域。
Cron 作业
Cron 作业是服务器上的定时/自动任务。每 2 分钟运行一次 X。我见过有人运行一个 Cron 作业,每隔几分钟执行一次 git pull,这就是他们的部署策略。
接收后钩子/Webhook
GitHub 有一项名为 接收后钩子 的功能,当存储库已推送到其中时,它会将 POST 请求发送到您选择的 URL。您可以使用该 POST 请求运行一个脚本,该脚本将运行部署所需的命令,例如git pull。
NetTuts 有一篇文章 “完美的工作流程” 解释了如何设置此功能。他们使用了运行 SSH 命令的 PHP 文件,但根据我的经验,许多主机都将其锁定,甚至没有允许的选项。
Bitbucket(另一个版本控制主机)也具有 POST 服务管理。
第三方部署 Web 服务
有一些 Web 应用程序已将其业务定位于帮助部署。






Atlassian 制作 BitBucket(版本控制)和 Jira(问题管理),因此他们制作 Bamboo(执行部署并某种程度上将这些产品联系在一起)也就不足为奇了。
命令行界面 (CLI) 工具
一种花哨的说法是:通过在终端中键入命令来工作的工具。它们通常具有配置,您可以通过命令本身传递配置,使用配置文件,或者两者兼而有之。
Capistrano
Capistrano 并非严格意义上的部署工具。它用于在服务器上执行命令。尽管部署是它的一个非常常见的用途,并且它也起源于此。
Capistrano 最初旨在简化和自动化 Web 应用到分布式环境的部署,并且最初捆绑了一套用于部署 Rails 应用的任务。
它使用 Ruby 编写,但可以用于任何用途。
随着网站变得越来越复杂,仅仅从中央仓库拉取代码可能无法满足需求。例如,可能涉及多个服务器。或者拉取这些文件可能需要一些时间,而这段中间时间可能会破坏你的应用。使用 Capistrano,你可以将其配置为准备服务器,将新文件拉取到新位置,更新指向最新版本的 符号链接,清理权限,重启服务,并在多个服务器上执行所有这些操作。 此图 演示了这一点。
它曾经有一个 Web UI,但看起来有点过时了。
RailsCasts 有 一系列屏幕录制 来帮助你学习 Capistrano。
rsync
rsync 专门用于文件传输。
rsync 是一个用于 Unix 系统的文件传输程序。rsync 使用“rsync 算法”,该算法提供了一种非常快速的文件同步方法。它通过仅发送文件中的差异来实现这一点,而无需事先在链接的两端都存在这两组文件。
rsync 是一个命令,因此它通常由任务运行器(如 Make)运行,或者更常见的是 Rake,因为它也是用 Ruby 编写的。
git-ftp
也许你已经察觉到一个反复出现的主题了。
我没有传输整个项目,而是想,为什么不只传输自上次以来更改的文件呢?Git 可以告诉我这些文件。
git-ftp 将文件推送到你的服务器,就像任何 FTP 客户端一样,但它确切地知道要发送哪些文件,因为它使用了 Git,而 Git 知道这些信息。
git ftp push -u <user> -p - ftp://host.example.com/public_html
Dandelion
Dandelion 类似于 git-ftp,但它从配置文件中工作,因此你可以更具体地指定你希望发生的事情并简化命令(dandelion deploy)。它还可以推送到 AWS。
Ansible
Ansible 配置操作系统、部署应用程序、运行并行命令并编排 IT 流程(如零停机滚动更新)。它默认使用 SSH,因此无需安装任何特殊软件即可开始管理远程机器。模块可以用任何语言编写。
grunt-ftp-deploy
就构建工具/任务运行器而言,Grunt 正在努力成为王者。它使用 Node.js 编写,Node.js 有自己的包管理器(NPM),类似于 Ruby Gems。
其中一个页面是 grunt-ftp-deploy,它通过 FTP 将文件从你的本地机器移动到服务器。你可以配置任务,然后以你喜欢的任何方式运行 Grunt 任务。这是一个相当“愚蠢”的任务,因为它甚至没有尝试只移动已更改的内容或引用版本控制。它只是移动所有内容。
Static Sites
“静态”网站是指不需要任何服务、数据库或其他任何东西的网站。只需要一个 Web 服务器和一堆资源文件(例如 .html、.css、.js、图片)。
GitHub Pages
GitHub 提供了一项名为 GitHub Pages 的服务,该服务可以很乐意为你提供静态网站服务。你甚至可以 使用自己的域名 与它们一起使用。你只需创建一个名为 gh-pages 的仓库的分支,它就会自动生效。这样,部署就简单地变成了推送到该仓库的该分支。
有一个 grunt 任务 专门用于此。
Jekyll
仅仅因为一个网站是静态的并不意味着它很糟糕/简单/架构很差。有一些静态网站的构建工具允许你将模板和内容组合在一起并输出一个网站。 Jekyll 就是其中之一,它专门为与 GitHub Pages 协同工作而构建。
Octopress
Octopress 建立在 Jekyll 之上,提供了配置、模板等,以便你能够更快地上手。
Jekyll 和 Octopress 本身并不一定帮助部署,它们只是与 GitHub Pages 关系密切,而 GitHub Pages 是一种部署形式。
Amazon S3
亚马逊提供 Web 服务,你实际上可以在其中 运行服务器,但它也提供 S3,它只是一个简单的文件存储服务。你实际上可以在 S3 上 托管静态网站,甚至可以使用自己的域名。
甚至有一组名为 s3cmd 的命令行工具,你可以对其进行配置并运行命令以部署静态网站(即 s3cmd sync)。
Platform as a Service (PaaS)
希望现在已经很清楚了,仅仅部署本身就可以很复杂。整个 Web 平台堆栈可能非常复杂。难怪一些公司已经开始提供服务来简化它。这些公司提供托管、服务器管理、数据库以及所有这些东西。简单的部署通常是软件包的一部分。

git push heroku master 一样简单。




企业级平台即服务(PaaS)有很多。看看SalesForce、RedHat和IBM,这只是冰山一角。
另一方面,Mixture.io可以直接从其桌面开发工具进行托管/部署。
持续集成服务器
来自维基百科
持续集成(CI)是在软件工程中,每天多次将所有开发人员的工作副本合并到共享主干的做法。
其理念是,单个开发人员不会长时间检出分支,以至于它与主仓库有很大差异,并且合并两者变得困难。
将此概念扩展到服务器意味着在实际服务器上运行该代码以确保一切正常。运行构建 - 它是否通过?运行您的测试 - 它们是否通过?经常这样做意味着尽早发现问题,并且永远不会出现巨大的深层问题。
这与部署相关,因为人们使用它们在所有步骤都通过时自动部署代码。例如:例如:
- 提交/推送新代码到仓库
- CI工具运行您配置的所有构建/测试
- 如果通过,则进行部署
- 如果未通过,则会通知您,并且不会进行部署
我实际上几乎不理解所有这些,因此如果您有任何错误,请在评论中更正我。有很多不同的工具,因此我不会尝试解释我做得很不好的事情,我只会列出它们
- Travis CI(自然适用于GitHub)
- Jenkins CI(可以与GitHub一起使用)
- CircleCI
- Codeship
CMS 特定
如今,CMS 拥有如此庞大的社区,因此出现特定于它们而非仅特定于其父语言的工具也就不足为奇了。
WordPress
- WP-Stack 是 WordPress 网站的样板,假设使用 Git 和 Capistrano。
- WordPress-Starter 类似,但包含 S3 备份
- 我们没有过多讨论数据库部署。我不确定关于它还有什么可说的。我一直对数据库迁移的笨拙感到惊讶。WP Migrate DB Pro 是一个特定于 WordPress 的好工具,用于保持它们同步。
Drupal
Drupal 有一个名为 Drush 的命令行界面,它有一个名为 Drush Deploy 的部署脚本。
就这么多了吗?
不,可能还没有。我甚至没有提到像 Puppet 和 Salt Stack 这样的东西,我甚至不太理解它们。
欢迎在评论中添加任何其他信息、我出错的地方、我遗漏的地方或您如何进行部署。
我们当前的办公室正在使用持续集成。更准确地说,是TeamCity。
我对整个 CI 事情也不了解。我的经理喜欢保持的方式是不允许任何人创建任何类型的分支,除非在非常特殊和罕见的情况下,所以我猜这符合您所说的没有人长时间检出存储库的说法,但我不喜欢这样做,因为它消除了使用 CVS 的许多优势。
我想知道其他使用 CI 的人是否也遇到这个问题,或者只是我的情况,这些限制使工作变得困难。
干杯
我之前也尝试过从 CLI 的角度来进行这项冒险。
这三个命令是任何从终端 shell 进行文件传输的基础。应该知道
rsync在跟踪文件方面不如 Git,Git 可以检测文件何时不再存在或与原始源发生更改。wget运行良好,但仅适用于单一检索场景和单向通信 - 更不用说您每次需要执行它时都需要知道 URI。scp允许文件复制到、来自或在不同的主机之间。这意味着它在双向通信方面运行良好。它使用ssh进行数据传输,并提供与ssh相同的身份验证和安全级别。我不知道其他人怎么样,但与使用 GUI 相比,scp及其其余部分听起来像是很多输入,但我们仍然无法正确同步整个项目或一系列子目录。这就是当使用 Git 进行部署时,SSH 和 POST HOOKS 非常有效的地方。Dennis,我认为你应该仔细看看 rsync。它不仅可以检测已删除的文件,还可以使用 MD5 哈希检测大小相同的已更改文件。它非常快,并且确实是唯一需要的(当然需要安装 SSH)。无需执行任何特殊操作。您可以 rsync 下载(服务器到本地)以捕获任何“热修复”(通常我们的团队通过 ftp 直接修复错别字或其他杂项内容),合并本地,测试本地,然后 rsync 上传(部署新版本的站点)。它非常快,并且无需在生产服务器上维护存储库(不是什么大问题,但我宁愿保持该服务器尽可能精简)。您的 rsync 命令是可移植的,并且您拥有它们,易于微调或更新。它们适用于 OSX、debian 等。
请删除任何需要 FTP 的部署策略。我不需要解释为什么……
请解释一下。使用 FTP 自动推送版本控制的代码有什么不好的地方吗?
顺便说一句,有趣的是,文章中对 FTP 略过不提,好像绝大多数网站都没有使用它(无论好坏)。
对不起,但这是一个非常薄弱的论点:“不要这样做,因为我这么说。”
是的,是的,您确实需要解释原因,否则您会显得像个傲慢自大的家伙。
如果您仔细阅读 Chris 的话,他并没有推荐 FTP——只是将其作为一个选项提及。
很棒的帖子。喜欢你从不吝惜细节的方式。
使用 Git,您还可以像推送至 GitHub 一样直接将文件推送至服务器。Arlo Carreon 的这篇教程很好地介绍了如何通过 SSH 设置此功能。
也就是说,当您的站点扩展时(考虑多台服务器),Capistrano 更适合,但如果您只有一台要部署到的服务器,则通过 git 推送非常不错。
GIT 非常擅长一次推送至多个站点。一个远程可以有多个上游 URL。但是,所有服务器都需要一个具有 post-receive/checkout 钩子的本地存储库。我有一个存储库,它推送至 4 个 URL(1 个是 Github,3 个是服务器)。
感谢 Chris 的帖子。这个话题对我来说绝对很有趣,因为我喜欢使用 GIT,但不幸的是,很多地方仍然使用 FTP 进行部署。我知道人们倾向于使用“安全”的免安装方法的一种方式是拥有单独的开发和生产服务器。但这仍然不能解决跟踪更改和恢复错误的问题。
我最终选择了使用 GitHub Pages 来部署我的网站。它运行良好,而且比我尝试保持本地副本和服务器副本同步要容易得多。
我很想知道您在 css-tricks.com 上使用什么进行部署。Dreamweaver 曾经有一个基本的“签入/签出”系统,可以跟踪您在本地更改的文件。虽然不如 svn/git 好,但对于小型网页设计团队来说还不错。
CSS-Tricks.com 运行在 Beanstalk 上。将来我可能会考虑将其迁移到 GitHub,因为它实际上没有必要保持私密,这样我就可以使用问题跟踪器等功能。
精彩的总结,Chris!
可能还需要注意的是,GitHub Pages 是一项免费服务,在我看来这是一个巨大的优势。我写了一篇关于如何设置的文章,希望能帮助到一些人 通过 GitHub 免费部署。
我从来不明白为什么人们对像 http://FTP…sure 这样古老但可靠的协议如此苛刻。它确实很老了……但是对于那些为没有能力支付每月数百美元的专用服务器托管费用的客户开发小型企业网站的人来说,FTP 可能是将文件从本地机器传输到共享 Web 服务器的唯一选择……尽管可以嘲笑,但这是小型网站的现实情况……并非所有人都从事大型 Web 应用开发。
任何直接在活动服务器上编辑的人都在冒着危险,这一点我同意。
git clone / git pull – 最糟糕的情况下也只需要 5 分钟
ftp – 至少需要 1-3 个小时
对于一个专门用于文件传输的协议来说,无论何时我想发送文件,FTP 都是浪费时间。
请查看 https://deploybutton.com。我发现它非常易于设置,并且支持多种配置。
一个更好的解决方案是 http://dploy.io/,因为看起来 deploybutton 已经被放弃了。
不错的总结。但是您错过了专门用于部署自动化的工具或环境,例如 LiveRebel、uDeploy、DeployIT、InRelease 等。
Pelican 是另一个很棒的静态站点(和/或博客)生成器。我最近创建了一个 Heroku 构建包,因此它可以很好地与 Heroku 协同工作。
http://getpelican.com/
哇……这篇文章来得太及时了!我一直在研究使用 Capistrano 部署 WordPress,但它不适合我们使用的服务器,因为我们受其结构的约束,并且它使符号链接成为一个混乱的解决方案。
然而,Rsync 将快速轻松地工作,并且不受约束!
本文概述了一种用于运行 WP 部署的 rake 任务的简单方法
http://adamstacoviak.com/simple-wordpress-deployment-using-rake-and-rsync/
除了 Sass 和 Compass 部分(我将使用 Grunt 处理),这比设置 Capistrano 简单得多!
这篇文章对于快速参考 Rsync 部署中的主要问题非常棒
http://www.thegeekstuff.com/2010/09/rsync-command-examples/
使用 Git,您还可以像推送到 GitHub 一样直接将文件推送到服务器。我最终选择了使用 GitHub Pages 来部署我的网站。它运行良好,而且比我尝试保持本地副本和服务器副本同步要容易得多。
我们使用 JIRA、Jenkins、GIT 和 GITHUB。
我们在 JIRA 中创建功能票证或错误票证,然后使用该 JIRA 票证号从我们的主线创建分支。我们修复错误,或者当分支的功能完成时,我们发送拉取请求。
然后将该分支合并到主线中,提交引用 JIRA 号码,并且 JIRA 票证会更新为与之相关的提交链接。
一旦票证关闭,我们就转到下一个。
我们每周发布一次,因此在周末结束时,我们使用 Jenkins 推送到暂存区域……我们进行测试,然后推送到生产环境。然后一切重新开始。
热修复是在从暂存区域分支并回传。
这是一个易于遵循的流程,有很多检查和问责制。
如果有人在使用 SourceSafe 与 SourceGear……或者只是 SourceGear,并且没有服务器的管理员权限,因此无法登录以从服务器运行“获取最新版本”,我很想知道是否有人对此有任何好的建议。
我曾经管理过的最好的方法是将“获取最新版本”到一个新目录,然后通过 FTP 传输整个内容……是的,Eric,你听到我说的是 **FTP** :)
Chris
我不明白现在怎么会有人没有版本控制。我甚至记不清有多少次我做了我认为运行良好的更改,而它破坏了我之前做的某些东西。没有立即意识到问题是一个大问题,但可以通过版本控制来解决。
虽然我不得不说我还没有找到一种解决方案来保持我使用的 3 台机器同步。我有 A) 办公室、B) 家庭办公室、C) 笔记本电脑。保持 Photoshop 和 Illustrator 设置、Coda 插件、CodeKit 站点/设置、MAMP 中的测试服务器以及各种 WP 站点的所有数据库同步,是一项艰巨的工作……是否有任何关于如何执行所有这些操作的提示?:-)
嗨,Patrik,
我使用 Dropbox 在计算机之间进行同步。如果你正确设置,它实际上非常简单。我之前写过一篇关于我的设置的文章。如果你愿意,可以查看一下…… Dropbox 开发同步
如有任何疑问,请留言
Patrik,我认为您的解决方案称为“Dropbox+硬链接(别名)”或任何其他类似服务,例如 sugarsync;)
@Chris 谢谢,对于 MySql 部分来说这是一个不错的解决方案,但我还需要弄清楚如何同步 Coda 站点设置、Coda 插件等。我想我可能也可以通过符号链接解决这个问题——但这似乎是一件非常耗时的任务。
我认真考虑过摆脱两台 iMac 并改用 27 英寸 Cinema 显示器,并且只使用笔记本电脑。不过我得解决总是忘记把笔记本电脑放在家里的问题……:)
任何人都应该使用某种版本控制。
我赞同 Chris 的回答:Dropbox 几乎完美地适用于我们需要在各个盒子之间保持同步的所有其他内容(艺术品、字体、设置)。从技术上讲,Git 也可以工作,但随后仓库会变得非常大。Adobe 首选项……不确定那个。我很好奇 Bittorrent Sync 作为一种保持各种目录同步的方法。
同步数据库,现在,这是一个不同的问题。这就是为什么我开始使用 Statamic 构建:平面文件,没有数据库。保持一切同步和版本控制变得非常容易。
您没有提到我使用的两个。
RPM/Yum(用于我们的 Web 应用程序)和 Erica(用于 CouchDB CouchApps)
这是“Going Commando”技术的变体。当我在处理网站的第二个版本时,有时我会在生产服务器上设置一个新的虚拟服务器记录并为其提供一个子域名(用于测试)。然后,当准备好上线时,我只需编辑服务器上的虚拟服务器记录并重新加载 Apache。使用此技术,我不需要移动任何文件或创建新的数据库以上线。我只是重新安排哪个虚拟服务器是开发环境,哪个是生产环境。WordPress 网站的一个注意事项是,您需要将开发系统配置为具有不同的站点 URL。这可以通过在 wp-config 中设置 WP_SITEURL 常量来轻松完成。
对于 WordPress 网站,我刚刚开始使用来自 http://serverpress.com/products/desktopserver/ 的 DesktopServer 设置本地开发和部署。
它建立在 XAMPP 之上,并且可以直接部署而无需 FTP。因此,对于单独工作的人来说,它似乎是一个简单的过程。有什么想法吗?
我实际上一直在使用 Dropbox 进行部署。它非常方便,我仍然可以在其之上使用版本控制……
基本上,我在 Dropbox 中设置了两个文件夹,一个开发文件夹和一个生产文件夹。实时站点从生产文件夹提供服务,我的开发机器从开发文件夹提供服务。每当准备好推送到生产环境时,我都会使用版本控制来同步这两个文件夹,然后就完成了。如果我需要对生产站点进行任何小的或简单的调整,我只需编辑文件夹的内容并在以后将其同步到开发环境。
可能不是最安全的,但不必 ssh 或远程登录到另一台机器感觉很不错……
很棒的文章!另一种通过 ssh 连接进行部署的好方法是使用 Fabric。
另一个可以减少很多风险因素的好工具是RapidWeaver。它自带的主题并不令人印象深刻,但有很多第三方开发者制作了大量的主题。它的工作方式在某种程度上类似于FTP,但也不完全一样——您可以在本地创建和编辑页面,并预览它们在您安装的任何Web浏览器中的显示效果。然后在准备好后上传。不过它只适用于Mac。
这是开发者可以无限期讨论的话题之一。部署的方法有很多,而且每种情况都是独一无二的。我感谢您在这里提供的各种选项,以及其他用户关于他们使用什么方法的评论。
我花了一段时间才找到适合我的流程,所以如果有人正在阅读本文并且对这些选择和强烈的意见感到不知所措,请放松——您需要找到适合您自己和您的组织/客户/团队等的方法。它不需要像火箭科学那样复杂(但如果您想让它复杂起来,它也可以!)。
对于我来说,我更倾向于推送到Github/Bitbucket,然后从一个预发布服务器拉取,然后使用rsync同步到生产环境。对于存储库之外的媒体等内容,我依靠自定义端口上的ssh和sftp。
看看这个,Laravel部署。
http://anahkiasen.github.io/rocketeer/
哇。太棒了。
我相信将会为其他PHP框架开发软件包。
对于非常基本的原型,我们的设计师通过Dropbox使用site44.com部署文件夹。
我只用过其中的4个。
传统的FTP传输。当您在各个文件夹中进行了大量更新时,这是一种难以部署和更新的方式。我最终只是重新上传所有内容并覆盖所有内容。
当然,作为一名Rails开发者,我一直都在服务器上进行git pull,或者只是使用Capistrano。也用过几次Heroku。
对我来说,最好的部署方式是使用git和Capistrano。我还没有使用过任何这些部署服务。
Heroku的功能远不止Ruby on Rails;我甚至不会说他们是专门的RoR主机,正如这里所示。我一直用它们来托管Node应用程序,它们非常棒。他们官方支持Java、Node.js、Python、Ruby、Scala和Clojure,并且他们对PHP有未公开记录的支持。
还没有机会尝试,但是http://www.phptesting.org/似乎有一个非常有趣的PHP CI解决方案(目前处于Beta阶段)。
目前我使用git flow(http://nvie.com/posts/a-successful-git-branching-model/)结合一些提交后/合并钩子进行归档和部署,但我真的希望Jira能够启动并运行,并使用CI解决方案。
我需要重写这些钩子,但如果有人感兴趣,可以在BitBucket上找到它们。
您知道PAAS Openshift吗?
感谢您的文章,它给了我很多需要考虑的选项!但我并不确定他们的服务和性能……
我有一个linode账户来托管我自己的博客,并且只使用FTP进行文件同步。因为这些博客很小,而且只有我一个人在工作。但是,对于我的公司,我们有自己的数据中心,所以我们自己构建了一个svn服务器来服务许多网站。
很棒的文章/列表。
我使用并喜欢http://modxcloud.com来托管我的MODX CMS网站。可以添加到列表中!
我相信在部署依赖于某种CMS(wordpress、b2evolution、drupal或您自己的……)的网站时,经常会忽略一个步骤,那就是部署更新的PHP和静态文件是不够的。您经常需要运行一个脚本来创建/更新数据库或安装插件等。
在这段时间里,您的网站只是坏了。
在我看来:在升级期间让网站处于故障状态与使用FTP实时编辑网站一样糟糕。
所以我想说应该首先将网站置于“维护模式”,方法是在每个请求上显示一个“维护”页面,然后在整个设置完成后将其恢复到正常操作。
例如,这可以通过.htaccess文件中的mod_rewrite来完成。每个CMS也可能有特定方法来为您处理。
一点Python的爱都没有?? :)
另一位评论者提到了Fabric(这个是我使用的Fabric样板),但其他Python软件包使部署变得轻而易举。
Buildbot用于持续集成、自动化构建/测试等。
Salt用于配置管理、发布编排,几乎任何您想做的事情。(注意:这是一个更重的软件包,非常适合大规模部署)。
对于那些喜欢git和svn的UI的人
Git Tower
http://git-tower.com
Cornerstone(svn)
http://www.zennaware.com/cornerstone/index.php
这里列出了一些很棒的服务,Chris,我们最近成立了自己的代理公司,正在寻找各种部署解决方案,因此正在更深入地了解提供的服务。
这是一个**非常棒**的汇总。感谢您的发布。
Ulrich上面发布了关于Deploy Button的内容。我写了一篇博文并制作了一个关于设计师(包括我自己)如何使用Git和Deploy Button(或类似服务)进行轻松部署的视频教程。
http://adamjohnsondesign.com/blog/moving-ftp-git-deployment-designers-guide/
我最终在我的Bluehost共享账户中直接执行了此操作,我在我的主机上的一个文件夹中拥有一个git存储库,并将更改实时推送到主网站。
我想https://www.cloudcontrol.com/是类似的东西,可能值得在这里提及。
我最喜欢的将主题部署到WordPress的方法之一是这个插件,它通过WordPress自己的更新功能部署您在GitHub上托管的主题。太可惜了,这个项目似乎有点被放弃了。
谢谢!..这是我见过的关于“部署”最好的高级解释。
对于新手来说,很容易被诸如“部署您的应用程序”之类的术语吓倒,但您的文章很好地说明了它实际上只是关于**如何**将您的文件从计算机A复制到计算机B的问题。
非常棒的文章!我尝试过FTPloy,但它有bug。所以我提出了自己的解决方案
https://github.com/Wanchai/FTPbucket
我喜欢从BitBucket存储库(git、问题、用户……)管理所有内容。
FTP是复制文件的好方法,并且存在于大多数服务器上。一旦您拥有自己的源代码管理。
我编写了一个小的PHP脚本,可以帮助进行FTP部署。它被称为PHPloy,并且与Git紧密耦合,以确定哪些文件被编辑/添加/删除并相应地上传它们。您将FTP详细信息放在deploy.ini文件中,然后只需运行一个命令即可部署。
您还可以一次部署到多个服务器。如果您配置了多个服务器,则可以选择部署到其中一个服务器,如下所示。
还可以做更多的事情——在Github上查看:https://github.com/banago/PHPloy
dploy.io现在对1个私有存储库**免费**,套餐起价为15美元。试试看!
我在一家小公司工作。我是唯一的开发者。所有网站都在WordPress上。我使用MAMP和localhost。通过Filezilla FTP将文件上传到子域名以展示给客户,之后我需要将其下载回我的localhost并上传到服务器。这很烦人!不知道该用什么,请帮忙,以及如何分步设置。
不明白git和Bitbucket是如何工作的。如何从localhost部署到子域名或服务器。
我知道对于数据库,我必须使用DBMigrate。只需导入/导出即可。
谢谢
好的,所以我使用git和Bitbucket。如何从Bitbucket下载我的存储库并安装到我的FTP服务器上?有免费的方案吗?
可以试试http://dploy.io,它是免费的,并且可以做到更多。
Dima,我见过这个,但你只有免费的一个仓库。当我有多个正在进行的网站需要通过FTP部署时,我需要更多的仓库。还有其他选择吗?
就像我现在正在本地开发3个网站,需要将它们部署到3个不同的子域名上。
谢谢你的帮助
每个人都忘记了Joomla :(
感谢这篇文章。对于许多没有PHP或Linux知识的用户来说,使用第三方cron作业服务(例如easycron.com)是一个不错的选择。
非常感谢!