プロキシ

プロキシとは

プロキシとは、ブラウザに代わってwebサーバーにリクエストするやつ。

ブラウザ -> プロキシ -> webサーバー
ブラウザ <- プロキシ <- webサーバー

なぜわざわざワンクッション挟むのか

  1. 匿名性
    プロキシを経由しないで、webサーバーへアクセスした場合、アクセス先のサーバーにIPアドレスなどの個人的な情報がわかってしまう。
    プロキシを挟むことで、直接サーバーへアクセスしないので、情報の漏洩を防ぐことができる。

  2. キャッシュ機能による高速化
    プロキシにはキャッシュ機能が付いているため、一度アクセスしたページの情報を貯めておくことができる。
    そのため、同じサイトへもう一度アクセスする際には、webサーバーまでいかずに、プロキシが情報を返してくれる。
    これによって、ページの表示速度がはやくなる。

バイナリデータ・シリアライズ・デシリアライズ

バイナリデータ

バイナリデータとは、コンピュータで扱えるデータで、人間が見ても理解できないデータ

シリアライズ

ソフトウェア内部で扱っているデータをそのままDBへ保存したり送受信できるようにすること。

たとえば、配列をDBへ保存する際に、
普通、DBには「フィールド:値」という形式で保存されるため、配列のデータをそのまま保存することはできない。
仮に「array(‘a’, ‘b’, ‘c’)」という値を保存した場合、それはただの文字列でしかない。
しかし、シリアライズすると、配列データを配列データとして保存することができる。

シリアライズ

シリアライズの逆。
シリアライズしたデータを復元すること。

MinioをDocker上で動かす

minioをインストール

docker pull minio/minio:edge
docker run -p 9000:9000 minio/minio:edge server /data

Dockerfile

RUN mkdir -p /tmps3

docker-compose.yaml

  minio:
    image: minio/minio:latest
    ports:
    - "9000:9000"
    volumes:
    - "./tmps3:/export"
    command: server /data
    environment:
      - "{AccessKey}"
      - "{SecretKey}"

Gemfile

gem 'asset_sync'

asset_sync.yaml

defaults: &defaults
  fog_provider: 'AWS'
  aws_access_key_id: '{AccessKey}'
  aws_secret_access_key: '{SecretKey}'
  # To use AWS reduced redundancy storage.
  # aws_reduced_redundancy: true
  fog_directory: "new-bucket" # バケット名を指定

development:
  <<: *defaults
  enabled: false

test:
  <<: *defaults
  enabled: false

staging:
  <<: *defaults
  fog_directory: "staging-hogehoge"

production:
  <<: *defaults
  fog_directory: "production-hogehoge"

development.rb

  # s3 route
  config.action_controller.asset_host = '//localhost:9000/minio/new-bucket/'

dockerを起動

docker-compose up

ローカルからminioにファイルをアップロード

# s3cmdをインストール
brew install s3cmd

# 設定
s3cmd --configure

Access Key  S3のアクセスキー指定
Secret Key  S3のシークレットアクセスキーを指定
Encryption password GPG encryptionを用いる事でデータを暗号化してくれる。(とりあえず空欄でおk)
Path to GPG program [/usr/bin/gpg]  GPGの場所を指定。(とりあえず空欄でおk)
Use HTTPS protocol [No] S3への通信をHTTPSにするか否か
HTTP Proxy server name  Proxyを使う場合はその指定

# s3cmdが使えることを確認
s3cmd ls

# アップロード
s3cmd put --recursive stylesheets/ s3://zeroone-views/assets/stylesheets/

Dockerを起動させてRailsを動かす

Dockerfileを作成

FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp // 変更
WORKDIR /myapp // 変更
COPY Gemfile /myapp/Gemfile // 変更
COPY Gemfile.lock /myapp/Gemfile.lock // 変更
RUN bundle install
COPY . /myapp // 変更



docker-compose.yamlを作成

version: '3'
services:
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp // 変更
    ports:
      - "3000:3000"



docker-composeを起動

docker-compose run web rails new
docker-compose build
docker-compose up


ブラウザ上でアクセスできるか確認



docker-composeを停止

docker-compose down

DBのマイグレーションが上手くいかない

問題

マイグレーションしようとしてもエラーが出る

$ docker-compose -f ./migration-docker-compose.yml run liquibase migrate db db_migration.yaml
[DEBUG] db_migration.yaml
Unexpected error running Liquibase: Could not acquire change log lock.  Currently locked by e2463b55fa2d (172.18.0.7) since 9/26/18 3:53 AM



解決

DELETE FROM DATABASECHANGELOGLOCK;