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

View File

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

View File

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

View File

@@ -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", [
'Новая заявка с формы контактов',

View File

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

View File

@@ -1,7 +1,7 @@
<?php
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_description' => env(
'SEO_DEFAULT_DESCRIPTION',
@@ -13,4 +13,3 @@ return [
),
'default_image' => env('SEO_DEFAULT_IMAGE', '/favicon.ico'),
];

View File

@@ -1,14 +1,14 @@
<?php
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(
'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, Техноград'),

View File

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

View File

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

2
package-lock.json generated
View File

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

View File

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

View File

@@ -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'));