Conan 服务器¶
重要
此服务器主要用于测试(尽管它可能适用于小型团队)。我们建议使用免费的 Artifactory Community Edition for C/C++ 进行私人开发,或使用 Artifactory Pro 作为企业解决方案。
配置¶
默认情况下,您的服务器配置保存在 ~/.conan_server/server.conf
下,但是您可以通过设置 CONAN_SERVER_HOME
环境变量或通过 -d
或 --server_dir
命令行参数后跟所需路径来修改此行为。如果您使用其中一个选项,您的配置文件将存储在 server_directory/server.conf
下。请注意,命令行参数将覆盖环境变量。您可以在启动服务器之前更改 server.conf
中的配置值。请注意,服务器不支持热重载,因此要查看配置更改,您必须手动重新启动服务器。
服务器配置文件默认为
[server]
jwt_secret: IJKhyoioUINMXCRTytrR
jwt_expire_minutes: 120
ssl_enabled: False
port: 9300
public_port:
host_name: localhost
authorize_timeout: 1800
disk_storage_path: ./data
disk_authorize_timeout: 1800
updown_secret: HJhjujkjkjkJKLUYyuuyHJ
[write_permissions]
# "opencv/2.3.4@lasote/testing": default_user,default_user2
[read_permissions]
*/*@*/*: *
[users]
demo: demo
服务器参数¶
注意
Conan 服务器支持相对 URL,允许您避免设置 host_name
、public_port
和 ssl_enabled
。用于上传/下载包的 URL 将在客户端自动生成,遵循远程仓库的 URL。这允许从不同的网络访问 Conan 服务器。
port
:conan_server 将运行的端口。客户端服务器授权使用 JWT 完成。
jwt_secret
是一个用于生成身份验证令牌的随机字符串。您可以随时安全地更改它(实际上这是一个好习惯)。更改只会强制用户重新登录。jwt_expire_minutes
是用户在客户端保持登录状态而无需再次输入凭据的时间量。host_name
:如果您设置了host_name
,则必须使用运行服务器的机器的 IP(或域名),例如 host_name: 192.168.1.100。此 IP(或域名)必须对 Conan 客户端可见(并可解析),因此如果您的服务器有多个网络接口,请考虑到这一点。public_port
:在虚拟化、Docker 或任何其他类型的端口重定向下运行时可能需要。文件上传/下载由系统生成自己的 URL 来提供服务,因此文件存储后端是独立的。这些 URL 需要它们从外部通信的公共端口。如果留空,则使用port
值。示例: 在 Docker 容器中使用 conan_server,该容器内部在 9300 端口运行,但暴露 9999 端口(客户端将连接到该端口)
docker run ... -p9999:9300 ... # Check Docker docs for that
server.conf
[server] ssl_enabled: False port: 9300 public_port: 9999 host_name: localhost
ssl_enabled
Conan 本身不处理 SSL 流量,但您可以使用像 Nginx 这样的代理将 SSL 流量重定向到您的 Conan 服务器。如果您的 Conan 客户端通过“https”连接,请将 ssl_enabled 设置为 True。这样 conan_server 将生成带有“https”而不是“http”的上传/下载 URL。
注意
重要:Conan 客户端默认会验证服务器 SSL 证书,如果证书无效则不会连接。如果您有自签名证书,您有两种选择
使用 conan remote 命令禁用 SSL 证书检查。例如,conan remote add/update myremote https://somedir False
如果在 Conan 客户端中使用 core.net.http:cacert_path 配置,请将服务器 .crt 文件内容附加到 cacert.pem 位置。
上传包的存储文件夹(即您想要备份的文件夹)在 disk_storage_path
中定义。存储后端可能使用不同的通道,上传/下载的授权最多为 authorize_timeout
秒。该值应足够,以便不会拒绝大型下载/上传,但又不能太大以防止文件传输挂起。disk_authorize_timeout
值目前未使用。文件传输使用自己的令牌授权,这些令牌使用密钥 updown_secret
生成。此值应与上述 jwt_secret
不同。
权限参数¶
默认情况下,当服务器配置设置为读取时,可以匿名完成,但上传需要您是注册用户。用户可以轻松地在 [users]
部分注册,方法是为每个用户定义一对 login: password
。目前使用明文密码,但由于服务器是本地部署(在防火墙后面),您只需要信任您的系统管理员 :)
如果您想限制对特定包的读/写访问,请配置 [read_permissions]
和 [write_permissions]
部分。这些部分以以下形式指定模式和授权用户的序列
# use a comma-separated, no-spaces list of users
package/version@user/channel: allowed_user1,allowed_user2
例如
*/*@*/*: * # allow all users to all packages
PackageA/*@*/*: john,peter # allow john and peter access to any PackageA
*/*@project/*: john # Allow john to access any package from the "project" user
规则按顺序评估。如果模式的左侧匹配,则应用该规则,并且不会继续搜索匹配项。
身份验证¶
默认情况下,Conan 在 server.conf
文件中提供了一个简单的 用户: 密码
用户列表。
还有一个用于设置其他身份验证方法的插件机制。安装其中任何一个的过程是一个简单的两步过程
将身份验证器源文件复制到
.conan_server/plugins/authenticator
文件夹中。将
custom_authenticator: authenticator_name
添加到server.conf
[server] 部分。
这是一个可用身份验证器列表,访问其 URL 以获取它们,同时也可以报告问题和协作
htpasswd:使用您的服务器 Apache htpasswd 文件进行用户身份验证。获取它:https://github.com/d-schiffner/conan-htpasswd
LDAP:使用您的 LDAP 服务器进行用户身份验证。获取它:https://github.com/uilianries/conan-ldap-authentication
创建您自己的自定义身份验证器¶
如果您想创建自己的身份验证器,请在 ~/.conan_server/plugins/authenticator/my_authenticator.py
中创建一个 Python 模块
示例
def get_class():
return MyAuthenticator()
class MyAuthenticator(object):
def valid_user(self, username, plain_password):
return username == "foo" and plain_password == "bar"
该模块必须实现
一个工厂函数
get_class()
,它返回一个带有valid_user()
方法实例的类。包含
valid_user()
的类,该方法必须在用户和密码有效时返回 True,否则返回 False。
使用 Nginx 运行带 SSL 的 Conan 服务器¶
server.conf
[server] port: 9300nginx 配置文件
server { listen 443; server_name myservername.mydomain.com; location / { proxy_pass http://0.0.0.0:9300; } ssl on; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; }Conan 客户端中的远程配置
$ conan remote add myremote https://myservername.mydomain.com
在子目录中使用 Nginx 运行带 SSL 的 Conan 服务器¶
server.conf
[server] port: 9300nginx 配置文件
server { listen 443; ssl on; ssl_certificate /usr/local/etc/nginx/ssl/server.crt; ssl_certificate_key /usr/local/etc/nginx/ssl/server.key; server_name myservername.mydomain.com; location /subdir/ { proxy_pass http://0.0.0.0:9300/; } }Conan 客户端中的远程配置
$ conan remote add myremote https://myservername.mydomain.com/subdir/
使用 Apache 运行 Conan 服务器¶
您需要安装
mod_wsgi
。如果您想使用通过pip
安装的 Conan,配置文件应类似于以下示例Apache 配置文件(例如,/etc/apache2/sites-available/0_conan.conf)
<VirtualHost *:80> WSGIScriptAlias / /usr/local/lib/python3.6/dist-packages/conans/server/server_launcher.py WSGICallableObject app WSGIPassAuthorization On <Directory /usr/local/lib/python3.6/dist-packages/conans> Require all granted </Directory> </VirtualHost>如果您想使用从源代码检出的 Conan,例如在 /srv/conan 中,配置文件应如下所示
Apache 配置文件(例如,/etc/apache2/sites-available/0_conan.conf)
<VirtualHost *:80> WSGIScriptAlias / /srv/conan/conans/server/server_launcher.py WSGICallableObject app WSGIPassAuthorization On <Directory /srv/conan/conans> Require all granted </Directory> </VirtualHost>需要指令
WSGIPassAuthorization On
才能将 HTTP 基本身份验证传递给 Conan。另请注意,服务器配置文件位于配置的 Apache 用户的主目录中,例如 var/www/.conan_server,因此请记住使用该目录来配置您的 Conan 服务器。
另请参阅