Почему при повторном запуске self-hosted GitLab nginx сообщает об ошибке, что порт уже занят?

Всем привет! Установил GitLab CE на Radxa Pi под DietPi (доступ к коду с других устройств, например с телефона). На сервере также настроен Netbird VPN. Для GitLab поставил PostgreSQL, но, по моему мнению, он не причём.
  • 27 июня 2026 г. 13:00
Ответы на вопрос 2
Коротко — потому что какой‑то процесс уже держит нужный порт (обычно 80 и/или 443), и при повторном старте встроенного nginx GitLab не может его занять. Причины типично такие:

- На системе уже запущен системный nginx/apache/caddy/другой веб‑сервер.  
- Какой‑то контейнер (Docker) занимает порт.  
- Процесс nginx остался висеть или остался PID‑файл, и новый экземпляр не стартует.  
- (Меньше вероятно) служба VPN/другой сервис захватывает порт.

Что сделать — пошагово диагностика и варианты исправления.

1) Найти, кто слушает порт(ы)
- Посмотреть слушающие TCP‑порты:
  sudo ss -ltnp | grep -E ':80|:443'
  или
  sudo lsof -i :80 -i :443
  или (если ss/lsof нет)
  sudo netstat -tlnp | grep -E ':80|:443'

Вы получите PID/имя процесса — это укажет виновника (nginx, apache2, caddy, docker-proxy и т. п.).

2) Проверить процессы nginx/GitLab
- Посмотреть процессы:
  ps aux | grep nginx
  sudo gitlab-ctl status
- Посмотреть логи nginx/GitLab:
  sudo gitlab-ctl tail nginx
  sudo journalctl -u nginx -e

3) Быстрое решение (если найден сторонний веб‑сервер)
- Если у вас обычный системный nginx/Apache, и вы хотите, чтобы GitLab управлял своим nginx — остановите/отключите системный:
  sudo systemctl stop nginx
  sudo systemctl disable nginx
  затем перезапустите GitLab nginx:
  sudo gitlab-ctl restart nginx
- Если вы хотите, чтобы GitLab был за внешним веб‑сервером, отключите встроенный nginx в конфиге GitLab (Omnibus):
  В /etc/gitlab/gitlab.rb добавить/изменить:
    nginx['enable'] = false
  затем
    sudo gitlab-ctl reconfigure
  и настройте внешний nginx/apache как reverse proxy к Unicorn/Workhorse GitLab.

4) Изменить порты GitLab (альтернатива)
- Можно назначить GitLab слушать другой порт:
  В /etc/gitlab/gitlab.rb:
    external_url 'http://gitlab.example.com:8080'
    nginx['listen_port'] = 8080
  затем
    sudo gitlab-ctl reconfigure

5) Если процесс «завис» или остался PID‑файл
- Убедитесь, что реального процесса нет, потом удалите stale PID и запустите заново:
  sudo pkill nginx   (или sudo kill <PID>)
  проверить нет ли процесса: ps aux | grep nginx
  удалить PID если есть (путь может быть /var/run/nginx.pid или /var/opt/gitlab/nginx/nginx.pid)
  sudo gitlab-ctl start

6) Не забудьте проверить Docker/контейнеры
- docker ps — возможно, контейнер занимает порт.

7) Особенности Netbird/VPN
- Netbird сам по себе обычно не занимает 80/443. Но проверьте, не подхватил ли он какой‑то проброс портов — команда ss/lsof покажет.

Если хотите, пришлите выводы этих команд:
- sudo ss -ltnp | grep -E ':80|:443'
- sudo gitlab-ctl status
- ps aux | grep nginx

и я подскажу конкретно по вашему случаю.
Ошибка связан с компонентом GitLab Registry (как докер реестр, только Ваш) <br/> Если не используете - отключите <br/> <pre><code>environment:
      GITLAB_OMNIBUS_CONFIG: |
.......
        registry['enable'] = false</code></pre> <br/> если используете  - настройте  в gitlab.rb <br/> <pre><code>registry['enable'] = true
registry['external_url'] = 'https://gitlab.mysite.ru:443'
registry['nginx']['listen_port'] = 443</code></pre> <br/> Но адаптировав под себя, можете в конфиге компостера, только погуглите как правильно писать параметры. <br/> И не забывайте после изменений внутри контейнера делать <pre><code>gitlab-ctl reconfigure
gitlab-ctl restart</code></pre>
Похожие вопросы