Standard Installation
This guide covers installing Thelia 3 on a standard PHP/MySQL environment without Docker.
For local development, use DDEV. It gives a faster and more consistent setup.
Prerequisites
PHP 8.3, 8.4 or 8.5
php -v
# PHP 8.3.x (cli) ...
Thelia 3 supports PHP 8.3, 8.4 and 8.5, and 8.3 is recommended. All three are covered by the test matrix.
Required extensions:
php -m | grep -E "pdo_mysql|openssl|intl|gd|curl|dom"
All of these should be present: pdo_mysql, openssl, intl, gd, curl, dom.
PHP configuration (php.ini):
memory_limit = 256M
post_max_size = 20M
upload_max_filesize = 10M
date.timezone = Europe/Paris
Composer 2+
composer --version
A GitHub token for Composer
Thelia publishes its Symfony Flex recipes in the thelia/thelia-recipes repository, and Composer
reads them through the GitHub API. Without a token that API answers with a rate limit. Flex then
falls back on auto-generated recipes without reporting anything: the config/packages/*.yaml files
the recipes carry are never written, and the theme bundles they register never reach
config/bundles.php. The install fails much later, on a message that says nothing about recipes:
You must either configure a "public_key" or a "secret_key"
That message comes from lexik/jwt-authentication-bundle, whose configuration file was one of the
recipes that never ran.
Create a token on github.com/settings/tokens. No scope is needed, the recipes are public. Give it to Composer once, before installing anything:
composer config --global github-oauth.github.com <your-token>
The value is written to your global auth.json. After composer install, check that
config/packages/lexik_jwt_authentication.yaml exists. If it does not, the recipes did not run.
Database
MariaDB 10.11 or later (recommended), or MySQL 8.x:
CREATE DATABASE thelia CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'thelia'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON thelia.* TO 'thelia'@'localhost';
FLUSH PRIVILEGES;
Installation steps
1. Get the code
From GitHub (development):
git clone https://github.com/thelia/thelia.git
cd thelia
With Composer (project):
composer create-project thelia/thelia-project my-shop
cd my-shop
2. Install dependencies
composer install
3. Install Thelia
bin/install is a standalone script that sets up the database, registers modules, and configures templates. Database credentials can be passed either as CLI options or as environment variables:
php bin/install --database_host=localhost --database_name=thelia \
--database_user=thelia --database_password=your_password \
--frontoffice_theme=flexy
With demo data and admin user
php bin/install \
--database_host=localhost --database_name=thelia \
--database_user=thelia --database_password=your_password \
--frontoffice_theme=flexy \
--with-demo \
--with-admin \
--admin_login=admin \
--admin_password=admin123 \
--admin_email=admin@example.com
default-twig--backoffice_theme defaults to default-twig, the Twig back-office, so most installs do not need
to pass it. Pass --backoffice_theme=default only if you deliberately want the legacy Smarty admin.
All options
Database credentials. Each setting is resolved as CLI option, then environment variable, then default. Host and name are required.
| Option | Variable | Default | Description |
|---|---|---|---|
--database_host | DATABASE_HOST | - | Database hostname |
--database_port | DATABASE_PORT | 3306 | Database port |
--database_name | DATABASE_NAME | - | Database name |
--database_user | DATABASE_USER | - | Database user |
--database_password | DATABASE_PASSWORD | - | Database password |
Themes and setup:
| Option | Default | Description |
|---|---|---|
--frontoffice_theme | flexy | Front-office template |
--backoffice_theme | default-twig | Back-office template (default is the legacy Smarty back-office) |
--pdf_theme | default | PDF template |
--email_theme | default | Email template |
--with-demo | - | Import demo catalog |
--skip-demo-images | - | With --with-demo, import the catalog without its images |
--with-admin | - | Create admin user |
--strict-themes | - | Remove the bundles of the templates you did not select |
--admin_login | thelia | Admin username |
--admin_password | thelia | Admin password |
--admin_first_name | Admin | Admin first name |
--admin_last_name | Thelia | Admin last name |
--admin_email | admin@thelia.net | Admin email |
See Install Reference for what --skip-demo-images and --strict-themes do.
4. Assets
There is no manual step. bin/install runs importmap:install and tailwind:build for the
active front-office template, and sass:build for the back-office stylesheet, and skips whichever
command the installed templates do not provide. Both the storefront and /admin are ready when
the installer returns. The Smarty back-office template (default) needs no build step either.
5. Start the development server
php -S localhost:8000 -t public
6. Access your site
- Front-office: http://localhost:8000
- Back-office: http://localhost:8000/admin
Post-Installation
Create admin user (if not created during install)
php Thelia admin:create
Clear cache
php Thelia cache:clear
Production setup
Web server configuration
Environment mode
Set production mode in .env.local:
APP_ENV=prod
APP_DEBUG=0
Cache and assets
php Thelia cache:clear --env=prod
php Thelia cache:warmup --env=prod
Useful commands
php Thelia cache:clear
php Thelia admin:create
php Thelia module:list
php Thelia module:activate ModuleName
php Thelia module:deactivate ModuleName
php Thelia module:refresh
Troubleshooting
Memory limit error
php -d memory_limit=512M bin/install
Permission denied
sudo chown -R www-data:www-data var/
chmod -R 755 var/cache var/log
Database connection error
Verify credentials and ensure the MySQL user has proper permissions:
GRANT ALL PRIVILEGES ON thelia.* TO 'thelia'@'localhost';
FLUSH PRIVILEGES;
Next steps
- Configuration: configure your store
- First steps: create products and customize
- Architecture: understand Thelia 3 internals