From 60861760fc3bdc1cdea407e8ee21eb8c54e77b8f Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 7 Apr 2009 17:10:54 -0400 Subject: [PATCH] Host multiple sites with the same codebase This is the beginning of the code for status.net and related status farms. It will read basic information about a site from a shared, central database and use the data stored there to switch on the hostname. --- classes/Status_network.php | 61 ++++++++++++++++++++++++++++++++++++++ classes/statusnet.ini | 17 +++++++++++ config.php.sample | 8 +++++ db/site.sql | 17 +++++++++++ 4 files changed, 103 insertions(+) create mode 100755 classes/Status_network.php create mode 100755 classes/statusnet.ini create mode 100644 db/site.sql diff --git a/classes/Status_network.php b/classes/Status_network.php new file mode 100755 index 0000000000..f7747f71d7 --- /dev/null +++ b/classes/Status_network.php @@ -0,0 +1,61 @@ +dbhost)) ? 'localhost' : $sn->dbhost; + $dbuser = (empty($sn->dbuser)) ? $sn->nickname : $sn->dbuser; + $dbpass = $sn->dbpass; + $dbname = (empty($sn->dbname)) ? $sn->nickname : $sn->dbname; + + $config['db']['database'] = "mysqli://$dbuser:$dbpass@$dbhost/$dbname"; + $config['site']['name'] = $sn->sitename; + return true; + } else { + return false; + } + } +} diff --git a/classes/statusnet.ini b/classes/statusnet.ini new file mode 100755 index 0000000000..a70cd41228 --- /dev/null +++ b/classes/statusnet.ini @@ -0,0 +1,17 @@ + +[status_network] +nickname = 130 +hostname = 2 +pathname = 2 +sitename = 2 +dbhost = 2 +dbuser = 2 +dbpass = 2 +dbname = 2 +created = 142 +modified = 384 + +[status_network__keys] +nickname = K +hostname = U +pathname = U diff --git a/config.php.sample b/config.php.sample index 59e0cc7126..eec2bb2c5d 100644 --- a/config.php.sample +++ b/config.php.sample @@ -192,3 +192,11 @@ $config['sphinx']['port'] = 3312; #Use a different hostname for SSL-encrypted pages #$config['site']['sslserver'] = 'secure.example.org'; + +#If you have a lot of status networks on the same server, you can +#store the site data in a database and switch as follows +#Status_network::setupDB('localhost', 'statusnet', 'statuspass', 'statusnet'); +#if (!Status_network::setupSite($_server, $_path)) { +# print "Error\n"; +# exit(1); +#} diff --git a/db/site.sql b/db/site.sql new file mode 100644 index 0000000000..660ba475bb --- /dev/null +++ b/db/site.sql @@ -0,0 +1,17 @@ +/* For managing multiple sites */ + +create table status_network ( + + nickname varchar(64) primary key comment 'nickname', + hostname varchar(255) unique key comment 'alternate hostname if any', + pathname varchar(255) unique key comment 'alternate pathname if any', + sitename varchar(255) comment 'display name', + dbhost varchar(255) comment 'database host', + dbuser varchar(255) comment 'database username', + dbpass varchar(255) comment 'database password', + dbname varchar(255) comment 'database name', + + created datetime not null comment 'date this record was created', + modified timestamp comment 'date this record was modified' + +) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;