Установка и запуск TeqCMS
TeqCMS устанавливается как обычная npm-зависимость. Вы создаёте собственный проект с HTML-шаблонами
и подключаете CMS через @flancer32/teq-cms
.
1. Создание проекта
mkdir my-site
cd my-site
npm init -y
npm install @flancer32/teq-cms
2. Структура каталогов
tmpl/web/{locale}/
— локализованные HTML-шаблоныweb/
— публичные статические ресурсыvar/teq-cms/
— служебные файлы (база переводов, системные промпты)
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.