From 3d36a33485e6a78344e82d68159dfc1591f2e4e9 Mon Sep 17 00:00:00 2001 From: alex-chevski Date: Wed, 22 Oct 2025 11:04:47 +0300 Subject: [PATCH] ci(config): update --- .env.infra-example | 3 + Makefile | 89 +++++++++++------- docker-compose.yml | 81 ++++++++-------- phpdocker/front-end/Dockerfile | 15 +-- phpdocker/front-end/laravel-worker.conf | 2 +- phpdocker/nginx/nginx.conf | 118 ++++++++---------------- phpdocker/php-fpm/Dockerfile | 23 ++--- phpdocker/php-fpm/laravel-worker.conf | 2 +- phpdocker/worker/Dockerfile | 8 +- 9 files changed, 175 insertions(+), 166 deletions(-) diff --git a/.env.infra-example b/.env.infra-example index d33c253..3a11084 100644 --- a/.env.infra-example +++ b/.env.infra-example @@ -12,3 +12,6 @@ MYSQL_DATABASE="eatvio" MYSQL_USER="eatvio_user" MYSQL_PASSWORD="eatvio_pass_nhbnhb22" MY_APP_GIT_URL="ssh://git@10.55.5.123:222/alex_chevski/eatvio.git" +PROD_DB_USER=readonly_user +PROD_DB_PASS=baexueShosei0AiD +PROD_DB_FILE="latest-prod-db.sql" diff --git a/Makefile b/Makefile index 71d10cd..8e7a496 100644 --- a/Makefile +++ b/Makefile @@ -4,104 +4,131 @@ clone: git clone ${MY_APP_GIT_URL} app start: - docker-compose up -d + docker compose up -d stop: - docker-compose down --remove-orphans -v + docker compose down --remove-orphans -v restart: stop start status: - docker-compose ps + docker compose ps bash: - docker-compose exec php-fpm bash + docker compose exec php-fpm bash worker-restart: - docker-compose exec worker supervisorctl restart laravel-worker:* + docker compose exec worker supervisorctl restart laravel-worker:* clear-images: - docker-compose exec php-fpm ./artisan clear:orphaned-images + docker compose exec php-fpm ./artisan clear:orphaned-images links-images: jdupes -r -1 -l app/storage/app tinker: - docker-compose exec php-fpm ./artisan tinker + docker compose exec php-fpm ./artisan tinker reseed-db: - docker-compose exec php-fpm bash -c "./artisan migrate:refresh; ./artisan db:seed" + docker compose exec php-fpm bash -c "./artisan migrate:refresh; ./artisan db:seed" setup-laravel-key: - docker-compose exec php-fpm php /application/artisan key:generate + docker compose exec php-fpm php /application/artisan key:generate setup-laravel-packages: - docker-compose exec php-fpm composer install + docker compose exec php-fpm composer install copy-laravel-env: - docker-compose exec php-fpm cp /application/.env.example /application/.env + docker compose exec php-fpm cp /application/.env.example /application/.env copy-infra-env: cp .env.infra-example .env run-migrations: - docker-compose exec php-fpm ./artisan migrate + docker compose exec php-fpm ./artisan migrate run-plan-seed: - docker-compose exec php-fpm ./artisan db:seed --class=PlanSeeder + docker compose exec php-fpm ./artisan db:seed --class=PlanSeeder run-user-seed: - docker-compose exec php-fpm ./artisan db:seed --class=UserSeeder + docker compose exec php-fpm ./artisan db:seed --class=UserSeeder seed-db: - docker-compose exec php-fpm ./artisan db:seed + docker compose exec php-fpm ./artisan db:seed fix-permissions: - docker-compose exec php-fpm chown -R www-data:www-data storage + docker compose exec php-fpm chown -R www-data:www-data storage fix-code-style: - docker-compose exec php-fpm vendor/bin/pint + docker compose exec php-fpm composer php-cs-fixer + +fix-view-style: + docker compose exec php-fpm composer run-script fix-blade-fomatting artisan: - docker-compose exec php-fpm ./artisan $(ARGS) + docker compose exec php-fpm ./artisan $(ARGS) mysql-console: - docker-compose exec mysql mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} + docker compose exec mysql mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} + +mysql-test-console: + docker compose exec mysql mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} eatvio_test + +mysql-eatvio-prod-console: + docker compose exec mysql mysql -u readonly_user -pbaexueShosei0AiD eatvio -h 10.55.5.7 -P 1094 + +mysql-dev2-console: + docker compose exec mysql mysql -u readonly_user -pbaexueShosei0AiD eatvio -h 10.55.5.15 -P 1094 + +mysql-save-prod-db: + mysqldump --single-transaction -u${PROD_DB_USER} -p${PROD_DB_PASS} -h10.55.5.7 -P1094 eatvio > ${PROD_DB_FILE} + +mysql-restore-saved-from-prod-db: + docker compose exec mysql bash -c "cat ./${PROD_DB_FILE} | mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}" + +mysql-remove-latest-prod-db: + rm -f ${PROD_DB_FILE} + +mysql-import-db-from-prod: mysql-save-prod-db mysql-restore-saved-from-prod-db mysql-remove-latest-prod-db + +fetch-media-from-prod: + docker compose exec php-fpm ./artisan imports:images-from-prod + +import-prod-data: mysql-import-db-from-prod fetch-media-from-prod start-frontend: - docker-compose exec php-fpm npm run watch + docker compose exec php-fpm npm run watch build-frontend-prod: - docker-compose exec php-fpm npm run production + docker compose exec php-fpm npm run production make-storage-link: - docker-compose exec php-fpm ./artisan storage:link + docker compose exec php-fpm ./artisan storage:link node-frontend-deps: - docker-compose exec php-fpm npm i --legacy-peer-deps + docker compose exec php-fpm npm i --legacy-peer-deps test: - docker-compose exec php-fpm vendor/bin/paratest + docker compose exec php-fpm vendor/bin/paratest fix-insights: - docker-compose exec php-fpm ./artisan insights --fix + docker compose exec php-fpm ./artisan insights --fix insights: - docker-compose exec php-fpm vendor/bin/phpinsights --config-path=./config/insights.php --no-interaction --min-quality=80 --min-complexity=90 --min-architecture=75 --min-style=95 + docker compose exec php-fpm vendor/bin/phpinsights --config-path=./config/insights.php --no-interaction --min-quality=80 --min-complexity=90 --min-architecture=75 --min-style=95 rector: - docker-compose exec php-fpm vendor/bin/rector process --dry-run + docker compose exec php-fpm vendor/bin/rector process --dry-run static-analysis: - docker-compose exec php-fpm composer static-analysis + docker compose exec php-fpm composer static-analysis detect-magic-numbers: - docker-compose exec php-fpm vendor/bin/phpmnd app/ tests/ + docker compose exec php-fpm vendor/bin/phpmnd app/ tests/ ci: fix-code-style detect-magic-numbers test rector insights static-analysis local-ci: - docker-compose exec -T php-fpm composer ci + docker compose exec -T php-fpm composer ci init: clone copy-infra-env restart setup-laravel-packages copy-laravel-env setup-laravel-key run-migrations node-frontend-deps build-frontend-prod fix-permissions make-storage-link - diff --git a/docker-compose.yml b/docker-compose.yml index f43dfdb..cef89a6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ ---- -version: "3.1" services: soketi: image: "quay.io/soketi/soketi:latest-16-alpine" @@ -20,6 +18,12 @@ services: - "traefik.enable=false" restart: always + memcached: + image: "memcached:alpine" + networks: + - ns-eatvio + restart: always + mysql: image: "mysql:8.0" working_dir: /application @@ -46,31 +50,34 @@ services: - TZ=Europe/Moscow depends_on: - mysql + - worker + # - frontend + - memcached + - typesense networks: - ns-eatvio volumes: - "./app:/application" - - "./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/8.2/fpm/conf.d/99-overrides.ini" + - "./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/8.4/fpm/conf.d/99-overrides.ini" + - "./tbank_certs:/tbank_certs" + # - "./eatvio-3467b-firebase-adminsdk-fbsvc-6e149b2a5a.json:/eatvio-3467b-firebase-adminsdk-fbsvc-6e149b2a5a.json" labels: - "traefik.enable=false" restart: always - frontend: - build: phpdocker/front-end - command: "npm run watch" - working_dir: /application - environment: - - TZ=Europe/Moscow - depends_on: - - mysql - - php-fpm - networks: - - ns-eatvio - volumes: - - "./app:/application" - labels: - - "traefik.enable=false" - restart: always + # frontend: + # build: phpdocker/front-end + # command: "npm run dev" + # working_dir: /application + # environment: + # - TZ=Europe/Moscow + # networks: + # - ns-eatvio + # volumes: + # - "./app:/application" + # labels: + # - "traefik.enable=false" + # restart: unless-stopped worker: build: phpdocker/worker @@ -80,13 +87,14 @@ services: command: "service supervisor start" depends_on: - mysql - - php-fpm networks: - ns-eatvio volumes: - "./app:/application" - - "./phpdocker/worker/php-ini-overrides.ini:/etc/php/8.2/fpm/conf.d/99-overrides.ini" + - "./phpdocker/worker/php-ini-overrides.ini:/etc/php/8.4/fpm/conf.d/99-overrides.ini" - "./phpdocker/worker/laravel-worker.conf:/etc/supervisor/conf.d/laravel-worker.conf" + - "./tbank_certs:/tbank_certs" + # - "./eatvio-3467b-firebase-adminsdk-fbsvc-6e149b2a5a.json:/eatvio-3467b-firebase-adminsdk-fbsvc-6e149b2a5a.json" labels: - "traefik.enable=false" restart: always @@ -101,16 +109,18 @@ services: volumes: - "./app:/application" - "./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf" - - "./phpdocker/nginx/alex.eatvio.local+4.pem:/etc/nginx/alex.eatvio.local+4.pem" - - "./phpdocker/nginx/alex.eatvio.local+4-key.pem:/etc/nginx/alex.eatvio.local+4-key.pem" - - "./phpdocker/nginx/socket.alex.eatvio.local+4.pem:/etc/nginx/socket.alex.eatvio.local+4.pem" - - "./phpdocker/nginx/socket.alex.eatvio.local+4-key.pem:/etc/nginx/socket.alex.eatvio.local+4-key.pem" ports: - - "1092:80" - "10443:5000" + - "1092:80" networks: - web - ns-eatvio + labels: + - "traefik.docker.network=web" + - "traefik.enable=true" + - "traefik.frontend.rule=Host:dev2.eatvio.com,socket.eatvio.com" + - "traefik.port=80" + - "traefik.protocol=http" mailhog: image: "mailhog/mailhog" @@ -120,15 +130,17 @@ services: - ns-eatvio typesense: - image: typesense/typesense:26.0 - restart: on-failure - expose: - - 8108 - ports: - - 8108:8108 + image: typesense/typesense:29.0 + restart: always + healthcheck: + test: + - CMD + - wget + - "--no-verbose" + - "--spider" + - "http://localhost:8108/health" networks: - ns-eatvio - - web volumes: - ./typesense-data:/data command: "--data-dir /data --api-key=typesense --enable-cors" @@ -138,6 +150,3 @@ networks: external: true ns-eatvio: external: false - ipam: - config: - - subnet: 172.118.0.0/28 diff --git a/phpdocker/front-end/Dockerfile b/phpdocker/front-end/Dockerfile index 95fc7c4..a70b5d1 100644 --- a/phpdocker/front-end/Dockerfile +++ b/phpdocker/front-end/Dockerfile @@ -1,16 +1,17 @@ -FROM phpdockerio/php:8.2-fpm +FROM phpdockerio/php:8.4-fpm WORKDIR "/application" -RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - +RUN curl -sL https://deb.nodesource.com/setup_24.x | bash - RUN apt-get update && \ apt-get -y --no-install-recommends install \ git \ - php8.2-gd \ - php8.2-mysql \ - php8.2-sqlite3 \ - php8.2-pgsql \ - nodejs && npm install -g npm@10.1.0 \ + php8.4-gd \ + php8.4-mysql \ + php8.4-sqlite3 \ + php8.4-pgsql \ + nodejs && npm install -g npm@latest \ apt-get clean; \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* ENV PATH=node_modules/.bin:$PATH + diff --git a/phpdocker/front-end/laravel-worker.conf b/phpdocker/front-end/laravel-worker.conf index 3826cdc..fa6fcd8 100644 --- a/phpdocker/front-end/laravel-worker.conf +++ b/phpdocker/front-end/laravel-worker.conf @@ -15,7 +15,7 @@ stdout_logfile=/application/storage/logs/worker.log stopwaitsecs=3600 [program:php-fpm] -command=php-fpm8.2 -F +command=php-fpm8.3 -F process_name=%(program_name)s_%(process_num)02d stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 diff --git a/phpdocker/nginx/nginx.conf b/phpdocker/nginx/nginx.conf index b0f771e..5b8463e 100644 --- a/phpdocker/nginx/nginx.conf +++ b/phpdocker/nginx/nginx.conf @@ -2,29 +2,62 @@ upstream phpupstream { server php-fpm:9000 fail_timeout=5s max_fails=5; } +resolver 127.0.0.11 ipv6=off; + +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + server { listen 80; - server_name dev2.eatvio.com; + server_name my-dev.eatvio.test; # change me client_max_body_size 108M; + rewrite_log on; # access_log /var/log/nginx/application.access.log; access_log /dev/stdout; + error_log /dev/stdout info; root /application/public; index index.php; + # Vite HMR WebSocket and assets + # location /_vite { + # proxy_pass http://frontend:5173; + # proxy_http_version 1.1; + # + # # WebSocket support + # proxy_set_header Upgrade $http_upgrade; + # proxy_set_header Connection $connection_upgrade; + # + # # Headers + # proxy_set_header Host $host; + # proxy_set_header X-Real-IP $remote_addr; + # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + # proxy_set_header X-Forwarded-Proto $scheme; + # proxy_set_header X-Forwarded-Host $host; + # + # # Timeouts + # proxy_connect_timeout 7d; + # proxy_send_timeout 7d; + # proxy_read_timeout 7d; + # } + + # Production build assets + location /build { + try_files $uri $uri/ =404; + expires 1y; + add_header Cache-Control "public, immutable"; + } + # try to serve file directly, fallback to index.php location / { try_files $uri /index.php$is_args$args; } - if (!-e $request_filename) { - rewrite ^.*$ /index.php last; - } - - location ~ \.php$ { #resolver 127.0.0.11; #set $upstream php-fpm:9000; @@ -42,77 +75,7 @@ server { server { listen 80; - server_name socket.eatvio.com; - - location / { - proxy_pass http://172.118.0.5:6001; - proxy_read_timeout 60; - proxy_connect_timeout 60; - proxy_redirect off; - - # Allow the use of websockets - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection 'upgrade'; - proxy_set_header Host $host; - proxy_cache_bypass $http_upgrade; - } - - error_log /dev/stdout info; - access_log /dev/stdout; -} - -server { - listen 5000 ssl; - server_name alex.eatvio.local; - - ssl_certificate /etc/nginx/alex.eatvio.local+4.pem; - ssl_certificate_key /etc/nginx/alex.eatvio.local+4-key.pem; - ssl_protocols TLSv1.2; - - charset UTF-8; - - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Host $server_name; - - add_header X-Frame-Options "SAMEORIGIN" always; - add_header X-Content-Type-Options "nosniff" always; - add_header Referrer-Policy "strict-origin-when-cross-origin" always; - - server_tokens off; - client_max_body_size 100M; - root /application/public; - index index.php; - - # try to serve file directly, fallback to index.php - location / { - try_files $uri /index.php$is_args$args; - } - - if (!-e $request_filename) { - rewrite ^.*$ /index.php last; - } - - location ~ \.php$ { - fastcgi_pass phpupstream; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log"; - fastcgi_buffers 16 16k; - fastcgi_buffer_size 32k; - include fastcgi_params; - } -} - -server { - listen 5000 ssl; - server_name socket.alex.eatvio.local; - - ssl_certificate /etc/nginx/socket.alex.eatvio.local+4.pem; - ssl_certificate_key /etc/nginx/socket.alex.eatvio.local+4-key.pem; - ssl_protocols TLSv1.2; + server_name ws-my-dev.eatvio.test; # change me location / { proxy_pass http://soketi:6001; @@ -131,3 +94,4 @@ server { error_log /dev/stdout info; access_log /dev/stdout; } + diff --git a/phpdocker/php-fpm/Dockerfile b/phpdocker/php-fpm/Dockerfile index 7a7acce..b1db016 100644 --- a/phpdocker/php-fpm/Dockerfile +++ b/phpdocker/php-fpm/Dockerfile @@ -1,21 +1,22 @@ -FROM phpdockerio/php:8.2-fpm +FROM phpdockerio/php:8.4-fpm WORKDIR "/application" -RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - +RUN curl -sL https://deb.nodesource.com/setup_24.x | bash - RUN apt-get update && \ apt-get -y --no-install-recommends install \ git \ - php8.2-gd \ - php8.2-mysql \ - php8.2-sqlite3 \ - php8.2-intl \ - php8.2-pgsql \ - php8.2-imagick \ + imagemagick php8.4-imagick \ + php8.4-gd \ + php8.4-mysql \ + php8.4-sqlite3 \ + php8.4-intl \ + php8.4-memcached \ + php8.4-pgsql \ + php8.4-xdebug \ python3-pkg-resources supervisor ffmpeg jpegoptim \ - php8.2-intl \ - python3-pkg-resources supervisor \ - nodejs && npm install -g npm@10.1.0 \ + nodejs && npm install -g npm@latest \ apt-get clean; \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* ENV PATH=node_modules/.bin:$PATH + diff --git a/phpdocker/php-fpm/laravel-worker.conf b/phpdocker/php-fpm/laravel-worker.conf index 3826cdc..fa6fcd8 100644 --- a/phpdocker/php-fpm/laravel-worker.conf +++ b/phpdocker/php-fpm/laravel-worker.conf @@ -15,7 +15,7 @@ stdout_logfile=/application/storage/logs/worker.log stopwaitsecs=3600 [program:php-fpm] -command=php-fpm8.2 -F +command=php-fpm8.3 -F process_name=%(program_name)s_%(process_num)02d stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 diff --git a/phpdocker/worker/Dockerfile b/phpdocker/worker/Dockerfile index f53e712..ace8161 100644 --- a/phpdocker/worker/Dockerfile +++ b/phpdocker/worker/Dockerfile @@ -1,9 +1,13 @@ -FROM phpdockerio/php:8.2-fpm +FROM phpdockerio/php:8.4-fpm WORKDIR "/application" RUN apt-get update && \ apt-get -y --no-install-recommends install git \ - php8.2-gd php8.2-mysql php8.2-sqlite3 php8.2-pgsql php8.2-imagick ffmpeg jpegoptim \ + php8.4-gd php8.4-mysql php8.4-sqlite3 php8.4-pgsql ffmpeg jpegoptim \ + php8.4-intl \ + php8.4-memcached \ + imagemagick php8.4-imagick \ python3-pkg-resources supervisor && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* +