forked from eatvio/eatvio-infra
Merge branch 'eatvio-main'
This commit is contained in:
@@ -11,6 +11,7 @@ MYSQL_ROOT_PASSWORD="nhbnhb22"
|
||||
MYSQL_DATABASE="eatvio"
|
||||
MYSQL_USER="eatvio_user"
|
||||
MYSQL_PASSWORD="eatvio_pass_nhbnhb22"
|
||||
<<<<<<< HEAD
|
||||
MY_APP_GIT_URL="ssh://git@10.55.5.123:222/alex_chevski/eatvio.git"
|
||||
PROD_DB_USER=readonly_user
|
||||
PROD_DB_PASS=baexueShosei0AiD
|
||||
@@ -18,3 +19,11 @@ PROD_DB_FILE="latest-prod-db.sql"
|
||||
DEV2_DB_USER=readonly_user
|
||||
DEV2_DB_PASS=baexueShosei0AiD
|
||||
DEV2_DB_FILE="latest-dev2-db.sql"
|
||||
=======
|
||||
PROD_DB_USER=some_user
|
||||
PROD_DB_PASS=strong_pass
|
||||
PROD_DB_FILE="latest-prod-db.sql"
|
||||
PROD_DB_HOST="10.nn.n.n"
|
||||
PROD_DB_PORT="10nn"
|
||||
MY_APP_GIT_URL="ssh://git@10.55.5.123:222/eatvio/eatvio.git"
|
||||
>>>>>>> eatvio-main
|
||||
|
||||
38
.gitea/workflows/test_infra.yaml
Normal file
38
.gitea/workflows/test_infra.yaml
Normal file
@@ -0,0 +1,38 @@
|
||||
name: "infra 0.0.0.1"
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main-ci
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
name: Test
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Add the SSH key to known_hosts
|
||||
env:
|
||||
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
|
||||
run: |
|
||||
ssh-agent -a $SSH_AUTH_SOCK > /dev/null
|
||||
mkdir -p ~/.ssh
|
||||
ssh-add - <<< "${{ vars.SSH_PRIVATE_KEY }}" || true
|
||||
ssh-keyscan -p 222 10.55.5.123 >> ~/.ssh/known_hosts || true
|
||||
chmod 644 ~/.ssh/known_hosts || true
|
||||
chmod 700 ~/.ssh || true
|
||||
|
||||
- name: init containers
|
||||
env:
|
||||
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y apt-transport-https ca-certificates curl software-properties-common docker.io
|
||||
curl -L "https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
chmod +x /usr/local/bin/docker-compose
|
||||
docker-compose --version
|
||||
make init
|
||||
|
||||
- name: run CI
|
||||
run: make ci
|
||||
|
||||
129
Makefile
129
Makefile
@@ -1,19 +1,35 @@
|
||||
include .env.infra-example
|
||||
include .env
|
||||
|
||||
clone:
|
||||
git clone ${MY_APP_GIT_URL} app
|
||||
|
||||
rm-promo-image-assets:
|
||||
docker compose exec php-fpm rm -rf application/database/assets/images
|
||||
|
||||
clone-promo-image:
|
||||
git clone http://gitea.office.local:3000/alex_chevski/eatvio_images_assets app/database/assets/images
|
||||
|
||||
reinit-promo-images: rm-promo-image-assets clone-promo-image
|
||||
|
||||
start:
|
||||
docker compose up -d
|
||||
|
||||
stop:
|
||||
docker compose down --remove-orphans -v
|
||||
docker compose down
|
||||
|
||||
restart: stop start
|
||||
|
||||
status:
|
||||
docker compose ps
|
||||
|
||||
rm-promo-image-assets:
|
||||
rm -rf app/database/assets/images
|
||||
|
||||
clone-promo-image:
|
||||
git clone http://gitea.office.local:3000/alex_chevski/eatvio_images_assets app/database/assets/images
|
||||
|
||||
reinit-promo-images: rm-promo-image-assets clone-promo-image
|
||||
|
||||
bash:
|
||||
docker compose exec php-fpm bash
|
||||
|
||||
@@ -60,10 +76,10 @@ fix-permissions:
|
||||
docker compose exec php-fpm chown -R www-data:www-data storage
|
||||
|
||||
fix-code-style:
|
||||
docker compose exec php-fpm composer php-cs-fixer
|
||||
docker compose exec -T php-fpm bash -c "vendor/bin/pint --parallel; composer run fix-blade-fomatting"
|
||||
|
||||
fix-view-style:
|
||||
docker compose exec php-fpm composer run-script fix-blade-fomatting
|
||||
fix-blade-formatting:
|
||||
docker compose exec -T php-fpm composer run test-blade-formatting
|
||||
|
||||
artisan:
|
||||
docker compose exec php-fpm ./artisan $(ARGS)
|
||||
@@ -71,50 +87,28 @@ artisan:
|
||||
mysql-console:
|
||||
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-dump-local:
|
||||
docker compose exec mysql mysqldump --single-transaction --skip-opt -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}
|
||||
|
||||
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-restore:
|
||||
docker compose exec mysql bash -c "mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} < /application/eatvio-restore.sql"
|
||||
|
||||
mysql-save-prod-db:
|
||||
mysqldump --single-transaction -u${PROD_DB_USER} -p${PROD_DB_PASS} -h10.55.5.7 -P1094 eatvio > ${PROD_DB_FILE}
|
||||
mysqldump --single-transaction -u${PROD_DB_USER} -p${PROD_DB_PASS} -h${PROD_DB_HOST} -P${PROD_DB_PORT} 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-restore-saved-from-dev2-db:
|
||||
docker compose exec mysql bash -c "cat ./${DEV2_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
|
||||
|
||||
mysql-save-dev2-db:
|
||||
mysqldump --single-transaction -u${DEV2_DB_USER} -p${DEV2_DB_PASS} -h10.55.5.15 -P1094 eatvio > ${DEV2_DB_FILE}
|
||||
|
||||
mysql-remove-latest-dev2-db:
|
||||
rm -f ${DEV2_DB_FILE}
|
||||
|
||||
mysql-import-db-from-dev2: mysql-save-dev2-db mysql-restore-saved-from-dev2-db mysql-remove-latest-dev2-db
|
||||
|
||||
fetch-media-from-prod:
|
||||
docker compose exec php-fpm ./artisan imports:images-from-prod
|
||||
|
||||
fetch-media-from-dev2:
|
||||
docker compose exec php-fpm ./artisan imports:images-from-dev2
|
||||
|
||||
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 frontend npm run watch
|
||||
|
||||
build-frontend-prod:
|
||||
docker compose exec php-fpm npm run production
|
||||
docker compose exec php-fpm bash -c "npm install -g npm@latest; npm run production"
|
||||
|
||||
make-storage-link:
|
||||
docker compose exec php-fpm ./artisan storage:link
|
||||
@@ -122,30 +116,73 @@ make-storage-link:
|
||||
node-frontend-deps:
|
||||
docker compose exec php-fpm npm i --legacy-peer-deps
|
||||
|
||||
test:
|
||||
docker compose exec php-fpm vendor/bin/paratest
|
||||
paratest-bin:
|
||||
docker compose exec -u www-data php-fpm vendor/bin/paratest
|
||||
|
||||
paratest-artisan:
|
||||
docker compose exec -u www-data -T php-fpm ./artisan test --parallel --stop-on-failure --env=testing
|
||||
|
||||
fix-insights:
|
||||
docker compose exec php-fpm ./artisan insights --fix
|
||||
docker compose exec php-fpm vendor/bin/phpinsights --fix --config-path=./config/insights.php --no-interaction --min-quality=80 --min-complexity=90 --min-architecture=75 --min-style=95
|
||||
|
||||
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 -T php-fpm vendor/bin/phpinsights --config-path=./config/insights.php --no-interaction --min-quality=80 --min-complexity=90 --min-architecture=75 --min-style=95 --flush-cache
|
||||
|
||||
rector:
|
||||
docker compose exec php-fpm vendor/bin/rector process --dry-run
|
||||
docker compose exec -T php-fpm vendor/bin/rector process --dry-run
|
||||
|
||||
static-analysis:
|
||||
docker compose exec php-fpm composer static-analysis
|
||||
docker compose exec -T php-fpm composer static-analysis
|
||||
|
||||
detect-magic-numbers:
|
||||
docker compose exec php-fpm vendor/bin/phpmnd app/ tests/
|
||||
docker compose exec -u www-data -T php-fpm vendor/bin/phpmnd app/ tests/
|
||||
|
||||
ci: fix-code-style detect-magic-numbers test rector insights static-analysis
|
||||
fix-web-permissions:
|
||||
docker compose exec -T php-fpm chown -R www-data:www-data bootstrap/cache storage
|
||||
|
||||
local-ci:
|
||||
docker compose exec -T php-fpm composer ci
|
||||
clear-app-cache:
|
||||
docker compose exec php-fpm ./artisan optimize:clear
|
||||
|
||||
build-front:
|
||||
docker compose exec php-fpm bash -c "npm install -g npm@latest;npm run production"
|
||||
|
||||
reindex-search:
|
||||
docker compose exec php-fpm ./artisan search:init
|
||||
|
||||
composer-do:
|
||||
docker compose exec php-fpm composer dump-auto
|
||||
|
||||
run-once-oprations:
|
||||
docker compose exec php-fpm bash -c "./artisan operations:process"
|
||||
|
||||
reload-wokers:
|
||||
docker-compose exec worker ./artisan queue:restart
|
||||
|
||||
after-deploy-light: composer-do run-migrations run-once-oprations clear-app-cache build-front fix-permissions reload-wokers
|
||||
|
||||
after-deploy: composer-do clear-app-cache run-migrations run-once-oprations build-front fix-permissions reload-wokers reindex-search
|
||||
|
||||
# ci: fix-web-permissions fix-code-style detect-magic-numbers test rector insights static-analysis fix-web-permissions
|
||||
ci: fix-web-permissions detect-magic-numbers test rector insights static-analysis fix-web-permissions
|
||||
|
||||
local-composer-ci:
|
||||
docker compose exec php-fpm composer ci
|
||||
|
||||
test: fix-web-permissions paratest-artisan
|
||||
|
||||
test-file-by-path:
|
||||
docker compose exec php-fpm ./artisan test --env=testing $(ARGS)
|
||||
|
||||
local-ci: fix-web-permissions local-composer-ci fix-web-permissions
|
||||
|
||||
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
|
||||
|
||||
artisan-mcp:
|
||||
@docker compose exec -T php-fpm ./artisan boost:mcp
|
||||
rebuild-services:
|
||||
docker compose build --no-cache
|
||||
|
||||
pull-services:
|
||||
docker compose pull
|
||||
|
||||
force-rebuild-services: stop rebuild-services pull-services start
|
||||
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@ services:
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||
MYSQL_USER: ${MYSQL_USER}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
TZ: "Europe/Moscow"
|
||||
ports:
|
||||
- "1094:3306"
|
||||
labels:
|
||||
@@ -52,7 +51,7 @@ services:
|
||||
depends_on:
|
||||
- mysql
|
||||
- worker
|
||||
# - frontend
|
||||
- frontend
|
||||
- memcached
|
||||
- typesense
|
||||
networks:
|
||||
@@ -66,19 +65,20 @@ services:
|
||||
- "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
|
||||
frontend:
|
||||
build: phpdocker/front-end
|
||||
command: "npm run dev"
|
||||
working_dir: /application
|
||||
environment:
|
||||
- TZ=Europe/Moscow
|
||||
- CHOKIDAR_USEPOLLING=true
|
||||
networks:
|
||||
- ns-eatvio
|
||||
volumes:
|
||||
- "./app:/application"
|
||||
labels:
|
||||
- "traefik.enable=false"
|
||||
restart: unless-stopped
|
||||
|
||||
worker:
|
||||
build: phpdocker/worker
|
||||
@@ -151,3 +151,4 @@ networks:
|
||||
external: true
|
||||
ns-eatvio:
|
||||
external: false
|
||||
|
||||
|
||||
@@ -25,26 +25,26 @@ server {
|
||||
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;
|
||||
# }
|
||||
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 {
|
||||
@@ -67,18 +67,8 @@ server {
|
||||
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 256k;
|
||||
fastcgi_buffer_size 512k;
|
||||
fastcgi_busy_buffers_size 1M;
|
||||
|
||||
fastcgi_buffering off;
|
||||
|
||||
# Таймауты FastCGI
|
||||
fastcgi_read_timeout 300s;
|
||||
fastcgi_connect_timeout 300s;
|
||||
fastcgi_send_timeout 300s;
|
||||
|
||||
fastcgi_buffers 16 16k;
|
||||
fastcgi_buffer_size 32k;
|
||||
include fastcgi_params;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,3 +13,43 @@ numprocs=2
|
||||
redirect_stderr=true
|
||||
stdout_logfile=/application/storage/logs/worker.log
|
||||
stopwaitsecs=3600
|
||||
|
||||
[program:laravel-schedule]
|
||||
process_name=%(program_name)s_%(process_num)02d
|
||||
command=php /application/artisan schedule:work
|
||||
directory=/application
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stopasgroup=true
|
||||
killasgroup=true
|
||||
user=www-data
|
||||
numprocs=1
|
||||
redirect_stderr=true
|
||||
stdout_logfile=/application/storage/logs/schedule.log
|
||||
stopwaitsecs=3600
|
||||
|
||||
[program:laravel-feed-generation-worker]
|
||||
process_name=%(program_name)s_%(process_num)02d
|
||||
command=php /application/artisan queue:work --queue=feed-generation --sleep=1 --tries=3 --timeout=1800 --max-time=3600
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stopasgroup=true
|
||||
killasgroup=true
|
||||
user=www-data
|
||||
numprocs=8
|
||||
redirect_stderr=true
|
||||
stdout_logfile=/application/storage/logs/feed-generation-worker.log
|
||||
stopwaitsecs=3600
|
||||
|
||||
[program:laravel-scout-worker]
|
||||
process_name=%(program_name)s_%(process_num)02d
|
||||
command=php /application/artisan queue:work --queue=scout --sleep=1 --tries=3 --timeout=300 --max-time=3600
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stopasgroup=true
|
||||
killasgroup=true
|
||||
user=www-data
|
||||
numprocs=8
|
||||
redirect_stderr=true
|
||||
stdout_logfile=/application/storage/logs/scout-worker.log
|
||||
stopwaitsecs=3600
|
||||
|
||||
Reference in New Issue
Block a user