четверг, 27 августа 2026 г.

Gitea. Установка и базовая настройка

Создаем директорию для контейнера gitea

# mkdir /mnt/data/docker_projects/gitea

В интерфейсе portainer переходим в окружение local.

Выбираем пункты меню Stacks --> + Add Stack. Прописываем имя в поле Name - gitea


Оставляем выбор метода задания параметров Web editor.

В поле редактора конфига вносим конфигурацию:

services:

  gitea:

    image: gitea/gitea:latest

    container_name: gitea

    restart: unless-stopped

    ports:

      - "3000:3000"

      - "2222:22"

    volumes:

      - /mnt/data/docker_projects/gitea/data:/data

    environment:

      - USER_UID=1000

      - USER_GID=1000

      - GITEA__database__DB_TYPE=postgres

      - GITEA__database__HOST=db:5432

      - GITEA__database__NAME=gitea

      - GITEA__database__USER=gitea

      - GITEA__database__PASSWD=gitea_pass

      - GITEA__server__ROOT_URL=http://gitea.example.ru/

      - GITEA__server__LOCAL_ROOT_URL=http://localhost:3000/

      - GITEA__server__SSH_PORT=2222

      - GITEA__server__SSH_DOMAIN=gitea.example.ru

      - GITEA__packages__ENABLED=true

      - GITEA__server__DOMAIN=gitea.example.ru

      - GITEA__service__DISABLE_REGISTRATION=true

      - GITEA__service__REQUIRE_SIGNIN_VIEW=true

    depends_on:

      db:

        condition: service_healthy


  db:

    image: postgres:16-alpine

    container_name: gitea-db

    restart: unless-stopped

    volumes:

      - /mnt/data/docker_projects/gitea/db:/var/lib/postgresql/data

    environment:

      - POSTGRES_USER=gitea

      - POSTGRES_PASSWORD=gitea_pass

      - POSTGRES_DB=gitea

    healthcheck:

      test: ["CMD-SHELL", "pg_isready -U gitea"]

      interval: 5s

      timeout: 5s

      retries: 5

Активируем кнопку "Deploy the stack", Будет создан стек контейнеров.


Открываем порт для работы через web-интерфейс с Gitea

# firewall-cmd --permanent --add-port=3000/tcp

# firewall-cmd --reload

# firewall-cmd --list-all


Открываем WEB-интерфейс GITEA

http://IP:3000/

Будет показан стартовый экран первичных настроек.

Важно написать название сервиса. Например, Gitea smarts.

Прокручиваем вниз и нажимает "Установить Gitea".


Затем нужно задать первого пользователя - администратора системы и нажать "Регистрация аккаунта".

 


Будет создан пользователь и откроется интерфейс gitea.

Создаем репозитарий.

Раздел Репозитарий --> + Новый репозитарий.

Задаем Название репозитория.

Устанавливаем флаг Видимость (Сделать репозиторий приватным).

Другие флажки не устанавливаем.

Нажимаем кнопку "Создать репозитарий"

Теперь на сервере разработки создаем ключ SSH по которому с сервера можно будет коннектиться к Gitea.

Проверка налияи ключа:

# ls -l ~/.ssh/ | grep pub

Показываем ключ:

# cat ~/.ssh/id_ecdsa.pub 

ecdsa-sha2-nistp256 Arx7r.....rlgehf0/XGro4B9A= root@server

И переносим его в Gitea в раздел Аватар (справа вверху) --> Настройки --> Ключи SSH / GPG Keys --> Управление ключами SSH --> Добавить ключ

Задаем имя ключа, вставляем ключ в поле и проводим его добавление.

Сбросить пароль в gitea

Если вдруг забыл пароль:

# docker exec -it -u git gitea gitea admin user change-password \

  --username korolev \

  --password <НОВЫЙ_ВРЕМЕННЫЙ_ПАРОЛЬ>

После этого когда будет выполнен вход в gitea через WEB-интерфейс с новым временным паролем, система будет запрашивать смену пароля.


x

среда, 26 августа 2026 г.

Установка zabbix в контейнер Docker. Мониторинг хоста через agent

Создаем директорию для контейнера zabbix
# mkdir /mnt/data/docker_projects/zabbix

Создаем конфигурацию PostgreSQL
# nano /mnt/data/docker_projects/zabbix/postgresql.conf
listen_addresses = '*'
port = 5432
max_connections = 100
shared_buffers = 1GB
effective_cache_size = 3GB
maintenance_work_mem = 256MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 500
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 64MB
min_wal_size = 1GB
max_wal_size = 4GB


В интерфейсе portainer переходим в окружение local.
Выбираем пункты меню Stacks --> + Add Stack.
Прописываем имя в поле Name - zabbix/
Оставляем выбор метода задания параметров Web editor.
В поле редактора конфига вносим конфигурацию:
x-logging: &default-logging
  driver: json-file
  options:
    max-size: "50m"
    max-file: "3"
