ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

JFrog Artifactory 制品仓库安装与配置实战指南

JFrog Artifactory 制品仓库安装与配置实战指南 1. 项目概述为什么我们需要一个专业的制品仓库如果你是一名开发者尤其是经历过团队协作、持续集成CI/CD或者微服务架构的开发者那么你一定对“依赖管理”和“制品管理”这两个词深有感触。想象一下你的团队有十个微服务每个服务都依赖几十个第三方库同时每个服务编译后又会生成自己的Jar包、Docker镜像。这些依赖从哪里来编译好的包又存到哪里去如果每个人都从互联网直接下载依赖速度慢不说一旦某个公共仓库比如Maven Central宕机整个团队的开发就可能陷入停滞。更别提那些内部开发的、不能公开的私有组件了。这就是JFrog Artifactory要解决的核心问题它是一款企业级的通用制品仓库管理工具。你可以把它理解为一个超级智能的“图书馆”兼“仓库管理员”。它不仅能代理和缓存来自互联网上各种公共仓库如Maven、npm、Docker Hub、PyPI等的组件还能作为私有仓库安全地存储和管理你们团队自己产生的所有构建产物Artifacts。它统一了这些资源的入口提供了细粒度的权限控制、安全扫描、元数据管理和高可用部署能力。今天这篇“入门篇”我们就来手把手完成Artifactory最基本、也是最关键的一步环境安装。我会以一个最常见的场景——在Linux服务器上安装Artifactory OSS开源版为例把每一步的操作意图、背后原理以及我踩过的坑都讲清楚。无论你是运维工程师准备搭建基础服务还是开发人员想在自己的测试环境里搞一个来玩玩这篇指南都能让你少走很多弯路。2. 环境准备与规划兵马未动粮草先行在真正执行安装命令之前充分的准备工作能避免至少80%的后续问题。Artifactory对运行环境有一定要求盲目安装很容易遇到各种兼容性和性能瓶颈。2.1 系统要求与资源评估首先我们得看看我们的“战场”——服务器是否符合要求。操作系统Artifactory官方支持主流的Linux发行版如RHEL/CentOS 7、Ubuntu 18.04、Windows Server以及MacOS主要用于开发测试。对于生产环境Linux是首选尤其是RHEL/CentOS或Ubuntu LTS版本因为它们有长期稳定的内核和库文件支持。本文将以CentOS 7.9为例进行演示其他Linux发行版的命令大同小异。硬件资源这是最容易出问题的地方。很多人用一台1核2G的虚拟机就想跑Artifactory结果发现奇慢无比甚至频繁崩溃。CPU至少2核。如果作为团队使用超过10人或需要处理大量Docker镜像拉取推送建议4核或以上。Artifactory的索引、计算校验和、执行垃圾回收等操作都比较吃CPU。内存这是重中之重。最低4GB强烈建议8GB起步。Artifactory本身是基于Java的应用程序JVM堆内存默认配置就比较大。此外它内部使用Elasticsearch7.x版本后内置进行元数据索引和搜索这也是个内存大户。内存不足会导致GC频繁服务响应缓慢甚至Elasticsearch节点脱离集群。磁盘需要考虑容量、性能和类型。容量这取决于你要存储多少制品。一个简单的估算方法是日均构建次数 * 平均制品大小 * 保留天数。对于初期测试100GB可能够用但生产环境通常需要TB级别并且要预留30%以上的增长空间。性能强烈推荐使用SSD。机械硬盘的IOPS每秒读写次数很可能成为瓶颈尤其是在并发上传/下载较多时。Artifactory需要频繁读写文件并更新数据库索引。类型最好将Artifactory的数据目录默认是$JFROG_HOME/artifactory/var挂载到独立的、容量大的存储卷上方便日后扩容和备份。网络确保服务器有稳定的网络连接能够访问外网以下载必要的依赖和更新。如果处于内网需要提前配置好代理或准备好离线的安装包和依赖库。注意在虚拟化或云环境中要特别注意磁盘的IOPS配额和网络带宽。云厂商的“突发性能”磁盘在耗尽积分后性能会骤降可能直接拖垮Artifactory服务。2.2 依赖软件检查与安装Artifactory的运行依赖于Java环境。虽然最新的安装包可能会捆绑某个版本的JRE但事先准备好一个兼容的JDK总是更稳妥的做法。检查现有Javajava -version如果显示类似“openjdk version 1.8.0_352”的信息说明已安装。Artifactory 7.x 需要Java 11 或 Java 8具体版本请查阅官方文档。建议使用OpenJDK 11或更高版本以获得更好的性能和支持。安装OpenJDK 11如果未安装# 对于CentOS/RHEL sudo yum install -y java-11-openjdk-devel # 对于Ubuntu/Debian sudo apt update sudo apt install -y openjdk-11-jdk验证安装并设置JAVA_HOMEjava -version # 查找Java安装路径 sudo update-alternatives --config java # 记下路径例如 /usr/lib/jvm/java-11-openjdk-11.0.xx.x.x-x.el7_9.x86_64/bin/java # 将其设置到环境变量编辑 ~/.bashrc 或 /etc/profile echo export JAVA_HOME/usr/lib/jvm/java-11-openjdk-11.0.xx.x.x-x.el7_9.x86_64 ~/.bashrc echo export PATH$JAVA_HOME/bin:$PATH ~/.bashrc source ~/.bashrc echo $JAVA_HOME2.3 防火墙与SELinux配置为了避免安装后无法访问需要提前处理好系统的安全策略。防火墙Artifactory的Web UI默认使用端口8081社区版或8082专业版。如果你打算将其作为Docker Registry使用还需要开放8082端口v1/v2 API或5000-5002端口独立Docker Registry服务。# CentOS 7 使用firewalld sudo firewall-cmd --permanent --add-port8081/tcp sudo firewall-cmd --permanent --add-port8082/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-ports # 确认端口已开放 # Ubuntu 使用ufw sudo ufw allow 8081/tcp sudo ufw allow 8082/tcp sudo ufw reloadSELinux在CentOS/RHEL上SELinux可能会阻止Artifactory访问其数据目录。对于测试环境可以先将其设置为宽容模式或禁用。# 查看当前状态 getenforce # 显示 Enforcing, Permissive 或 Disabled # 临时设置为宽容模式重启失效 sudo setenforce 0 # 永久修改编辑 /etc/selinux/config将 SELINUXenforcing 改为 SELINUXpermissive # 然后重启服务器对于生产环境更推荐的做法是配置正确的SELinux上下文策略而不是直接关闭。3. 安装过程详解三种主流方式的选择与实操Artifactory提供了多种安装方式以适应不同的运维习惯和环境需求。这里我们详细讲解最常见的三种使用RPM/DEB包安装、使用Docker安装、以及使用归档文件ZIP/TAR安装。3.1 方式一使用RPM/DEB包安装推荐用于Linux生产环境这是Linux服务器上最经典、最易于管理的方式。安装包会帮你处理好服务注册、日志轮转、依赖目录创建等琐事。步骤1下载安装包访问JFrog官方下载中心找到Artifactory OSS (Open Source)版本。你可以通过wget直接下载。# 以 CentOS 7 和 Artifactory OSS 7.x 为例 wget https://releases.jfrog.io/artifactory/artifactory-rpms/artifactory-rpms.repo -O /etc/yum.repos.d/artifactory-rpms.repo # 或者直接下载最新RPM包 wget https://releases.jfrog.io/artifactory/artifactory-pro/org/artifactory/pro/jfrog-artifactory-pro/[最新版本]/jfrog-artifactory-pro-[最新版本].rpm # 对于OSS版请确认下载链接是 oss 版本步骤2安装RPM包# 如果你添加了repo可以直接yum安装 sudo yum install -y jfrog-artifactory-oss # 或者使用下载的本地rpm文件 sudo yum install -y ./jfrog-artifactory-oss-*.rpm安装过程会自动创建jfrog用户和用户组以及/opt/jfrog目录作为主目录。步骤3管理服务安装完成后Artifactory会作为一个systemd服务被注册。# 启动服务 sudo systemctl start artifactory # 设置开机自启 sudo systemctl enable artifactory # 查看服务状态 sudo systemctl status artifactory # 查看实时日志 sudo tail -f /var/opt/jfrog/artifactory/logs/artifactory.log实操心得数据目录RPM安装后数据默认在/var/opt/jfrog/artifactory。在首次启动前你应该确认这个目录所在的磁盘有足够空间并且IO性能良好。如果需要迁移最好是在首次启动前修改$JFROG_HOME/artifactory/var的软链接而不是启动后移动数据。配置文件主配置文件位于/var/opt/jfrog/artifactory/etc/artifactory/artifactory.system.properties。大部分高级配置都在这里进行但初期不建议修改。3.2 方式二使用Docker安装推荐用于快速测试和容器化部署Docker方式极度简化了安装过程非常适合快速搭建测试环境也符合当下容器化部署的趋势。步骤1拉取镜像Docker Hub上提供了官方镜像。OSS版镜像标签为releases-docker.jfrog.io/jfrog/artifactory-oss:latest。# 拉取最新OSS版镜像 docker pull releases-docker.jfrog.io/jfrog/artifactory-oss:latest步骤2运行容器关键点在于数据持久化。必须将容器内的数据卷映射到宿主机否则容器重启后所有数据都会丢失。# 创建宿主机数据目录 mkdir -p ~/artifactory/var # 运行容器 docker run -d \ --name artifactory \ -p 8081:8081 \ -p 8082:8082 \ -v ~/artifactory/var:/var/opt/jfrog/artifactory \ releases-docker.jfrog.io/jfrog/artifactory-oss:latest参数解释-d: 后台运行。--name: 给容器起个名字。-p 8081:8081: 将宿主机的8081端口映射到容器的8081端口Web UI。-p 8082:8082: 映射8082端口Artifactory API和Docker Registry。-v ...: 这是最重要的一步。将宿主机的~/artifactory/var目录挂载到容器内的数据目录实现数据持久化。步骤3访问与验证等待几十秒后在浏览器访问http://你的服务器IP:8081。你应该能看到Artifactory的初始化界面。注意事项权限问题如果宿主机上的数据目录如~/artifactory/var权限过严可能导致容器内进程无法写入。一个简单的办法是在运行前将目录权限设为777仅限测试环境chmod 777 ~/artifactory/var。生产环境应配置正确的用户和组映射使用-u参数。资源限制在docker run命令中可以考虑使用-m和--cpus参数为容器分配内存和CPU限制防止容器占用过多宿主机资源。使用Docker Compose对于更复杂的配置如需要绑定其他端口、设置环境变量等推荐使用docker-compose.yml文件来管理这样配置更清晰、可重复。3.3 方式三使用ZIP/TAR归档安装最灵活适用于所有系统这种方式给你最大的控制权适合需要深度定制安装路径或运行在非标准环境的场景。步骤1下载并解压# 下载ZIP包以Linux 64位为例 wget https://releases.jfrog.io/artifactory/artifactory-pro/org/artifactory/pro/jfrog-artifactory-pro/[最新版本]/jfrog-artifactory-pro-[最新版本]-linux.tar.gz # 创建安装目录并解压 sudo mkdir -p /opt/jfrog sudo tar -xzvf jfrog-artifactory-pro-*.tar.gz -C /opt/jfrog --strip-components1解压后/opt/jfrog目录下就是Artifactory的全部文件。步骤2配置环境变量编辑用户配置文件如~/.bashrc或/etc/profile添加JFrog主目录路径。echo export JFROG_HOME/opt/jfrog ~/.bashrc source ~/.bashrc步骤3启动与停止进入安装目录的app/bin子目录执行启动脚本。cd $JFROG_HOME/artifactory/app/bin # 启动 ./artifactoryctl start # 停止 ./artifactoryctl stop # 查看状态 ./artifactoryctl status注意事项服务化管理这种方式不会自动注册为系统服务。你需要自己编写systemd service文件或使用nohup等方式来管理进程这对于生产环境是必须的。所有路径可自定义你可以将解压目录放在任何位置只需正确设置JFROG_HOME环境变量即可。4. 安装后初始配置与验证无论采用哪种方式安装成功启动后都需要进行一些初始配置才能正常使用。4.1 首次访问与引导配置访问Web界面打开浏览器输入http://你的服务器IP地址:8081。你会看到Artifactory的欢迎页面。设置管理员密码第一次访问会强制要求你为默认的admin用户设置一个新密码。请务必设置一个强密码并妥善保管。配置许可证仅限Pro/Enterprise版如果你是安装的OSS版跳过此步。如果是试用或已有专业版在此处粘贴你的许可证密钥。配置仓库代理系统会引导你配置一些远程仓库的代理如Maven Central, npm Registry等。你可以直接使用默认的配置它会为你创建好这些远程仓库和对应的虚拟仓库Virtual Repository后期可以随时修改。4.2 关键后台配置检查完成前端引导后有几个后台配置点需要确认它们关系到Artifactory的稳定性和性能。检查数据目录与存储配置 登录后进入Admin - Artifactory - Storage。这里显示了当前存储摘要和默认的文件存储类型。对于单机测试默认的filesystem类型使用本地磁盘即可。但你需要确认Binary Store的路径默认在$JFROG_HOME/artifactory/var下所在磁盘空间充足。调整JVM堆内存设置重要 Artifactory的性能非常依赖JVM堆内存。默认配置可能不适合你的机器。配置文件位于$JFROG_HOME/artifactory/var/etc/artifactory/artifactory.system.properties但更推荐通过Web界面修改。 进入Admin - Artifactory - System YAML。在编辑器中找到或添加以下配置shared: extraJavaOpts: -Xms4g -Xmx4g -Xss256k -XX:UseG1GC-Xms4g -Xmx4g设置JVM堆内存初始值和最大值为4GB。请根据你的机器总内存来调整建议设置为机器总内存的50%-70%但不要超过32GB超过后JVM性能提升有限且GC停顿会变长。例如8GB内存的机器可以设为-Xms4g -Xmx4g。-XX:UseG1GC使用G1垃圾收集器在大多数现代应用下比旧的Parallel GC有更好的性能表现。 修改后保存并重启Artifactory服务使配置生效。配置反向代理可选但推荐 你很可能不想让用户通过http://ip:8081这种形式访问。通常我们会用Nginx或Apache作为反向代理绑定域名、配置SSL证书HTTPS。 一个简单的Nginx配置示例 (/etc/nginx/conf.d/artifactory.conf)server { listen 80; server_name artifactory.your-company.com; # 你的域名 return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name artifactory.your-company.com; ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem; location / { proxy_pass http://localhost:8081; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 100M; # 允许上传大文件如Docker镜像 } }配置后重启Nginx用户就可以通过https://artifactory.your-company.com安全地访问了。5. 基础使用与核心概念速成安装配置好后我们快速过一下最基本的使用方法帮你理解Artifactory的核心逻辑。5.1 仓库类型理解存储的逻辑Artifactory里有几种关键的仓库类型理解它们的关系至关重要本地仓库Local Repository真正在Artifactory服务器硬盘上存储制品的仓库。你上传的私有包、从远程仓库缓存下来的包都存在这里。远程仓库Remote Repository这其实是一个“代理配置”。它指向一个外部的公共仓库比如Maven Central (https://repo.maven.apache.org/maven2)。当Artifactory收到一个本地不存在的构件请求时它会去这个远程地址拉取并缓存到对应的本地仓库中。虚拟仓库Virtual Repository这是一个“聚合视图”。它可以把多个本地仓库和远程仓库通过它们的本地缓存聚合起来对外提供一个统一的访问地址。客户端如Maven、npm只需要配置这个虚拟仓库的地址即可。一个典型的工作流你的Maven项目配置了虚拟仓库A的地址。当需要依赖com.google.guava:guava:31.1-jre时请求发到虚拟仓库A。A发现这个包在它聚合的某个本地仓库B里就直接返回。如果没有它会去本地仓库B对应的远程仓库C指向Maven Central去下载缓存到B再返回给你。下次请求时就直接从本地缓存B读取速度飞快。5.2 第一个实操通过Maven上传和下载构件让我们用一个最简单的Java库项目来体验Artifactory的完整流程。步骤1在Artifactory中创建本地仓库登录Admin界面进入Repositories - Local。点击Add Repository 选择Maven。填写Repository Key例如my-maven-local。其他设置可以先保持默认点击“Save Finish”。步骤2配置Maven的settings.xml在你的Maven配置文件通常是~/.m2/settings.xml中添加服务器认证和镜像配置。settings servers server idmy-artifactory/id !-- 这个id需要和mirror及distributionManagement中的id对应 -- usernameadmin/username password你的admin密码/password /server /servers mirrors mirror idmy-artifactory/id nameMy Artifactory Mirror/name urlhttp://你的服务器IP:8081/artifactory/my-maven-virtual//url !-- 指向虚拟仓库 -- mirrorOf*/mirrorOf !-- 匹配所有仓库所有请求都走Artifactory -- /mirror /mirrors /settings注意这里url指向的是一个虚拟仓库。你需要先在Artifactory中创建一个Maven虚拟仓库例如my-maven-virtual并将my-maven-local和remote-repos比如内置的jcenter-cache聚合进去。步骤3在项目中配置上传发布在项目的pom.xml中添加distributionManagement节点指定构件上传到哪里。project ... distributionManagement repository idmy-artifactory/id nameMy Releases Repository/name urlhttp://你的服务器IP:8081/artifactory/my-maven-local/url !-- 直接指向本地仓库 -- /repository snapshotRepository idmy-artifactory/id nameMy Snapshots Repository/name urlhttp://你的服务器IP:8081/artifactory/my-maven-local/url /snapshotRepository /distributionManagement /project步骤4执行构建与部署在项目根目录下执行# 清理、编译、打包、上传到Artifactory mvn clean deploy如果一切顺利Maven会将生成的Jar包及其pom文件上传到Artifactory的my-maven-local仓库中。你可以在Artifactory的Web界面中浏览这个仓库看到你上传的构件。步骤5在另一个项目中引用在另一个项目的pom.xml中像引用普通依赖一样添加你刚刚上传的库的坐标groupId, artifactId, version。由于Maven配置了镜像它会自动从你的Artifactory虚拟仓库中下载这个依赖。6. 常见问题排查与维护技巧即使按照步骤操作也难免会遇到问题。这里记录了一些我亲自踩过的坑和解决方案。6.1 安装启动类问题问题1服务启动失败日志显示“Permission denied”现象使用systemctl启动artifactory服务失败查看日志/var/opt/jfrog/artifactory/logs/artifactory.log发现大量权限错误。原因最常见的原因是数据目录/var/opt/jfrog/artifactory或其子目录的属主/权限不对。RPM安装默认会用jfrog用户运行服务。解决# 递归地将数据目录的所有权改为jfrog用户和组 sudo chown -R jfrog:jfrog /var/opt/jfrog/artifactory # 重启服务 sudo systemctl restart artifactory问题2Docker容器启动后无法访问8081端口现象docker ps显示容器正在运行但curl localhost:8081无响应。原因端口映射错误或冲突。宿主机8081端口可能已被占用。容器内Artifactory启动较慢需要等待几十秒。防火墙或安全组未开放8081端口。解决# 检查端口占用 sudo netstat -tlnp | grep 8081 # 如果被占用修改docker run的-p参数例如 -p 8085:8081 # 查看容器日志等待启动完成 docker logs -f artifactory # 检查防火墙 sudo firewall-cmd --list-ports问题3Web界面访问缓慢或经常超时现象页面加载慢上传下载大文件容易失败。原因JVM堆内存不足这是首要怀疑对象。内存不足导致频繁Full GC整个应用都会卡顿。数据库Derby/H2瓶颈OSS版默认使用嵌入式Derby数据库在数据量较大或并发高时性能很差。磁盘IO瓶颈存储目录在机械硬盘上或者云磁盘性能耗尽。解决按照4.2节的方法增加-Xmx参数例如从2g增加到4g或8g然后重启。对于生产环境强烈建议将OSS版升级为专业版并使用外部PostgreSQL或MySQL数据库。这是提升Artifactory性能和稳定性的最关键一步。将数据目录迁移到SSD磁盘。使用iostat命令监控磁盘使用率。6.2 配置与使用类问题问题4Maven构建时提示“401 Unauthorized”现象执行mvn deploy时失败提示认证失败。原因Maven的settings.xml中配置的username和password与Artifactory中的用户不匹配或者该用户没有目标仓库的“Deploy/Cache”权限。解决登录Artifactory Web界面确认你使用的用户如admin密码是否正确。进入Admin - Security - Permissions查看该用户或所属用户组对目标仓库如my-maven-local的权限。至少需要“Read”和“Deploy/Cache”权限。在Maven命令行尝试使用-U参数强制更新快照有时本地缓存的旧令牌会导致问题。问题5Docker客户端无法推送镜像到Artifactory现象docker push artifactory.your-company.com/my-image:tag失败提示“no basic auth credentials”。原因Docker客户端没有登录到你的Artifactory Docker仓库。解决# 首先登录。Artifactory的Docker仓库地址就是你的虚拟仓库地址。 docker login artifactory.your-company.com # 输入你的Artifactory用户名和密码 # 然后重新打标签并推送 docker tag my-image:tag artifactory.your-company.com/my-image:tag docker push artifactory.your-company.com/my-image:tag更深层原因Artifactory的Docker仓库支持“Repository Path”和“Subdomain”两种访问模式。默认可能是Repository Path模式http://artifactory-server/artifactory/api/docker/repo-key。你需要根据Web界面中Docker仓库的说明来配置客户端的insecure-registries或域名解析。6.3 维护与优化建议定期备份备份不仅仅是$JFROG_HOME/artifactory/var下的数据文件。系统配置、元数据数据库对于专业版是外部数据库同样重要。Artifactory提供了原生的备份API和插件可以设置定时任务进行全量/增量备份到远程存储。监控与日志关注artifactory.log和request.log。可以配置日志聚合工具如ELK栈进行集中管理。监控关键指标存储空间使用率、JVM堆内存使用率、GC时间、API响应时间。清理过期数据Artifactory不会自动删除旧的快照SNAPSHOT版本或释放被覆盖构件的空间。需要定期使用“清理未使用的缓存”功能或设置“存储配额”和“保留策略”来自动清理。升级策略在升级前务必阅读官方升级指南并完整备份。测试环境的升级演练是必须的。通常的升级路径是备份 - 停止服务 - 升级安装包/镜像 - 启动服务 - 运行升级脚本如果需要- 验证。
返回列表