Sites
Frappe is a multitenant platform and each tenant is called a site. A site has its own database. Sites exist in a directory called
sites
, assumed as the current working directory when running a bench command.
Sites Directory
The sites directory
frappe-bench/sites
is where all the sites for this bench live. It also contains some other files and directories which are explained next.
apps.txt
This file contains a list of Frappe apps. An app should be listed here before it can be installed on a site. It is added automatically when
bench get-app
command or
bench new-app
command is run.
common_site_config.json
Configuration common to all sites can be put in this file. Learn more about site configuration .
assets
Assets contain files that are required to be served for the client browser. These generally include *.js, *.css, and image files. This directory is auto generated using the
bench build
command. This directory is served by Nginx in production.
Creating a new site
To create a new site, run the following command from the
frappe-bench
directory:
$ bench new-site mysite.localhost
Installing frappe...
Updating DocTypes for frappe : [========================================]
Updating country info : [========================================]
*** Scheduler is disabled ***
The
mysite.local
directory will now be created in the
sites
directory.
Directory Structure
sites/mysite.localhost
├── locks
├── private
│ ├── backups
│ └── files
├── public
│ └── files
├── site_config.json
└── task-logs
locks
This directory is used by the scheduler to synchronize various jobs using the file locking concept .
private
This directory contains files that require authentication to access. It contains private files and backups. They can be accessed by the URL:
/private/files/private-file.png
.
public
This directory contains publicly accessible files. They can be accessed by the URL:
/files/public-file.png
.
site_config.json
This file contains site specific configuration.
Site Config
A file named
site_config.json
exists in every site directory and is used to store site specific configuration. The values are available in
frappe.conf
local variable as a dict.
Example
site_config.json
:
{
"db_name": "test_frappe",
"db_password": "test_frappe",
"admin_password": "admin",
}
To learn more about managing Site or Bench level configurations, checkout this comprehensive document .
Site Resolution
While responding to an HTTP request, a site is automatically selected based on,
-
Host
header in the HTTP request matches a site -
X-Frappe-Site-Name
header in the HTTP request matches a site
It is also possible to force the development server to serve a specific site by starting it with the following command:
bench --site mysite.localhost serve
Set a site as the current site
To force a site to be used as the default site, run the following command:
bench use mysite.localhost
After running this command, site specific commands can be run without the
--site
parameter.
For example, instead of running:
bench --site mysite.localhost migrate
You can just run:
bench migrate