Найти в Дзене
Игорь Сотников

Развертывание Sonatype Nexus в Docker с Nginx-проксированием и SSL-сертификатом

Sonatype Nexus — популярный репозиторий управления артефактами программного обеспечения, широко используемый разработчиками Java/Maven проектов. Для повышения безопасности доступ к серверу рекомендуется защищать HTTPS-соединением с использованием SSL/TLS сертификата. Чтобы обеспечить безопасность и масштабируемость, мы будем разворачивать Nginx в качестве обратного прокси сервера перед контейнером Nexus, используя инфраструктуру Docker.Что понадобится? Docker
Ansible
Сертификат SSL (например, Let's Encrypt)
Базовые знания Linux и bash-команд
Шаги развертывания
1. Подготовка инфраструктуры
Создаем каталог проекта, внутри которого будут храниться необходимые файлы конфигурации: mkdir sonatype-nexus-docker && cd $_
2. Создание сети Docker
Чтобы контейнеры могли взаимодействовать друг с другом, создадим сеть Docker: docker network create nexus-network
3. Настройка Docker Compose файла
Создаем файл docker-compose.yml следующего содержания: version: '3'
services:
nginx:
image: n
Оглавление

Введение


Sonatype Nexus — популярный репозиторий управления артефактами программного обеспечения, широко используемый разработчиками Java/Maven проектов. Для повышения безопасности доступ к серверу рекомендуется защищать HTTPS-соединением с использованием SSL/TLS сертификата. Чтобы обеспечить безопасность и масштабируемость, мы будем разворачивать Nginx в качестве обратного прокси сервера перед контейнером Nexus, используя инфраструктуру Docker.Что понадобится?


Для успешного развёртывания потребуется следующее программное обеспечение:

Docker
Ansible
Сертификат SSL (например, Let's Encrypt)
Базовые знания Linux и bash-команд


Шаги развертывания
1. Подготовка инфраструктуры
Создаем каталог проекта, внутри которого будут храниться необходимые файлы конфигурации:

mkdir sonatype-nexus-docker && cd $_

2. Создание сети Docker
Чтобы контейнеры могли взаимодействовать друг с другом, создадим сеть Docker:

docker network create nexus-network


3. Настройка Docker Compose файла


Создаем файл docker-compose.yml следующего содержания:

version: '3'
services:
nginx:
image: nginx:alpine
container_name: nginx-proxy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- /path/to/certs/:/etc/nginx/certs/
networks:
- nexus-network

nexus:
image: sonatype/nexus3
container_name: nexus-repo
environment:
- JAVA_OPTS=-Xms1200m -Xmx1200m
ports:
- "8081:8081"
volumes:
- nexus-data:/nexus-data
networks:
- nexus-network

volumes:
nexus-data:

networks:
nexus-network:
external: true


4. Конфигурация Nginx
Создаем конфигурационный файл ./nginx.conf, который обеспечит правильное проксирование запросов и использование SSL:

server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;

ssl_certificate /etc/nginx/certs/your-cert.pem;
ssl_certificate_key /etc/nginx/certs/your-key.key;

location / {
proxy_pass http://nexus:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}


Замените
yourdomain.com на ваш домен и укажите путь к сертификатам (your-cert.pem и your-key.key) в соответствующих местах.

5. Запуск контейнеров
Запустим наши сервисы с помощью следующей команды:

docker-compose up -d


Теперь контейнеры запущены, и ваша система готова к работе!Автоматизация с помощью Ansible
Чтобы упростить процесс развёртывания и сделать его повторяемым, создаем плейбук для Ansible.

Playbook Ansible

Файл playbook.yaml выглядит следующим образом:

---
- name: Deploy Sonatype Nexus with Nginx Proxy
hosts: all
become: yes
tasks:
- name: Install docker-ce package
apt:
update_cache: yes
state: present
pkg: docker-ce

- name: Pull the latest images from Docker Hub
command: >
docker pull {{ item }}
loop:
- nginx:alpine
- sonatype/nexus3

- name: Create a Docker network for containers to communicate
shell: |
if ! docker network ls | grep -q nexus-network; then
docker network create nexus-network
fi

- name: Start services using Docker Compose
command: docker-compose -f /path/to/docker-compose.yml up -d


Перед выполнением убедитесь, что настроили переменную пути
/path/to/docker-compose.yml.

Затем запускаем этот плейбук командой:

ansible-playbook playbook.yaml


Заключение


Мы успешно установили систему развертывания Sonatype Nexus с использованием Docker, обеспечили защиту HTTPS путем настройки Nginx-прокси и автоматизировали весь процесс с помощью Ansible. Теперь у вас есть готовое решение для безопасного хранения и распространения артефактов ваших приложений. Я надееюсь, что эта статья помогла вам разобраться в процессе установки и конфигурирования Sonatype Nexus с SSL/TLS поддержкой!

#DevOps #nexus #opensource