{"id":16776833,"url":"https://github.com/clementvtrd/boilerplate-hexagonal","last_synced_at":"2025-03-22T00:31:00.275Z","repository":{"id":54364815,"uuid":"521348557","full_name":"clementvtrd/boilerplate-hexagonal","owner":"clementvtrd","description":"A boilerplate with an hexagonal CQRS Symfony base project","archived":false,"fork":false,"pushed_at":"2024-06-07T04:57:21.000Z","size":3924,"stargazers_count":13,"open_issues_count":7,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2024-06-09T06:01:21.915Z","etag":null,"topics":["boilerplate","cqrs-pattern","docker","hexagonal-architecture","symfony"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/clementvtrd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-04T17:01:13.000Z","updated_at":"2024-06-09T06:01:26.535Z","dependencies_parsed_at":"2023-02-17T10:15:49.503Z","dependency_job_id":"46dd1498-6c99-49d7-a01a-e9ead99e33c9","html_url":"https://github.com/clementvtrd/boilerplate-hexagonal","commit_stats":null,"previous_names":["clementvtrd/boilerplate-hexagonal","clementvtrd/boilerplate-graphql"],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clementvtrd%2Fboilerplate-hexagonal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clementvtrd%2Fboilerplate-hexagonal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clementvtrd%2Fboilerplate-hexagonal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clementvtrd%2Fboilerplate-hexagonal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/clementvtrd","download_url":"https://codeload.github.com/clementvtrd/boilerplate-hexagonal/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244890102,"owners_count":20527030,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["boilerplate","cqrs-pattern","docker","hexagonal-architecture","symfony"],"created_at":"2024-10-13T07:11:04.555Z","updated_at":"2025-03-22T00:31:00.267Z","avatar_url":"https://github.com/clementvtrd.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![.github/workflows/backend.yaml](https://github.com/clementvtrd/boilerplate-hexagonal/actions/workflows/backend.yaml/badge.svg)](https://github.com/clementvtrd/boilerplate-hexagonal/actions/workflows/backend.yaml)\n[![.github/workflows/frontend.yaml](https://github.com/clementvtrd/boilerplate-hexagonal/actions/workflows/frontend.yaml/badge.svg)](https://github.com/clementvtrd/boilerplate-hexagonal/actions/workflows/frontend.yaml)\n[![.github/workflows/services.yaml](https://github.com/clementvtrd/boilerplate-hexagonal/actions/workflows/services.yaml/badge.svg)](https://github.com/clementvtrd/boilerplate-hexagonal/actions/workflows/services.yaml)\n[![Dependabot Updates](https://github.com/clementvtrd/boilerplate-hexagonal/actions/workflows/dependabot/dependabot-updates/badge.svg)](https://github.com/clementvtrd/boilerplate-hexagonal/actions/workflows/dependabot/dependabot-updates)\n\n# Hexagonal boilerplate\n\n## Hexagonal architecture\n\nThe hexagonal architecture is a software architectural pattern that promotes a clear separation of concerns and decoupling of components. It emphasizes the idea of organizing an application into concentric layers, with the core business logic at the center, surrounded by layers representing external interfaces, such as UI, databases, and external services.\n\nIn the hexagonal architecture, the core business logic is independent of the external infrastructure and frameworks. It is encapsulated within the innermost layer and is unaware of how the application interacts with external systems. Instead, the external systems are abstracted through interfaces called \"ports.\" Adapters are responsible for implementing these ports and bridging the gap between the core business logic and the external systems.\n\nThis architecture enables better testability, maintainability, and flexibility. It allows for easy swapping of external components, as long as they adhere to the defined ports' interfaces. Changes in the external systems do not impact the core business logic, making the application more resilient to modifications and evolutions.\n\nOverall, the hexagonal architecture promotes a modular, clean, and adaptable design by separating concerns and dependencies, leading to a more robust and maintainable software system..\n\n## Stack\n\nThis boilerplate is built with Symfony for learning purpose. You can replace each part at your convenience.\n\nWe will use Docker to make a development environment with 5 services:\n\n- Traefik: as a reverse proxy\n- Nginx + PHP: serves the Symfony API\n- MySQL: to store our data\n- RabbitMQ: messaging queue system (in pair with Symfony Messenger)\n- Node: develop, build and serve NextJS application\n\n## Installation\n\n### Docker\n\nThis boilerplate was built around with [Orbstack](https://orbstack.dev) (which can replace Docker Desktop on MacOS).\n\n### Taskfile\n\nThe project uses [Taskfile](https://taskfile.dev/) to create CLI shortcuts. You can install it via its website, they also provide a convenient script to install it on common systems:\n\n#### Linux\n\n```sh\nsudo sh -c \"$(curl --location https://taskfile.dev/install.sh)\" -- -d -b /usr/local/bin\ntask\n```\n\n#### MacOS\n\n```sh\nbrew install go-task\ntask\n```\n\n#### Windows\n\n```sh\nwinget install Task.Task # you may need to restart your session\ntask\n```\n\n---\n\nYou can now use `task --list` to show all the available commands\n\n## URLs\n\n- [NextJS frontend](https://app.localhost)\n- [Symfony API](https://api.app.localhost)\n- [Traefik dashboard](https://traefik.app.localhost)\n- [Rabbit MQ monitor](https://rabbitmq.app.localhost)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclementvtrd%2Fboilerplate-hexagonal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclementvtrd%2Fboilerplate-hexagonal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclementvtrd%2Fboilerplate-hexagonal/lists"}