Zotonic has the capability of serving more than one site at a time. You can have multiple sites enabled, each with its own set of templates, database and dispatch rules. Each site has its own hostname.

Create a site

  1. First, prepare the database. In your terminal, connect to PostgreSQL:

    $ sudo -u postgres psql (enter your OS password)

    And create a database user for Zotonic. You may want to change the password:

    postgres=# CREATE USER zotonic WITH PASSWORD 'zotonic';

    Now, either give this user create rights to have Zotonic automatically create the database for you (recommended):

    postgres=# ALTER USER zotonic CREATEDB;

    Or create the site database manually:

    postgres=# CREATE DATABASE zotonic WITH OWNER = zotonic ENCODING = 'UTF8';
    postgres=# GRANT ALL ON DATABASE zotonic TO zotonic;
    postgres=# \c zotonic
    postgres=# CREATE LANGUAGE "plpgsql";

And quit postgres:

postgres=# q
  1. Now that there is a database Zotonic can be started. We do this in debug mode so that all console output is visible:

    $ bin/zotonic debug
  2. In a new terminal window, Edit your /etc/hosts file, adding an entry for yoursite.test (the site hostname) to point at your local host:   yoursite.test
  3. Create a new Zotonic site, based on the ‘blog’ skeleton site:

    $ bin/zotonic addsite -s blog yoursite


    Zotonic has to be running for the addsite command to succeed.

  4. Finally, point your browser to http://yoursite:8000 to see your new site. You can log into the admin at http://yoursite:8000/admin with the password that you can find in your site’s configuration file: yoursite/priv/zotonic_site.config in the zotonic user directory.


    If anything goes wrong, see the Installation.

You can stop Zotonic by typing twice Ctrl-C at the Erlang command prompt.

If you want to start Zotonic in the background then use:

$ bin/zotonic start

This can be stopped with:

$ bin/zotonic stop

Anatomy of a site

A Zotonic site is a folder which lives in the zotonic user directory and contains at least:

  • a priv/zotonic_site.config file: sets the site’s hostname and other parameters
  • a src/sitename.erl file: initialises the site.
  • a src/ file: an OTP app source file

In fact, a site is a special type of module. Like modules, sites usually contain additional resources such as templates, dispatch rules and data . Unlike modules, however, sites have their own hostname and database connection.

Next steps