diff --git a/README.md b/README.md index d1442e9..e4629c4 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ Push в `main` → сайт на твоём домене с SSL. Один файл `.env`, один пуш. -> Это новый флоу на **Forgejo Actions**. Старый GitLab-флоу (`.gitlab-ci.yml`) -> ещё жив до завершения миграции, но новые проекты заводи здесь. +> Флоу на **Forgejo Actions**. Один `.env` + `.forgejo/workflows/deploy.yml` в +> репе — и push. Никакого GitLab. --- @@ -73,7 +73,28 @@ APP_PORT=3000 --- -## Скорость билда — bun +## Доп. домены — один сайт на нескольких доменах + +По умолчанию сайт отдаётся на `DOMAIN` (+ `www.` авто, если у www есть A-запись на +наш IP). Нужен тот же сайт ещё на других доменах — перечисли их через запятую: + +```env +DOMAIN=mysite.com +EXTRA_DOMAINS=mysite.io,app.mysite.com,promo.xyz +``` + +Платформа раздаёт сайт на всех доменах и на **каждый** выпускает свой SSL-серт +автоматически. От тебя — прописать A-запись каждого домена на IP платформы и +`git push`. `www.` для доп-доменов сам не добавляется — если нужен, впиши +`www.mysite.io` явным пунктом. Нет A-записи → в логе `::warning::`, серт выпустится, +как только DNS укажет сюда. + +> One-liner `curl get. | sh` — особый случай, см. `INSTALL_SH` в +> `.env.example` (отдаёт один файл-скрипт с сабдомена `get.`). + +--- + +## Скорость билда Платформа собирает фронт через **bun** (install в 10–30× быстрее npm). Закоммить lock-файл: @@ -86,6 +107,29 @@ git add bun.lock && git commit -m "chore: bun lock" && git push `package.json` и твои `npm run build` скрипты bun понимает as-is. Не коммить `node_modules` / `dist` (они в `.gitignore`). +### docker-сайты — кеш слоёв и лёгкие образы + +Платформа собирает с **BuildKit** и `--cache-from` предыдущего образа: если слои не +менялись, пересборка почти мгновенная. Чтобы это работало на полную: + +- **Коммить lockfile** и ставь зависимости ДО копирования кода — слой install + кешируется, пока deps не менялись: + ```dockerfile + COPY package.json package-lock.json ./ + RUN npm ci + COPY . . + RUN npm run build + ``` +- **Cache-mount'ы** (BuildKit включён) — install/apt не качают заново между сборками, + а Next держит инкрементальный кеш компиляции: + ```dockerfile + # syntax=docker/dockerfile:1.7 + RUN --mount=type=cache,target=/root/.npm npm ci + RUN --mount=type=cache,target=/app/.next/cache npm run build + ``` +- **Next.js → лёгкий образ**: `output: 'standalone'` в `next.config` роняет образ + с ~1–3 ГБ до ~150–250 МБ → деплой заметно быстрее (меньше экспорт + запуск). + --- ## Секреты (DATABASE_URL, API-ключи) @@ -129,6 +173,8 @@ Settings → Actions → Variables.) | `BUILD_DIR` | `dist` | static: папка сборки | | `APP_PORT` | `80` | docker: порт контейнера | | `WWW` | `auto` | `false` — не подключать www | +| `EXTRA_DOMAINS`| — | доп. домены через запятую (тот же сайт, свой SSL на каждый) | +| `INSTALL_SH` | — | static: отдать файл-скрипт на `get.` (`curl \| sh`) | | `ENABLED` | `true` | `false` — выключить сайт | | `RUNTIME_KEYS`| — | docker: список секретов в контейнер |