Nexus это поддержка Nuget、Docker、Npm Менеджер склада различных пакетов, который можно использовать для хранения и распространения частных пакетов и кэширования официальных пакетов. Эта статья научит вас, как использовать его шаг за шагом. Nexus строить Собственныйиз NuGe t& Docker Частный склад.
Создайте каталог для подключения данных и предоставьте разрешения: UID 200 запустить в виде mkdir ./data && chown -R 200 ./data
Укажите версию:sonatype/nexus3:3.61.0
по умолчаниюпорт:8081
Укажите префикс доступа: /
Укажите сеть: DevopsNetwork (docker network create devopsnetwork
)
Сервер развертывания IP:192.168.123.214
Создать compose.yml
version: '3.1'
services:
nexus:
image: sonatype/nexus3:3.61.0
container_name: nexus_3_61
restart: always
environment:
# Nexus контекстный путь
NEXUS_CONTEXT: /
# Укажите параметры JVM
INSTALL4J_ADD_VM_PARAMS: -Xms1g -Xmx1g -XX:MaxDirectMemorySize=3g
volumes:
# Нужно сначала дать Разрешения chown -R 200 ./data
- ./data:/nexus-data
ports:
- "8081:8081"
networks:
- devopsnetwork
networks:
devopsnetwork:
external: true
бегать:docker compose up -d
Для запуска требуется время, пожалуйста, наберитесь терпения. 2-3 минута,доступ:http://192.168.123.214:8081/
Вы можете видеть, что пароль администратора по умолчанию находится в ./data/admin.password. После его получения нажмите «Войти» в правом верхнем углу, чтобы войти в систему.
При успешном входе вам будет предложено сменить пароль devops666 и отключить анонимный доступ.
server {
listen 80;
listen 443 ssl;
server_name nexus.devops.test.com;
# allow large uploads of files
client_max_body_size 1G;
ssl_certificate /certs/nexus.devops.test.com/server.crt;
ssl_certificate_key /certs/nexus.devops.test.com/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://nexus_3_61: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;
}
}
На предприятии может быть несколько команд или групп проектов, и пакеты каждой команды могут быть разделены или иметь разные префиксы имен.
Разрешения на чтение и запись пакета должны быть разделены, то есть загрузчик и пользователь разделены. У загрузчика есть разрешения на чтение и запись, а пользователю нужны только права доступа.
Разрешенияиллюстрировать:документ
Роль тяги: тягач ,настраивать Разрешения:nx-repository-view-*-*-browse
nx-repository-view-*-*-read
Роль толкателя: толкатель ,настраивать Разрешения:nx-component-upload
nx-repository-view-*--
Учетная запись Pull: puller, установите пароль devops666, установите роль: pull-man
Учетная запись Push: pusher, установите пароль devops666, установите роль: push-man, ключ API, используемый nuget, на данный момент не используется, но будет использоваться позже при управлении докером.
Толкать NuGet Сумкакогда это необходимоиспользовать,Нажмитеуправлять Аватар участника->NuGet API ключ->генерироватьключ
Ключ был получен на предыдущем шаге, но напрямую его использовать нельзя. Его нужно задать в настройках. Security>Realms включено в NuGet API-Key Realm。
Похоже на: метод проверки возможности предоставления возможности,полеиллюстрироватьВидетьдокумент
по умолчанию nuget Хостинг пакетов включен, Чтобы предотвратить злонамеренное изменение пакета, вы можете nuget-hosted склад изменен для отключения перераспределения,Когда над разработкой сотрудничают несколько человек, это может предотвратить перезапись Сумки другими.,Связанные документыиллюстрировать . Когда перераспределение отключено в настройках, Толкат будет возвращаться при повторении Сумкаиз. 400 ошибка
Поскольку в предыдущей конфигурации анонимный доступ был отключен и настроена соответствующая учетная запись, для удобства Nexus Вывести из сервиса Nuget Пакеты можно настроить через файл конфигурации. nuget.config (документ)указать nuget Источник Nexus Служить nexus.devops.test.com
обозначение Конфигурация Фестивальизимяиисточник(по умолчаниюиспользовать NuGet V3,V2 Нет необходимости добавлять index.json)
Укажите пароль учетной записи для использования источника пакета.
Поместите его в тот же каталог, что и решение, чтобы оно вступило в силу.
файл nuget.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nexus.devops.test.com" value="https://nexus.devops.test.com/repository/nuget-group/index.json" />
</packageSources>
<packageSourceCredentials>
<nexus.devops.test.com>
<add key="Username" value="puller" />
<add key="ClearTextPassword" value="devops666" />
</nexus.devops.test.com>
</packageSourceCredentials>
</configuration>
отlocalТолкатьone NuGet Доставка Nexus Хостинг Служить требует двух шагов, играя Сумка, Толкать. Чтобы лучше изиспользовать, вы можете объединить скрипт для быстрого ввода Сумки. Возьмите предыдущий пример пакета вычисляемых полей и введите его в Сумку. NuGet Сумка Толкать Nexus середина
Структура каталогов следующая
Сначала создайте новую конфигурацию .nuspec шаблон,При необходимости измените информацию, связанную с библиотекой.,nuspec Конфигурационный документ
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>Devops.Common.EvalSDK</id>
<version>0.0.15</version>
<authors>yimo</authors>
<description>Расчетное поле</description>
<projectUrl>https://github.com/yimogit/MeDevOps</projectUrl>
<tags>Devops.Common.EvalSDK</tags>
<repository type="git" url="https://github.com/yimogit/MeDevOps.git" branch="main"/>
</metadata>
<files>
<file src="..\Devops.Common.EvalSDK\bin\Release***.dll" target="lib" />
<file src="..\Devops.Common.EvalSDK\bin\Release***.pdb" target="lib" />
</files>
</package>
Справочник по библиотекам упаковки, в нескольких версиях используется TargetFrameworks.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.1;netcoreapp3.1;net5.0;net7.0;</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<DocumentationFile>bin$(Configuration)$(TargetFramework)\Devops.Common.EvalSDK.xml</DocumentationFile>
</PropertyGroup>
</Project>
Создайте новый сценарий упаковки, измените ключ и адрес, измените номер версии перед каждым последующим выполнением, а затем выполните его.
#!/bin/bash
pwd
current_dir=`pwd`
#nuget apiключ
nuget_key="aa7890bf-8dfb-33e3-bed9-c1571e5b9b96"
#hostсклададрес
nuget_source="https://nexus.devops.test.com/repository/nuget-hosted/"
#Сумкаизская версия
package_version="0.0.2"
#Сумкаимя nupkg_pakcage_name="Devops.Common.EvalSDK.${package_version}.nupkg"
#Путь к библиотеке проекта
csproj_path="../Devops.Common.EvalSDK/Devops.Common.EvalSDK.csproj"
#Сумка Конфигурация
nuspec_path="Devops.Common.EvalSDK.nuspec"
#nuspec path , relative csproj path
nuspec_path_relative_csproj="../pack/Devops.Common.EvalSDK.nuspec"
#git pull
#Удалить старую версию
rm -f nupkg_pakcage_name
cd ${current_dir}
#Альтернативная версия
sed -i 's|<version>.*</version>|<version>'${package_version}'</version>|g' ${nuspec_path}
echo pack ${nupkg_pakcage_name}
#Помещаем документ Сумкаnupkg в текущий каталог пакета Сумкаимя.x.x.x.nupkg dotnet pack ${csproj_path} -p:NuspecFile=${nuspec_path_relative_csproj} -c Release --output ../pack -v m
#Оцените, успешно ли да играет в Сумку
echo
if [ ! -f "${nupkg_pakcage_name}" ]; then
echo "pack ${nupkg_pakcage_name} is error"
exit -1
fi
#Толкать Сумка
echo push ${nupkg_pakcage_name}
dotnet nuget push ${nupkg_pakcage_name} -k ${nuget_key} -s ${nuget_source}
Выполнено успешно с использованием Nexus источникиз Сумкауправлятьустройствосерединамогу искатьиспользовать Понятно
Текущая версия поддерживает docker Управление изображениями с использованием поиска через docker-group Отправить изображение требует корпоративной версии, но вы также можете добиться эффекта Толкатиза, вытащив доменное имя/порт и Толкатьиз отдельно.
Вы можете сначала посмотреть блок-схему ниже, и тогда будет понятно, как ее настроить дальше.
Разрешенияиллюстрировать:документ Вот и весь складиз пула также Толкать Разрешения,и То же, что и спереди, только создатель может соответствовать из docker Разрешения
Роль тяги: тягач ,настраивать Разрешения:nx-repository-view-*-*-browse
nx-repository-view-*-*-read
Роль толкателя: толкатель ,настраивать Разрешения:nx-component-upload
nx-repository-view-*--
Учетная запись Pull: puller, установите пароль devops666, установите роль: pull-man
Толкатьсчет Число:pusher,Установить пароль devops666, установите роль: push-man
Как и предыдущие три склада nuget, также создаются три новых склада докера.
push.nexus.devops.test.com
(открытьисточникверсия нетподдерживатьиспользовать group Отправить изображение)https://registry-1.docker.io
ииспользовать Use Docker Hub изиндексСогласно документации и фактическому использованию, https необходим, поэтому он опирается на предыдущий nginx Заявка на сертификат а также dns Служитьизиспользовать, мы можем получить к нему доступ в локальной сети середина Конфигурация доменного имени nexus3 предоставил docker зеркалосклад Служить
по умолчаниютянутьиспользовать nexus.devops.test.com
,Толкатьноиспользовать:push.nexus.devops.test.com
Ниже приведены nginx из Конфигурация, измененная на основе официального документа, в основном заменяющая доменное имя середина и Сертиф. Икат, потому что локальная сеть из пользовательского доменного имени должна находиться на клиенте. Установить Сертификат, чтобы не было небезопасных запросов, по той же причине. linux Для его использования также необходимо установить соответствующий pem Сертификат
server {
listen 80;
listen 443 ssl;
server_name nexus.devops.test.com;
# allow large uploads of files
client_max_body_size 10G;
ssl_certificate /certs/nexus.devops.test.com/server.crt;
ssl_certificate_key /certs/nexus.devops.test.com/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /v2 {
proxy_pass http://nexus_3_61:8081/repository/docker-group/$request_uri;
proxy_set_header Host $host:$server_port;
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 "https";
}
location /v1 {
proxy_pass http://nexus_3_61:8081/repository/docker-group/$request_uri;
proxy_set_header Host $host:$server_port;
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 "https";
}
location / {
proxy_pass http://nexus_3_61: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;
proxy_set_header X-Forwarded-Proto "https";
}
}
server {
listen 80;
listen 443 ssl;
server_name push.nexus.devops.test.com;
# allow large uploads of files
client_max_body_size 10G;
ssl_certificate /certs/push.nexus.devops.test.com/server.crt;
ssl_certificate_key /certs/push.nexus.devops.test.com/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /v2 {
proxy_pass http://nexus_3_61:8081/repository/docker-hosted/$request_uri;
proxy_set_header Host $host:$server_port;
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 "https";
}
location /v1 {
proxy_pass http://nexus_3_61:8081/repository/docker-hosted/$request_uri;
proxy_set_header Host $host:$server_port;
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 "https";
}
location / {
proxy_pass http://nexus_3_61: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;
proxy_set_header X-Forwarded-Proto "https";
}
}
Подтверждение доступа после перезагрузки конфигурации вступает в силу https да, вступит ли в силу, а такжеможно просмотреть restapi Доступен ли интерфейс?
Пока что частный docker склад уже создан. Эта статья основана на локальной сети с собственным доменным именем. Если сервер да Служить нормально разрешает доменное имя на сервер Служить, примените. ssl Будет меньше подводных камней типа Сертификата и так далее. Далее поговорим о том, как это сделать nexus.devops.test.com
,push.nexus.devops.test.com
Приходитьтянуть&Толкать docker Зеркальный
Потому что доменное имя этой статьи — даLANсерединаиз. dns синтаксический анализ, поэтому он должен быть в linux серединанастраивать dns, убедитесь, что доменное имя доступно nexus доступ,Служить устройство не нужно рассматривать,Пропустите и перейдите непосредственно к использованию
редактировать dns Конфигурациядокумент:vi /etc/resolv.conf
nameserver 192.168.123.214
nameserver 114.114.114.114
писатьназад Перезапуск Сеть вступает в силу:systemctl restart NetworkManager
ping nexus.devops.test.com
IP 192.168.123.214, это правильно.
cp ./myCA.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust -f
ps aux | grep openssl
из pid: xxx xxx pid Число pts/0 R+,kill Терять pid, автоматически перезапустится kill pidЧисло
) илипрямой Перезапуск Служитьустройство Вступить в силу(reboot
)Потому что да Самоподписанный сертификат,если не Установить Сертификат Сразуиспользовать docker login nexus.devops.test.com
подскажет:tls: failed to verify certificate: x509: certificate signed by unknown authority
docker login nexus.devops.test.com -u puller -p devops666
docker login push.nexus.devops.test.com -u pusher -p devops666
Вход успешенназад Можно просмотреть Конфигурацияизисточник:cat /root/.docker/config.json
docker pull nexus.devops.test.com/nginx
docker login push.nexus.devops.test.com -u pusher -p devops666
docker tag nexus.devops.test.com/nginx
push.nexus.devops.test.com/nginx_custom
docker push push.nexus.devops.test.com/nginx_custom
Каталог данных не настроен. Разрешения при запуске не удалось.
Каталог данных. Разрешения: Этот каталог должен быть доступен Nexus писать процесс, с UID 200 запустить в виде
chown -R 200 ./data
Сравнение конфигураций NuGet V2 и NuGet V3
NuGet из API ключгенерировать,нода Нетдавать возможностьполе Конфигурация,Не могущий Толкать Доставка Nexus
Когда перераспределение отключено,Но да Толкать была такая же из Сумка,вернет 400
Linux начальство Установить Сертификат,смотретьприезжать Много информации естьдаосуществлятьupdate-ca-trust
Вот и все. Я выполнил шаги по настройке, но это не сработало. Наконец, я подумал, что это может быть потому, что это не подействовало. После перезапуска я обнаружил, что это правда. Поразмыслив, так и должно быть. openssl Его нужно перезапустить, и попробовав, он работает, и тогда проблему можно решить и сделать следующий шаг. Если доменное имя локальной сети неприменимо, проблем будет гораздо меньше~
Когда создавался склад Docker, мне потребовалось много времени, чтобы разобраться в протоколе.,Найти в статье все порты данастройки,Конфигурация доменного имени также позволяет немного разобраться в документе.,Тогда попробуйте.
Прежде чем решить проблему, Windows не может автоматически вводить информацию при подписании Сертификата.,Нужно написать как ниже,ссылка
winpty openssl req -new -key $DOMAIN/server.key -out $DOMAIN/server.csr -subj "//C=CN\ST=Beijing\L=Beijing\O=TestOrganization\OU=TestOU\CN=TestRootCA\emailAddress=admin@test.com"
Эта статья — плод любви, и ее определенно стоит собрать. Я также надеюсь, что читатели поставят ей еще раз лайк ~ Есть дороги в горе книг, и трудолюбие – путь, и нет предела морю учений, и трудолюбие – лодка. Одержим обучением и не может выбраться. jpg