From f2f4e2cdd7f7a0afa07c9fcbc3b5f014185ea774 Mon Sep 17 00:00:00 2001 From: ssww23 Date: Tue, 17 Mar 2026 02:13:35 +0300 Subject: [PATCH] 2 --- .env.example | 14 +++---- DEPLOY.md | 40 ++++++++++--------- README.md | 6 ++- .../Controllers/Shop/ContactController.php | 2 +- composer.json | 2 +- config/seo.php | 3 +- config/shop.php | 6 +-- deploy/nginx/{pc-shop.conf => tehnobox.conf} | 4 +- .../{pc-shop.http.conf => tehnobox.http.conf} | 4 +- package-lock.json | 2 +- package.json | 1 + resources/views/layouts/shop.blade.php | 2 +- 12 files changed, 45 insertions(+), 41 deletions(-) rename deploy/nginx/{pc-shop.conf => tehnobox.conf} (95%) rename deploy/nginx/{pc-shop.http.conf => tehnobox.http.conf} (91%) diff --git a/.env.example b/.env.example index b8a428b..6d16041 100644 --- a/.env.example +++ b/.env.example @@ -1,18 +1,18 @@ -APP_NAME="PC Shop" +APP_NAME="Tehnobox" APP_ENV=local APP_KEY= APP_DEBUG=true -APP_URL=http://localhost +APP_URL=http://localhost:8080 APP_LOCALE=ru APP_FALLBACK_LOCALE=ru APP_FAKER_LOCALE=ru_RU -SHOP_COMPANY_NAME="PC Shop" +SHOP_COMPANY_NAME="Tehnobox" SHOP_COMPANY_DESCRIPTION="Интернет-магазин компьютерных комплектующих, ноутбуков и периферии. Подбор, сравнение и заказ в одном месте." SHOP_CONTACT_PHONE="+7 900 000 00 00" -SHOP_CONTACT_EMAIL="support@pcshop.test" -SHOP_CONTACT_TELEGRAM="@pcshop_support" +SHOP_CONTACT_EMAIL="support@tehnobox.test" +SHOP_CONTACT_TELEGRAM="@tehnobox_support" SHOP_TELEGRAM_BOT_TOKEN= SHOP_TELEGRAM_CHAT_ID= SHOP_CONTACT_ADDRESS="ул. Технопарк, 24, Техноград" @@ -44,8 +44,8 @@ LOG_LEVEL=debug DB_CONNECTION=pgsql DB_HOST=127.0.0.1 DB_PORT=5432 -DB_DATABASE=pc-shop -DB_USERNAME=workeruser +DB_DATABASE=tehnobox +DB_USERNAME=tehnobox DB_PASSWORD= SESSION_DRIVER=database diff --git a/DEPLOY.md b/DEPLOY.md index f625d2f..2336759 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -1,11 +1,11 @@ -# Деплой PC Shop +# Деплой Tehnobox В репозитории подготовлены production-артефакты: - `scripts/deploy.sh` - полный деплой в текущем checkout. - `scripts/update-from-github.sh` - `git pull` + production-деплой. -- `deploy/nginx/pc-shop.http.conf` - HTTP-конфиг для первого запуска и выпуска сертификата. -- `deploy/nginx/pc-shop.conf` - финальный HTTPS-конфиг для Nginx. +- `deploy/nginx/tehnobox.http.conf` - HTTP-конфиг для первого запуска и выпуска сертификата. +- `deploy/nginx/tehnobox.conf` - финальный HTTPS-конфиг для Nginx. - `.github/workflows/deploy.yml` - автодеплой по SSH из GitHub Actions. ## 1. Что должно быть на сервере @@ -24,8 +24,8 @@ ```bash cd /var/www -git clone git@github.com:YOUR_ACCOUNT/pc-shop.git -cd pc-shop +git clone git@github.com:YOUR_ACCOUNT/tehnobox.git +cd tehnobox cp .env.example .env # заполните .env и переключите его на production значения @@ -34,6 +34,8 @@ php artisan key:generate --force bash scripts/deploy.sh ``` +Production-порт для сайта здесь не `3000`: проект рассчитан на `Nginx + PHP-FPM`, то есть внешний трафик идёт через `80/443`. Если `Gitea` уже работает на `3000`, это не конфликтует с сайтом. + Опционально добавить демо-данные: ```bash @@ -47,13 +49,13 @@ php artisan db:seed --class=ShopCatalogSeeder ```dotenv APP_ENV=production APP_DEBUG=false -APP_URL=https://shop.example.com +APP_URL=https://tehnobox.shop DB_CONNECTION=pgsql DB_HOST=127.0.0.1 DB_PORT=5432 -DB_DATABASE=pc-shop -DB_USERNAME=pc_shop +DB_DATABASE=tehnobox +DB_USERNAME=tehnobox DB_PASSWORD=secret SESSION_DRIVER=database @@ -119,14 +121,14 @@ bash scripts/update-from-github.sh release В репозитории два шаблона: -- `deploy/nginx/pc-shop.http.conf` - стартовый HTTP-конфиг для первого запуска и `/.well-known/acme-challenge/` -- `deploy/nginx/pc-shop.conf` - основной HTTPS-конфиг с редиректом `80 -> 443` +- `deploy/nginx/tehnobox.http.conf` - стартовый HTTP-конфиг для первого запуска и `/.well-known/acme-challenge/` +- `deploy/nginx/tehnobox.conf` - основной HTTPS-конфиг с редиректом `80 -> 443` До выпуска сертификата включите именно HTTP-шаблон: ```bash -sudo cp deploy/nginx/pc-shop.http.conf /etc/nginx/sites-available/pc-shop.conf -sudo ln -s /etc/nginx/sites-available/pc-shop.conf /etc/nginx/sites-enabled/pc-shop.conf +sudo cp deploy/nginx/tehnobox.http.conf /etc/nginx/sites-available/tehnobox.conf +sudo ln -s /etc/nginx/sites-available/tehnobox.conf /etc/nginx/sites-enabled/tehnobox.conf sudo nginx -t sudo systemctl reload nginx ``` @@ -142,17 +144,17 @@ sudo systemctl reload nginx ## 7. HTTPS и сертификат 1. Убедитесь, что домен уже указывает на сервер и порт `80` открыт. -2. В `.env` укажите `APP_URL=https://shop.example.com`. +2. В `.env` укажите `APP_URL=https://tehnobox.shop`. 3. Выпустите сертификат через `certbot`: ```bash -sudo certbot certonly --webroot -w /var/www/pc-shop/public -d shop.example.com -d www.shop.example.com +sudo certbot certonly --webroot -w /var/www/tehnobox/public -d tehnobox.shop -d www.tehnobox.shop ``` 4. После успешного выпуска переключите nginx на HTTPS-шаблон: ```bash -sudo cp deploy/nginx/pc-shop.conf /etc/nginx/sites-available/pc-shop.conf +sudo cp deploy/nginx/tehnobox.conf /etc/nginx/sites-available/tehnobox.conf sudo nginx -t sudo systemctl reload nginx ``` @@ -163,7 +165,7 @@ sudo systemctl reload nginx composer run deploy ``` -Что нужно проверить в `deploy/nginx/pc-shop.conf`: +Что нужно проверить в `deploy/nginx/tehnobox.conf`: - `server_name` - `fastcgi_pass` @@ -175,7 +177,7 @@ composer run deploy Если вы предпочитаете, чтобы `certbot` сам правил nginx, можно вместо `certonly --webroot` использовать: ```bash -sudo certbot --nginx -d shop.example.com -d www.shop.example.com +sudo certbot --nginx -d tehnobox.shop -d www.tehnobox.shop ``` Но для предсказуемого деплоя удобнее оставить конфиг под контролем репозитория и использовать `certonly`. @@ -200,7 +202,7 @@ sudo certbot --nginx -d shop.example.com -d www.shop.example.com - `DEPLOY_SSH_KEY` - `DEPLOY_KNOWN_HOSTS` -`DEPLOY_PATH` должен указывать на директорию проекта на сервере, например `/var/www/pc-shop`. +`DEPLOY_PATH` должен указывать на директорию проекта на сервере, например `/var/www/tehnobox`. `DEPLOY_KNOWN_HOSTS` можно получить так: @@ -218,7 +220,7 @@ php artisan route:list Проверьте страницы: -- `https://shop.example.com` +- `https://tehnobox.shop` - `/` - `/catalog` - `/cart` diff --git a/README.md b/README.md index ace0009..19a64cf 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# PC Shop +# Tehnobox Laravel 12 интернет-магазин компьютерных комплектующих с витриной, корзиной, избранным, сравнением и админкой. @@ -11,9 +11,11 @@ npm install php artisan key:generate php artisan migrate npm run build -php artisan serve +php artisan serve --host=0.0.0.0 --port=8080 ``` +Локально витрина открывается на `http://localhost:8080`. Это не пересекается с `Gitea`, если она уже заняла `3000`. + ## Деплой Production-поток и обновление с GitHub описаны в [DEPLOY.md](DEPLOY.md). diff --git a/app/Http/Controllers/Shop/ContactController.php b/app/Http/Controllers/Shop/ContactController.php index c1f9490..704bb33 100644 --- a/app/Http/Controllers/Shop/ContactController.php +++ b/app/Http/Controllers/Shop/ContactController.php @@ -55,7 +55,7 @@ class ContactController extends Controller private function buildTelegramMessage(array $data, Request $request): string { - $siteName = (string) config('shop.company_name', config('app.name', 'PC Shop')); + $siteName = (string) config('shop.company_name', config('app.name', 'Tehnobox')); return implode("\n", [ 'Новая заявка с формы контактов', diff --git a/composer.json b/composer.json index 0585a1b..e63e0da 100644 --- a/composer.json +++ b/composer.json @@ -50,7 +50,7 @@ ], "dev": [ "Composer\\Config::disableProcessTimeout", - "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1 --timeout=0\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others" + "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve --host=0.0.0.0 --port=8080\" \"php artisan queue:listen --tries=1 --timeout=0\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others" ], "test": [ "@php artisan config:clear --ansi", diff --git a/config/seo.php b/config/seo.php index a4b9b25..e720aa3 100644 --- a/config/seo.php +++ b/config/seo.php @@ -1,7 +1,7 @@ env('SEO_SITE_NAME', env('APP_NAME', 'PC Shop')), + 'site_name' => env('SEO_SITE_NAME', env('APP_NAME', 'Tehnobox')), 'default_title' => env('SEO_DEFAULT_TITLE', 'Интернет-магазин компьютерных комплектующих'), 'default_description' => env( 'SEO_DEFAULT_DESCRIPTION', @@ -13,4 +13,3 @@ return [ ), 'default_image' => env('SEO_DEFAULT_IMAGE', '/favicon.ico'), ]; - diff --git a/config/shop.php b/config/shop.php index f652b8e..07d8420 100644 --- a/config/shop.php +++ b/config/shop.php @@ -1,14 +1,14 @@ env('SHOP_COMPANY_NAME', env('APP_NAME', 'PC Shop')), + 'company_name' => env('SHOP_COMPANY_NAME', env('APP_NAME', 'Tehnobox')), 'company_description' => env( 'SHOP_COMPANY_DESCRIPTION', 'Интернет-магазин компьютерных комплектующих, ноутбуков и периферии. Подбор, сравнение и заказ в одном месте.' ), 'contact_phone' => env('SHOP_CONTACT_PHONE', '+7 900 000 00 00'), - 'contact_email' => env('SHOP_CONTACT_EMAIL', 'support@pcshop.test'), - 'contact_telegram' => env('SHOP_CONTACT_TELEGRAM', '@pcshop_support'), + 'contact_email' => env('SHOP_CONTACT_EMAIL', 'support@tehnobox.test'), + 'contact_telegram' => env('SHOP_CONTACT_TELEGRAM', '@tehnobox_support'), 'telegram_bot_token' => env('SHOP_TELEGRAM_BOT_TOKEN', ''), 'telegram_chat_id' => env('SHOP_TELEGRAM_CHAT_ID', ''), 'contact_address' => env('SHOP_CONTACT_ADDRESS', 'ул. Технопарк, 24, Техноград'), diff --git a/deploy/nginx/pc-shop.conf b/deploy/nginx/tehnobox.conf similarity index 95% rename from deploy/nginx/pc-shop.conf rename to deploy/nginx/tehnobox.conf index c5cc046..9caebad 100644 --- a/deploy/nginx/pc-shop.conf +++ b/deploy/nginx/tehnobox.conf @@ -2,7 +2,7 @@ server { listen 80; listen [::]:80; server_name tehnobox.shop www.tehnobox.shop; - root /var/www/pc-shop/public; + root /var/www/tehnobox/public; location ^~ /.well-known/acme-challenge/ { default_type "text/plain"; @@ -18,7 +18,7 @@ server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name tehnobox.shop www.tehnobox.shop; - root /var/www/pc-shop/public; + root /var/www/tehnobox/public; index index.php; ssl_certificate /etc/letsencrypt/live/tehnobox.shop/fullchain.pem; diff --git a/deploy/nginx/pc-shop.http.conf b/deploy/nginx/tehnobox.http.conf similarity index 91% rename from deploy/nginx/pc-shop.http.conf rename to deploy/nginx/tehnobox.http.conf index 8d8f7ea..49db1e0 100644 --- a/deploy/nginx/pc-shop.http.conf +++ b/deploy/nginx/tehnobox.http.conf @@ -1,8 +1,8 @@ server { listen 80; listen [::]:80; - server_name shop.example.com www.shop.example.com; - root /var/www/pc-shop/public; + server_name tehnobox.shop www.tehnobox.shop; + root /var/www/tehnobox/public; index index.php; charset utf-8; diff --git a/package-lock.json b/package-lock.json index 91bf986..a392e51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "pc-shop", + "name": "tehnobox", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/package.json b/package.json index 7686b29..3062997 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "$schema": "https://www.schemastore.org/package.json", + "name": "tehnobox", "private": true, "type": "module", "scripts": { diff --git a/resources/views/layouts/shop.blade.php b/resources/views/layouts/shop.blade.php index b806221..7c9d666 100644 --- a/resources/views/layouts/shop.blade.php +++ b/resources/views/layouts/shop.blade.php @@ -5,7 +5,7 @@ $supportedLocales = (array) config('app.supported_locales', []); $currentLocale = app()->getLocale(); $currentLocaleData = $supportedLocales[$currentLocale] ?? $supportedLocales[config('app.locale', 'ru')] ?? []; - $siteName = config('seo.site_name', config('app.name', 'PC Shop')); + $siteName = config('seo.site_name', config('app.name', 'Tehnobox')); $metaTitleRaw = trim($__env->yieldContent('meta_title')); $metaTitle = $metaTitleRaw !== '' ? "{$metaTitleRaw} - {$siteName}" : __(config('seo.default_title', $siteName)); $metaDescription = trim($__env->yieldContent('meta_description')) ?: __(config('seo.default_description'));