services:
  postgresql:
    image: postgres:16-alpine
    container_name: zabbix-postgres
    restart: unless-stopped
    environment:
      POSTGRES_USER: zabbix
      POSTGRES_PASSWORD: SecurePassword123
      POSTGRES_DB: zabbix
    volumes:
      - /mnt/data/docker_projects/zabbix/data_pgsql:/var/lib/postgresql/data:z
      - /mnt/data/docker_projects/zabbix/postgresql.conf:/etc/postgresql/postgresql.conf
    networks:
      - zabbix-net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U zabbix -d zabbix"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s
    cpus: 1.5
    mem_limit: 2g
    logging: *default-logging
  zabbix-server:
    image: zabbix/zabbix-server-pgsql:ubuntu-7.0-latest
    container_name: zabbix-server
    restart: unless-stopped
    environment:
      TZ: Europe/Samara
      DB_SERVER_HOST: postgresql
      POSTGRES_USER: zabbix
      POSTGRES_PASSWORD: SecurePassword123
      POSTGRES_DB: zabbix
      ZBX_CACHESIZE: 512M
      ZBX_HISTORYCACHESIZE: 128M
      ZBX_VALUECACHESIZE: 256M
      ZBX_STARTPOLLERS: 20
      ZBX_STARTTRAPPERS: 10
      ZBX_STARTDISCOVERERS: 5
    volumes:
      - /mnt/data/docker_projects/zabbix/data_zabbix_server:/var/lib/zabbix:z
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "10051:10051"
    depends_on:
      postgresql:
        condition: service_healthy
    networks:
      - zabbix-net
    cpus: 1.5
    mem_limit: 2g
    logging: *default-logging
 
  zabbix-web:
    image: zabbix/zabbix-web-apache-pgsql:ubuntu-7.0-latest
    container_name: zabbix-web
    restart: unless-stopped
    environment:
      PHP_TZ: Europe/Samara
      ZBX_SERVER_HOST: zabbix-server
      DB_SERVER_HOST: postgresql
      POSTGRES_USER: zabbix
      POSTGRES_PASSWORD: SecurePassword123
      POSTGRES_DB: zabbix
    ports:
      - "8080:8080"
    depends_on:
      zabbix-server:
        condition: service_started
      postgresql:
        condition: service_healthy
    networks:
      - zabbix-net
    cpus: 0.5
    mem_limit: 512m
    logging: *default-logging
networks:
  zabbix-net:
    driver: bridge


Открываем порт 8080 для zabbix:
# firewall-cmd --permanent --add-port=8080/tcp && firewall-cmd --reload

Открываем WEB-интерфейс http://IP:8080/
Логин / пароль по умолчанию: Admin / zabbix
Сразу меняем пароль в разделе User settings --> Profile --> Change password // новый_пароль
Перезаходим в Zabbix Admin / новый_пароль

Zabbix агент на хостовой машине:
Добавить репозиторий Zabbix на хостовую машину и настроить агента zabbix
# rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest.el9.noarch.rpm
# dnf clean all
# dnf install zabbix-agent -y

Настроить конфигурацию агента, что бы он в ативном режиме отправлял данные на сервер.
# nano /etc/zabbix_agentd.conf
Главные директивы:
  ServerActive=127.0.0.1:10051
  Hostname=rossyp
  RefreshActiveChecks=60

Заводим агента Zabbix в работу:
# systemctl enable zabbix-agent
# systemctl start zabbix-agent
# systemctl status zabbix-agent


В Интерфейсе Zabbix необходимо корректно прописать host, на который будут поступать данные от агента.
В активном режиме (Active Mode) агент сам инициирует соединение. Вот так прописывается хост:
Data collection → Hosts → Create host.
Host name: точное значение параметра Hostname из конфига агента rossyp.
Templates: шаблон Linux by Zabbix agent active.
Host groups: Linux servers.

Docker. Установка. Portainer CE. Установка.

1. Установка docker


1.1. Проверяем установку docker
# docker --version
# systemctl status docker

1.2 Устанавливаем docker, если его нет
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

2. Меняем root директорию docker, что бы docker не забивал корень (папку по умолчанию: /var/lib/docker/)
# mkdir -p /etc/docker
# nano /etc/docker/daemon.json
Содержимое:
{
  "data-root": "/mnt/data/docker",
  "default-address-pools": [
    {
      "base": "172.30.0.0/16",
      "size": 24
    }
  ]
}
# systemctl enable --now docker
После запуска docker все его файлы будут складываться в /mnt/data/docker
IP адреса контейнеров будут браться из 172.30.0.0/16 нарезаясь по /24.

3. Создаем папку проектов docker рядом с самой директорией для docker
# mkdir -p /mnt/data/docker_projects

4. Создаем docker контейнер с Portainer
# docker volume create portainer_data
Запускаем
# docker run -d \
  --name portainer \
  --restart=unless-stopped \
  -p 9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest
Проверяем работу
# docker ps | grep portainer

5. Открываем порт 9443 для доступ извне:
# firewall-cmd --permanent --add-port=9443/tcp
# firewall-cmd --reload
# firewall-cmd --list-all

6. Подключаемся к серверу по WEB-интерфейсу
https://10.0.1.60:9443
Браузер заругается на сертификат, делаем исключение для сайта и продолжаем. Придумываем пароль как минимум из 12 символов



В поле "Setup token" нужно ввести токен, который генерируется при старте контейнера без пользователя.
Это поле нужно посмотреть в консоле сервера и найти строчку где встречаается "setup_token=..."
Пример:
# docker logs portainer
...
2026/08/01 03:52PM INF github.com/portainer/portainer/api/cmd/portainer/main.go:256 > no administrator account configured; admin initialization and backup restore require this setup token in the X-Setup-Token header. Start with --no-setup-token to disable. | setup_token=19af87915ebf5626320257f13245744b2d3c7da57a288107fa87edeb8fb0096c
2026/08/01 03:52PM INF github.com/portainer/portainer/api/chisel/service.go:228 > generated a new Chisel private key file | private-key=/data/chisel/private-key.pem
...
Если не успеть войти в Portainer при старте за 5 минут, вход заблокируется и будет предупреждение:


Не беда, перезапускаем контейнер и у нас есть новые 5 минут для того что бы придумать пароль и ввести стартовый токен.
После успешной авторизации должны увидеть панель Portainer. Нажимаем Get Started и начинаем работать.