2
Some checks are pending
Deploy / deploy (push) Waiting to run

This commit is contained in:
ssww23
2026-03-17 02:13:35 +03:00
parent 0ee9f05416
commit f2f4e2cdd7
12 changed files with 45 additions and 41 deletions

View File

@@ -1,18 +1,18 @@
APP_NAME="PC Shop" APP_NAME="Tehnobox"
APP_ENV=local APP_ENV=local
APP_KEY= APP_KEY=
APP_DEBUG=true APP_DEBUG=true
APP_URL=http://localhost APP_URL=http://localhost:8080
APP_LOCALE=ru APP_LOCALE=ru
APP_FALLBACK_LOCALE=ru APP_FALLBACK_LOCALE=ru
APP_FAKER_LOCALE=ru_RU APP_FAKER_LOCALE=ru_RU
SHOP_COMPANY_NAME="PC Shop" SHOP_COMPANY_NAME="Tehnobox"
SHOP_COMPANY_DESCRIPTION="Интернет-магазин компьютерных комплектующих, ноутбуков и периферии. Подбор, сравнение и заказ в одном месте." SHOP_COMPANY_DESCRIPTION="Интернет-магазин компьютерных комплектующих, ноутбуков и периферии. Подбор, сравнение и заказ в одном месте."
SHOP_CONTACT_PHONE="+7 900 000 00 00" SHOP_CONTACT_PHONE="+7 900 000 00 00"
SHOP_CONTACT_EMAIL="support@pcshop.test" SHOP_CONTACT_EMAIL="support@tehnobox.test"
SHOP_CONTACT_TELEGRAM="@pcshop_support" SHOP_CONTACT_TELEGRAM="@tehnobox_support"
SHOP_TELEGRAM_BOT_TOKEN= SHOP_TELEGRAM_BOT_TOKEN=
SHOP_TELEGRAM_CHAT_ID= SHOP_TELEGRAM_CHAT_ID=
SHOP_CONTACT_ADDRESS="ул. Технопарк, 24, Техноград" SHOP_CONTACT_ADDRESS="ул. Технопарк, 24, Техноград"
@@ -44,8 +44,8 @@ LOG_LEVEL=debug
DB_CONNECTION=pgsql DB_CONNECTION=pgsql
DB_HOST=127.0.0.1 DB_HOST=127.0.0.1
DB_PORT=5432 DB_PORT=5432
DB_DATABASE=pc-shop DB_DATABASE=tehnobox
DB_USERNAME=workeruser DB_USERNAME=tehnobox
DB_PASSWORD= DB_PASSWORD=
SESSION_DRIVER=database SESSION_DRIVER=database

View File

