204 lines
9.2 KiB
Markdown
204 lines
9.2 KiB
Markdown
# usefull commands
|
|
- Убрать переносы строк: sed -i 's/\r$//' name-file.sh
|
|
- find . -type f \( -name '*.sh' -o -name 'validate-env' \) -exec dos2unix {} +
|
|
- docker compose stop # мягко останавливает контейнеры (не удаляет)
|
|
- sudo shutdown -h now # выглючить ВМ
|
|
- Генерация паролей
|
|
- (со спец.символами) openssl rand -base64 32
|
|
- (без спец.символов) openssl rand -hex 16
|
|
- openssl rand -base64 16 | xclip -selection clipboard # Linux
|
|
|
|
Туннель до БД: ssh -i C:\Users\MI\.ssh\hansel -L 5433:192.168.0.211:5433 root@135.106.164.58 -N
|
|
|
|
# Разворачиваем инфраструктуру в Селектел ч1
|
|
|
|
## Создание сети
|
|
|
|
## Создание групп безопасности для сети и для БД
|
|
Для сети открываем порты 80, 22, 443
|
|
Для БД открываем порты 5432, 5433 но только из CIDR (192.168.0.211\24)
|
|
|
|
## Создаем ВМ, подключаем к новой сети (через порт) и перезагружаем (либо руками вводить новые сетевые настройки - надо выбрать)
|
|
|
|
# Подключение к ВМ и первичный скрипт
|
|
++ ssh -i C:\Users\MI\.ssh\hansel root@135.106.164.58
|
|
++ scp -i C:\Users\MI\.ssh\hansel -r "C:\Users\MI\Documents\Assistent\HAN_chat_specification\codebase\backend\deployment\scripts\setup-vm.sh" root@135.106.164.58:/tmp/setup-vm.sh
|
|
chmod +x /tmp/setup-vm.sh
|
|
sudo /tmp/setup-vm.sh
|
|
|
|
# Скрипт создал деплой пользователя. Нужно Перенести туда публичный ключ и дать права на файл и папку
|
|
|
|
## Вставляем публичный ключ новой строкой Далее даем права
|
|
sudo nano /home/deploy/.ssh/authorized_keys
|
|
sudo chmod 700 /home/deploy/.ssh
|
|
sudo chmod 600 /home/deploy/.ssh/authorized_keys
|
|
sudo chown -R deploy:deploy /home/deploy/.ssh
|
|
|
|
## Пароль деплою для использования sudo
|
|
sudo passwd deploy
|
|
|
|
## После этого можно подключаться под деплой пользователем
|
|
ssh -i C:\Users\MI\.ssh\han_chat_deploy deploy@135.106.164.58
|
|
|
|
## GIT не работал. Проект пришлось копировать.
|
|
tar -C HAN_chat_specification/codebase/backend -czf han-chat-backend.tar.gz .
|
|
scp -i C:\Users\MI\.ssh\han_chat_deploy C:\Users\MI\Documents\Assistent\han-chat-backend.tar.gz deploy@135.106.164.58:/tmp/
|
|
|
|
## Дальше распаковка
|
|
cd /opt/han-chat/backend
|
|
tar -xzf /tmp/han-chat-backend.tar.gz
|
|
|
|
## Правим переносы строк и даем права на исполнение
|
|
find . -type f \( -name '*.sh' -o -name 'validate-env' \) -exec dos2unix {} +
|
|
chmod +x scripts/validate-env deployment/scripts/*.sh redis/scripts/*.sh nginx/scripts/*.sh
|
|
|
|
# Разворачиваем инфраструктуру в Селектел ч2
|
|
|
|
## Создаем БД
|
|
В базе подключаем pgcrypto
|
|
Чтобы корректно работал PgBouncer выбираем session pooling
|
|
|
|
### Копируем СА сертификат
|
|
|
|
Вариант Деплоя:
|
|
mkdir -p /opt/han-chat/backend/secrets/pg
|
|
scp -i C:\Users\MI\.ssh\han_chat_deploy -r C:\Users\MI\Documents\job\HAN_new_life\HANapp\Production\sertificates\CA.pem deploy@135.106.164.58:/opt/han-chat/backend/secrets/pg/ca.pem
|
|
chmod 644 /opt/han-chat/backend/secrets/pg/ca.pem
|
|
|
|
Вариант Селектела:
|
|
mkdir -p ~/.postgresql/
|
|
wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.postgresql/root.crt
|
|
chmod 0600 ~/.postgresql/root.crt
|
|
|
|
### Проверка подключения к Postgers в ВМ
|
|
nc -zv 192.168.0.211 5433
|
|
|
|
sudo apt update
|
|
sudo apt install postgresql-client
|
|
|
|
psql "host=master.ef54e3e4-ad3d-4b80-a6af-d63269e0895a.c.dbaas.selcloud.ru \
|
|
port=5432 \
|
|
dbname=han_chat \
|
|
user=dbAdmin \
|
|
sslmode=verify-ca"
|
|
|
|
(psql "host=master.ef54e3e4-ad3d-4b80-a6af-d63269e0895a.c.dbaas.selcloud.ru port=5432 dbname=han_chat user=dbAdmin sslmode=verify-ca")
|
|
|
|
### Заводим пользователей и схемы
|
|
|
|
Пользователей создаем через интерфейс селектела.
|
|
Под админом даем права на создание в БД:
|
|
GRANT CREATE ON DATABASE han_chat TO han_app;
|
|
GRANT CREATE ON DATABASE han_chat TO bitrix_local_app;
|
|
GRANT CREATE ON DATABASE han_chat TO bitrix_sync_user;
|
|
GRANT CREATE ON DATABASE han_chat TO message_safety_app;
|
|
GRANT CREATE ON DATABASE han_chat TO keycloak_user;
|
|
|
|
Схемы создаем от лица пользователей, заходя каждым из них в БД.
|
|
+ Запрещаем всем посторонним входить в схему han_app и др.
|
|
CREATE SCHEMA IF NOT EXISTS han_app;
|
|
REVOKE ALL ON SCHEMA han_app FROM PUBLIC;
|
|
ALTER ROLE CURRENT_USER IN DATABASE han_chat SET search_path TO han_app;
|
|
SHOW search_path; --чтобы заработало надо переподключиться (должно быть han_app)
|
|
|
|
CREATE SCHEMA IF NOT EXISTS bitrix_local;
|
|
REVOKE ALL ON SCHEMA bitrix_local FROM PUBLIC;
|
|
ALTER ROLE CURRENT_USER IN DATABASE han_chat SET search_path TO bitrix_local;
|
|
SHOW search_path; --чтобы заработало надо переподключиться
|
|
|
|
CREATE SCHEMA IF NOT EXISTS bitrix_sync;
|
|
REVOKE ALL ON SCHEMA bitrix_sync FROM PUBLIC;
|
|
ALTER ROLE CURRENT_USER IN DATABASE han_chat SET search_path TO bitrix_sync;
|
|
SHOW search_path; --чтобы заработало надо переподключиться
|
|
|
|
CREATE SCHEMA IF NOT EXISTS message_safety;
|
|
REVOKE ALL ON SCHEMA message_safety FROM PUBLIC;
|
|
ALTER ROLE CURRENT_USER IN DATABASE han_chat SET search_path TO message_safety;
|
|
SHOW search_path; --чтобы заработало надо переподключиться
|
|
|
|
CREATE SCHEMA IF NOT EXISTS keycloak;
|
|
REVOKE ALL ON SCHEMA keycloak FROM PUBLIC;
|
|
ALTER ROLE CURRENT_USER IN DATABASE han_chat SET search_path TO keycloak;
|
|
SHOW search_path; --чтобы заработало надо переподключиться
|
|
|
|
Проверка search_path
|
|
SELECT r.rolname, d.datname, s.setconfig
|
|
FROM pg_db_role_setting s
|
|
JOIN pg_roles r ON r.oid = s.setrole
|
|
JOIN pg_database d ON d.oid = s.setdatabase
|
|
WHERE r.rolname in ('han_app',
|
|
'bitrix_local_app',
|
|
'bitrix_sync_user',
|
|
'message_safety_app',
|
|
'keycloak_user');
|
|
|
|
|
|
|
|
После реализации bitrix_sync (проверить, вероятно не на все таблицы права нужны):
|
|
-- Даем право на чтение (SELECT) всех СУЩЕСТВУЮЩИХ таблиц в схеме
|
|
GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA han_app TO bitrix_sync_user;
|
|
-- Настраиваем права по умолчанию для новых таблиц
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA han_app
|
|
GRANT SELECT ON TABLES TO bitrix_sync_user;
|
|
-- Если нужно дать право на чтение и для новых последовательностей (sequences):
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA han_app
|
|
GRANT USAGE, SELECT ON SEQUENCES TO bitrix_sync_user;
|
|
|
|
## Заводим S3 хранилища:
|
|
|
|
Создаем 2 сервисных пользователя и заводим им ключи:
|
|
- API backend SELECTEL_S3_ACCESS_KEY / SELECTEL_S3_SECRET_KEY
|
|
- Message Safety SELECTEL_S3_QUARANTINE_READ_ACCESS_KEY / SELECTEL_S3_QUARANTINE_READ_SECRET_KEY
|
|
|
|
Создаем 3 приватных бакета
|
|
- han-chat-quarantine (политика доступа API backend RW, Message Safety R)
|
|
- han-chat-attachments (политика доступа API backend RW)
|
|
- han-chat-documents (политика доступа API backend RW)
|
|
|
|
RW:
|
|
ListBucket
|
|
GetBucketLocation
|
|
PutObject
|
|
GetObject
|
|
DeleteObject
|
|
ListBucketMultipartUploads
|
|
ListMultipartUploadParts
|
|
AbortMultipartUpload
|
|
|
|
R:
|
|
ListBucket
|
|
GetBucketLocation
|
|
GetObject
|
|
ListBucketMultipartUploads
|
|
ListMultipartUploadParts
|
|
|
|
Политика CORS (бакет han-chat-quarantine, vHosted обязателен):
|
|
Allowed origin: https://chat.han0107.ru
|
|
Methods: POST, PUT, GET, HEAD
|
|
Headers: * (или явно content-type; wildcard x-amz-* в Selectel не работает)
|
|
Expose headers: ETag
|
|
|
|
# Тест инфраструктуры
|
|
|
|
mkdir -p /opt/han-chat/infratest
|
|
cd /opt/han-chat/infratest
|
|
|
|
scp -i C:\Users\MI\.ssh\hansel -r "C:\Users\MI\Documents\Assistent\HAN_chat_specification\infratest\*" root@135.106.164.58:/opt/han-chat/infratest
|
|
|
|
--настраиваю env на локальной машине и копирую на диск
|
|
scp -i C:\Users\MI\.ssh\hansel -r "C:\Users\MI\Documents\job\HAN_new_life\HANapp\Production\.env" root@135.106.164.58:/opt/han-chat/infratest/
|
|
|
|
|
|
Создаем изолированное окружение:
|
|
python3 -m venv .venv
|
|
. .venv/bin/activate
|
|
python3 -m pip install --upgrade pip
|
|
python3 -m pip install -r requirements.txt
|
|
|
|
Если не работает, то надо DNS переправить на eth0
|
|
resolvectl dns eth0 1.1.1.1 8.8.8.8
|
|
resolvectl domain eth0 '~.'
|
|
resolvectl flush-caches
|
|
resolvectl query pypi.org
|
|
|