feat
This commit is contained in:
parent
8434a7ad29
commit
67e80064a9
175
initnexus
175
initnexus
|
@ -1,170 +1,15 @@
|
||||||
正在思考
|
|
||||||
|
|
||||||
好的,我现在需要帮助用户在Docker Compose中运行Nexus并初始化配置LDAP。首先,我需要回想一下Nexus的基本配置步骤以及如何通过Docker设置。Nexus Repository Manager通常使用Docker镜像来部署,而Docker Compose可以方便地定义服务配置。
|
# 下载 unzip RPM 包
|
||||||
|
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/unzip-6.0-21.el7.x86_64.rpm
|
||||||
|
|
||||||
接下来,用户提到要初始化配置LDAP。这意味着在Nexus启动后,需要自动配置LDAP设置,而不是手动通过UI操作。这可能需要利用Nexus的API或者预先准备的配置文件。例如,Nexus允许通过Groovy脚本进行自动化配置,这些脚本可以在容器启动时执行。
|
# 安装(推荐使用 yum/dnf)
|
||||||
|
sudo yum localinstall unzip-6.0-21.el7.x86_64.rpm
|
||||||
|
|
||||||
那么,首先我需要确定Docker Compose文件的编写,包括Nexus服务的定义,可能需要挂载卷来保存数据和配置。另外,需要如何让Nexus在第一次启动时自动应用LDAP配置。可能的做法是将一个Groovy脚本放到特定的目录下,比如/opt/sonatype/sonatype-work/nexus3/startup/,这样Nexus会在启动时执行这些脚本。
|
# 验证安装
|
||||||
|
unzip -v
|
||||||
|
|
||||||
接下来需要考虑LDAP的具体配置参数,比如服务器地址、端口、绑定DN、密码、用户和组的base DN等。用户的LDAP信息需要替换到脚本或配置文件中。此外,还需要处理可能的安全问题,如密码的管理,可能需要使用环境变量或Docker secrets。
|
|
||||||
|
|
||||||
另外,要确保Groovy脚本的正确性。可能需要查阅Nexus的API文档,确认如何通过Groovy脚本配置LDAP。可能需要创建LdapServer实例,设置相关属性,并启用LDAP Realm。
|
tar -xzvf git.tar.gz -C /usr/local/
|
||||||
|
mv /usr/local/git-* /usr/local/git
|
||||||
同时,需要注意Docker的卷挂载,确保在容器重启时配置不会丢失。另外,可能还需要考虑Nexus的版本,不同版本的配置方式可能有所不同,需要确认用户使用的是最新版本还是特定版本。
|
echo 'export PATH=/usr/local/git/bin:$PATH' >> ~/.bashrc
|
||||||
|
source ~/.bashrc
|
||||||
还需要测试整个流程是否可行,比如先手动运行一个Nexus容器,尝试通过Groovy脚本配置LDAP,确认脚本的正确性后再集成到Docker Compose中。此外,还需要处理容器启动顺序,如果有依赖其他服务(如LDAP服务器),可能需要设置健康检查或等待脚本。
|
|
||||||
|
|
||||||
最后,用户可能需要详细的步骤说明,包括Docker Compose文件的内容,Groovy脚本的编写,以及如何替换必要的LDAP参数。此外,还应提示用户根据需要调整内存设置、卷的路径,以及如何验证配置是否成功应用。
|
|
||||||
|
|
||||||
以下是通过 Docker Compose 运行 Nexus 并自动初始化 LDAP 配置的步骤:
|
|
||||||
|
|
||||||
创建项目目录结构
|
|
||||||
|
|
||||||
|
|
||||||
mkdir nexus-ldap
|
|
||||||
cd nexus-ldap
|
|
||||||
mkdir -p data/nexus3
|
|
||||||
mkdir scripts
|
|
||||||
|
|
||||||
|
|
||||||
编写 Docker Compose 文件 ( docker-compose.yml )
|
|
||||||
|
|
||||||
|
|
||||||
version: '3.8'
|
|
||||||
|
|
||||||
services:
|
|
||||||
nexus:
|
|
||||||
image: sonatype/nexus3:latest
|
|
||||||
container_name: nexus
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
- "8081:8081"
|
|
||||||
volumes:
|
|
||||||
- ./data/nexus3:/nexus-data
|
|
||||||
- ./scripts:/docker-entrypoint-init.d
|
|
||||||
environment:
|
|
||||||
- INSTALL4J_ADD_VM_PARAMS="-Xms1g -Xmx2g -XX:MaxDirectMemorySize=2g"
|
|
||||||
networks:
|
|
||||||
- nexus-net
|
|
||||||
|
|
||||||
networks:
|
|
||||||
nexus-net:
|
|
||||||
driver: bridge
|
|
||||||
|
|
||||||
|
|
||||||
创建 LDAP 配置脚本 ( scripts/configure-ldap.groovy )
|
|
||||||
|
|
||||||
|
|
||||||
import org.sonatype.nexus.security.realm.RealmManager
|
|
||||||
import org.sonatype.nexus.security.realm.RealmConfiguration
|
|
||||||
import org.sonatype.nexus.security.ldap.LdapServer
|
|
||||||
|
|
||||||
// 配置 LDAP 服务器
|
|
||||||
def ldapServer = new LdapServer(
|
|
||||||
id: 'company-ldap',
|
|
||||||
name: 'Company LDAP',
|
|
||||||
protocol: 'ldap',
|
|
||||||
host: 'ldap.example.com', // 替换为你的LDAP服务器地址
|
|
||||||
port: 389, // LDAP端口
|
|
||||||
searchBase: 'dc=example,dc=com',
|
|
||||||
authScheme: 'simple',
|
|
||||||
authUsername: 'cn=admin,dc=example,dc=com', // 绑定DN
|
|
||||||
authPassword: 'password', // 绑定密码
|
|
||||||
connectionTimeout: 30,
|
|
||||||
connectionRetryDelay: 300,
|
|
||||||
maxIncidentsCount: 3
|
|
||||||
)
|
|
||||||
|
|
||||||
// 配置用户/组映射
|
|
||||||
ldapServer.userBaseDn = 'ou=users,dc=example,dc=com'
|
|
||||||
ldapServer.userObjectClass = 'inetOrgPerson'
|
|
||||||
ldapServer.userIdAttribute = 'uid'
|
|
||||||
ldapScreenNameAttribute = 'cn'
|
|
||||||
|
|
||||||
ldapServer.groupBaseDn = 'ou=groups,dc=example,dc=com'
|
|
||||||
ldapServer.groupObjectClass = 'groupOfNames'
|
|
||||||
ldapServer.groupIdAttribute = 'cn'
|
|
||||||
ldapServer.groupMemberAttribute = 'member'
|
|
||||||
ldapServer.groupMemberFormat = 'uid={0},ou=users,dc=example,dc=com'
|
|
||||||
|
|
||||||
// 获取服务实例
|
|
||||||
def realmManager = container.lookup(RealmManager.class)
|
|
||||||
def existingLdapServers = container.lookupAll(LdapServer.class)
|
|
||||||
|
|
||||||
// 移除已存在的同ID服务器
|
|
||||||
existingLdapServers.findAll { it.id == ldapServer.id }.each {
|
|
||||||
container.removeComponent(it)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 添加新的LDAP服务器
|
|
||||||
container.addComponent(ldapServer, LdapServer.class)
|
|
||||||
|
|
||||||
// 启用LDAP Realm
|
|
||||||
RealmConfiguration config = realmManager.getConfiguration()
|
|
||||||
List realms = config.realmNames
|
|
||||||
if (!realms.contains('LdapRealm')) {
|
|
||||||
realms.add('LdapRealm')
|
|
||||||
realmManager.setConfiguration(new RealmConfiguration(config.realmNames))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
启动容器
|
|
||||||
|
|
||||||
|
|
||||||
docker compose up -d
|
|
||||||
|
|
||||||
|
|
||||||
验证配置
|
|
||||||
|
|
||||||
等待约2分钟让初始化完成
|
|
||||||
登录Nexus控制台: http://localhost:8081
|
|
||||||
前往 Security → LDAP 检查服务器配置
|
|
||||||
检查 Security → Realms 确认已激活LDAP Realm
|
|
||||||
|
|
||||||
进阶配置建议:
|
|
||||||
|
|
||||||
安全密码管理:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
在docker-compose.yml中使用环境变量文件
|
|
||||||
|
|
||||||
env_file:
|
|
||||||
|
|
||||||
.env
|
|
||||||
|
|
||||||
|
|
||||||
创建 .env 文件:
|
|
||||||
|
|
||||||
|
|
||||||
LDAP_PASSWORD=your_secure_password
|
|
||||||
|
|
||||||
|
|
||||||
修改groovy脚本:
|
|
||||||
|
|
||||||
|
|
||||||
authPassword: System.getenv('LDAP_PASSWORD')
|
|
||||||
|
|
||||||
SSL证书配置:
|
|
||||||
若使用LDAPS:
|
|
||||||
|
|
||||||
|
|
||||||
protocol: 'ldaps'
|
|
||||||
port: 636
|
|
||||||
systemUsername: 'CN=ldap-auth, O=MyCompany' // 证书标识
|
|
||||||
|
|
||||||
调试配置:
|
|
||||||
添加Nexus调试选项:
|
|
||||||
|
|
||||||
|
|
||||||
environment:
|
|
||||||
|
|
||||||
INSTALL4J_ADD_VM_PARAMS="-Dnexus.scripts.allowCreation=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
|
|
||||||
|
|
||||||
|
|
||||||
注意:
|
|
||||||
|
|
||||||
首次启动需等待约5分钟初始化数据
|
|
||||||
默认管理员密码在 data/nexus3/admin.password
|
|
||||||
Groovy脚本会自动覆盖同ID的LDAP配置
|
|
||||||
建议在测试环境验证后再部署到生产环境
|
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue