- 投稿日:2019-11-25T22:36:33+09:00
Xiaomi Mijia Bluetoothを使用した温湿度ロギング環境構築
Xiaomi Mijia Bluetoothを使用した温湿度ロギング環境構築
AliExpressで入手した格安温湿度計を使った温湿度ロギング環境構築方法。
環境
Debian 9.8
mysql Ver 15.1 Distrib 10.1.37-MariaDB
MySQL Workbench 8.0
Power BI DesktopRaspberry Pi Zero W
Xiaomi Mijia Bluetooth 2個、1個あたり1300円くらいかと。
dynabook EX/56LWH、Windows10 Home 64bit方針
Raspberry Pi Zero WとXiaomi Mijia Bluetooth 2個をBluetoothでペアリングし、Raspberry Pi Zero WのMySQLにデータを蓄積して、dynabookにインストールしたPower BIでグラフ化します。
設定
ラズパイと温湿度計を接続するまでは下記の記事を参考にしました。
Xiaomi 気温湿度計室外だと外壁があるため、見通し1mも届かないようです。
窓のすぐ近くの物置内に室外用の温湿度計を設置して、室内窓際にRaspberry Pi Zero Wを設置してなんとかペアリング出来ました。室内に設置した温湿度計はRaspberry Pi Zero Wから2mくらい離してもOKみたいです。(1)/home/pi/mitemp/demo_custom.pyを編集する。
温湿度計を2個設置したので、MACアドレスで区別してデータを蓄積するようにコードを追加して、Raspberry Pi Zero Wに作成したテーブルにデータを書き込みます。
MySQL Workbench 8.0で事前にデータベースとテーブルを作成しておきます。demo_custom.pydef poll(args): """Poll data from the sensor.""" backend = _get_backend(args) poller = MiTempBtPoller(args.mac, backend) print("Getting data from Mi Temperature and Humidity Sensor") print("FW: {}".format(poller.firmware_version())) print("Name: {}".format(poller.name())) print("Battery: {}".format(poller.parameter_value(MI_BATTERY))) print("Temperature: {}".format(poller.parameter_value(MI_TEMPERATURE))) print("Humidity: {}".format(poller.parameter_value(MI_HUMIDITY))) print("MAC: {}".format(args.mac)) battery = format(poller.parameter_value(MI_BATTERY)) temp = format(poller.parameter_value(MI_TEMPERATURE)) humi = format(poller.parameter_value(MI_HUMIDITY)) mac = format(args.mac) now = datetime.datetime.now() connection = MySQLdb.connect(host='192.168.**.***',user='****',passwd='****',db='pizero_db',charset='utf8') cursor = connection.cursor() sql = 'INSERT INTO env_table VALUES (%s, %s, %s, %s, %s)' data = (now,mac,battery,temp,humi) cursor.execute(sql, data) connection.commit() connection.close()(2)crontabを編集する。
温湿度計が電池駆動なので1時間に1回の測定にしています。0 * * * * python3 /home/pi/mitemp/demo_custom.py --backend bluepy poll mac_outside 0 * * * * python3 /home/pi/mitemp/demo_custom.py --backend bluepy poll mac_inside(3)Power BIでグラフ化する。
冬が近づいているので、日ごとの最小値をプロットしてみています。
今後
分電盤のブレーカーにCTを設置して、AD変換したデータからラズパイで消費電力を求めるシステムを作っています。温湿度計のデータと連携させて、室外環境から消費電力を予測するシステムを作ろうかと思います。
以上
- 投稿日:2019-11-25T17:41:20+09:00
【Go】SpaceCloudでMySQL/GraphQLサーバを立ち上げる
本記事で触れないこと
- GraphQLに関する解説
- Rest APIとの比較に関して
※RestAPI GraphQL 比較
等のキーワードでggると、参考になる記事がヒットすると思いますSpace Cloudについて
- フロントエンドから
GraphQL
(またはREST API
)を呼び出すためのAPIサーバ- MySQL + GraphQLサーバを立ち上げる場合の有力候補
※ prismaもかなり有名(比較/検証予定)
※ Postgressの場合はhasura/graphql-engineが人気みたい- Goで書かれており、クラウドネイティブのルールに従って水平方向にスケーリングしてくれるらしい
対応DB
- MongoDB
- PostgreSQL、およびPostgreSQL互換のデータベース(CockroachDB、Yugabyteなど)
- MySQLおよびMySQL互換データベース(TiDB、MariaDBなど)
事前準備
Docker環境の用意
- 公式のQuick startに従い、docker-composeで構築します
- MySQL5.7バージョンを明示的に指定 + my.cnfの設定を上書き + DBデータの永続化を設定しています
docker-compose.yamlversion: "3.7" services: space-cloud: image: spaceuptech/space-cloud ports: - "4122:4122" - "4126:4126" links: - testdb restart: always environment: ## The DEV environment lets you skip login in Mission Control DEV: "true" ## Change the login credentials of Mission Control (Admin UI) # ADMIN_USER: "admin" # ADMIN_PASS: "123" # ADMIN_SECRET: "some-secret" # This is the JWT secret used for login authentication in Mission Control testdb: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: testdb TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./testdb/data:/var/lib/mysql - ./testdb/my.cnf:/etc/mysql/conf.d/my.cnf - ./testdb/sql:/docker-entrypoint-initdb.d ports: - 3306:3306mysql/my.cnf[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4DBスキーマの作成
以下の要領でMySQLのスキーマを作成しておく
(docker-composeで作成したMySQLコンテナにログイン + MySQLに接続 + スキーマ作成)$ docker-compose exec testdb bash root@04ee656af514:/# mysql -u root -p root mysql> create database testdb; Query OK, 1 row affected (0.01 sec) mysql> exitSpace Cloud操作
プロジェクト作成
任意のプロジェクト名を入力し、MSQLの項目を選択
※ キャプチャを撮り忘れたのでこちらから転載しています
(実際の操作ではMYSQL
を選択しています)DB接続設定
メニューの
Database
からEdit Connection
を選択し、ダイアログ内にroot:root@tcp(testdb:3306)/
を入力
※ こちらもキャプチャを忘れたので、先ほどと同じく転載画像ですテーブル作成
Add a table
ボタンから、任意のテーブル名+テーブル定義を記載する
create users table
type users { id: ID! @primary phone: String! }create post table
後のselect joinクエリのサンプルで利用したいので、もう一つテーブルを作っておく
先ほど作成したusersテーブルを「外部キー参照」したい場合は、以下のように@relation
ディレクティブを指定するtype post { id: ID! @primary title: String! users_id: users @relation }クエリ発行
INSERT
mutation { insert_users( docs: [ { id: "1", phone: "09011112222"}, { id: "2", phone: "09033334444"} ] ) @mysql { status } }mutation { insert_post( docs: [ { id: "1", users_id: "1", title: "test_title1" }, { id: "2", users_id: "1", title: "test_title2" }, { id: "3", users_id: "2", title: "test_title3" }, { id: "4", users_id: "2", title: "test_title4" } ] ) @mysql { status } }SELECT
単一テーブルのSELECT
query { users ( where: {id: "1"} ) @mysql { id phone } }複数テーブルのJOINクエリのサンプル
query { users @mysql { id phone post( where: {users_id: "users.id"} ) @mysql { title } } }UPDATE
mutation { update_users ( where: { id: "2"}, set: {phone: "08077778888"} ) @mysql { status } }課題
クエリで日本語等のマルチバイト文字を送信した際に、
Network error: Failed to fetch
のエラーが出てしまったので、mysql/my.cnf
で文字コードの設定などチューニングの必要がありそう参考
- 投稿日:2019-11-25T17:41:20+09:00
SpaceCloudでMySQL/GraphQLサーバを立ち上げる
本記事で触れないこと
- GraphQLに関する解説
- Rest APIとの比較に関して
※RestAPI GraphQL 比較
等のキーワードでggると、参考になる記事がヒットすると思いますSpace Cloudについて
- フロントエンドから
GraphQL
(またはREST API
)を呼び出すためのAPIサーバ- MySQL + GraphQLサーバを立ち上げる場合の有力候補
※ prismaもかなり有名(比較/検証予定)
※ Postgressの場合はhasura/graphql-engineが人気みたい- Goで書かれており、クラウドネイティブのルールに従って水平方向にスケーリングしてくれるらしい
対応DB
- MongoDB
- PostgreSQL、およびPostgreSQL互換のデータベース(CockroachDB、Yugabyteなど)
- MySQLおよびMySQL互換データベース(TiDB、MariaDBなど)
事前準備
Docker環境の用意
- 公式のQuick startに従い、docker-composeで構築します
- MySQL5.7バージョンを明示的に指定 + my.cnfの設定を上書き + DBデータの永続化を設定しています
docker-compose.yamlversion: "3.7" services: space-cloud: image: spaceuptech/space-cloud ports: - "4122:4122" - "4126:4126" links: - testdb restart: always environment: ## The DEV environment lets you skip login in Mission Control DEV: "true" ## Change the login credentials of Mission Control (Admin UI) # ADMIN_USER: "admin" # ADMIN_PASS: "123" # ADMIN_SECRET: "some-secret" # This is the JWT secret used for login authentication in Mission Control testdb: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: testdb TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./testdb/data:/var/lib/mysql - ./testdb/my.cnf:/etc/mysql/conf.d/my.cnf - ./testdb/sql:/docker-entrypoint-initdb.d ports: - 3306:3306mysql/my.cnf[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4DBスキーマの作成
以下の要領でMySQLのスキーマを作成しておく
(docker-composeで作成したMySQLコンテナにログイン + MySQLに接続 + スキーマ作成)$ docker-compose exec testdb bash root@04ee656af514:/# mysql -u root -p root mysql> create database testdb; Query OK, 1 row affected (0.01 sec) mysql> exitSpace Cloud操作
プロジェクト作成
任意のプロジェクト名を入力し、MSQLの項目を選択
※ キャプチャを撮り忘れたのでこちらから転載しています
(実際の操作ではMYSQL
を選択しています)DB接続設定
メニューの
Database
からEdit Connection
を選択し、ダイアログ内にroot:root@tcp(testdb:3306)/
を入力
※ こちらもキャプチャを忘れたので、先ほどと同じく転載画像ですテーブル作成
Add a table
ボタンから、任意のテーブル名+テーブル定義を記載する
create users table
type users { id: ID! @primary phone: String! }create post table
後のselect joinクエリのサンプルで利用したいので、もう一つテーブルを作っておく
先ほど作成したusersテーブルを「外部キー参照」したい場合は、以下のように@relation
ディレクティブを指定するtype post { id: ID! @primary title: String! users_id: users @relation }クエリ発行
INSERT
mutation { insert_users( docs: [ { id: "1", phone: "09011112222"}, { id: "2", phone: "09033334444"} ] ) @mysql { status } }mutation { insert_post( docs: [ { id: "1", users_id: "1", title: "test_title1" }, { id: "2", users_id: "1", title: "test_title2" }, { id: "3", users_id: "2", title: "test_title3" }, { id: "4", users_id: "2", title: "test_title4" } ] ) @mysql { status } }SELECT
単一テーブルのSELECT
query { users ( where: {id: "1"} ) @mysql { id phone } }複数テーブルのJOINクエリのサンプル
query { users @mysql { id phone post( where: {users_id: "users.id"} ) @mysql { title } } }UPDATE
mutation { update_users ( where: { id: "2"}, set: {phone: "08077778888"} ) @mysql { status } }課題
クエリで日本語等のマルチバイト文字を送信した際に、
Network error: Failed to fetch
のエラーが出てしまったので、mysql/my.cnf
で文字コードの設定などチューニングの必要がありそう参考
- 投稿日:2019-11-25T15:09:24+09:00
【Rails】we're sorry, but something went wrongでハマった話(2)
こんにちは!スージーです!
ローカル環境では問題なかったのに本番環境で発生したwe're sorry, but something went wrong
の解決までを備忘録としてwe're sorry, but something went wrong
このエラーは本番環境でちょいちょい見るので
production.log
でエラーログを確認するターミナル[ec2-user@ip-~~]$ cd /var/www/app-name [ec2-user@ip-~~]$ cd log [ec2-user@ip-~~]$ cat production.log D, [2019-11-18T07:06:44.834244 #5661] DEBUG -- : hogehoge~~ D, [2019-11-18T07:06:44.834597 #5661] DEBUG -- : hogehoge~~ ・ ・・ ・・・この時は
production.log
にエラーログが無かったデバックを考える
タイポ
→× 開発環境でもエラーが再現されているはずno method error
→× 開発環境でもエラーが再現されているはずルーティング
とアクション
,コントローラ
の記述がおかしい→× 開発環境でもエラーが再現されているはず- エラー発生ページ
showアクション
の:id
が本番環境にないのではないか?(同期が教えてくれた)本番環境のMySQLにログインしてみる
同期の助言により、以前に本番環境下で
seedファイル
のデータが投入できなかった事を思い出すターミナル[ec2-user@ip-~app-name]$ mysql -u root -p Enter password: ・ ・・ mysql > use app-name_production; ・ ・・ database changed mysql > describe meals; # <エラーが発生するテーブル> mysql > show * form meals; # <レコードを確認>mealsテーブル
Column Type Options name varchar null: false image text food_stuff text cooking_time integer null: false cooking_method integer post_id integer null: false user_id integer null: false エラー箇所特定
user_id:1
で投稿したはずなのにmealsテーブル
のuser_idカラム
にはuser_id:17
で保存されている...
開発環境では問題なくuser_id
が保存されているから道理でエラーが再現されないはずだ...原因
この
user_id
はデプロイ後に追加したカラム
開発環境でマイグレーションファイルを作成した後に以下の手順でdb:migrateしたターミナル[ec2-user@ip-~app-name]$ RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop #<最新のDBにする為,一度drop> [ec2-user@ip-~app-name]$ rake db:create RAILS_ENV=production #<DBをcreateする> [ec2-user@ip-~app-name]$ rake db:migrate RAILS_ENV=production #<migrateする> [ec2-user@ip-~app-name]$ cd current #<currentディレクトリ下へ> [ec2-user@ip-~app-name]$ rake db:seed RAILS_ENV=production ・ ・・ ・・・ Mysql2::Error: Field 'user_id' doesn't have a default value上記エラーが最初出た時に
user_id
カラムをMySQLにログインしてカラムを新規で作成し突っ込んでいたターミナルdatabase changed mysql > ALTER TABLE meals ADD user_id int; mysql > exit [ec2-user@ip-~app-name]$ cd current [ec2-user@ip-~app-name]$ rake db:seed RAILS_ENV=production ・ ・・ ・・・ Mysql2::Error: Field 'user_id' doesn't have a default valueまたエラーが出ている...アプリを動かして投稿してみると新規投稿はできていたので、その時は一旦保留にしていたが、やはりここが今回のエラーの原因であるのは間違いなさそう
解決方法
なぜ最新のマイグレーションファイルが本番環境に反映されないのか
参考
【Rails】本番環境デプロイでよく使うコマンド集!AWS/unicorn/nginx/Capistrano使用
https://qiita.com/15grmr/items/7ad36caa82a0fa27c4bdむむむ...db:migrateの手順が間違っていた...無理矢理に本番環境のDB構造を変えて正しく
user_id
が保存されていないのが原因であれば正しくマイグレーションすればエラーは解決するはず。そうすればdb:seedでデータが投入されるはずであるターミナル[ec2-user@ip-~app-name]$ RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop [ec2-user@ip-~app-name]$ rake db:create RAILS_ENV=production # ここで一度自動デプロイをかけて、db:migrateに当たる操作を完了 # ローカルにて app-name $ bundle exec cap production deploy # 無事作成されたら、再度EC2のcurrentディレクトリでseedを反映させる [ec2-user@ip-~app-name current]$ rake db:seed RAILS_ENV=production ・ ・・ ・・・ [ec2-user@ip-~app-name current]$無事にseedファイルが本番環境に投下され
we're sorry, but something went wrong
のエラーは解決まとめ
今回、個人アプリで初めてデプロイ後のDB構造を変更・追加を行った。EC2内で
db:create→db:migrate
までしてから自動デプロイしても最新のマイグレーションファイルが本番環境へ反映されない事が原因だった。EC2内では古いDBをdrop
しcreate
する所までを行い、capistranoを使った自動デプロイで最新マイグレーションをファイルの読み込みmigrate
する今回のエラーはデプロイの手順の間違えで発生したものだったが、MySQLを触っているとRailsではマイグレーションファイルでバージョン管理してくれるし、ORMのお陰で生SQLを触る機会もほとんどないのでDB関連の知識が無くても動くアプリケーションが作れる。非常に便利だが、SQLの勉強は絶対にした方が良いと感じたエラーだった
- 投稿日:2019-11-25T15:00:07+09:00
WSL(Ubuntu)にssh、MySQL、PHP、Apache2 を入れるまで。
WSL(Ubuntu)にssh、MySQL、PHP、Apache2 を入れるまで。
WSL の Ubuntu をインストールする。
省略初期設定。
// rootのパスワードを設定 $ sudo passwd root # su - // 日本語化 # apt install -y language-pack-ja manpages-ja manpages-ja-dev # update-locale LANG=ja_JP.UTF8 // リポジトリ一覧の更新と、パッケージの更新。 # apt update # apt upgrade -y ※ 途中、以下の「サービス再起動」に関して聞かれるので Yes で進む。 Restart services during package upgrades without asking? // 終わったら再起動する。Windows を再起動するか、 // 管理者で Windowsコマンドプロンプト を開いて以下を実行してサービスを再起動する。 net stop LxssManager net start LxssManagerWSLのプロンプトが見にくいので、tera term が使えるようにする。
# cd /etc/ssh # vi sshd_config PasswordAuthentication yes ※ この時、配色の関係で vi の画面が非常に見えにくい場合は以下を実行して色を無くす。 :syntax off // ssh に必要なキーを作成するらしい。 # ssh-keygen -A # service ssh start // ここから tera term で繋ぐ。MySQL を入れる。
// mysql が入っているかを確認。 # dpkg -l | grep mysql // インストール(mysql-server-5.7 が入った) # apt install mysql-server // ↓で確認したら、mysql-client は一緒に入ってた。 # dpkg -l | grep mysql // 起動して、とりあえず入れるところまで確認。 # service mysql start # mysqlWindowsのCドライブは容量をあまり使いたくないのでデータディレクトリを D ドライブに移す。
// いったんプロセスを落とす。 # service mysql stop // D ドライブを drvfs でマウントしなおす。これをしないと、chmod や chown が効かなかった。 # umount /mnt/d # mount -t drvfs D: /mnt/d -o metadata // my.cnf はあまり触りたくなかったのでデータディレクトリを移動して、シンボリックリンクを設定する。 # mv /var/lib/mysql /mnt/d/mysql/ # ln -s /mnt/d/mysql /var/lib/mysql # service mysql startphp を入れる。
# apt install php // ↑ だけで、apache2 も libapache2-mod-php も入ってきた。 # service apache2 start // 動くか確認。 # cd /var/www/html # echo '<?php phpinfo();' > index.php // http://localhost/index.php で、Server API が "Apache 2.0 Handler" になっていることを確認。
- 投稿日:2019-11-25T10:41:09+09:00
keycloakをAWS上にインストール・RDSと連携まで
この記事について
開発中のソフトウェアのログインにKeycloakを使用するので、セットアップ中に起こった問題とそれらに対するトラブルシューティングを備忘録として残す第二弾です。今回はAWS上に公式版(Github版ではない)のkeycloakをインストールし、RDSと連携させる手順を説明します。RDSはMySQLを使用しました
バージョンとクラス
keycloak: 6.0.1
AWS EC2: t2.micro
RDS: db.t2.micro, MySQL
日付:2019/11/22目次
AWSの設定(VPC)
まず最初に、AWSサーバーがインターネットからアクセスできるようVPCを使ってネットワークを構築していきます。Amazon VPC(Vitual Private Cloud)を使用すると、定義したAWSアカウント専用の仮想ネットワーク内で AWS リソースを起動できます。設定の流れはVPCのIP アドレス範囲を指定して、サブネットを追加し、セキュリティグループを関連付けて、ルートテーブルを設定するといった具合です。
サブネットとは
サブネットは、VPC の IP アドレスの範囲です。AWS リソースは、指定したサブネット内に起動できます。インターネットに接続する必要があるリソースにはパブリックサブネットを、インターネットに接続しないリソースにはプライベートサブネットを使用してください。インターネットにアクセスする
デフォルト VPC にはインターネットゲートウェイが含まれ、各デフォルトサブネットはパブリックサブネットです。デフォルトサブネット内に起動するインスタンスにはそれぞれ、プライベート IPv4 アドレスとパブリック IPv4 アドレスが割り当てられています。これらのインスタンスは、このインターネットゲートウェイを介してインターネットと通信できます。インターネットゲートウェイを使用すると、インスタンスは Amazon EC2 ネットワークエッジを介してインターネットに接続できます。
デフォルトでは、デフォルト以外のサブネットで起動した各インスタンスにはプライベート IPv4 アドレスが割り当てられていますが、パブリック IPv4 アドレスは割り当てられていません。
デフォルト以外のサブネットで起動するインスタンスのインターネットアクセスを有効にするには、インターネットゲートウェイをその VPC (デフォルト VPC でない場合) にアタッチし、インスタンスに Elastic IP アドレスを関連付けます。
1. VPCの作成
AWSマネジメントコンソールから、VPCを選択
ダッシュボードのVPCから、VPCの作成をクリック
適当に名前をつけ(わかりやすいようにkeycloak_vpcとか)、IPv4 CIDR ブロックにはまずは10.0.0.0/16を入れます
10.0.0.0/16が既に使われていた場合は10.1.0.0/16や20.0.0.0/16などでIPの数字をいい感じに上げます2. サブネットの作成
サブネットにはパブリックなものと、プライベートなものがあります。前述したように、インターネットに接続したい場合はパブリックサブネットが必要になります。それに加え今回はインターネットには直接接続ししないデータベースも作るので、プライベートサブネットも必要になります。といっても初期設定でできる事はあまりありません。ダッシュボードからサブネット、サブネット作成で名前を仮にkeycloak_publicとkeycloak_privateにします。VPCは先ほど作成したkeycloak_vpcに関連付けします。アベイラビリティゾーンはここで設定したものを後の設定でも一貫してください。IPv4 CIDR ブロックは、VPCのIPアドレスの3番目の数字をひとつ大きくした数字を使い、ポートは24から使用できます。(例: VPCが10.0.0.0/16ならサブネットは10.0.1.0/24[keycloak_public]と10.0.2.0/24[keycloak_private])3. インターネットゲートウェイの接続
次にインターネットへ接続するためにインターネットゲートウェイを作成します。同じくダッシュボードのインターネットゲートウェイから、インターネットゲートウェイの作成をクリックしてください。名前をkeycloak_gateとしてさくせいします。次に、インターネットゲートウェイ作成ボタンの隣にあるアクションというボタンから、VPCにアタッチを選択して先ほど作ったkeycloak_vpcに接続します。これでVPCからインターネットへアクセスする入口ができましたが、それをインスタンス(サブネット)に繋げるルートがありません。4. ルートテーブルの作成
そこで、インターネットの入口からVPCの中身を繋ぐルートを作ります。ダッシュボードのルートテーブルからルートテーブルの作成をクリックしてください。名前をkeycloak_routeとしてVPCはkeycloak_vpcを選びます。次に作成ボタンの隣のアクションからルートの編集に行きます。
デフォルトで上の様な設定になっていると思います。10.0.0.0/16はVPCのIPアドレスです。ここに送信先を0.0.0.0/0、ターゲットをkeycloak_vpcとしたルートを追加します。これで、インターネットゲートウェイからサブネットにIPの制限なく通信することができます。そして、画面の下の方にサブネットの関連付けというタブがあるので、keycloak_publicに関連付ければ、keycloak_publicサブネットからはインターネットにアクセスできます。これでVPCの準備は完了です。
AWSの設定(EC2)
Amazon Elastic Compute Cloud (Amazon EC2) は、AWSクラウドでサイズが変更できるコンピューティングキャパシティーを提供します。必要な数の仮想サーバーを起動して、セキュリティおよびネットワーキングの設定と、ストレージの管理を行います。Amazon EC2 では、要件変更や需要増に対応して迅速に拡張または縮小できるため、サーバートラフィック予測が不要になります。インスタンスと呼ばれる仮想コンピューティング環境で開発・デプロイをしていきます。
1. インスタンスの作成
以下の設定で作成していきます
AMI: Amazon Linux 2 AMI (HVM), SSD Volume Type
インスタンスタイプ: 汎用t2.micro(無料利用枠)
ネットワーク: keycloak_vpc
サブネット: keycloak_public
自動割り当てパブリック IP: 有効
作成したら名前をkeycloak_serverとします2. Elastic IP
これでインスタンスは作成し、VPCにも繋いでいるのでインターネットへのアクセスも可能です。しかし、現時点ではインスタンスを起動する度にパブリックIPアドレスが変わってしまうという欠点があります。これを回避するために、Elastic IPによってインスタンスのパブリックIPを固定します。ダッシュボードからネットワーク&セキュリティにElastic IPがあります。ここからElastic IPアドレスの割り当てをクリック、新たにパブリックIPアドレスを生成します。生成したIPを選択し、アクションタグのElastic IPアドレスの関連付けからkeycloak_serverに関連付けます。インスタンス画面に戻るとパブリックDNS(IPv4)とIPv4パブリックIPが固定されているはずです。セキュリティグループ
実世界でパケットフィルタリングを構成するのは、ルーターやサーバー、もしくは専用のファイアウォール機器だが、AWSでは、インスタンスに対して、構成する「セキュリティグループ」がこの機能を担う。先ほどインスタンスに対して作ったセキュリティグループ(launch-wizard-<数字>)を見ると、デフォルトの構成でinboundを見ると、ポート22にたいして全ての通信(0.0.0.0/0)を許可する、という設定があり、それ以外の設定はないことがわかる。
デフォルトのこの設定では、webサーバーソフトなどをインスタンスに入れた賭しても、阻まれて通信できないので、ソフトウェアのインストールとともに、セキュリティグループの構成も変更していく。最低限必要なのは以下の数個でしょうか。
タイプ プロトコル ポート範囲 ソース HTTP TCP 80 <自分のIPアドレス> HTTP TCP 80 < Elastic IP> カスタムTCP TCP 8080 < Elastic IP> SSH TCP 22 <自分のIP> SSH TCP 22 < Elastic IP> MYSQL TCP 3306 0.0.0.0/0 HTTPS TCP 443 0.0.0.0/0 接続できなかったり、必要があれば随時追加してください。
AWSの設定(RDS)
本稼働ではkeycloakは膨大な量のユーザーの情報を保管する可能性があります。EC2サーバーだけではおそらくパンクしてしまうので、Amazonが提供しているデータベースサービスのRDSへデータを保存します。
RDSを作成するには、EC2のダッシュボードではなくAWS マネジメントコンソールに行きます。RDSという項目があるのでクリックして、RDSのダッシュボードに行きます。データベースからデータベースの作成をクリックします。以下の設定で作成します。作成方法: 標準方法
エンジン: MySQL
バージョン: 5.7.22(ここはデフォルト)
テンプレート: お好みのスペックで
名前: keycloak-rds
マスターユーザー名: admin
パスワード: 適当に
VPC: keycloak_vpc
サブネット: 新規作成
パブリックアクセス可能: はい(重要)
VPCセキュリティグループ: Default + 新規作成(内容はEC2のものと同じ)
アベイラビリティゾーン: EC2と同じ
ポート: 3306RDSパラメータグループ設定
これでデータベースができました。しかしこのまま接続しても文字コードのエラーがでてしまいます。なぜなら、RDSのデフォルトは日本語に対応しているUTF-8ではなく、ラテン語に設定されているからです。mysql> show variables like 'character%'; +--------------------------+-------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /rdsdbbin/mysql-5.7.22.R5/share/charsets/ | +--------------------------+-------------------------------------------+ 8 rows in set (0.00 sec)普通ならば/etc/my.cnfをいじって設定を変更しますが、AWSのSQLの場合それができないのでダッシュボードのパラメータグループから新規にパラメータグループを作成します。作成したら、そのパラメータグループを選択してパラメータの編集をします。
"character"で検索をかけると8つ程パラメータが出てくるので、character_set_filesystem(デフォルトでbinary)以外をutf-8に変更します。mysql> show variables like 'character%'; +--------------------------+-------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /rdsdbbin/mysql-5.7.22.R5/share/charsets/ | +--------------------------+-------------------------------------------+ 8 rows in set (0.00 sec)これで日本語のデータが保存可能になります。
データベースの変更タグから、keycloak-rdsのパラメータグループの変更もお忘れなく。インストール各種
JDK8のインストール
$ sudo yum update -y $ sudo yum install java-1.8.0-openjdkkeycloakのインストール
$ cd /opt $ sudo wget https://downloads.jboss.org/keycloak/6.0.1/keycloak-6.0.1.zip $ sudo unzip keycloak-6.0.1.zip $ sudo mv keycloak-6.0.1 keycloakkeycloakのSQLドライバー(Java Database Connector)のインストール
$ sudo mkdir /opt/keycloak/modules/system/layers/keycloak/com/mysql $ sudo mkdir /opt/keycloak/modules/system/layers/keycloak/com/mysql/main $ sudo cd /opt/keycloak/modules/system/layers/keycloak/com/mysql/main $ sudo wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.42.zip $ sudo unzip mysql-connector-java-5.1.42.zip $ sudo cp mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar ./ $ sudo vi module.xml/opt/KEYCLOAK_HOME/modules/system/layers/keycloak/com/mysql/main/module.xml<?xml version="1.0"?> <module xmlns="urn:jboss:module:1.3" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-5.1.42-bin.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>MySQLのインストール
$ sudo yum install mysql-community-server -y $ mysqld --versionインストールにエラーが出たら下の参考文献をご覧ください(私はなぜかここでつまづいて結構時間取られました)
MySQLの設定
keycloakからログインする為のユーザーとデータベース作成
#EC2コンソールからRDSに接続します #ユーザーネームとパスワードはRDS作成時に作ったものです $ mysql -h <keycloak-rdsのエンドポイント> -P 3306 -u admin -p <password> #keycloakからログインする時用のユーザー作成 mysql> create user 'keycloak-user' identified by '<パスワード>'; #keycloakのデータ保存用のデータベース作成 mysql> create database keycloakDB character set utf8 collate utf8_unicode_ci; #keycloak-userにkeycloakDB上の全権限付与 mysql> grant all privileges on keycloakDB.* to 'keycloak-user'; mysql> exitkeycloak内の設定
1. 外部IP、書き込み権限とログ
#keycloak用のなにかではあったが詳しくは不明(ないとうまく動作しない) $ export EXTERNAL_IP=$(curl -s 169.254.169.254/latest/meta-data/local-ipv4) #書き込み権限 $ sudo chmod 777 -R ./ #ログ用ディレクトリ作成 $ sudo mkdir /var/log/keycloak2. サーバーコンフィグファイルの設定
/opt/KEYCLOAK_HOME/standalone/configuration/standalone-ha.xml#データベースへの接続 <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}"> <connection-url>jdbc:mysql://<keycloak-rdsのエンドポイント>:3306/keycloakDB?characterEncoding=UTF-8&useSSL=false</connection-url> <driver>mysql</driver> <security> <user-name>keycloak-user</user-name> <password><パスワード></password> </security> </datasource> <drivers> <driver name="mysql" module="com.mysql"> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> </driver> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> </drivers> . . . #KeycloakサーバーのIPアドレスに変更 <interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:<EC2プライベートIP>}"/> </interface> <interface name="public"> <inet-address value="${jboss.bind.address:<EC2プライベートIP>}"/> </interface> <interface name="private"> <inet-address value="${jboss.bind.address.private:<EC2プライベートIP>}"/> </interface> </interfaces>3. ログインと通信設定
/opt/KEYCLOAK_HOME/#初回ログイン用にアドミンユーザー作成 $ ./bin/add-user-keycloak.sh -r master -u admin -p admin #起動 $ ./bin/standalone.sh --server-config=standalone-ha.xml -b <EC2のパブリックDNS> -Djboss.node.name=<EC2のパブリックDNS> -Djboss.bind.address.private=<EC2のパブリックDNS> #アドミンとして認証情報を設定する $ ./bin/kcadm.sh config credentials --server http://<プライベートIP>:8080/auth --realm master --user admin --password admin #SSL requiredをNONEに変更 $ ./bin/kcadm.sh update realms/master -s sslRequired=NONE change https listener4. https通信への変更
一旦Control Cでサーバーを落とし、以下をして再起動します
proxy-address-forwarding="true"を追加/opt/KEYCLOAK_HOME/standalone/configuration/standalone-ha.xml<http-listener name="default" socket-binding="http" proxy-address-forwarding="true" redirect-socket="https" enable-http2="true"/>5. ログイン
http://<IPv4パブリックIP>:8080/auth
にアクセス完了です
参考文献
Keycloak 開発入門
AWSのEC2で行うAmazon Linux2(MySQL5.7)環境構築
Keycloakのインストール方法をわかりやすく手順化してみた
- 投稿日:2019-11-25T09:24:34+09:00
「Laravel DB Designer 」vol.3 使い方・仕様 について解説
今回は" Laravel DB Designer "の使い方・仕様について書きました(vol3)
『Laravelを使う人を幸せにしたいという思いから作った』
(vol2の続きです)[https://qiita.com/daisu_yamazaki/items/92dc3cc599a264c3fb0f]
https://laraveldb.com
※英語圏対応済み主機能
- ER図作成 (対応している”型”はページ下部に表記)
- ER図作成 → Migrationファイルを生成
- ER図作成 → チェック用クエリービルダーを自動生成
- Migrationファイル → ER図を生成(リバース)
テーブル名
テーブル名の頭に"m_"を付けた場合(Master:都道府県のように最初から用意するテーブル)
「 m_テーブル名 」とすると" $table->softDeletes(); "は追加されません。
「 m_テーブル名 」とすると" $table->timestamps(); "は追加されません。
テーブル名の頭に"t_"を付けた場合(Transaction:ユーザーの入力でデータが追加されていくテーブル)
「 t_テーブル名 」とすると" $table->softDeletes(); "が自動で追加されます。
「 t_テーブル名 」とすると" $table->timestamps(); "が自動で追加されます。
テーブル名の頭に"t_"も"m_"も付けない場合(接頭辞を付けない場合)
"m_" や "t_"を付けなければ " $table->softDeletes(); "が自動で追加されます。
"m_" や "t_"を付けなければ "$table->timestamps(); "が自動で追加されます。
【使用時の気をつけるPOINT】
1)
フォルダにMigrationファイル(Schema::createのみ)一式集めZip圧縮したファイルをアップロードすることで、ER図へ変換(リバース)することが可能です。2)
以下Migrationファイル 「 Schema::create 」のみ現在は可能
※ Schema::create以外は対応検討中Schema::create("テーブル名", function (Blueprint $table) {...}3)
外部キー(使った場合)親子の順番でMigrationファイルを選び、Migrateしなくてはいけない
※ 親子順でファイル名(時間等)を少しずらし対応検討中4)
ダウンロードしたMigrationファイル(ZIP)をそのまま再アップロードは出来ません
一度解凍してから自身のPCでZIPしてアップロードしてください。(PHPでの圧縮アルゴリズムの問題かも)
※ 今後の調査対象の一つ5)
MySQLのみ対応
※ 要望が多ければPostgres,SQLite等の対応も検討「ER図のSave/Load」機能
ER図データのLoad/Save
Save/Load機能 機能詳細 クラウドへ保存 Web上のDB(Firebase)に保存します。 クラウドデータ一覧 自身がWebに保存したデータ一覧 ブラウザに保存 LocalStorageに一時保存 ブラウザデータ一覧 自身がlocalに保存したデータ一覧 上記の「データ一覧」選択後、「 -- Data List -- 」の選択肢が表示されます。
そこに表示されるデータ項目を選択するとER図が復元します。ER図から出力(外部出力)
Save/Load機能 機能詳細 ER図からSQLを作成 現在表示しているEQ図からMySQLテーブルを作成するSQL文を作成 Laravel(Migration) 現在表示しているEQ図からLaravel専用のMigrationファイルをZIP圧縮して一式ダウンロード 子テーブルへの外部キー制約が記載されてるMigrationファイルは、
「 5分遅らせた 」ファイル名が生成しています(現時点)。
理由)親テーブルをMigrateしてから子テーブルをMigrateしないとエラーになるため最低限の対応を追加しました。
今後は、外部キーの親・子を全て判断して順番を「時間でずらすことで対応」していこうと考えています(未実装)。Reverse ERD
Migrationファイル一式をZIP圧縮 → [ Reverse >>> ERD ]ボタンでアップロード
アップロード完了するとER図が表示されます。
Migration(ZIPファイルに一式纏めて) 機能詳細 [ Reverse >>> ERD ] Migrationファイル一式をフォルダに入れて、ZIP圧縮したファイルをアップロード << 要注意 >>
「Laravel DB Designer」からZIPファイルをダウンロードしたファイルをそのままアップロードは出来ません。必ず、一度解凍したものをZIP圧縮しなおしてuploadしてください。今回vol3のまとめ
今回は「 Laravel DB Designer 」の操作方法とメイン機能である「 Save/Load 」と「 出力 」の解説をさせていただきました。まだまだUXの部分には力をいれられてないので、こういった使用説明が必要だと思い書きました。
少しでもご理解いただき使用していただければと存じます。
また、説明が抜けてるところがあるかもしれません、随時更新、内容によっては新しく解説記事を投稿して行こうと思います。『Laravelを使う人を幸せにしたいという思いから作った』
https://laraveldb.com以上
今後とも宜しくお願い致します。
- 投稿日:2019-11-25T09:24:34+09:00
【 Laravel 】「Laravel DB Designer」で設計から実装まで「ER図←→Migration」相互変換!” 「使い方・仕様 」について解説” vol3
今回は" Laravel DB Designer "の「 使い方・仕様 」について書きました(vol3)
『Laravelを使う人を幸せにしたいという思いから作った』
https://laraveldb.com
※英語圏対応済み主機能
- ER図作成 (対応している”型”はページ下部に表記)
- ER図作成 → Migrationファイルを生成
- ER図作成 → チェック用クエリービルダーを自動生成
- Migrationファイル → ER図を生成(リバース)
テーブル名
テーブル名の頭に"m_"を付けた場合(Master:都道府県のように最初から用意するテーブル)
「 m_テーブル名 」とすると" $table->softDeletes(); "は追加されません。
「 m_テーブル名 」とすると" $table->timestamps(); "は追加されません。
テーブル名の頭に"t_"を付けた場合(Transaction:ユーザーの入力でデータが追加されていくテーブル)
「 t_テーブル名 」とすると" $table->softDeletes(); "が自動で追加されます。
「 t_テーブル名 」とすると" $table->timestamps(); "が自動で追加されます。
テーブル名の頭に"t_"も"m_"も付けない場合(接頭辞を付けない場合)
"m_" や "t_"を付けなければ " $table->softDeletes(); "が自動で追加されます。
"m_" や "t_"を付けなければ "$table->timestamps(); "が自動で追加されます。
【使用時の気をつけるPOINT】
1)
フォルダにMigrationファイル(Schema::createのみ)一式集めZip圧縮したファイルをアップロードすることで、ER図へ変換(リバース)することが可能です。2)
以下Migrationファイル 「 Schema::create 」のみ現在は可能
※ Schema::create以外は対応検討中Schema::create("テーブル名", function (Blueprint $table) {...}3)
外部キー(使った場合)親子の順番でMigrationファイルを選び、Migrateしなくてはいけない
※ 親子順でファイル名(時間等)を少しずらし対応検討中4)
ダウンロードしたMigrationファイル(ZIP)をそのまま再アップロードは出来ません
一度解凍してから自身のPCでZIPしてアップロードしてください。(PHPでの圧縮アルゴリズムの問題かも)
※ 今後の調査対象の一つ5)
MySQLのみ対応
※ 要望が多ければPostgres,SQLite等の対応も検討「ER図のSave/Load」機能
ER図データのLoad/Save
Save/Load機能 機能詳細 クラウドへ保存 Web上のDB(Firebase)に保存します。 クラウドデータ一覧 自身がWebに保存したデータ一覧 ブラウザに保存 LocalStorageに一時保存 ブラウザデータ一覧 自身がlocalに保存したデータ一覧 上記の「データ一覧」選択後、「 -- Data List -- 」の選択肢が表示されます。
そこに表示されるデータ項目を選択するとER図が復元します。ER図から出力(外部出力)
Save/Load機能 機能詳細 ER図からSQLを作成 現在表示しているEQ図からMySQLテーブルを作成するSQL文を作成 Laravel(Migration) 現在表示しているEQ図からLaravel専用のMigrationファイルをZIP圧縮して一式ダウンロード 子テーブルへの外部キー制約が記載されてるMigrationファイルは、
「 5分遅らせた 」ファイル名が生成しています(現時点)。
理由)親テーブルをMigrateしてから子テーブルをMigrateしないとエラーになるため最低限の対応を追加しました。
今後は、外部キーの親・子を全て判断して順番を「時間でずらすことで対応」していこうと考えています(未実装)。Reverse ERD
Migrationファイル一式をZIP圧縮 → [ Reverse >>> ERD ]ボタンでアップロード
アップロード完了するとER図が表示されます。
Migration(ZIPファイルに一式纏めて) 機能詳細 [ Reverse >>> ERD ] Migrationファイル一式をフォルダに入れて、ZIP圧縮したファイルをアップロード << 要注意 >>
「Laravel DB Designer」からZIPファイルをダウンロードしたファイルをそのままアップロードは出来ません。必ず、一度解凍したものをZIP圧縮しなおしてuploadしてください。今回vol3のまとめ
今回は「 Laravel DB Designer 」の操作方法とメイン機能である「 Save/Load 」と「 出力 」の解説をさせていただきました。まだまだUXの部分には力をいれられてないので、こういった使用説明が必要だと思い書きました。
少しでもご理解いただき使用していただければと存じます。
また、説明が抜けてるところがあるかもしれません、随時更新、内容によっては新しく解説記事を投稿して行こうと思います。『Laravelを使う人を幸せにしたいという思いから作った』
https://laraveldb.com以上
今後とも宜しくお願い致します。
- 投稿日:2019-11-25T09:24:34+09:00
【 Laravel 】「Laravel DB Designer 」を便利に使うための知識 ”使い方・仕様 ”について解説 Vol.3
今回は" Laravel DB Designer "の使い方・仕様について書きました(vol3)
『Laravelを使う人を幸せにしたい』という思いから作った「Laravel DB Designer」
(vol2の続きです)[https://qiita.com/daisu_yamazaki/items/92dc3cc599a264c3fb0f]https://laraveldb.com
※英語圏対応済み主機能
- ER図作成 → 対応している”型”はvol2記事の下へ
- ER図作成 → Migrationファイルを生成
- ER図作成 → チェック用クエリービルダーを自動生成
- Migrationファイル → ER図を生成(リバース)再設計可能
テーブル名
テーブル名の頭に"m_"を付けた場合(Master:都道府県のように最初から用意するテーブル)
「 m_テーブル名 」とすると" $table->softDeletes(); "は追加されません。
「 m_テーブル名 」とすると" $table->timestamps(); "は追加されません。
テーブル名の頭に"t_"を付けた場合(Transaction:ユーザーの入力でデータが追加されていくテーブル)
「 t_テーブル名 」とすると" $table->softDeletes(); "が自動で追加されます。
「 t_テーブル名 」とすると" $table->timestamps(); "が自動で追加されます。
テーブル名の頭に"t_"も"m_"も付けない場合(接頭辞を付けない場合)
"m_" や "t_"を付けなければ " $table->softDeletes(); "が自動で追加されます。
"m_" や "t_"を付けなければ "$table->timestamps(); "が自動で追加されます。
「ER図のSave/Load」機能
ER図データのLoad/Save
Save/Load機能 機能詳細 クラウドへ保存 Web上のDB(Firebase)に保存します。 クラウドデータ一覧 自身がWebに保存したデータ一覧 ブラウザに保存 LocalStorageに一時保存 ブラウザデータ一覧 自身がlocalに保存したデータ一覧 上記の「データ一覧」選択後、「 -- Data List -- 」の選択肢が表示されます。
そこに表示されるデータ項目を選択するとER図が復元します。ER図から出力(外部出力)
Save/Load機能 機能詳細 ER図からSQLを作成 現在表示しているEQ図からMySQLテーブルを作成するSQL文を作成 Laravel(Migration) 現在表示しているEQ図からLaravel専用のMigrationファイルをZIP圧縮して一式ダウンロード 子テーブルへの外部キー制約が記載されてるMigrationファイルは、
「 5分遅らせた 」ファイル名が生成しています(現時点)。
理由)親テーブルをMigrateしてから子テーブルをMigrateしないとエラーになるため最低限の対応を追加しました。
※子の子テーブル等の外部キー制約は自身で順番にMigrateの必要があります!Reverse ERD
フォルダにMigrationファイル(Schema::createのみ)一式集めZip圧縮したファイルをアップロードすることで、ER図へ変換(リバース)することが可能です。
Migrationファイル一式をZIP圧縮 → [ Reverse >>> ERD ]ボタンでアップロード
アップロード完了するとER図が表示されます。
Migration(ZIPファイルに一式纏めて) 機能詳細 [ Reverse >>> ERD ] Migrationファイル一式をフォルダに入れて、ZIP圧縮したファイルをアップロード 1.注意
以下Migrationファイル 「 Schema::create 」のみ現在は可能
※ Schema::create以外は対応検討中Schema::create("テーブル名", function (Blueprint $table) {...}2.注意
「Laravel DB Designer」からZIPファイルをダウンロードしたファイルをそのままアップロードは出来ません。必ず、一度解凍したものをZIP圧縮しなおしてuploadしてください。今回vol3のまとめ
今回は「 Laravel DB Designer 」の操作方法とメイン機能である「 Save/Load 」と「 出力 」の解説をさせていただきました。まだまだUXの部分には力をいれられてないので、こういった使用説明が必要だと思い書きました。
また、シンプルな記法(ベーシックな?)をベースに仕様/処理を考えたため、複雑な、又はイレギュラーな記述が入ってるケースでは思った通りの出力にならないこともあるかも知れません。しかし、1から全て書いて行くよりは、楽になると思っています。また、設計後に再度ER図からのやり返しができるので、そこも利点だと思います。
少しでもご理解いただき使用していただければと存じます。また、説明が抜けてるところがあるかもしれません、随時更新、内容によっては新しく解説記事を投稿して行こうと思います。(現在はMySQLのみ対応:要望が多ければPostgres,SQLite等の対応も検討する予定です)
『Laravelを使う人を幸せにしたい』という思いから作った
Laravel DB Designer https://laraveldb.com
今後とも宜しくお願い致します。以上、今回はここまで。
- 投稿日:2019-11-25T09:24:34+09:00
「Laravel DB Designer 」vol.3 「使い方・仕様 」について解説”
今回は" Laravel DB Designer "の「 使い方・仕様 」について書きました(vol3)
『Laravelを使う人を幸せにしたいという思いから作った』
https://laraveldb.com
※英語圏対応済み主機能
- ER図作成 (対応している”型”はページ下部に表記)
- ER図作成 → Migrationファイルを生成
- ER図作成 → チェック用クエリービルダーを自動生成
- Migrationファイル → ER図を生成(リバース)
テーブル名
テーブル名の頭に"m_"を付けた場合(Master:都道府県のように最初から用意するテーブル)
「 m_テーブル名 」とすると" $table->softDeletes(); "は追加されません。
「 m_テーブル名 」とすると" $table->timestamps(); "は追加されません。
テーブル名の頭に"t_"を付けた場合(Transaction:ユーザーの入力でデータが追加されていくテーブル)
「 t_テーブル名 」とすると" $table->softDeletes(); "が自動で追加されます。
「 t_テーブル名 」とすると" $table->timestamps(); "が自動で追加されます。
テーブル名の頭に"t_"も"m_"も付けない場合(接頭辞を付けない場合)
"m_" や "t_"を付けなければ " $table->softDeletes(); "が自動で追加されます。
"m_" や "t_"を付けなければ "$table->timestamps(); "が自動で追加されます。
【使用時の気をつけるPOINT】
1)
フォルダにMigrationファイル(Schema::createのみ)一式集めZip圧縮したファイルをアップロードすることで、ER図へ変換(リバース)することが可能です。2)
以下Migrationファイル 「 Schema::create 」のみ現在は可能
※ Schema::create以外は対応検討中Schema::create("テーブル名", function (Blueprint $table) {...}3)
外部キー(使った場合)親子の順番でMigrationファイルを選び、Migrateしなくてはいけない
※ 親子順でファイル名(時間等)を少しずらし対応検討中4)
ダウンロードしたMigrationファイル(ZIP)をそのまま再アップロードは出来ません
一度解凍してから自身のPCでZIPしてアップロードしてください。(PHPでの圧縮アルゴリズムの問題かも)
※ 今後の調査対象の一つ5)
MySQLのみ対応
※ 要望が多ければPostgres,SQLite等の対応も検討「ER図のSave/Load」機能
ER図データのLoad/Save
Save/Load機能 機能詳細 クラウドへ保存 Web上のDB(Firebase)に保存します。 クラウドデータ一覧 自身がWebに保存したデータ一覧 ブラウザに保存 LocalStorageに一時保存 ブラウザデータ一覧 自身がlocalに保存したデータ一覧 上記の「データ一覧」選択後、「 -- Data List -- 」の選択肢が表示されます。
そこに表示されるデータ項目を選択するとER図が復元します。ER図から出力(外部出力)
Save/Load機能 機能詳細 ER図からSQLを作成 現在表示しているEQ図からMySQLテーブルを作成するSQL文を作成 Laravel(Migration) 現在表示しているEQ図からLaravel専用のMigrationファイルをZIP圧縮して一式ダウンロード 子テーブルへの外部キー制約が記載されてるMigrationファイルは、
「 5分遅らせた 」ファイル名が生成しています(現時点)。
理由)親テーブルをMigrateしてから子テーブルをMigrateしないとエラーになるため最低限の対応を追加しました。
今後は、外部キーの親・子を全て判断して順番を「時間でずらすことで対応」していこうと考えています(未実装)。Reverse ERD
Migrationファイル一式をZIP圧縮 → [ Reverse >>> ERD ]ボタンでアップロード
アップロード完了するとER図が表示されます。
Migration(ZIPファイルに一式纏めて) 機能詳細 [ Reverse >>> ERD ] Migrationファイル一式をフォルダに入れて、ZIP圧縮したファイルをアップロード << 要注意 >>
「Laravel DB Designer」からZIPファイルをダウンロードしたファイルをそのままアップロードは出来ません。必ず、一度解凍したものをZIP圧縮しなおしてuploadしてください。今回vol3のまとめ
今回は「 Laravel DB Designer 」の操作方法とメイン機能である「 Save/Load 」と「 出力 」の解説をさせていただきました。まだまだUXの部分には力をいれられてないので、こういった使用説明が必要だと思い書きました。
少しでもご理解いただき使用していただければと存じます。
また、説明が抜けてるところがあるかもしれません、随時更新、内容によっては新しく解説記事を投稿して行こうと思います。『Laravelを使う人を幸せにしたいという思いから作った』
https://laraveldb.com以上
今後とも宜しくお願い致します。
- 投稿日:2019-11-25T09:21:21+09:00
【laravel】 migrationでindexの削除
削除出来ない
usersテーブルのtextカラムにindexを以下のように貼った時、
$table->index('text');削除を以下のようにして
php artisan migrate:rollback
を実行すると。$table->dropIndex('text');PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'text'; check that column/key exists")怒られる。
なぜ
laravelはindex名は命名規則に基づいて定められる。
例'users_id_primary' // 主キー 'users_email_unique' // ユニークキー 'users_name_index' // 基本インデックス 'users_location_spatialindex' // 空間インデックスなので、今回の場合はindex名は
users_text_index
となっている。そういうindexは無いので怒られる。
解決
消したいindexが貼ってあるカラム名を配列にして入れることで、命名規則に従ったindexが削除される。
$table->dropIndex(['text']);
- 投稿日:2019-11-25T09:17:22+09:00
mysql 5.5 source download
download
- http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.5/
- mysql-5.5.62.tar.gz
mariadb について
mariadb 5.5 までは mysql 5.5 互換。
mariadb のビルドには
zlib-devel
が必要
- 投稿日:2019-11-25T01:30:00+09:00
よく使うSQL文 チートシート | MySQL編
mysqlのインストール
mac OSでhomebrewが入っている場合
brew install mysqlwindow OSの場合
こちらをご覧ください
https://webkaru.net/mysql/install-windows/ログイン
パスワードがない場合
mysql -u rootパスワードがある場合
mysql -u root -pデータベースの一覧を表示
SHOW DATABASES;データベースへの作成
CREATE DATABASE DB名;データベースの削除
DROP DATABASE DB名;データベースの選択
USE DB名;テーブル一覧を表示
SHOW TABLES;テーブルを作成
CREATE TABLE テーブル名;テーブルを削除
DROP TABLE テーブル名;テーブルへデータを追加
INSERT INTO テーブル名 (カラム名, カラム名) VALUES ("データ"、"データ");テーブルのデータの変更
SETの後のカラム名には、変更したいデータを入れます。
WHEREの後のカラム名には、どのデータを変更したいか入れます。UPDATE テーブル名 SET カラム名="データ",カラム名="データ" WHERE カラム名="データ";テーブルのデータを取得
SELECT * FROM テーブル名;テーブルのデータを削除
DELETE FROM meta_data;大文字と小文字はどっちでもいいの?
どっちでもいいです。
参考
https://qiita.com/knife0125/items/bb095a85d1a5d3c8f706
https://dev.mysql.com/doc/refman/5.6/ja/select.html