Jump to content

Confused about installing Option #1: multiple sites with multiple databases - from one /wire code base


Recommended Posts

Posted (edited)

I have trouble following the instructions here

I have several virtual domains successfully installed on Apache Ubuntu, with index.php placeholder files. I want to install Processwire sites in each of them, each with their own config and database, and have all of them use the same /wire codebase in /domainone.

/www/html/domainone/site (+ /wire)

/www/html/domaintwo/site

/www/html/domainthree/site

etc.

The 'how to install' instructions on the link talk about creating subdirectories off the web root, tmp directories, moving and renaming folders, having to come up with different names for the site folders, etc. It does not sound like what I am looking for.

Is there a simpler way to get the structure described above? ChatGPT claimed I could just bootstrap the /wire folder into the other with one line and install normally, but that did not work of course. 

Edited by modifiedcontent
  • modifiedcontent changed the title to Confused about installing Option #1: multiple sites with multiple databases - from one /wire code base
  • 2 weeks later...
Posted

The structure you want is actually slightly different from what Option #1 describes, but it's achievable. Option #1 assumes all sites share the same web root — the multi-site switching happens via index.config.php in that single root. Your setup (separate vhost docroots) requires a different approach.

The cleanest way to do this with separate docroots:

In each domain's docroot (/domaintwo/, /domainthree/, etc.) you only need:

  • A symlink (or include-based) index.php that bootstraps from domainone's /wire
  • A site/ directory with its own config.php, templates, modules

The trick is the index.php in each secondary domain. Replace it with something like:

<?php
// /domaintwo/index.php
$rootPath = '/var/www/html/domainone';
chdir($rootPath);
require($rootPath . '/index.php');

And in each domain's site/config.php make sure $config->paths->root isn't hardcoded — ProcessWire resolves this dynamically, so it usually just works.

You also need to copy (not symlink) .htaccess from domainone to each secondary docroot, since Apache serves it per-vhost.

No index.config.php needed since routing is handled by vhosts at the server level — each domain already hits its own docroot.

So the final structure:

/domainone/wire/          shared core
/domainone/site/          site 1
/domainone/index.php      original
/domainone/.htaccess

/domaintwo/site/          site 2 (own db, templates, modules)
/domaintwo/index.php      bootstraps from domainone
/domaintwo/.htaccess      copy from domainone

Each site/config.php points to its own database. Works cleanly without symlinks to /wire (which can cause issues with __DIR__ resolution in some PW internals).

  • Like 1
Posted (edited)

Thanks @maximus. I think I managed to achieve what I wanted by replacing the /wire folder from the installation package with a symlink to one shared /wire folder, created with the following command line:

ln -s /var/www/wire /var/www/html/oneofmywebsites/wire

Then install as normal with its own database. That seems to work fine, right? Any drawbacks to watch out for? Why would 'symlinks to /wire' be something to avoid - 'can cause issues with __DIR__ resolution in some PW internals'?

Edited by modifiedcontent

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...