团队协同开发中,存在多终端开发以及异地开发的场景,故需要在一个支持外网的服务器搭建仓库,并对访问权限作相应控制。

1. 仓库搭建

参考 私有依赖库管理 - Android

2. 端口转发

在 Nginx 加上如下配置即可

1
2
3
location / {
proxy_pass http://127.0.0.1:8081;
}

同时,可以禁止外网对 8081 端口的直接访问(需要 root 权限)

1
2
3
4
5
6
7
8
9
## 查看已添加的 iptables 规则
iptables -L

## 允许本地 8081 访问,拒绝其他 8081 访问
iptables -A INPUT -s 127.0.0.1 -p tcp -m tcp --dport 8081 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 8081 -j REJECT

## 保存规则
iptables-save > /etc/iptables.rules

3. 开机启动

1
sudo vi /etc/rc.local

添加以下内容

1
2
3
4
5
6
## 导入 iptables.rules
iptables-restore < /etc/iptables.rules

## 启动 artifactory
artifactory stop
artifactory start

4. 访问控制

通过网页访问 Artifactory 管理后台

  1. Admin - Security Configuration 中取消 Allow Anonymous Access 的勾选并保存
  2. 同时也可以创建合适权限(比如只读)的账户给开发成员使用
  3. 在应用工程中,需要在原配置基础上添加 credentials 信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
allprojects {
repositories {
...
///////////////// 添加 /////////////////
maven {
url arti_maven_repo
credentials {
username arti_username
password arti_password
}
}
///////////////////////////////////////
}
}

Tips

  1. 此前我的许多访问控制是由 服务端 IP 限制 + 代理服务器 + 客户端 Surge 规则去实现的;家庭宽带 IP 可能会有变化,因此用代理服务器;代理服务器可以是功能服务器本身,用 shadowsocks 提供代理服务方便简单
  2. Surge 与我而言属于开发必备,开发、运维的意义甚于科学上网
  3. 我的功能服务器有多域名、多用途,通常根据域名建立代理规则,而非 IP
  4. maven 的 publish 操作采用了 “IP 直连”,目前我还没找到合适方案对此局部代理,因此取消了通过代理规则作访问控制的方案

参考链接