Разработка внутреннего инструмента на Appsmith
Appsmith — open-source платформа для создания внутренних инструментов. В отличие от Retool, Appsmith полностью self-hosted и бесплатен для неограниченного числа пользователей. Исходный код открыт — можно форкнуть и дорабатывать.
Преимущества Appsmith
- Self-hosted — данные не покидают вашу инфраструктуру
- Open-source — MIT лицензия, нет vendor lock-in
- Docker-деплой за 5 минут
- Поддержка PostgreSQL, MySQL, MongoDB, REST API, GraphQL, Redis, S3
Установка
# Docker Compose
curl -L https://bit.ly/32jBNin -o $PWD/docker-compose.yml
docker-compose up -d
# Appsmith на http://localhost:80
# docker-compose.yml для продакшна
services:
appsmith:
image: index.docker.io/appsmith/appsmith-ee:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./stacks:/appsmith-stacks
environment:
APPSMITH_ENCRYPTION_PASSWORD: "strong-random-password"
APPSMITH_ENCRYPTION_SALT: "random-salt"
APPSMITH_SUPERVISOR_TOKEN: "token"
restart: unless-stopped
Структура приложения
Appsmith-приложение состоит из:
- Pages — отдельные экраны (Dashboard, Users, Orders)
- Widgets — компоненты UI (Table, Form, Chart, Modal)
- Queries — запросы к БД или API
- JSObjects — JavaScript для бизнес-логики
Пример: CRM-панель
// JSObject: userActions
export default {
// Блокировка пользователя с подтверждением
async blockUser() {
const confirmed = await showAlert(
`Заблокировать ${usersTable.selectedRow.email}?`,
'confirm'
);
if (!confirmed) return;
await blockUserQuery.run({
userId: usersTable.selectedRow.id,
reason: blockReasonInput.text
});
showAlert('Пользователь заблокирован', 'success');
await getUsersQuery.run();
},
// Экспорт в CSV
exportToCSV() {
const data = getUsersQuery.data.map(u => ({
Email: u.email,
Статус: u.status,
'Дата регистрации': u.created_at
}));
download(data, 'users.csv', 'text/csv');
}
}
Ролевой доступ
Appsmith поддерживает группы пользователей с разными правами на приложение: просмотр, редактирование, публикация.
Сроки
Простой инструмент с CRUD-операциями — 2–4 дня. Многостраничный инструмент с ролями — 1–2 недели.







