Merge branch 'master' of https://git.mesh.kz/igor/Ubuntu_docs
This commit is contained in:
@ -53,6 +53,7 @@ services:
|
|||||||
- GOTIFY_SERVER_SSL_ENABLED=true
|
- GOTIFY_SERVER_SSL_ENABLED=true
|
||||||
- GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt
|
- GOTIFY_SERVER_SSL_CERTFILE=/certs/gotify.crt
|
||||||
- GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key
|
- GOTIFY_SERVER_SSL_CERTKEY=/certs/gotify.key
|
||||||
|
- GIN_MODE=debug
|
||||||
networks:
|
networks:
|
||||||
- gotify-net
|
- gotify-net
|
||||||
|
|
||||||
@ -206,7 +206,8 @@ sudo pdnsutil add-record locust.ge @ NS 3600 ns2.geovizor.top
|
|||||||
|
|
||||||
For deleting record please run command:
|
For deleting record please run command:
|
||||||
```sh
|
```sh
|
||||||
pdnsutil delete-rrset locust.ge locust.ge.locust.ge NS
|
sudo pdnsutil delete-rrset locust.ge locust.ge.locust.ge NS
|
||||||
|
sudo pdnsutil delete-rrset geovizor.top gotify A
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -223,7 +224,7 @@ Minimum = 3600 (1 час)
|
|||||||
Проверим список зон
|
Проверим список зон
|
||||||
```sh
|
```sh
|
||||||
sudo pdnsutil list-all-zones &&
|
sudo pdnsutil list-all-zones &&
|
||||||
sudo pdnsutil list-zone locust.kz
|
sudo pdnsutil list-zone geovizor.top
|
||||||
```
|
```
|
||||||
Проверяем отвечалет ли:
|
Проверяем отвечалет ли:
|
||||||
```sh
|
```sh
|
||||||
@ -245,6 +246,22 @@ dig @88.218.94.134 -p 53 powerdns.geovizor.top A
|
|||||||
### Теперь можно настроить HTTPS для взаимодействия через API с сервером для динамического задания IP адресов
|
### Теперь можно настроить HTTPS для взаимодействия через API с сервером для динамического задания IP адресов
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
new_ip_address=
|
||||||
|
FILE=/etc/ddns/mesh.txt
|
||||||
|
if test -f "$FILE"; then
|
||||||
|
new_ip_address=`cat $FILE`
|
||||||
|
rm $FILE
|
||||||
|
fi
|
||||||
|
|
||||||
|
len=${#new_ip_address}
|
||||||
|
if [ $len -gt 3 ]
|
||||||
|
then
|
||||||
|
echo "New IP address = $new_ip_address"
|
||||||
|
else
|
||||||
|
echo "Not find IP address"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
API_KEY="40c89f2a-e2f3-4ff8-a245-3547111f6677"
|
API_KEY="40c89f2a-e2f3-4ff8-a245-3547111f6677"
|
||||||
SERVER="156.244.31.209"
|
SERVER="156.244.31.209"
|
||||||
ZONE="geovizor.top"
|
ZONE="geovizor.top"
|
||||||
@ -364,7 +381,7 @@ journalctl -u pdns-recursor --no-pager | tail -n 50
|
|||||||
```
|
```
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------
|
||||||
## ********** По идее отключать не нужно так как systemd-resolved использует другой IP: 127.0.0.54:53 (Отключаю systemd-resolved иначе он будет конфликтовать с PowerDNS) **********
|
## ********** По идее systemd-resolved отключать не нужно так как он использует другой IP: 127.0.0.54:53 **********
|
||||||
|
|
||||||
Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved)
|
Редактирую /etc/netplan/ для того чтобы прописать поднятый DNS сервер на 127.0.0.1 (не знаю сработает ли так как отключу systemd-resolved)
|
||||||
```sh
|
```sh
|
||||||
@ -613,7 +630,7 @@ open http://192.168.200.85:9191/login
|
|||||||
|
|
||||||
|
|
||||||
----------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------
|
||||||
Настраиваем запус на постоянную работу через Gunicorn и systemd
|
Настраиваем запуск на постоянную работу через Gunicorn и systemd
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cd /opt/web/powerdns-admin &&
|
cd /opt/web/powerdns-admin &&
|
||||||
|
|||||||
52
DNS/Ubuntu_config.md
Normal file
52
DNS/Ubuntu_config.md
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
Чтобы в Ubuntu все домены с маской *.local отправлялись на DNS-сервер 192.168.200.85 (где работает PowerDNS на порту 53), тебе нужно настроить DNS-резолвинг так, чтобы:
|
||||||
|
|
||||||
|
Все запросы к доменам, оканчивающимся на .local, отправлялись на указанный DNS.
|
||||||
|
|
||||||
|
Остальные домены резолвились через системный DNS как обычно.
|
||||||
|
|
||||||
|
✅ Способ 1: Использовать systemd-resolved (рекомендуется для Ubuntu 18.04+, особенно 20.04 и 22.04)
|
||||||
|
Ubuntu по умолчанию использует systemd-resolved, который поддерживает пер-доменное направление DNS-запросов.
|
||||||
|
|
||||||
|
Шаги:
|
||||||
|
Создай файл в /etc/systemd/resolved.conf.d/:
|
||||||
|
```sh
|
||||||
|
ssh igor@192.168.200.84 -p 22
|
||||||
|
```
|
||||||
|
|
||||||
|
Создаю директорию
|
||||||
|
```sh
|
||||||
|
sudo mkdir -p /etc/systemd/resolved.conf.d &&
|
||||||
|
sudo mcedit /etc/systemd/resolved.conf.d/local-dns.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Прописываю содержимое:
|
||||||
|
```conf
|
||||||
|
[Resolve]
|
||||||
|
DNS=192.168.200.85
|
||||||
|
Domains=~local
|
||||||
|
```
|
||||||
|
|
||||||
|
Перезапускаю
|
||||||
|
```sh
|
||||||
|
sudo systemctl restart systemd-resolved &&
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяю настройки
|
||||||
|
```sh
|
||||||
|
resolvectl status
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверяем
|
||||||
|
```sh
|
||||||
|
ping gotify.local
|
||||||
|
```
|
||||||
|
Проверяем сертификат:
|
||||||
|
```sh
|
||||||
|
curl https://gotify.local
|
||||||
|
```
|
||||||
|
|
||||||
|
Добавляем корневой сертификат для домена local.
|
||||||
|
```sh
|
||||||
|
sudo cp rootCA.crt /usr/local/share/ca-certificates/rootCA.crt &&
|
||||||
|
sudo update-ca-certificates
|
||||||
|
```
|
||||||
171
Logs/Vector_dev_install.md
Normal file
171
Logs/Vector_dev_install.md
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
# Настройка Vector для отправки логов в Gotify
|
||||||
|
|
||||||
|
Эта инструкция описывает, как установить Vector, настроить его для чтения JSON-логов из файла `/opt/org_ccalm_main/logs/ccalm.log`, фильтрации строк с уровнем `ERROR` и отправки уведомлений в Gotify.
|
||||||
|
|
||||||
|
---
|
||||||
|
## 0. ✅ Подключаемся к инфраструктуре
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ssh igor@ccalm.org -p 2200
|
||||||
|
```
|
||||||
|
|
||||||
|
## Предварительные требования
|
||||||
|
- ОС: Ubuntu/Debian (для других ОС уточните, чтобы адаптировать команды).
|
||||||
|
- Файл логов: `/opt/org_ccalm_main/logs/ccalm.log` с JSON-строками (поля `level` и `message`).
|
||||||
|
- Gotify: Доступный сервер Gotify с URL и токеном (например, `https://gotify.example.com/message?token=<your-token>`).
|
||||||
|
- Доступ к терминалу с правами `sudo`.
|
||||||
|
|
||||||
|
|
||||||
|
## Шаг 1: Установка Vector
|
||||||
|
|
||||||
|
Пробуем скачать deb пакет с сайта
|
||||||
|
```sh
|
||||||
|
curl -L https://packages.timber.io/vector/0.43.1/vector_0.43.1-1_amd64.deb -o vector_0.43.1-1_amd64.deb &&
|
||||||
|
sudo dpkg -i vector_0.43.1-1_amd64.deb &&
|
||||||
|
sudo apt-get install -f &&
|
||||||
|
vector --version
|
||||||
|
```
|
||||||
|
|
||||||
|
## Шаг 2: Создание конфигурации Vector
|
||||||
|
Vector использует YAML для конфигурации. Настроим чтение логов, фильтрацию `ERROR` и отправку в Gotify.
|
||||||
|
|
||||||
|
1. Создайте файл конфигурации `/etc/vector/vector.yaml`:
|
||||||
|
```sh
|
||||||
|
cd /etc/vector &&
|
||||||
|
sudo tee vector.yaml > /dev/null <<'EOF'
|
||||||
|
data_dir: "/var/lib/vector"
|
||||||
|
|
||||||
|
sources:
|
||||||
|
ccalm_logs:
|
||||||
|
type: file
|
||||||
|
include:
|
||||||
|
- /opt/org_ccalm_main/logs/ccalm.log
|
||||||
|
read_from: beginning
|
||||||
|
|
||||||
|
transforms:
|
||||||
|
parse_json:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- ccalm_logs
|
||||||
|
source: |
|
||||||
|
structured, err = parse_json(.message)
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
merged, err = merge(., structured)
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
. = merged
|
||||||
|
|
||||||
|
filter_errors:
|
||||||
|
type: filter
|
||||||
|
inputs:
|
||||||
|
- parse_json
|
||||||
|
condition: '.level == "ERROR"'
|
||||||
|
|
||||||
|
format_telegram_json:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- filter_errors
|
||||||
|
source: |
|
||||||
|
msg, err = string(.message)
|
||||||
|
if err != null {
|
||||||
|
msg = "Unable to parse message"
|
||||||
|
}
|
||||||
|
.message = "{\"title\":\"CCALM Main Error Log\",\"message\":\"ERROR: " + msg + "\"}"
|
||||||
|
|
||||||
|
|
||||||
|
sinks:
|
||||||
|
gotify:
|
||||||
|
type: http
|
||||||
|
inputs:
|
||||||
|
- filter_errors
|
||||||
|
uri: "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ"
|
||||||
|
method: post
|
||||||
|
encoding:
|
||||||
|
codec: json
|
||||||
|
template: '{"title":"CCALM Main Error Log","message":"Test message 00","priority":5}'
|
||||||
|
request:
|
||||||
|
headers:
|
||||||
|
Content-Type: "application/json"
|
||||||
|
Host: "gotify.geovizor.top"
|
||||||
|
Content-Length: "{{ content_length }}"
|
||||||
|
tls:
|
||||||
|
verify_certificate: false
|
||||||
|
verify_hostname: false
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
Пробую отправку через curl
|
||||||
|
```sh
|
||||||
|
curl -X POST -k "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"message": "Test message", "priority": 5}'
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Проверяем что gotify работает:
|
||||||
|
```sh
|
||||||
|
curl -k -X POST -H "Content-Type: application/json" -H "Host: gotify.geovizor.top" -d '{"message":"Test message 00","priority":5}' --http1.1 https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ -v
|
||||||
|
```
|
||||||
|
|
||||||
|
### Объяснение конфигурации
|
||||||
|
- **Source (`ccalm_logs`)**: Читает логи из файла, парсит JSON, поддерживает многострочные логи.
|
||||||
|
- **Transform (`filter_errors`)**: Фильтрует логи с `level: "ERROR"`.
|
||||||
|
- **Sink (`gotify`)**: Отправляет отфильтрованные логи в Gotify через HTTP POST.
|
||||||
|
|
||||||
|
## Шаг 3: Проверка конфигурации
|
||||||
|
Проверьте корректность YAML:
|
||||||
|
```sh
|
||||||
|
vector --config /etc/vector/vector.yaml validate
|
||||||
|
```
|
||||||
|
Ожидаемый вывод: `Configuration is valid`.
|
||||||
|
|
||||||
|
## Шаг 4: Запуск Vector
|
||||||
|
### Тестовый запуск (для отладки)
|
||||||
|
```sh
|
||||||
|
sudo vector --config /etc/vector/vector.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Запуск как сервиса
|
||||||
|
1. Включите и запустите сервис:
|
||||||
|
```sh
|
||||||
|
sudo systemctl enable vector
|
||||||
|
sudo systemctl start vector
|
||||||
|
```
|
||||||
|
2. Проверьте статус:
|
||||||
|
```sh
|
||||||
|
sudo systemctl status vector
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Шаг 5: Проверка отправки в Gotify
|
||||||
|
1. Убедитесь, что Gotify доступен по указанному URL.
|
||||||
|
2. Добавьте тестовую строку лога в `/opt/org_ccalm_main/logs/ccalm.log`:
|
||||||
|
```sh
|
||||||
|
echo '{"level": "ERROR", "message": "Database connection failed", "timestamp": "2025-05-18T12:28:00Z"}' | sudo tee -a /opt/org_ccalm_main/logs/ccalm.log
|
||||||
|
```
|
||||||
|
3. Проверьте Gotify (веб-интерфейс или приложение) — должно прийти уведомление с заголовком "CCALM Log Error" и сообщением "Database connection failed".
|
||||||
|
|
||||||
|
## Шаг 6: Отладка
|
||||||
|
- Логи Vector: `/var/log/vector/vector.log` или stdout (в тестовом режиме).
|
||||||
|
- Проверьте логи при проблемах:
|
||||||
|
```sh
|
||||||
|
cat /var/log/vector/vector.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## Дополнительные настройки
|
||||||
|
- **Права доступа к файлу логов**:
|
||||||
|
```sh
|
||||||
|
sudo chown vector:vector /opt/org_ccalm_main/logs/ccalm.log
|
||||||
|
sudo chmod 644 /opt/org_ccalm_main/logs/ccalm.log
|
||||||
|
```
|
||||||
|
- **Если JSON-формат отличается**: Если поле `level` называется иначе (например, `log_level`), замените `.level` на `.log_level` в `condition`.
|
||||||
|
- **HTTP вместо HTTPS**: Если Gotify использует HTTP, замените `https://` на `http://` в `uri`.
|
||||||
|
|
||||||
|
## Примечания
|
||||||
|
- Убедитесь, что Gotify настроен и токен действителен.
|
||||||
|
- Если логи не отправляются, проверьте сетевую доступность Gotify и правильность URL/токена.
|
||||||
|
- Для чтения только новых логов удалите `read_from: beginning` в конфигурации.
|
||||||
434
Logs/Vector_dev_install_telegram.md
Normal file
434
Logs/Vector_dev_install_telegram.md
Normal file
@ -0,0 +1,434 @@
|
|||||||
|
Шаг 1: Создание Telegram-бота
|
||||||
|
Зарегистрируйте бота через BotFather:
|
||||||
|
|
||||||
|
Откройте Telegram и найдите @BotFather.
|
||||||
|
Отправьте команду /start.
|
||||||
|
Отправьте /newbot, чтобы создать нового бота.
|
||||||
|
Следуйте инструкциям:
|
||||||
|
Укажите имя бота (например, MyLogBot).
|
||||||
|
Укажите username бота, заканчивающийся на bot (например, @MyLogAllBot).
|
||||||
|
После создания вы получите токен (например, 8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws). Сохраните его, он понадобится для API.
|
||||||
|
|
||||||
|
|
||||||
|
# Настройка Vector для отправки логов в Gotify
|
||||||
|
|
||||||
|
Эта инструкция описывает, как установить Vector, настроить его для чтения JSON-логов из файла `/opt/org_ccalm_main/logs/ccalm.log`, фильтрации строк с уровнем `ERROR` и отправки уведомлений в Gotify.
|
||||||
|
|
||||||
|
---
|
||||||
|
## 0. ✅ Подключаемся к инфраструктуре
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ssh ubuntu@almaty.ccalm.org -p 22
|
||||||
|
```
|
||||||
|
|
||||||
|
## Предварительные требования
|
||||||
|
- ОС: Ubuntu/Debian (для других ОС уточните, чтобы адаптировать команды).
|
||||||
|
- Файл логов: `/opt/org_ccalm_main/logs/ccalm.log` с JSON-строками (поля `level` и `message`).
|
||||||
|
- Gotify: Доступный сервер Gotify с URL и токеном (например, `https://gotify.example.com/message?token=<your-token>`).
|
||||||
|
- Доступ к терминалу с правами `sudo`.
|
||||||
|
|
||||||
|
|
||||||
|
## Шаг 1: Установка Vector
|
||||||
|
|
||||||
|
Пробуем скачать deb пакет с сайта
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl -L https://packages.timber.io/vector/0.46.X/vector_0.46.1-1_amd64.deb -o vector_0.46.1-1_amd64.deb &&
|
||||||
|
sudo dpkg -i vector_0.46.1-1_amd64.deb &&
|
||||||
|
sudo apt-get install -f &&
|
||||||
|
vector --version
|
||||||
|
```
|
||||||
|
|
||||||
|
That make deleting:
|
||||||
|
```sh
|
||||||
|
sudo apt remove --purge vector
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Шаг 2: Создание конфигурации Vector
|
||||||
|
Vector использует YAML для конфигурации. Настроим чтение логов, фильтрацию `ERROR` и отправку в Gotify.
|
||||||
|
|
||||||
|
1. Создайте файл конфигурации `/etc/vector/vector.yaml`:
|
||||||
|
```sh
|
||||||
|
cd /etc/vector &&
|
||||||
|
sudo tee vector.yaml > /dev/null <<'EOF'
|
||||||
|
data_dir: "/var/lib/vector"
|
||||||
|
|
||||||
|
sources:
|
||||||
|
ccalm_logs:
|
||||||
|
type: file
|
||||||
|
include:
|
||||||
|
- /opt/org_ccalm_main/logs/org-ccalm-main.log
|
||||||
|
read_from: beginning
|
||||||
|
|
||||||
|
ccalm_translation_logs:
|
||||||
|
type: file
|
||||||
|
include:
|
||||||
|
- /opt/org_ccalm_translation/logs/org-ccalm-translation.log
|
||||||
|
read_from: beginning
|
||||||
|
|
||||||
|
ccalm_dbms_logs:
|
||||||
|
type: file
|
||||||
|
include:
|
||||||
|
- /opt/org_ccalm_dbms/logs/org-ccalm-dbms.log
|
||||||
|
read_from: beginning
|
||||||
|
|
||||||
|
ccalm_jwt_logs:
|
||||||
|
type: file
|
||||||
|
include:
|
||||||
|
- /opt/org_ccalm_jwt/logs/org-ccalm-jwt.log
|
||||||
|
read_from: beginning
|
||||||
|
|
||||||
|
transforms:
|
||||||
|
parse_json_ccalm:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- ccalm_logs
|
||||||
|
source: |
|
||||||
|
structured, err = parse_json(.message)
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
merged, err = merge(., structured)
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
. = merged
|
||||||
|
|
||||||
|
parse_json_translation:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- ccalm_translation_logs
|
||||||
|
source: |
|
||||||
|
structured, err = parse_json(.message)
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
merged, err = merge(., structured)
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
. = merged
|
||||||
|
|
||||||
|
parse_json_dbms:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- ccalm_dbms_logs
|
||||||
|
source: |
|
||||||
|
structured, err = parse_json(.message)
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
merged, err = merge(., structured)
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
. = merged
|
||||||
|
|
||||||
|
parse_json_jwt:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- ccalm_jwt_logs
|
||||||
|
source: |
|
||||||
|
structured, err = parse_json(.message)
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
merged, err = merge(., structured)
|
||||||
|
if err != null {
|
||||||
|
abort
|
||||||
|
}
|
||||||
|
. = merged
|
||||||
|
|
||||||
|
filter_errors_ccalm:
|
||||||
|
type: filter
|
||||||
|
inputs:
|
||||||
|
- parse_json_ccalm
|
||||||
|
condition: '.level == "ERROR" || .level == "WARN"'
|
||||||
|
|
||||||
|
filter_errors_translation:
|
||||||
|
type: filter
|
||||||
|
inputs:
|
||||||
|
- parse_json_translation
|
||||||
|
condition: '.level == "ERROR" || .level == "WARN"'
|
||||||
|
|
||||||
|
filter_errors_dbms:
|
||||||
|
type: filter
|
||||||
|
inputs:
|
||||||
|
- parse_json_dbms
|
||||||
|
condition: '.level == "ERROR" || .level == "WARN"'
|
||||||
|
|
||||||
|
filter_errors_jwt:
|
||||||
|
type: filter
|
||||||
|
inputs:
|
||||||
|
- parse_json_jwt
|
||||||
|
condition: '.level == "ERROR" || .level == "WARN"'
|
||||||
|
|
||||||
|
format_telegram_json_ccalm:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- filter_errors_ccalm
|
||||||
|
source: |
|
||||||
|
msg, err = string(.message)
|
||||||
|
if err != null {
|
||||||
|
msg = "Unable to parse message"
|
||||||
|
}
|
||||||
|
marker_str = ""
|
||||||
|
if exists(.marker) {
|
||||||
|
m, err = string(.marker)
|
||||||
|
if err == null && length(m) > 0 {
|
||||||
|
marker_str = "Marker: ```text\n" + m + "```"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
level_str = ""
|
||||||
|
icon_str = ""
|
||||||
|
if exists(.level) {
|
||||||
|
m, err = string(.level)
|
||||||
|
if err == null {
|
||||||
|
level_str = "level: ```text\n" + m + "```"
|
||||||
|
}
|
||||||
|
if m == "ERROR" {
|
||||||
|
icon_str = "‼"
|
||||||
|
}
|
||||||
|
if m == "WARN" {
|
||||||
|
icon_str = "⚠️"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":2,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
|
||||||
|
|
||||||
|
format_telegram_json_translation:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- filter_errors_translation
|
||||||
|
source: |
|
||||||
|
msg, err = string(.message)
|
||||||
|
if err != null {
|
||||||
|
msg = "Unable to parse message"
|
||||||
|
}
|
||||||
|
marker_str = ""
|
||||||
|
if exists(.marker) {
|
||||||
|
m, err = string(.marker)
|
||||||
|
if err == null && length(m) > 0 {
|
||||||
|
marker_str = "Marker: ```text\n" + m + "```"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
level_str = ""
|
||||||
|
icon_str = ""
|
||||||
|
if exists(.level) {
|
||||||
|
m, err = string(.level)
|
||||||
|
if err == null {
|
||||||
|
level_str = "level: ```text\n" + m + "```"
|
||||||
|
}
|
||||||
|
if m == "ERROR" {
|
||||||
|
icon_str = "‼"
|
||||||
|
}
|
||||||
|
if m == "WARN" {
|
||||||
|
icon_str = "⚠️"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":24,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
|
||||||
|
|
||||||
|
format_telegram_json_dbms:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- filter_errors_dbms
|
||||||
|
source: |
|
||||||
|
msg, err = string(.message)
|
||||||
|
if err != null {
|
||||||
|
msg = "Unable to parse message"
|
||||||
|
}
|
||||||
|
marker_str = ""
|
||||||
|
if exists(.marker) {
|
||||||
|
m, err = string(.marker)
|
||||||
|
if err == null && length(m) > 0 {
|
||||||
|
marker_str = "Marker: ```text\n" + m + "```"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
level_str = ""
|
||||||
|
icon_str = ""
|
||||||
|
if exists(.level) {
|
||||||
|
m, err = string(.level)
|
||||||
|
if err == null {
|
||||||
|
level_str = "level: ```text\n" + m + "```"
|
||||||
|
}
|
||||||
|
if m == "ERROR" {
|
||||||
|
icon_str = "‼"
|
||||||
|
}
|
||||||
|
if m == "WARN" {
|
||||||
|
icon_str = "⚠️"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":9,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
|
||||||
|
|
||||||
|
format_telegram_json_jwt:
|
||||||
|
type: remap
|
||||||
|
inputs:
|
||||||
|
- filter_errors_jwt
|
||||||
|
source: |
|
||||||
|
msg, err = string(.message)
|
||||||
|
if err != null {
|
||||||
|
msg = "Unable to parse message"
|
||||||
|
}
|
||||||
|
marker_str = ""
|
||||||
|
if exists(.marker) {
|
||||||
|
m, err = string(.marker)
|
||||||
|
if err == null && length(m) > 0 {
|
||||||
|
marker_str = "Marker: ```text\n" + m + "```"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
level_str = ""
|
||||||
|
icon_str = ""
|
||||||
|
if exists(.level) {
|
||||||
|
m, err = string(.level)
|
||||||
|
if err == null {
|
||||||
|
level_str = "level: ```text\n" + m + "```"
|
||||||
|
}
|
||||||
|
if m == "ERROR" {
|
||||||
|
icon_str = "‼"
|
||||||
|
}
|
||||||
|
if m == "WARN" {
|
||||||
|
icon_str = "⚠️"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.message = "{\"chat_id\":\"-1002640082189\",\"message_thread_id\":4,\"text\":\"" + icon_str + " " + level_str + marker_str + "Message: ```text\n" + msg + "```\", \"parse_mode\":\"Markdown\"}"
|
||||||
|
|
||||||
|
|
||||||
|
sinks:
|
||||||
|
telegram_ccalm:
|
||||||
|
type: http
|
||||||
|
inputs:
|
||||||
|
- format_telegram_json_ccalm
|
||||||
|
uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage"
|
||||||
|
method: post
|
||||||
|
encoding:
|
||||||
|
codec: text
|
||||||
|
request:
|
||||||
|
headers:
|
||||||
|
Content-Type: "application/json"
|
||||||
|
batch:
|
||||||
|
max_events: 1
|
||||||
|
|
||||||
|
telegram_translation:
|
||||||
|
type: http
|
||||||
|
inputs:
|
||||||
|
- format_telegram_json_translation
|
||||||
|
uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage"
|
||||||
|
method: post
|
||||||
|
encoding:
|
||||||
|
codec: text
|
||||||
|
request:
|
||||||
|
headers:
|
||||||
|
Content-Type: "application/json"
|
||||||
|
batch:
|
||||||
|
max_events: 1
|
||||||
|
|
||||||
|
telegram_dbms:
|
||||||
|
type: http
|
||||||
|
inputs:
|
||||||
|
- format_telegram_json_dbms
|
||||||
|
uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage"
|
||||||
|
method: post
|
||||||
|
encoding:
|
||||||
|
codec: text
|
||||||
|
request:
|
||||||
|
headers:
|
||||||
|
Content-Type: "application/json"
|
||||||
|
batch:
|
||||||
|
max_events: 1
|
||||||
|
|
||||||
|
telegram_jwt:
|
||||||
|
type: http
|
||||||
|
inputs:
|
||||||
|
- format_telegram_json_jwt
|
||||||
|
uri: "https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/sendMessage"
|
||||||
|
method: post
|
||||||
|
encoding:
|
||||||
|
codec: text
|
||||||
|
request:
|
||||||
|
headers:
|
||||||
|
Content-Type: "application/json"
|
||||||
|
batch:
|
||||||
|
max_events: 1
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
curl https://api.telegram.org/bot8007457609:AAGnrXOSaoxODMSh4yCzUEIp0uxfH3Hk8ws/getUpdates
|
||||||
|
|
||||||
|
|
||||||
|
Пробую отправку через curl
|
||||||
|
```sh
|
||||||
|
curl -X POST -k "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"message": "Test message", "priority": 5}'
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Проверяем что gotify работает:
|
||||||
|
```sh
|
||||||
|
curl -k -X POST -H "Content-Type: application/json" -H "Host: gotify.geovizor.top" -d '{"message":"Test message 00","priority":5}' --http1.1 https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ -v
|
||||||
|
```
|
||||||
|
|
||||||
|
### Объяснение конфигурации
|
||||||
|
- **Source (`ccalm_logs`)**: Читает логи из файла, парсит JSON, поддерживает многострочные логи.
|
||||||
|
- **Transform (`filter_errors`)**: Фильтрует логи с `level: "ERROR"`.
|
||||||
|
- **Sink (`gotify`)**: Отправляет отфильтрованные логи в Gotify через HTTP POST.
|
||||||
|
|
||||||
|
## Шаг 3: Проверка конфигурации
|
||||||
|
Проверьте корректность YAML:
|
||||||
|
```sh
|
||||||
|
vector --config /etc/vector/vector.yaml validate
|
||||||
|
```
|
||||||
|
Ожидаемый вывод: `Configuration is valid`.
|
||||||
|
|
||||||
|
## Шаг 4: Запуск Vector
|
||||||
|
### Тестовый запуск (для отладки)
|
||||||
|
```sh
|
||||||
|
sudo vector --config /etc/vector/vector.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Запуск как сервиса
|
||||||
|
1. Включите и запустите сервис:
|
||||||
|
```sh
|
||||||
|
sudo systemctl enable vector
|
||||||
|
```
|
||||||
|
```sh
|
||||||
|
sudo systemctl start vector
|
||||||
|
```
|
||||||
|
2. Проверьте статус:
|
||||||
|
```sh
|
||||||
|
sudo systemctl status vector
|
||||||
|
```
|
||||||
|
```sh
|
||||||
|
sudo systemctl stop vector
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Шаг 5: Проверка отправки в Gotify
|
||||||
|
1. Убедитесь, что Gotify доступен по указанному URL.
|
||||||
|
2. Добавьте тестовую строку лога в `/opt/org_ccalm_main/logs/ccalm.log`:
|
||||||
|
```sh
|
||||||
|
echo '{"level": "ERROR", "marker":"12345", "message": "Database connection failed 0", "timestamp": "2025-05-18T12:28:00Z"}' | sudo tee -a /opt/org_ccalm_jwt/logs/org-ccalm-jwt.log
|
||||||
|
```
|
||||||
|
3. Проверьте Gotify (веб-интерфейс или приложение) — должно прийти уведомление с заголовком "CCALM Log Error" и сообщением "Database connection failed".
|
||||||
|
|
||||||
|
## Шаг 6: Отладка
|
||||||
|
- Логи Vector: `/var/log/vector/vector.log` или stdout (в тестовом режиме).
|
||||||
|
- Проверьте логи при проблемах:
|
||||||
|
```sh
|
||||||
|
cat /var/log/vector/vector.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## Дополнительные настройки
|
||||||
|
- **Права доступа к файлу логов**:
|
||||||
|
```sh
|
||||||
|
sudo chown vector:vector /opt/org_ccalm_main/logs/ccalm.log
|
||||||
|
sudo chmod 644 /opt/org_ccalm_main/logs/ccalm.log
|
||||||
|
```
|
||||||
|
- **Если JSON-формат отличается**: Если поле `level` называется иначе (например, `log_level`), замените `.level` на `.log_level` в `condition`.
|
||||||
|
- **HTTP вместо HTTPS**: Если Gotify использует HTTP, замените `https://` на `http://` в `uri`.
|
||||||
|
|
||||||
|
## Примечания
|
||||||
|
- Убедитесь, что Gotify настроен и токен действителен.
|
||||||
|
- Если логи не отправляются, проверьте сетевую доступность Gotify и правильность URL/токена.
|
||||||
|
- Для чтения только новых логов удалите `read_from: beginning` в конфигурации.
|
||||||
@ -19,8 +19,9 @@ sudo apt-get install nginx -y
|
|||||||
```
|
```
|
||||||
Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера.
|
Самой важной строкой является Common Name (введите FQDN или свое имя). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер. В случае если доменного имени нет, внесите в эту строку IP-адрес сервера.
|
||||||
```sh
|
```sh
|
||||||
sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
|
sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048
|
||||||
```
|
```
|
||||||
|
|
||||||
И вписываем в него:
|
И вписываем в него:
|
||||||
```sh
|
```sh
|
||||||
cd /etc/nginx/sites-available/ &&
|
cd /etc/nginx/sites-available/ &&
|
||||||
@ -29,17 +30,26 @@ server {
|
|||||||
listen 8081 ssl http2;
|
listen 8081 ssl http2;
|
||||||
listen [::]:8081 ssl http2;
|
listen [::]:8081 ssl http2;
|
||||||
|
|
||||||
server_name ccalm.org;
|
root /opt/www/org_ccalm;
|
||||||
|
index index.html;
|
||||||
|
|
||||||
|
server_name ccalm.org www.ccalm.org;
|
||||||
|
|
||||||
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
|
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
|
||||||
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
|
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
|
||||||
ssl_dhparam /etc/nginx/dhparam.pem;
|
ssl_dhparam /etc/nginx/dhparam.pem;
|
||||||
|
|
||||||
root /opt/www/org_ccalm;
|
|
||||||
index index.html index.htm;
|
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
try_files $uri $uri/ =404; # Попытка найти файл или возвращение 404
|
try_files $uri $uri/ =404;
|
||||||
|
|
||||||
|
# Оптимизация для быстрой отдачи статики
|
||||||
|
sendfile on; # Использует sendfile() ядра Linux для ускорения
|
||||||
|
tcp_nopush off; # Отключает задержку Nagle (если нужна мгновенная отправка)
|
||||||
|
}
|
||||||
|
location ~ /index\.html$ {
|
||||||
|
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate";
|
||||||
|
add_header Pragma "no-cache";
|
||||||
|
add_header Expires 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
@ -50,8 +60,6 @@ EOF
|
|||||||
sudo ln -s /etc/nginx/sites-available/ccalm.org /etc/nginx/sites-enabled/
|
sudo ln -s /etc/nginx/sites-available/ccalm.org /etc/nginx/sites-enabled/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo systemctl restart nginx
|
sudo systemctl restart nginx
|
||||||
```
|
```
|
||||||
@ -79,17 +87,17 @@ journalctl -u nginx.service -n 50
|
|||||||
cd /etc/nginx/sites-available/ &&
|
cd /etc/nginx/sites-available/ &&
|
||||||
sudo tee geovizor.top > /dev/null <<'EOF'
|
sudo tee geovizor.top > /dev/null <<'EOF'
|
||||||
server {
|
server {
|
||||||
listen 8081;
|
listen 8081;
|
||||||
listen [::]:8081;
|
listen [::]:8081;
|
||||||
|
|
||||||
root /opt/www/istransit.kz;
|
root /opt/www/istransit.kz;
|
||||||
index index.html;
|
index index.html;
|
||||||
|
|
||||||
server_name istransit.kz www.istransit.kz;
|
server_name istransit.kz www.istransit.kz;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
try_files $uri $uri/ =404;
|
try_files $uri $uri/ =404;
|
||||||
}
|
}
|
||||||
location ~ /index\.html$ {
|
location ~ /index\.html$ {
|
||||||
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate";
|
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate";
|
||||||
add_header Pragma "no-cache";
|
add_header Pragma "no-cache";
|
||||||
|
|||||||
@ -22,7 +22,7 @@ sudo apt install -y docker.io docker-compose
|
|||||||
```
|
```
|
||||||
|
|
||||||
Вставьте следующий конфигурационный файл:
|
Вставьте следующий конфигурационный файл:
|
||||||
|
В кодфиге прописан корневой сертификат чтобы node.js ему доверял
|
||||||
```yaml
|
```yaml
|
||||||
services:
|
services:
|
||||||
uptime-kuma:
|
uptime-kuma:
|
||||||
@ -33,6 +33,9 @@ services:
|
|||||||
- "3001:3001"
|
- "3001:3001"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
|
- /usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro
|
||||||
|
environment:
|
||||||
|
- NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/rootCA.crt
|
||||||
```
|
```
|
||||||
|
|
||||||
## 4. Запуск контейнера
|
## 4. Запуск контейнера
|
||||||
@ -63,4 +66,3 @@ start http://192.168.200.84:3001
|
|||||||
```
|
```
|
||||||
|
|
||||||
Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀
|
Готово! Uptime Kuma установлен и запущен в Docker на Ubuntu 24.04. 🚀
|
||||||
|
|
||||||
@ -122,6 +122,8 @@ sudo mcedit /etc/postgresql/16/main/pg_hba.conf
|
|||||||
sudo netstat -tap | grep 5432
|
sudo netstat -tap | grep 5432
|
||||||
|
|
||||||
Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain):
|
Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain):
|
||||||
|
pg_dump --host=192.168.200.17 --username=postgres salevizor > /home/igor/salevizor.sql
|
||||||
|
|
||||||
pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root
|
pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root
|
||||||
pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres
|
pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres
|
||||||
pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres
|
pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres
|
||||||
@ -156,9 +158,12 @@ sudo mcedit /etc/postgresql/16/main/pg_hba.conf
|
|||||||
pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup
|
pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup
|
||||||
pg_restore -U postgres -d transit -1 /home/administrator/transit.backup
|
pg_restore -U postgres -d transit -1 /home/administrator/transit.backup
|
||||||
pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup
|
pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup
|
||||||
|
pg_restore --host=127.0.0.1 --username=postgres --dbname=CCALM --verbose /tmp/CCALM.backup
|
||||||
|
|
||||||
sudo -u postgres psql -d transit -f /tmp/transit.backup
|
sudo -u postgres psql -d transit -f /tmp/transit.backup
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Или из архива (первоначально задать trust на 127.0.0.1) так:
|
Или из архива (первоначально задать trust на 127.0.0.1) так:
|
||||||
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
|
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
|
||||||
|
|
||||||
@ -287,6 +292,7 @@ sudo apt-get install phppgadmin
|
|||||||
Установка pgAdmin4 через докер контейнер
|
Установка pgAdmin4 через докер контейнер
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
sudo mkdir -p /opt/pgAdmin4/backups &&
|
||||||
sudo mkdir -p /opt/pgAdmin4 &&
|
sudo mkdir -p /opt/pgAdmin4 &&
|
||||||
sudo chmod -R 777 /opt/pgAdmin4 &&
|
sudo chmod -R 777 /opt/pgAdmin4 &&
|
||||||
sudo chown -R $USER:$USER /opt/pgAdmin4
|
sudo chown -R $USER:$USER /opt/pgAdmin4
|
||||||
@ -307,7 +313,7 @@ services:
|
|||||||
PGADMIN_DEFAULT_PASSWORD: 123456
|
PGADMIN_DEFAULT_PASSWORD: 123456
|
||||||
volumes:
|
volumes:
|
||||||
- pgadmin_data:/var/lib/pgadmin
|
- pgadmin_data:/var/lib/pgadmin
|
||||||
|
- /opt/pgAdmin4/backups:/var/lib/pgadmin/storage
|
||||||
volumes:
|
volumes:
|
||||||
pgadmin_data:
|
pgadmin_data:
|
||||||
EOF
|
EOF
|
||||||
@ -325,8 +331,9 @@ EOF
|
|||||||
sudo docker compose down
|
sudo docker compose down
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
open http://localhost:5050
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/
|
Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/
|
||||||
|
|||||||
53
PostgreSQL/backup/backup.sh
Normal file
53
PostgreSQL/backup/backup.sh
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Конфигурация
|
||||||
|
DB_NAME="CCALM"
|
||||||
|
DB_HOST="127.0.0.1"
|
||||||
|
DB_USER="postgres"
|
||||||
|
BACKUP_DIR="/opt/backups/data"
|
||||||
|
TIMESTAMP=$(date +%Y%m%d_%H%M)
|
||||||
|
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.backup"
|
||||||
|
|
||||||
|
# Проверка существования директории для бэкапов
|
||||||
|
if [ ! -d "$BACKUP_DIR" ]; then
|
||||||
|
echo "Ошибка: Директория $BACKUP_DIR не существует. Создаю..."
|
||||||
|
mkdir -p "$BACKUP_DIR"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Ошибка: Не удалось создать директорию $BACKUP_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Установка прав для пользователя webdav
|
||||||
|
chown rclone:rclone "$BACKUP_DIR"
|
||||||
|
chmod 755 "$BACKUP_DIR"
|
||||||
|
|
||||||
|
# Экспорт пароля (если не используется .pgpass)
|
||||||
|
# Замените 'your_password' на реальный пароль или настройте .pgpass
|
||||||
|
export PGPASSWORD='309A86FF65A78FB428F4E38DFE35F730'
|
||||||
|
|
||||||
|
# Выполнение pg_dump
|
||||||
|
echo "Создание резервной копии базы данных $DB_NAME в $BACKUP_FILE..."
|
||||||
|
pg_dump "$DB_NAME" \
|
||||||
|
--host="$DB_HOST" \
|
||||||
|
--username="$DB_USER" \
|
||||||
|
--format=custom \
|
||||||
|
--file="$BACKUP_FILE"
|
||||||
|
|
||||||
|
# Проверка успешности выполнения
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Резервная копия успешно создана: $BACKUP_FILE"
|
||||||
|
# Установка прав для пользователя webdav
|
||||||
|
chown webdav:webdav "$BACKUP_FILE"
|
||||||
|
chmod 644 "$BACKUP_FILE"
|
||||||
|
else
|
||||||
|
echo "Ошибка: Не удалось создать резервную копию"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Очистка старых бэкапов (например, старше 7 дней)
|
||||||
|
find "$BACKUP_DIR" -name "${DB_NAME}_*.backup" -mtime +7 -delete
|
||||||
|
echo "Старые бэкапы (старше 7 дней) удалены"
|
||||||
|
|
||||||
|
# Перемещаю на другой сервер
|
||||||
|
rclone move /opt/backups/data mywebdav:/backups --progress --no-check-certificate
|
||||||
@ -6,9 +6,9 @@ Connect to the required server:
|
|||||||
```sh
|
```sh
|
||||||
ssh administrator@10.101.1.3 -p 22
|
ssh administrator@10.101.1.3 -p 22
|
||||||
```
|
```
|
||||||
Connect to CCALM Turkish infrastructure:
|
Home server
|
||||||
```sh
|
```sh
|
||||||
ssh igor@88.218.94.134 -p 2200
|
ssh igor@192.168.200.81 -p 22
|
||||||
```
|
```
|
||||||
----------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------
|
||||||
## Install haproxy
|
## Install haproxy
|
||||||
@ -109,7 +109,7 @@ stats auth igor:i123456
|
|||||||
````
|
````
|
||||||
Также можно в журнале посмотреть что написал HAProxy:
|
Также можно в журнале посмотреть что написал HAProxy:
|
||||||
```sh
|
```sh
|
||||||
sudo journalctl -u haproxy --no-pager | tail -n 50
|
sudo journalctl -u haproxy --no-pager -n 50 -f
|
||||||
````
|
````
|
||||||
Перезагружаем:
|
Перезагружаем:
|
||||||
```sh
|
```sh
|
||||||
@ -1,8 +1,10 @@
|
|||||||
|
С внешки во внутрянную инфраструктуру подключаемся через HAProxy а уже внутри использую Traefik
|
||||||
|
|
||||||
Открываю нужный сервер
|
Открываю нужный сервер
|
||||||
```sh
|
```sh
|
||||||
wsl
|
wsl
|
||||||
```
|
```
|
||||||
Или такой:
|
Открывает traefik на 192.168.200.85:
|
||||||
```sh
|
```sh
|
||||||
ssh igor@192.168.200.85 -p 22
|
ssh igor@192.168.200.85 -p 22
|
||||||
```
|
```
|
||||||
@ -105,7 +107,7 @@ http:
|
|||||||
ccalm-api-auth:
|
ccalm-api-auth:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
rule: "Host(`ccalm.test`) && PathPrefix(`/api/authorization/v02/`)"
|
rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/api/authorization/v02/`)"
|
||||||
service: org_ccalm_api_authorization_v02
|
service: org_ccalm_api_authorization_v02
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
@ -115,7 +117,7 @@ http:
|
|||||||
ccalm-dbms:
|
ccalm-dbms:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
rule: "Host(`ccalm.test`) && PathPrefix(`/api/dbms/v09/`)"
|
rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/api/dbms/v09/`)"
|
||||||
service: org_ccalm_dbms_v09
|
service: org_ccalm_dbms_v09
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
@ -125,7 +127,7 @@ http:
|
|||||||
ccalm-translation:
|
ccalm-translation:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
rule: "Host(`ccalm.test`) && PathPrefix(`/api/translation/v01/`)"
|
rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/api/translation/v01/`)"
|
||||||
service: org_ccalm_translation_v01
|
service: org_ccalm_translation_v01
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
@ -135,7 +137,7 @@ http:
|
|||||||
ccalm-login:
|
ccalm-login:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
rule: "Host(`ccalm.test`) && PathPrefix(`/login/`)"
|
rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`)) && PathPrefix(`/login/`)"
|
||||||
service: org_ccalm_login_v01
|
service: org_ccalm_login_v01
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
@ -143,7 +145,7 @@ http:
|
|||||||
ccalm-default:
|
ccalm-default:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
rule: "Host(`ccalm.test`)"
|
rule: "(Host(`ccalm.test`) || Host(`almaty.ccalm.test`))"
|
||||||
service: org_ccalm
|
service: org_ccalm
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
@ -155,6 +157,20 @@ http:
|
|||||||
service: local_powerdns
|
service: local_powerdns
|
||||||
tls: {}
|
tls: {}
|
||||||
|
|
||||||
|
gotify:
|
||||||
|
entryPoints:
|
||||||
|
- websecure
|
||||||
|
rule: "Host(`gotify.local`)"
|
||||||
|
service: local_gotify
|
||||||
|
tls: {}
|
||||||
|
|
||||||
|
vault:
|
||||||
|
entryPoints:
|
||||||
|
- websecure
|
||||||
|
rule: "Host(`vault.local`)"
|
||||||
|
service: local_vault
|
||||||
|
tls: {}
|
||||||
|
|
||||||
middlewares:
|
middlewares:
|
||||||
strip-auth-prefix:
|
strip-auth-prefix:
|
||||||
stripPrefix:
|
stripPrefix:
|
||||||
@ -180,6 +196,26 @@ http:
|
|||||||
path: "/"
|
path: "/"
|
||||||
interval: "5s"
|
interval: "5s"
|
||||||
|
|
||||||
|
# Бэкенд для local_gotify
|
||||||
|
local_gotify:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "https://192.168.200.84:8080"
|
||||||
|
serversTransport: insecureTransport
|
||||||
|
healthCheck:
|
||||||
|
path: "/"
|
||||||
|
interval: "5s"
|
||||||
|
|
||||||
|
# Бэкенд для local_vault
|
||||||
|
local_vault:
|
||||||
|
loadBalancer:
|
||||||
|
servers:
|
||||||
|
- url: "https://192.168.200.85:8200"
|
||||||
|
serversTransport: insecureTransport
|
||||||
|
healthCheck:
|
||||||
|
path: "/"
|
||||||
|
interval: "5s"
|
||||||
|
|
||||||
# Бэкенд для org_ccalm_api_authorization_v02 (HTTPS с отключенной проверкой SSL)
|
# Бэкенд для org_ccalm_api_authorization_v02 (HTTPS с отключенной проверкой SSL)
|
||||||
org_ccalm_api_authorization_v02:
|
org_ccalm_api_authorization_v02:
|
||||||
loadBalancer:
|
loadBalancer:
|
||||||
@ -243,6 +279,10 @@ tls:
|
|||||||
keyFile: "/etc/traefik/certs/ccalm.test.key"
|
keyFile: "/etc/traefik/certs/ccalm.test.key"
|
||||||
- certFile: "/etc/traefik/certs/powerdns.local.crt"
|
- certFile: "/etc/traefik/certs/powerdns.local.crt"
|
||||||
keyFile: "/etc/traefik/certs/powerdns.local.key"
|
keyFile: "/etc/traefik/certs/powerdns.local.key"
|
||||||
|
- certFile: "/etc/traefik/certs/gotify.local.crt"
|
||||||
|
keyFile: "/etc/traefik/certs/gotify.local.key"
|
||||||
|
- certFile: "/etc/traefik/certs/vault.local.crt"
|
||||||
|
keyFile: "/etc/traefik/certs/vault.local.key"
|
||||||
- certFile: "/etc/traefik/certs/wildcard.local.crt"
|
- certFile: "/etc/traefik/certs/wildcard.local.crt"
|
||||||
keyFile: "/etc/traefik/certs/wildcard.local.key"
|
keyFile: "/etc/traefik/certs/wildcard.local.key"
|
||||||
- certFile: "/etc/traefik/certs/wildcard.test.crt"
|
- certFile: "/etc/traefik/certs/wildcard.test.crt"
|
||||||
@ -1,7 +1,7 @@
|
|||||||
# Устанавливаю Traefik cервер в Астане
|
# Устанавливаю Traefik cервер в Астане
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ssh igor@5.180.46.11 -p 2200
|
ssh ubuntu@194.32.140.11 -p 22
|
||||||
```
|
```
|
||||||
|
|
||||||
# Установка Traefik на Linux Mint / Ubuntu
|
# Установка Traefik на Linux Mint / Ubuntu
|
||||||
@ -82,11 +82,11 @@ entryPoints:
|
|||||||
websecure:
|
websecure:
|
||||||
address: ":443"
|
address: ":443"
|
||||||
traefik:
|
traefik:
|
||||||
address: ":8080"
|
address: ":8070"
|
||||||
|
|
||||||
api:
|
api:
|
||||||
dashboard: true
|
dashboard: true
|
||||||
insecure: true
|
#insecure: true
|
||||||
|
|
||||||
# Настройка сертификатов (пример с Let's Encrypt)
|
# Настройка сертификатов (пример с Let's Encrypt)
|
||||||
certificatesResolvers:
|
certificatesResolvers:
|
||||||
@ -118,13 +118,15 @@ http:
|
|||||||
dashboard:
|
dashboard:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- traefik
|
- traefik
|
||||||
rule: "Host(`localhost`)"
|
rule: "Host(`194.32.140.11`)"
|
||||||
service: api@internal
|
service: api@internal
|
||||||
|
middlewares:
|
||||||
|
- dashboard-auth
|
||||||
|
|
||||||
ccalm-api-auth:
|
ccalm-api-auth:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
rule: "(Host(`locust.ge`) || Host(`test.ccalm.org`)) && PathPrefix(`/api/authorization/v02/`)"
|
rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/authorization/v02/`)"
|
||||||
service: org_ccalm_api_authorization_v02
|
service: org_ccalm_api_authorization_v02
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
@ -134,7 +136,7 @@ http:
|
|||||||
ccalm-dbms:
|
ccalm-dbms:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
rule: "(Host(`locust.ge`) || Host(`test.ccalm.org`)) && PathPrefix(`/api/dbms/v09/`)"
|
rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/dbms/v09/`)"
|
||||||
service: org_ccalm_dbms_v09
|
service: org_ccalm_dbms_v09
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
@ -144,15 +146,17 @@ http:
|
|||||||
ccalm-translation:
|
ccalm-translation:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
rule: "(Host(`locust.ge`) || Host(`test.ccalm.org`)) && PathPrefix(`/api/translation/v01/`)"
|
rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/api/translation/v01/`)"
|
||||||
service: org_ccalm_translation_v01
|
service: org_ccalm_translation_v01
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
|
middlewares:
|
||||||
|
- strip-translation-prefix
|
||||||
|
|
||||||
ccalm-login:
|
ccalm-login:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
rule: "(Host(`locust.ge`) || Host(`test.ccalm.org`)) && PathPrefix(`/login/`)"
|
rule: "(Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)) && PathPrefix(`/login/`)"
|
||||||
service: org_ccalm_login_v01
|
service: org_ccalm_login_v01
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
@ -160,7 +164,7 @@ http:
|
|||||||
org-ccalm-main:
|
org-ccalm-main:
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- websecure
|
- websecure
|
||||||
rule: "Host(`locust.ge`) || Host(`test.ccalm.org`)"
|
rule: "Host(`locust.ge`) || Host(`almaty.ccalm.org`) || Host(`ccalm.org`)"
|
||||||
service: org_ccalm_main
|
service: org_ccalm_main
|
||||||
tls:
|
tls:
|
||||||
certresolver: myresolver
|
certresolver: myresolver
|
||||||
@ -199,7 +203,7 @@ http:
|
|||||||
org_ccalm_translation_v01:
|
org_ccalm_translation_v01:
|
||||||
loadBalancer:
|
loadBalancer:
|
||||||
servers:
|
servers:
|
||||||
- url: "https://ccalm.org"
|
- url: "https://127.0.0.1:8085"
|
||||||
passHostHeader: false
|
passHostHeader: false
|
||||||
serversTransport: insecureTransport
|
serversTransport: insecureTransport
|
||||||
healthCheck:
|
healthCheck:
|
||||||
@ -246,10 +250,14 @@ http:
|
|||||||
stripPrefix:
|
stripPrefix:
|
||||||
prefixes:
|
prefixes:
|
||||||
- "/api/authorization/v02"
|
- "/api/authorization/v02"
|
||||||
|
strip-translation-prefix:
|
||||||
|
stripPrefix:
|
||||||
|
prefixes:
|
||||||
|
- "/api/translation/v01"
|
||||||
dashboard-auth:
|
dashboard-auth:
|
||||||
basicAuth:
|
basicAuth:
|
||||||
users:
|
users:
|
||||||
- "admin:$apr1$NUoqcU3I$O6VxeuGhsA6RSIyh6rNbo." # Пароль хешируется так: htpasswd -nb admin t745632746573t
|
- "admin:$apr1$NUoqcU3I$O6VxeuGhsA6RSIyh6rNbo." # htpasswd -nb admin t745632746573t
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
```
|
```
|
||||||
@ -301,11 +309,11 @@ EOF
|
|||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
ыгвщ куищще
|
||||||
## 🔎 Шаг 6. Проверка работы
|
## 🔎 Шаг 6. Проверка работы
|
||||||
Откройте в браузере cпаролем что быше "":
|
Откройте в браузере cпаролем что быше "":
|
||||||
```sh
|
```sh
|
||||||
open https://5.180.46.11:8080/dashboard
|
open http://194.32.140.11:8070/dashboard
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -361,7 +369,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "80:80" # HTTP
|
- "80:80" # HTTP
|
||||||
- "443:443" # HTTPS
|
- "443:443" # HTTPS
|
||||||
- "8080:8080" # Dashboard
|
- "8070:8070" # Dashboard
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/traefik:/etc/traefik
|
- /etc/traefik:/etc/traefik
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
@ -387,7 +395,7 @@ EOF
|
|||||||
|
|
||||||
Откройте в браузере:
|
Откройте в браузере:
|
||||||
```sh
|
```sh
|
||||||
open http://192.168.200.85:8080/dashboard/
|
open http://192.168.200.85:8070/dashboard/
|
||||||
```
|
```
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
60
RClone/NFS_install.md
Normal file
60
RClone/NFS_install.md
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
```sh
|
||||||
|
sudo apt update &&
|
||||||
|
sudo apt install nfs-kernel-server -y
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo mkdir -p /mnt/data/org_ccalm_almaty &&
|
||||||
|
sudo chown nobody:nogroup /mnt/data/org_ccalm_almaty
|
||||||
|
```
|
||||||
|
|
||||||
|
Открой файл /etc/exports:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo mcedit /etc/exports
|
||||||
|
```
|
||||||
|
Добавь строку:
|
||||||
|
```config
|
||||||
|
/mnt/backups 192.168.200.0/24(rw,sync,no_subtree_check,no_root_squash)
|
||||||
|
```
|
||||||
|
Пояснение:
|
||||||
|
/mnt/backups — путь к расшариваемой папке
|
||||||
|
192.168.1.0/24 — подсеть, которой разрешён доступ
|
||||||
|
rw — чтение и запись
|
||||||
|
sync — синхронная запись (безопаснее)
|
||||||
|
no_subtree_check — оптимизация доступа
|
||||||
|
|
||||||
|
Применение изменений
|
||||||
|
```sh
|
||||||
|
sudo exportfs -ra
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo systemctl restart nfs-kernel-server
|
||||||
|
```
|
||||||
|
|
||||||
|
(Необязательно) Разрешить доступ через firewall
|
||||||
|
```sh
|
||||||
|
sudo ufw allow from 192.168.200.0/24 to any port nfs
|
||||||
|
```
|
||||||
|
Проверка экспортируемых папок
|
||||||
|
```sh
|
||||||
|
sudo exportfs -v
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Подключение к NFS на клиенте (например, другая машина/VM)
|
||||||
|
```sh
|
||||||
|
sudo apt install nfs-common &&
|
||||||
|
sudo mount 192.168.200.80:/mnt/data/org_ccalm_almaty /mnt/nfs-backups
|
||||||
|
```
|
||||||
|
|
||||||
|
Чтобы монтировалось при загрузке, добавь строку в sudo mcedit /etc/fstab:
|
||||||
|
```sh
|
||||||
|
192.168.200.80:/mnt/data/org_ccalm_almaty /mnt/backups nfs defaults 0 0
|
||||||
|
```
|
||||||
|
|
||||||
|
Обновляем:
|
||||||
|
```sh
|
||||||
|
sudo mount -a
|
||||||
|
```
|
||||||
69
RClone/RClone_install_linux.md
Normal file
69
RClone/RClone_install_linux.md
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
Connecting to infrasturture
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo useradd -r -s /sbin/nologin -d /opt/backup -m rclone
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ssh ubuntu@almaty.ccalm.org -p 22
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt update &&
|
||||||
|
sudo apt install rclone
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
rclone version
|
||||||
|
```
|
||||||
|
|
||||||
|
Создаём настройку в ~/.config/rclone/rclone.conf
|
||||||
|
```sh
|
||||||
|
rclone config
|
||||||
|
```
|
||||||
|
|
||||||
|
При настройке для текущего пользователя задал такие параметры:
|
||||||
|
```conf
|
||||||
|
[mywebdav]
|
||||||
|
type = webdav
|
||||||
|
url = https://webdav.geovizor.top/
|
||||||
|
vendor = other
|
||||||
|
user = admin
|
||||||
|
pass = iV6-JPSK7UOcY8xYfvKs9MjZtVMR4pqdKKCoXXtCaw
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Перемещаю все файлы с ранее созданным конфигом:
|
||||||
|
```sh
|
||||||
|
rclone move /opt/backups/data mywebdav:/backups --progress --no-check-certificate
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Предварительно нужно настроить подключение а потом можно вызывать команду для копирования:
|
||||||
|
```sh
|
||||||
|
rclone move /путь/к/локальной/директории webdav:/путь/на/сервере
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Копирую файлы с сервера:
|
||||||
|
```sh
|
||||||
|
rclone copy webdav:/ E:\webdav --no-check-certificate --progress
|
||||||
|
```
|
||||||
|
|
||||||
|
Инициация синхронизации со списком файлов
|
||||||
|
```sh
|
||||||
|
rclone bisync webdav:/ E:\webdav --no-check-certificate --resync --verbose --create-empty-src-dirs
|
||||||
|
```
|
||||||
|
|
||||||
|
Регулярная двусторонняя синхронизация
|
||||||
|
```sh
|
||||||
|
rclone bisync webdav:/ E:\webdav --no-check-certificate --modify-window 1s --progress --create-empty-src-dirs
|
||||||
|
```
|
||||||
136
RClone/WebDAV_install.md
Normal file
136
RClone/WebDAV_install.md
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
https://github.com/hacdias/webdav
|
||||||
|
|
||||||
|
```sh
|
||||||
|
ssh igor@192.168.200.81 -p 22
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt update &&
|
||||||
|
sudo apt install golang-go
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git clone https://github.com/hacdias/webdav.git &&
|
||||||
|
cd webdav
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
go build -o webdav .
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd /opt/webdav &&
|
||||||
|
sudo tee config.yml > /dev/null <<'EOF'
|
||||||
|
address: "0.0.0.0"
|
||||||
|
port: 8085
|
||||||
|
directory: "."
|
||||||
|
permissions: "R"
|
||||||
|
debug: true
|
||||||
|
users:
|
||||||
|
- username: admin
|
||||||
|
password: "U8Z0a6YY7taZ965"
|
||||||
|
directory: "/mnt/backups"
|
||||||
|
permissions: "CRUD"
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
Пытаемся запустить
|
||||||
|
```sh
|
||||||
|
cd /opt/webdav &&
|
||||||
|
./webdav --config config.yml
|
||||||
|
```
|
||||||
|
Проверяем что работает:
|
||||||
|
```sh
|
||||||
|
open http://192.168.200.81:8085
|
||||||
|
```
|
||||||
|
|
||||||
|
Находим и убиваем процесс
|
||||||
|
```sh
|
||||||
|
ps aux | grep webdav
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pkill -f 'webdav --config config.yml'
|
||||||
|
```
|
||||||
|
|
||||||
|
Создаю пользователя webdav
|
||||||
|
```sh
|
||||||
|
sudo useradd -r -s /sbin/nologin -d /opt/webdav -m webdav &&
|
||||||
|
sudo chown -R webdav:webdav /opt/webdav &&
|
||||||
|
sudo chmod -R 750 /opt/webdav
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo nano /etc/systemd/system/webdav.service
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd /etc/systemd/system/ &&
|
||||||
|
sudo tee webdav.service > /dev/null <<'EOF'
|
||||||
|
[Unit]
|
||||||
|
Description=WebDAV Server
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/webdav
|
||||||
|
ExecStart=/opt/webdav/webdav --config config.yml
|
||||||
|
User=webdav
|
||||||
|
Group=webdav
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo systemctl daemon-reexec &&
|
||||||
|
sudo systemctl enable webdav &&
|
||||||
|
sudo systemctl start webdav
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo systemctl status webdav
|
||||||
|
```
|
||||||
|
```sh
|
||||||
|
sudo journalctl -u webdav -b
|
||||||
|
```
|
||||||
|
|
||||||
|
Теперь WebDAV доступен по адресу:
|
||||||
|
```sh
|
||||||
|
start https://yourdomain.com/webdav/
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Настройка HAProxy
|
||||||
|
|
||||||
|
Edit haproxy configuration file:
|
||||||
|
```sh
|
||||||
|
sudo mcedit /etc/haproxy/haproxy.cfg
|
||||||
|
```
|
||||||
|
|
||||||
|
frontend HTTPS:
|
||||||
|
```config
|
||||||
|
frontend https-in
|
||||||
|
bind *:443 ssl crt /etc/ssl/private/yourdomain.pem
|
||||||
|
acl is_webdav path_beg /webdav
|
||||||
|
use_backend webdav_backend if is_webdav
|
||||||
|
```
|
||||||
|
|
||||||
|
В backend:
|
||||||
|
```config
|
||||||
|
backend webdav_backend
|
||||||
|
server webdav1 127.0.0.1:8085
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
haproxy -f /etc/haproxy/haproxy.cfg -c
|
||||||
|
````
|
||||||
|
```sh
|
||||||
|
sudo systemctl restart haproxy
|
||||||
|
```
|
||||||
|
|
||||||
|
Для винды можно подключить диск при помощи:
|
||||||
|
```
|
||||||
|
open https://www.raidrive.com/
|
||||||
|
```
|
||||||
53
Redis_install.md
Normal file
53
Redis_install.md
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
****************************************************************************************************
|
||||||
|
Подключаемся к инфраструктуре
|
||||||
|
```sh
|
||||||
|
ssh ubuntu@almaty.ccalm.org -p 22
|
||||||
|
```
|
||||||
|
****************************************************************************************************
|
||||||
|
Install Redis по мативам: https://timeweb.cloud/tutorials/redis/ustanovka-i-nastrojka-redis-dlya-raznyh-os
|
||||||
|
```sh
|
||||||
|
sudo apt-get update &&
|
||||||
|
sudo apt install redis -y &&
|
||||||
|
redis-cli --version
|
||||||
|
```
|
||||||
|
```sh
|
||||||
|
sudo systemctl restart redis
|
||||||
|
```
|
||||||
|
```sh
|
||||||
|
sudo systemctl status redis
|
||||||
|
```
|
||||||
|
Config:
|
||||||
|
```sh
|
||||||
|
sudo mcedit /etc/redis/redis.conf
|
||||||
|
```
|
||||||
|
И меняем в конфигурации на: supervised systemd
|
||||||
|
Также желательно проверить настройку чтобы слушался только IP: 127.0.0.1
|
||||||
|
```
|
||||||
|
bind 0.0.0.0
|
||||||
|
```
|
||||||
|
Также в поле SECURITY нужно установить пароль, сгенерированный при помощи:
|
||||||
|
```
|
||||||
|
openssl rand 25 | openssl base64 -A
|
||||||
|
```
|
||||||
|
Примерно такой должен быть получиться:
|
||||||
|
```
|
||||||
|
requirepass 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw==
|
||||||
|
```
|
||||||
|
Перезагружаем:
|
||||||
|
```sh
|
||||||
|
sudo systemctl restart redis-server
|
||||||
|
```
|
||||||
|
Проверяем Redis:
|
||||||
|
```sh
|
||||||
|
redis-cli
|
||||||
|
```
|
||||||
|
Или так проверяем:
|
||||||
|
```sh
|
||||||
|
redis-cli -h 127.0.0.1 -p 6379 -a 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw==
|
||||||
|
```
|
||||||
|
И пишем: ping
|
||||||
|
|
||||||
|
Проверяем какие порты прослушиваются на компе:
|
||||||
|
```sh
|
||||||
|
sudo netstat -lnp | grep redis
|
||||||
|
```
|
||||||
@ -79,6 +79,28 @@ openssl x509 -in powerdns.local.crt -text -noout
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Создаём и подписываем одной группой команд:
|
||||||
|
```sh
|
||||||
|
openssl version &&
|
||||||
|
openssl genrsa -out gotify.local.key 2048 &&
|
||||||
|
openssl req -new -key gotify.local.key -out gotify.local.csr -subj "/CN=gotify.local" -addext "subjectAltName=DNS:gotify.local" &&
|
||||||
|
openssl x509 -req -in gotify.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out gotify.local.crt -days 365 -sha256 -copy_extensions copy &&
|
||||||
|
openssl x509 -in gotify.local.crt -text -noout &&
|
||||||
|
cat gotify.local.crt gotify.local.key > gotify.local.pem
|
||||||
|
```
|
||||||
|
Теперь можно устанавливать в HAProxy этот gotify.local.pem сертификат
|
||||||
|
|
||||||
|
Создаём и подписываем одной группой команд:
|
||||||
|
```sh
|
||||||
|
openssl version &&
|
||||||
|
openssl genrsa -out vault.local.key 2048 &&
|
||||||
|
openssl req -new -key vault.local.key -out vault.local.csr -subj "/CN=vault.local" -addext "subjectAltName=DNS:vault.local" &&
|
||||||
|
openssl x509 -req -in vault.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out vault.local.crt -days 365 -sha256 -copy_extensions copy &&
|
||||||
|
openssl x509 -in vault.local.crt -text -noout &&
|
||||||
|
cat vault.local.crt vault.local.key vault.local.csr > vault.local.pem
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Подписать корневым CA:
|
Подписать корневым CA:
|
||||||
@ -8,9 +8,9 @@ Vault — это инструмент от HashiCorp для безопасног
|
|||||||
```sh
|
```sh
|
||||||
wsl
|
wsl
|
||||||
```
|
```
|
||||||
Похоже vault из Москвы недоступен:
|
Connecting to infrastructure:
|
||||||
```sh
|
```sh
|
||||||
ssh root@45.144.64.218 -p 2200
|
ssh igor@192.168.200.85 -p 22
|
||||||
```
|
```
|
||||||
|
|
||||||
### 1.1. Добавление репозитория HashiCorp
|
### 1.1. Добавление репозитория HashiCorp
|
||||||
@ -51,7 +51,7 @@ ssh root@45.144.64.218 -p 2200
|
|||||||
```sh
|
```sh
|
||||||
vault --version
|
vault --version
|
||||||
```
|
```
|
||||||
Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z
|
Выдало: Vault v1.19.4 (322786e236e268532e4b189845971ba67b5cbb23), built 2025-05-14T13:04:47Z
|
||||||
|
|
||||||
|
|
||||||
## 2. Запуск Vault
|
## 2. Запуск Vault
|
||||||
@ -106,28 +106,40 @@ start http://127.0.0.1:8200
|
|||||||
```
|
```
|
||||||
Останавливаю нажатием Ctrl + C
|
Останавливаю нажатием Ctrl + C
|
||||||
|
|
||||||
|
|
||||||
### 2.2. Настройка Vault в режиме сервера
|
### 2.2. Настройка Vault в режиме сервера
|
||||||
|
|
||||||
1. Создайте конфигурационный файл:
|
Creating sel signed sertificate:
|
||||||
```sh
|
```sh
|
||||||
sudo mkdir -p /etc/vault &&
|
sudo openssl req -new -x509 -days 365 -nodes \
|
||||||
sudo mcedit /etc/vault/config.hcl
|
-out /etc/vault.d/vault.local.crt \
|
||||||
|
-keyout /etc/vault.d/vault.local.key \
|
||||||
|
-subj "/CN=yourdomain.local"
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Добавьте следующий конфиг:
|
Set file owner
|
||||||
```text
|
```sh
|
||||||
|
sudo chown -R vault:vault /etc/vault.d/
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Создайте конфигурационный файл, Добавьте следующий конфиг:
|
||||||
|
```sh
|
||||||
|
sudo mkdir -p /etc/vault &&
|
||||||
|
cd /etc/vault &&
|
||||||
|
sudo tee config.hcl > /dev/null <<'EOF'
|
||||||
|
|
||||||
storage "file" {
|
storage "file" {
|
||||||
path = "/opt/vault/data"
|
path = "/opt/vault/data"
|
||||||
}
|
}
|
||||||
|
|
||||||
listener "tcp" {
|
listener "tcp" {
|
||||||
address = "127.0.0.1:8200"
|
address = "0.0.0.0:8200"
|
||||||
tls_disable = 1
|
tls_cert_file = "/etc/vault.d/vault.local.crt"
|
||||||
|
tls_key_file = "/etc/vault.d/vault.local.key"
|
||||||
}
|
}
|
||||||
|
|
||||||
disable_mlock = true
|
disable_mlock = true
|
||||||
ui = true
|
ui = true
|
||||||
|
EOF
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Создайте папку для хранения данных:
|
3. Создайте папку для хранения данных:
|
||||||
@ -171,7 +183,9 @@ sudo mcedit /etc/systemd/system/vault.service
|
|||||||
sudo systemctl enable vault &&
|
sudo systemctl enable vault &&
|
||||||
sudo systemctl start vault
|
sudo systemctl start vault
|
||||||
```
|
```
|
||||||
|
```sh
|
||||||
|
sudo systemctl restart vault
|
||||||
|
```
|
||||||
7. Проверьте статус:
|
7. Проверьте статус:
|
||||||
```sh
|
```sh
|
||||||
sudo systemctl status vault
|
sudo systemctl status vault
|
||||||
@ -213,7 +227,7 @@ It is possible to generate new unseal keys, provided you have a quorum of
|
|||||||
existing unseal keys shares. See "vault operator rekey" for more information.
|
existing unseal keys shares. See "vault operator rekey" for more information.
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Разблокируйте Vault, используя один из ключей (потом ещё 3 раза выполнить эту команду):
|
3. Разблокируйте Vault, используя ключ (потом ещё 3 раза выполнить эту команду):
|
||||||
```sh
|
```sh
|
||||||
vault operator unseal
|
vault operator unseal
|
||||||
```
|
```
|
||||||
@ -225,6 +239,7 @@ existing unseal keys shares. See "vault operator rekey" for more information.
|
|||||||
|
|
||||||
5. Создаём(включаем) новое хранилище ключ-значение через ssh
|
5. Создаём(включаем) новое хранилище ключ-значение через ssh
|
||||||
```sh
|
```sh
|
||||||
|
export VAULT_TOKEN=hvs.FDMfGORUazCHm7jGrSofBVbx &&
|
||||||
vault secrets enable -path=org-ccalm kv-v2
|
vault secrets enable -path=org-ccalm kv-v2
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -357,5 +372,18 @@ token_type = default-service, значит Vault не хранит токены
|
|||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
Теперь HashiCorp Vault установлен и готов к использованию! 🚀
|
Согласно уроку желательно корневой сертификат создавать на 10 лет допустим: https://www.youtube.com/watch?v=eSDpMUeV2lQ
|
||||||
|
Для полноценного использования pki нужно создать роль!
|
||||||
|
|
||||||
|
certstrap --depot-path root init \
|
||||||
|
--organization "GEOVizor" \
|
||||||
|
--organizational-unit "IT" \
|
||||||
|
--country "KZ" \
|
||||||
|
--province "ALM" \
|
||||||
|
--locality "Almaty" \
|
||||||
|
--common-name "DemoCA Root Certificate Authority v1" \
|
||||||
|
--expires "30 years" \
|
||||||
|
--curve P-256 \
|
||||||
|
--path-length 2 \
|
||||||
|
--passphrase "pace_icy_hum_ward"
|
||||||
|
|
||||||
30
Ubuntu.md
30
Ubuntu.md
@ -434,6 +434,8 @@ sudo tar cvpzf /media/usb/backup.tgz --exclude=/var/www --exclude=/etc/fstab --e
|
|||||||
0 1 * * * wget -O /dev/null -q 'http://locust.kz/get/list.php'
|
0 1 * * * wget -O /dev/null -q 'http://locust.kz/get/list.php'
|
||||||
0 1 * * * /opt/backups/backup.sh
|
0 1 * * * /opt/backups/backup.sh
|
||||||
|
|
||||||
|
/opt/backups/backup.sh
|
||||||
|
|
||||||
Проверяю таблицу:
|
Проверяю таблицу:
|
||||||
sudo crontab -l -u www-data
|
sudo crontab -l -u www-data
|
||||||
****************************************************************************************************
|
****************************************************************************************************
|
||||||
@ -2057,34 +2059,6 @@ admin admin поменял на admin deSert!123
|
|||||||
Ошибка на мейке...
|
Ошибка на мейке...
|
||||||
install
|
install
|
||||||
****************************************************************************************************
|
****************************************************************************************************
|
||||||
Install Redis по мативам: https://timeweb.cloud/tutorials/redis/ustanovka-i-nastrojka-redis-dlya-raznyh-os
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt install redis
|
|
||||||
redis-cli --version
|
|
||||||
sudo systemctl status redis
|
|
||||||
Config:
|
|
||||||
sudo mcedit /etc/redis/redis.conf
|
|
||||||
И меняем в конфигурации на: supervised systemd
|
|
||||||
Также желательно проверить настройку чтобы слушался только IP: 127.0.0.1
|
|
||||||
bind 0.0.0.0
|
|
||||||
|
|
||||||
Также в поле SECURITY нужно установить пароль, сгенерированный при помощи:
|
|
||||||
openssl rand 25 | openssl base64 -A
|
|
||||||
Примерно такой должен быть получиться:
|
|
||||||
requirepass 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw==
|
|
||||||
|
|
||||||
Перезагружаем:
|
|
||||||
sudo systemctl restart redis-server
|
|
||||||
Проверяем Redis:
|
|
||||||
redis-cli
|
|
||||||
Или так проверяем:
|
|
||||||
redis-cli -h 127.0.0.1 -p 6379 -a 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw==
|
|
||||||
И пишем: ping
|
|
||||||
|
|
||||||
Проверяем какие порты прослушиваются на компе:
|
|
||||||
sudo netstat -lnp | grep redis
|
|
||||||
|
|
||||||
****************************************************************************************************
|
|
||||||
Для настройки локального сервера имен DNS сервер в место Bind9 теперь Dnsmasq так как он проще, понадобилось для haproxy
|
Для настройки локального сервера имен DNS сервер в место Bind9 теперь Dnsmasq так как он проще, понадобилось для haproxy
|
||||||
sudo apt-get install dnsmasq
|
sudo apt-get install dnsmasq
|
||||||
sudo apt-get install resolvconf
|
sudo apt-get install resolvconf
|
||||||
|
|||||||
Reference in New Issue
Block a user