{"id":24234900,"url":"https://github.com/y-forostiuk/example-docker","last_synced_at":"2025-06-13T18:08:59.410Z","repository":{"id":272446758,"uuid":"916544879","full_name":"y-forostiuk/example-docker","owner":"y-forostiuk","description":"Simple Docker Compose for Laravel project or vanilla PHP","archived":false,"fork":false,"pushed_at":"2025-01-14T13:10:06.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-04T14:47:05.502Z","etag":null,"topics":["docker","docker-compose","laravel","laravel-framework","mysql-docker","nginx-docker","php","php-docker"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"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/y-forostiuk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-14T10:01:49.000Z","updated_at":"2025-01-14T13:10:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"e6e8dec1-41af-42c5-81ce-086b5c34f0a6","html_url":"https://github.com/y-forostiuk/example-docker","commit_stats":null,"previous_names":["y-forostiuk/example-docker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/y-forostiuk/example-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y-forostiuk%2Fexample-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y-forostiuk%2Fexample-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y-forostiuk%2Fexample-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y-forostiuk%2Fexample-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/y-forostiuk","download_url":"https://codeload.github.com/y-forostiuk/example-docker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y-forostiuk%2Fexample-docker/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259695307,"owners_count":22897513,"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":["docker","docker-compose","laravel","laravel-framework","mysql-docker","nginx-docker","php","php-docker"],"created_at":"2025-01-14T17:38:10.252Z","updated_at":"2025-06-13T18:08:59.399Z","avatar_url":"https://github.com/y-forostiuk.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Docker for Laravel project (or vanilla PHP)\n\nЩо є в цьому docker-compose.yml:\n\n- Database. Використовується MySQL v8.0.40\n- Redis v7.4.2, Alpine версія\n- PHPMyAdmin v5.2.1, через проксування Nginx\n- PHP v8.4.2, FPM-Alpine версія\n- Nginx v1.27.3, Alpine версія\n- MailPit v1.21.8\n- Supervisor, винесений в окремий контейнер з PHP v8.4.2-fpm-alpine\n- Schedule, винесений в окремий контейнер з PHP v8.4.2-fpm-alpine\n\n## Детальний опис \"фіч\" контейнерів\n\n* Nginx:\n  * Всі порти для налаштування nginx підставляються автоматично\n  * При запуску контейнеру генерується самопідписаний SSL-сертифікат\n  * Перехід на PHPMyAdmin відбувається через запит до основного порта проекту та шлях /phpmyadmin/, приклад: __https://localhost:8080/phpmyadmin/__\n  * Запити на NodeJS та Vite (для Laravel) переправляються через обробку шляху __/(vite|node_modules)/__\n* Supervisor:\n  * При запуску також стартує CRON на збереження бази даних в *./.docker/backup/[backup-name].sql.qz* який буде зберігати бекапи за останні 3 дні, 3 тижні та 3 місяці\n  * При запуску внутрішнього скрипта *./.docker/daemons/start.sh* буде перевірятися чи запустились контейнери з Redis та MySQL, та ставити виконання на паузу поки ці контейнери не запущені\n* Supervisor та Schedule:\n  * При запуску внутрішнього скрипта *./.docker/daemons/start.sh* буде перевірятися чи створена таблиця міграцій, і в разі відсутності скрипт буде на паузі та очікувати створення міграцій\n* PHP:\n  * При запуску внутрішнього скрипта *./.docker/php/scripts.sh* буде перевірятися чи запустились контейнери з Redis та MySQL, та ставити виконання на паузу поки ці контейнери не запущені\n  * При запуску внутрішнього скрипта *./.docker/php/scripts.sh* буде перевірятися наявність міграцій в базі даних та в разі відсутності запуститься команда:\n    ```bash\n    php artisan migration:fresh --seed\n    ```\n\n## Запуск\n\nДля запуску потрібно буде використовувати прописаний *.env.docker* наступними командами:\n```bash\ndocker compose --env-file='./env.docker' build # Для збірки всього проекту\ndocker compose --env-file='./env.docker' up -d # Для запуску проекту\ndocker compose --env-file='./env.docker' down # Для зупинки проекту \n```\n\n## Запуск без розгортання Laravel\n\nДля уникнення проблем та помилок раджу зробити наступне:\n\n* В *docker-compose.yml* видалити контейнер що відповідає за __schedule__\n* В *.docker/daemons/supervisord.conf.template* видалити наступні програми: __program:queue_redis__, __program:horizon__\n* В *.docker/nginx/default.conf.template* змінити направлення запитів з __root /var/www/html/public/;__ на потрібний для вас шлях\n* В *.docker/php/scripts.sh* видалити наступні конструкції if:\n```bash\n# З 15 по 32 рядок\nif [ ! -d /var/www/html/vendor/laravel ]; then\n  echo \"Laravel installation...\"\n  # Та інший код в цьому блоці\nfi\n```\n```bash\nif [ ! -d /var/www/html/vendor/laravel/horizon ]; then\n    composer require laravel/horizon\n    php artisan horizon:install\nfi\n```\n```bash\nif [ ! -d /var/www/html/vendor/laravel/telescope ]; then\n    composer require laravel/telescope --dev\n    php artisan telescope:install\nfi\n```\n```bash\nif [ ! -f /var/www/html/.env ]; then\n    cp .env.example .env;\n    php artisan key:generate;\nfi\n```\n```bash\n# Перевірка на наявність міграцій\ncheckMigrations=$(php artisan db:table migrations 2\u003e\u00261)\nif echo $checkMigrations | grep -q \"WARN Table \\[migrations\\]\"; then\n    php artisan migrate:fresh --seed;\n    echo \"Executed migrations...\"\nfi\n```\n```bash\necho \"Clear caching configuration...\"\nphp artisan queue:clear\nphp artisan cache:clear\nphp artisan route:clear\nphp artisan view:clear\n```\n* В *.docker/daemons/start.sh* видалити наступні конструкції:\n```bash\ncheckMigrations=$(php artisan db:table migrations 2\u003e\u00261)\nwhile echo $checkMigrations | grep -q \"WARN Table \\[migrations\\]\"; do\n    echo \"Увага: 'Table [migrations]' не існує. Зачекаємо, поки не буде створено...\"\n    sleep 5\n    checkMigrations=$(php artisan db:table migrations 2\u003e\u00261)\ndone\n```\n```bash\n# Також потрібно буде видалити частину скрипта яка запускає Scheduler\nelif [ \"$role\" = \"scheduler\" ]; then\n    while [ true ]\n    do\n        exec su - $uname -c \"php /var/www/html/artisan schedule:run --verbose --no-interaction \u0026 sleep 60\"\n    done\n```\n* Потрібно буде прописати встановлення якогось пакету для форматування PHP коду та налаштувати його виклик замість наступного рядку в *.docker/php/scripts.sh*:\n```bash\necho \"docker exec $php_host composer pint\" \u003e\u003e /var/www/html/.husky/pre-commit\n# Використання вашого пакету, наприклад PHP_CodeSniffer\necho \"docker exec $php_host composer phpcbf\" \u003e\u003e /var/www/html/.husky/pre-commit\n```\n* Змінити шлях публікації логів з */storage/logs/[name].log* на потрібний вам\n\n## Зміна портів Docker контейнерів\n\nДля зміни всіх портів що використовуються контейнерами потрібно буде відредагувати файл *.env.docker*, де є опції налаштування всіх портів, вони мають в кінці назви \"___PORT__\"\n\n## Ліцензія\n\n[MIT](https://choosealicense.com/licenses/mit/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fy-forostiuk%2Fexample-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fy-forostiuk%2Fexample-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fy-forostiuk%2Fexample-docker/lists"}