7.3 KiB
Деплой Tehnobox
В репозитории подготовлены production-артефакты:
scripts/deploy.sh- полный деплой в текущем checkout.scripts/update-from-github.sh-git pull+ production-деплой.deploy/nginx/tehnobox.http.conf- HTTP-конфиг для первого запуска и выпуска сертификата.deploy/nginx/tehnobox.conf- финальный HTTPS-конфиг для Nginx..github/workflows/deploy.yml- автодеплой по SSH из GitHub Actions.
1. Что должно быть на сервере
- PHP 8.2+ с расширениями
bcmath,ctype,curl,fileinfo,intl,mbstring,openssl,pdo_pgsql,tokenizer,xml,zip - Composer 2.x
- Node.js 20+ и npm
- PostgreSQL 14+
- Nginx + PHP-FPM
- Certbot
- Git
Если деплой будет обновляться из GitHub, проект на сервере должен быть именно git clone, а не архивом без .git.
2. Первый запуск на сервере
cd /var/www
git clone git@github.com:YOUR_ACCOUNT/tehnobox.git
cd tehnobox
cp .env.example .env
# заполните .env и переключите его на production значения
php artisan key:generate --force
bash scripts/deploy.sh
Production-порт для сайта здесь не 3000: проект рассчитан на Nginx + PHP-FPM, то есть внешний трафик идёт через 80/443. Если Gitea уже работает на 3000, это не конфликтует с сайтом.
Опционально добавить демо-данные:
php artisan db:seed --class=ShopCatalogSeeder
3. Production .env
Базой остаётся обычный .env.example, отдельный production-файл не нужен. После копирования в .env минимально проверьте:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://tehnobox.shop
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=tehnobox
DB_USERNAME=tehnobox
DB_PASSWORD=secret
SESSION_DRIVER=database
CACHE_STORE=database
QUEUE_CONNECTION=database
MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=587
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="sales@example.com"
SHOP_CONTACT_PHONE="+7 900 000 00 00"
SHOP_CONTACT_EMAIL="support@example.com"
SHOP_TELEGRAM_BOT_TOKEN=
SHOP_TELEGRAM_CHAT_ID=
Отдельный queue worker и cron сейчас не обязательны: в коде нет фоновых jobs или scheduler-задач. Если они появятся позже, для воркера уже подготовлен безопасный php artisan queue:restart в deploy-скрипте.
4. Что делает scripts/deploy.sh
Скрипт:
- Переводит приложение в maintenance mode.
- Выполняет
composer install --no-dev. - Выполняет
npm ciиnpm run build. - Проверяет
storage:link. - Выполняет
composer run deploy. - Делает
php artisan queue:restart, если воркеры запущены. - Возвращает приложение в online.
Запуск:
bash scripts/deploy.sh
5. Обновление с GitHub на сервере
После обычного git clone обновление становится одной командой:
bash scripts/update-from-github.sh main
Скрипт:
- останавливается, если есть локальные изменения в tracked-файлах;
- делает
git fetch --prune; - переключается на нужную ветку;
- выполняет
git pull --ff-only; - запускает production-деплой.
По умолчанию ветка main, но можно передать другую:
bash scripts/update-from-github.sh release
6. Nginx
В репозитории два шаблона:
deploy/nginx/tehnobox.http.conf- стартовый HTTP-конфиг для первого запуска и/.well-known/acme-challenge/deploy/nginx/tehnobox.conf- основной HTTPS-конфиг с редиректом80 -> 443
До выпуска сертификата включите именно HTTP-шаблон:
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
Что нужно проверить в шаблонах:
server_nameroot- путь в
fastcgi_passпод ваш PHP-FPM socket
Корень сайта должен смотреть в public/, не в корень проекта.
7. HTTPS и сертификат
- Убедитесь, что домен уже указывает на сервер и порт
80открыт. - В
.envукажитеAPP_URL=https://tehnobox.shop. - Выпустите сертификат через
certbot:
sudo certbot certonly --webroot -w /var/www/tehnobox/public -d tehnobox.shop -d www.tehnobox.shop
- После успешного выпуска переключите nginx на HTTPS-шаблон:
sudo cp deploy/nginx/tehnobox.conf /etc/nginx/sites-available/tehnobox.conf
sudo nginx -t
sudo systemctl reload nginx
- Обновите Laravel-кеши после смены
APP_URL:
composer run deploy
Что нужно проверить в deploy/nginx/tehnobox.conf:
server_namefastcgi_pass- путь в
ssl_certificate - путь в
ssl_certificate_key
После этого сайт должен открываться по https://, а http:// будет перекидываться на защищённую версию.
Если вы предпочитаете, чтобы certbot сам правил nginx, можно вместо certonly --webroot использовать:
sudo certbot --nginx -d tehnobox.shop -d www.tehnobox.shop
Но для предсказуемого деплоя удобнее оставить конфиг под контролем репозитория и использовать certonly.
8. Автообновление из GitHub Actions
В репозитории добавлен workflow .github/workflows/deploy.yml.
Он:
- запускается на push в
main; - умеет ручной
workflow_dispatch; - подключается по SSH на сервер;
- вызывает
bash scripts/update-from-github.sh <branch>.
Нужные GitHub Secrets:
DEPLOY_HOSTDEPLOY_PORTDEPLOY_USERDEPLOY_PATHDEPLOY_SSH_KEYDEPLOY_KNOWN_HOSTS
DEPLOY_PATH должен указывать на директорию проекта на сервере, например /var/www/tehnobox.
DEPLOY_KNOWN_HOSTS можно получить так:
ssh-keyscan -H your-server-hostname
9. Проверка после деплоя
php artisan about
php artisan migrate:status
php artisan route:list
Проверьте страницы:
https://tehnobox.shop//catalog/cart/favorites/compare/login/admin/login