balikobot-api/README.md
2025-01-27 01:24:59 +01:00

2.4 KiB

How to Start with Development

  • Requirements:

    • bash
    • Docker with Docker Compose (v2) command
  • Run:

    bin/develop.sh
    
    • Enjoy your coffee ;-)
    • Symfony will serve the web at [http://localhost:8000] (API documentation)
    • The API endpoint is located at /api/v1/forecast/{cityName}
  • To Try the API:

  • Refresh Datastore:

    docker compose exec php-fpm bin/console nano:fetch-forecast-data -vvv
    
    • In the dev/production environment, refreshing will be handled automatically by batch/v1/CronJob kube-resource or a cron daemon if k8s is unavailable. Monitoring is performed using Prometheus/Sentry (see TODO).

Tests

Run the following command to execute the tests:

docker compose exec php-fpm vendor/bin/phpunit

PHPStan & CodeSniffer

  • Run PHP CodeSniffer:
    docker compose exec php-fpm vendor/bin/phpcs
    
  • Run PHPStan with an increased memory limit:
    docker compose exec php-fpm vendor/bin/phpstan --memory-limit=2G
    

Containers

  • php-fpm - FPM and additional tooling
  • nginx - Serves static content and proxies requests to FPM
  • redis - Redis for caching and data storage

Troubleshooting

  • /var/www/html/vendor does not exist and could not be created: - See UID/GID problems.
  • UID/GID problems -> Try mapping the UID/GID of containers to your local user. Create docker-compose.override.yaml in the root of the project with:
    services:
      nginx:
        build:
          args:
            - UID=<YOUR_UID>
            - GID=<YOUR_GID>
      php-fpm:
        build:
          args:
            - UID=<YOUR_UID>
            - GID=<YOUR_GID>
    
    ... or you can change x-mapped-user-container in docker-compose.yaml.

TODO

  • Clean Redis data.
  • Add a monitoring stack (Prometheus, Otel, Loki, Grafana, etc.).
  • Integrate Sentry.
  • Add monitoring (Sentry Cron or Prometheus) into App\Command::execute (which wraps Commands).
  • Establish deployment pipelines for dev/test and production environments. Configure production settings and Docker images.
  • Integrate CI.

Notes

  • Rate-limiting is managed at the NGINX layer (per IP). Therefore, there is no need to send "banned" traffic to php-fpm and occupy workers.