Dockerfile и compose.yaml для развёртывания Keystone CMS 6
12 мая 2026 г.
Рабочие и проверенные в деле Dockerfile и compose.yaml для развёртывания в производственной среде Keystone CMS (версия 6) в связке с базой данных PostgreSQL:
FROM node:lts-slim
WORKDIR /app
COPY package*.json ./
RUN apt-get update && apt-get upgrade -y && apt-get install -y openssl
RUN npm ci --no-audit --no-fund;
COPY ./keystone.ts ./keystone.ts
# если в проекте есть другие исходники –
# их тоже нужно скопировать в контейнер
ENV NODE_ENV=production
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]services:
app:
build: .
restart: unless-stopped
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://dbuser:dbpass@db:5432/dbname
- SESSION_SECRET=geDqqNAg4C6qUJ3Sg0POYOC3r7oWvMeILgVyqpJaGg4=
depends_on:
- db
db:
image: postgres:latest
restart: unless-stopped
ports:
- "5432:5432"
environment:
POSTGRES_USER: dbuser
POSTGRES_PASSWORD: dbpass
POSTGRES_DB: dbname
volumes:
- ./postgres_data:/var/lib/postgresql/dataВ корне проекта необходимо создать папку postgres_data для данных PostgreSQL и включить её в .gitignore.
Уникальный SESSION_SECRET можно сгенерировать командой в терминале:
openssl rand -base64 32При этом, настройка сессии и настройка подключения базы данных в файле keystone.ts будут выглядеть примерно так:
//...
const session = statelessSessions({
maxAge: 60 * 60 * 24 * 30,
secret: process.env.SESSION_SECRET,
});
//...
export default withAuth(
config({
db: {
provider: "postgresql",
url: process.env.DATABASE_URL,
},
lists,
session,
}),
);Для сборки проекта нужно выполнить команду:
docker compose up -d




