寻找安全的方式来部署PHP代码

我们现在如何做事

我们有一个文件服务器(使用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脚本将当前的符号链接更新为新版本。