From 37d88ee1a8258411b0aa0f00cde7a494517f6cf6 Mon Sep 17 00:00:00 2001 From: "im.makarov" Date: Sat, 16 Nov 2024 14:37:55 +0300 Subject: [PATCH] mega commit --- db/POSTGRES.MD | 48 ++++++++++++++++- docker/DOCKER.MD | 5 ++ docker/NOTES.MD | 75 +++++++++++++++++++++++++- linux/COMMANDS.MD | 5 +- linux/LOGGING.MD | 34 ++++++++++++ linux/WORK.MD | 2 + vebserver/NGINX.MD | 127 +++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 293 insertions(+), 3 deletions(-) create mode 100644 docker/DOCKER.MD create mode 100644 linux/LOGGING.MD create mode 100644 linux/WORK.MD create mode 100644 vebserver/NGINX.MD 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/*; +} +```