Обновить
24
Александр Карабанов@karabanov

Системный администратор

3
Подписчики
Хабр Карьера
Отправить сообщение

Nginx и Certbot можно заменить на Angie - он умеет получать сертификаты по ACME и проксировать трафик в контейнеры на основании указанных labels.

Я выше приводил ссылку на документацию с готовым примером - NS надо прописать только для _acme-challenge:

_acme-challenge.example.com. 60    IN      NS       ns.example.com.
             ns.example.com. 60    IN       A       93.184.215.14

Прочие NS сервера, в данном случае, не играют роли и никак не помешают, равно как и им это не помешает.

На HTTP-проверку Angie отвечает сам, вот и на DNS-проверку он тоже способен ответить сам - не придётся генерировать ключи, писать скрипты или длинные команды в консоли.

Между тем повторюсь - обычный механизм с добавлением TXT записи в DNS так же доступен и в той же документации описан.

Методы получения сертификата там точно такие же, как и у certbot - никто не запрещает добавлять TXT запись скриптом, но задачу можно упростить добавив для этого домена NS запись указывающую на сервер с Angie, но делать это не обязательно

с помощью nginx такой сертификат создать невозможно

С помощью Angie возможно, причём если в качестве NS сервера указать сервере с Angie, даже отдельный механизм для добавления TXT записи в DNS не понадобится.

Тоже самое только в контейнере

docker-compose.yml
networks:
  gitlab_net:
    name: gitlab
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: '172.28.3.0/24'
        gateway: '172.28.3.254'
        ip_range: '172.28.3.0/28'
    driver_opts:
      com.docker.network.bridge.name: gitlab-bridge

services:
  gitlab:
    container_name: gitlab
    hostname: gitlab.example.com
    image: gitlab/gitlab-ee:17.11.2-ee.0
    shm_size: '512mb'
    environment:
      SENSELESS: variable
      GITLAB_OMNIBUS_CONFIG: |
          ### Postgresql settings
          ###! Docs: https://docs.gitlab.com/omnibus/settings/database.html
          postgresql['enable'] = true
          postgresql['listen_address'] = '0.0.0.0'
          postgresql['port'] = 5432
          postgresql['md5_auth_cidr_addresses'] = ['127.0.0.1/24', '172.28.3.0/24', '197.15.22.0/24']
          postgresql['trust_auth_cidr_addresses'] = %w(127.0.0.1/24)

          # force ssl on all connections defined in trust_auth_cidr_addresses and md5_auth_cidr_addresses
          postgresql['hostssl'] = true
          postgresql['db_sslmode'] = 'require'

          # Disable monitoring
          prometheus_monitoring['enable'] = false
          prometheus['enable'] = false
          postgres_exporter['enable'] = false
          redis_exporter['enable'] = false
          node_exporter['enable'] = false
          alertmanager['enable'] = false

          # Custom settings
          postgresql['max_connections'] = 512
          postgresql['shared_buffers'] = '4096MB'

          external_url 'https://gitlab.example.com'

          # gitlab_rails['gitlab_ssh_host'] = 'ssh.host_example.com'
          gitlab_rails['time_zone'] = 'Europe/Moscow'
          gitlab_rails['gitlab_email_enabled'] = true
          gitlab_rails['gitlab_email_display_name'] = 'My GitLab'
          gitlab_rails['webhook_timeout'] = 40

          ### GitLab email server settings
          ###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
          ###! **Use smtp instead of sendmail/postfix.**

          gitlab_rails['smtp_enable'] = true
          gitlab_rails['smtp_address'] = "smtp.yandex.ru"
          gitlab_rails['smtp_port'] = 465
          gitlab_rails['smtp_user_name'] = "gitlab@example.com"
          # user password
          #gitlab_rails['smtp_password'] = "xxxxxxxxxxxxxxxxxxx"
          # application password
          gitlab_rails['smtp_password'] = "xxxxxxxxxxxxxxxxxxx"
          gitlab_rails['smtp_domain'] = "example.com"
          gitlab_rails['gitlab_email_from'] = "gitlab@example.com"
          gitlab_rails['smtp_authentication'] = "login"
          gitlab_rails['smtp_enable_starttls_auto'] = false
          gitlab_rails['smtp_tls'] = true
          gitlab_rails['smtp_openssl_verify_mode'] = "peer"

          letsencrypt['enable'] = true
          letsencrypt['contact_emails'] = ['admin@example.com']
          letsencrypt['auto_renew_hour'] = "12"
          letsencrypt['auto_renew_minute'] = "30"
          letsencrypt['auto_renew_day_of_month'] = "*/7"

          nginx['redirect_http_to_https'] = true
          nginx['hsts_max_age'] = 63072000
          nginx['hsts_include_subdomains'] = true
          nginx['http2_enabled'] = true
          nginx['proxy_set_headers'] = {
            'X-Forwarded-Proto' => 'https',
            'X-Forwarded-Ssl' => 'on'
          }

          registry['enable'] = false

          ### Backup Settings
          ###! Docs: https://docs.gitlab.com/omnibus/settings/backups.html
          gitlab_rails['manage_backup_path'] = true
          gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
          ## Limit backup lifetime to 2 days - 172800 seconds
          gitlab_rails['backup_keep_time'] = 86400

    # In the event of an disaster,
    # the container must be stopped manually
    # and must not start automatically.
    restart: unless-stopped
    ports:
      - "197.15.22.27:22:22"
      - "80:80"
      - "443:443"
    volumes:
      - './gitlab.example.com/config:/etc/gitlab'
      - './gitlab.example.com/logs:/var/log/gitlab'
      - './gitlab.example.com/data:/var/opt/gitlab'
      - './gitlab.example.com/hooks:/opt/gitlab/embedded/service/gitlab-shell/hooks'
      - './gitlab.example.com/backups:/var/opt/gitlab/backups'
    networks:
      gitlab_net:
        ipv4_address: 172.28.3.1

