| Requisito | Versión | Notas |
|---|---|---|
| Nix | 2.x+ | Con flakes habilitados |
| Docker | 20.x+ | Para MySQL |
| Docker Compose | 2.x+ | Incluido en Docker Desktop |
# 1. Clonar el repositorio
git clone https://github.com/pascualmg/cohete.git
cd cohete
# 2. Entrar al entorno Nix
nix develop
# 3. Instalar dependencias PHP
composer install
# 4. Configurar variables de entorno
cp .env.example .env
# Editar .env si es necesario
# 5. Levantar MySQL (docker)
make mysql
# 6. Ejecutar migraciones
make migrate
# 7. (Opcional) Cargar datos de prueba
make fixtures
# 8. Arrancar el servidor
make runEl servidor estará disponible en http://localhost:8000
# En Linux/macOS
curl -L https://nixos.org/nix/install | sh
# Habilitar flakes (añadir a ~/.config/nix/nix.conf)
experimental-features = nix-command flakesO usa el Makefile:
make nix-installcd /path/to/cohete
nix developEsto te da:
- PHP 8.3 con extensiones necesarias
- Composer
- PHPUnit, PHPStan, Psalm
- php-cs-fixer
- Xdebug configurado
Si usas direnv, el entorno se carga automáticamente al entrar al directorio.
composer installCopiar el ejemplo y editar:
cp .env.example .envContenido típico de .env:
APP_ENV=dev
# Servidor HTTP
HTTP_SERVER_HOST=0.0.0.0
HTTP_SERVER_PORT=8000
# Rutas
ROUTES_PATH=/home/tu-usuario/src/cohete/src/ddd/Infrastructure/HttpServer/Router/routes.json
# MySQL
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DATABASE=coheteIMPORTANTE: ROUTES_PATH debe ser una ruta absoluta.
El proyecto usa docker-compose para MySQL:
make mysqlEsto ejecuta:
docker-compose up -d mysqlVerificar que está corriendo:
docker ps | grep mysqlConectar manualmente (para debug):
docker exec -it cohete-mysql mysql -uroot -proot cohetemake migrateEsto crea las tablas necesarias (post, etc.).
Otros comandos de Phinx:
# Ver estado de migraciones
nix develop --command bash -c 'vendor/bin/phinx status'
# Rollback última migración
nix develop --command bash -c 'vendor/bin/phinx rollback'
# Rollback todas
nix develop --command bash -c 'vendor/bin/phinx rollback -t 0'make fixturesEsto ejecuta los seeders de Phinx que insertan posts de ejemplo.
make runSalida esperada:
Server running at http://0.0.0.0:8000
El servidor es non-blocking - un solo proceso maneja múltiples conexiones concurrentes.
curl http://localhost:8000/healthRespuesta esperada:
{"status": "ok"}curl http://localhost:8000/post | jqAbre en el navegador:
http://localhost:8000/html/pascualmgPorfolio.html
nix develop --command bash -c 'vendor/bin/phpunit'Requisito: El servidor debe estar corriendo en otra terminal.
# Terminal 1: Servidor
make run
# Terminal 2: Tests
nix develop --command bash -c 'vendor/bin/behat'Ejecutar solo una feature:
nix develop --command bash -c 'vendor/bin/behat features/ImportOrgPost.feature'nix develop --command bash -c 'vendor/bin/phpunit --coverage-html coverage'
# Abrir coverage/index.html en el navegador| Comando | Descripción |
|---|---|
make run | Arranca el servidor HTTP |
make mysql | Levanta MySQL con docker-compose |
make migrate | Ejecuta migraciones de BD |
make fixtures | Carga datos de prueba |
make behat | Ejecuta tests BDD |
make fix | Ejecuta php-cs-fixer |
make test_ab | Benchmark con Apache Bench |
make nix-install | Instala Nix |
MySQL no está corriendo:
make mysql
docker ps # Verificar que está upMigraciones no ejecutadas:
make migratePuerto 8000 ocupado:
# Ver qué proceso usa el puerto
lsof -i :8000
# Matar el proceso
kill -9 <PID>
# O cambiar el puerto en .env
HTTP_SERVER_PORT=8001El servidor no está corriendo. Arrancarlo en otra terminal:
make runLa variable debe ser una ruta absoluta. Verificar en .env:
ROUTES_PATH=/ruta/absoluta/a/routes.jsonVerificar que está habilitado:
php -m | grep xdebugEl entorno Nix ya incluye Xdebug configurado.
cohete/
├── .env # Variables de entorno (no commitear)
├── .env.example # Plantilla de variables
├── .envrc # Para direnv (carga nix develop)
├── composer.json # Dependencias PHP
├── docker-compose.yml # MySQL y RabbitMQ
├── flake.nix # Configuración Nix
├── Makefile # Comandos útiles
├── phpunit.xml # Configuración PHPUnit
├── behat.yml # Configuración Behat
└── phinx.php # Configuración migraciones
- Abrir el proyecto
- Configurar PHP interpreter desde Nix:
- Settings → PHP → CLI Interpreter
- Añadir:
nix develop --command php
- Configurar Xdebug:
- Ya viene configurado en el entorno Nix
- Puerto por defecto: 9003
El proyecto funciona directamente. Para LSP:
;; Usar intelephense o phpactor
(use-package lsp-mode
:hook (php-mode . lsp))Una vez que el entorno está funcionando, puedes:
- Explorar la API:
curl http://localhost:8000/post - Ver el portfolio:
http://localhost:8000/html/pascualmgPorfolio.html - Importar un post: Ver
docs/feature-import-org-posts.org - Leer el código: Empezar por
src/bootstrap.phpyKernel.php