我想用CakePHP 3构建多租户Web应用程序,就像这个http://www.orangescrum.com/一样,也是用CakePHP编写的。
每个租户都有单独的子域和单独的数据库,只有应用程序源代码对所有子域都相同。这些域将拥有自己的文件夹,例如x.domain.com
,y.domain.com
映射到文件夹x, y, z
。
我不想在所有子域中都有重复的应用程序源代码。我想为所有人重用相同的应用程序代码。
当请求每个子域时,我如何使用相同的应用程序代码但不同的数据库?欢迎任何有关任何实施的建议。
答案 0 :(得分:1)
您必须为此创建一个conf文件。
您可以使用sh文件自动创建,如下所示
#!/bin/bash
if [ "x${1}" = "x" ]; then
echo "User is not specified"
exit 1
fi
if [ "x${2}" = "x" ]; then
echo "Domain is not specified"
exit 1
fi
if [ "x${3}" = "x" ]; then
echo "Domain is not specified"
exit 1
fi
/bin/echo ${1}${2} | /bin/egrep -q ';|`|\||>'
if [ $? -eq 0 ]; then
echo "Bad parameter"
exit 1
fi
/bin/cat > /etc/httpd/vhost.d/${1}.${2}.conf <<EOF
<VirtualHost *:80>
DocumentRoot /home/user/www.${2}/htdocs
ServerName ${1}.${2}
ServerAlias ${3}
ServerAdmin adminemail@example.com
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /home/user/www.${2}/htdocs
ServerName ${1}.${2}
ServerAlias ${3}
ServerAdmin adminemail@example.com
SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.crt/example.com.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/example.key
SSLCACertificateFile /etc/httpd/conf/ssl.crt/example.crt
</VirtualHost>
EOF
service httpd restart
echo "Vhost has been added"
exit 0
指定的路径和电子邮件可以根据您的配置进行修改,并使用 vhost_gen.sh 保存在&#39; / usr / local / bin /&#39; 或者你喜欢的任何地方。
在cakephp中调用这个sh文件
$subdomain_name = 'xyz';
$domain_name = 'domain.com';
$real_domain_name = 'xyz.domain.com';
exec ("/usr/local/bin/vhost_gen.sh ".$subdomain_name." ".
$domain_name." ".$real_domain_name);
$ real_domain_name是ServerAlias,如果您想将任何真实域作为该子域的别名。