由于服务器处在局域网环境,因此我们这儿的.net 高手之前搭了 ProGet, 而且当时的需求只是搭建一个简单的 nuget repo。而最近,我在用 Flask 开发一个前后端分离框架的项目。于是,我打算用 Nexus 3 OSS 搭一套更强的软件库管理系统。为此,我先前翻译一篇《在 CentOS 7上安装Sonatype Nexus Repository OSS》,感觉用处颇丰。唯一的区别是我采用了 apache 代替 nginx。其一,流量达不到负载压力;其二,CentOS 自带 Apache2。
Apache 配置
查看模块:
显示如下:
. . .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 requestscertifi-2020.4.5.1-py2.py3-none-any.whlchardet-3.0.4-py2.py3-none-any.whlidna-2.9-py2.py3-none-any.whlrequests-2.23.0-py2.py3-none-any.whlurllib3-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]
复制代码
certifi>=2017.4.17chardet>=3.0.2,<4idna>=2.5,<3urllib3>=1.21.1,<1.26,!=1.25.1,!=1.25.0
复制代码
(current directory) $ pip download -r requirements.txt
复制代码
$ pip install package -i http://<ip或域名>/repository/pypi-hosted/simple --trusted-host <ip或域名>
复制代码
NPM
访问 apache 的http://<apache IP>/, 并登录后构建 hosted 的 npm
参考文献4
1、下载 npm 包
yarn config set yarn-offline-mirror ./npm-packages-offline-cache
复制代码
yarn config set yarn-offline-mirror-pruning true
复制代码
rm -rf node_modules/ yarn.lock
复制代码
2、批量上传
npm config -g set registry 远程仓库地址
复制代码
npm adduser -registry=hosted类型npm仓库的地址
复制代码
@echo off:: init paramsset deployFile=*.tar.gzset deployFile2=*.tgzset url=http://xxx.xxx.xx.xx/repository/npm-hosted/echo Searching tar.gz and tgz file...rem 启用"延缓环境变量扩充"SETLOCAL ENABLEDELAYEDEXPANSIONfor %%f in (%deployFile% %deployFile2%) do (set name=%%fecho !name! to deploy to %url%rem deploy to servercall npm publish -registry=%url% !name!)
pause
复制代码
root下# command -v httpd/usr/sbin/httpd# /usr/sbin/httpd -vServer version: Apache/2.4.6 (CentOS). . .# vim /etc/httpd/conf.d/default-site.conf #之前配置代理的文件
复制代码
修改一下
. . .AllowEncodedSlashes NoDecodeProxyPass / http://127.0.0.1:8081/ nocanon. . .
复制代码
结语
Sonatype Nexus Repository OSS 真的不错,开源版本都如此强大。目前 Maven、Nuget 和 Docker 的 repo,虽然我暂时没用起来,但是它对各种依赖包的支持已经很全面了。推荐有私人 NAS 的开发者也可以装一个试试。最后,非常感谢参考文献中作者们对 Nexus、PyPI 和 NPM 问题的解读与分享,希望我写的这篇也能受用于各位读者。
参考文献
How To Use Apache as a Reverse Proxy with mod_proxy on CentOS 7
How To Download Python Dependencies
使用 Nexus 搭建 PyPi 私服
深入浅出FE(十三)前端nexus3 Yarn离线部署npm仓库
Nexus 3 as npm repository can't find some dependencies: npm ERR! 404 Not Found
评论