Создаем сеть: docker network create app-network Войти в БД: docker exec -it postgres psql -U ncp_db -d no_copy_ Выполнить команду: \du Должен быть один пользователь: List of roles Role name | Attributes -----------+------------------------------------------------------------ ncp_db | Superuser, Create role, Create DB, Replication, Bypass RLS суперпользователь БД: postgres/postgres пользователь бд для бэка ncp_db / ncpDbApp Подключение к БД для приложения,если volume не существует : Создаться автоматически. Если уже существует volume : docker exec -it postgres psql -U postgres -d postgres CREATE USER ncp_db WITH PASSWORD 'ncpDbApp'; GRANT ALL PRIVILEGES ON DATABASE no_copy_ TO ncp_db; \du \q ------- psql -U postgres -d no_copy_ -- база GRANT CONNECT ON DATABASE no_copy_ TO ncp_db; -- схема GRANT USAGE ON SCHEMA public TO ncp_db; -- существующие таблицы GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO ncp_db; -- существующие sequence (очень важно для id) GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO ncp_db; -- будущие таблицы ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ncp_db; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO ncp_db; Зайти в контейнер: docker exec -it {name} bash ------ Создать для сущности FileEntity sequence для икремента индетификатора CREATE SEQUENCE IF NOT EXISTS file_support_id_seq START 1; ALTER TABLE file_entities ALTER COLUMN support_id SET DEFAULT nextval('file_support_id_seq'); ---------- Раздать всем лимиты,у кого их нет INSERT INTO protect_check (user_id, check_limit, count_checked, last_check_at, version) SELECT id as user_id, 10 as check_limit, 0 as count_checked, NULL as last_check_at, 0 as version FROM users WHERE id NOT IN (SELECT user_id FROM protect_check); -------- Обновлять констрейнты для file_entities ALTER TABLE file_entities DROP CONSTRAINT file_entities_status_check; ALTER TABLE file_entities ADD CONSTRAINT file_entities_status_check CHECK (status IN ( 'ACTIVE', 'DELETED', 'PROCESSING', 'VIOLATION', 'CHECKED', 'ERROR', 'TEMP' )); ------- Записи для лимитов поиска INSERT INTO protect_check (user_id, limit_check, count_checked, last_check_at, version) SELECT u.id, 100, -- limit_check = 100 0, -- count_checked = 0 NULL, -- last_check_at = NULL 0 -- version = 0 FROM users u WHERE NOT EXISTS ( SELECT 1 FROM protect_check pc WHERE pc.user_id = u.id ); ------ Скрипты рефералки INSERT INTO referrals (user_id, referral_link, inviter_id, level_id, total_income, is_active, created_at, hold_balance) SELECT u.id as user_id, CONCAT('ref-', u.id, '-', LOWER(SUBSTRING(MD5(RANDOM()::text) FROM 1 FOR 8))) as referral_link, NULL as inviter_id, 'bronze' as level_id, 0 as total_income, false as is_active, NOW() as created_at, 0 as hold_balance FROM users u LEFT JOIN referrals r ON u.id = r.user_id WHERE u.company_id IS NULL AND r.user_id IS NULL ORDER BY u.id; ------- INSERT INTO referral_levels (id, name, min_invitees, reward_percentage) VALUES ('bronze', 'BRONZE', 0, 15), ('silver', 'SILVER', 6, 18), ('gold', 'GOLD', 16, 22), ('platinum', 'PLATINUM', 50, 25); ------ Настройка Яндекс Клауд 1. YCAJEpWAtaVkVGX0sH6_EupEg - индетификатор ключа 2. YCMmVykfXrZ_nfU13Vo4yoCVGa70DnTlBgF1pUzO - секретный ключ private static final String KEY_ID = "YCAJEmHZcWxzf4oGWvETG3mms"; private static final String SECRET_KEY = "YCPAPZ32XC-LWb8xE0b_xTcBD8NZUCHpSOfu8LUG";