我设法使用我们现有的tomcat设置artifactory。我设置为ARTIFACTORY_HOME=/opt/artifactory
,这部分效果很好。但是,还有jfrog access.war
文件,它也需要运行。我没有弄清楚用于指定其主页的变量,因此它默认为~/.jfrog_access
,这完全不是我喜欢的。
我将内容移到我的$ARTIFACTORY_HOME/access
并对其进行符号链接,但这不是确定的方法。任何帮助表示赞赏。
答案 0 :(得分:2)
如果有人绊倒了这个帖子并且遇到同样的问题:
对我来说,解决方法是将access.xml
下的zip文件中提供的上下文文件(artifactory.xml
和<zip extract>/misc/tomcat
)提取到Tomcat配置文件夹,例如: $CATALINA_HOME/conf/Catalina/localhost/
。之后,将在Access启动时识别$ARTIFACTORY_HOME
env。
答案 1 :(得分:0)
previous answer终于使我走上了在Amazon Linux上解决此问题的正确轨道。
除了将access.xml
和artifactory.xml
复制到${catalina.home}/host/MY_HOSTNAME
之外,我发现还需要进行其他一些更改。
我修改了XML上下文文件中的docBase
属性,因为我的服务器具有多个主机名:
/usr/share/tomcat8/conf/Catalina/repo.mydomain.org/access.xml
<Context path="/access" docBase="${catalina.home}/host/repo.mydomain.org/access.war">
<Parameter name="jfrog.access.bundled" value="true" override="true"/>
<!-- enable annotations scanning of access jar files -->
<JarScanner scanClassPath="false">
<JarScanFilter defaultPluggabilityScan="false" pluggabilityScan="access*" defaultTldScan="false"/>
</JarScanner>
</Context>
/usr/share/tomcat8/conf/Catalina/repo.mydomain.org/artifactory.xml
<Context crossContext="true" path="/artifactory" docBase="${catalina.home}/host/repo.mydomain.org/artifactory.war">
</Context>
重要说明::为了防止在通过Undeploy / Deploy WAR升级期间,Tomcat Manager删除上述两个XML文件,请确保它们归root
所有且不可写由tomcat
用户:
chown root.root access.xml artifactory.xml
chmod 644 access.xml artifactory.xml
如果您忘记执行上述操作,则可能最终会丢失这些文件,这将中断访问和人工Web应用程序之间的通信,从而导致登录失败(“用户名或密码不正确”)。在这种情况下,这些错误是由于Web应用程序之间缺乏通信而不是凭据本身存在问题造成的。
/usr/share/tomcat8/conf/Catalina/repo.mydomain.org/manager.xml
这使我能够通过access.war
上传新版本的artifactory.war
和https://repo.mydomain.org:8443/manager/html
:
<Context docBase="${catalina.home}/webapps/manager" privileged="true" antiResourceLocking="false">
</Context>
此外,我创建了以下文件夹作为artifactory.home
:
sudo mkdir /usr/share/artifactory
sudo chown tomcat.tomcat /usr/share/artifactory
tomcat8.conf
添加(或修改)以下行:
JAVA_OPTS="-Dartifactory.home=/usr/share/artifactory -Djfrog.access.home=/usr/share/artifactory/access -Dartifactory.access.client.serverUrl.override=http://localhost:8080/access"
注意:上面指定的Access Client URL必须使用 localhost ,以避免Server
HTTP参数被Apache及其模块覆盖。例如,如果我使用:
https://repo.mydomain.org/access/api/v1/system/ping
响应中的Server
HTTP标头值为:
Server: Apache/2.4.33 (Amazon) OpenSSL/1.0.2k-fips mod_jk/1.2.43
并且Access Client产生以下异常:
[ERROR] (o.j.a.c.AccessClientImpl:154) - Access client/server version mismatch. Client version: 4.1.5, Server version: 2.4.33 (Amazon) OpenSSL
这意味着Access Client取决于服务器标头中与#.#.#
匹配的第一个字符串。这似乎是Access Client的一个非常脆弱的部分。他们应该使用X-JFrog-Access-Server
之类的东西而不是尝试控制Web服务器设置的值。因此,重申一下,请使用http://localhost:8080/access
直接连接到tomcat服务器。
Artifactory 6.2.0取决于Apache Derby(具体版本可以在jfrog-artifactory-oss-6.2.0.zip\artifactory-oss-6.2.0\tomcat\lib
中找到)。这应该作为共享库添加到Tomcat:
mkdir /usr/share/tomcat8/shared
cd /usr/share/tomcat8/shared
wget http://central.maven.org/maven2/org/apache/derby/derby/10.11.1.1/derby-10.11.1.1.jar
在catalina.properties
中添加或修改以下行:
shared.loader=${catalina.home}/shared/*.jar
因为我们希望https://repo.mydomain.org
进入Artifactory网络应用程序:
mkdir /usr/share/tomcat8/host/repo.mydomain.org/ROOT
echo '<html><head><meta http-equiv="refresh" content="0;URL=/artifactory"></meta></head><body></body></html>' > /usr/share/tomcat8/host/repo.mydomain.org/ROOT/index.html
并确保服务在重新启动时自动启动:
sudo chkconfig httpd on
sudo chkconfig tomcat8 on