Nexus Repository Manager OSS 用于搭建私有源、镜像代理,支持 maven, docker, bower, npm 等
Nexus 依赖 Java 运行时环境,官方只支持 Oracle Java
但 openjdk 也应能正常工作:
sudo yum install java-1.8.0-openjdk
没有 rpm 包可用,只能手动下载安装
curl -LO http://download.sonatype.com/nexus/3/latest-unix.tar.gz
tar vxf latest-unix.tar.gz
sudo mv nexus-* /opt
sudo ln -s /opt/nexus-*/ /opt/nexus
# 创建单独的用户作为运行时用户,避免安全隐患
sudo useradd -M -c "Nexus repository manager" -s /sbin/nologin nexus
sudo chown -R nexus: /opt/nexus/
# 添加 systemd 管理服务
sudo tee /etc/systemd/system/nexus.service <<-'EOF'
[Unit]
Description=nexus service
After=network.target
[Service]
Type=forking
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
ExecReload=/opt/nexus/bin/nexus force-reload
User=nexus
Restart=on-abort
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
配置文件保存在安装目录的 etc
, bin
子目录下
Nexus 默认监听所有 interface 的 8081 端口
生产环境下使用 Nginx 作为前端,反向代理到 nexus,因此 nexus 只需监听本地即可
/opt/nexus/etc/org.sonatype.nexus.cfg
:
application-host=127.0.0.1
# 若部署在子路径,此处设置子路径
# nexus-context-path=/nexus/
数据目录默认为安装目录下的 data
目录,改为其它目录,以便升级 nexus
/opt/nexus/bin/nexus.vmoptions
:
-Dkaraf.data=/data/nexus
-Djava.io.tmpdir=/data/nexus/tmp
创建数据目录:
sudo mkdir /data/nexus
sudo chown nexus: /data/nexus
禁止搜索引擎索引,以减少被发现、滥用的风险
/opt/nexus/public/robots.txt
:
User-agent: *
Disallow: /
server {
listen 80;
server_name nexus.example.com;
return 301 https://$host$request_uri;
access_log /var/log/nginx/nexus.access.log main;
error_log /var/log/nginx/nexus.error.log warn;
}
server {
listen 443 http2 ssl;
server_name nexus.example.com;
ssl_certificate /etc/letsencrypt/live/nexus.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nexus.example.com/privkey.pem;
proxy_send_timeout 120;
proxy_read_timeout 300;
proxy_buffering off;
keepalive_timeout 55;
tcp_nodelay on;
# allow large uploads of files
client_max_body_size 1G;
# optimize downloading files larger than 1G
proxy_max_temp_file_size 2G;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 若未使用 https,注释该配置
proxy_set_header X-Forwarded-Proto "https";
}
access_log /var/log/nginx/nexus.access.log main;
error_log /var/log/nginx/nexus.error.log warn;
}
使用 systemd 管理 nexus 运行状态:
# 查看状态/启动/停止/重启
sudo systemctl start/stop/restart/status nexus
# 启用/禁用自动启动
sudo systemctl enable/disable nexus
网页端默认的管理账号为:
- username: admin
- password: admin123
首次运行后应立即修改密码
步骤:
- 下载新版本并解压缩到
/opt/
目录下,修改其中的配置文件 - 停止运行 nexus
- 修改
/opt/nexus
符号链接,指向最新版本 - 启动 nexus
由于配置文件保存在安装目录中,每次升级都须重新修改配置文件,比较麻烦,可使用以下脚本简化操作:
#!/usr/bin/bash
# 升级 nexus 版本
# 参数:新版本目录
set -e
# nexus 运行时的用户
user=nexus
# 数据目录
data_dir=/data/nexus
# 新版本文件所在目录
new_version_path=$1
if [[ -z "$new_version_path" ]]; then
echo "请指定新版本文件所在目录"
exit 1
elsif [[ ! -d "$new_version_path" ]];
echo "$new_version_path 不是一个正确的目录"
exit 1
fi
base_name=`basename $new_version_path`
if [[ -d "/opt/$base_name" ]]; then
echo "/opt/$base_name 已存在"
exit 1
fi
# 安装文件目录移动到 /opt
sudo mv $new_version_path /opt/
sudo chown -R $user: /opt/$base_name
# 修改配置文件。根据实际的配置情况按需修改
cd /opt/$base_name
sudo sed -i 's#^application-host=.*$#application-host=127.0.0.1#' etc/org.sonatype.nexus.cfg
sudo sed -i 's#^-Dkaraf.data=.*$#-Dkaraf.data=/data/nexus#' bin/nexus.vmoptions
sudo sed -i 's#^-Djava.io.tmpdir=.*$#-Djava.io.tmpdir=/data/nexus/tmp#' bin/nexus.vmoptions
sudo tee public/robots.txt <<-'EOF'
User-agent: *
Disallow: /
EOF
# 重启 nexus
sudo systemctl stop nexus
sudo -sf /opt/$base_name /opt/nexus
sudo systemctl start nexus