服务介绍

在提供版本控制之前,我们与许多参与内测、公测的开发者进行多次交流。大家都达成一个共识,无论如何要保证本地的读写没有问题。

然而本地写数据与版本控制之间天生就是矛盾的,因此我们不得不采取许多措施来保证这两者尽可能的共存。

我们的 PHP 采用 Apache 运行,可以用 .htaccess 实现重定向等需求,运行 FTP 服务的用户也与 Apache 相同。Git 则采用独立的用户区分开。

网站的根 / 权限为 777(有沙箱环境,主机之间不会跨过互相读写),因此 PHP 程序、FTP 服务、Git 服务都可以针对网站根进行读写,包括新建文件、文件夹等操作。

当用户在 Git Push 之后,运算节点会自动 Git Pull 取回更新,因此在版本控制中的文件夹用户归属是 Git,FTP 服务、PHP 程序无法对这类文件夹进行读写!

因此必需注意,访客上传附件所使用的文件夹、程序框架运行需要的日志文件夹、临时编译文件夹需要由 PHP 程序运行时创建或者使用 FTP 服务创建,这类文件夹不可以纳入版本控制,否则会导致 PHP 运行时无法写入这些文件夹!

同理,FTP 服务、PHP 程序运行时新建的文件夹和文件无法纳入版本控制,也无法直接运行。例如 FTP 上传有 a.html,Git 也新建一个 a.html,在 Push 时 Remote 会产生警报。此时删除任意一方的 a.html 再进行一次 Push 即可。再例如有用户上传个 webshell.php 的附件,通过 FTP 或者 PHP 程序上传,直接打开也是无法运行的,这些 PHP 只能通过 Git 创建的 PHP 文件调用。这样可以有效杜绝外部 webshell 的威胁。