我们现在如何做事
我们有一个文件服务器(使用NFS),可以安装多个Web服务器,并使用这些安装程序作为Web根目录。 当我们部署我们的代码库时,我们将一个压缩文件(tar.gz)存到NFS服务器,并直接在文件服务器的“networking目录”中解压缩数据。
问题
在部署过程中,我们看到一些I / O错误,大部分是无法读取请求的文件: Smarty error: unable to read resource: "header.tpl"
部署完成后,这些错误似乎消失,所以我们假设这是因为将数据直接解压到Web目录并不是最安全的事情。 我猜我们需要一些primefaces。
我的问题
我们如何将新文件primefaces复制到现有目录(Web服务器的根目录)?
编辑
我们不妥协进入networking目录的文件不是目录中唯一的文件。 我们正在将文件添加到已经有文件的目录中。 所以复制目录或使用符号链接是不是一个选项(我知道)。
这是我所做的。
DocumentRoot是,例如/var/www/sites/www.example.com/public_html/:
cd /var/www/sites/www.example.com/ svn export http://svn/path/to/tags/1.2.3 1.2.3 ln -snf 1.2.3 public_html
你可以很容易地修改这个扩展你的.tar.gz之前改变符号链接,而不是从svn导出。 重要的是这个改变是符号链接的原子应用。
我认为rsync
是一个更好的选择,而不是scp
,只有更改的文件会被同步。 但是通过脚本部署代码对于团队中的发展来说并不方便,部署中的错误并不是人性化的。
你可以考虑Capistrano,Magallanes,Deployer,但他们也是脚本。 我建议你试试walle-web ,一个用PHP编写的部署工具,yii2开箱即用。 我已经在我们公司托管了好几个月,在部署测试,模拟和生产环境的过程中工作顺利。
它依赖于bash工具组,rsync,git,链接,但是一个web ui通常适合操作,请试试:)
为什么你不只是有两个不同版本的网站的目录。 所以当你在site_2中完成部署时,你只需在你的web服务器配置(例如apache)中切换站点目录并将所有文件复制到site_1目录。 然后,您可以使用相同的方法在site_1目录中进行部署,并从site_2进行切换。
RSync诞生了…呃… 我的意思是做这件事情
RSync可以在本地文件系统和ssh上运行 – 它非常强大和快速 – 仅发送/复制已更改的文件。
它可以被配置为删除任何已被删除的文件(或者只是简单地从源文件中删除),或者可以将其配置为保持独立。 您可以设置排除列表,以便在同步时排除某些文件/目录。
这是一个教程的链接 。
回复:原子 – 关于SO的另一个问题
我喜欢NFS的想法。 我们将代码部署到我们前端的NFS服务器上。 实际上,我们在发布新版本时运行一个shell脚本。 我们所做的就是使用符号链接当前的最后一个版本目录,如下所示:
/fasmounts/website/current -> /fasmounts/website/releases/2013120301/
而apache的文档根是:
/fasmounts/website/current/public
(实际上apache文件的根目录是/ var / www,它是/ fasmounts / website / current / public的符号链接)
shell脚本将当前的符号链接更新为新版本。