######################################################################## # HOW TO USE SERENDIPITY AS SHARED LIBRARY # ######################################################################## ****************************************** * WARNING: THIS FEATURE IS EXPERIMENTAL! * ****************************************** You can install ONE s9y distribution and manage multiple users on it by sharing the core files and then deploying specially crafted files in each user's directory. Let's do this using an example. You own the domain 's9yblogs.org'. You want to have multiple virtual hosts for as many users as you like. They are going to be called 'username.s9yblogs.org'. We choose the users 'garvin', 'j' and 'tom' for example hosts. We assume that your webserver runs as user 'www', group 'www'. We also assume that all your users are called like the subdomains, and they are also in group 'www'. We further assume that PHP's safe_mod is turned off. Of course, for security reasons, you should set the open_basedir directive to the user's document root, so he can't access other installations on your host. So your Apache-Webser should contain VirtualHosts like this: -- httpd.conf ServerName garvin.s9yblogs.org DocumentRoot /home/www/garvin.s9yblogs.org/htdocs AllowOverride All php_value include_path ".:/usr/local/lib/php:/usr/local/lib/php/s9y/:/usr/local/lib/php/s9y/bundled-libs/" php_admin_value open_basedir "/usr/local/lib/php/:/usr/local/lib/php/s9y/:/home/www/garvin.s9yblogs.org/" ServerName j.s9yblogs.org DocumentRoot /home/www/j.s9yblogs.org/htdocs AllowOverride All php_value include_path ".:/usr/local/lib/php:/usr/local/lib/php/s9y/:/usr/local/lib/php/s9y/bundled-libs/" php_admin_value open_basedir "/usr/local/lib/php/:/usr/local/lib/php/s9y/:/home/www/j.s9yblogs.org/" ServerName tom.s9yblogs.org DocumentRoot /home/www/tom.s9yblogs.org/htdocs AllowOverride All php_value include_path ".:/usr/local/lib/php:/usr/local/lib/php/s9y/:/usr/local/lib/php/s9y/bundled-libs/" php_admin_value open_basedir "/usr/local/lib/php/:/usr/local/lib/php/s9y/:/home/www/tom.s9yblogs.org/" -- httpd.conf You will unpack the default s9y distribution files in "/usr/local/lib/php/s9y/". Where you store the directory 's9y' is not important, as long as you adjust the include_path setting in the VirtualHosts. But the directory name 's9y' is significant. Now copy the subdirectories called * "/usr/local/lib/php/s9y/deployment/" [core redirection files] * "/usr/local/lib/php/s9y/templates/" [templates so that users can change them] * "/usr/local/lib/php/s9y/htmlarea/" [htmlarea WYSIWYG-editor] to each of the user's subdirectories: $ cp -r /usr/local/lib/php/s9y/deployment/* /home/www/garvin.s9yblogs.org/htdocs/ $ cp -r /usr/local/lib/php/s9y/templates /home/www/garvin.s9yblogs.org/htdocs/ $ cp -r /usr/local/lib/php/s9y/htmlarea /home/www/garvin.s9yblogs.org/htdocs/ $ chown -R garvin.www /home/www/garvin.s9yblogs.org/htdocs/* $ chmod ug+rwx /home/www/garvin.s9yblogs.org/htdocs $ chmod ug+rwx /home/www/garvin.s9yblogs.org/htdocs/uploads/ $ cp -r /usr/local/lib/php/s9y/deployment/* /home/www/j.s9yblogs.org/htdocs/ $ cp -r /usr/local/lib/php/s9y/templates /home/www/j.s9yblogs.org/htdocs/ $ cp -r /usr/local/lib/php/s9y/htmlarea /home/www/j.s9yblogs.org/htdocs/ $ chown -R j.www /home/www/j.s9yblogs.org/htdocs/* $ chmod ug+rwx /home/www/j.s9yblogs.org/htdocs $ chmod ug+rwx /home/www/j.s9yblogs.org/htdocs/uploads/ $ cp -r /usr/local/lib/php/s9y/deployment/* /home/www/tom.s9yblogs.org/htdocs/ $ cp -r /usr/local/lib/php/s9y/templates /home/www/tom.s9yblogs.org/htdocs/ $ cp -r /usr/local/lib/php/s9y/htmlarea /home/www/tom.s9yblogs.org/htdocs/ $ chown -R tom.www /home/www/tom.s9yblogs.org/htdocs/* $ chmod ug+rwx /home/www/tom.s9yblogs.org/htdocs $ chmod ug+rwx /home/www/tom.s9yblogs.org/htdocs/uploads/ For later management access, it is advised you keep a list of all URLs for your s9y-managed blogs. We suggest to create a SQL table like 'my_managed_s9y_blogs': sql> CREATE TABLE my_managed_s9y_blogs (url varchar(255) default null); sql> INSERT INTO my_managed_s9y_blogs (url) VALUES ('http://garvin.s9yblogs.org/'); sql> INSERT INTO my_managed_s9y_blogs (url) VALUES ('http://j.s9yblogs.org/'); sql> INSERT INTO my_managed_s9y_blogs (url) VALUES ('http://tom.s9yblogs.org/'); Now you are almost ready for take-off. We assume that every user has access to a seperate SQL database where his blog-data is later stored in. You can already see, that the steps needed above shouldn't be to hard to put into a customized script.sh file for use in your setup. Open up your http://garvin.s9yblogs.org/ file. You should now see s9y's installation screen. Enter the database- and username and the corresponding password. Everything else can be left to the user. Now every user can manage his/her blog just as if it were a standalone installation. SPECIAL NOTES: ======================================================================== * Each blog is still a standalone blog. * If you update the core library files from version 0.5 to 0.6 (for example) every user of your core library will get the default s9y- Upgrader script to see and needs to update his local configuration. As a provider for s9y blogs to your users, you are advised to migrate the user's blogs on your own. To do so, it is best that you always have a "spare" testing blog installed just like your user's blogs. Open that installation and look at the upgrader. Execute it and see that it completes without errors. If that happened, you should cycle through a list of ALL your s9y-managed blogs like this: So basically all you need to do is call that script for every s9y- powered blog you host.