Установка
Готовый контейнер поддерживает linux/amd64, linux/arm64 и linux/arm/v7 (armhf). Docker Compose рекомендуется для воспроизводимого хранения конфигурации и описания томов.
Docker Compose
Для самой простой установки скачайте готовый Compose-файл, сгенерируйте случайный JWT_SECRET и запустите DashLit:
mkdir dashlit && cd dashlit
curl -fsSLo docker-compose.yml https://raw.githubusercontent.com/codewec/dashlit/main/docker-compose.yml
printf 'JWT_SECRET=%s\n' "$(openssl rand -hex 32)" > .env
docker compose up -dОткройте http://localhost:3000 и зарегистрируйте первую учётную запись — она получит права администратора. Не публикуйте созданный файл .env и не добавляйте его в Git.
Также файлы установки можно создать вручную. Сохраните следующий файл как docker-compose.yml:
services:
dashlit:
image: ghcr.io/codewec/dashlit:main
container_name: dashlit
restart: unless-stopped
ports:
- '3000:8080'
environment:
JWT_SECRET: '${JWT_SECRET}'
volumes:
- dashlit-data:/data
volumes:
dashlit-data:Рядом создайте файл .env:
JWT_SECRET=replace-with-a-long-random-secretИспользуйте случайно сгенерированный секрет и не добавляйте его в Git. Запустите сервис:
docker compose up -dBind mount
В минимальном примере используется именованный том: Docker инициализирует /data с владельцем, заданным внутри образа. Если вместо него нужен каталог хоста:
volumes:
- ./data:/dataсоздайте каталог до запуска контейнера и разрешите запись всем. Это самый простой вариант, при котором каталог остаётся доступен пользователю хоста:
mkdir -p data
sudo chmod -R 777 data
docker compose up -dDocker не меняет владельца каталогов хоста, подключённых через bind mount. Если ./data отсутствует, Docker обычно создаёт его как root:root, из-за чего непривилегированный процесс DashLit не может туда писать. В системах с SELinux также используйте ./data:/data:Z.
Для более точечной настройки назначьте каталог UID/GID контейнера 10001:10001 и ограничьте доступ. После этого обычный пользователь хоста может потерять право записи в каталог:
sudo chown -R 10001:10001 data
sudo chmod -R 750 dataПеред обычным запуском DashLit проверяет каталоги данных, базы, загруженных иконок и кеша иконок. Если какой-либо путь недоступен для записи, по обычному адресу DashLit открывается страница с описанием ошибки, а подробности также записываются в лог. Процесс остаётся запущенным вместо цикла перезапусков, а контейнер получает статус unhealthy. Исправьте права и перезапустите контейнер:
docker compose restart dashlitDocker CLI
docker pull ghcr.io/codewec/dashlit:main
docker run -d \
--name dashlit \
--restart unless-stopped \
-p 3000:8080 \
-e JWT_SECRET='replace-with-a-long-random-secret' \
-v dashlit-data:/data \
ghcr.io/codewec/dashlit:mainСуществующая Linux-система
DashLit можно установить как самостоятельный сервис в Linux с systemd. Установщик поддерживает amd64, arm64 и armv7, загружает подходящий бинарник из последнего GitHub Release и проверяет его по опубликованной контрольной сумме SHA-256.
Запустите его с правами root:
curl -fsSL https://raw.githubusercontent.com/codewec/dashlit/main/scripts/install.sh | sudo bashЗависимости, устанавливаемые скриптом
Установщик проверяет наличие curl, tar, sha256sum и openssl. Если хотя бы одна команда отсутствует, через доступный системный менеджер пакетов устанавливаются:
- Debian и Ubuntu:
ca-certificates,curl,tar,coreutils,openssl; - Fedora и другие системы с DNF:
ca-certificates,curl,tar,coreutils,openssl; - RHEL-совместимые системы с YUM:
ca-certificates,curl,tar,coreutils,openssl; - Alpine:
ca-certificates,curl,tar,coreutils,openssl.
В целевой системе уже должны использоваться systemd и стандартные команды управления учётными записями: useradd, usermod и groupadd. Скрипт не устанавливает компилятор Go, Node.js, npm, pnpm, сервер базы данных или Docker. Само приложение остаётся самостоятельным бинарником; SQLite используется через встроенный Go-драйвер.
При установке используются следующие пути:
| Назначение | Путь |
|---|---|
| Бинарник и установленная версия | /opt/dashlit |
| Конфигурация | /etc/dashlit/dashlit.env |
| База данных и иконки | /var/lib/dashlit |
| unit systemd | /etc/systemd/system/dashlit.service |
DashLit работает от отдельного системного пользователя и слушает порт 8080. Для настройки OIDC и других параметров измените /etc/dashlit/dashlit.env, затем примените изменения:
sudo systemctl restart dashlitОбновления
Установщик добавляет команду dashlit-update. Запустите её для установки последнего релиза:
sudo dashlit-updateОбновление проверяет контрольную сумму релиза, сохраняет конфигурацию и данные и возвращает предыдущий исполняемый файл, если обновлённый сервис не запускается. Перед значительными обновлениями сохраняйте резервную копию /var/lib/dashlit и /etc/dashlit/dashlit.env.
Удаление
Чтобы удалить systemd-сервис, исполняемый файл и команду обновления, сохранив конфигурацию и данные, выполните:
curl -fsSL https://raw.githubusercontent.com/codewec/dashlit/main/scripts/uninstall.sh | sudo bashКаталоги /etc/dashlit и /var/lib/dashlit останутся на месте, поэтому приложение можно будет установить повторно. Для полного удаления этих каталогов и системной учётной записи dashlit передайте --purge:
curl -fsSL https://raw.githubusercontent.com/codewec/dashlit/main/scripts/uninstall.sh | sudo bash -s -- --purgeПолное удаление необратимо. Если данные могут понадобиться, сначала создайте их резервную копию.
Proxmox VE LXC
Выполните следующую команду с правами root в консоли узла Proxmox VE:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/codewec/dashlit/main/scripts/proxmox-lxc.sh)"Скрипт создаёт непривилегированный контейнер Debian 13 с 1 ядром CPU, 512 МБ памяти, диском 4 ГБ, сетью DHCP через vmbr0, автоматическим запуском и функцией nesting=1, которая требуется systemd 257 в актуальных шаблонах Debian 13. Сначала он использует самый новый шаблон Debian 13 для архитектуры узла, уже находящийся в выбранном хранилище шаблонов. Загрузка выполняется только тогда, когда подходящего локального шаблона Debian 13 нет. Затем внутри контейнера вызывается обычный Linux-установщик. DashLit слушает порт 80 и доступен по адресу http://IP_КОНТЕЙНЕРА без указания порта.
На узле Proxmox скрипт использует только входящие в Proxmox VE инструменты: pct, pvesh, pvesm и pveam. В новом контейнере сначала устанавливаются ca-certificates и curl, после чего обычный установщик проверяет и при необходимости добавляет перечисленные выше инструменты для работы с архивами, контрольными суммами и OpenSSL.
Значения по умолчанию можно изменить переменными окружения:
| Переменная | По умолчанию | Назначение |
|---|---|---|
DASHLIT_CTID | Следующий свободный ID | ID контейнера |
DASHLIT_HOSTNAME | dashlit | Имя контейнера |
DASHLIT_STORAGE | Первое активное хранилище rootdir | Хранилище корневой файловой системы |
DASHLIT_TEMPLATE_STORAGE | Первое активное хранилище vztmpl | Хранилище шаблона Debian |
DASHLIT_BRIDGE | vmbr0 | Сетевой мост |
DASHLIT_IP_CONFIG | dhcp | Значение параметра Proxmox ip= |
DASHLIT_CORES | 1 | Количество ядер CPU |
DASHLIT_MEMORY | 512 | Объём памяти в МБ |
DASHLIT_DISK | 4 | Размер диска в ГБ |
Пример:
DASHLIT_CTID=120 DASHLIT_STORAGE=local-lvm DASHLIT_MEMORY=1024 \
bash -c "$(curl -fsSL https://raw.githubusercontent.com/codewec/dashlit/main/scripts/proxmox-lxc.sh)"Консоль Proxmox автоматически открывает локальную root-сессию без запроса пароля. Также в контейнер можно войти с хоста командой pct enter CTID. Автоматический вход действует только для консоли и не разрешает беспарольный вход root по SSH. Для обновления выполните внутри контейнера dashlit-update.
Команда удаления удаляет DashLit внутри LXC, но не сам контейнер. Если контейнер больше не нужен, создайте его резервную копию и удалите средствами Proxmox VE.
Почему используется собственный установщик?
Форма добавления нового приложения Community Scripts сейчас требует не менее 1000 звёзд GitHub или сопоставимого публичного показателя распространённости. DashLit пока не соответствует этому требованию. Вместо постоянной зависимости от изменённого форка ProxmoxVE проект публикует небольшой установщик, который поддерживается и выпускается вместе с самим приложением. Требование можно проверить в репозитории для contributions Community Scripts.
Обратный прокси
Для доступа из интернета или общей сети публикуйте DashLit через обратный прокси с HTTPS. Проксируйте запросы на порт 8080 контейнера и передавайте исходные заголовки хоста и протокола. Специальная настройка WebSocket не требуется.
При использовании OIDC задайте внешний HTTPS callback и укажите точно такой же URL у провайдера:
OIDC_REDIRECT_URL=https://dash.example.com/api/auth/oidc/callbackФиксация версии
Тег main указывает на последний релиз текущего поколения DashLit. Для предсказуемых обновлений используйте конкретный тег релиза, например:
image: ghcr.io/codewec/dashlit:v1.0.0Тег dev пересобирается после каждого push в ветку main. Он может содержать изменения, которые ещё не вошли в релиз, и предназначен для тестирования.
Тег latest намеренно не используется для текущего поколения, чтобы существующие установки старой версии не обновились автоматически.
Перед обновлением прочитайте историю изменений, сохраните /data, загрузите новый образ и пересоздайте контейнер.
Сборка из исходников
Для разработки необходимы Go 1.25+, Node.js 22+ и pnpm:
git clone https://github.com/codewec/dashlit.git
cd dashlit
cp .env.example .env
cd frontend && pnpm install && cd ..
make build
./appДля разработки с автоматическим обновлением запустите make dev-backend и make dev-frontend в разных терминалах.