由于服务器处在局域网环境,因此我们这儿的.net高手之前搭了ProGet, 而且当时的需求只是搭建一个简单的nuget repo。而最近,我在用Flask开发一个前后端分离框架的项目。于是,我打算用Nexus 3 OSS搭一套更强的软件库管理系统。为此,我先前翻译一篇《在 CentOS 7上安装Sonatype Nexus Repository OSS》,感觉用处颇丰。唯一的区别是我采用了apache代替nginx。其一,流量达不到负载压力;其二,CentOS自带Apache2。
Apache配置
查看模块:
$ httpd -M
复制代码
显示如下:
. . .
proxy_module (shared)
. . .
lbmethod_byrequests_module (shared)
. . .
proxy_balancer_module (shared)
. . .
proxy_http_module (shared)
. . .
复制代码
如果模块未启用,您可以通过打开/etc/httpd/conf.modules.d/00-proxy.conf
来启动
$ vi /etc/httpd/conf.modules.d/00-proxy.conf
复制代码
并通过#从行开头删除符号来取消注释带有必要模块的行,因此文件如下所示:
. . .
LoadModule proxy_module modules/mod_proxy.so
. . .
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
. . .
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
. . .
LoadModule proxy_http_module modules/mod_proxy_http.so
. . .
复制代码
要使更改生效,请保存文件并重新启动Apache.
$ sudo systemctl restart httpd
复制代码
配置代理:
将以下内容粘帖到/etc/httpd/conf.d/default.conf
文件中:
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
复制代码
PyPI
-
访问apache的
http://<apache IP>/
, 并登录后构建hosted的PyPI -
下载python项目的依赖关系,可以参考文献2
-
直接下载
$ pip download requests certifi-2020.4.5.1-py2.py3-none-any.whl chardet-3.0.4-py2.py3-none-any.whl idna-2.9-py2.py3-none-any.whl requests-2.23.0-py2.py3-none-any.whl urllib3-1.25.9-py2.py3-none-any.whl 复制代码
-
只获取依赖
# Install pipdeptree: $ pip install pipdeptree $ pipdeptree -p requests requests==2.23.0 - certifi [required: >=2017.4.17, installed: 2020.4.5.1] - chardet [required: >=3.0.2,<4, installed: 3.0.4] - idna [required: >=2.5,<3, installed: 2.9] - urllib3 [required: >=1.21.1,<1.26,!=1.25.1,!=1.25.0, installed: 1.25.9] 复制代码
保存信息到requirements.txt
certifi>=2017.4.17 chardet>=3.0.2,<4 idna>=2.5,<3 urllib3>=1.21.1,<1.26,!=1.25.1,!=1.25.0 复制代码
根据requirements.txt下载依赖包
(current directory) $ pip download -r requirements.txt 复制代码
-
-
将whl文件上传到对应的PyPI库中。可以使用twine上传,也可以逐个在Nexus页面上传。
-
安装包存在trusted-host的限制
$ pip install package -i http://<ip或域名>/repository/pypi-hosted/simple –trusted-host <ip或域名>
NPM
-
访问apache的
http://<apache IP>/
, 并登录后构建hosted的npm -
参考文献4
-
下载npm包
-
在项目目录下,创建一个文件夹用于存放离线npm包
yarn config set yarn-offline-mirror ./npm-packages-offline-cache 复制代码
-
设置离线缓存模式,并在项目目录下生成一个.yarnrc 文件
yarn config set yarn-offline-mirror-pruning true 复制代码
-
将.yarnrc文件移到项目目录下
mv ~/.yarnrc ./ 复制代码
-
删除yarn.lock文件
rm -rf node_modules/ yarn.lock 复制代码
-
安装npm包
yarn install 复制代码
-
-
批量上传
-
配置npm仓库地址
npm config -g set registry 远程仓库地址 复制代码
-
登录hosted仓库
npm adduser -registry=hosted类型npm仓库的地址 复制代码
-
对于nexus设置security–>Realms,添加“npm Bearer Token Realm”。注意这很重要。
-
批量上传bat脚本
@echo off :: init params set deployFile=*.tar.gz set deployFile2=*.tgz set url=http://xxx.xxx.xx.xx/repository/npm-hosted/ echo Searching tar.gz and tgz file... rem 启用"延缓环境变量扩充" SETLOCAL ENABLEDELAYEDEXPANSION for %%f in (%deployFile% %deployFile2%) do ( set name=%%f echo !name! to deploy to %url% rem deploy to server call npm publish -registry=%url% !name! ) pause 复制代码
-
-
-
补充一下:如果用Nginx的可以不用看这段。Apache有点坑,对Url的斜杠不智能。所以需要配置一下。非常感谢材料5的第二份回答:
root下 # command -v httpd /usr/sbin/httpd # /usr/sbin/httpd -v Server version: Apache/2.4.6 (CentOS) . . . # vim /etc/httpd/conf.d/default-site.conf #之前配置代理的文件 复制代码
修改一下
. . . AllowEncodedSlashes NoDecode ProxyPass / http://127.0.0.1:8081/ nocanon . . . 复制代码
结语
Sonatype Nexus Repository OSS真的不错,开源版本都如此强大。目前Maven、Nuget和Docker的repo,虽然我暂时没用起来,但是它对各种依赖包的支持已经很全面了。推荐有私人NAS的开发者也可以装一个试试。最后,非常感谢参考文献中作者们对Nexus、PyPI和NPM问题的解读与分享,希望我写的这篇也能受用于各位读者。