@@ -1,11 +1,11 @@
# Деплой PC Shop # Деплой Tehnobox
В репозитории подготовлены production-артефакты: В репозитории подготовлены production-артефакты:
- `scripts/deploy.sh` - полный деплой в текущем checkout. - `scripts/deploy.sh` - полный деплой в текущем checkout.
- `scripts/update-from-github.sh` - `git pull` + production-деплой. - `scripts/update-from-github.sh` - `git pull` + production-деплой.
- `deploy/nginx/pc-shop.http.conf` - HTTP-конфиг для первого запуска и выпуска сертификата. - `deploy/nginx/tehnobox.http.conf` - HTTP-конфиг для первого запуска и выпуска сертификата.
- `deploy/nginx/pc-shop.conf` - финальный HTTPS-конфиг для Nginx. - `deploy/nginx/tehnobox.conf` - финальный HTTPS-конфиг для Nginx.
- `.github/workflows/deploy.yml` - автодеплой по SSH из GitHub Actions. - `.github/workflows/deploy.yml` - автодеплой по SSH из GitHub Actions.
## 1. Что должно быть на сервере ## 1. Что должно быть на сервере
@@ -24,8 +24,8 @@
```bash ```bash
cd /var/www cd /var/www
git clone git@github.com:YOUR_ACCOUNT/pc-shop.git git clone git@github.com:YOUR_ACCOUNT/tehnobox.git
cd pc-shop cd tehnobox
cp .env.example .env cp .env.example .env
# заполните .env и переключите его на production значения # заполните .env и переключите его на production значения
@@ -34,6 +34,8 @@ php artisan key:generate --force
bash scripts/deploy.sh bash scripts/deploy.sh
``` ```
Production-порт для сайта здесь не `3000`: проект рассчитан на `Nginx + PHP-FPM`, то есть внешний трафик идёт через `80/443`. Если `Gitea` уже работает на `3000`, это не конфликтует с сайтом.
Опционально добавить демо-данные: Опционально добавить демо-данные:
```bash ```bash
@@ -47,13 +49,13 @@ php artisan db:seed --class=ShopCatalogSeeder
```dotenv ```dotenv
APP_ENV=production APP_ENV=production
APP_DEBUG=false APP_DEBUG=false
APP_URL=https://shop.example.com APP_URL=https://tehnobox.shop
DB_CONNECTION=pgsql DB_CONNECTION=pgsql
DB_HOST=127.0.0.1 DB_HOST=127.0.0.1
DB_PORT=5432 DB_PORT=5432
DB_DATABASE=pc-shop DB_DATABASE=tehnobox
DB_USERNAME=pc_shop DB_USERNAME=tehnobox
DB_PASSWORD=secret DB_PASSWORD=secret
SESSION_DRIVER=database 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/tehnobox.http.conf` - стартовый HTTP-конфиг для первого запуска и `/.well-known/acme-challenge/`
- `deploy/nginx/pc-shop.conf` - основной HTTPS-конфиг с редиректом `80 -> 443` - `deploy/nginx/tehnobox.conf` - основной HTTPS-конфиг с редиректом `80 -> 443`
До выпуска сертификата включите именно HTTP-шаблон: До выпуска сертификата включите именно HTTP-шаблон:
```bash ```bash
sudo cp deploy/nginx/pc-shop.http.conf /etc/nginx/sites-available/pc-shop.conf sudo cp deploy/nginx/tehnobox.http.conf /etc/nginx/sites-available/tehnobox.conf
sudo ln -s /etc/nginx/sites-available/pc-shop.conf /etc/nginx/sites-enabled/pc-shop.conf sudo ln -s /etc/nginx/sites-available/tehnobox.conf /etc/nginx/sites-enabled/tehnobox.conf
sudo nginx -t sudo nginx -t
sudo systemctl reload nginx sudo systemctl reload nginx
``` ```
@@ -142,17 +144,17 @@ sudo systemctl reload nginx
## 7. HTTPS и сертификат ## 7. HTTPS и сертификат
1. Убедитесь, что домен уже указывает на сервер и порт `80` открыт. 1. Убедитесь, что домен уже указывает на сервер и порт `80` открыт.
2. В `.env` укажите `APP_URL=https://shop.example.com`. 2. В `.env` укажите `APP_URL=https://tehnobox.shop`.
3. Выпустите сертификат через `certbot`: 3. Выпустите сертификат через `certbot`:
```bash ```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-шаблон: 4. После успешного выпуска переключите nginx на HTTPS-шаблон:
```bash ```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 nginx -t
sudo systemctl reload nginx sudo systemctl reload nginx
``` ```
@@ -163,7 +165,7 @@ sudo systemctl reload nginx
composer run deploy composer run deploy
``` ```
Что нужно проверить в `deploy/nginx/pc-shop.conf`: Что нужно проверить в `deploy/nginx/tehnobox.conf`:
- `server_name` - `server_name`
- `fastcgi_pass` - `fastcgi_pass`
@@ -175,7 +177,7 @@ composer run deploy
Если вы предпочитаете, чтобы `certbot` сам правил nginx, можно вместо `certonly --webroot` использовать: Если вы предпочитаете, чтобы `certbot` сам правил nginx, можно вместо `certonly --webroot` использовать:
```bash ```bash
sudo certbot --nginx -d shop.example.com -d www.shop.example.com sudo certbot --nginx -d tehnobox.shop -d www.tehnobox.shop
``` ```
Но для предсказуемого деплоя удобнее оставить конфиг под контролем репозитория и использовать `certonly`. Но для предсказуемого деплоя удобнее оставить конфиг под контролем репозитория и использовать `certonly`.
@@ -200,7 +202,7 @@ sudo certbot --nginx -d shop.example.com -d www.shop.example.com
- `DEPLOY_SSH_KEY` - `DEPLOY_SSH_KEY`
- `DEPLOY_KNOWN_HOSTS` - `DEPLOY_KNOWN_HOSTS`
`DEPLOY_PATH` должен указывать на директорию проекта на сервере, например `/var/www/pc-shop`. `DEPLOY_PATH` должен указывать на директорию проекта на сервере, например `/var/www/tehnobox`.
`DEPLOY_KNOWN_HOSTS` можно получить так: `DEPLOY_KNOWN_HOSTS` можно получить так:
@@ -218,7 +220,7 @@ php artisan route:list
Проверьте страницы: Проверьте страницы:
- `https://shop.example.com` - `https://tehnobox.shop`
- `/` - `/`
- `/catalog` - `/catalog`
- `/cart` - `/cart`

