在Docker容器中运行Jira Core,Jira Software或Jira Service Desk。
“最好的软件团队早期和经常发货 - 没有多少工具,一个工具。 Jira Software专为软件团队的每个成员构建,用于规划,跟踪和发布优秀的软件。 - [ Source ]
在每个版本上,都会重建最旧和最新的标记。
Jira将在http:// yourdockerhost 上提供
Jira将在http:// yourdockerhost
$ curl -O https://raw.githubusercontent.com/teamatldocker/jira/master/docker-compose.yml $ docker-compose up -d
Jira将在http:// yourdockerhost上提供数据将保留在docker volume jiravolume中。
jiravolume
docker run -d -p 80:8080 -v jiravolume:/var/atlassian/jira --name jira teamatldocker/jira
这使用了postgres图像。数据将保留在docker volume postgresvolume中。注意:您应该更改密码!
postgresvolume
docker network create jiranet docker run --name postgres -d \ --network jiranet \ -v postgresvolume:/var/lib/postgresql \ -e 'POSTGRES_USER=jira' \ -e 'POSTGRES_PASSWORD=jellyfish' \ -e 'POSTGRES_DB=jiradb' \ -e 'POSTGRES_ENCODING=UNICODE' \ -e 'POSTGRES_COLLATE=C' \ -e 'POSTGRES_COLLATE_TYPE=C' \ postgres:9.5-alpine
docker run -d --name jira \ --network jiranet \ -v jiravolume:/var/atlassian/jira \ -e "JIRA_DATABASE_URL=postgresql://jira@postgres/jiradb" \ -e "JIRA_DB_PASSWORD=jellyfish" \ -p 80:8080 teamatldocker/jira
您可以使用环境变量JIRA_PROXY_NAME和JIRA_PROXY_PORT指定代理主机和代理端口。该值将在启动时在Atlassian server.xml中设置!
使用HTTPS时,还必须包含环境变量JIRA_PROXY_SCHEME。
这将在/opt/jira/conf/server.xml中设置server.xml内的值,并使用当前的Jira版本构建映像
这将在/opt/jira/conf/server.xml中设置server.xml内的值,并使用当前的Jira版本
/opt/jira/conf/server.xml
docker run -d --name jira \ -v jiravolume:/var/atlassian/jira \ -e "JIRA_PROXY_NAME=myhost.example.com" \ -e "JIRA_PROXY_PORT=443" \ -e "JIRA_PROXY_SCHEME=https" \ teamatldocker/jira
PostgreSQL示例:
首先启动数据库服务器:
注意:更改密码!
docker network create jiranet docker run --name postgres -d \ --network jiranet \ -e 'POSTGRES_USER=jira' \ -e 'POSTGRES_PASSWORD=jellyfish' \ postgres:9.5
这是Postgres的官方形象。
然后使用正确的整理创建数据库:
docker run -it --rm \ --network jiranet \ postgres:9.5-alpine \ sh -c 'exec createdb -E UNICODE -l C -T template0 jiradb -h postgres -p 5432 -U jira'
密码是jellyfish。使用正确的编码和排序规则在用户jira下创建数据库jiradb。
jellyfish
jira
jiradb
然后启动Jira:
启动Jira并将其链接到postgres实例。
注意:建议不要在生产中使用Jira的默认初始化数据库!默认数据库都使用不推荐的排序规则!请仅将其用于演示目的!
这是一个“徒步”的演示版。使用docker cli。在这个例子中,我们设置了一个空的PostgreSQL容器。然后我们相应地连接和配置Jira。之后,Jira容器可以始终在数据库上恢复。
步骤:
让我们使用PostgreSQL图像并进行设置:
$ docker network create jiranet $ docker run --name postgres -d \ --network jiranet \ -e 'POSTGRES_DB=jiradb' \ -e 'POSTGRES_USER=jiradb' \ -e 'POSTGRES_PASSWORD=jellyfish' \ postgres:9.5-alpine
$ docker run --name postgres -d \ --network jiranet \ -e 'DB_USER=jiradb' \ -e 'DB_PASS=jellyfish' \ -e 'DB_NAME=jiradb' \ sameersbn/postgresql:9.5-4
现在启动Jira容器并让它使用容器。首次启动时,您必须自己配置Jira并使用测试许可证填写它。之后,每次连接到数据库时,都会跳过Jira配置。
$ docker run -d --name jira \ --network jiranet \ -v jiravolume:/var/atlassian/jira \ -e "JIRA_DATABASE_URL=postgresql://jiradb@postgres/jiradb" \ -e "JIRA_DB_PASSWORD=jellyfish" \ -p 80:8080 teamatldocker/jira
让我们使用MySQL映像并进行设置:
$ docker network create jiranet $ docker run -d --name mysql \ --network jiranet \ -e 'MYSQL_ROOT_PASSWORD=verybigsecretrootpassword' \ -e 'MYSQL_DATABASE=jiradb' \ -e 'MYSQL_USER=jiradb' \ -e 'MYSQL_PASSWORD=jellyfish' \ mysql:5.6
$ docker run -d --name jira \ --network jiranet \ -v jiravolume:/var/atlassian/jira \ -e "JIRA_DATABASE_URL=mysql://jiradb@mysql/jiradb" \ -e "JIRA_DB_PASSWORD=jellyfish" \ -p 80:8080 \ teamatldocker/jira
从Jira版本7.8.0开始,Atlassian不再提供/使用jTDS JDBC驱动程序,而是捆绑Microsoft JDBC驱动程序。这被证明有点令人头疼,因为虽然jTDS驱动程序使用传统的JDBC URL方案,但Microsoft的驱动程序使用的非标准JDBC URL方案与通常情况大不相同(有关详细信息,请参阅问题#72 )。由于偏离标准,希望连接到SQL Server数据库的用户必须在JIRA_DATABASE_URL中对其主机/端口/数据库信息进行编码,并且无法利用各个JIRA_DB_*变量。请注意,所需的任何其他驱动程序属性都可以添加到与下面示例中处理的databaseName相同的内容中。
JIRA_DATABASE_URL
JIRA_DB_*
databaseName
docker run \ -d \ --name jira \ --network jiranet \ -v jiravolume:/var/atlassian/jira \ -e "JIRA_DATABASE_URL=sqlserver://MySQLServerHost:1433;databaseName=MyDatabase" \ -e "JIRA_DB_USER=jira-app" \ -e "JIRA_DB_PASSWORD=***" \ -p 8080:8080 \ teamatldocker/jira
Jira容器可以等待数据库容器启动。您必须指定数据库容器的主机和端口,Jira将等待一分钟的数据库。
您可以使用环境变量定义等待参数:
DOCKER_WAIT_HOST
DOCKER_WAIT_PORT
DOCKER_WAIT_TIMEOUT
DOCKER_WAIT_INTERVAL
等待PostgreSQL数据库的示例:
首先启动Jira:
docker network create jiranet docker run --name jira \ --network jiranet \ -v jiravolume:/var/atlassian/jira \ -e "DOCKER_WAIT_HOST=postgres" \ -e "DOCKER_WAIT_PORT=5432" \ -e "JIRA_DATABASE_URL=postgresql://jira@postgres/jiradb" \ -e "JIRA_DB_PASSWORD=jellyfish" \ -p 80:8080 teamatldocker/jira
数据库最多等待60秒。
在60秒内启动数据库:
docker run --name postgres -d \ --network jiranet \ -v postgresvolume:/var/lib/postgresql \ -e 'POSTGRES_USER=jira' \ -e 'POSTGRES_PASSWORD=jellyfish' \ -e 'POSTGRES_DB=jiradb' \ -e 'POSTGRES_ENCODING=UNICODE' \ -e 'POSTGRES_COLLATE=C' \ -e 'POSTGRES_COLLATE_TYPE=C' \ postgres:9.5-alpine
docker-compose build jira
如果要构建特定版本,只需替换.env中的版本并再次运行
docker-compose build jirqa
输入:
$ docker run -d --name jira \ -v jiravolume:/var/atlassian/jira \ -e "JIRA_PROXY_NAME=myhost.example.com" \ -e "JIRA_PROXY_PORT=443" \ -e "JIRA_PROXY_SCHEME=https" \ teamatldocker/jira
将在/opt/jira/conf/server.xml 中设置server.xml内的值
将在/opt/jira/conf/server.xml
这是一个使用2个Docker命令在NGINX后面运行Atlassian Jira的示例!
首次启动Jira:
$ docker network create jiranet $ docker run -d --name jira \ --network jiranet \ -v jiravolume:/var/atlassian/jira \ -e "JIRA_PROXY_NAME=192.168.99.100" \ -e "JIRA_PROXY_PORT=80" \ -e "JIRA_PROXY_SCHEME=http" \ teamatldocker/jira
dockertools 的示例
dockertools
然后启动NGINX:
$ docker run -d \ -p 80:80 \ --network jiranet \ --name nginx \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://jira:8080" \ teamatldocker/nginx
Jira将在http://192.168.99.100上提供。
这是使用2个Docker命令在NGINX-HTTPS后面运行Atlassian Jira的示例!
注意:这是一个自签名证书!支持letsencrypt的受信任证书。文档可以在这里找到: teamatldocker / nginx
$ docker network create jiranet $ docker run -d --name jira \ --network jiranet \ -v jiravolume:/var/atlassian/jira \ -e "JIRA_PROXY_NAME=192.168.99.100" \ -e "JIRA_PROXY_PORT=443" \ -e "JIRA_PROXY_SCHEME=https" \ teamatldocker/jira
$ docker run -d \ -p 443:443 \ --name nginx \ --network jiranet \ -e "SERVER1REVERSE_PROXY_LOCATION1=/" \ -e "SERVER1REVERSE_PROXY_PASS1=http://jira:8080" \ -e "SERVER1CERTIFICATE_DNAME=/CN=CrustyClown/OU=SpringfieldEntertainment/O=crusty.springfield.com/L=Springfield/C=US" \ -e "SERVER1HTTPS_ENABLED=true" \ -e "SERVER1HTTP_ENABLED=false" \ teamatldocker/nginx
Jira将在https://192.168.99.100上提供。
Jira像任何Java应用程序都需要大量内存。如果使用Docker --mem选项限制内存使用量,请确保提供足够的内存。否则,Jira将开始随机重启。
您应该为容器提供比JVM最大内存设置多至少1-2GB的容量。
通过操作setenv.sh文件中的属性来应用Java JVM内存设置,此映像可以为您设置这些属性。
setenv.sh
以下示例为Jira 8.0+ (2048兆字节)和最大8192兆字节应用最小内存。
Atlassian文档中的正确属性是: - JVM_MINIMUM_MEMORY - JVM_MAXIMUM_MEMORY
JVM_MINIMUM_MEMORY
JVM_MAXIMUM_MEMORY
如果您在属性名称前面加上SETENV_,则图像将设置这些属性。
SETENV_
docker run -d -p 80:8080 --name jira \ -v jiravolume:/var/atlassian/jira \ -e "SETENV_JVM_MINIMUM_MEMORY=2048m" \ -e "SETENV_JVM_MAXIMUM_MEMORY=8192m" \ teamatldocker/jira
您可以在启动时启用osgi插件清除并重新启动。图像将无情地清除目标
这将有助于解决损坏的插件缓存。确保增加了插件超时,因为Jira必须在每次启动时重建整个缓存。
这由环境变量JIRA_PURGE_PLUGINS_ONSTART控制。可能的值:
JIRA_PURGE_PLUGINS_ONSTART
true
false
示例:
$ docker run -d -p 80:8080 -v jiravolume:/var/atlassian/jira \ -e "JIRA_PURGE_PLUGINS_ONSTART=true" \ --name jira teamatldocker/jira
使用Atlassian Crowd启用单点登录。什么是人群?
“用户可以来自任何地方:Active Directory,LDAP,Crowd本身或其任何组合。在一个位置控制所有应用程序的权限 - Atlassian,Subversion,Google Apps或您自己的应用程序。“ - Atlassian Crowd
这由环境变量JIRA_CROWD_SSO控制。可能的值:
JIRA_CROWD_SSO
ignore
您必须按照手册进行Jira和Crowd中的进一步设置:文档
$ docker run -d -p 80:8080 -v jiravolume:/var/atlassian/jira \ -e "JIRA_CROWD_SSO=true" \ --name jira teamatldocker/jira
SSO将被激活,您需要Crowd才能进行身份验证。
您可以使用自定义配置,例如Tomcat的server.xml。当您需要在Tomcat内部配置此图像支持的环境变量无法实现的内容时,这是必需的。我将举例说明server.xml任何其他配置文件的工作方式类似。
server.xml
docker run -d --name jira \ -p 80:8080 \ -v jiravolume:/var/atlassian/jira \ -v $(pwd)/server.xml:/opt/jira/conf/server.xml \ teamatldocker/jira
注意:server.xml位于执行命令的目录中。
您可以使用自己的工具轻松扩展此图像,方法如下:
FROM teamatldocker/jira USER root ... Install your tooling ... USER jira CMD ["jira"]
此描述无任何保证,因为此过程可能会过时或省略可能导致数据丢失的关键细节。使用风险自负。如果你想用调试端口运行Jira,请参阅examples/debug - 基本上我们做的是 - 我们将调试端口添加为env参数 - 我们覆盖start-jira.sh脚本,因此我们不会将用户catalina.sh run作为启动发送器评估者catalina.sh jpda run ..那是关于我们在那里改变的任何事情 - 我们将端口5005暴露给主机所以我们可以连接
examples/debug
catalina.sh run
catalina.sh jpda run
在采取任何措施之前,请确保您可以升级:
如果已安装的插件全部向上兼容,请在Jira管理面板内部进行检查。 Jira有一个非常好的反馈系统,你可以看到你的插件提供程序是否与最新的Jira版本兼容。
如果有人测试了最新的图像,请在此存储库中检查或询问。当Jira升级到新的主要版本时,我遇到了一些问题:例如6.x到7.x.在这种情况下,有时必须调整图像。通常可以使用次要版本,特别是bugfix版本,没有任何问题。
现在制作一个Backup以便能够回退:
Backup
现在Upgrade您的Jira容器:
Upgrade
docker rm your_jira_container_name
docker pull teamatldocker/jira:new_version
teamatldocker/jira:new_version
docker logs -f your_jira_container_name
现在Test您的Jira实例:
Test
测试好吗?
完了!
测试不行吗?
回滚:
teamatldocker/jira:old_version
让我们假设您使用我的示例设置运行Jira 7.6.2并且您想要升级到Jira 7.7.1。
已使用以下设置启动PostgreSQL:
$ docker run --name postgres -d \ --network jiranet \ -v postgresvolume:/var/lib/postgresql \ ... postgres:9.5-alpine
已使用以下设置启动Jira:
$ docker run -d --name jira \ --network jiranet \ -v jiravolume:/var/atlassian/jira \ ... -p 80:8080 teamatldocker/jira:7.6.2
这意味着:
7.6.2
postgres
使用以下命令停止这两个实例:
$ docker stop jira $ docker stop postgres
正确的顺序是第一个Jira然后数据库。
Backup这两卷都是为了能够Rollback。在此示例中,我们使用 blacklabelops / volumerize 备份到另一个卷。
Rollback
运行以下命令,只需一个简单步骤即可备份数据库和Jira:
$ docker run \ --rm \ -v jiravolume:/source/application_data:ro \ -v postgresvolume:/source/application_database_data:ro \ -v jirabackup:/backup \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ blacklabelops/volumerize backup
jiravolume和postgresvolume将在jirabackup中备份。
现在Upgrade Jira将容器切换到新图像:
$ docker rm jira $ docker pull teamatldocker/jira:7.7.1
使用与之前相同的参数启动数据库和Jira,但使用新的映像标记7.7.1:
7.7.1
$ docker start postgres $ docker run -d --name jira \ --network jiranet \ -v jiravolume:/var/atlassian/jira \ ... -p 80:8080 teamatldocker/jira:7.7.1
等到Jira结束升级程序,您的实例再次可用!
如果一切顺利,你就完蛋了!
如果遇到问题,可以Rollback到最后一个版本。
docker stop jira docker stop postgres
Restore这两个卷都是为了能够再次使用上一个版本。在此示例中,我们使用 blacklabelops / volumerize 从另一个卷还原。
Restore
运行以下命令,只需一个简单步骤即可还原数据库和Jira:
$ docker run \ --rm \ -v jiravolume:/source/application_data \ -v postgresvolume:/source/application_database_data \ -v jirabackup:/backup:ro \ -e "VOLUMERIZE_SOURCE=/source" \ -e "VOLUMERIZE_TARGET=file:///backup" \ blacklabelops/volumerize restore
数据将写回jiravolume和postgresvolume。
再次启动旧版本:
使用与之前相同的参数启动数据库和Jira,但使用旧映像7.6.2:
$ docker start postgres $ docker rm jira $ docker run -d --name jira \ --network jiranet \ -v jiravolume:/var/atlassian/jira \ ... -p 80:8080 teamatldocker/jira:7.6.2