<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Anthony</title><subtitle>📝 Заметки по программированию и настройке сервисов для ИТ-инфраструктуры</subtitle><author><name>Anthony</name></author><id>https://teletype.in/atom/antroot</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/antroot?offset=0"></link><link rel="alternate" type="text/html" href="https://306.antroot.ru/?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=antroot"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/antroot?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-25T12:18:41.908Z</updated><entry><id>antroot:gitlab</id><link rel="alternate" type="text/html" href="https://306.antroot.ru/gitlab?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=antroot"></link><title>Установка GitLab CE на Linux</title><published>2026-02-25T08:41:28.118Z</published><updated>2026-03-04T05:46:36.688Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/48/f5/48f58aac-920d-4270-9dae-35bb378bccc1.png"></media:thumbnail><category term="sysadmin" label="Sysadmin"></category><tt:hashtag>gitlab</tt:hashtag><tt:hashtag>git</tt:hashtag><tt:hashtag>linux</tt:hashtag><tt:hashtag>sysadmin</tt:hashtag><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/9b/98/9b98fae3-6d66-4273-8ae8-3237a101be32.jpeg&quot;&gt;Подробная инструкция по установке GitLab на Linux, обновлению и миграции</summary><content type="html">
  &lt;figure id=&quot;8sTL&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9b/98/9b98fae3-6d66-4273-8ae8-3237a101be32.jpeg&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;o0MH&quot;&gt;&lt;strong&gt;Git&lt;/strong&gt; - это система контроля версий, используется для ведения проектов в том числе распределенными группами разработчиков.&lt;/p&gt;
  &lt;p id=&quot;xlFD&quot;&gt;&lt;a href=&quot;https://306.antroot.ru/git&quot; target=&quot;_blank&quot;&gt;Справка по Git&lt;/a&gt; | &lt;a href=&quot;https://306.antroot.ru/git-set&quot; target=&quot;_blank&quot;&gt;Настройка клиента Git&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;HrvX&quot;&gt;&lt;strong&gt;GitLab&lt;/strong&gt; - это проект, который используя систему управления репозиториями &lt;strong&gt;git&lt;/strong&gt; полностью обеспечивает жизненный цикл &lt;strong&gt;DevOps&lt;/strong&gt;, включая wiki, CI/CD и многое другое.&lt;/p&gt;
  &lt;p id=&quot;WGS0&quot;&gt;&lt;strong&gt;GitLab&lt;/strong&gt; поставляется в нескольких вариантах:&lt;/p&gt;
  &lt;ul id=&quot;0mNZ&quot;&gt;
    &lt;li id=&quot;thQw&quot;&gt;Docker - запускается в виде контейнера;&lt;/li&gt;
    &lt;li id=&quot;BflV&quot;&gt;Source code - компилируется под конкретную ОС;&lt;/li&gt;
    &lt;li id=&quot;DQsr&quot;&gt;Omnibus - &amp;quot;все в одном&amp;quot;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8ozB&quot;&gt;Мы рассмотрим вариант &lt;strong&gt;Omnibus&lt;/strong&gt; - он подразумевает установку всех необходимых для функционирования &lt;strong&gt;GitLab&lt;/strong&gt; утилит вместе с GitLab: PostgreSQL, Redis, Nginx, Prometheus, Grafana, Registry, и т.д.&lt;/p&gt;
  &lt;h2 id=&quot;подготовка-системы&quot;&gt;Подготовка системы&lt;/h2&gt;
  &lt;p id=&quot;afGu&quot;&gt;Установить имя хоста, записать значение в &lt;code&gt;/etc/hosts&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;mVyj&quot; data-lang=&quot;bash&quot;&gt;hostnamectl set-hostname gitlab
sed -i s/127.0.1.1/\#127.0.1.1/g /etc/hosts
echo &amp;quot;10.0.3.101 gitlab&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;/pre&gt;
  &lt;p id=&quot;BfxO&quot;&gt;Укажите в &lt;a href=&quot;https://306.antroot.ru/dns-bind&quot; target=&quot;_blank&quot;&gt;DNS&lt;/a&gt; IP-адрес Gitlab сервера и настройте &lt;a href=&quot;https://306.antroot.ru/nginx&quot; target=&quot;_blank&quot;&gt;обратный прокси&lt;/a&gt; в случае необходимости.&lt;br /&gt;Установить дополнительные пакеты&lt;/p&gt;
  &lt;pre id=&quot;ohFz&quot; data-lang=&quot;bash&quot;&gt;apt install -y curl ca-certificates openssl perl&lt;/pre&gt;
  &lt;p id=&quot;2BeP&quot;&gt;Установить локаль, потребуется для PostgreSQL&lt;/p&gt;
  &lt;pre id=&quot;5iZs&quot; data-lang=&quot;bash&quot;&gt;sh -c &amp;quot;echo &amp;#x27;LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8&amp;#x27; &amp;gt; /etc/default/locale&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;es4Z&quot;&gt;Установить агент передачи почты (MTA), например Postfix&lt;/p&gt;
  &lt;pre id=&quot;2qUC&quot; data-lang=&quot;bash&quot;&gt;apt install -y postfix&lt;/pre&gt;
  &lt;p id=&quot;CMJs&quot;&gt;Для выбора пунктов в установщике используйте клавишу &lt;strong&gt;Tab&lt;/strong&gt; и клавишу &lt;strong&gt;Enter&lt;/strong&gt; для подтверждения.&lt;/p&gt;
  &lt;ul id=&quot;kXm0&quot;&gt;
    &lt;li id=&quot;6BAm&quot;&gt;Выберите &lt;code&gt;Internet site&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;tm0D&quot;&gt;Задайте в &lt;code&gt;Mail name&lt;/code&gt; полное доменное имя (FQDN), например &lt;em&gt;gitlab.antroot.ru&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;JG2B&quot;&gt;Остальные настройки можно пропустить, нажав &lt;em&gt;Enter&lt;/em&gt;&lt;br /&gt;Запустить и включить &lt;code&gt;postfix&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;pyCq&quot; data-lang=&quot;bash&quot;&gt;systemctl start postfix
systemctl enable postfix&lt;/pre&gt;
  &lt;h2 id=&quot;установка-gitlab&quot;&gt;Установка Gitlab&lt;/h2&gt;
  &lt;p id=&quot;kryC&quot;&gt;На официальном сайте &lt;a href=&quot;https://web.archive.org/web/20230601022024mp_/http://gitlab.com/&quot; target=&quot;_blank&quot;&gt;gitlab.com&lt;/a&gt; можно уточнить инструкции для установки на определенные дистрибутивы операционных систем. В варианте Debian для добавления репозитория используется скрипт (задать переменные &lt;code&gt;os&lt;/code&gt; и &lt;code&gt;dist&lt;/code&gt;, если скрипт не смог определить):&lt;/p&gt;
  &lt;pre id=&quot;ocbu&quot; data-lang=&quot;bash&quot;&gt;curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | os=debian dist=buster bash&lt;/pre&gt;
  &lt;p id=&quot;Trp6&quot;&gt;Установка&lt;/p&gt;
  &lt;pre id=&quot;1kzV&quot; data-lang=&quot;bash&quot;&gt;EXTERNAL_URL=&amp;quot;https://gitlab.antroot.ru&amp;quot; \
GITLAB_ROOT_PASSWORD=&amp;quot;MyStrongPassword&amp;quot; \
apt install gitlab-ce gitlab-cli&lt;/pre&gt;
  &lt;p id=&quot;IaX5&quot;&gt;Если перед установкой не была задана переменная с паролем администратора, после установки пароль администратора в течение 24 часов хранится в файле&lt;/p&gt;
  &lt;pre id=&quot;tN50&quot; data-lang=&quot;bash&quot;&gt;/etc/gitlab/initial_root_password&lt;/pre&gt;
  &lt;p id=&quot;GLKE&quot;&gt;Основные файлы &lt;strong&gt;GitLab&lt;/strong&gt; расположены:&lt;/p&gt;
  &lt;ul id=&quot;zs8W&quot;&gt;
    &lt;li id=&quot;JGut&quot;&gt;&lt;code&gt;/etc/gitlab/&lt;/code&gt; - конфигурация &lt;strong&gt;gitlab&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;lCb7&quot;&gt;&lt;code&gt;/var/log/gitlab/&lt;/code&gt; - журналы &lt;strong&gt;gitlab&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;bstw&quot;&gt;&lt;code&gt;/opt/gitlab/&lt;/code&gt; - бинарные файлы &lt;strong&gt;gitlab&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;vBD7&quot;&gt;&lt;code&gt;/var/opt/gitlab/&lt;/code&gt; - рабочие директории nginx, postgresql, redis, registry, prometheus, grafana&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8VDy&quot;&gt;Основные параметры &lt;strong&gt;GitLab&lt;/strong&gt;&lt;br /&gt;В файле &lt;code&gt;/etc/gitlab/gitlab.rb&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;JrX7&quot; data-lang=&quot;bash&quot;&gt;external_url &amp;#x27;https://gitlab.antroot.ru&amp;#x27;
