Set up a database for a scaled authenticated deloyment

When Tiled is configured to use authentication provider(s), it employs a SQL database to store authenticaiton-related state, such as identities, sessions, and API keys. In single-process deployments, it creates a SQLite database automatically at startup. For scaled deployments, a proper scalable database should be used. Tiled supports any SQL dialect support by SQLAlchemy, but we recommend PostgreSQL for scaled deployments.

Create a database and user for tiled

Invent a strong password, such as via:

openssl rand -hex 32

or

python -c "import secrets; print(secrets.token_hex(32))"

Create a user and a database in PostgreSQL. For example:

$ sudo su postgres
$ psql
postgres=# CREATE USER 'tiled' WITH SUPERUSER PASSWORD '...';
postgres=# CREATE DATABASE tiled ENCODING 'utf-8' OWNER tiled;

Configure and initialize the database

Place the database URI in the configuration file, filling in the hostnmae in place of ... below. Inject the password via an environment variable as shown; do not hard-code it in the configuration file. Be sure to quote the URI.

database
  uri: "postgresql://tiled:${TILED_DATABASE_PASSWORD}@.../tiled"

Initialize the database. Initialization only has to be done once ever. (If you run this on an existing database Tiled will notice and refuse to initialize it.)

$ tiled admin initialize-database postgresql://tiled:${TILED_DATABASE_PASSWORD}@.../tiled

The database is ready to use.

Reference

See database in Service Configuration Reference for comprehensive documentation of the options for tuning database performance and reliability.