Kullanacağımız NEXUS sürümü 3.83.0-08 ve docker kalıbı sonatype/nexus3:3.83.2-alpine.
nexusTempVolume="/tmp/nexusVolume"
mkdir -p $nexusTempVolume
cd $nexusTempVolume
# CSRF ile her kritik isteğe rastgele üretilmiş ve yalnızca o oturumda geçerli olan bir CSRF token (jetonu) eklenmesidir. Sunucu, gelen istekteki tokenin doğru olup olmadığını kontrol ederek, token yoksa veya yanlışsa isteği reddeder. Denemek için kullanacağımız NEXUS üzerinde bu özelliği kapatalım ki aşağıdaki işlemleri kolaylıkla çalıştırabilelim.
nexusPropertiesPath="$nexusTempVolume/nexus.properties"
cat > $nexusPropertiesPath <<EOF
nexus.security.csrf.enabled=false
EOF
# Konteyner kapansa dahi verileri kaybetmeyelim diye kalıcı dizin bağlayalım:
nexusDataDir="$nexusTempVolume/nexus-data"
rm -rf $nexusDataDir
mkdir -p $nexusDataDir
# Ayaktaysa silelim konteyneri, yeniden yaratacağız zaten:
docker rm -f nexus
# Aşağıdaki kaynakları NEXUS'un web arayüzünden Settings->Support->Status üzerinden gördüğüm için yüksek tuttum:
docker run -d \
--cpus="4" \
--memory="4g" \
-p 8081:8081 \
-v $nexusDataDir:/nexus-data \
-v $nexusPropertiesPath:/nexus-data/etc/nexus.properties:ro \
--name nexus \
sonatype/nexus3:3.83.2-alpineÖnce web arayüzünden sisteme giriş yapabilelim diye sistemin admin kullanıcısı için atadığı şifreyi ya günlük çıktılarında ya bir dosyada buluruz dedik ve /nexus-data/admin.password dosyasında bulduk:
docker exec -it nexus cat /nexus-data/admin.passwordAşağıdaki API isteğiyle şifreyi 111 olarak değiştirebiliriz:
otomatikSifre=$(docker exec nexus cat /nexus-data/admin.password)
curl -vvv -X 'PUT' -u admin:$otomatikSifre \
'http://localhost:8081/service/rest/v1/security/users/admin/change-password' \
-H 'accept: application/json' \
-H 'Content-Type: text/plain' \
-d '111'curl -X POST http://localhost:8081/service/rest/v1/security/users \
-vvv \
-u admin:111 \
-H "Content-Type: application/json" \
-d '{
"userId": "cem",
"firstName": "Cem",
"lastName": "Topkaya",
"emailAddress": "[email protected]",
"password": "111",
"status": "active",
"roles": [
"nx-admin",
"nx-anonymous"
]
}'curl -X 'POST' \
-u admin:111 \
'http://localhost:8081/service/rest/v1/repositories/npm/hosted' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"name": "npm-internal",
"online": true,
"storage": {
"blobStoreName": "default",
"strictContentTypeValidation": true,
"writePolicy": "allow_once"
},
"cleanup": {
"policyNames": [
]
},
"component": {
"proprietaryComponents": true
}
}' \
-vvvcurl -u admin:111 \
'http://localhost:8081/service/rest/v1/repositories/npm/hosted/npm-internal' \
-H 'accept: application/json' \
-vvvcurl 'http://localhost:8081/service/rest/v1/security/realms/active' \
-X 'PUT' \
-u admin:111 \
-H 'Content-Type: application/json' \
--data-raw '["NpmToken","NexusAuthenticatingRealm"]' \
-vvvBoş dizin yaratıp içinde package.json oluşacak şekilde npm init komutunu her soruya varsayılan cevabı versin diye -y anahtarıyla koşturacağız:
# Proje dizinini oluşturalım
projectVolume="/tmp/herProject"
rm -rf $projectVolume
mkdir -p $projectVolume
cd $projectVolume
# package.json ile projenin ilk dosyasını oluşturalım
npm init -y
# sürekli npm kütüğünün adresini komutlara geçmemek için .npmrc dosyasına yazalım:
cat > .npmrc <<EOF
registry=http://localhost:8081/repository/npm-internal/
EOF
# "npm add-user" Komutuyla kullanıcı adı, şifresi, eposta adresini girmemek için .npmrc'ye yazalım:
BASE64_ENCODED_USERNAME_PASSWORD=$(echo -n 'cem:111' | base64)
cat >> .npmrc <<EOF
//localhost:8081/repository/npm-internal/:username=cem
//localhost:8081/repository/npm-internal/:_password=$BASE64_ENCODED_USERNAME_PASSWORD
//localhost:8081/repository/npm-internal/:[email protected]
//localhost:8081/repository/npm-internal/:always-auth=true
EOF
npm publish
npm viewEğer yukarıdaki gibi .npmrc dosyası kullanmayacak olsaydık komutları ve kütük adresini aşağıdaki gibi yazacaktık:
# yukarıda yaratılan kullanıcının bilgileri ("cem", "111") girilerek kullanıcı oluşturulur
npm add-user --registry=http://localhost:8081/repository/npm-internal/
# paket oluşturulur (tar.gz) ve NPM kütüğüne yüklenir
npm publish --registry=http://localhost:8081/repository/npm-internal/
# Paketin bilgileri NPM kütüğünden çekilir
npm view --registry=http://localhost:8081/repository/npm-internal/