Установка через Docker
Необходимые условия
- Docker и Docker Compose установлены
- Убедитесь, что сервис Docker запущен
1. Создайте docker-compose.yml
# Со здайте папку с именем my-project (или любое другое) для хранения системных файлов, которые генерирует NocoBase
mkdir my-project && cd my-project
# Создайте пустой файл docker-compose.yml
vi docker-compose.yml
2. Настройте docker-compose.yml
Выберите версию NocoBase (Сравнение версий) и тип базы данных, затем скопируйте соответствующую конфигурацию в docker-compose.yml.
Примечания по настройке
- Выберите образ:
latest latest-full beta beta-full alpha alpha-full 1.7.14 1.7.14-full
- Для продакшн-сред рекомендуется зафиксировать конкретный номер версии, чтобы избежать непреднамеренных автоматических обновлений. Посмотреть все версии
- Образ Docker Hub:
nocobase/nocobase:latest-full
- Полный образ включает клиент PostgreSQL 16/17, клиент MySQL 8.0, клиент Oracle 19.25, необходимый для плагинов управления резервным копированием и миграциями, а также LibreOffice, необходимый для печати шаблонов (PDF).
- Если вам нужно собрать собственный образ, обратитесь к официальным Dockerfile (slim version) и Dockerfile-full (full version)
- Измените
APP_KEY: замените your-secret-key на случайную строку, которая используется для шифрования конфиденциальной информации, например токенов пользователей.
- Используйте существующую базу данных: если у вас уже есть сервис базы данных, измените
DB_HOST на адрес сервера базы данных, а конфигурацию сервиса базы данных (например, сервисы postgres, mysql, mariadb) удалите или закомментируйте.
- Порт-маппинг: по умолчанию порт 80 контейнера сопоставляется с портом 13000 хоста. При необходимости можно изменить это.
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:latest-full
restart: always
networks:
- nocobase
depends_on:
- postgres
environment:
# Ключ приложения, используется для генерации токенов пользователей и т.д.
# Если APP_KEY изменен, старые токены станут недействительными
# Может быть любой случайной строкой; убедитесь, что она не утечёт
- APP_KEY=your-secret-key
# Тип базы данных: поддерживаются postgres, mysql, mariadb
- DB_DIALECT=postgres
# Хост базы данных; можно заменить на IP-адрес существующего сервера базы данных
- DB_HOST=postgres
# Порт базы данных
- DB_PORT=5432
# Имя базы данных
- DB_DATABASE=nocobase
# Пользователь базы данных
- DB_USER=nocobase
# Пароль базы данных
- DB_PASSWORD=nocobase
# Часовой пояс; замените его на ваш локальный, например America/New_York
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Если вы используете существующий сервис базы данных, запускать postgres не обязательно
postgres:
image: postgres:16
restart: always
command: postgres -c wal_level=logical
environment:
POSTGRES_USER: nocobase
POSTGRES_DB: nocobase
POSTGRES_PASSWORD: nocobase
volumes:
- ./storage/db/postgres:/var/lib/postgresql/data
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:latest-full
restart: always
networks:
- nocobase
depends_on:
- mysql
environment:
# Ключ приложения, используется для генерации токенов пользователей и т.д.
# Если APP_KEY изменен, старые токены станут недействительными
# Может быть любой случайной строкой; убедитесь, что она не утечёт
- APP_KEY=your-secret-key
# Тип базы данных: поддерживаются postgres, mysql, mariadb
- DB_DIALECT=mysql
# Хост базы данных; можно заменить на IP-адрес существующего сервера базы данных
- DB_HOST=mysql
# Порт базы данных
- DB_PORT=3306
# Имя базы данных
- DB_DATABASE=nocobase
# Пользователь базы данных
- DB_USER=root
# Пароль базы данных
- DB_PASSWORD=nocobase
# Выполнять преобразование имен таблиц и полей в snake_case
- DB_UNDERSCORED=true
# Часовой пояс; замените его на ваш локальный, например America/New_York
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Если вы используете существующий сервис базы данных, запускать mysql не обязательно
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mysql:/var/lib/mysql
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:latest-full
restart: always
networks:
- nocobase
depends_on:
- mariadb
environment:
# Ключ приложения, используется для генерации токенов пользователей и т.д.
# Если APP_KEY изменен, старые токены станут недействительными
# Может быть любой случайной строкой; убедитесь, что она не утечёт
- APP_KEY=your-secret-key
# Тип базы данных: поддерживаются postgres, mysql, mariadb
- DB_DIALECT=mariadb
# Хост базы данных; можно заменить на IP-адрес существующего сервера базы данных
- DB_HOST=mariadb
# Порт базы данных
- DB_PORT=3306
# Имя базы данных
- DB_DATABASE=nocobase
# Пользователь базы данных
- DB_USER=root
# Пароль базы данных
- DB_PASSWORD=nocobase
# Выполнять преобразование имен таблиц и полей в snake_case
- DB_UNDERSCORED=true
# Часовой пояс; замените его на ваш локальный, например America/New_York
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Если вы используете существующий сервис базы данных, запускать mariadb не обязательно
mariadb:
image: mariadb:11
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mariadb:/var/lib/mysql
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:beta-full
restart: always
networks:
- nocobase
depends_on:
- postgres
environment:
# Ключ приложения, используется для генерации токенов пользователей и т.д.
# Если APP_KEY изменен, старые токены станут недействительными
# Может быть любой случайной строкой; убедитесь, что она не утечёт
- APP_KEY=your-secret-key
# Тип базы данных: поддерживаются postgres, mysql, mariadb
- DB_DIALECT=postgres
# Хост базы данных; можно заменить на IP-адрес существующего сервера базы данных
- DB_HOST=postgres
# Порт базы данных
- DB_PORT=5432
# Имя базы данных
- DB_DATABASE=nocobase
# Пользователь базы данных
- DB_USER=nocobase
# Пароль базы данных
- DB_PASSWORD=nocobase
# Часовой пояс; замените его на ваш локальный, например America/New_York
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Если вы используете существующий сервис базы данных, запускать postgres не обязательно
postgres:
image: postgres:16
restart: always
command: postgres -c wal_level=logical
environment:
POSTGRES_USER: nocobase
POSTGRES_DB: nocobase
POSTGRES_PASSWORD: nocobase
volumes:
- ./storage/db/postgres:/var/lib/postgresql/data
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:beta-full
restart: always
networks:
- nocobase
depends_on:
- mysql
environment:
# Ключ приложения, используется для генерации токенов пользователей и т.д.
# Если APP_KEY изменен, старые токены станут недействительными
# Может быть любой случайной строкой; убедитесь, что она не утечёт
- APP_KEY=your-secret-key
# Тип базы данных: поддерживаются postgres, mysql, mariadb
- DB_DIALECT=mysql
# Хост базы данных; можно заменить на IP-адрес существующего сервера базы данных
- DB_HOST=mysql
# Порт базы данных
- DB_PORT=3306
# Имя базы данных
- DB_DATABASE=nocobase
# Пользователь базы данных
- DB_USER=root
# Пароль базы данных
- DB_PASSWORD=nocobase
# Выполнять преобразование имен таблиц и полей в snake_case
- DB_UNDERSCORED=true
# Часовой пояс; замените его на ваш локальный, например America/New_York
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Если вы используете существующий сервис базы данных, запускать mysql не обязательно
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mysql:/var/lib/mysql
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:beta-full
restart: always
networks:
- nocobase
depends_on:
- mariadb
environment:
# Ключ приложения, используется для генерации токенов пользователей и т.д.
# Если APP_KEY изменен, старые токены станут недействительными
# Может быть любой случайной строкой; убедитесь, что она не утечёт
- APP_KEY=your-secret-key
# Тип базы данных: поддерживаются postgres, mysql, mariadb
- DB_DIALECT=mariadb
# Хост базы да нных; можно заменить на IP-адрес существующего сервера базы данных
- DB_HOST=mariadb
# Порт базы данных
- DB_PORT=3306
# Имя базы данных
- DB_DATABASE=nocobase
# Пользователь базы данных
- DB_USER=root
# Пароль базы данных
- DB_PASSWORD=nocobase
# Выполнять преобразование имен таблиц и полей в snake_case
- DB_UNDERSCORED=true
# Часовой пояс; замените его на ваш локальный, например America/New_York
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Если вы используете существующий сервис базы данных, запускать mariadb не обязательно
mariadb:
image: mariadb:11
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mariadb:/var/lib/mysql
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:alpha-full
restart: always
networks:
- nocobase
depends_on:
- postgres
environment:
# Ключ приложения, используется для генерации токенов пользователей и т.д.
# Если APP_KEY изменен, старые токены станут недействительными
# Может быть любой случайной строкой; убедитесь, что она не утечёт
- APP_KEY=your-secret-key
# Тип базы данных: поддерживаются postgres, mysql, mariadb
- DB_DIALECT=postgres
# Хост базы данных; можно заменить на IP-адрес существующего сервера базы данных
- DB_HOST=postgres
# Порт базы данных
- DB_PORT=5432
# Имя базы данных
- DB_DATABASE=nocobase
# Пользователь базы данных
- DB_USER=nocobase
# Пароль базы данных
- DB_PASSWORD=nocobase
# Часовой пояс; замените его на ваш локальный, например America/New_York
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Если вы используете существующий сервис базы данных, запускать postgres не обязательно
postgres:
image: postgres:16
restart: always
command: postgres -c wal_level=logical
environment:
POSTGRES_USER: nocobase
POSTGRES_DB: nocobase
POSTGRES_PASSWORD: nocobase
volumes:
- ./storage/db/postgres:/var/lib/postgresql/data
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:alpha-full
restart: always
networks:
- nocobase
depends_on:
- mysql
environment:
# Ключ приложения, используется для генерации токенов польз ователей и т.д.
# Если APP_KEY изменен, старые токены станут недействительными
# Может быть любой случайной строкой; убедитесь, что она не утечёт
- APP_KEY=your-secret-key
# Тип базы данных: поддерживаются postgres, mysql, mariadb
- DB_DIALECT=mysql
# Хост базы данных; можно заменить на IP-адрес существующего сервера базы данных
- DB_HOST=mysql
# Порт базы данных
- DB_PORT=3306
# Имя базы данных
- DB_DATABASE=nocobase
# Пользователь базы данных
- DB_USER=root
# Пароль базы данных
- DB_PASSWORD=nocobase
# Выполнять преобразование имен таблиц и полей в snake_case
- DB_UNDERSCORED=true
# Часовой пояс; замените его на ваш локальный, например America/New_York
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Если вы используете существующий сервис базы данных, запускать mysql не обязательно
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mysql:/var/lib/mysql
networks:
- nocobase
networks:
nocobase:
driver: bridge
services:
app:
image: nocobase/nocobase:alpha-full
restart: always
networks:
- nocobase
depends_on:
- mariadb
environment:
# Ключ приложения, используется для генерации токенов пользователей и т.д.
# Если APP_KEY изменен, старые токены станут недействительными
# Может быть любой случайной строкой; убедитесь, что она не утечёт
- APP_KEY=your-secret-key
# Тип базы данных: поддерживаются postgres, mysql, mariadb
- DB_DIALECT=mariadb
# Хост базы данных; можно заменить на IP-адрес существующего сервера базы данных
- DB_HOST=mariadb
# Порт базы данных
- DB_PORT=3306
# Имя базы данных
- DB_DATABASE=nocobase
# Пользователь базы данных
- DB_USER=root
# Пароль базы данных
- DB_PASSWORD=nocobase
# Выполнять преобразование имен таблиц и полей в snake_case
- DB_UNDERSCORED=true
# Часовой пояс; замените его на ваш локальный, например America/New_York
- TZ=Etc/UTC
volumes:
- ./storage:/app/nocobase/storage
ports:
- '13000:80'
# init: true
# Если вы используете существующий сервис базы данных, запускать mariadb не обязательно
mariadb:
image: mariadb:11
environment:
MYSQL_DATABASE: nocobase
MYSQL_USER: nocobase
MYSQL_PASSWORD: nocobase
MYSQL_ROOT_PASSWORD: nocobase
restart: always
volumes:
- ./storage/db/mariadb:/var/lib/mysql
networks:
- nocobase
3. Установите и запустите NocoBase
# Скачайте последний образ
docker compose pull
# Запустите в фоне (установка выполнится автоматически при первом запуске)
docker compose up -d
# Просмотр логов установки и запуска
docker compose logs -f app
app-postgres-app-1 | nginx started
app-postgres-app-1 | yarn run v1.22.15
app-postgres-app-1 | $ cross-env DOTENV_CONFIG_PATH=.env node -r dotenv/config packages/app/server/lib/index.js install -s
app-postgres-app-1 | Done in 2.72s.
app-postgres-app-1 | yarn run v1.22.15
app-postgres-app-1 | $ pm2-runtime start --node-args="-r dotenv/config" packages/app/server/lib/index.js -- start
app-postgres-app-1 | 2022-04-28T15:45:38: PM2 log: Launching in no daemon mode
app-postgres-app-1 | 2022-04-28T15:45:38: PM2 log: App [index:0] starting in -fork mode-
app-postgres-app-1 | 2022-04-28T15:45:38: PM2 log: App [index:0] online
app-postgres-app-1 | 🚀 NocoBase server running at: http://localhost:13000/
4. Войдите в NocoBase
Откройте http://localhost:13000 в браузере. Начальная учетная запись и пароль: admin@nocobase.com и admin123.
Уведомление о безопасности учетной записи
После первого входа сразу смените пароль по умолчанию, чтобы обеспечить безопасность системы.
5. Развертывание в production
Если вы используете образ со встроенным Nginx, обычно лучше не публиковать 13000 напрямую в интернет. Более распространенный вариант — оставить порт контейнера доступным только на хосте, а домен, HTTPS и обратный прокси настроить в Nginx на хосте.
Проксирование корневого пути через Nginx
Следующая конфигурация проксирует запросы к домену на http://127.0.0.1:13000/:
server {
listen 80;
server_name your_domain.com; # Замените your_domain.com на ваш домен
location / {
proxy_pass http://127.0.0.1:13000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
proxy_set_header Host $final_host;
proxy_set_header Referer $http_referer;
proxy_set_header User-Agent $http_user_agent;
add_header Cache-Control "no-cache, no-store" always;
proxy_cache_bypass $http_upgrade;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
proxy_buffering off;
}
}
Если вы также хотите включить HTTPS, настройте 443 и сертификат в Nginx на хосте. Контейнеру NocoBase не нужно отдельно обрабатывать сертификаты.
Блок location / в этой конфигурации для корневого пути также проксирует /api/, /ws и /files/. Если вы разделяете статические ресурсы и маршруты приложения, убедитесь, что /files/ по-прежнему передаётся в NocoBase и не обрабатывается как статический каталог.
Развертывание в подпути
Если вы хотите развернуть приложение в подпути, например https://your_domain.com/nocobase/, сначала настройте переменную окружения APP_PUBLIC_PATH:
services:
app:
image: nocobase/nocobase:latest
environment:
+ - APP_PUBLIC_PATH=/nocobase/
Сохраните / в начале и в конце пути. После настройки URL приложения станет http://127.0.0.1:13000/nocobase/.
Затем настройте Nginx на хосте с тем же подпут ем:
server {
listen 80;
server_name your_domain.com; # Замените your_domain.com на ваш домен
location /nocobase/ {
proxy_pass http://127.0.0.1:13000/nocobase/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
proxy_set_header Host $final_host;
proxy_set_header Referer $http_referer;
proxy_set_header User-Agent $http_user_agent;
add_header Cache-Control "no-cache, no-store" always;
proxy_cache_bypass $http_upgrade;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
proxy_buffering off;
}
# Сохранить совместимость с URL доступа к файлам на корневом уровне.
location ^~ /files/ {
proxy_pass http://127.0.0.1:13000;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $upstream_x_forwarded_proto;
proxy_set_header Host $final_host;
proxy_set_header Referer $http_referer;
proxy_set_header User-Agent $http_user_agent;
add_header Cache-Control "no-cache, no-store" always;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
Обратите внимание на следующее:
APP_PUBLIC_PATH и путь в proxy_pass должны совпадать. Если с одной из сторон отсутствует /nocobase/, статические ресурсы и маршрутизация обычно работают некорректно
/nocobase/files/ передаётся через location /nocobase/; совместимый корневой маршрут /files/ необходимо отдельно передавать в NocoBase
Другие варианты
Если вы не хотите использовать встроенный Nginx, можно также посмотреть эти два варианта с отдельным прокси: