Cakephp3应用程序子域共享相同的应用程序代码,但数据库不同

sbtkgmzw  于 2022-11-12  发布在  PHP
关注(0)|答案(1)|浏览(240)

我想使用CakePHP 3构建多租户Web应用程序,比如http://www.orangescrum.com/,它也是用CakePHP编写。
每个租户将有单独的子域和单独的数据库,只有应用程序源代码对于所有子域是相同的。域将有自己的文件夹,如x.domain.comy.domain.comMap到文件夹x, y, z
我不希望在所有子域中有重复应用程序源代码我希望在所有子域中重用相同应用程序代码
当每个子域在请求我如何使用相同的应用程序代码,但不同的数据库?任何建议,任何类型的实现是受欢迎的。

uelo1irk

uelo1irk1#

您必须为此创建一个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将其保存在“/usr/local/bin/”中或您喜欢的任何位置。
在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);

$真实的_domain_name是ServerAlias(如果您要将任何实际域作为该子域的别名)。

相关问题