diff --git a/db/POSTGRES.MD b/db/POSTGRES.MD
index bcda0d6..d659869 100644
--- a/db/POSTGRES.MD
+++ b/db/POSTGRES.MD
@@ -1,11 +1,18 @@
[Cheat sheet](https://gist.github.com/Kartones/dd3ff5ec5ea238d4c546)
+Общие команды
+
- `sudo -u postgres psql postgres`
- `CREATE DATABASE имя_базы_данных;`
+- `DROP DATABASE mydatabase;`
+- `psql -U postgres`
+
+
- `\l` - просмотр списка бд
- `\q` - выход
---
+Работа внутри конкретной бд
- `\c имя_базы_данных [имя_пользователя]` - подключение к бд или из bash `psql -U username -d database_name`
- `\dt` - просмотр списка таблиц
@@ -16,7 +23,6 @@
- `CREATE TABLE имя_таблицы (id SERIAL PRIMARY KEY, колонка1 тип, колонка2 тип, ...);` - создание таблицы
-- `DROP TABLE имя_таблицы;`
- `CREATE USER имя_пользователя WITH PASSWORD 'пароль';`
- `CREATE ROLE имя_роли;`
- `GRANT ALL PRIVILEGES ON DATABASE имя_базы TO имя_пользователя;`
@@ -27,5 +33,45 @@
- `SELECT * FROM pg_stat_activity;` - просмотр текущий подключений
- `SELECT * FROM pg_locks;` - просмотр блокировок
+---
+- `psql -U postgres -d my_database -f ./script.sql` - запуск скрипта
+
+- `/usr/pgsql-12/bin/pg_dump -U u_ensi -t address_several_juridical_entity -h 127.0.0.1 db_ensi | gzip >
/address_several_juridical_entity.sql.gz` - снятие дампов
+
+- `/zcat /tmp/SvJul_4_07.sql.gz | /usr/pgsql-12/bin/psql -h 127.0.0.1 -U u_ensi -d db_ensi -t SvJul_4_07 >> ensi.log` - восстановление таблицы
+---
+`ALTER TABLE` — это команда в SQL, которая используется для изменения структуры уже существующей таблицы в базе данных.
+```bash
+ALTER TABLE имя_таблицы
+ADD имя_столбца тип_данных;
+```
+```bash
+ALTER TABLE имя_таблицы
+DROP COLUMN имя_столбца;
+```
+```bash
+ALTER TABLE имя_таблицы
+ALTER COLUMN имя_столбца SET DATA TYPE новый_тип;
+```
+```bash
+ALTER TABLE имя_таблицы
+ADD CONSTRAINT имя_ограничения тип_ограничения (столбец);
+```
+
+```bash
+ALTER TABLE employees
+ADD CONSTRAINT age_check CHECK (age >= 18);
+```
+SELECT pid, usename, datname, client_addr, client_port, application_name, state
+FROM pg_stat_activity;
+
+
+SELECT usename, client_addr, client_port, state
+FROM pg_stat_activity;
+
+
+psql -U postgres -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;"
+
+psql -U postgres -d postgres -c "SELECT datname FROM pg_database WHERE datistemplate = false;" -t -A
diff --git a/docker/DOCKER.MD b/docker/DOCKER.MD
new file mode 100644
index 0000000..c98f295
--- /dev/null
+++ b/docker/DOCKER.MD
@@ -0,0 +1,5 @@
+- Параметры для `restart`
+ - `no` (или не указывать restart вовсе) — контейнер не будет перезапускаться автоматически. Это значение по умолчанию.
+ - `always` — контейнер будет автоматически перезапущен при любом завершении работы (даже при ручной остановке через docker stop). Он также перезапустится после перезагрузки Docker или хоста
+ - `on-failure` — контейнер будет перезапущен только в случае выхода с ненулевым статусом (ошибкой). Вы можете также указать максимальное количество перезапусков, например,`on-failure:3`.
+ - `unless-stopped` — контейнер будет автоматически перезапущен при сбоях и после перезагрузки Docker или системы, но не перезапустится, если его остановили вручную.
\ No newline at end of file
diff --git a/docker/NOTES.MD b/docker/NOTES.MD
index 8122426..aa16f92 100644
--- a/docker/NOTES.MD
+++ b/docker/NOTES.MD
@@ -1 +1,74 @@
-`Аргументы сборки (ARG)` не сохраняются в конечном образе. ARG используется для передачи значений на этапе сборки. Эти значения доступны только во время сборки образа и не сохраняются в конечном образе. Также ARG не сохраняется в слоях образа, т.е. с помощью `docker history` значение переменной не посмотреть. Нельзя получить доступ к значению ARG из финального образа.
\ No newline at end of file
+`Аргументы сборки (ARG)` не сохраняются в конечном образе. ARG используется для передачи значений на этапе сборки. Эти значения доступны только во время сборки образа и не сохраняются в конечном образе. Также ARG не сохраняется в слоях образа, т.е. с помощью `docker history` значение переменной не посмотреть. Нельзя получить доступ к значению ARG из финального образа.
+
+---
+Про ВОЛЮМЫ
+
+Например, есть такой волюм
+
+`./infrastructure/db/create_db.sql:/docker-entrypoint-initdb.d/create_db.sql`
+
+если `./infrastructure/db/create_db.sql` не будет на хосте, Docker создаст директории с указанными именами вместо файлов
+
+---
+
+Как докер ищет образы?
+
+- Докер сначала проверяет есть ли образ с указанным именем и тегом локально на хосте (в кэше Docker)
+- Если образ не найден локально, докер ищет его в registry по умолчанию, то есть в Dockerhub, Docker пытается спуллить образ с докер хаб, если тэг не указан, Docker использует тег `latest` по умолчанию
+- Дальше Docker идет в настроенный Docker registry и ищет образ там, например
+
+`image: registry.example.com/myimage:tag`
+
+- Если образ не найден и в docker-compose.yml указана секция build, Docker создаст образ локально из Dockerfile, который находится в указанной директории. Пример в docker-compose.yml:
+```yaml
+services:
+ myapp:
+ build:
+ context: .
+ dockerfile: Dockerfile
+```
+
+Последовательность
+
+1. Ищет локально на хосте.
+2. Ищет на Docker Hub.
+3. Ищет в частных реестрах (если указан).
+4. Сборка из Dockerfile (если указана опция build в docker-compose.yml).
+
+---
+Когда мы пишем
+```yaml
+depends_on:
+ postgresql-db:
+ condition: service_healthy
+```
+
+это значит что все хелфчеки к сервису (контейнеру) postgresql-db должны выполниться успешно, только после этого контейнер начнёт подниматься
+
+---
+Оператор `&&` в командах оболочки используется для цепочки команд, где следующая команда выполняется только если предыдущая выполнилась успешно (с кодом возврата 0).
+
+---
+CMD [] не использует оболочку для выполнения команды, команда передаётся напрямую процессу, то есть пайпы и всяки приблуды оболочки не работают
+Docker не запускает оболочку, а передает команду напрямую в процесс.
+
+---
+В чём разница сежду ENTRYPOINT и CMD
+
+CMD можно переопределить при запуске контейнера
+```
+docker run echo Hello
+```
+
+ENTRYPOINT задает команду, которая всегда будет выполняться при запуске контейнера. Он используется для установки основной команды, которая должна быть выполнена, и она не может быть легко перезаписана при запуске контейнера. Однако, вы можете передавать дополнительные параметры командой docker run, и эти параметры будут добавлены к командной строке, указанной в ENTRYPOINT. В отличие от CMD, ENTRYPOINT гарантирует, что указанная команда будет выполнена, даже если при запуске контейнера вы не укажете команду.
+
+в ENTRYPOINT можно передавать переменные окружения
+```
+ENV MY_VAR=Hello
+ENTRYPOINT ["sh", "-c", "echo $MY_VAR"]
+```
+
+```
+ENTRYPOINT ["nginx", "-g"]
+CMD ["daemon off;"]
+```
\ No newline at end of file
diff --git a/linux/COMMANDS.MD b/linux/COMMANDS.MD
index f24a79a..25fd354 100644
--- a/linux/COMMANDS.MD
+++ b/linux/COMMANDS.MD
@@ -64,7 +64,9 @@ APT работает поверх более низкоуровневого ин
- `speedtest-cli --list` - список серверов
- `speedtest-cli --server SERVER_ID`
- `fuser 9095/tcp` - проверить доступность порта
-
+- `ethtool enp0s3` - диагностика сетевого интерфейса на физическом уровне (`ethtool enp0s3` - статистика)
+- `arp -a` - arp таблица (ip -> mac)
+- `ip route` - таблица маршрутизации (можно проверить есть ли шлюз)
### База
- `cp -p` - сохранить атрибуты файлов (время создания, права, владельца)
@@ -133,6 +135,7 @@ APT работает поверх более низкоуровневого ин
```bash
tar -xvfz backup.tar.gz /var/www
```
+- `sudo tar -zxvf apache-activemq-6.1.3-bin.tar.gz -C /opt` - распаковать в каталог
`dmesg -T` - логи ядра системы
### Система
diff --git a/linux/LOGGING.MD b/linux/LOGGING.MD
new file mode 100644
index 0000000..bda7ed3
--- /dev/null
+++ b/linux/LOGGING.MD
@@ -0,0 +1,34 @@
+- `tail -f /var/log/*` - логи (`-f` - обновление в реальном времени)
+- `journalctl` - утилита для просмотра логов служб, управляемых `systemd`
+ - `-u ` - просмотр логов конкретной службы
+ ```bash
+ journalctl -u nginx
+ ```
+ - `journalctl -u nginx -f` - просмотр логов в реальном времени
+ - `journalctl -n 100` - последние 100 строк
+ - `journalctl --since "2024-10-03 12:00:00" --until "2024-10-03 14:00:00"` - логи за конкретный период
+ - `journalctl -p err` - можно показывать только ошибки
+ - emerg (0): Аварийные сообщения.
+ - alert (1): Требуют немедленных действий.
+ - crit (2): Критические ошибки.
+ - err (3): Ошибки.
+ - warning (4): Предупреждения.
+ - notice (5): Важные события.
+ - info (6): Информационные сообщения.
+ - debug (7): Отладочные сообщения.
+ - `journalctl -xe`
+ - x (или --catalog) — выводит дополнительные объяснения (аннотации) к некоторым сообщениям журнала. Это помогает понять детали ошибок или предупреждений, предлагая описания и возможные решения, если такие есть.
+ - e (или --pager-end) — открывает журнал в режиме постраничного просмотра и сразу прокручивает его до конца, показывая самые последние записи.
+ - `journalctl -u SDWL_Downloader_8090.service -xe`
+
+- `sudo journalctl --disk-usage`
+- `sudo journalctl --vacuum-size=1G` - максимально допустимый размер для хранимых на диске логов
+- `sudo journalctl --vacuum-time=1years` - максимально допустимый время для хранимых на диске логов
+
+---
+
+- `tail -f` следит за файлом и выводит новые строки по мере их добавления в файл. Однако, если файл будет удалён и создан заново (например, при ротации логов), `tail -f` перестанет отслеживать файл, потому что он будет считать, что файл исчез.
+
+- `tail -F` делает то же самое, но в случае удаления файла и его создания заново, `tail -F` продолжит отслеживать файл. Это полезно для логов, так как они могут быть перезаписаны, но вы хотите продолжать их отслеживать, несмотря на изменения имени файла или его создание заново.
+
+Используйте опцию -F, если производится слежение за автоматически архивируемыми файлами журналов, например, с помощью logrotate. В этом случае слежение за файлом будет происходить даже в случае его переименования, пересоздания или удаления.
\ No newline at end of file
diff --git a/linux/WORK.MD b/linux/WORK.MD
new file mode 100644
index 0000000..7a9e575
--- /dev/null
+++ b/linux/WORK.MD
@@ -0,0 +1,2 @@
+- `firewall-cmd --zone=public --add-masquerade --permanent`
+- `firewall-cmd --reload`
\ No newline at end of file
diff --git a/vebserver/NGINX.MD b/vebserver/NGINX.MD
new file mode 100644
index 0000000..7c06774
--- /dev/null
+++ b/vebserver/NGINX.MD
@@ -0,0 +1,127 @@
+- файл `/etc/nginx/nginx.conf`:
+```
+http {
+ # Включение основной конфигурации из conf.d
+ include /etc/nginx/conf.d/*.conf;
+
+ # Включение дополнительных конфигураций из extra-conf.d
+ include /etc/nginx/extra-conf.d/*.conf;
+}
+```
+- Блок **http**
+
+Блок `http` используется для настроек на уровне всего HTTP-сервера и обычно располагается в основном файле конфигурации `/etc/nginx/nginx.`conf. Он содержит общие настройки, которые могут применяться ко всем server блокам (виртуальным хостам) внутри него.
+
+Примеры того, что может быть настроено в http блоке:
+
+- Глобальные параметры для всех сайтов:
+
+ - Настройки кеширования, сжатия, таймаутов, буферов.
+ - Настройки логирования (например, access_log, error_log).
+ - Параметры загрузки статических файлов.
+ - Общие правила для обработки MIME-типов и дефолтных заголовков.
+
+- Определение подключаемых конфигураций:
+
+ - Через директивы include, например, для файлов в conf.d/ и extra-conf.d/.
+
+- Настройки для upstream
+
+ - Создание блоков upstream для балансировки нагрузки между несколькими бэкэндами (например, для проксирования запросов к пулу приложений).
+
+```
+http {
+ # Логирование запросов
+ access_log /var/log/nginx/access.log;
+ error_log /var/log/nginx/error.log;
+
+ # Сжатие
+ gzip on;
+ gzip_types text/plain text/css application/json application/javascript;
+
+ # Пулы серверов для балансировки нагрузки
+ upstream backend {
+ server backend1.example.com;
+ server backend2.example.com;
+ }
+
+ # Подключение всех файлов в conf.d/
+ include /etc/nginx/conf.d/*.conf;
+}
+```
+
+- Блок **server**
+
+Блок server используется для настройки конкретного хоста (сайта) или группы настроек для определенного домена или IP-адреса. В одном http блоке может быть несколько server блоков, каждый из которых настраивает определенный виртуальный хост, обслуживающий свои уникальные домены, поддомены, или порты.
+
+Домен и порт:
+Директивы server_name и listen, чтобы указать, на каких доменах и портах сервер принимает запросы.
+
+Обработка запросов:
+Можно настроить обработку корневых запросов (/), редиректы и маршрутизацию.
+
+Проксирование запросов на бэкенд:
+Настройка обратного прокси-сервера через директиву proxy_pass.
+
+Доступ к статическим файлам:
+Использование директивы root или alias для указания расположения статических файлов.
+```
+server {
+ listen 80;
+ server_name example.com;
+
+ root /var/www/example.com;
+
+ # Настройка проксирования для API-запросов
+ location /api/ {
+ proxy_pass http://backend;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+
+ # Страница ошибки 404
+ error_page 404 /404.html;
+ location = /404.html {
+ internal;
+ }
+}
+```
+
+Блок http: Настройки, определенные здесь, применяются ко всем server блокам, если они не переопределены внутри конкретного server блока. Например, включение сжатия в http блоке (gzip on;) будет автоматически применяться ко всем виртуальным хостам.
+
+Блок server: Определяет параметры для конкретных сайтов или доменов.
+
+---
+
+- `/etc/nginx/sites-available:` В этой директории хранятся файлы конфигураций для всех доступных сайтов или приложений. Каждый файл здесь обычно соответствует одному сайту или домену, и содержит настройки для конкретного виртуального хоста.
+
+- `/etc/nginx/sites-enabled`: Эта директория содержит символические ссылки на файлы из sites-available. Файлы в sites-enabled представляют собой активированные сайты. Nginx загружает только те сайты, для которых конфигурационные файлы находятся в sites-enabled.
+
+для активации сайта:
+
+`sudo ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/`
+
+для деактивации:
+
+`sudo rm /etc/nginx/sites-enabled/example.conf`
+
+`sudo systemctl reload nginx` - необходимо перезагрузить nginx
+
+```
+/etc/nginx/
+├── nginx.conf
+├── sites-available/
+│ ├── example.com
+│ └── example.org
+└── sites-enabled/
+ ├── example.com -> /etc/nginx/sites-available/example.com
+```
+
+потом `sites-enabled` подключается к `/etc/nginx/nginx.conf`
+```
+http {
+ # Общие настройки HTTP
+ include /etc/nginx/sites-enabled/*;
+}
+```