由于服务器处在局域网环境,因此我们这儿的.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 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]
复制代码
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
复制代码
(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 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
复制代码
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 问题的解读与分享,希望我写的这篇也能受用于各位读者。
参考文献
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
评论