289 lines
8.0 KiB
Markdown
289 lines
8.0 KiB
Markdown
## Advanced Options
|
|
|
|
### Custom PHP Version
|
|
|
|
If extension requires different PHP version:
|
|
```yaml
|
|
# In .ddev/config.yaml
|
|
php_version: "8.1" # or "8.3"
|
|
```
|
|
|
|
### Database Selection (Tiered Approach)
|
|
|
|
The skill uses **intelligent database selection** based on extension complexity.
|
|
|
|
**🎯 Tier 1: SQLite (Simple Extensions - Development Optimized)**
|
|
|
|
**Recommended for:**
|
|
- ✅ Extensions using only TYPO3 Core APIs (Extbase, FAL, DataHandler)
|
|
- ✅ No custom database tables (ext_tables.sql absent/empty)
|
|
- ✅ No raw SQL queries
|
|
- ✅ Category: plugin, fe, be, misc
|
|
- ✅ Example: rte_ckeditor_image, simple content elements, frontend plugins
|
|
|
|
**Benefits:**
|
|
- ⚡ **Startup**: 5-10 seconds faster per ddev start
|
|
- 💾 **RAM**: 900 MB saved (no MariaDB container)
|
|
- 💿 **Disk**: 744 MB saved (no container image)
|
|
- 🔒 **Isolation**: Perfect v11/v12/v13 separation (separate .sqlite files)
|
|
|
|
**Configuration:**
|
|
```yaml
|
|
# No .ddev/config.yaml database config needed
|
|
# TYPO3 installation uses SQLite automatically
|
|
```
|
|
|
|
**Critical Warnings:**
|
|
- ⚠️ **Development ONLY** - Never use SQLite in production
|
|
- ⚠️ **Switch to MariaDB** if you add custom SQL queries or tables
|
|
- ⚠️ **Final Testing** - Run compatibility tests on MariaDB before release
|
|
|
|
**🔧 Tier 2: MariaDB 10.11 (Complex Extensions - Production Parity)**
|
|
|
|
**Recommended for:**
|
|
- ❌ Extensions with custom database tables (ext_tables.sql present)
|
|
- ❌ Extensions using raw SQL queries
|
|
- ❌ Performance-critical operations
|
|
- ❌ Category: services, module
|
|
- ❌ Unknown complexity (safe default)
|
|
|
|
**Benefits:**
|
|
- ✅ **Production Standard**: 95%+ TYPO3 hosting uses MariaDB
|
|
- ✅ **Extension Compatibility**: 99%+ TYPO3 extensions tested on MariaDB
|
|
- ✅ **Performance**: 13-36% faster than MySQL 8 for transactional workloads
|
|
- ✅ **TYPO3 Ecosystem**: Documentation, tutorials, community standard
|
|
|
|
**Configuration:**
|
|
```yaml
|
|
# In .ddev/config.yaml
|
|
database:
|
|
type: mariadb
|
|
version: "10.11"
|
|
```
|
|
|
|
**🌐 Tier 3: PostgreSQL 16 (Specialized Requirements)**
|
|
|
|
**Recommended for:**
|
|
- 🎯 GIS/spatial data (PostGIS)
|
|
- 🎯 Advanced analytics or complex queries
|
|
- 🎯 Explicit PostgreSQL requirement
|
|
|
|
**Configuration:**
|
|
```yaml
|
|
# In .ddev/config.yaml
|
|
database:
|
|
type: postgres
|
|
version: "16"
|
|
```
|
|
|
|
**🏢 Tier 4: MySQL 8.0 (Corporate/Oracle Ecosystem)**
|
|
|
|
**Recommended for:**
|
|
- 🏢 Corporate environments requiring Oracle integration
|
|
- 🏢 Production specifically uses MySQL 8
|
|
|
|
**Configuration:**
|
|
```yaml
|
|
# In .ddev/config.yaml
|
|
database:
|
|
type: mysql
|
|
version: "8.0"
|
|
```
|
|
|
|
**Auto-Detection Logic:**
|
|
|
|
The skill will analyze your extension and suggest the appropriate tier:
|
|
|
|
```yaml
|
|
SQLite Detection (Tier 1):
|
|
✓ ext_tables.sql: Absent or empty
|
|
✓ Raw SQL patterns: None found
|
|
✓ File size: < 1 MB
|
|
✓ Category: plugin, fe, be, misc
|
|
→ Suggests: SQLite (development-optimized)
|
|
|
|
MariaDB Detection (Tier 2):
|
|
✗ ext_tables.sql: Present with custom tables
|
|
✗ Raw SQL patterns: Found
|
|
✗ File size: > 1 MB
|
|
✗ Category: services, module
|
|
→ Suggests: MariaDB 10.11 (production-realistic)
|
|
|
|
PostgreSQL Detection (Tier 3):
|
|
• Extension name: Contains "postgres", "pgsql", "postgis"
|
|
• composer.json: Requires "typo3/cms-pgsql"
|
|
• Keywords: "GIS", "spatial", "analytics"
|
|
→ Suggests: PostgreSQL 16 (specialized)
|
|
```
|
|
|
|
**Alternative Options:**
|
|
|
|
**MariaDB 11** - Forward-looking performance:
|
|
```yaml
|
|
database:
|
|
type: mariadb
|
|
version: "11.4"
|
|
```
|
|
- Latest features (+40% performance vs 10.11)
|
|
- Forward compatibility testing
|
|
|
|
**For detailed rationale**, see: `docs/adr/0002-mariadb-default-with-database-alternatives.md`
|
|
|
|
### XDebug Setup
|
|
|
|
Enable XDebug for debugging:
|
|
```bash
|
|
ddev xdebug on
|
|
```
|
|
|
|
### Customize TYPO3 Versions
|
|
|
|
Edit `.ddev/docker-compose.web.yaml` and installation scripts to add/remove versions.
|
|
|
|
### Database Access
|
|
|
|
```bash
|
|
# Direct database access
|
|
ddev mysql
|
|
|
|
# Export database
|
|
ddev export-db > backup.sql.gz
|
|
|
|
# Import database
|
|
ddev import-db --file=backup.sql.gz
|
|
```
|
|
|
|
### Optional Services
|
|
|
|
The skill includes optional service templates for enhanced TYPO3 development:
|
|
|
|
#### Valkey / Redis (Caching)
|
|
|
|
Add high-performance caching to TYPO3 using **Valkey** (default) or **Redis** (alternative).
|
|
|
|
**Default: Valkey 8** (Open Source, Future-Proof)
|
|
|
|
```bash
|
|
# Copy Valkey template (default)
|
|
cp .ddev/templates/docker-compose.services.yaml.optional .ddev/docker-compose.services.yaml
|
|
cp .ddev/templates/config.redis.php.example .ddev/config.redis.php.example
|
|
|
|
# Restart DDEV
|
|
ddev restart
|
|
|
|
# Test Valkey (wire-compatible with Redis)
|
|
ddev ssh
|
|
redis-cli -h valkey ping # Should return: PONG
|
|
```
|
|
|
|
**Alternative: Redis 7** (For Legacy Production Parity)
|
|
|
|
```bash
|
|
# Use Redis 7 alternative template
|
|
cp .ddev/templates/docker-compose.services-redis.yaml.optional .ddev/docker-compose.services.yaml
|
|
|
|
# Restart DDEV
|
|
ddev restart
|
|
|
|
# Test Redis
|
|
ddev ssh
|
|
redis-cli -h redis ping # Should return: PONG
|
|
```
|
|
|
|
**Why Valkey Default?**
|
|
|
|
Valkey is wire-protocol compatible with Redis but offers:
|
|
- ✅ **True Open Source**: BSD-3-Clause license (Redis 7.4+ is proprietary)
|
|
- ✅ **Industry Adoption**: AWS, Google Cloud, Oracle backing (Linux Foundation project)
|
|
- ✅ **Smaller Image**: 69.7 MB (vs 100 MB Redis 8, 60.6 MB Redis 7)
|
|
- ✅ **Cost-Effective**: 20-33% cheaper on AWS ElastiCache
|
|
- ✅ **Future-Proof**: Strategic direction for cloud/managed hosting
|
|
|
|
**When to Use Redis 7 Instead:**
|
|
- Your production environment explicitly uses Redis 7.x
|
|
- Corporate policy requires battle-tested technology only (Redis has 15 years vs Valkey 1 year)
|
|
- Exact production-development parity needed with existing infrastructure
|
|
|
|
**Technical Details:**
|
|
|
|
**Valkey**: `valkey/valkey:8-alpine` (69.7 MB)
|
|
**Redis**: `redis:7-alpine` (60.6 MB)
|
|
**Memory**: 256MB with LRU eviction policy
|
|
**Port**: 6379 (same for both)
|
|
|
|
**Configuration**: Both use identical TYPO3 configuration. Add cache backend to `AdditionalConfiguration.php` (see `.ddev/config.redis.php.example`)
|
|
|
|
**For detailed rationale**, see: `docs/adr/0001-valkey-default-with-redis-alternative.md`
|
|
|
|
#### MailPit (Email Testing)
|
|
|
|
Catch all emails sent by TYPO3 for testing:
|
|
|
|
```bash
|
|
# Already included in docker-compose.services.yaml.optional
|
|
# Access Web UI after ddev restart:
|
|
# http://{{DDEV_SITENAME}}.ddev.site:8025
|
|
```
|
|
|
|
**Image**: `axllent/mailpit:latest`
|
|
**SMTP**: `mailpit:1025` (automatically configured in docker-compose.web.yaml)
|
|
|
|
#### Ofelia (TYPO3 Scheduler Automation)
|
|
|
|
Automate TYPO3 scheduler tasks with **ghcr.io/netresearch/ofelia**:
|
|
|
|
```bash
|
|
# Copy Ofelia configuration
|
|
cp .ddev/templates/docker-compose.ofelia.yaml.optional .ddev/docker-compose.ofelia.yaml
|
|
|
|
# Restart DDEV
|
|
ddev restart
|
|
|
|
# View scheduler logs
|
|
docker logs -f ddev-{{DDEV_SITENAME}}-ofelia
|
|
```
|
|
|
|
**Image**: `ghcr.io/netresearch/ofelia:latest` (GitHub Container Registry - TYPO3-optimized fork)
|
|
**Default Schedule**: TYPO3 scheduler runs every 1 minute for all versions
|
|
**Cache Warmup**: Every 1 hour for v13
|
|
|
|
**DDEV Naming**: Uses `docker-compose.*.yaml` naming (DDEV v1.24.8 requirement, not Compose v2 standard)
|
|
**No Version Field**: All service files omit `version:` declaration per Compose v2 spec
|
|
|
|
#### Shell Aliases
|
|
|
|
Add convenient shortcuts:
|
|
|
|
```bash
|
|
# Copy bash additions
|
|
cp .ddev/templates/homeadditions/.bashrc_additions.optional .ddev/homeadditions/.bashrc_additions
|
|
|
|
# Restart DDEV to load aliases
|
|
ddev restart
|
|
|
|
# Available aliases:
|
|
ddev ssh
|
|
t3-scheduler-v11 # Run TYPO3 11 scheduler
|
|
t3-scheduler-v12 # Run TYPO3 12 scheduler
|
|
t3-scheduler-v13 # Run TYPO3 13 scheduler
|
|
t3-scheduler-all # Run scheduler on all versions
|
|
redis # Access Redis CLI
|
|
t3-cache-flush-v13 # Flush TYPO3 13 cache
|
|
```
|
|
|
|
#### Complete Services Documentation
|
|
|
|
For detailed service configuration, troubleshooting, and performance tuning:
|
|
|
|
```bash
|
|
# Copy services README
|
|
cp .ddev/templates/README-SERVICES.md.optional .ddev/README-SERVICES.md
|
|
```
|
|
|
|
**Important Notes**:
|
|
- DDEV v1.24.8 requires `docker-compose.*.yaml` naming (auto-loads from `.ddev/`)
|
|
- Ofelia image: `ghcr.io/netresearch/ofelia:latest` (not Docker Hub)
|
|
- Ofelia command: `daemon --docker-events` (not `--docker`)
|
|
- Redis config must NOT be `.yaml` (DDEV tries to parse it as config)
|
|
|