DNS-01 challenge в GitLab не реализован, поэтому придётся использовать HTTP-01 challenge, либо получать сертификат с помощью certbot

Появилось некое решение supercronic - ещё не тестировал, но судя по описанию выглядит перспективно.

В Community Edition GitLab в актуальной версии уже внесены настройки, запрещающие по умолчанию аппрувить свои изменения. Это работает даже в случаях, когда разработчик добавляет коммит в чужую ветку — он всё равно не сможет влить в неё изменения без аппрува.

В Community Edition GitLab аппрувы не доступны - кнопка там есть но она ни ни что не влияет, даже если не проставить аппрувы мерж можно будет выполнить всё равно. Настоящие аппрувы доступны начиная с Premium

Или вы нашли какой-то способ включить аппрувы в Community Edition GitLab?

DevOps - это не профессия, а методология.

Создать фаил secret-tls-consul.yaml

Это можно сделать одним действием:

kubectl create secret tls secret-tls \
    --namespace test \
    --key privkey.pem \
    --cert fullchain.pem

VTS тоже не совсем настоящие метрики экспортирует, к примеру данные о запросе можно получить только после того, как он будет завершён, а сколько запросов обрабатывается в данный момент непонятно. Это почти тоже самое, что и логи парсить...

У Angie есть модуль prometheus который позволяет экспортировать более точные метрики.

https://angie.software/ выглядит привлекательнее tengine, как мне кажется, да и API у него имеется.

Кстати интервью с разработчиками сегодня опубликовали: "Интервью с Валентином Бартеневым: как бывшие сотрудники Nginx разрабатывают отечественный веб-сервер Angie"

От Деливери отстался только фронтенд, а внутри в качестве бека Яндекс.Еда

добавление jdk8 и jdk11 (строка 52)
удаление jdk11 (строка 79)

Фактически из образа jdk11 не удаляется - она остаётся на том слое, где была установлена.

Немного дополню про гитерминизм - помимо добавления в werf-giterminism.yaml:

giterminismConfigVersion: 1
helm:
  allowUncommittedFiles:
    - ".helm/Chart.lock"
    - ".helm/charts/*.tgz"

Важно так же добавить в .gitignore:

.helm/Chart.lock
.helm/charts/*.tgz

Иначе во время деплоя получим:

Error: phase build on image builder stage gitArchive handler failed: the following untracked files must be committed:
  - .helm/Chart.lock
  - .helm/charts/classic-php-apps-1.0.4.tgz
... skipped ...

Это особенность Kubelet и для его предсказуемого поведения SWAP должен быть отключен.

Кстати, фича реквест за интеграцию с Kubernetis вот тут имеется

Система оркестрации контейнеров называется не Kubernetis, а Kubernetes

Название Kubernetis неверное ;-)

Бывает натыкаюсь в интернете на мега понятные посты, а потом смотрю, кто автор и оказывается это написал я. Автор этой статьи не я, но написано настолько доходчиво (понятна буквально каждая буква), что меня не покидало ощущение, буд-то это я сам написал.

Спасибо.

firewalld - это обёртка для утилиты iptables

Если в кратце то да. Это примерно, как глоток холодной воды в пустыне.

PS

<dushnila_mode>

Фирвол это netfilter, а iptables - это утилита для его настройки

</dushnila_mode>

1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Псков, Псковская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Администратор серверов, DevOps-инженер
Старший
От 350 000 ₽
Git
Linux
Docker