- 投稿日:2021-01-09T22:27:10+09:00
【初めてのチーム開発②】Dockerで環境構築するまで
前回からの続きです。
Docker+Rails+Vue+MySQLの開発環境を作ったので、その備忘録。
(※本記事は適宜編集します。)手順
- 前準備
- Dockerfile作成 (Rails, Vue)
- docker-compose.yml作成
- プロジェクト作成
- 動作確認
- GitHubにpush
1. 前準備
・作業用ブランチ作成
$ git branch (→developブランチにいることを確認) $ git checkout -b feature/docker-test [この時点でのブランチの構造] main develop └── feature/docker-test <- New!・バージョン確認etc.
$ docker -v Docker version 19.03.8, build afacb8b $ docker-compose -v docker-compose version 1.25.4, build 8d51620a・最終的なディレクトリ構成はこちら。【参考】
[project_name] ├── api │ ├── Dockerfile │ ├── Gemfile │ └── Gemfile.lock ├── docker-compose.yml └── front ├── Dockerfile ├── ...2. Dockerfile作成
RailsとVueのDockerfileをそれぞれ作成していきます。
まずはディレクトリを作成。
(現在のディレクトリ: project_name) $ mkdir api front $ ls api front2.1 Rails
RailsのDockerfileを作ります。
$ touch api/Dockerfile
api/DockerfileFROM ruby:2.7.1 RUN apt-get update -qq && \ apt-get install -y build-essential \ libpq-dev \ nodejs \ && rm -rf /var/lib/apt/lists/* RUN mkdir /app ENV APP_ROOT /app WORKDIR $APP_ROOT ADD ./Gemfile $APP_ROOT/Gemfile ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock RUN bundle installこのDockerfileは「Railsを含むGemfile」を別途必要とします。
そこでapi下にGemfile, および空のGemfile.lockを作成します。
$ touch api/Gemfile
$ touch api/Gemfile.lock
api/Gemfilesource 'https://rubygems.org' gem 'rails', '~> 6.0.3'2.2 Vue
次にVueのDockerfileを作ります。
$ touch front/Dockerfile
front/DockerfileFROM node:12.18.3-alpine ENV APP_HOME /app RUN mkdir -p $APP_HOME WORKDIR $APP_HOME RUN apk update && npm install -g @vue/cli3. docker-compose.yml作成
次に、プロジェクトディレクトリ下にdocker-compose.ymlを作成します。
docker-compose.ymlversion: '3' services: web: build: ./api command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - '3000:3000' depends_on: - db volumes: - ./api:/app - bundle:/usr/local/bundle tty: true stdin_open: true db: image: mysql:5.7 volumes: - mysql_data:/var/lib/mysql/ environment: MYSQL_ROOT_PASSWORD: password ports: - '3306:3306' front: build: ./front volumes: - ./front:/app - node_modules:/app/node_modules ports: - '8080:8080' tty: true stdin_open: true command: npm run serve volumes: mysql_data: bundle: node_modules:4. プロジェクト作成
ここからが本番!
RailsプロジェクトとVueプロジェクトを順番に作っていきます。
Vueはvue-cli
というものを使って、対話的に作成していきます。4-1. Rails
Railsプロジェクト作成
まず
rails new
でRailsプロジェクトを作成。
apiディレクトリ下に、Railsのファイル群が作成されます。
※ 少し時間かかります。$ docker-compose run web rails new . --force --database=mysql --apidockerイメージ更新
Gemfileが更新されたので、buildしてdockerイメージを更新しておきます。
$ docker-compose builddatabase.ymlの修正
RailsのDB設定ファイル
api/config/database.yml
を修正します。
なお(password)
はdocker-compose.ymlの環境変数MYSQL_ROOT_PASSWORD
で指定したものを記述してください。api/config/database.ymldefault: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root - password: + password: (password) - host: localhost + host: dbDBの作成
$ docker-compose run web rails db:create[追記] 上記コマンドでエラー発生→解決しました。
自分の対応$ docker-compose run web rails db:create → Access Denied エラー $ docker-compose down --volumes $ docker-compose up -d $ docker-compose run web rails db:create → Errno::ENOENT エラー $ docker-compose down $ docker-compose run web rails db:create → 成功 Created database 'app_development' Created database 'app_test'参考:https://qiita.com/fujisawatk/items/80da801c7e2ac68e4887
…原因はvolume周り? Dockerの理解がまだまだ十分ではないですね…(^_^;)
$ docker-compose up -d
をしてみて、localhost:3000にアクセスし、正常に表示されれば成功です!4-2. Vue
vue-cliでVueプロジェクトを作成します。
コンテナ内に入り、vue-cliを使って対話的にVueプロジェクトを作成します。
※設定内容は一例です。参考:https://qiita.com/Kyou13/items/be9cdc10c54d39cded15
$ docker-compose run front sh (←Vueコンテナでシェルを実行)以下、設定内容です。
$ vue create . # 現在のディレクトリ(/app)に作成するかの確認 ? Generate project in current directory? (Y/n) Yes # プリセットを使用するかどうか ? Please pick a preset: (Use arrow keys) Default ([Vue 2] babel, eslint) Default (Vue 3 Preview) ([Vue 3] babel, eslint) ❯ Manually select features # TypeScriptをインストールするためこちらを選択 # プロジェクトにインストールするライブラリの選択 ? Check the features needed for your project: ◉ Choose Vue version # ◉ Babel ❯◉ TypeScript # TypeScriptをインストールする場合はこれを選択 ◯ Progressive Web App (PWA) Support ◯ Router ◯ Vuex ◯ CSS Pre-processors ◉ Linter / Formatter ◯ Unit Testing ◯ E2E Testing # Vueバージョンの選択 ? Choose a version of Vue.js that you want to start the project with (Use arrow keys) ❯ 2.x 3.x (Preview) # Class styleを使用するかどうか。私はObject styleを使うため No ? Use class-style component syntax? (Y/n) No # TypeScriptと一緒にbabelを使うか ? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? (Y/n) Yes # LintとFormatterの設定に何を使うか ? Pick a linter / formatter config: ESLint with error prevention only ESLint + Airbnb config ESLint + Standard config ❯ ESLint + Prettier TSLint (deprecated) # Lintの実行タイミング ? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection) ❯◉ Lint on save # 保存時にLintを実行 ◯ Lint and fix on commit (requires Git) # Babel, ESLintなどの設定をどこに記述するか ? Where do you prefer placing config for Babel, ESLint, etc.? (Use arrow keys) ❯ In dedicated config files # 各設定ファイルにする In package.json # 今回設定した内容をプリセットで保存するか。基本的にはプロジェクトを以降作成することはないため No ? Save this as a preset for future projects? No # パッケージマネージャーに何を使うか ? Pick the package manager to use when installing dependencies: (Use arrow keys) Use Yarn ❯ Use NPMインストール完了後、
Ctrl+D
でコンテナを停止します。
またfront/Dockerfile
を以下のように書き換えます。FROM node:12.18.3-alpine ENV APP_HOME /app RUN mkdir -p $APP_HOME WORKDIR $APP_HOME RUN apk update (変更) COPY package.json . (追加) RUN npm install (追加)5. 動作確認
Rails
localhost:3000
にアクセスし、「Yay! you are on Rails!」が表示されたら成功。
Vue
localhost:8080
にアクセスし、
が表示されたら成功。6. GitHubにpush
$ git status On branch feature/docker-test nothing to commit, working tree clean $ git push origin feature/docker-test参考記事
(本記事)
・DockerでRails + Vue + MySQLの環境構築をする方法【2020/09最新版】
・Docker Rails Vue.js MySQL環境構築
・開発環境をDockerに乗せる方法とメリットを3ステップで学ぶチュートリアル
・【Mac】Dockerと開発環境の作り方(その他、チーム開発手法)
・git develop, feature branch作成からmergeするまで (自分用メモ)
★Githubでチーム開発するためのマニュアル
- 投稿日:2021-01-09T22:27:10+09:00
【初めてのチーム開発②】Dockerで環境構築する
前回からの続きです。
Docker+Rails+Vue+MySQLの開発環境を作ったので、その備忘録。
(※本記事は適宜編集します。)手順
- 前準備
- Dockerfile作成 (Rails, Vue)
- docker-compose.yml作成
- プロジェクト作成
- 動作確認
- GitHubにpush
1. 前準備
・作業用ブランチ作成
$ git branch (→developブランチにいることを確認) $ git checkout -b feature/docker-test [この時点でのブランチの構造] main develop └── feature/docker-test <- New!・バージョン確認etc.
$ docker -v Docker version 19.03.8, build afacb8b $ docker-compose -v docker-compose version 1.25.4, build 8d51620a・最終的なディレクトリ構成はこちら。【参考】
[project_name] ├── api │ ├── Dockerfile │ ├── Gemfile │ └── Gemfile.lock ├── docker-compose.yml └── front ├── Dockerfile ├── ...2. Dockerfile作成
RailsとVueのDockerfileをそれぞれ作成していきます。
まずはディレクトリを作成。
(現在のディレクトリ: project_name) $ mkdir api front $ ls api front2.1 Rails
RailsのDockerfileを作ります。
$ touch api/Dockerfile
api/DockerfileFROM ruby:2.7.1 RUN apt-get update -qq && \ apt-get install -y build-essential \ libpq-dev \ nodejs \ && rm -rf /var/lib/apt/lists/* RUN mkdir /app ENV APP_ROOT /app WORKDIR $APP_ROOT ADD ./Gemfile $APP_ROOT/Gemfile ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock RUN bundle installこのDockerfileは「Railsを含むGemfile」を別途必要とします。
そこでapi下にGemfile, および空のGemfile.lockを作成します。
$ touch api/Gemfile
$ touch api/Gemfile.lock
api/Gemfilesource 'https://rubygems.org' gem 'rails', '~> 6.0.3'2.2 Vue
次にVueのDockerfileを作ります。
$ touch front/Dockerfile
front/DockerfileFROM node:12.18.3-alpine ENV APP_HOME /app RUN mkdir -p $APP_HOME WORKDIR $APP_HOME RUN apk update && npm install -g @vue/cli3. docker-compose.yml作成
次に、プロジェクトディレクトリ下にdocker-compose.ymlを作成します。
docker-compose.ymlversion: '3' services: web: build: ./api command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - '3000:3000' depends_on: - db volumes: - ./api:/app - bundle:/usr/local/bundle tty: true stdin_open: true db: image: mysql:5.7 volumes: - mysql_data:/var/lib/mysql/ environment: MYSQL_ROOT_PASSWORD: password ports: - '3306:3306' front: build: ./front volumes: - ./front:/app - node_modules:/app/node_modules ports: - '8080:8080' tty: true stdin_open: true command: npm run serve volumes: mysql_data: bundle: node_modules:4. プロジェクト作成
ここからが本番!
RailsプロジェクトとVueプロジェクトを順番に作っていきます。
Vueはvue-cli
というものを使って、対話的に作成していきます。4-1. Rails
Railsプロジェクト作成
まず
rails new
でRailsプロジェクトを作成。
apiディレクトリ下に、Railsのファイル群が作成されます。
※ 少し時間かかります。$ docker-compose run web rails new . --force --database=mysql --apidockerイメージ更新
Gemfileが更新されたので、buildしてdockerイメージを更新しておきます。
$ docker-compose builddatabase.ymlの修正
RailsのDB設定ファイル
api/config/database.yml
を修正します。
なお(password)
はdocker-compose.ymlの環境変数MYSQL_ROOT_PASSWORD
で指定したものを記述してください。api/config/database.ymldefault: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root - password: + password: (password) - host: localhost + host: dbDBの作成
$ docker-compose run web rails db:create[追記] 上記コマンドでエラー発生→解決しました。
自分の対応$ docker-compose run web rails db:create → Access Denied エラー $ docker-compose down --volumes $ docker-compose up -d $ docker-compose run web rails db:create → Errno::ENOENT エラー $ docker-compose down $ docker-compose run web rails db:create → 成功 Created database 'app_development' Created database 'app_test'参考:https://qiita.com/fujisawatk/items/80da801c7e2ac68e4887
…原因はvolume周り? Dockerの理解がまだまだ十分ではないですね…(^_^;)
$ docker-compose up -d
をしてみて、localhost:3000にアクセスし、正常に表示されれば成功です!4-2. Vue
vue-cliでVueプロジェクトを作成します。
コンテナ内に入り、vue-cliを使って対話的にVueプロジェクトを作成します。
※設定内容は一例です。参考:https://qiita.com/Kyou13/items/be9cdc10c54d39cded15
$ docker-compose run front sh (←Vueコンテナでシェルを実行)以下、設定内容です。
$ vue create . # 現在のディレクトリ(/app)に作成するかの確認 ? Generate project in current directory? (Y/n) Yes # プリセットを使用するかどうか ? Please pick a preset: (Use arrow keys) Default ([Vue 2] babel, eslint) Default (Vue 3 Preview) ([Vue 3] babel, eslint) ❯ Manually select features # TypeScriptをインストールするためこちらを選択 # プロジェクトにインストールするライブラリの選択 ? Check the features needed for your project: ◉ Choose Vue version # ◉ Babel ❯◉ TypeScript # TypeScriptをインストールする場合はこれを選択 ◯ Progressive Web App (PWA) Support ◯ Router ◯ Vuex ◯ CSS Pre-processors ◉ Linter / Formatter ◯ Unit Testing ◯ E2E Testing # Vueバージョンの選択 ? Choose a version of Vue.js that you want to start the project with (Use arrow keys) ❯ 2.x 3.x (Preview) # Class styleを使用するかどうか。私はObject styleを使うため No ? Use class-style component syntax? (Y/n) No # TypeScriptと一緒にbabelを使うか ? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? (Y/n) Yes # LintとFormatterの設定に何を使うか ? Pick a linter / formatter config: ESLint with error prevention only ESLint + Airbnb config ESLint + Standard config ❯ ESLint + Prettier TSLint (deprecated) # Lintの実行タイミング ? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection) ❯◉ Lint on save # 保存時にLintを実行 ◯ Lint and fix on commit (requires Git) # Babel, ESLintなどの設定をどこに記述するか ? Where do you prefer placing config for Babel, ESLint, etc.? (Use arrow keys) ❯ In dedicated config files # 各設定ファイルにする In package.json # 今回設定した内容をプリセットで保存するか。基本的にはプロジェクトを以降作成することはないため No ? Save this as a preset for future projects? No # パッケージマネージャーに何を使うか ? Pick the package manager to use when installing dependencies: (Use arrow keys) Use Yarn ❯ Use NPMインストール完了後、
Ctrl+D
でコンテナを停止します。
またfront/Dockerfile
を以下のように書き換えます。FROM node:12.18.3-alpine ENV APP_HOME /app RUN mkdir -p $APP_HOME WORKDIR $APP_HOME RUN apk update (変更) COPY package.json . (追加) RUN npm install (追加)5. 動作確認
Rails
localhost:3000
にアクセスし、「Yay! you are on Rails!」が表示されたら成功。
Vue
localhost:8080
にアクセスし、
が表示されたら成功。6. GitHubにpush
$ git status On branch feature/docker-test nothing to commit, working tree clean $ git push origin feature/docker-test参考記事
(本記事)
・DockerでRails + Vue + MySQLの環境構築をする方法【2020/09最新版】
・Docker Rails Vue.js MySQL環境構築
・開発環境をDockerに乗せる方法とメリットを3ステップで学ぶチュートリアル
・【Mac】Dockerと開発環境の作り方(その他、チーム開発手法)
・git develop, feature branch作成からmergeするまで (自分用メモ)
★Githubでチーム開発するためのマニュアル
- 投稿日:2021-01-09T16:31:01+09:00
Raspberry Pi 3のDockerでRedmineを立ち上げました
はじめに
以前、MacのDockerではRedmineを立ち上げたことがあったのですが、同じようにやったらうまくいきませんでした。
なので、立ち上げるまでを記録として残します。
Raspberry Pi 3にDockerをインストールするのは、以下で実施済み。失敗
失敗した、docker-compose.yml
前回、Macの時に利用したdocker-compose.ymlです。
docker-compose.ymlversion: '3.8' services: redmine: container_name: redmine image: redmine restart: always ports: - 3000:3000 volumes: - ./Redmine/plugins:/usr/src/redmine/plugins - ./Redmine/themes:/usr/src/redmine/public/themes environment: REDMINE_DB_MYSQL: redmine-db REDMINE_DB_PASSWORD: redmine redmine-db: image: mariadb container_name: redmine-db restart: always environment: MYSQL_ROOT_PASSWORD: redmine MYSQL_DATABASE: redmine volumes: - ./db:/var/lib/mysql command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ciどんなエラーが発生したか
途中は省きます。
mariadbのところで、"no matching manifest for linux/arm/v7 in the manifest list entries"が発生しました。$ docker-compose up -d Pulling redmine-db (mariadb:)... latest: Pulling from library/mariadb ERROR: no matching manifest for linux/arm/v7 in the manifest list entries調べた記事
Debian(Raspberry PiのOS)だとmariadbもmysqlもうまくいかないみたい。
- no matching manifest for linux/arm64/v8 in the manifest list entries #698
- support arm64 architecture #318
解決策
DockerHubにある、以下のイメージを使ってみることにしました。
成功
docker-compose.yml
最終的なdocker-compose.ymlはこちら。
imageを変更しただけです。docker-compose.ymlversion: '3.8' services: redmine: container_name: redmine image: redmine restart: always ports: - 3000:3000 volumes: - ./Redmine/plugins:/usr/src/redmine/plugins - ./Redmine/themes:/usr/src/redmine/public/themes environment: REDMINE_DB_MYSQL: redmine-db REDMINE_DB_PASSWORD: redmine redmine-db: image: hypriot/rpi-mysql container_name: redmine-db restart: always environment: MYSQL_ROOT_PASSWORD: redmine MYSQL_DATABASE: redmine volumes: - ./db:/var/lib/mysql command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_cidocker-compose up
イメージの確認。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE redmine latest f2b5b69f9ad5 4 weeks ago 440MB hypriot/rpi-mysql latest 4f3cbdbc3bdb 2 years ago 209MB立ち上げてみよう。
$ docker-compose up -d Creating redmine ... done Creating redmine-db ... doneRaspberry Pi 3のDockerでRedmineが立ち上がっているはずなので、Macからアクセスしてみる。
事前にifconfig
でIPアドレスを確認しておいて、ブラウザで http://000.000.000.000:3000 にアクセス。無事にアクセスできました。
まとめ
記載すると単純だけれど、別のイメージに差し替えるまでの確認に意外と時間がかかりました。
Dockerはイメージが色々あってとても助かります。
- 投稿日:2021-01-09T12:56:14+09:00
Raspberry PIでBITCOINのLTP情報取得
概要
最近BITCOINの売買価格が高くなっていたので、BITCOINの売買情報をデータ化するため、BitflyerのAPIを通して情報を収集しようと思って今回のコードを作成ました。
事前環境構築
・Python
・MySql
※バージョンによって大きい影響はないと思います。
下記のコマンドでインストールしました。■基本設定 sudo apt-get install python2.7-dev python3-dev sudo apt-get install mariadb-server-10.0 sudo apt-get install python-mysqldb ■その他設定 sudo apt-get install python-pandas sudo apt-get install jq ※ネットのサンプルを試すため、インストールしていたパッケージです。テーブル作成
各項目のデータ型は仮で下記のように設定しましたので、各自変更してみてください。これでテーブルが作成できます。
create table coindata( product_code varchar(50), state varchar(50), timestamp varchar(50), tick_id varchar(50), best_bid varchar(50), best_ask varchar(50), best_bid_size varchar(50), best_ask_size varchar(50), total_bid_depth varchar(50), total_ask_depth varchar(50), market_bid_size varchar(50), market_ask_size varchar(50), ltp varchar(50), volume varchar(50), volume_by_product varchar(50) );テーブル作成結果
下記の操作で正しくテーブルが作成されます。
pi@RPI4-DEV:~/work/python $ sudo mysql -uroot -A Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 58 Server version: 10.0.28-MariaDB-2+b1 Raspbian testing-staging Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database bitcoin; Query OK, 1 row affected (0.00 sec) MariaDB [bitcoin]> use bitcoin; Database changed MariaDB [bitcoin]> create table coindata( -> product_code varchar(50), -> state varchar(50), -> timestamp varchar(50), -> tick_id varchar(50), -> best_bid varchar(50), -> best_ask varchar(50), -> best_bid_size varchar(50), -> best_ask_size varchar(50), -> total_bid_depth varchar(50), -> total_ask_depth varchar(50), -> market_bid_size varchar(50), -> market_ask_size varchar(50), -> ltp varchar(50), -> volume varchar(50), -> volume_by_product varchar(50) -> ); Query OK, 0 rows affected (0.06 sec) MariaDB [bitcoin]>ソースコード
次のコードをコピーしてファイルを作成します。
#!/usr/bin/python # -*- coding: utf-8 -*- import requests import sys import MySQLdb ############### #### const #### ############### host="localhost" user="bitcoin" passwd="bitcoin" db="bitcoin" ############### def insertDB(data): try: database = MySQLdb.connect (host=host, user=user, passwd=passwd, db=db, charset="utf8") cursor = database.cursor() query = """INSERT INTO coindata (product_code, state, timestamp, tick_id, best_bid, best_ask, best_bid_size, best_ask_size, total_bid_depth, total_ask_depth, market_bid_size, market_ask_size, ltp, volume,volume_by_product) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""" values = (str(data['product_code']),str(data['state']),str(data['timestamp']),str(data['tick_id']),str(data['best_bid']),str(data['best_ask']),str(data['best_bid_size']),str(data['best_ask_size']),str(data['total_bid_depth']),str(data['total_ask_depth']),str(data['market_bid_size']),str(data['market_ask_size']),str(data['ltp']),str(data['volume']),str(data['volume_by_product'])) cursor.execute(query, values) cursor.close() database.commit() database.close() except Exception as e: print("#######################") print("# data process error. #") print("#######################") print("# Error >>>>>>>>>>>>>>>") print(e) print("#######################") sys.exit(1) def main(): headers = { 'Accept': 'application/json', } response = requests.get('https://api.bitflyer.com/v1/ticker?product_code=BTC_JPY', headers=headers, data={}) #print(response.text) data = response.json() if response is not None: print("#######################") print("# Api response data. #") print("#######################") print('product_code='+ str(data['product_code'])) print('state='+ str(data['state'])) print('timestamp='+ str(data['timestamp'])) print('tick_id='+ str(data['tick_id'])) print('best_bid='+ str(data['best_bid'])) print('best_ask='+ str(data['best_ask'])) print('best_bid_size='+ str(data['best_bid_size'])) print('best_ask_size='+ str(data['best_ask_size'])) print('total_bid_depth='+ str(data['total_bid_depth'])) print('total_ask_depth='+ str(data['total_ask_depth'])) print('market_bid_size='+ str(data['market_bid_size'])) print('market_ask_size='+ str(data['market_ask_size'])) print('ltp='+ str(data['ltp'])) print('volume='+ str(data['volume'])) print('volume_by_product='+ str(data['volume_by_product'])) insertDB(data); else: print("reponse is null") if __name__ == '__main__': main() pi@RPI4-DEV:~/work/python $実行結果
コマンドを実行すると下記のように現在の売買情報が表示されます。
表示されている各項目はDBへ登録されます。pi@RPI4-DEV:~/work/python $ python pybitflyer1.py ####################### # Api response data. # ####################### product_code=BTC_JPY state=RUNNING timestamp=2021-01-09T01:36:12.597 tick_id=7241936 best_bid=4154675.0 best_ask=4156000.0 best_bid_size=0.38445428 best_ask_size=0.03 total_bid_depth=1206.39330272 total_ask_depth=603.2624046 market_bid_size=0.0 market_ask_size=0.0 ltp=4154675.0 volume=190283.400721 volume_by_product=17158.1161835 pi@RPI4-DEV:~/work/python $DBにてテーブル情報確認
次のコマンド操作で登録されている情報の確認ができます。
pi@RPI4-DEV:~/work/python $ sudo mysql -uroot -A Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 62 Server version: 10.0.28-MariaDB-2+b1 Raspbian testing-staging Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> use bitcoin Database changed MariaDB [bitcoin]> select * from coindata; +--------------+---------+-------------------------+---------+-----------+-----------+---------------+---------------+-----------------+-----------------+-----------------+-----------------+-----------+---------------+-------------------+ | product_code | state | timestamp | tick_id | best_bid | best_ask | best_bid_size | best_ask_size | total_bid_depth | total_ask_depth | market_bid_size | market_ask_size | ltp | volume | volume_by_product | +--------------+---------+-------------------------+---------+-----------+-----------+---------------+---------------+-----------------+-----------------+-----------------+-----------------+-----------+---------------+-------------------+ | BTC_JPY | RUNNING | 2021-01-09T01:36:12.597 | 7241936 | 4154675.0 | 4156000.0 | 0.38445428 | 0.03 | 1206.39330272 | 603.2624046 | 0.0 | 0.0 | 4154675.0 | 190283.400721 | 17158.1161835 | +--------------+---------+-------------------------+---------+-----------+-----------+---------------+---------------+-----------------+-----------------+-----------------+-----------------+-----------+---------------+-------------------+ 1 rows in set (0.00 sec) MariaDB [bitcoin]>CRON設定
次は上記の売買情報を1分間隔で実行してDBへ登録するようにCRONに設定します。
設定するコマンドは以下の通りです。crontab -e
まずはプログラムの絶対パスを確認します。
※CRONの設定について詳しい情報は各自で検索してみてください。pi@RPI4-DEV:~/work/python $ pwd /home/pi/work/python pi@RPI4-DEV:~/work/python $ crontab -e pi@RPI4-DEV:~/work/python $ crontab -e no crontab for pi - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.tiny 3. /bin/ed Choose 1-3 [1]: 2 ※初めて実行する場合は、この画面が表示されます。好きなエディタを選びます。 ※エディタ画面が表示されたら一番下に次の行を追加します。 # m h dom mon dow command */1 * * * * /usr/bin/python /home/pi/work/python/pybitflyer.py登録データを確認
次のコマンドで1分間隔で登録されているデータが確認できます。
pi@RPI4-DEV:~/work/python $ sudo mysql -uroot bitcoin -A Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 67 Server version: 10.0.28-MariaDB-2+b1 Raspbian testing-staging Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [bitcoin]> select * from coindata; +--------------+---------+-------------------------+---------+-----------+-----------+---------------+---------------+-----------------+-----------------+-----------------+-----------------+-----------+---------------+-------------------+ | product_code | state | timestamp | tick_id | best_bid | best_ask | best_bid_size | best_ask_size | total_bid_depth | total_ask_depth | market_bid_size | market_ask_size | ltp | volume | volume_by_product | +--------------+---------+-------------------------+---------+-----------+-----------+---------------+---------------+-----------------+-----------------+-----------------+-----------------+-----------+---------------+-------------------+ | BTC_JPY | RUNNING | 2021-01-09T01:36:12.597 | 7241936 | 4154675.0 | 4156000.0 | 0.38445428 | 0.03 | 1206.39330272 | 603.2624046 | 0.0 | 0.0 | 4154675.0 | 190283.400721 | 17158.1161835 | | BTC_JPY | RUNNING | 2021-01-09T02:00:01.737 | 7277223 | 4181830.0 | 4183521.0 | 0.1782 | 0.05 | 1209.05388127 | 607.47497788 | 0.0 | 0.0 | 4182870.0 | 188553.381385 | 16853.8598802 | | BTC_JPY | RUNNING | 2021-01-09T02:01:01.477 | 7278952 | 4185354.0 | 4189102.0 | 0.204 | 0.05 | 1202.80743073 | 609.78078502 | 0.0 | 0.0 | 4186504.0 | 188608.251493 | 16866.3219666 | | BTC_JPY | RUNNING | 2021-01-09T02:02:01.51 | 7280690 | 4184065.0 | 4186520.0 | 0.1 | 0.03 | 1201.72775047 | 610.64902502 | 0.0 | 0.0 | 4184065.0 | 188603.676283 | 16867.4278812 | | BTC_JPY | RUNNING | 2021-01-09T02:03:00.583 | 7282149 | 4182182.0 | 4185000.0 | 0.05 | 0.2 | 1203.15019458 | 605.12780202 | 0.0 | 0.0 | 4183657.0 | 188626.810728 | 16863.1595472 | | BTC_JPY | RUNNING | 2021-01-09T02:04:01.443 | 7283487 | 4186501.0 | 4188169.0 | 0.107 | 0.1762 | 1203.22910919 | 606.56515624 | 0.0 | 0.0 | 4188169.0 | 188611.955945 | 16854.4726057 | | BTC_JPY | RUNNING | 2021-01-09T02:05:01.99 | 7284970 | 4183318.0 | 4185000.0 | 0.03 | 0.02994 | 1203.19692324 | 612.95260845 | 0.0 | 0.0 | 4184364.0 | 188625.722582 | 16854.5922007 | | BTC_JPY | RUNNING | 2021-01-09T02:06:01.467 | 7286247 | 4182683.0 | 4184961.0 | 0.074 | 0.01 | 1205.67149056 | 618.09582191 | 0.0 | 0.0 | 4184961.0 | 188616.57201 | 16850.0963765 | | BTC_JPY | RUNNING | 2021-01-09T02:07:01.627 | 7287530 | 4186482.0 | 4188998.0 | 0.03 | 0.6 | 1199.76322728 | 614.5609498 | 0.0 | 0.0 | 4186483.0 | 188612.761309 | 16855.8516827 | | BTC_JPY | RUNNING | 2021-01-09T02:08:02.017 | 7289554 | 4208196.0 | 4210176.0 | 0.0296 | 0.02896875 | 1199.07365715 | 584.77633435 | 0.0 | 0.0 | 4210000.0 | 188746.858826 | 16885.9375454 | | BTC_JPY | RUNNING | 2021-01-09T02:09:01.2 | 7291398 | 4218089.0 | 4220000.0 | 0.202 | 0.5989905 | 1203.38397034 | 578.56932313 | 0.0 | 0.0 | 4220000.0 | 188808.063154 | 16888.2721248 | +--------------+---------+-------------------------+---------+-----------+-----------+---------------+---------------+-----------------+-----------------+-----------------+-----------------+-----------+---------------+-------------------+ 13 rows in set (0.00 sec) MariaDB [bitcoin]>終わりに
今日はこれで1分間隔でBITCOINの売買情報を取得することができましたので、このデータを基に自動売買及び仮想シミュレーションを作ってみたいですね。
今日はここまでです。ありがとうございます。^^
- 投稿日:2021-01-09T12:35:32+09:00
おやっ!?MySQLに急にログインできなくなった時の対処法
皆さんこんにちは!
今日は、セキュリティが頑固なMySQLのコマンドラインで急にログインが出来なくなったので、その解決方法の備忘録として書いていきます。
MySQLって厄介で、一度何かの設定をミスると再インストールなんてことも珍しくありません。ちなみに僕は2回再インストールしています。
ただ、毎回そんなことをしては時間はかかるし、エンジニアらしくありませんよね?
MySQLは同じエラーでも人によっては解決できない場合もあります。
なので、このコマンドを打ったら解決できたよ!っていうよりかは、どのようにして解決できたかを書いていきたいと思います。
同じようなエラーに引っかかった人、違うエラーに引っかかった人にも手助けになればなと思うので、是非ご参考程度にご覧ください!
MySQLのコマンドプロンプトからパスワードを入力してもできない場合は、Windowsであればコマンドプロンプト、Macならターミナルから操作します。なので、各自、MySQLの環境変数を設定してください。
MySQLのユーザー情報を取得
コマンドプロンプト、もしくはターミナルで以下のコマンドを実行してください。
mysql select Host, User FROM mysql.user // パスワードも取得したい場合 mysql select Host, User, authentication_string FROM mysql.user※注意コマンドプロンプト、ターミナルからMySQLコマンドを実行する時、末尾にセミコロン(;)は付けないでください!
すると、このようにユーザー情報が出てくると思います。
+-----------+------------------+ | Host | User | +-----------+------------------+ | localhost | mysql.infoschema | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+------------------+ここで、rootユーザーが無い場合は、
create user
で作成して見て下さい。ユーザーにアクセス
mysql -uroot -hlocalhost -pと入力し、以下の画面が出てきます。
Enter password:僕は、ここで何も入力せずにEnterキーを押すと入れました!
これでも入れない場合は、新しいユーザーを作成してください(
create user
)パスワードの設定
次に、パスワードの設定を行います。
'YOUR_PASSWORD'
で自分のパスワードを入力してください。set password = 'YOUR_PASSWORD';権限を付与
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASSWORD'; flush privileges;MySQLコマンドプロンプトでアクセス
MySQLのコマンドプロンプトを開き、先ほどせってしたパスワードを入力してください。
Enter password: **************** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 22 Server version: 8.0.22 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>このような画面になれば成功です!
port番号にミスアリ!?
ここからは番外編です。
このような流れで大体の人はアクセスできると思うのですが、僕はアクセスできなかったんですよね。。。
ここで、先ほどWindowsのコマンドプロンプト、Macのターミナルからアクセスし、以下のコマンドを実行してください。
mysql> statusすると、色々な情報が出てくると思います。
TCP port: 3306ここで、ポート番号出てきます。
そしたら、MySQLの
my.ini
を開いたところ(一応、my.iniの場所を載せておきます。人によっては、my.iniが無い場合もあるそうです。なので、ご参考までに。C:\ProgramData\MySQL\MySQL Server 8.0\)my.ini[client] # pipe= # socket=MYSQ port=3308 [mysqld] # The next three options are mutually exclusive to SERVER_PORT below. # skip-networking # enable-named-pipe # shared-memory # shared-memory-base-name=MYSQL # The Pipe the MySQL Server will use # socket=MYSQ # The TCP/IP Port the MySQL Server will listen on port=33082回再インストールしていたので、port番号は(3308)になっていました。
なので、これを3306に変えたところ無事入れました!
いかがだったでしょうか?
MySQLのエラーは本当に厄介です。時間も潰れます。ですが、自分なりに考えたり、調べたりして頑張って解決してください!
応援してます!!
以上、「MySQLに急にログインできなくなった時の対処法」でした!
良ければ、LGTM、コメントお願いします。
また、何か間違っていることがあればご指摘頂けると幸いです。
他にも初心者さん向けに記事を投稿しているので、時間があれば他の記事も見て下さい!!
Thank you for reading