gitlab_rails[&amp;#x27;time_zone&amp;#x27;] = &amp;#x27;UTC&amp;#x27;

gitlab_rails[&amp;#x27;gitlab_email_enabled&amp;#x27;] = true
gitlab_rails[&amp;#x27;gitlab_email_from&amp;#x27;] = &amp;#x27;gitlab@antroot.ru&amp;#x27;
gitlab_rails[&amp;#x27;gitlab_email_display_name&amp;#x27;] = &amp;#x27;GitLab&amp;#x27;
gitlab_rails[&amp;#x27;gitlab_email_reply_to&amp;#x27;] = &amp;#x27;noreply@antroot.ru&amp;#x27;
gitlab_rails[&amp;#x27;gitlab_email_subject_suffix&amp;#x27;] = &amp;#x27;gitlab.antroot.ru&amp;#x27;

gitlab_rails[&amp;#x27;gitlab_default_theme&amp;#x27;] = 2&lt;/pre&gt;
  &lt;p id=&quot;yvWR&quot;&gt;Расположение репозиториев по умолчанию &lt;code&gt;/var/opt/gitlab/git-data&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;giiV&quot; data-lang=&quot;bash&quot;&gt;git_data_dirs({
  &amp;quot;default&amp;quot; =&amp;gt; {
    &amp;quot;path&amp;quot; =&amp;gt; &amp;quot;/mnt/git-data&amp;quot;
   }
})
# или
git_data_dirs({
  &amp;quot;default&amp;quot; =&amp;gt; { &amp;quot;path&amp;quot; =&amp;gt; &amp;quot;/var/opt/gitlab/git-data&amp;quot; },
  &amp;quot;alternative&amp;quot; =&amp;gt; { &amp;quot;path&amp;quot; =&amp;gt; &amp;quot;/mnt/git-data&amp;quot; }
})&lt;/pre&gt;
  &lt;p id=&quot;qqco&quot;&gt;Для синхронизации выполните:&lt;/p&gt;
  &lt;pre id=&quot;O0ie&quot; data-lang=&quot;bash&quot;&gt;gitlab-ctl stop
rsync -av --delete /var/opt/gitlab/git-data/repositories /mnt/git-data/
gitlab-ctl reconfigure
gitlab-ctl start&lt;/pre&gt;
  &lt;p id=&quot;ux3r&quot;&gt;Registry располагается по умолчанию в &lt;code&gt;/var/opt/gitlab/gitlab-rails/shared/registry&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;AQ1l&quot; data-lang=&quot;bash&quot;&gt;registry_external_url &amp;#x27;https://registry.antroot.ru&amp;#x27;
gitlab_rails[&amp;#x27;registry_enabled&amp;#x27;] = true
gitlab_rails[&amp;#x27;registry_host&amp;#x27;] = &amp;quot;registry.antroot.ru&amp;quot;
gitlab_rails[&amp;#x27;registry_port&amp;#x27;] = &amp;quot;5005&amp;quot;
gitlab_rails[&amp;#x27;registry_path&amp;#x27;] = &amp;quot;/mnt/shared/registry&amp;quot;

registry_nginx[&amp;#x27;enable&amp;#x27;] = true
registry_nginx[&amp;#x27;listen_port&amp;#x27;] = 5005&lt;/pre&gt;
  &lt;p id=&quot;t6yG&quot;&gt;Другие хранилища из &lt;code&gt;/var/opt/gitlab/gitlab-rails/shared/&lt;/code&gt; также можно переместить на подключенные диски:&lt;/p&gt;
  &lt;pre id=&quot;6fqU&quot; data-lang=&quot;bash&quot;&gt;gitlab_rails[&amp;#x27;lfs_enabled&amp;#x27;] = true
gitlab_rails[&amp;#x27;lfs_storage_path&amp;#x27;] = &amp;quot;/mnt/shared/lfs-objects&amp;quot;

gitlab_rails[&amp;#x27;uploads_directory&amp;#x27;] = &amp;quot;/mnt/uploads&amp;quot;

gitlab_rails[&amp;#x27;terraform_state_enabled&amp;#x27;] = true
gitlab_rails[&amp;#x27;terraform_state_storage_path&amp;#x27;] = &amp;quot;/mnt/shared/terraform_state&amp;quot;

gitlab_rails[&amp;#x27;pages_local_store_enabled&amp;#x27;] = true
gitlab_rails[&amp;#x27;pages_local_store_path&amp;#x27;] = &amp;quot;/mnt/shared/pages&amp;quot;

gitlab_rails[&amp;#x27;manage_backup_path&amp;#x27;] = true
gitlab_rails[&amp;#x27;backup_path&amp;#x27;] = &amp;quot;/mnt/backups&amp;quot;
# default skip
#gitlab_rails[&amp;#x27;env&amp;#x27;] = {
#    &amp;quot;SKIP&amp;quot; =&amp;gt; &amp;quot;db,uploads,repositories,builds,artifacts,lfs,registry,pages&amp;quot;
#}
gitlab_rails[&amp;#x27;env&amp;#x27;] = {
    &amp;quot;SKIP&amp;quot; =&amp;gt; &amp;quot;uploads,builds,artifacts,lfs,registry&amp;quot;
}&lt;/pre&gt;
  &lt;p id=&quot;1Cb9&quot;&gt;После применения настроек из файла &lt;code&gt;/etc/gitlab/gitlab.rb&lt;/code&gt; необходимо выполнить реконфигурацию &lt;strong&gt;gitlab&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;oHkn&quot; data-lang=&quot;bash&quot;&gt;gitlab-ctl reconfigure&lt;/pre&gt;
  &lt;p id=&quot;T62O&quot;&gt;Конфигурация &lt;a href=&quot;https://306.antroot.ru/nginx&quot; target=&quot;_blank&quot;&gt;обратного прокси&lt;/a&gt; (reverse proxy) для &lt;strong&gt;gitlab&lt;/strong&gt; на примере &lt;strong&gt;nginx&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;cjUQ&quot; data-lang=&quot;nginx&quot;&gt;# переадресация на HTTPS
server {
    listen 80;
    server_name gitlab.antroot.ru;
    return 301 https://$http_host$request_uri;
}

# блок обработки основного сайта с выдачей контента через proxy_pass с сервера в DMZ
server {
    server_name gitlab.antroot.ru;
    listen 443 http2 ssl;

    location / {
        resolver 10.0.2.2;
        proxy_pass https://gitlab.antroot.lan;
        proxy_set_header Host $host;
    }
    access_log /var/log/nginx/gitlab.antroot.ru.access.log;
    error_log  /var/log/nginx/gitlab.antroot.ru.error.log;

    #ssl_certificate /etc/letsencrypt/live/gitlab.antroot.ru/fullchain.pem;
    #ssl_certificate_key /etc/letsencrypt/live/gitlab.antroot.ru/privkey.pem;
}

# блок для реестра registry также с выдачей контента через proxy_pass из DMZ
server {
    server_name registry.antroot.ru;
    listen 5005 ssl;
    listen 443 http2 ssl;

    location / {
        resolver 10.0.2.2;
        proxy_pass https://gitlab.antroot.lan:5005;
        proxy_set_header Host $host;
        proxy_cache off;
        proxy_buffering off;
        proxy_request_buffering off;
    }
    access_log /var/log/nginx/registry.antroot.ru.access.log;
    error_log  /var/log/nginx/registry.antroot.ru.error.log;

    #ssl_certificate /etc/letsencrypt/live/registry.mijor.ru/fullchain.pem;
    #ssl_certificate_key /etc/letsencrypt/live/registry.mijor.ru/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}&lt;/pre&gt;
  &lt;p id=&quot;16aC&quot;&gt;Здесь закрыты комментарием ссылки на файлы сертификатов, которые можно установить с помощью &lt;strong&gt;certbot&lt;/strong&gt;, подробнее смотрите в &lt;a href=&quot;https://306.antroot.ru/nginx&quot; target=&quot;_blank&quot;&gt;статье&lt;/a&gt;&lt;/p&gt;
  &lt;h2 id=&quot;проверка&quot;&gt;Проверка&lt;/h2&gt;
  &lt;p id=&quot;EJTG&quot;&gt;После установки и настройки можно зайти браузером на адрес &lt;em&gt;http://gitlab.antroot.ru&lt;/em&gt; (используйте указанный при настройке gitlab) - первая авторизация по указанному выше в статье паролю или из файла в &lt;code&gt;/etc/gitlab/initial_root_password&lt;/code&gt;.&lt;br /&gt;Авторизуйтесь, смените пароль (правое верхнее меню, profile, password), создайте группу (левое верхнее меню, groups, create group) и проект (левое верхнее меню, projects, create project).&lt;br /&gt;В настройках проекта в левом меню &lt;strong&gt;Packages &amp;amp; Registries&lt;/strong&gt; / &lt;strong&gt;Container Registry&lt;/strong&gt; есть настройки доступа к репозиторию образов Container Registry. Например, при указании адреса реестра &lt;em&gt;registry.antroot.ru&lt;/em&gt;, в группе &lt;em&gt;group1&lt;/em&gt; и проекте &lt;em&gt;project1&lt;/em&gt;:&lt;/p&gt;
  &lt;pre id=&quot;Htkn&quot; data-lang=&quot;bash&quot;&gt;docker login registry.antroot.ru
docker build -t registry.antroot.ru:/group1/project1 .
docker push registry.antroot.ru/group1/project1&lt;/pre&gt;
  &lt;p id=&quot;LD5J&quot;&gt;Создадим тестовый образ и проверим работу реестра registry:&lt;/p&gt;
  &lt;pre id=&quot;zbnC&quot; data-lang=&quot;bash&quot;&gt;docker login registry.antroot.ru
# Введите Username / Password

# сборка образа из Dockerfile
docker image build -t registry.antroot.ru:5005/group1/project1:latest -&amp;lt;&amp;lt;EOF
FROM busybox
RUN echo &amp;quot;Hello from Busybox&amp;quot;
EOF

# копирование образа в registry
docker push registry.antroot.ru/group1/project1:latest

# запуск контейнера из образа
docker run registry.antroot.ru/group1/project1:latest&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;установка-gitlab-runner&quot;&gt;Установка GitLab Runner&lt;/h2&gt;
  &lt;p id=&quot;z7eJ&quot;&gt;Для установки сборщика нужно воспользоваться официальным репозиторием &lt;strong&gt;GitLab&lt;/strong&gt;, например для Debian 10 (Buster):&lt;/p&gt;
  &lt;pre id=&quot;4K24&quot; data-lang=&quot;bash&quot;&gt;# установка Docker
apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable&amp;quot; | tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io

# установка GitLab-Runner
curl -L &amp;quot;https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh&amp;quot; | bash -
apt update
apt install -y gitlab-runner&lt;/pre&gt;
  &lt;p id=&quot;HlM8&quot;&gt;После установки открыть в &lt;strong&gt;GitLab&lt;/strong&gt; раздел Admin Area / Runners - скопировать URL и Token, а затем на устанавливаемом раннере запустить регистрацию:&lt;/p&gt;
  &lt;pre id=&quot;M10z&quot; data-lang=&quot;bash&quot;&gt;gitlab-runner register&lt;/pre&gt;
  &lt;p id=&quot;pqEZ&quot;&gt;и ответить на вопросы:&lt;/p&gt;
  &lt;ul id=&quot;icM4&quot;&gt;
    &lt;li id=&quot;CHZn&quot;&gt;Gitlab URL: &lt;em&gt;https://gitlab.antroot.ru ;&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;NpKs&quot;&gt;Registration token: из раздела Admin / Runners;&lt;/li&gt;
    &lt;li id=&quot;tMLJ&quot;&gt;Description: описание, отображаемое в GitLab (gitlab-runner-1);&lt;/li&gt;
    &lt;li id=&quot;Sdmi&quot;&gt;Tags: теги, по которым можно назначать задания в CI (docker, intel, x86);&lt;/li&gt;
    &lt;li id=&quot;yrHs&quot;&gt;Executor: способ запуска, например docker;&lt;/li&gt;
    &lt;li id=&quot;FxuS&quot;&gt;Default image: образ по умолчанию: alpine:3.12.8&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;GACB&quot;&gt;Конфигурация &lt;code&gt;/etc/gitlab-runner/config.toml&lt;/code&gt;. Здесь в конфиг по умолчанию добавлены параметры:&lt;/p&gt;
  &lt;ul id=&quot;ZnuV&quot;&gt;
    &lt;li id=&quot;KpXu&quot;&gt;dns - установка своего DNS сервера;&lt;/li&gt;
    &lt;li id=&quot;Rpqj&quot;&gt;daemon.json - подключение конфигурации docker на раннере в запускаемый контейнер;&lt;/li&gt;
    &lt;li id=&quot;tHyW&quot;&gt;registry-mirror - подключение зеркала docker hub.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;6Ece&quot; data-lang=&quot;bash&quot;&gt;concurrent = 2
check_interval = 0
listen_address = &amp;quot;:9252&amp;quot;

[[runners]]
  name = &amp;quot;gitlab-runner-1&amp;quot;
  url = &amp;quot;https://gitlab.antroot.ru&amp;quot;
  token = &amp;quot;SomeHashedStringXJKSKFJS&amp;quot;
  executor = &amp;quot;docker&amp;quot;
  [runners.custom_build_dir]
  [runners.docker]
    dns = [&amp;quot;10.0.3.2&amp;quot;]
    pull_policy = [&amp;quot;always&amp;quot;, &amp;quot;if-not-present&amp;quot;]
    tls_verify = false
    image = &amp;quot;alpine:3.12.8&amp;quot;
    privileged = true
    disable_cache = false
    volumes = [&amp;quot;/var/run/docker.sock:/var/run/docker.sock&amp;quot;, &amp;quot;/cache&amp;quot;, &amp;quot;/certs/client&amp;quot;,&amp;quot;/etc/docker/daemon.json:/etc/docker/daemon.json:ro&amp;quot;]
    shm_size = 0
    [[runners.docker.services]]
      command = [&amp;quot;--registry-mirror&amp;quot;, &amp;quot;https://dockerhub.antroot.ru&amp;quot;]
  [runners.cache]
    Type = &amp;quot;s3&amp;quot;
    Shared = true
    [runners.cache.s3]
      ServerAddress = &amp;quot;s3.antroot.ru:9000&amp;quot;
      AccessKey = &amp;quot;minio&amp;quot;
      SecretKey = &amp;quot;S3SecretPass&amp;quot;
      BucketName = &amp;quot;runners&amp;quot;
      BucketLocation = &amp;quot;ru-east-1&amp;quot;
      Insecure = true&lt;/pre&gt;
  &lt;p id=&quot;QcQy&quot;&gt;Конфигурация &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;RXou&quot; data-lang=&quot;bash&quot;&gt;{
    &amp;quot;registry-mirrors&amp;quot;: [ &amp;quot;https://dockerhub.antroot.ru&amp;quot; ],
    &amp;quot;dns&amp;quot;: [&amp;quot;10.0.3.2&amp;quot;, &amp;quot;8.8.8.8&amp;quot;, &amp;quot;1.1.1.1&amp;quot;]
}&lt;/pre&gt;
  &lt;p id=&quot;WQgC&quot;&gt;После изменения конфиугурации &lt;strong&gt;gitlab-runner&lt;/strong&gt;, она должна автоматически подхватиться раннером. Перезапуск и просмотр состояния выполняется простыми командами:&lt;/p&gt;
  &lt;pre id=&quot;SFUz&quot; data-lang=&quot;bash&quot;&gt;gitlab-runner restart
gitlab-runner status&lt;/pre&gt;
  &lt;p id=&quot;jGqV&quot;&gt;В &lt;strong&gt;GitLab&lt;/strong&gt; в администрировании можно увидеть статус подключенного раннера.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;обновление-gitlab&quot;&gt;Обновление GitLab&lt;/h2&gt;
  &lt;p id=&quot;rr6e&quot;&gt;&lt;strong&gt;GitLab&lt;/strong&gt; обновляется очень просто!&lt;/p&gt;
  &lt;pre id=&quot;gF5x&quot; data-lang=&quot;bash&quot;&gt;apt update
apt install gitlab-ce&lt;/pre&gt;
  &lt;p id=&quot;75dg&quot;&gt;Обновление GPG ключа репозитория:&lt;/p&gt;
  &lt;pre id=&quot;eoys&quot; data-lang=&quot;bash&quot;&gt;curl -L https://packages.gitlab.com/gitlab/gitlab-ee/gpgkey | sudo apt-key add -&lt;/pre&gt;
  &lt;p id=&quot;0EoI&quot;&gt;Для обновления на специфичную версию, нужно выяснить номер версии и затем обновиться:&lt;/p&gt;
  &lt;pre id=&quot;YoSd&quot; data-lang=&quot;bash&quot;&gt;apt update
apt-cache policy gitlab-ce
apt install gitlab-ce=14.4.1-ce.0&lt;/pre&gt;
  &lt;p id=&quot;3dvp&quot;&gt;Версии &lt;strong&gt;GitLab&lt;/strong&gt; нумеруются так: &lt;strong&gt;XX.YY.ZZ&lt;/strong&gt;, где:&lt;/p&gt;
  &lt;ul id=&quot;mZ7U&quot;&gt;
    &lt;li id=&quot;5oQt&quot;&gt;XX - мажорная версия&lt;/li&gt;
    &lt;li id=&quot;qXqC&quot;&gt;YY - минор&lt;/li&gt;
    &lt;li id=&quot;lkTi&quot;&gt;ZZ - патч&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;4VxT&quot;&gt;Обновления без изменения минорной версии можно выполнять через любое количество патчей.&lt;br /&gt;&lt;strong&gt;Обновления минора лучше выполнить последовательно&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;YDWI&quot;&gt;Иногда после обновления &lt;strong&gt;GitLab&lt;/strong&gt; может не стартовать автоматически, тогда достаточно попробовать выполнить перезапуск:&lt;/p&gt;
  &lt;pre id=&quot;bSnT&quot; data-lang=&quot;bash&quot;&gt;gitlab-ctl restart&lt;/pre&gt;
  &lt;p id=&quot;e9Vg&quot;&gt;Если все ещё не работает, выполнить переконфигурацию:&lt;/p&gt;
  &lt;pre id=&quot;0RME&quot; data-lang=&quot;bash&quot;&gt;gitlab-ctl reconfigure
gitlab-ctl restart&lt;/pre&gt;
  &lt;p id=&quot;J7D9&quot;&gt;Также при обновлении через большое количество версий, или с большим количеством проектов внутри &lt;strong&gt;GitLab&lt;/strong&gt; возможны ошибки:&lt;/p&gt;
  &lt;ul id=&quot;868J&quot;&gt;
    &lt;li id=&quot;9uU7&quot;&gt;&lt;code&gt;TASK: gitlab tasks: top =&amp;gt; db:migrate&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;6gy1&quot;&gt;&lt;code&gt;Upgrade fails with &amp;quot;Error executing action &amp;#x27;run&amp;#x27; on resource &amp;#x27;bash[migrate gitlab-rails database]&amp;#x27;&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Nl2V&quot;&gt;это связано с ошибкой миграции данных при обновлении. Посмотреть состояние миграций можно так:&lt;/p&gt;
  &lt;pre id=&quot;4Fd1&quot; data-lang=&quot;bash&quot;&gt;gitlab-rake db:migrate:status&lt;/pre&gt;
  &lt;p id=&quot;RSDm&quot;&gt;на выходе появится длинный список миграций в состоянии &lt;strong&gt;up&lt;/strong&gt; - выполнена, &lt;strong&gt;down&lt;/strong&gt; - не выполнена. Запустить миграции вручную можно так:&lt;/p&gt;
  &lt;pre id=&quot;i4tO&quot; data-lang=&quot;bash&quot;&gt;gitlab-rake db:migrate&lt;/pre&gt;
  &lt;p id=&quot;zQXw&quot;&gt;После выполнения иногда может понадобиться завершить какую-нибудь миграцию блокирующую дальнейшие преобразования вручную, о чем будет выведено сообщение, например такое:&lt;/p&gt;
  &lt;pre id=&quot;8xgA&quot; data-lang=&quot;bash&quot;&gt;... run it manually
sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,taggings,id,&amp;#x27;[[&amp;quot;id&amp;quot;\, &amp;quot;taggable_id&amp;quot;]\, [&amp;quot;id_convert_to_bigint&amp;quot;\, &amp;quot;taggable_id_convert_to_bigint&amp;quot;]]&amp;#x27;]&lt;/pre&gt;
  &lt;p id=&quot;wt2F&quot;&gt;нужно выполнить это вручную, затем снова запустить миграции &lt;code&gt;gitlab-rake db:migrate&lt;/code&gt;, и так до победного, чтобы в выводе &lt;code&gt;gitlab-rake db:migrate:status&lt;/code&gt; все миграции были выполнены. Затем останется перезапустить &lt;strong&gt;gitlab&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;ByQD&quot; data-lang=&quot;bash&quot;&gt;gitlab-ctl restart&lt;/pre&gt;
  &lt;p id=&quot;9TH2&quot;&gt;Проверка состояния &lt;strong&gt;GitLab&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;DvW2&quot; data-lang=&quot;bash&quot;&gt;gitlab-rake gitlab:env:info
gitlab-rake gitlab:check&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;миграция-gitlab-на-другой-сервер&quot;&gt;Миграция GitLab на другой сервер&lt;/h2&gt;
  &lt;h3 id=&quot;gitlab-сервер-источник&quot;&gt;GitLab сервер - источник&lt;/h3&gt;
  &lt;p id=&quot;6ntT&quot;&gt;Убедиться, что все необходимые компоненты сохраняются в резервной копии в конфигурационном файле &lt;code&gt;/etc/gitlab/gitlab.rb&lt;/code&gt; - &lt;code&gt;SKIP&lt;/code&gt; определяет, какой компонент пропустить и не копировать:&lt;/p&gt;
  &lt;pre id=&quot;dRvn&quot; data-lang=&quot;bash&quot;&gt;#&amp;quot;SKIP&amp;quot; =&amp;gt; &amp;quot;db,uploads,repositories,builds,artifacts,lfs,registry,pages&amp;quot;
gitlab_rails[&amp;#x27;env&amp;#x27;] = {
    &amp;quot;SKIP&amp;quot; =&amp;gt; &amp;quot;uploads,builds,artifacts,lfs&amp;quot;
}&lt;/pre&gt;
  &lt;p id=&quot;ReXN&quot;&gt;Вначале нужно остановить сервер, чтобы сохранить целостность резервной копии:&lt;/p&gt;
  &lt;pre id=&quot;FeSL&quot; data-lang=&quot;bash&quot;&gt;gitlab-ctl stop unicorn
gitlab-ctl stop puma
gitlab-ctl stop sidekiq&lt;/pre&gt;
  &lt;p id=&quot;Ze68&quot;&gt;Сохранить конфигурацию и данные:&lt;/p&gt;
  &lt;pre id=&quot;vmae&quot; data-lang=&quot;bash&quot;&gt;gitlab-ctl backup-etc
# для версий до 12.1 включительно
gitlab-rake gitlab:backup:create
# для версий после 12.1
gitlab-backup create&lt;/pre&gt;
  &lt;p id=&quot;CByw&quot;&gt;Полученные файлы необходимо скопировать на новый сервер:&lt;/p&gt;
  &lt;ul id=&quot;Atyq&quot;&gt;
    &lt;li id=&quot;ResL&quot;&gt;&lt;code&gt;/etc/gitlab/config_backups/gitlab_config_&amp;lt;TIMESTAMP&amp;gt;_&amp;lt;DATE&amp;gt;.tar&lt;/code&gt; - архви с конфигурационными файлами &lt;code&gt;gitlab.rb&lt;/code&gt;, &lt;code&gt;config.json&lt;/code&gt;, &lt;code&gt;ssl&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;ajtG&quot;&gt;&lt;code&gt;/var/opt/gitlab/backups/&amp;lt;TIMESTAMP&amp;gt;_&amp;lt;DATE&amp;gt;_&amp;lt;VERSION&amp;gt;_gitlab_backup.tar&lt;/code&gt; - архив с данными&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;Koqc&quot; data-lang=&quot;bash&quot;&gt;scp /etc/gitlab/config_backups/* user@newserver.antroot.ru:~
scp /var/opt/gitlab/backups/* user@newserver.antroot.ru:~&lt;/pre&gt;
  &lt;h3 id=&quot;gitlab-сервер-приемник&quot;&gt;GitLab сервер - приемник&lt;/h3&gt;
  &lt;p id=&quot;Sdza&quot;&gt;Установить &lt;strong&gt;GitLab&lt;/strong&gt; такой же версии, что исходный сервер, согласно инструкции по Установке GitLab (описано выше)&lt;/p&gt;
  &lt;pre id=&quot;gLNY&quot; data-lang=&quot;bash&quot;&gt;apt install gitlab-ce=14.4.1-ce.0&lt;/pre&gt;
  &lt;p id=&quot;jFxF&quot;&gt;Распаковать архив конфигурационных файлов в &lt;code&gt;/etc/gitlab&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;v1iu&quot; data-lang=&quot;bash&quot;&gt;tar zxvf ~/config_backups/gitlab_config_&amp;lt;TIMESTAMP&amp;gt;_&amp;lt;DATE&amp;gt;.tar -C /&lt;/pre&gt;
  &lt;p id=&quot;DpJr&quot;&gt;Скопировать архив данных в директорию с резервными копиями:&lt;/p&gt;
  &lt;pre id=&quot;oN92&quot; data-lang=&quot;bash&quot;&gt;scp ~/&amp;lt;TIMESTAMP&amp;gt;_&amp;lt;DATE&amp;gt;_gitlab_backup.tar /var/opt/gitlab/backups/
chown -R git:git /var/opt/gitlab/backups/&lt;/pre&gt;
  &lt;p id=&quot;MUcZ&quot;&gt;Поправить значения в конфигурации &lt;code&gt;/etc/gitlab/gitlab.rb&lt;/code&gt; при необходимости (например, указать новый URL):&lt;/p&gt;
  &lt;pre id=&quot;7vsf&quot; data-lang=&quot;bash&quot;&gt;gitlab-ctl reconfigure
gitlab-ctl restart&lt;/pre&gt;
  &lt;p id=&quot;At0U&quot;&gt;Остановить сервисы, использующие PostgreSQL:&lt;/p&gt;
  &lt;pre id=&quot;Y6y3&quot; data-lang=&quot;bash&quot;&gt;gitlab-ctl stop unicorn
gitlab-ctl stop puma
gitlab-ctl stop sidekiq&lt;/pre&gt;
  &lt;p id=&quot;GXb1&quot;&gt;Восстановить архив:&lt;/p&gt;
  &lt;pre id=&quot;yxYF&quot; data-lang=&quot;bash&quot;&gt;# для версий до 12.1 включительно
gitlab-rake gitlab:backup:restore BACKUP=&amp;lt;TIMESTAMP&amp;gt;_&amp;lt;DATE&amp;gt;_&amp;lt;VERSION&amp;gt;
# для версий после 12.1
gitlab-backup restore BACKUP=&amp;lt;TIMESTAMP&amp;gt;_&amp;lt;DATE&amp;gt;_&amp;lt;VERSION&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;C2vT&quot;&gt;Запустить &lt;strong&gt;GitLab&lt;/strong&gt; и выполнить проверку:&lt;/p&gt;
  &lt;pre id=&quot;xLMn&quot; data-lang=&quot;bash&quot;&gt;gitlab-ctl start
gitlab-rake gitlab:check SANITIZE=true&lt;/pre&gt;
  &lt;tt-tags id=&quot;8LDS&quot;&gt;
    &lt;tt-tag name=&quot;gitlab&quot;&gt;#gitlab&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;git&quot;&gt;#git&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;linux&quot;&gt;#linux&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;sysadmin&quot;&gt;#sysadmin&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>antroot:mongodb</id><link rel="alternate" type="text/html" href="https://306.antroot.ru/mongodb?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=antroot"></link><title>Установка MongoDB</title><published>2025-06-02T15:31:49.808Z</published><updated>2025-06-02T15:31:49.808Z</updated><category term="sysadmin" label="Sysadmin"></category><tt:hashtag>mongodb</tt:hashtag><tt:hashtag>linux</tt:hashtag><tt:hashtag>sysadmin</tt:hashtag><summary type="html">Установка NoSQL хранилища MongoDB</summary><content type="html">
  &lt;p id=&quot;xBUw&quot;&gt;Установка NoSQL хранилища MongoDB&lt;/p&gt;
  &lt;pre id=&quot;r55Z&quot; data-lang=&quot;bash&quot;&gt;apt -y install gnupg2
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | apt-key add -
echo &amp;quot;deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main&amp;quot; | tee /etc/apt/sources.list.d/mongodb-org.list
apt install mongodb&lt;/pre&gt;
  &lt;p id=&quot;y5ze&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;3Fei&quot;&gt;&lt;strong&gt;Включить доступ по сети к MongoDB&lt;/strong&gt;&lt;br /&gt;Доступ по сети определяется интерфейсами, которые слушает MongoDB, для этого в файле &lt;code&gt;/etc/mongod.conf&lt;/code&gt; добавляем IP адрес (замените &amp;lt;your_server_ip_address&amp;gt; IP адресом своего сервера MongoDB):&lt;/p&gt;
  &lt;pre id=&quot;XbCP&quot; data-lang=&quot;bash&quot;&gt;# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,&amp;lt;your_server_ip_address&amp;gt;
  
&lt;/pre&gt;
  &lt;p id=&quot;VuVT&quot;&gt;после чего нужно &lt;strong&gt;перезапустить MongoDB&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;zsjs&quot; data-lang=&quot;bash&quot;&gt;systemctl restart mongod&lt;/pre&gt;
  &lt;p id=&quot;LWUS&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;sH6F&quot;&gt;&lt;strong&gt;Зайти в CLI MongoDB&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;K6xB&quot; data-lang=&quot;bash&quot;&gt;mongo
mongo -u root -p &amp;lt;password&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;JdmO&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;kzLF&quot;&gt;&lt;strong&gt;Посмотреть список баз данных MongoDB&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;S0qD&quot; data-lang=&quot;bash&quot;&gt;show dbs&lt;/pre&gt;
  &lt;p id=&quot;Tl3T&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;bung&quot;&gt;&lt;strong&gt;Подключиться к&lt;/strong&gt; выбранной &lt;strong&gt;базе данных&lt;/strong&gt; &amp;lt;database_name&amp;gt; в MongoDB или создать ее, если не существует&lt;/p&gt;
  &lt;pre id=&quot;x9LK&quot; data-lang=&quot;bash&quot;&gt;use database_name&lt;/pre&gt;
  &lt;p id=&quot;88Pt&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;hoSI&quot;&gt;&lt;strong&gt;Создать пользователя&lt;/strong&gt; &amp;lt;database_user&amp;gt; для базы данных &amp;lt;database_name&amp;gt;&lt;/p&gt;
  &lt;pre id=&quot;dHq9&quot; data-lang=&quot;bash&quot;&gt;use database_name
db.createUser(
  {
    user: &amp;quot;database_user&amp;quot;,
    pwd: &amp;quot;SecretPassword,
    roles: [
      { role: &amp;quot;readWrite&amp;quot;, db: &amp;quot;database_name&amp;quot; }
    ]
  }
)&lt;/pre&gt;
  &lt;p id=&quot;Xv95&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;AVI4&quot;&gt;&lt;strong&gt;Посмотреть список коллекций&lt;/strong&gt; в выбранной базе данных MongoDB&lt;/p&gt;
  &lt;pre id=&quot;ER0d&quot; data-lang=&quot;bash&quot;&gt;show collections&lt;/pre&gt;
  &lt;p id=&quot;kBdZ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;yxvc&quot;&gt;&lt;strong&gt;Посмотреть список пользователей&lt;/strong&gt; базы данных MongoDB&lt;/p&gt;
  &lt;pre id=&quot;J3sU&quot; data-lang=&quot;bash&quot;&gt;show users&lt;/pre&gt;
  &lt;p id=&quot;aBUz&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;9mkP&quot;&gt;&lt;strong&gt;Создать пользователя&lt;/strong&gt; базы данных MongoDB&lt;/p&gt;
  &lt;pre id=&quot;Q9my&quot; data-lang=&quot;bash&quot;&gt;db.createUser({user:&amp;#x27;username&amp;#x27;, pwd:&amp;#x27;SecretPassword&amp;#x27;, roles:[&amp;quot;readWrite&amp;quot;]})&lt;/pre&gt;
  &lt;p id=&quot;yB9w&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;безопасность-в-mongodb&quot;&gt;Безопасность в MongoDB&lt;/h2&gt;
  &lt;p id=&quot;OHZR&quot;&gt;Для включения авторизации доступа к MongoDB нужно добавить суперпользователя и запустить демона MongoDB с ключом &lt;code&gt;--auth&lt;/code&gt;&lt;br /&gt;Подключиться к MongoDB CLI&lt;/p&gt;
  &lt;pre id=&quot;JrYp&quot; data-lang=&quot;bash&quot;&gt;mongo&lt;/pre&gt;
  &lt;p id=&quot;sX2K&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;zcIE&quot;&gt;&lt;strong&gt;Выполнить&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;vJDW&quot; data-lang=&quot;bash&quot;&gt;use admin
db.createUser(
  {
    user: “superuser”,
    pwd: “SecretPassword”,
    roles: [ “root” ]
  }
)&lt;/pre&gt;
  &lt;p id=&quot;4Xng&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;PAzM&quot;&gt;&lt;strong&gt;Проверить&lt;/strong&gt;, что пользователь создан&lt;/p&gt;
  &lt;pre id=&quot;y14a&quot; data-lang=&quot;bash&quot;&gt;show users&lt;/pre&gt;
  &lt;p id=&quot;tDjU&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;nTX5&quot;&gt;&lt;strong&gt;Выключить сервер&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;XTh6&quot; data-lang=&quot;bash&quot;&gt;db.shutdownServer()
exit&lt;/pre&gt;
  &lt;p id=&quot;w3dV&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;2R9V&quot;&gt;и &lt;strong&gt;запустить демона&lt;/strong&gt; MongoDB&lt;/p&gt;
  &lt;pre id=&quot;CeSg&quot; data-lang=&quot;bash&quot;&gt;mongod --auth&lt;/pre&gt;
  &lt;p id=&quot;Re6h&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;Gvu3&quot;&gt;
    &lt;tt-tag name=&quot;mongodb&quot;&gt;#mongodb&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;linux&quot;&gt;#linux&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;sysadmin&quot;&gt;#sysadmin&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>antroot:gunicorn</id><link rel="alternate" type="text/html" href="https://306.antroot.ru/gunicorn?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=antroot"></link><title>Установка Gunicorn</title><published>2025-05-28T06:02:22.806Z</published><updated>2025-05-28T06:02:22.806Z</updated><category term="sysadmin" label="Sysadmin"></category><tt:hashtag>gunicorn</tt:hashtag><tt:hashtag>python</tt:hashtag><tt:hashtag>linux</tt:hashtag><tt:hashtag>sysadmin</tt:hashtag><summary type="html">Gunicorn (green unicorn) - это WSGI сервер для запуска web-приложений, написанных на языке Python.</summary><content type="html">
  &lt;p id=&quot;UC3w&quot;&gt;&lt;strong&gt;Gunicorn &lt;/strong&gt;(green unicorn) - это WSGI сервер для запуска web-приложений, написанных на языке Python.&lt;/p&gt;
  &lt;pre id=&quot;ZEm4&quot;&gt;apt update&lt;/pre&gt;
  &lt;p id=&quot;p7Z5&quot;&gt;&lt;strong&gt;Создать виртуальное окружение для Python 2&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;cqZB&quot;&gt;apt install python python-pip python-dev
cd /srv/www/antroot
pip install virtualenv
virtualenv antroot&lt;/pre&gt;
  &lt;p id=&quot;pCv8&quot;&gt;&lt;strong&gt;Создать виртуальное окружение для Python 3&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;bhXC&quot; data-lang=&quot;bash&quot;&gt;apt install python3.5 python3-pip python3-dev python3-venv
cd /srv/www/antroot
pip3 install virtualenv
python3 -m venv antroot&lt;/pre&gt;
  &lt;p id=&quot;66zR&quot;&gt;&lt;strong&gt;Установить gunicorn&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;BjxK&quot;&gt;source antroot/bin/activate
pip install gunicorn
pip install -r requirements.txt&lt;/pre&gt;
  &lt;p id=&quot;h7S3&quot;&gt;&lt;strong&gt;Отключить виртуальное окружение&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;zo8q&quot; data-lang=&quot;bash&quot;&gt;deactivate&lt;/pre&gt;
  &lt;p id=&quot;IOG9&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;запуск-приложения-через-systemd&quot;&gt;Запуск приложения через systemd&lt;/h2&gt;
  &lt;p id=&quot;IMOw&quot;&gt;Для запуска в &lt;code&gt;/etc/systemd/system&lt;/code&gt; нужно создать единицу запуска:&lt;/p&gt;
  &lt;pre id=&quot;6Icl&quot; data-lang=&quot;bash&quot;&gt;[Unit]
Description=Gunicorn antroot Web server
After=network.target

[Service]
EnvironmentFile=-/srv/www/antroot/.env
ExecStart=/srv/www/antroot/bin/gunicorn --config /srv/www/antroot/gunicorn_config.py antroot:app
ExecReload=/bin/kill -9 $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify

[Install]
WantedBy=multi-user.target
Alias=antroot.service&lt;/pre&gt;
  &lt;p id=&quot;Ai8p&quot;&gt;&lt;strong&gt;Включить и запустить&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;sTF4&quot;&gt;systemctl daemon-reload
systemctl enable antroot
systemctl start antroot&lt;/pre&gt;
  &lt;p id=&quot;y5ga&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;6gO7&quot;&gt;
    &lt;tt-tag name=&quot;gunicorn&quot;&gt;#gunicorn&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;python&quot;&gt;#python&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;linux&quot;&gt;#linux&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;sysadmin&quot;&gt;#sysadmin&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>antroot:haproxy</id><link rel="alternate" type="text/html" href="https://306.antroot.ru/haproxy?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=antroot"></link><title>Установка прокси-сервера и балансировщика HAProxy</title><published>2025-05-27T13:02:30.915Z</published><updated>2025-05-27T13:03:31.854Z</updated><category term="sysadmin" label="Sysadmin"></category><tt:hashtag>haproxy</tt:hashtag><tt:hashtag>linux</tt:hashtag><tt:hashtag>sysadmin</tt:hashtag><summary type="html">Предположим, что у нас есть один белый IP-адрес, на который нужно навесить различные сервисы.
Идеальный вариант для этого - использование обратного прокси-сервера, например чуть ранее был описан способ virtual host на Nginx</summary><content type="html">
  &lt;p id=&quot;OSqS&quot;&gt;Предположим, что у нас есть один белый IP-адрес, на который нужно навесить различные сервисы.&lt;br /&gt;Идеальный вариант для этого - использование обратного прокси-сервера, например чуть ранее был описан способ &lt;strong&gt;virtual host&lt;/strong&gt; на &lt;a href=&quot;https://306.antroot.ru/nginx&quot; target=&quot;_blank&quot;&gt;Nginx&lt;/a&gt;&lt;/p&gt;
  &lt;h2 id=&quot;установка-haproxy&quot;&gt;Установка HAProxy&lt;/h2&gt;
  &lt;p id=&quot;dswG&quot;&gt;Чаще всего &lt;strong&gt;HAProxy&lt;/strong&gt; уже находится в стандартном репозитории:&lt;/p&gt;
  &lt;pre id=&quot;ARmS&quot; data-lang=&quot;bash&quot;&gt;apt install -y haproxy
mv /etc/haproxy/haproxy.conf{,.orig}&lt;/pre&gt;
  &lt;p id=&quot;Vrbf&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;xeF4&quot;&gt;Например настроим &lt;strong&gt;haproxy&lt;/strong&gt; для перенаправления всего трафика http (80) и https (443) на виртуальную машину &lt;strong&gt;router&lt;/strong&gt;, предварительно настроенную для маршрутизации, например в гипервизоре Proxmox VE, с выдачей IP адреса по &lt;a href=&quot;https://306.antroot.ru/dhcp&quot; target=&quot;_blank&quot;&gt;DHCP&lt;/a&gt; и регистрацией в &lt;a href=&quot;https://306.antroot.ru/ddns-dhcp&quot; target=&quot;_blank&quot;&gt;DNS&lt;/a&gt;, с настроенным &lt;a href=&quot;https://306.antroot.ru/nginx&quot; target=&quot;_blank&quot;&gt;Nginx&lt;/a&gt; и виртуальными хостами.&lt;/p&gt;
  &lt;p id=&quot;ii8s&quot;&gt;&lt;strong&gt;haproxy.conf - simple&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;pJ7e&quot; data-lang=&quot;bash&quot;&gt;global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon
defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        option forwardfor
        #option http-server-close
        timeout connect 10s
        timeout client  60s
        timeout server  60s

        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

listen stats
        stats enable
        mode http
        bind :7000
        stats realm      Haproxy\ Statistics
        stats auth someuser:somepassword
        stats uri /haproxystats
        stats refresh    30s

frontend http_bind
        bind *:80
        mode tcp
        option tcplog
        default_backend router_http

frontend https_bind
        bind *:443
        mode tcp
        option tcplog
        default_backend router_https

backend router_http
        mode tcp
        balance leastconn
        option httpclose
        option forwardfor
        server router_server router.antroot.lan:80
        server router_server router2.antroot.lan:80

backend router_https
        mode tcp
        server router_server router.antroot.lan:443&lt;/pre&gt;
  &lt;p id=&quot;YbfK&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;DbKh&quot;&gt;Добавим немного логики в &lt;strong&gt;haproxy&lt;/strong&gt;, чтобы убрать из цепочки &lt;strong&gt;nginx&lt;/strong&gt;.&lt;br /&gt;Включим виртуальные хосты, перенаправим http-трафик на порт 80 соответствующих виртуальных машин, а https-трафик перенаправим на четвертом уровне сетевой модели по TCP, чтобы не пришлось устанавливать SSL-сертификаты на &lt;strong&gt;haproxy&lt;/strong&gt;. Также это полезно, если в качестве конечного пункта выступает ingress кластера Kubernetes:&lt;/p&gt;
  &lt;p id=&quot;i0f1&quot;&gt;&lt;strong&gt;haproxy.conf - ssl passthrough&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;OtN2&quot; data-lang=&quot;bash&quot;&gt;global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 10s
        timeout client  60s
        timeout server  60s
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

frontend http_in
        mode http
        option httplog
        bind *:80
        option forwardfor
        acl host_pve hdr(host) -i pve.antroot.ru
        acl host_git hdr(host) -i gitlab.antroot.ru
        acl host_wik hdr(host) -i wiki.antroot.ru
        acl host_k8s hdr(host) -i k8s.antroot.ru
        use_backend http_pve if host_pve
        use_backend http_git if host_git
        use_backend http_wik if host_wik
        use_backend http_k8s if host_k8s

backend http_pve
        mode http
        option httplog
        option forwardfor
        server pve pve.antroot.lan:80
backend http_git
        server git gitlab.antroot.lan:80
backend http_wik
        server wiki wiki.antroot.lan:80
backend http_k8s
        server k8s k8s.antroot.lan:80

frontend https_in
        mode tcp
        option tcplog
        option ssl-hello-chk # !
        bind *:443
        acl tls req.ssl_hello_type 1
        tcp-request inspect-delay 5s
        tcp-request content accept if tls
        #tcp-request content accept if { req.ssl_hello_type 1 }

        acl host_pve hdr(host) req.ssl_sni -i pve.antroot.ru
        acl host_git hdr(host) req.ssl_sni -i gitlab.antroot.ru
        acl host_wik hdr(host) req.ssl_sni -i wiki.antroot.ru
        acl host_k8s hdr(host) req.ssl_sni -i k8s.antroot.ru
        use_backend https_pve if host_pve
        use_backend https_git if host_git
        use_backend https_wik if host_wik
        use_backend https_k8s if host_k8s

backend https_pve
        mode tcp
        option tcplog
        option ssl-hello-chk
        server pve pve.antroot.lan:443
backend https_git
        server git gitlab.antroot.lan:443
backend https_wik
        server wiki wiki.antroot.lan:443
backend https_k8s
        mode tcp
        balance source # source leastconn roundrobin
        server k8s1 k8s1.antroot.lan:443 check ssl verify none fall 3 rise 2
        server k8s2 k8s2.antroot.lan:443 check ssl verify none fall 3 rise 2&lt;/pre&gt;
  &lt;p id=&quot;eYUA&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;xJhn&quot;&gt;
    &lt;tt-tag name=&quot;haproxy&quot;&gt;#haproxy&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;linux&quot;&gt;#linux&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;sysadmin&quot;&gt;#sysadmin&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>antroot:ufw</id><link rel="alternate" type="text/html" href="https://306.antroot.ru/ufw?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=antroot"></link><title>Настройка брандмауэра UFW в Ubuntu Linux</title><published>2025-05-26T06:17:14.316Z</published><updated>2025-05-26T06:17:14.316Z</updated><category term="sysadmin" label="Sysadmin"></category><tt:hashtag>ufw</tt:hashtag><tt:hashtag>firewall</tt:hashtag><tt:hashtag>ubuntu</tt:hashtag><tt:hashtag>linux</tt:hashtag><tt:hashtag>sysadmin</tt:hashtag><summary type="html">В Ubuntu Linux средством настройки файервола является UFW</summary><content type="html">
  &lt;p id=&quot;AUeP&quot;&gt;В Ubuntu Linux средством настройки файервола является UFW&lt;/p&gt;
  &lt;p id=&quot;07aw&quot;&gt;&lt;strong&gt;Посмотреть статус файервола&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;1T9K&quot; data-lang=&quot;bash&quot;&gt;ufw status
ufw status verbose&lt;/pre&gt;
  &lt;p id=&quot;VLCj&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;qmvP&quot;&gt;&lt;strong&gt;Получить список всех правил с номерами и удалить правило с номером&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;oygK&quot; data-lang=&quot;bash&quot;&gt;ufw status numbered
ufw delete &amp;lt;number&amp;gt;
ufw delete allow ssh&lt;/pre&gt;
  &lt;p id=&quot;7u1R&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;mQqT&quot;&gt;&lt;strong&gt;Установить политику по умолчанию&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;SBha&quot; data-lang=&quot;bash&quot;&gt;ufw default deny incoming
ufw default allow outgoing
ufw default allow routed&lt;/pre&gt;
  &lt;p id=&quot;9xX1&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;63UW&quot;&gt;&lt;strong&gt;Разрешить подключение по SSH только с IP адреса 10.20.30.40&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;94UO&quot; data-lang=&quot;bash&quot;&gt;ufw allow from 10.20.30.40 to any port 22&lt;/pre&gt;
  &lt;p id=&quot;BMYy&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;dfQ3&quot;&gt;&lt;strong&gt;Разрешить подключения на порты http и https&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;5Jlx&quot; data-lang=&quot;bash&quot;&gt;ufw allow http
ufw allow https&lt;/pre&gt;
  &lt;p id=&quot;y33y&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;uBiw&quot;&gt;&lt;strong&gt;Включить файервол UFW&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;9OdK&quot; data-lang=&quot;bash&quot;&gt;ufw enable&lt;/pre&gt;
  &lt;p id=&quot;ucqv&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;pvwH&quot;&gt;&lt;strong&gt;Сброс и отключение UFW&lt;/strong&gt;:&lt;/p&gt;
  &lt;pre id=&quot;Tzxb&quot; data-lang=&quot;bash&quot;&gt;ufw reset
ufw disable&lt;/pre&gt;
  &lt;p id=&quot;XE3e&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;B6iz&quot;&gt;
    &lt;tt-tag name=&quot;ufw&quot;&gt;#ufw&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;firewall&quot;&gt;#firewall&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;ubuntu&quot;&gt;#ubuntu&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;linux&quot;&gt;#linux&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;sysadmin&quot;&gt;#sysadmin&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>antroot:iptables</id><link rel="alternate" type="text/html" href="https://306.antroot.ru/iptables?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=antroot"></link><title>Настройка брандмауэра через iptables в Debian/Ubuntu Linux</title><published>2025-05-23T06:28:56.137Z</published><updated>2025-05-23T06:28:56.137Z</updated><category term="sysadmin" label="Sysadmin"></category><tt:hashtag>firewall</tt:hashtag><tt:hashtag>iptables</tt:hashtag><tt:hashtag>linux</tt:hashtag><tt:hashtag>sysadmin</tt:hashtag><summary type="html">Брандмауэр в Debian Linux обычно настраивается при помощи правил iptables.
Посмотреть текущее состояние файерволла:</summary><content type="html">
  &lt;p id=&quot;wRAI&quot;&gt;Брандмауэр в Debian Linux обычно настраивается при помощи правил &lt;code&gt;iptables&lt;/code&gt;.&lt;br /&gt;Посмотреть текущее состояние файерволла:&lt;/p&gt;
  &lt;pre id=&quot;oycM&quot; data-lang=&quot;bash&quot;&gt;iptables -L -n&lt;/pre&gt;
  &lt;p id=&quot;zvBd&quot;&gt;Например, добавить правила для почтового сервера:&lt;/p&gt;
  &lt;pre id=&quot;H5PH&quot; data-lang=&quot;bash&quot;&gt;iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
bash -c &amp;#x27;iptables-save &amp;gt; /etc/iptables/rules.v4&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;N3bd&quot;&gt;Для сохранения правил после перезагрузки понадобится пакет &lt;code&gt;iptables-persistent&lt;/code&gt;, после установки пакета будет задан вопрос о сохранении текущей конфигурации файерволла:&lt;/p&gt;
  &lt;pre id=&quot;j83s&quot; data-lang=&quot;bash&quot;&gt;apt install -y iptables-persistent&lt;/pre&gt;
  &lt;p id=&quot;LhEu&quot;&gt;После добавления своих правил нужно обновить содержимое таблиц &lt;strong&gt;iptables&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;J5Ez&quot; data-lang=&quot;bash&quot;&gt;bash -c &amp;#x27;iptables-save &amp;gt; /etc/iptables/rules.v4&amp;#x27;&lt;/pre&gt;
  &lt;p id=&quot;lACp&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;68z6&quot;&gt;
    &lt;tt-tag name=&quot;firewall&quot;&gt;#firewall&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;iptables&quot;&gt;#iptables&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;linux&quot;&gt;#linux&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;sysadmin&quot;&gt;#sysadmin&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>antroot:ddns-dhcp</id><link rel="alternate" type="text/html" href="https://306.antroot.ru/ddns-dhcp?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=antroot"></link><title>Настройка DHCP сервера с динамически обновляемым сервером DNS</title><published>2025-05-22T12:29:43.546Z</published><updated>2025-05-22T12:29:43.546Z</updated><category term="sysadmin" label="Sysadmin"></category><tt:hashtag>dns</tt:hashtag><tt:hashtag>dhcp</tt:hashtag><tt:hashtag>linux</tt:hashtag><tt:hashtag>sysadmin</tt:hashtag><summary type="html">Сервер DNS занимается преобразованиями доменных имен в IP адрес и наоборот.
Сервер DHCP в сети занимается выдачей IP адресов устройствам. Одновременно с выдачей адресов, он может обновить данные в DNS, обновив данные о появившемся в сети устройстве.</summary><content type="html">
  &lt;p id=&quot;9BVq&quot;&gt;&lt;strong&gt;Сервер DNS&lt;/strong&gt; занимается преобразованиями доменных имен в IP адрес и наоборот.&lt;br /&gt;&lt;strong&gt;Сервер DHCP&lt;/strong&gt; в сети занимается выдачей IP адресов устройствам. Одновременно с выдачей адресов, он может обновить данные в DNS, обновив данные о появившемся в сети устройстве.&lt;/p&gt;
  &lt;h2 id=&quot;установка-dhcp&quot;&gt;Установка DHCP&lt;/h2&gt;
  &lt;p id=&quot;ntpA&quot;&gt;Этот пакет скорее всего один из старейших резидентов всевозможных репозиториев. Устанавливаем из стандартного:&lt;/p&gt;
  &lt;pre id=&quot;mkUj&quot; data-lang=&quot;bash&quot;&gt;apt install isc-dhcp-server bind9utils&lt;/pre&gt;
  &lt;p id=&quot;u4aa&quot;&gt;Включить в файле &lt;code&gt;/etc/default/isc-dhcp-server&lt;/code&gt; интерфейсы для прослушивания:&lt;/p&gt;
  &lt;pre id=&quot;RzFW&quot; data-lang=&quot;bash&quot;&gt;INTERFACESv4=&amp;quot;ens18,eth0,vlan3&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;DW9x&quot;&gt;Основной конфигурационный файл &lt;code&gt;/etc/dhcp/dhcpd.conf&lt;/code&gt;,&lt;/p&gt;
  &lt;pre id=&quot;1rKg&quot; data-lang=&quot;bash&quot;&gt;option domain-name &amp;quot;antroot.ru&amp;quot;;
option domain-name-servers 10.0.2.2, 10.0.2.3;
authoritative;
subnet 10.0.1.0 netmask 255.255.255.0 {
}
subnet 10.0.2.0 netmask 255.255.255.0 {
}
subnet 10.0.3.0 netmask 255.255.255.0 {
    range 10.0.3.50 10.0.3.99;
    option subnet-mask 255.255.255.0;
    option routers 10.0.3.2;
    option ntp-servers 10.0.3.2;
    option domain-name-servers 10.0.3.2;
    option domain-name &amp;quot;antroot.lan&amp;quot;;
    ddns-domainname &amp;quot;antroot.lan&amp;quot;;
    default-lease-time 300;
    max-lease-time 600;
}&lt;/pre&gt;
  &lt;p id=&quot;KjCH&quot;&gt;Немного тюнинга:&lt;/p&gt;
  &lt;pre id=&quot;TOrp&quot; data-lang=&quot;bash&quot;&gt;authoritative;
allow declines;
update-conflict-detection false;
update-optimization on;
update-static-leases off;&lt;/pre&gt;
  &lt;p id=&quot;DILJ&quot;&gt;Запуск &lt;strong&gt;isc-dhcp-server&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;KtNP&quot; data-lang=&quot;bash&quot;&gt;systemctl start isc-dhcp-server
systemctl enable isc-dhcp-server
systemctl status isc-dhcp-server&lt;/pre&gt;
  &lt;p id=&quot;TV1j&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;настройка-обновления-dns-из-dhcp&quot;&gt;Настройка обновления DNS из DHCP&lt;/h3&gt;
  &lt;p id=&quot;idK4&quot;&gt;Включить обновление сервера DNS в &lt;code&gt;dhcpd.conf&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;PLFN&quot; data-lang=&quot;bash&quot;&gt;ddns-update-style interim;
ddns-domainname &amp;quot;antroot.lan&amp;quot;;
allow declines;&lt;/pre&gt;
  &lt;p id=&quot;5k7F&quot;&gt;Сгенерировать секретные ключи:&lt;/p&gt;
  &lt;ul id=&quot;pa2U&quot;&gt;
    &lt;li id=&quot;ULo7&quot;&gt;&lt;code&gt;DHCP_UPDATER&lt;/code&gt; - для обновления DNS;&lt;/li&gt;
    &lt;li id=&quot;j50y&quot;&gt;&lt;code&gt;dhcp_omapi&lt;/code&gt; - для взаимодействия между репликами DHCP сервера.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;hE00&quot; data-lang=&quot;bash&quot;&gt;dnssec-keygen -a HMAC-MD5 -b 512 -n USER DHCP_UPDATER
dnssec-keygen -a HMAC-MD5 -b 512 -n USER DHCP_OMAPI
cat Kdhcp_updater.+*.private | grep ^Key | cut -d &amp;#x27; &amp;#x27; -f2-
cat Kdhcp_omapi.+*.private   | grep ^Key | cut -d &amp;#x27; &amp;#x27; -f2-&lt;/pre&gt;
  &lt;p id=&quot;wNhS&quot;&gt;и добавить в конфигурационный файл dhcpd.conf под псевдонимом &lt;code&gt;DHCP_UPDATER&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;GF32&quot; data-lang=&quot;bash&quot;&gt;key DHCP_UPDATER {
     algorithm HMAC-MD5.SIG-ALG.REG.INT;
     secret S2RoX3bfdXXkYgRlco4rMMM3KzU4MzkwCg==;
}
key dhcp_omapi {
     algorithm hmac-md5;
     secret S2RoBEXfb21hexDFdf5K3zE1NyswMDA2Mgo=;
}&lt;/pre&gt;
  &lt;p id=&quot;zZQT&quot;&gt;Для включения режима failover понадобится указать порт OMAPI. OMAPI протокол используется, чтобы определять и изменять состояние DHCP сервера.&lt;/p&gt;
  &lt;pre id=&quot;gDAE&quot; data-lang=&quot;bash&quot;&gt;omapi-port 7911;
omapi-key dhcp_omapi;&lt;/pre&gt;
  &lt;p id=&quot;BNUD&quot;&gt;Указать зоны, которые необходимо обновлять в &lt;code&gt;dhcpd.conf&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;K1CF&quot; data-lang=&quot;bash&quot;&gt;zone antroot.lan. {
    primary 10.0.3.2;
    secondary 10.0.3.3;
    key DHCP_UPDATER;
}
zone 3.0.10.in-addr.arpa. {
    primary 10.0.3.2;
    secondary 10.0.3.3;
    key DHCP_UPDATER;
}&lt;/pre&gt;
  &lt;p id=&quot;iJjm&quot;&gt;Добавить резервный DHCP сервер (опционально)&lt;/p&gt;
  &lt;pre id=&quot;NJQV&quot; data-lang=&quot;bash&quot;&gt;failover peer &amp;quot;failover-partner&amp;quot; {
     primary;
     address 10.0.1.2;
     port 519;
     peer address 10.0.1.3;
     peer port 520;
     max-response-delay 60;
     max-unacked-updates 10;
     mclt 3600;
     split 128;
     load balance max seconds 3;
}&lt;/pre&gt;
  &lt;p id=&quot;qy0O&quot;&gt;и указать в подсети &lt;code&gt;pool&lt;/code&gt;, который должен реплицироваться:&lt;/p&gt;
  &lt;pre id=&quot;3gq9&quot; data-lang=&quot;bash&quot;&gt;subnet 10.0.3.0 netmask 255.255.255.0 {
    pool {
        failover peer &amp;quot;failover-partner&amp;quot;;
        range 10.0.3.50 10.0.3.99;
        option subnet-mask 255.255.255.0;
        option routers 10.0.3.2;
        option domain-name-servers 10.0.3.2;
        option domain-name &amp;quot;antroot.lan&amp;quot;;
        ddns-domainname &amp;quot;antroot.lan&amp;quot;;
    }
}&lt;/pre&gt;
  &lt;p id=&quot;9n7D&quot;&gt;На резервном DHCP сервере все то же самое, за исключением&lt;/p&gt;
  &lt;pre id=&quot;36Eo&quot; data-lang=&quot;bash&quot;&gt;failover peer &amp;quot;failover-partner&amp;quot; {
     secondary;
     address 10.0.1.3;
     port 520;
     peer address 10.0.1.2;
     peer port 519;
     max-response-delay 60;
     max-unacked-updates 10;
     load balance max seconds 3;
}&lt;/pre&gt;
  &lt;p id=&quot;LNcl&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;установка-dns-сервера&quot;&gt;Установка DNS сервера&lt;/h2&gt;
  &lt;p id=&quot;FN6r&quot;&gt;Сервер DNS (Domain Name Services - сервис доменных имен) предназначен для преобразования доменных имен в IP адрес (прямое преобразование) и обратно (обратное преобразование, reverse DNS).&lt;br /&gt;Этот пакет также является основополагающим, и присутствует во всяческих репозиториях.&lt;br /&gt;Установка производится стандартным образом:&lt;/p&gt;
  &lt;pre id=&quot;Rf1N&quot; data-lang=&quot;bash&quot;&gt;apt install -y bind9&lt;/pre&gt;
  &lt;p id=&quot;8cd8&quot;&gt;Стандартными для Debian/Ubuntu Linux расположениями файлов Bind9 являются&lt;/p&gt;
  &lt;ul id=&quot;9H85&quot;&gt;
    &lt;li id=&quot;Ikwe&quot;&gt;/etc/default/bind9 - параметры запуска демона;&lt;/li&gt;
    &lt;li id=&quot;bd1d&quot;&gt;/etc/bind/ - файлы конфигурации;&lt;/li&gt;
    &lt;li id=&quot;KK5N&quot;&gt;/var/cache/bind/ - директория обслуживаемых доменных зон.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;4Guc&quot;&gt;Четко установившаяся традиция разделения длинных конфигурационных файлов на части здесь может быть использована максимально эффективно при помощи директивы &lt;code&gt;include&lt;/code&gt;, где основной файл конфигурации выглядит так&lt;/p&gt;
  &lt;pre id=&quot;Ms9M&quot; data-lang=&quot;bash&quot;&gt;include &amp;quot;/etc/bind/named.conf.options&amp;quot;;
include &amp;quot;/etc/bind/named.conf.local&amp;quot;;
include &amp;quot;/etc/bind/named.conf.default-zones&amp;quot;;
include &amp;quot;/etc/bind/named.conf.zones&amp;quot;;
include &amp;quot;/etc/bind/named.conf.zones.dynamic&amp;quot;;&lt;/pre&gt;
  &lt;p id=&quot;otXI&quot;&gt;Для добавления своей динамической в данном случае зоны воспользуемся файлом, например, &lt;code&gt;named.conf.zones.dynamic&lt;/code&gt;.&lt;br /&gt;Сгенерируем конфигурацию для обновления зоны:&lt;/p&gt;
  &lt;pre id=&quot;3ow8&quot; data-lang=&quot;bash&quot;&gt;ddns-confgen -z antroot.lan&lt;/pre&gt;
  &lt;p id=&quot;59wL&quot;&gt;Добавим секретный ключ, который создали для DHCP&lt;/p&gt;
  &lt;pre id=&quot;tlPY&quot; data-lang=&quot;bash&quot;&gt;key DHCP_UPDATER {
    algorithm HMAC-MD5.SIG-ALG.REG.INT;
    secret S2RoX3bfdXXkYgRlco4rMMM3KzU4MzkwCg==;
};&lt;/pre&gt;
  &lt;p id=&quot;9p7V&quot;&gt;И зоны, прямую и обратную:&lt;/p&gt;
  &lt;pre id=&quot;6xNP&quot; data-lang=&quot;bash&quot;&gt;zone &amp;quot;antroot.lan&amp;quot; {
    type master;
    file &amp;quot;antroot.lan.hosts&amp;quot;;
    masterfile-format text;
    allow-update {
        key DHCP_UPDATER;
        10.0.3.2;
        10.0.3.3;
    };
    notify no;
};

zone &amp;quot;3.0.10.in-addr.arpa&amp;quot; IN {
    type master;
    file &amp;quot;_db.10.0.3&amp;quot;;
    masterfile-format text;
    allow-update {
        key DHCP_UPDATER;
        10.0.3.2;
        10.0.3.3;
    };
};&lt;/pre&gt;
  &lt;p id=&quot;ODyU&quot;&gt;И также необходимо создать мастер-файлы этих зон в директории &lt;code&gt;/var/cache/bind&lt;/code&gt;&lt;br /&gt;Мастер файл прямой зоны antroot&lt;code&gt;.lan.hosts&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;da4x&quot; data-lang=&quot;bash&quot;&gt;$ORIGIN .
$TTL 86400      ; 1 day
antroot.lan  IN SOA  antroot.lan. admin.antroot.lan. (
                                2021100601 ; serial
                                600        ; refresh (10 minutes)
                                300        ; retry (5 minutes)
                                3600       ; expire (1 hour)
                                600        ; minimum (10 minutes)
                                )
                        NS      ns.antroot.lan.
                        MX      10 mx.antroot.lan.
                        TXT     &amp;quot;antroot.ru server&amp;quot;
                        HINFO   &amp;quot;Pentium-III-1200&amp;quot; &amp;quot;Linux&amp;quot;
                        A       10.0.3.2
$ORIGIN antroot.lan.
ns                      A       10.0.3.2
mx                      A       10.0.3.2
$TTL 300        ; 5 minutes
nas.                    A       10.0.3.8&lt;/pre&gt;
  &lt;p id=&quot;8rpm&quot;&gt;Мастер файл обратной &lt;code&gt;_db.10.0.3&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;Zdfj&quot; data-lang=&quot;bash&quot;&gt;$ORIGIN .
$TTL 600        ; 10 minutes
3.0.10.in-addr.arpa     IN SOA  mijor.lan. cd.mijor.lan. (
                                34         ; serial
                                600        ; refresh (10 minutes)
                                3600       ; retry (1 hour)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      localhost.
$ORIGIN 3.0.10.in-addr.arpa.
$TTL 300        ; 5 minutes
90                      PTR     nas.mijor.lan.&lt;/pre&gt;
  &lt;p id=&quot;tSHF&quot;&gt;Проверка конфигурационных файлов:&lt;/p&gt;
  &lt;pre id=&quot;nkvm&quot; data-lang=&quot;bash&quot;&gt;named-checkconf /etc/bind/named.conf&lt;/pre&gt;
  &lt;p id=&quot;BIcw&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;управление-dns-через-утилиту-rndc&quot;&gt;Управление DNS через утилиту rndc&lt;/h2&gt;
  &lt;p id=&quot;v4kS&quot;&gt;Сгенерировать конфигурацию rndc&lt;/p&gt;
  &lt;pre id=&quot;91P4&quot; data-lang=&quot;bash&quot;&gt;rndc-confgen &amp;gt; /etc/bind/rndc.conf&lt;/pre&gt;
  &lt;p id=&quot;TDab&quot;&gt;следующего содержания:&lt;/p&gt;
  &lt;pre id=&quot;yLNo&quot; data-lang=&quot;bash&quot;&gt;key &amp;quot;rndc-key&amp;quot; {
      algorithm hmac-md5;
    secret &amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ==&amp;quot;;
};
options {
     default-server 127.0.0.1;
     default-port 953;
     default-key &amp;quot;rndc-key&amp;quot;;
};&lt;/pre&gt;
  &lt;p id=&quot;1x2u&quot;&gt;Добавить в /etc/bind/named.conf&lt;/p&gt;
  &lt;pre id=&quot;T6Hx&quot; data-lang=&quot;bash&quot;&gt;include &amp;quot;/etc/bind/rndc.key&amp;quot;;
controls {
        inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { &amp;quot;rndc-key&amp;quot;; };
    };&lt;/pre&gt;
  &lt;p id=&quot;oEKK&quot;&gt;После перезапуска bind9 (&lt;code&gt;systemctl restart bind9&lt;/code&gt;) можно воспользоваться:&lt;/p&gt;
  &lt;ul id=&quot;unGn&quot;&gt;
    &lt;li id=&quot;MPwo&quot;&gt;&lt;code&gt;rndc status&lt;/code&gt; - вывод общего состояния DNS сервера;&lt;/li&gt;
    &lt;li id=&quot;gLQ6&quot;&gt;&lt;code&gt;rndc freeze antroot.lan&lt;/code&gt; - заморозка зоны antroot.lan для ручного внесения изменений;&lt;/li&gt;
    &lt;li id=&quot;VFOU&quot;&gt;&lt;code&gt;rndc thaw antroot.lan&lt;/code&gt; - вернуть возможность обновления зоны antroot.lan&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;vkD3&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;ошибки-конфигурации&quot;&gt;Ошибки конфигурации&lt;/h2&gt;
  &lt;blockquote id=&quot;SHhf&quot;&gt;dhcp_updater: updating zone &amp;#x27;antroot.lan/IN&amp;#x27;: update unsuccessful: srv1.antroot.lan: &amp;#x27;name not in use&amp;#x27; prerequisite not satisfied (YXDOMAIN)&lt;/blockquote&gt;
  &lt;p id=&quot;vFRz&quot;&gt;Решение: в &lt;code&gt;dhcpd.conf&lt;/code&gt;&lt;br /&gt;заменить &lt;code&gt;ignore client-updates;&lt;/code&gt; на &lt;code&gt;allow client-updates;&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;0LAt&quot;&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;XiEt&quot;&gt;Forward map from srv1.antroot.lan to xx.xx.xx.xx FAILED: Has an A record but no DHCID, not mine.&lt;/blockquote&gt;
  &lt;p id=&quot;ZRd1&quot;&gt;DHCP-ID формируется, как хэш, вычисленный из комбинации FQDN машины, MAC адреса. DHCP-ID сохраняется в TXT записи в DNS&lt;br /&gt;Решение: в &lt;code&gt;dhcpd.conf&lt;/code&gt; добавить&lt;br /&gt;&lt;code&gt;update-conflict-detection off;&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;N6Rb&quot;&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;ookY&quot;&gt;Не разрешаются имена, кроме укзанных своих зон:&lt;/blockquote&gt;
  &lt;p id=&quot;CR5h&quot;&gt;Убедитесь, что не включена опция &lt;code&gt;allow-recursion { none; };&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;xjrD&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;MgPh&quot;&gt;
    &lt;tt-tag name=&quot;dns&quot;&gt;#dns&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;dhcp&quot;&gt;#dhcp&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;linux&quot;&gt;#linux&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;sysadmin&quot;&gt;#sysadmin&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>antroot:dns-bind</id><link rel="alternate" type="text/html" href="https://306.antroot.ru/dns-bind?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=antroot"></link><title>Установка и настройка DNS сервера Bind9 в Debian/Ubuntu Linux</title><published>2025-05-22T07:06:05.007Z</published><updated>2025-05-22T07:06:38.784Z</updated><category term="sysadmin" label="Sysadmin"></category><tt:hashtag>dns</tt:hashtag><tt:hashtag>linux</tt:hashtag><tt:hashtag>sysadmin</tt:hashtag><summary type="html">Сервер DNS (Domain Name Services - сервис доменных имен) предназначен для преобразования доменных имен в IP адрес (прямое преобразование) и обратно (обратное преобразование, reverse DNS).</summary><content type="html">
  &lt;p id=&quot;wNOq&quot;&gt;&lt;strong&gt;Сервер DNS&lt;/strong&gt; (Domain Name Services - сервис доменных имен) предназначен для преобразования доменных имен в IP адрес (прямое преобразование) и обратно (обратное преобразование, reverse DNS).&lt;/p&gt;
  &lt;h2 id=&quot;установка-dns-сервера&quot;&gt;Установка DNS сервера&lt;/h2&gt;
  &lt;p id=&quot;JdZY&quot;&gt;Этот пакет является основополагающим, и присутствует во всяческих репозиториях.&lt;br /&gt;Установка производится стандартным образом:&lt;/p&gt;
  &lt;pre id=&quot;OLoU&quot; data-lang=&quot;bash&quot;&gt;apt install -y bind9 bind9utils&lt;/pre&gt;
  &lt;p id=&quot;Y0Vb&quot;&gt;Стандартными для Debian/Ubuntu Linux расположениями файлов Bind9 являются&lt;/p&gt;
  &lt;ul id=&quot;Eopq&quot;&gt;
    &lt;li id=&quot;pCvC&quot;&gt;&lt;code&gt;/etc/default/bind9&lt;/code&gt; - параметры запуска демона;&lt;/li&gt;
    &lt;li id=&quot;AWCh&quot;&gt;&lt;code&gt;/etc/bind/&lt;/code&gt; - файлы конфигурации;&lt;/li&gt;
    &lt;li id=&quot;QMZf&quot;&gt;&lt;code&gt;/var/cache/bind/&lt;/code&gt; - директория обслуживаемых доменных зон;&lt;/li&gt;
    &lt;li id=&quot;qROR&quot;&gt;&lt;code&gt;/var/log/bind/&lt;/code&gt; - файлы журналов.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;WiHU&quot;&gt;Четко установившаяся традиция разделения длинных конфигурационных файлов на части здесь может быть использована максимально эффективно при помощи директивы &lt;code&gt;include&lt;/code&gt;, где основной файл конфигурации выглядит так&lt;/p&gt;
  &lt;pre id=&quot;UMII&quot; data-lang=&quot;bash&quot;&gt;include &amp;quot;/etc/bind/named.conf.options&amp;quot;;
include &amp;quot;/etc/bind/named.conf.local&amp;quot;;
include &amp;quot;/etc/bind/named.conf.default-zones&amp;quot;;
include &amp;quot;/etc/bind/named.conf.zones&amp;quot;;
include &amp;quot;/etc/bind/named.conf.zones.dynamic&amp;quot;;&lt;/pre&gt;
  &lt;p id=&quot;bQCI&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;основные-параметры-конфигурации-dns-bind9&quot;&gt;Основные параметры конфигурации DNS Bind9&lt;/h2&gt;
  &lt;p id=&quot;aLLy&quot;&gt;В разделе &lt;code&gt;options&lt;/code&gt; определяются общие параметры DNS сервера.&lt;/p&gt;
  &lt;ul id=&quot;9q2J&quot;&gt;
    &lt;li id=&quot;jioX&quot;&gt;&lt;code&gt;directory&lt;/code&gt; - определяет расположение мастер-файлов зон;&lt;/li&gt;
    &lt;li id=&quot;Deyn&quot;&gt;&lt;code&gt;forwarders&lt;/code&gt; - вышестоящие DNS серверы (заменить 0.0.0.0 и убрать комментарий);&lt;/li&gt;
    &lt;li id=&quot;BnxX&quot;&gt;&lt;code&gt;listen-on&lt;/code&gt; - какие интерфейсы должны прослушиваться;&lt;/li&gt;
    &lt;li id=&quot;4wvm&quot;&gt;&lt;code&gt;version&lt;/code&gt; - информация о версии сервера.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;rJe6&quot; data-lang=&quot;bash&quot;&gt;options {
        // forwarders { 0.0.0.0; };
        directory &amp;quot;/var/cache/bind&amp;quot;;
        listen-on { 10.0.1.2; 10.0.2.2; 10.0.3.2; 127.0.0.1; };
        version none;
};&lt;/pre&gt;
  &lt;p id=&quot;Eiab&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;журналирование-в-dns-bind9&quot;&gt;Журналирование в DNS Bind9&lt;/h2&gt;
  &lt;p id=&quot;KkDx&quot;&gt;Для разбивки журналов можно использовать каналы, которые записывать в различные файлы.&lt;/p&gt;
  &lt;pre id=&quot;sZLE&quot; data-lang=&quot;bash&quot;&gt;logging {
        // Общий канал для всех запросов в DNS
        channel default_ch {
                // Параметры ротации файла: размер 100КБ, 4 версии
                file &amp;quot;/var/log/bind/named.log&amp;quot; versions 4 size 100k;
                severity info;      // Уровень информативности
                print-time yes;     // Показывать время
                print-category yes; // Указывать категорию
        };
        // Канал для упрощенных запросов
        channel lame_ch {
                file &amp;quot;/var/log/bind/lame_servers.log&amp;quot; versions 4 size 100k;
                severity info;
                print-time yes;
                print-category yes;
                };
        // Канал безопасности
        channel security_ch {
                file &amp;quot;/var/log/bind/security.log&amp;quot; versions 4 size 100k;
                severity info;
                print-severity yes;
                print-time yes;
                print-category yes;
                };
        // Канал передачи зон между серверами
        channel xfer_ch {
                file &amp;quot;/var/log/bind/xfer.log&amp;quot; versions 4 size 100k;
                severity info;
                print-time yes;
                print-category yes;
                };
        // Канал отладки обновлений зон
        channel update_debug {
                file &amp;quot;/var/log/bind/update_debug.log&amp;quot; versions 4 size 100k;
                severity debug 3;
                print-category yes;
                print-severity yes;
                print-time     yes;
                print-severity yes;
                print-time     yes;
        };
        // Канал обновлений зон
        channel update_log {
                file &amp;quot;/var/log/bind/update.log&amp;quot; versions 4 size 100k;
                severity dynamic;
                print-category yes;
                print-severity yes;
                print-time     yes;
        };

        // Направление категорий сообщений в соответствующие каналы
        category lame-servers { lame_ch; };
        category xfer-in  { xfer_ch; };
        category xfer-out { xfer_ch; };
        category update   { update_debug; update_log; };
        category update-security { update_debug; };
        category security { security_ch; };
        category default  { default_ch; };
};&lt;/pre&gt;
  &lt;p id=&quot;MS7w&quot;&gt;При необходимости отключения любой категории, направьте ее в &lt;code&gt;null&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;aIaA&quot; data-lang=&quot;bash&quot;&gt;category lame-servers { null; };&lt;/pre&gt;
  &lt;p id=&quot;khmP&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;добавление-зоны-в-dns&quot;&gt;Добавление зоны в DNS&lt;/h2&gt;
  &lt;p id=&quot;el1V&quot;&gt;Для добавления своей динамической в данном случае зоны воспользуемся файлом, например, &lt;code&gt;named.conf.zones.dynamic&lt;/code&gt;.&lt;br /&gt;Добавим секретный ключ для DHCP&lt;/p&gt;
  &lt;pre id=&quot;9amS&quot; data-lang=&quot;bash&quot;&gt;key DHCP_UPDATER {
    algorithm HMAC-MD5.SIG-ALG.REG.INT;
    secret S2RoX3bfdXXkYgRlco4rMMM3KzU4MzkwCg==;
};&lt;/pre&gt;
  &lt;p id=&quot;2q6y&quot;&gt;И зоны, прямую и обратную:&lt;/p&gt;
  &lt;pre id=&quot;f9J6&quot; data-lang=&quot;bash&quot;&gt;zone &amp;quot;antroot.lan&amp;quot; {
    type master;
    file &amp;quot;antroot.lan.hosts&amp;quot;;
    masterfile-format text;
    allow-update {
        key DHCP_UPDATER;
        10.0.3.2;
        10.0.3.3;
    };
    notify no;
};

zone &amp;quot;3.0.10.in-addr.arpa&amp;quot; IN {
    type master;
    file &amp;quot;_db.10.0.3&amp;quot;;
    masterfile-format text;
    allow-update {
        key DHCP_UPDATER;
        10.0.3.2;
        10.0.3.3;
    };
};&lt;/pre&gt;
  &lt;p id=&quot;CZnm&quot;&gt;И также необходимо создать мастер-файлы этих зон в директории &lt;code&gt;/var/cache/bind&lt;/code&gt;&lt;br /&gt;Мастер файл прямой зоны &lt;code&gt;antroot.lan.hosts&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;sEKb&quot; data-lang=&quot;bash&quot;&gt;$ORIGIN .
$TTL 86400      ; 1 day
antroot.lan  IN SOA  antroot.lan. admin.antroot.lan. (
                                2021100601 ; serial
                                600        ; refresh (10 minutes)
                                300        ; retry (5 minutes)
                                3600       ; expire (1 hour)
                                600        ; minimum (10 minutes)
                                )
                        NS      ns.antroot.lan.
                        MX      10 mx.antroot.lan.
                        TXT     &amp;quot;antroot.ru server&amp;quot;
                        HINFO   &amp;quot;Pentium-III-1200&amp;quot; &amp;quot;Linux&amp;quot;
                        A       10.0.3.2
$ORIGIN antroot.lan.
ns                      A       10.0.3.2
mx                      A       10.0.3.2
$TTL 300        ; 5 minutes
nas.                    A       10.0.3.8&lt;/pre&gt;
  &lt;p id=&quot;Xjsi&quot;&gt;Мастер файл обратной &lt;code&gt;_db.10.0.3&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;PkbA&quot; data-lang=&quot;bash&quot;&gt;$ORIGIN .
$TTL 600        ; 10 minutes
3.0.10.in-addr.arpa     IN SOA  mijor.lan. cd.mijor.lan. (
                                34         ; serial
                                600        ; refresh (10 minutes)
                                3600       ; retry (1 hour)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      localhost.
$ORIGIN 3.0.10.in-addr.arpa.
$TTL 300        ; 5 minutes
90                      PTR     nas.mijor.lan.&lt;/pre&gt;
  &lt;p id=&quot;1jFR&quot;&gt;Проверка конфигурационных файлов:&lt;/p&gt;
  &lt;pre id=&quot;FKyo&quot;&gt;named-checkconf /etc/bind/named.conf&lt;/pre&gt;
  &lt;p id=&quot;fjCH&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;настройка-split-dns&quot;&gt;Настройка Split DNS&lt;/h2&gt;
  &lt;p id=&quot;NH25&quot;&gt;Иногда требуется сделать различное отображение данных DNS для внутренних клиентов в корпоративной сети и для внешних, обращающихся через интернет. В частности, для использования машин с несколькими IP адресами, или работающими через nginx/haproxy прокси серверы.&lt;br /&gt;Определим внешних и внутренних клиентов:&lt;/p&gt;
  &lt;pre id=&quot;Tu3z&quot; data-lang=&quot;bash&quot;&gt;acl internal_nets { 172.16.72.0/24; 192.168.1.0/24; };
acl external_nets { bastion-ips-go-here; };&lt;/pre&gt;
  &lt;p id=&quot;iaqT&quot;&gt;и определим отображения &lt;code&gt;view&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;SjqK&quot; data-lang=&quot;bash&quot;&gt;view &amp;quot;internal&amp;quot; {
    match-clients {
        192.168.0.0/16;
        172.16.0.0/12;
        10.0.0.0/8;
        127.0.0.0/8;
    };
    recursion yes;

    zone &amp;quot;antroot.ru&amp;quot; {
        type master;
        file &amp;quot;antroot.ru.local.hosts&amp;quot;;
        ...
    }
    include &amp;quot;named.conf.zones&amp;quot;;
}
view &amp;quot;external&amp;quot; {
    match-clients { any; };
    zone &amp;quot;antroot.ru&amp;quot; {
        type master;
        file &amp;quot;antroot.ru.hosts&amp;quot;;
        notify yes;
        allow-transfer { slave_ns; };
    };
    include &amp;quot;named.conf.zones&amp;quot;;
};&lt;/pre&gt;
  &lt;p id=&quot;52D2&quot;&gt;Здесь определено два отображения &lt;code&gt;view&lt;/code&gt;, &lt;code&gt;internal&lt;/code&gt; - внутренняя, котороая будет отдаваться только на запросы из внутренних сетей, и &lt;code&gt;external&lt;/code&gt; - внешняя, которая будет отвечать на запросы любому клиенту. При помощи директивы &lt;code&gt;include&lt;/code&gt; подключаются общие для всех клиентов данные.&lt;br /&gt;В приведенном примере, разделяется (split) зона&lt;code&gt; antroot.ru&lt;/code&gt;. Мы определяем адреса серверов из демилитаризованной зоны в файле &lt;code&gt;antroot.ru.local.hosts&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;EFnQ&quot; data-lang=&quot;bash&quot;&gt;srv1  IN A 10.0.3.101
srv2  IN A 10.0.3.102&lt;/pre&gt;
  &lt;p id=&quot;KQq5&quot;&gt;и наряду с этим задаем в файле &lt;code&gt;antroot.ru.hosts&lt;/code&gt; белый IP адрес, на котором установлен, например, прокси сервер, перенаправляющий запросы по имени хоста на соответствующий адрес в локальной сети:&lt;/p&gt;
  &lt;pre id=&quot;w6iL&quot; data-lang=&quot;bash&quot;&gt;srv1  IN A 50.60.70.80
srv2  IN A 50.60.70.80&lt;/pre&gt;
  &lt;p id=&quot;ilvP&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;запуск-сервера-dns-bind9&quot;&gt;Запуск сервера DNS Bind9&lt;/h2&gt;
  &lt;p id=&quot;nGKd&quot;&gt;Запуск, перезапуск осуществляется через утилиту &lt;code&gt;systemctl&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;kXKh&quot; data-lang=&quot;bash&quot;&gt;systemctl start bind9
systemctl enable bind9
systemctl status bind9&lt;/pre&gt;
  &lt;p id=&quot;peTx&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;управление-dns-через-утилиту-rndc&quot;&gt;Управление DNS через утилиту rndc&lt;/h2&gt;
  &lt;p id=&quot;egva&quot;&gt;Сгенерировать конфигурацию rndc:&lt;/p&gt;
  &lt;pre id=&quot;Eard&quot;&gt;rndc-confgen &amp;gt; /etc/bind/rndc.conf&lt;/pre&gt;
  &lt;p id=&quot;nWWf&quot;&gt;следующего содержания:&lt;/p&gt;
  &lt;pre id=&quot;0iKJ&quot; data-lang=&quot;bash&quot;&gt;key &amp;quot;rndc-key&amp;quot; {
      algorithm hmac-md5;
    secret &amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ==&amp;quot;;
};
options {
     default-server 127.0.0.1;
     default-port 953;
     default-key &amp;quot;rndc-key&amp;quot;;
};&lt;/pre&gt;
  &lt;p id=&quot;eioG&quot;&gt;Добавить в &lt;code&gt;/etc/bind/named.conf&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;TW8x&quot; data-lang=&quot;bash&quot;&gt;include &amp;quot;/etc/bind/rndc.key&amp;quot;;
controls {
        inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { &amp;quot;rndc-key&amp;quot;; };
    };&lt;/pre&gt;
  &lt;p id=&quot;NFmQ&quot;&gt;После перезапуска bind9 (&lt;code&gt;systemctl restart bind9&lt;/code&gt;) можно воспользоваться:&lt;/p&gt;
  &lt;ul id=&quot;JIWt&quot;&gt;
    &lt;li id=&quot;tR5L&quot;&gt;&lt;code&gt;rndc status&lt;/code&gt; - вывод общего состояния DNS сервера;&lt;/li&gt;
    &lt;li id=&quot;wYl5&quot;&gt;&lt;code&gt;rndc freeze antroot.lan&lt;/code&gt; - заморозка зоны antroot.lan для ручного внесения изменений;&lt;/li&gt;
    &lt;li id=&quot;Nshj&quot;&gt;&lt;code&gt;rndc thaw antroot.lan&lt;/code&gt; - вернуть возможность обновления зоны antroot.lan.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;w3sy&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;некоторые-ошибки&quot;&gt;Некоторые ошибки&lt;/h2&gt;
  &lt;blockquote id=&quot;OBt2&quot;&gt;Ошибка синхронизации журнала изменений зоны&lt;/blockquote&gt;
  &lt;pre id=&quot;ViqP&quot; data-lang=&quot;bash&quot;&gt;general: zone antroot.lan/IN: journal rollforward failed: journal out of sync with zone&lt;/pre&gt;
  &lt;p id=&quot;SKSy&quot;&gt;Удалить файл журнала и перезапустить DNS сервер&lt;/p&gt;
  &lt;pre id=&quot;49XS&quot; data-lang=&quot;bash&quot;&gt;rm var/cache/bind/antroot.lan.hosts.jnl
systemctl restart bind9&lt;/pre&gt;
  &lt;p id=&quot;6dcP&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;Xyw0&quot;&gt;
    &lt;tt-tag name=&quot;dns&quot;&gt;#dns&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;linux&quot;&gt;#linux&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;sysadmin&quot;&gt;#sysadmin&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>antroot:dhcp</id><link rel="alternate" type="text/html" href="https://306.antroot.ru/dhcp?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=antroot"></link><title>Настройка DCHP сервера в Debian/Ubuntu Linux</title><published>2025-05-21T08:41:46.852Z</published><updated>2025-05-21T08:42:05.330Z</updated><category term="sysadmin" label="Sysadmin"></category><tt:hashtag>dhcp</tt:hashtag><tt:hashtag>linux</tt:hashtag><tt:hashtag>sysadmin</tt:hashtag><summary type="html">Сервер DHCP в сети занимается выдачей IP адресов устройствам. Одновременно с выдачей адресов...</summary><content type="html">
  &lt;p id=&quot;0KAt&quot;&gt;Сервер &lt;strong&gt;DHCP&lt;/strong&gt; в сети занимается выдачей IP адресов устройствам. Одновременно с выдачей адресов.&lt;/p&gt;
  &lt;h2 id=&quot;установка-сервера-dhcp&quot;&gt;Установка сервера DHCP&lt;/h2&gt;
  &lt;p id=&quot;dZLX&quot;&gt;Этот пакет скорее всего один из старейших резидентов всевозможных репозиториев. Устанавливаем из стандартного:&lt;/p&gt;
  &lt;pre id=&quot;IgVE&quot; data-lang=&quot;bash&quot;&gt;apt install isc-dhcp-server&lt;/pre&gt;
  &lt;p id=&quot;Mtxu&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;настройка-сервера-dhcp&quot;&gt;Настройка сервера DHCP&lt;/h2&gt;
  &lt;p id=&quot;6VJy&quot;&gt;Первая настройка в файле &lt;code&gt;/etc/default/isc-dhcp-server&lt;/code&gt;, в котором нужно указать необходимые для прослушивания интерфейсы системы, физические и виртуальные.&lt;/p&gt;
  &lt;pre id=&quot;u6DB&quot; data-lang=&quot;bash&quot;&gt;INTERFACESv4=&amp;quot;ens18,eth0,vlan1&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;Xf55&quot;&gt;Файл записей аренды адресов располагается по умолчанию &lt;code&gt;/var/lib/dhcp/dhcpd.leases&lt;/code&gt;&lt;br /&gt;Дальнейшая настройка производится в основном конфигурационном файле &lt;code&gt;/etc/dhcp/dhcpd.conf&lt;/code&gt;,&lt;br /&gt;где необходимо указать основное имя домена и DNS&lt;/p&gt;
  &lt;pre id=&quot;QFoT&quot; data-lang=&quot;bash&quot;&gt;option domain-name &amp;quot;antroot.ru&amp;quot;;
option domain-name-servers 10.0.2.1, 10.0.2.2;&lt;/pre&gt;
  &lt;p id=&quot;VEmI&quot;&gt;Если устанавливается DHCP сервер, значит планируется раздавать IP адреса этим сервером, поэтому указываем, что он уполномочен это делать:&lt;/p&gt;
  &lt;pre id=&quot;USzm&quot; data-lang=&quot;bash&quot;&gt;authoritative;&lt;/pre&gt;
  &lt;p id=&quot;3x8K&quot;&gt;Следует указать все подсети, к которым подключен сервер, чтобы он понимал конфигурацию сети, указывая только в нужной параметры раздачи IP адресов&lt;/p&gt;
  &lt;pre id=&quot;O11A&quot; data-lang=&quot;bash&quot;&gt;subnet 10.0.1.0 netmask 255.255.255.0 { }
subnet 10.0.2.0 netmask 255.255.255.0 { }
subnet 10.0.3.0 netmask 255.255.255.0 {
    range 10.0.3.50 10.0.3.99;
    option subnet-mask 255.255.255.0;
    option routers 10.0.3.2;
    option domain-name-servers 10.0.2.1;
}&lt;/pre&gt;
  &lt;p id=&quot;JCeX&quot;&gt;Для фиксации IP адреса определенному устройству в сети можно указать его MAC адрес&lt;/p&gt;
  &lt;pre id=&quot;UtnZ&quot; data-lang=&quot;bash&quot;&gt;host some-client {
  hardware ethernet fe:ce:12:34:56:78;
  fixed-address 10.0.3.11;
  option host-name &amp;quot;antroot-1&amp;quot;;
  ddns-hostname &amp;quot;antroot-1&amp;quot;;
}&lt;/pre&gt;
  &lt;p id=&quot;lNF3&quot;&gt;Несколько хостов можно объединить в группу &lt;code&gt;group&lt;/code&gt;, чтобы задать общие для группы параметры:&lt;/p&gt;
  &lt;pre id=&quot;b4Bl&quot; data-lang=&quot;bash&quot;&gt;group {
  # общие для группы параметры
  option domain-name &amp;quot;antroot.lan&amp;quot;;
  option domain-name-servers 10.0.3.2;
  option routers 10.0.3.2;
  host srv1 {
    # параметры хоста srv1
    hardware ethernet fe:ce:12:34:56:78;
    fixed-address 10.0.3.11;
  }
  host srv2 {
    # параметры хоста srv2
    hardware ethernet fe:ce:12:34:56:79;
    fixed-address 10.0.3.12;
  }
}&lt;/pre&gt;
  &lt;p id=&quot;3XsV&quot;&gt;Для определенной подсети &lt;code&gt;subnet&lt;/code&gt; пула &lt;code&gt;pool&lt;/code&gt; группы &lt;code&gt;group&lt;/code&gt; можно указать время аренды IP адреса в секундах - это бывает нужно для тестовых машин, когда их создается очень много на короткое время, чтобы пул адресов быстрее освобождался:&lt;/p&gt;
  &lt;pre id=&quot;Z3j9&quot; data-lang=&quot;bash&quot;&gt;max-lease-time 300;
default-lease-time 300;&lt;/pre&gt;
  &lt;p id=&quot;FsQ3&quot;&gt;Подсеть &lt;code&gt;subnet&lt;/code&gt; может быть разделена на пулы &lt;code&gt;pool&lt;/code&gt;, каждому из которых можно определить свои дополнительные параметры:&lt;/p&gt;
  &lt;pre id=&quot;mBVx&quot; data-lang=&quot;bash&quot;&gt;subnet 10.0.3.0 netmask 255.255.255.0 {
  option routers 10.0.3.2;
  pool {
    range 10.0.3.150 10.0.3.199;
    option domain-name-servers 10.0.3.2;
    max-lease-time 300;
    default-lease-time 300;
    allow unknown-clients;
  }
  pool {
    range 10.0.3.50 10.0.3.99;
    option domain-name-servers 10.0.2.1, 10.0.3.2;
    deny unknown-clients;
  }
}&lt;/pre&gt;
  &lt;p id=&quot;Z3Ht&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;журналирование-сервера-dhcp&quot;&gt;Журналирование сервера DHCP&lt;/h2&gt;
  &lt;p id=&quot;1iX1&quot;&gt;Включаем маркирование логов в файле &lt;code&gt;dhcpd.conf&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;P148&quot; data-lang=&quot;bash&quot;&gt;log-facility local7;&lt;/pre&gt;
  &lt;p id=&quot;Z5Eb&quot;&gt;Затем необходимо добавить в конфигурацию syslog перенаправление в отдельный файл, для чего в директории &lt;code&gt;/etc/rsyslog.d/&lt;/code&gt; добавить файл &lt;code&gt;isc-dhcp-server.conf&lt;/code&gt; с таким содержимым:&lt;/p&gt;
  &lt;pre id=&quot;OCpq&quot; data-lang=&quot;bash&quot;&gt;local7.* /var/log/dhcpd.log
&amp;amp; ~&lt;/pre&gt;
  &lt;p id=&quot;x7N1&quot;&gt;и в основном файле конфигурации отключить запись в &lt;code&gt;/var/log/syslog&lt;/code&gt; этих сообщений&lt;/p&gt;
  &lt;pre id=&quot;pR1O&quot; data-lang=&quot;bash&quot;&gt;*.*;auth,authpriv.none -/var/log/syslog
# заменить на
*.*;auth,authpriv.none;local7.none -/var/log/syslog&lt;/pre&gt;
  &lt;p id=&quot;cclO&quot;&gt;и перезапустить syslog&lt;/p&gt;
  &lt;pre id=&quot;9tIy&quot; data-lang=&quot;bash&quot;&gt;systemctl restart rsyslog&lt;/pre&gt;
  &lt;p id=&quot;h94b&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;запуск-сервера-dhcp&quot;&gt;Запуск сервера DHCP&lt;/h2&gt;
  &lt;p id=&quot;wPHh&quot;&gt;Запускаем &lt;strong&gt;isc-dhcp-server&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;J6bs&quot; data-lang=&quot;bash&quot;&gt;systemctl start isc-dhcp-server
systemctl enable isc-dhcp-server
systemctl status isc-dhcp-server&lt;/pre&gt;
  &lt;p id=&quot;fRTf&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;YiOH&quot;&gt;
    &lt;tt-tag name=&quot;dhcp&quot;&gt;#dhcp&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;linux&quot;&gt;#linux&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;sysadmin&quot;&gt;#sysadmin&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>antroot:kafka-linux</id><link rel="alternate" type="text/html" href="https://306.antroot.ru/kafka-linux?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=antroot"></link><title>Установка Kafka на Ubuntu Linux</title><published>2025-05-20T08:05:31.868Z</published><updated>2025-05-20T08:05:31.868Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/06/42/0642cdd7-c6a3-4fd0-bff6-bcfe94cad30a.png"></media:thumbnail><category term="sysadmin" label="Sysadmin"></category><tt:hashtag>kafka</tt:hashtag><tt:hashtag>linux</tt:hashtag><tt:hashtag>ubuntu</tt:hashtag><tt:hashtag>sysadmin</tt:hashtag><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/6a/32/6a3201ee-4530-417f-9ff1-b1f7d441e3d5.png&quot;&gt;Apache Kafka - это распределенная канальная платформа. Платформа каналов обладает такими возможностями...</summary><content type="html">
  &lt;p id=&quot;LGYd&quot;&gt;&lt;strong&gt;Apache Kafka&lt;/strong&gt; - это распределенная канальная платформа. Платформа каналов обладает такими возможностями:&lt;/p&gt;
  &lt;ul id=&quot;eCAr&quot;&gt;
    &lt;li id=&quot;CaS4&quot;&gt;Публикация и подписка на каналы записей, что очень похоже на очередь сообщений&lt;/li&gt;
    &lt;li id=&quot;2lwz&quot;&gt;Сохранение каналов записей в отказоустойчивом долгосрочном хранилище&lt;/li&gt;
    &lt;li id=&quot;CsFV&quot;&gt;Обработка калаов записей сразу при их появлении&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;lLAL&quot;&gt;&lt;strong&gt;Kafka&lt;/strong&gt; обычно &lt;strong&gt;используется&lt;/strong&gt; для приложений:&lt;/p&gt;
  &lt;ul id=&quot;YiAh&quot;&gt;
    &lt;li id=&quot;ctai&quot;&gt;Построения конвейеров передачи данных в реальном времени между приложениями&lt;/li&gt;
    &lt;li id=&quot;E1lU&quot;&gt;Построения потоковых приложений, преобразовывающих или реагирующих на потоки данных&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;wqZ3&quot;&gt;&lt;strong&gt;Концепция&lt;/strong&gt;:&lt;/p&gt;
  &lt;ul id=&quot;hDjG&quot;&gt;
    &lt;li id=&quot;6ngM&quot;&gt;Kafka запускается, как кластер, выполняющийся на одном или нескольких серверах, расположенных, возможно, в нескольких дата-центрах&lt;/li&gt;
    &lt;li id=&quot;hbmC&quot;&gt;Kafka сохраняет потоки записей в категориях, называемых &amp;quot;тема&amp;quot;&lt;/li&gt;
    &lt;li id=&quot;PAOj&quot;&gt;Каждая запис состоит из ключа, значения и отметки времени&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;x9mD&quot;&gt;&lt;strong&gt;Kafka содержит&lt;/strong&gt; четыре &lt;strong&gt;API&lt;/strong&gt;:&lt;/p&gt;
  &lt;ul id=&quot;JXfh&quot;&gt;
    &lt;li id=&quot;DFF1&quot;&gt;Producer API - позволяет приложениям публиковать потоки записей в одну или несколько тем&lt;/li&gt;
    &lt;li id=&quot;BcKG&quot;&gt;Consumer API - позволяет приложениям подписываться на темы и обрабатывать потоки записей, публикуемых в них&lt;/li&gt;
    &lt;li id=&quot;I9U3&quot;&gt;Streams API - позволяет приложениям работать, как обработчик потоков, предполагая извлечение записей из входящего потока по одной или нескольким темам, и публикуя выходящий поток в одну или несколько тем, выполняя некоторое преобразование входящих потоков в исходящие потоки&lt;/li&gt;
    &lt;li id=&quot;H1Nx&quot;&gt;Connector API - позволяет строить и запускать переиспользуемых публикаторов и подписчиков, что соединяет темы Kafka с существующими приложениями. К примеру, коннектор к реляционной базе данных может отлавливать каждое изменение таблицы.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;zaow&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6a/32/6a3201ee-4530-417f-9ff1-b1f7d441e3d5.png&quot; width=&quot;1069&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;AVdZ&quot;&gt;В Kafka коммуникация между клиентами и серверами выполняется на простом, высокопроизводительном языке по TCP протоколу. Протокол версионен и поддерживает обратную совместимость со старыми версиями. Существует множество клиентов для Kafka на различных языках, среди которых Go, Java, PHP, Python, Rust, Swift.&lt;/p&gt;
  &lt;p id=&quot;m2Qc&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;установка-apache-kafka-на-ubuntu-linux-1&quot;&gt;Установка Apache Kafka на Ubuntu Linux&lt;/h2&gt;
  &lt;p id=&quot;WRm3&quot;&gt;&lt;strong&gt;Установить Java&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;dlpz&quot; data-lang=&quot;bash&quot;&gt;apt install -y default-jre
java -version&lt;/pre&gt;
  &lt;p id=&quot;NeD7&quot;&gt;&lt;strong&gt;Создать пользователя&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;7Feg&quot; data-lang=&quot;bash&quot;&gt;adduser kafka
adduser kafka sudo
su -l kafka&lt;/pre&gt;
  &lt;p id=&quot;3XJs&quot;&gt;&lt;strong&gt;Установки Apache Kafka 3.1.0 со Scala 2.13&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;OZvC&quot; data-lang=&quot;bash&quot;&gt;curl -fsSLO https://dlcdn.apache.org/kafka/3.1.0/kafka_2.13-3.1.0.tgz
tar zxvf kafka_2.13-3.1.0.tgz
mv kafka_2.13-3.1.0 ~/kafka
cd ~/kafka
#./bin/kafka-server-start.sh config/server.properties
#./bin/zookeeper-server-start.sh config/zookeeper.properties&lt;/pre&gt;
  &lt;p id=&quot;nnsT&quot;&gt;&lt;strong&gt;Настройка&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;4yhM&quot; data-lang=&quot;bash&quot;&gt;vi ~/kafka/config/server.properties
# установить следующие значечния
delete.topic.enable = true
log.dirs=/home/kafka/logs&lt;/pre&gt;
  &lt;p id=&quot;IsXr&quot;&gt;&lt;strong&gt;Настроить Systemd Units&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;sudo vi /etc/systemd/system/zookeeper.service&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;hZMc&quot; data-lang=&quot;bash&quot;&gt;[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
User=kafka
ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target&lt;/pre&gt;
  &lt;p id=&quot;e02B&quot;&gt;&lt;code&gt;sudo vi /etc/systemd/system/kafka.service&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;K2mp&quot; data-lang=&quot;bash&quot;&gt;[Unit]
Requires=zookeeper.service
After=zookeeper.service

[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c &amp;#x27;/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties &amp;gt; /home/kafka/kafka/kafka.log 2&amp;gt;&amp;amp;1&amp;#x27;
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target&lt;/pre&gt;
  &lt;p id=&quot;REGw&quot;&gt;&lt;/p&gt;
  &lt;pre id=&quot;hh8V&quot; data-lang=&quot;bash&quot;&gt;systemctl start zookeeper
systemctl start kafka
systemctl enable zookeeper
systemctl enable kafka&lt;/pre&gt;
  &lt;p id=&quot;Xgza&quot;&gt;&lt;strong&gt;Тестирование Kafka&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;Je20&quot; data-lang=&quot;bash&quot;&gt;# создать тему QUEUE
#./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic QUEUE
./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic QUEUE
# создать публикатора для темы QUEUE, и написать несколько строк сообщений
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic QUEUE
# показать список тем
#./bin/kafka-topics.sh --list --zookeeper localhost:2181
./bin/kafka-topics.sh --list --bootstrap-server localhost:9092
# создать подписчика на тему QUEUE и просмотреть сообщения
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic QUEUE --from-beginning&lt;/pre&gt;
  &lt;p id=&quot;m0h0&quot;&gt;их соседнего терминала можно отправить сообщение в открытый с подписчиком&lt;/p&gt;
  &lt;pre id=&quot;gOBv&quot; data-lang=&quot;bash&quot;&gt;echo &amp;quot;Hello World!&amp;quot; | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic QUEUE &amp;gt; /dev/null&lt;/pre&gt;
  &lt;p id=&quot;of6a&quot;&gt;&lt;strong&gt;Установка утилиты администрирования KafkaT&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;55JB&quot; data-lang=&quot;bash&quot;&gt;sudo apt install ruby ruby-dev build-essential
sudo CFLAGS=-Wno-error=format-overflow gem install kafkat&lt;/pre&gt;
  &lt;p id=&quot;I9Vb&quot;&gt;&lt;code&gt;vi ~/.kafkatcfg&lt;/code&gt;&lt;/p&gt;
  &lt;pre id=&quot;XGRM&quot; data-lang=&quot;bash&quot;&gt;{
  &amp;quot;kafka_path&amp;quot;: &amp;quot;~/kafka&amp;quot;,
  &amp;quot;log_path&amp;quot;: &amp;quot;/home/kafka/logs&amp;quot;,
  &amp;quot;zk_path&amp;quot;: &amp;quot;localhost:2181&amp;quot;
}&lt;/pre&gt;
  &lt;p id=&quot;ilAN&quot;&gt;&lt;code&gt;kafkat partitions&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;OQgK&quot;&gt;&lt;/p&gt;
  &lt;tt-tags id=&quot;Dc9T&quot;&gt;
    &lt;tt-tag name=&quot;kafka&quot;&gt;#kafka&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;linux&quot;&gt;#linux&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;ubuntu&quot;&gt;#ubuntu&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;sysadmin&quot;&gt;#sysadmin&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry></feed>