View File

@@ -1,4 +1,4 @@
# PC Shop # Tehnobox
Laravel 12 интернет-магазин компьютерных комплектующих с витриной, корзиной, избранным, сравнением и админкой. Laravel 12 интернет-магазин компьютерных комплектующих с витриной, корзиной, избранным, сравнением и админкой.
@@ -11,9 +11,11 @@ npm install
php artisan key:generate php artisan key:generate
php artisan migrate php artisan migrate
npm run build 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). Production-поток и обновление с GitHub описаны в [DEPLOY.md](DEPLOY.md).

View File

@@ -55,7 +55,7 @@ class ContactController extends Controller
private function buildTelegramMessage(array $data, Request $request): string 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", [ return implode("\n", [
'Новая заявка с формы контактов', 'Новая заявка с формы контактов',

View File

@@ -50,7 +50,7 @@
], ],
"dev": [ "dev": [
"Composer\\Config::disableProcessTimeout", "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": [ "test": [
"@php artisan config:clear --ansi", "@php artisan config:clear --ansi",

View File

@@ -1,7 +1,7 @@
<?php <?php
return [ return [
'site_name' => 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_title' => env('SEO_DEFAULT_TITLE', 'Интернет-магазин компьютерных комплектующих'),
'default_description' => env( 'default_description' => env(
'SEO_DEFAULT_DESCRIPTION', 'SEO_DEFAULT_DESCRIPTION',
@@ -13,4 +13,3 @@ return [
), ),
'default_image' => env('SEO_DEFAULT_IMAGE', '/favicon.ico'), 'default_image' => env('SEO_DEFAULT_IMAGE', '/favicon.ico'),
]; ];

View File

@@ -1,14 +1,14 @@
<?php <?php
return [ return [
'company_name' => env('SHOP_COMPANY_NAME', env('APP_NAME', 'PC Shop')), 'company_name' => env('SHOP_COMPANY_NAME', env('APP_NAME', 'Tehnobox')),
'company_description' => env( 'company_description' => env(
'SHOP_COMPANY_DESCRIPTION', 'SHOP_COMPANY_DESCRIPTION',
'Интернет-магазин компьютерных комплектующих, ноутбуков и периферии. Подбор, сравнение и заказ в одном месте.' 'Интернет-магазин компьютерных комплектующих, ноутбуков и периферии. Подбор, сравнение и заказ в одном месте.'
), ),
'contact_phone' => env('SHOP_CONTACT_PHONE', '+7 900 000 00 00'), 'contact_phone' => env('SHOP_CONTACT_PHONE', '+7 900 000 00 00'),
'contact_email' => env('SHOP_CONTACT_EMAIL', 'support@pcshop.test'), 'contact_email' => env('SHOP_CONTACT_EMAIL', 'support@tehnobox.test'),
'contact_telegram' => env('SHOP_CONTACT_TELEGRAM', '@pcshop_support'), 'contact_telegram' => env('SHOP_CONTACT_TELEGRAM', '@tehnobox_support'),
'telegram_bot_token' => env('SHOP_TELEGRAM_BOT_TOKEN', ''), 'telegram_bot_token' => env('SHOP_TELEGRAM_BOT_TOKEN', ''),
'telegram_chat_id' => env('SHOP_TELEGRAM_CHAT_ID', ''), 'telegram_chat_id' => env('SHOP_TELEGRAM_CHAT_ID', ''),
'contact_address' => env('SHOP_CONTACT_ADDRESS', 'ул. Технопарк, 24, Техноград'), 'contact_address' => env('SHOP_CONTACT_ADDRESS', 'ул. Технопарк, 24, Техноград'),

View File

@@ -2,7 +2,7 @@ server {
listen 80; listen 80;
listen [::]:80; listen [::]:80;
server_name tehnobox.shop www.tehnobox.shop; server_name tehnobox.shop www.tehnobox.shop;
root /var/www/pc-shop/public; root /var/www/tehnobox/public;
location ^~ /.well-known/acme-challenge/ { location ^~ /.well-known/acme-challenge/ {
default_type "text/plain"; default_type "text/plain";
@@ -18,7 +18,7 @@ server {
listen 443 ssl http2; listen 443 ssl http2;
listen [::]:443 ssl http2; listen [::]:443 ssl http2;
server_name tehnobox.shop www.tehnobox.shop; server_name tehnobox.shop www.tehnobox.shop;
root /var/www/pc-shop/public; root /var/www/tehnobox/public;
index index.php; index index.php;
ssl_certificate /etc/letsencrypt/live/tehnobox.shop/fullchain.pem; ssl_certificate /etc/letsencrypt/live/tehnobox.shop/fullchain.pem;

View File

@@ -1,8 +1,8 @@
server { server {
listen 80; listen 80;
listen [::]:80; listen [::]:80;
server_name shop.example.com www.shop.example.com; server_name tehnobox.shop www.tehnobox.shop;
root /var/www/pc-shop/public; root /var/www/tehnobox/public;
index index.php; index index.php;
charset utf-8; charset utf-8;

2
package-lock.json generated
View File

@@ -1,5 +1,5 @@
{ {
"name": "pc-shop", "name": "tehnobox",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {

View File

@@ -1,5 +1,6 @@
{ {
"$schema": "https://www.schemastore.org/package.json", "$schema": "https://www.schemastore.org/package.json",
"name": "tehnobox",
"private": true, "private": true,
"type": "module", "type": "module",
"scripts": { "scripts": {

View File

@@ -5,7 +5,7 @@
$supportedLocales = (array) config('app.supported_locales', []); $supportedLocales = (array) config('app.supported_locales', []);
$currentLocale = app()->getLocale(); $currentLocale = app()->getLocale();
$currentLocaleData = $supportedLocales[$currentLocale] ?? $supportedLocales[config('app.locale', 'ru')] ?? []; $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')); $metaTitleRaw = trim($__env->yieldContent('meta_title'));
$metaTitle = $metaTitleRaw !== '' ? "{$metaTitleRaw} - {$siteName}" : __(config('seo.default_title', $siteName)); $metaTitle = $metaTitleRaw !== '' ? "{$metaTitleRaw} - {$siteName}" : __(config('seo.default_title', $siteName));
$metaDescription = trim($__env->yieldContent('meta_description')) ?: __(config('seo.default_description')); $metaDescription = trim($__env->yieldContent('meta_description')) ?: __(config('seo.default_description'));