前言
本文记录如何在 MacOS 系统上安装 jira 7.11.2 破解版的步骤,笔者分别尝试了独立安装
和容器安装
两种方式,很遗憾,独立安装
的方式最后一直失败,容器安装
的反而非常的容易;如果你想快速搭建 MacOS 系统上的 Jira,那么可以直接跳到容器安装小节;
独立安装
Jira 安装步骤
安装 wget
1
brew install wget --with-libressl
下载最新版 jira 7.8.2
1
wget https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-7.8.2.tar.gz
解压
1
2$ gzip -d atlassian-jira-software-7.8.2.tar.gz
$ tar -xvf atlassian-jira-software-7.8.2.tar[Optional] 修改 port
1
$ vim /Users/shangyang/tools/atlassian-jira-software-7.8.2-standalone/conf/server.xml
找到 8080 并修改为你想要的任何端口,我使用的是 7070
将破解文件 atlassian-extras-3.2.jar 和 mysql 驱动拷贝到 jira 的 lib 目录中
1
2$ cp ~/tools/atlassian-extras-3.2.jar ~/tools/atlassian-jira-software-7.8.2-standalone/atlassian-jira/WEB-INF/lib
$ cp ~/tools/mysql-connector-java-5.1.42-bin.jar ~/tools/atlassian-jira-software-7.8.2-standalone/atlassian-jira/WEB-INF/lib设置 jira home
官网教程中 https://confluence.atlassian.com/jirakb/startup-check-setting-your-jira-home-873901793.html 中提到三种设置 jira home 的方式,这里,我采用设置环境变量的方式1
$ vim ~/.bash_profile
添加
1
export JIRA_HOME="/Users/shangyang/tools/atlassian-jira-software-7.8.2-standalone/atlassian-jira"
然后激活新增的环境变量
1
$ source ~/.bash_profile
[Optional] 设置内网穿透
由于 Jira 部署在内网服务器中,因此,这里设置内网穿透的方式,使得可以从外网 IP 访问,修改 ngrok.yml 文件1
2
3
4
5
6
7
8
9tunnels:
http:
subdomain: jenkins
proto:
http: 8080
http2:
subdomain: jira
proto:
http: 7070只需要在原来的 http tunnel 上新增一个 subdomain 即可,这样可以共享外网的端口;启动 ngrok 客户端使其同时支持 8080 和 7070 端口并非一帆风顺,过程比较曲折,
mysql 安装与配置
mysql 安装
因为 7.8.2 只能支持到 5.7+,因此,这里只能安装 msyql 5.7,这里使用 brew 进行安装,
首先,检查 brew 是否包含了 mysql 5.7
1
$ brew info mysql@5.7
安装
1
brew install mysql@5.7
设置
首先,force link,使得系统默认使用的是 mysql 5.71
$ brew link mysql@5.7 --force
然后,检查
1
2$ mysql -V
Ver 14.14 Distrib 5.7.22, for osx10.13 (x86_64)将 mysql 使用服务的方式启动,
首先,安装 brew servers1
$ brew tap homebrew/services
然后,启动 mysql,注意,这里的 mysql 的服务名是 mysql@5.7
1
$ brew services start mysql@5.7
再次,检查 mysql 的服务是否已经启动,
1
2
3
4
5$ brew services list
Name Status User Plist
jenkins stopped
mongodb@3.4 stopped
mysql@5.7 started shangyang /Users/shangyang/Library/LaunchAgents/homebrew.mxcl.mysql@5.7.plist最后,设置 root 账户
1
mysqladmin -u root password 'uti&$ad23'
mysql 配置
按照 jira 官网的 https://confluence.atlassian.com/adminjiraserver/connecting-jira-applications-to-mysql-5-7-966063305.html 的提示,如果 mysql 的版本是 5.7.6 以后的,需要做如下的设置,
首先,通过命令行登录 mysql,然后初始化数据库和访问用户,
1
$ mysql -u root -p
创建 jiradb 数据库
1
2mysql> CREATE DATABASE jiradb CHARACTER SET utf8 COLLATE utf8_bin;
Query OK, 1 row affected (0.00 sec)然后,创建 jira 账户 shangyang,并将相应权限赋值给他;
1
2
3mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,REFERENCES,ALTER,INDEX on jiradb.* TO 'shangyang'@'localhost' IDENTIFIED BY 'Jidaf@421';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;最后,退出
1
mysql> exit
然后,通过 my.cnf 文件对 mysql 进行配置,配置如下内容,
1
2
3
4
5
6
7[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
skip_ssl
default-storage-engine=INNODB
max_allowed_packet=256M
innodb_log_file_size=256M默认 bind-address = 127.0.0.1 只允许本机访问,但是,我需要远程访问,因此进行了修改;
(备注,通过 brew 安装后,找了半天也没有找到 my.cnf 在哪?使用了mysql --help | grep my.cnf
所提示的路径也没有找到,后来无意之中在目录/usr/local/etc
中找到了)- 最后,重启 mysql
1
$ brew services restart mysql@5.7
jira 配置和破解
启动
1
2$ cd ~/tools/atlassian-jira-software-7.8.2-standalone/bin
$ ./start-jira.sh配置数据库
首先,通过如下步骤设置 startupdatabase.xml,
1
2$ mkdir atlassian-jira/import/
$ cp atlassian-jira/WEB-INF/classes/startupdatabase.xml atlassian-jira/import/然后配置数据库连接,进入 jira 开始设置,ip:7070 $\to$
然后选择,我要自己设置(I’ll set it up myself),点击下一步 $\to$ 数据库设置,选择使用我自己的数据库,
,点击 Test Connection,提示连接成功,然后点击 Next,按照网上的教程,走到这一步应该是直接能够成功的,但是我本地始终报错,错误异常
java.nio.file.NoSuchFileException: /Users/shangyang/tools/atlassian-jira-software-7.8.2-standalone/atlassian-jira/import/startupdatabase.xml
这个文件在 atlassian-jira/WEB-INF/classes 中,只需要将其拷贝到 atlassian-jira/import/ 目录中即可;
https://community.atlassian.com/t5/Jira-questions/Jira-is-not-coming-up-because-of-no-startupdatabase-xml-file-amp/qaq-p/606453
所以,我们需要拷贝startupdatabase.xml
到指定的目录中,1
2$ mkdir atlassian-jira/import/
$ cp atlassian-jira/WEB-INF/classes/startupdatabase.xml atlassian-jira/import/
设置 Administrator 账户,输入如下信息
Full name: Shang Yang
Email Address: comedshang@163.com
Username: shangyang
Password: yourpasswd
点击下一步,报错,
Cannot add user, all the user directories are read-only
.
查看日志,发现如下错误1
Caused by: java.sql.SQLSyntaxErrorException: Unknown table 'ao_21d670_whitelist_rules' in information_schema
从 https://confluence.atlassian.com/confkb/can-t-create-a-space-due-to-unknown-table-in-information_schema-when-using-mysql-953131768.html 知道,是因为我使用了 mysql 8.0 的 driver 所导致的,切换成 mysql 5.1 的驱动就解决了,但是,这个问题解决后,
Cannot add user, all the user directories are read-only
问题依旧;最后就被卡在了这一步了,即便是我重新从官网通过 .dmg 的方式安装,到这一步后,同样出现这样的一个错误;… 放弃!最后还是使用 jira cloud,每个月 10 美金,还好,两杯咖啡的钱罢了!
容器安装
首先需要安装 Mac Docker Desktop
拉取 jira 和 mysql 的镜像
1 | $ docker pull cptactionhank/atlassian-jira-software |
在本机上创建容器挂载目录
在本地创建两个目录 ~/jira/home 和 ~/jira/mysql ,分别用来挂载 jira 和 mysql 容器中的数据文件
1
2
3$ mkdir $HOME/jira
$ mkdir $HOME/jira/home
$ mkdir $HOME/jira/mysql
创建 mysql 容器
1 | docker run --name jira-mysql --restart always -v $HOME/jira/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=<root_password> -d mysql:5.7 |
说明,
- 将 <root_password> 部分替换成你的 root 密码,
docker run
将从指定的镜像mysql:5.7
中创建一个可执行的容器,--name
指定该容器的别名,-v
表示将容器中 mysql 的数据路径/var/lib/mysql
映射到本地路径$HOME/jira/mysql
中去;
检查,
检查创建好的容器
1
2
3$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a677d27a1b20 mysql:5.7 "docker-entrypoint.s…" 1 min ago Up... 3306/tcp, 33060/tcp jira-mysql可以看到,我们成功创建并执行了一个别名为
jira-mysql
的 mysql 容器;检查本机挂载的路径
1
$ docker inspect jira-mysql
直接找到
HostConfig
的属性Binds
,确保映射路径如下,1
2
3
4"HostConfig": {
"Binds": [
"/Users/shangyang/jira/mysql:/var/lib/mysql"
],
注意,
- 由于 MacOS Docker Desktop 的特殊性,宿主机只能运行在
Host
模式下,因此这里不做端口映射;后续 jira 数据库配置的时候,笔者将会描述如何从宿主机中连接容器中的 msyql 若
docker run
命令执行失败了,再次执行docker run
命令会报错,提示容器jira-mysql
容器已经存在了,不能重复创建了,这个时候,需要删除先前所创建的容器1
$ docker rm a677d27a1b20
指定容器 ID 直接删除即可;然后重新执行
docker run
创建 mysql 容器即可;
初始化 mysql
首先,通过docker run -it
命令执行容器命令,进入容器中的 msyql 控制台1
$ docker run -it --link jira-mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
然后,对 mysql 进行初始化配置,
创建 jira 所需要的表
1
2
3mysql> create database jira default character set utf8 collate utf8_bin;
mysql> CREATE USER `jira`@`%` IDENTIFIED BY 'jira';GRANT ALL ON *.* TO `jira`@`%` WITH GRANT OPTION;
mysql> alter user 'jira'@'%' identified with mysql_native_password by '<jira_password>';上面的命令创建 jira 数据库以及用户 jira,注意,将
<jira_password>
替换为你自己 jira 用户的密码;- 更改数据库事务级别
1
2
3mysql> set global transaction isolation level read committed;
mysql> set session transaction isolation level read committed;
mysql> exit
创建 jira 容器
1 | docker run --name jira detach --restart always -v $HOME/jira/home:/var/atlassian/jira --publish 7070:8080 cptactionhank/atlassian-jira-software |
通过镜像 cptactionhank/atlassian-jira-software 创建一个名为jira
的容器,注意,这里将容器中的 jira HOME 路径映射到了 $HOME/jira/home 上,并且,将容器中的 JIRA 端口 8080 映射到了 7070;检查,1
2
3
4$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a677d27a1b20 mysql:5.7 "docker-entrypoint.s…" 14 hours ago Up 13 hours 3306/tcp, 33060/tcp jira-mysql
266a2ed13684 cptactionhank/atlassian-jira-software "/docker-entrypoint.…" 14 hours ago Up 13 hours 0.0.0.0:7070->8080/tcp jira
可见,jira 容器已经创建好了;
配置 jira
登录 http://localhost:7070 进行配置,过程参考jira 配置和破解一小节,唯一不同的是数据库的配置,如图
注意,172.17.0.2
是容器相对于 Host 的 IP 地址,那么如何获得容器的 IP 呢?执行如下命令可以快速检查,1
2$ docker run -it --link jira-mysql:mysql --rm mysql sh -c 'echo "$MYSQL_PORT_3306_TCP_ADDR" "$MYSQL_PORT_3306_TCP_PORT" "$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
172.17.0.2 3306 xxx
破解 jira
替换 atlassian-extras-3.2.jar
直接将破解包 atlassian-extras-3.2.jar 替换 jira 容器中 WEB-INF/lib/atlassian-extras-3.2.jar 即可,1
docker cp atlassian-extras-3.2.jar 266a2ed13684:/opt/atlassian/jira/atlassian-jira/WEB-INF/lib/
注意,266a2ed13684 是 jira 容器的 ID
重启 jira 容器
1
docker restart jira
检查
如果显示 Unlimited users 则表示破解成功了!