14
.env.example
14
.env.example
@@ -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
|
||||||
|
|||||||
40
DEPLOY.md
40
DEPLOY.md
@@ -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`
|
||||||
|
|||||||
@@ -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).
|
||||||
|
|||||||
@@ -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", [
|
||||||
'Новая заявка с формы контактов',
|
'Новая заявка с формы контактов',
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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'),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -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, Техноград'),
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -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
2
package-lock.json
generated
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "pc-shop",
|
"name": "tehnobox",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
|
|||||||
@@ -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": {
|
||||||
|
|||||||
@@ -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'));
|
||||||
|
|||||||
Reference in New Issue
Block a user