SchemaSpyとは
SchemaSpyは、データベースのドキュメントをHTML化し、Entity Relationship Diagramを含むドキュメントを作成します。
HTML化されたドキュメントを使用することで、チームやコミュニティと簡単に共有することができます。
SchemaSpy * Database Documentation Built Easy.
設定方法
Javaベースで動いているが、dockerを使用することで楽に環境を用意できる
dockerのmysqlを使用する場合設定が変わるかも
ファイル構成
schemaspy
├ docker-compose.yml
└ docker
└ schemaspy
├ Dockerfile
├ config
│ └ schemaspy.properties
└ drivers
└ mysql-connector-java-8.0.16.jar
docker-compose.yml
※commandに-allオブションを付けているので全スキーマ取得します
version: "3.8"
services:
schemaspy:
build: ./docker/schemaspy
image: schemaspy/schemaspy
volumes:
- ./docker/schemaspy/output:/output
- ./docker/schemaspy/drivers:/drivers
- ./docker/schemaspy/config/schemaspy.properties:/app/schemaspy.properties:ro
extra_hosts:
- localhost:192.168.X.X # localhostと自身のpcのipアドレスを紐付け
container_name: "schemaspy"
command: "java -jar schemaspy.jar -configFile /app/schemaspy.properties -debug -all"
nginx_schemaspy:
image: nginx:1.19.5-alpine
container_name: "nginx_schemaspy"
ports:
- "8080:80"
volumes:
- ./docker/schemaspy/output:/usr/share/nginx/html:ro
Dockerfile
FROM openjdk:8u212-jdk-alpine ENV DRIVER_URL https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.6/mysql-connector-java-5.1.6.jar ENV APP_URL https://github.com/schemaspy/schemaspy/releases/download/v6.1.0/schemaspy-6.1.0.jar # 使用中のmysqlのバージョンを記載 ENV MYSQL_VERSION=X.X.XX WORKDIR /app RUN apk --update add graphviz ttf-dejavu && \ apk --update add --virtual .builddep tzdata wget libressl && \ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \ wget -O mysql-connector-java.jar ${DRIVER_URL} && \ wget -O schemaspy.jar ${APP_URL} && \ apk del .builddep && \ rm -rf /var/cache/apk/*
schemaspy.properties
schemaspy.t=mysql
schemaspy.dp=/drivers/mysql-connector-java-8.0.16.jar
schemaspy.host=localhost
schemaspy.port=3306
schemaspy.db=xxxx // ドキュメントを取得したいdb名
schemaspy.u=xxxx // ユーザー名
schemaspy.u=xxxx // パスワード(あるなら)
schemaspy.o=/output
my.cnf
dockerコンテナからホストpcへのアクセスとなるため、mysqlに外部からのアクセスを許可する設定を行う。
※セキュリティ的に良くなさそうなので、ドキュメント生成後はbind-address = 127.0.0.1に変更した方がいいかも
[mysqld]
# Only allow connections from localhost
# bind-address = 127.0.0.1
bind-address = 0.0.0.0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
ドライバー取得
$ cd ./drivers
$ curl -L https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.16.tar.gz |
tar xvzf - -C drivers --strip=1 mysql-connector-java-8.0.16/mysql-connector-java-8.0.16.jar
mysql> GRANT ALL PRIVILEGES ON *.* TO <ユーザー名>@'192.168.%' IDENTIFIED BY '' WITH GRANT OPTION;
192.168から始まるipからのrootユーザーでのアクセスを許可
root@'%'とすると全てのipからのアクセスを許可
mysql> select user, host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| <ユーザー名> | 192.168.% | <----このユーザーで外部からログインできる
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
4 rows in set (0.00 sec)
$ docker-compose up
ここにログが吐かれます
localhost:8080でアクセスできる