Установка и запуск TeqCMS

TeqCMS устанавливается как обычная npm-зависимость. Вы создаёте собственный проект с HTML-шаблонами и подключаете CMS через @flancer32/teq-cms.

1. Создание проекта

mkdir my-site
cd my-site
npm init -y
npm install @flancer32/teq-cms

2. Структура каталогов

3. Переменные окружения (.env)

SERVER_TYPE=express               # или fastify
SERVER_PORT=3000

TEQ_CMS_TMPL_ENGINE=nunjucks     # или mustache
TEQ_CMS_LOCALE_ALLOWED=en,ru
TEQ_CMS_LOCALE_BASE_DISPLAY=en
TEQ_CMS_LOCALE_BASE_TRANSLATE=ru

TEQ_CMS_AI_API_BASE_URL=https://api.deepseek.com/v1
TEQ_CMS_AI_API_KEY=sk-...
TEQ_CMS_AI_API_MODEL=deepseek-chat
TEQ_CMS_AI_API_ORG=...

4. Запуск веб-сервера

Вариант 1 — без внешнего сервера: В этом случае CMS сама настраивает и запускает встроенный HTTP-сервер:
const cfg = configWeb.create({port});
await server.start(cfg);
Вариант 2 — с внешним сервером (Express или Fastify): Вам нужно явно подключить библиотеку и создать сервер:
"dependencies": {
  "express": "^4.18.2",
  "fastify": "^4.25.1"
}

Express:

const app = Express();
app.use(async (req, res) => {
    await dispatcher.onEventRequest(req, res);
});
app.listen(port, () => {
    console.info(`Listening on port ${port} with Express`);
});

Fastify:

const fastify = Fastify();
fastify.all('*', async (request, reply) => {
    const req = request.raw;
    const res = reply.raw;
    await dispatcher.onEventRequest(req, res);
});
await fastify.listen({port});
В этом случае запуск сервера и его конфигурация полностью контролируются разработчиком проекта. TeqCMS можно запускать напрямую или прятать за внешним прокси (например, Nginx).

5. Запуск AI-переводов

Переводы запускаются командой:
npm run translate
CMS сравнивает метки времени и обновляет только устаревшие переводы. Для целевой локали можно добавить рядом с HTML-файлом файл *.prompt.md с уточняющей инструкцией для LLM.

6. Подстановка переменных в шаблоны

Для передачи данных в шаблоны используется адаптер Fl32_Cms_Back_Api_Adapter. Его можно заменить через TeqFw_Di_Pre_Replace: Пример:
import Container from '@teqfw/di';
import Replace from '@teqfw/di/src/Pre/Replace.js';

const container = new Container();
const replace = new Replace();
replace.add('Fl32_Cms_Back_Api_Adapter', 'Fl32_Cms_Demo_Back_Di_Replace_Cms');
container.getPreProcessor().addChunk(replace);
Это позволяет гибко управлять источниками переменных без изменения основной логики CMS.

Далее: конфигурация CMS →