ci(config): update

This commit is contained in:
2025-10-22 11:04:47 +03:00
parent a437620a80
commit 3d36a33485
9 changed files with 175 additions and 166 deletions

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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

View File

@@ -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/*