TYPO3 DDEV Local Development
TYPO3 基于DDEV的本地开发
Compatibility: TYPO3 v13.x and v14.x (v14 preferred)
All configurations in this skill support both TYPO3 v13 and v14.
TYPO3 API First: Always use TYPO3's built-in APIs, core features, and established conventions before creating custom implementations. Do not reinvent what TYPO3 already provides. Always verify that the APIs and methods you use exist and are not deprecated in your target TYPO3 version (v13 or v14) by checking the official TYPO3 documentation.
兼容性: TYPO3 v13.x 和 v14.x(推荐使用v14)
本技能中的所有配置均支持TYPO3 v13和v14版本。
TYPO3 API优先原则: 在创建自定义实现之前,始终优先使用TYPO3的内置API、核心功能和既定规范。不要重复造轮子。在使用API和方法前,务必通过官方TYPO3文档确认它们在目标版本(v13或v14)中存在且未被弃用。
Container Priority
容器使用优先级
Always check for existing containers first:
- Check exists → use
- Check exists → use
- Only use system tools if no container environment
Critical: Use the project's configured PHP version, not system PHP.
始终优先检查现有容器:
- 检查是否存在目录 → 使用
- 检查是否存在文件 → 使用
- 仅在没有容器环境时使用系统工具
重要提示: 使用项目配置的PHP版本,而非系统PHP。
1. Project Initialization
1. 项目初始化
New TYPO3 Project (v14 - Preferred)
新建TYPO3项目(v14 - 推荐)
Create project directory
创建项目目录
mkdir my-typo3-project && cd my-typo3-project
mkdir my-typo3-project && cd my-typo3-project
Initialize DDEV with TYPO3 preset
使用TYPO3预设初始化DDEV
ddev config --project-type=typo3 --docroot=public --php-version=8.3
ddev config --project-type=typo3 --docroot=public --php-version=8.3
Start the environment
启动开发环境
Install TYPO3 v14 (preferred)
安装TYPO3 v14(推荐版本)
ddev composer create "typo3/cms-base-distribution:^14"
ddev composer create "typo3/cms-base-distribution:^14"
Run TYPO3 setup
运行TYPO3安装向导
New TYPO3 Project (v13 LTS)
新建TYPO3项目(v13 LTS)
Create project directory
创建项目目录
mkdir my-typo3-project && cd my-typo3-project
mkdir my-typo3-project && cd my-typo3-project
Initialize DDEV with TYPO3 preset
使用TYPO3预设初始化DDEV
ddev config --project-type=typo3 --docroot=public --php-version=8.2
ddev config --project-type=typo3 --docroot=public --php-version=8.2
Start the environment
启动开发环境
Install TYPO3 v13 LTS
安装TYPO3 v13 LTS版本
ddev composer create "typo3/cms-base-distribution:^13"
ddev composer create "typo3/cms-base-distribution:^13"
Run TYPO3 setup
运行TYPO3安装向导
Existing TYPO3 Project
现有TYPO3项目
git clone git@github.com:org/project.git
cd project
git clone git@github.com:org/project.git
cd project
Configure DDEV (if not already)
配置DDEV(如果尚未配置)
ddev config --project-type=typo3 --docroot=public --php-version=8.3
ddev config --project-type=typo3 --docroot=public --php-version=8.3
Start and install dependencies
启动环境并安装依赖
ddev start
ddev composer install
ddev start
ddev composer install
Import database (see Database Operations)
导入数据库(详见数据库操作章节)
2. Recommended Configuration
2. 推荐配置
yaml
name: my-typo3-project
type: typo3
docroot: public
php_version: "8.3" # 8.2 minimum for v13, 8.3 recommended for v14
webserver_type: nginx-fpm
database:
type: mariadb
version: "10.11" # 10.11+ or 11.x recommended for both v13/v14
yaml
name: my-typo3-project
type: typo3
docroot: public
php_version: "8.3" # v13最低要求PHP 8.2,v14推荐使用PHP 8.3
webserver_type: nginx-fpm
database:
type: mariadb
version: "10.11" # v13/v14均推荐使用10.11+或11.x版本
Fixed port for external tools (MySQL MCP, etc.)
为外部工具(如MySQL MCP等)设置固定端口
host_db_port: "33060"
host_webserver_port: "8080"
host_https_port: "8443"
host_db_port: "33060"
host_webserver_port: "8080"
host_https_port: "8443"
Enable Mailpit for email testing (replaced Mailhog in newer DDEV)
启用Mailpit进行邮件测试(在新版DDEV中替代了Mailhog)
mailpit_http_port: "8025"
mailpit_http_port: "8025"
web_environment:
- TYPO3_CONTEXT=Development
- PHP_IDE_CONFIG=serverName=my-typo3-project.ddev.site
web_environment:
- TYPO3_CONTEXT=Development
- PHP_IDE_CONFIG=serverName=my-typo3-project.ddev.site
hooks:
post-start:
- exec: composer install --no-interaction
hooks:
post-start:
- exec: composer install --no-interaction
Personal machine-specific overrides (gitignored)
针对个人机器的自定义配置(需加入.gitignore)
host_db_port: "33061" # If 33060 conflicts
host_db_port: "33061" # 如果33060端口被占用则修改
PHP Version Matrix
PHP版本对应表
| TYPO3 Version | Minimum PHP | Recommended PHP | MariaDB |
|---|
| v13.4 LTS | 8.2 | 8.3 | 10.11+ |
| v14.x | 8.2 | 8.3 / 8.4 | 10.11+ |
| TYPO3版本 | 最低PHP版本 | 推荐PHP版本 | MariaDB版本 |
|---|
| v13.4 LTS | 8.2 | 8.3 | 10.11+ |
| v14.x | 8.2 | 8.3 / 8.4 | 10.11+ |
3. Database Operations
3. 数据库操作
ddev import-db --file=dump.sql
ddev import-db --file=dump.sql
From gzipped file
从压缩的SQL文件导入
ddev import-db --file=dump.sql.gz
ddev import-db --file=dump.sql.gz
From remote (via SSH)
从远程服务器导入(通过SSH)
ssh user@server "mysqldump -u root dbname | gzip" | gunzip | ddev import-db
ssh user@server "mysqldump -u root dbname | gzip" | gunzip | ddev import-db
Standard export
标准导出(压缩格式)
ddev export-db --file=backup.sql.gz
ddev export-db --file=backup.sql.gz
ddev export-db --gzip=false --file=backup.sql
ddev export-db --gzip=false --file=backup.sql
Create snapshot before risky operation
在执行高风险操作前创建快照
ddev snapshot --name=before-upgrade
ddev snapshot --name=before-upgrade
ddev snapshot restore before-upgrade
ddev snapshot restore before-upgrade
ddev snapshot delete before-upgrade
ddev snapshot delete before-upgrade
Direct MySQL Access
直接访问MySQL
ddev mysql -e "SELECT uid, title FROM pages WHERE hidden = 0"
ddev mysql -e "SELECT uid, title FROM pages WHERE hidden = 0"
Connect from external tool (e.g., TablePlus, DBeaver)
通过外部工具连接(如TablePlus、DBeaver)
Host: 127.0.0.1
主机:127.0.0.1
Port: 33060 (or your configured host_db_port)
端口:33060(或你配置的host_db_port)
4. TYPO3 CLI Commands
4. TYPO3 CLI命令
List all commands
列出所有可用命令
Clear specific cache
清空指定类型的缓存
ddev typo3 cache:flush --group=pages
ddev typo3 cache:flush --group=pages
Update database schema
更新数据库表结构
ddev typo3 database:updateschema
ddev typo3 database:updateschema
ddev typo3 referenceindex:update
ddev typo3 referenceindex:update
Run upgrade wizards (after version update)
运行升级向导(版本更新后)
ddev typo3 upgrade:list
ddev typo3 upgrade:run
ddev typo3 upgrade:list
ddev typo3 upgrade:run
Install extension from TER
从TER安装扩展
ddev composer require typo3/cms-seo
ddev composer require typo3/cms-seo
Install extension from Packagist
从Packagist安装扩展
ddev composer require vendor/extension-name
ddev composer require vendor/extension-name
Setup extensions (generate PackageStates.php)
初始化扩展(生成PackageStates.php)
ddev typo3 extension:setup
ddev typo3 extension:setup
ddev typo3 extension:activate my_extension
ddev typo3 extension:activate my_extension
ddev typo3 extension:deactivate my_extension
ddev typo3 extension:deactivate my_extension
5. Composer Operations
5. Composer操作
Update all dependencies
更新所有依赖
Update single package
更新单个包
ddev composer update typo3/cms-core --with-dependencies
ddev composer update typo3/cms-core --with-dependencies
Require new package (with v13/v14 dual compatibility)
安装新包(同时兼容v13/v14)
ddev composer require "vendor/package:^1.0"
ddev composer require "vendor/package:^1.0"
ddev composer remove vendor/package
ddev composer remove vendor/package
Clear Composer cache
清空Composer缓存
ddev composer clear-cache
ddev composer clear-cache
Dual-Version Development
多版本兼容开发
For extensions supporting both v13 and v14:
Set version constraint in extension's composer.json
在扩展的composer.json中设置版本约束
ddev composer require "typo3/cms-core:^13.0 || ^14.0" --no-update
ddev composer require "typo3/cms-core:^13.0 || ^14.0" --no-update
6. File Operations
6. 文件操作
SSH into Container
进入容器SSH
Web container (as www-data)
以www-data用户进入Web容器
Web container (as root)
以root用户进入Web容器
Database container
进入数据库容器
Copy file into container
在容器内复制文件
ddev exec cp /path/in/container /other/path
ddev exec cp /path/in/container /other/path
Copy from host to container
从主机复制文件到容器
docker cp localfile.txt ddev-myproject-web:/var/www/html/
docker cp localfile.txt ddev-myproject-web:/var/www/html/
Download file from container
从容器下载文件到主机
ddev exec cat /var/www/html/somefile > localfile
ddev exec cat /var/www/html/somefile > localfile
7. Debugging with Xdebug
7. 使用Xdebug调试
Disable Xdebug (faster performance)
禁用Xdebug(提升性能)
IDE Configuration (PhpStorm/Cursor)
IDE配置(PhpStorm/Cursor)
- Set breakpoint in PHP file
- Start listening for connections (PhpStorm: "Start Listening")
- Enable Xdebug:
- Trigger request in browser
- Debugger should connect
- 在PHP文件中设置断点
- 启动IDE的监听连接功能(PhpStorm:"Start Listening")
- 启用Xdebug:
- 在浏览器中触发请求
- 调试器应自动连接
Xdebug Environment
Xdebug环境配置
.ddev/config.yaml
.ddev/config.yaml
web_environment:
- XDEBUG_MODE=debug,develop
- XDEBUG_CONFIG=client_host=host.docker.internal
web_environment:
- XDEBUG_MODE=debug,develop
- XDEBUG_CONFIG=client_host=host.docker.internal
8. Multi-Site Configuration
8. 多站点配置
Additional Hostnames
额外主机名
.ddev/config.yaml
.ddev/config.yaml
additional_hostnames:
- site1
- site2
additional_fqdns:
- site1.myproject.ddev.site
- site2.myproject.ddev.site
additional_hostnames:
- site1
- site2
additional_fqdns:
- site1.myproject.ddev.site
- site2.myproject.ddev.site
Create site configuration
创建站点配置目录
mkdir -p config/sites/site1
mkdir -p config/sites/site1
config/sites/site1/config.yaml
config/sites/site1/config.yaml
- title: English
languageId: 0
locale: en_US.UTF-8
- title: English
languageId: 0
locale: en_US.UTF-8
9. Services and Add-ons
9. 服务与附加组件
Redis (for caching)
Redis(用于缓存)
Elasticsearch
Elasticsearch
ddev get ddev/ddev-elasticsearch
ddev get ddev/ddev-elasticsearch
.ddev/docker-compose.redis.yaml
.ddev/docker-compose.redis.yaml
services:
redis:
image: redis:7-alpine
container_name: ddev-${DDEV_SITENAME}-redis
command: redis-server --appendonly yes
volumes:
- redis-data:/data
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: $DDEV_APPROOT
volumes:
redis-data:
services:
redis:
image: redis:7-alpine
container_name: ddev-${DDEV_SITENAME}-redis
command: redis-server --appendonly yes
volumes:
- redis-data:/data
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: $DDEV_APPROOT
volumes:
redis-data:
Redis Caching Configuration (v13/v14)
Redis缓存配置(v13/v14)
php
<?php
// config/system/additional.php
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['hash']['backend']
= \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['hash']['options'] = [
'hostname' => 'redis',
'port' => 6379,
'database' => 0,
];
php
<?php
// config/system/additional.php
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['hash']['backend']
= \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['hash']['options'] = [
'hostname' => 'redis',
'port' => 6379,
'database' => 0,
];
10. Troubleshooting
10. 故障排查
Full reset (keeps database)
完全重置(保留数据库)
Nuclear option (removes containers and database volume)
彻底清理(删除容器及数据库卷)
ddev delete -O && ddev start
ddev delete -O && ddev start
View specific service logs
查看指定服务的日志
ddev logs -s web
ddev logs -s db
ddev logs -s web
ddev logs -s db
Check what's using a port
检查端口占用情况
Use different ports in config.yaml
在config.yaml中使用其他端口
router_http_port: "8080"
router_https_port: "8443"
router_http_port: "8080"
router_https_port: "8443"
Fix file permissions
修复文件权限
ddev exec chmod -R g+w var/
ddev exec chmod -R g+w public/fileadmin/
ddev exec chmod -R g+w public/typo3temp/
ddev exec chmod -R g+w var/
ddev exec chmod -R g+w public/fileadmin/
ddev exec chmod -R g+w public/typo3temp/
11. Environment Variables
11. 环境变量
Development (default in DDEV)
开发环境(DDEV默认)
TYPO3_CONTEXT=Development
TYPO3_CONTEXT=Development
TYPO3_CONTEXT=Development/Docker
TYPO3_CONTEXT=Development/Docker
.ddev/config.yaml
.ddev/config.yaml
web_environment:
- MY_API_KEY=secret123
- FEATURE_FLAG=enabled
Access in TYPO3:
```php
<?php
$apiKey = getenv('MY_API_KEY');
// or
$apiKey = $_ENV['MY_API_KEY'];
web_environment:
- MY_API_KEY=secret123
- FEATURE_FLAG=enabled
在TYPO3中访问:
```php
<?php
$apiKey = getenv('MY_API_KEY');
// 或者
$apiKey = $_ENV['MY_API_KEY'];
12. Best Practices
12. 最佳实践
- Disable Xdebug when not debugging ()
- Use snapshots instead of full imports for quick state changes
- Mount with Mutagen on macOS for better file sync performance
- Use PHP 8.3 for best performance on v13/v14
- 调试完成后禁用Xdebug()
- 使用快照替代完整数据库导入,快速切换开发状态
- 在macOS上使用Mutagen挂载以提升文件同步性能
- 使用PHP 8.3以获得v13/v14版本的最佳性能
- Commit to repository
- Gitignore for personal overrides
- Document additional setup steps in
- Share database snapshots for consistent development data
- 提交 到代码仓库
- 将 加入.gitignore,用于个人自定义配置
- 在README.md中记录额外的安装步骤
- 共享数据库快照以保证开发数据一致性
- Never expose DDEV ports publicly
- Don't use DDEV in production
- Rotate any sensitive data in development databases
- 不要公开暴露 DDEV端口
- 不要在生产环境中使用 DDEV
- 定期轮换开发数据库中的敏感数据
13. Multi-Version Testing (Extension Development)
13. 多版本测试(扩展开发)
When developing extensions that need to work across multiple TYPO3 versions:
Setup for Multi-Version Testing
多版本测试环境搭建
.ddev/config.yaml
.ddev/config.yaml
name: my-extension
type: php
docroot: ""
php_version: "8.3"
additional_hostnames:
name: my-extension
type: php
docroot: ""
php_version: "8.3"
additional_hostnames:
Install Multiple TYPO3 Versions
安装多个TYPO3版本
Create version-specific directories
创建版本专属目录
Install TYPO3 v13
安装TYPO3 v13
cd v13
ddev composer create "typo3/cms-base-distribution:^13"
cd ..
cd v13
ddev composer create "typo3/cms-base-distribution:^13"
cd ..
Install TYPO3 v14
安装TYPO3 v14
cd v14
ddev composer create "typo3/cms-base-distribution:^14"
cd ..
cd v14
ddev composer create "typo3/cms-base-distribution:^14"
cd ..
Symlink extension
软链接扩展到各个版本目录
ln -s ../../../ v13/packages/my_extension
ln -s ../../../ v14/packages/my_extension
ln -s ../../../ v13/packages/my_extension
ln -s ../../../ v14/packages/my_extension
| Environment | URL |
|---|
| TYPO3 v13 | https://v13.my-extension.ddev.site/typo3/
|
| TYPO3 v14 | https://v14.my-extension.ddev.site/typo3/
|
Default Credentials: admin / Joh316!
| 环境 | 地址 |
|---|
| TYPO3 v13 | https://v13.my-extension.ddev.site/typo3/
|
| TYPO3 v14 | https://v14.my-extension.ddev.site/typo3/
|
默认凭据:admin / Joh316!
Version-Specific Commands
版本专属命令
Run tests on v13
在v13环境运行测试
ddev exec -d /var/www/html/v13 vendor/bin/phpunit
ddev exec -d /var/www/html/v13 vendor/bin/phpunit
Run tests on v14
在v14环境运行测试
ddev exec -d /var/www/html/v14 vendor/bin/phpunit
ddev exec -d /var/www/html/v14 vendor/bin/phpunit
Clear cache for specific version
清空指定版本的缓存
ddev exec -d /var/www/html/v13 vendor/bin/typo3 cache:flush
ddev exec -d /var/www/html/v13 vendor/bin/typo3 cache:flush
Credits & Attribution
致谢与贡献
Thanks to Netresearch DTT GmbH for their contributions to the TYPO3 community.
感谢Netresearch DTT GmbH为TYPO3社区所做的贡献。