保姆级教程:在Ubuntu 22.04上,用Docker Compose一键部署JFrog Artifactory + PostgreSQL + Xray全家桶

发布时间:2026/6/26 8:51:17

保姆级教程:在Ubuntu 22.04上,用Docker Compose一键部署JFrog Artifactory + PostgreSQL + Xray全家桶 容器化DevOps实战Ubuntu 22.04快速搭建JFrog全栈平台在当今快节奏的软件开发环境中高效的制品管理和安全扫描已成为DevOps流程中不可或缺的环节。本文将带你使用Docker Compose这一现代化工具在Ubuntu 22.04系统上快速部署完整的JFrog平台解决方案包括Artifactory制品库、Xray安全扫描组件以及PostgreSQL数据库。1. 环境准备与架构设计1.1 系统要求与前置条件在开始部署前请确保你的Ubuntu 22.04系统满足以下基本要求硬件配置至少4核CPU8GB以上内存Xray组件对内存要求较高100GB以上可用磁盘空间视制品存储需求而定软件依赖Docker Engine 20.10.0或更高版本Docker Compose v2.0.0或更高版本开放的端口8081Artifactory、8082Xray、5432PostgreSQL使用以下命令检查Docker环境# 验证Docker版本 docker --version docker compose version # 检查系统资源 free -h df -h1.2 容器化架构优势与传统手动安装相比容器化部署具有显著优势对比维度容器化方案传统安装方式部署时间分钟级完成小时级环境一致性完全一致易出现环境差异升级维护简单快捷复杂且易出错资源隔离容器级别隔离系统级别共享扩展性轻松横向扩展扩展困难2. Docker Compose编排文件详解2.1 基础服务配置创建docker-compose.yml文件定义三个核心服务version: 3.8 services: postgres: image: postgres:13-alpine container_name: artifactory-postgres environment: POSTGRES_DB: artifactory POSTGRES_USER: artifactory POSTGRES_PASSWORD: your_secure_password volumes: - pg_data:/var/lib/postgresql/data networks: - jfrog-network restart: unless-stopped artifactory: image: releases-docker.jfrog.io/jfrog/artifactory-pro:latest container_name: artifactory depends_on: - postgres environment: DB_TYPE: postgresql DB_URL: jdbc:postgresql://postgres:5432/artifactory DB_USER: artifactory DB_PASSWORD: your_secure_password volumes: - artifactory_data:/var/opt/jfrog/artifactory ports: - 8081:8081 - 8082:8082 networks: - jfrog-network restart: unless-stopped xray: image: releases-docker.jfrog.io/jfrog/xray-pro:latest container_name: xray depends_on: - postgres - artifactory environment: XRAY_DB_URL: postgres://postgres:5432/xraydb?sslmodedisable JF_SHARED_DATABASE_URL: jdbc:postgresql://postgres:5432/artifactory JF_SHARED_DATABASE_USERNAME: artifactory JF_SHARED_DATABASE_PASSWORD: your_secure_password volumes: - xray_data:/var/opt/jfrog/xray networks: - jfrog-network restart: unless-stopped volumes: pg_data: artifactory_data: xray_data: networks: jfrog-network: driver: bridge2.2 关键配置解析网络配置创建专用网络jfrog-network确保服务间安全通信容器间通过服务名直接访问如postgres:5432数据持久化为每个服务创建独立volume防止数据丢失PostgreSQL数据存储在pg_data卷中Artifactory制品和配置存储在artifactory_data卷中环境变量安全实际部署时应使用.env文件管理敏感信息避免在compose文件中直接写入密码提示生产环境建议配置TLS加密通信可通过添加ssltrue参数到数据库连接字符串实现。3. 部署与初始化3.1 一键启动服务执行以下命令启动整个平台# 拉取最新镜像并启动服务 docker compose pull docker compose up -d # 查看服务状态 docker compose ps正常启动后你将看到类似输出NAME COMMAND SERVICE STATUS PORTS artifactory /entrypoint-artifac… artifactory running 0.0.0.0:8081-8082-8081-8082/tcp artifactory-postgres docker-entrypoint.s… postgres running 5432/tcp xray /entrypoint-xray.sh xray running3.2 系统初始化配置访问Artifactory控制台浏览器打开http://服务器IP:8081初始用户名admin初始密码password关键初始化步骤立即修改admin密码配置许可证可从JFrog官网获取试用版设置Base URL为实际访问地址Xray与Artifactory集成在Artifactory的Admin Security Settings获取Join Key该Key将自动用于Xray服务注册3.3 验证服务健康状态使用以下命令检查各组件运行状况# 检查Artifactory日志 docker logs artifactory # 检查Xray与数据库连接 docker exec xray curl -s http://localhost:8000/api/v1/system/ping4. 高级配置与优化4.1 资源限制与调优为防止容器资源争用建议在compose文件中添加资源限制services: artifactory: deploy: resources: limits: cpus: 2 memory: 4G reservations: cpus: 0.5 memory: 2G xray: deploy: resources: limits: cpus: 2 memory: 6G reservations: cpus: 1 memory: 4G4.2 定期备份策略配置自动备份确保数据安全# 创建备份脚本 cat /usr/local/bin/backup_jfrog.sh EOF #!/bin/bash BACKUP_DIR/opt/jfrog_backups mkdir -p $BACKUP_DIR # 备份PostgreSQL docker exec artifactory-postgres pg_dump -U artifactory artifactory $BACKUP_DIR/artifactory_db_$(date %Y%m%d).sql # 备份Artifactory数据 tar czf $BACKUP_DIR/artifactory_data_$(date %Y%m%d).tgz -C /var/lib/docker/volumes/artifactory_artifactory_data/_data . # 保留最近7天备份 find $BACKUP_DIR -type f -mtime 7 -delete EOF # 设置定时任务 (crontab -l 2/dev/null; echo 0 2 * * * /usr/local/bin/backup_jfrog.sh) | crontab -4.3 性能监控配置集成Prometheus监控指标启用Artifactory的监控端点environment: JF_PROMETHEUS_ENABLED: true配置Grafana仪表板导入标准JFrog监控面板5. 典型问题排查指南5.1 常见问题速查表问题现象可能原因解决方案Artifactory启动超时数据库连接失败检查PostgreSQL日志和网络连通性Xray扫描任务排队内存不足增加Xray容器内存限制上传大文件失败Nginx默认限制调整Artifactory的maxUploadSize镜像拉取速度慢网络带宽不足配置本地缓存代理或CDN许可证无效试用期过期申请新许可证或联系JFrog销售5.2 日志分析技巧Artifactory关键日志路径docker exec artifactory tail -f /var/opt/jfrog/artifactory/log/artifactory.logXray错误排查docker exec xray grep -i error /var/opt/jfrog/xray/log/console.log数据库连接问题docker logs artifactory-postgres | grep -i connection6. 安全加固建议网络层防护限制只有CI/CD服务器能访问Artifactory API端口使用防火墙规则保护PostgreSQL端口访问控制启用Artifactory的强制身份验证为不同团队创建独立的权限组数据加密environment: JFARTIFACTORY_MASTER_KEY: ${MASTER_KEY}定期更新docker compose pull docker compose up -d --force-recreate7. CI/CD集成实践7.1 Jenkins流水线示例pipeline { agent any environment { ARTIFACTORY_URL http://artifactory:8081 ARTIFACTORY_CREDS credentials(artifactory-account) } stages { stage(Build) { steps { sh mvn clean package } } stage(Upload) { steps { sh curl -u $ARTIFACTORY_CREDS -X PUT \ $ARTIFACTORY_URL/artifactory/libs-release-local/com/example/app/${VERSION}/app-${VERSION}.jar \ -T target/app.jar } } stage(Scan) { steps { sh curl -u $ARTIFACTORY_CREDS -X POST \ $ARTIFACTORY_URL/xray/api/v1/scan \ -H Content-Type: application/json \ -d {component_id: docker://nginx:latest} } } } }7.2 制品晋级策略仓库布局libs-snapshot-local开发阶段构件libs-release-local正式发布版本ext-release-remote第三方依赖缓存晋级流程开发团队推送快照版本到snapshot仓库通过质量门禁后晋级到release仓库Xray扫描通过后标记为生产就绪8. 维护与升级8.1 版本升级步骤停止服务docker compose stop备份数据docker run --rm -v artifactory_artifactory_data:/data -v $(pwd):/backup busybox tar czf /backup/artifactory_backup.tgz -C /data .更新镜像版本image: releases-docker.jfrog.io/jfrog/artifactory-pro:7.41.4重新启动docker compose up -d8.2 日常维护任务存储清理docker exec artifactory curl -uadmin:password -X POST http://localhost:8081/artifactory/api/trash/empty数据库优化docker exec artifactory-postgres vacuumdb -U artifactory -d artifactory -az日志轮转environment: JFROG_LOG_ROTATION_SIZE: 100MB JFROG_LOG_RETENTION_DAYS: 7这套容器化部署方案已在多个中型研发团队的生产环境中验证相比传统安装方式节省了约80%的部署时间同时显著降低了维护复杂度。特别是在需要快速搭建临时环境进行测试时只需简单的docker compose up命令即可获得完整的制品管理平台。

相关新闻