ishikawa_pro's memorandum

若手webエンジニアの備忘録です.

Swift Node.js Docker AWS etc...色々やります。

RailsアプリをGitHubで管理

お久しぶりです。
2週間ほどかなりハードな日々が続いていた関係で自宅でパソコン構えずブログも更新できてませんでした。
とりえず今日は、ひと段落ついてコーディング出来る時間ができたのでその時のメモ。

今回は、RailsアプリをGitHub で管理する話です。
特別難しいことはしないです。
私自身gitを使ったことがなかったのですが、最近触れる機会があったのでこれを機にgitでバージョン管理が出来るようになろうと思ったので、その手始めです。

今回の環境は、Docker上にRails用のコンテナを作成しています。プロジェクト自体は、ローカルディレクトリにマウントしているので、管理自体はMac上からやります。

まずgitのユーザー名とメールアドレスをMacに登録します。

$ git config --global user.name "ユーザー名"
$ git config --global user.email "メールアドレス"

次に適当な場所にRailsのプロジェクトを作成します。

$ rails new my_project

プロジェクトのルートディレクトリに移動してgit initして初期化します。

$ git init

とりあえず全て管理対象にして、コミットします。

$ git add .
$ git commit -m "my first commit"

*commitしてから気がついたのですが、全ファイルをcommitしない方がよかったかもしれないですね笑
GitHubにpush
GitHubにログインしてリポジトリを作成します。
rails newしたらREAD MEが作成されているのでREAD MEは作成しません。
f:id:ishikawa_pro:20160902233217p:plain
リポジトリを作成できたらrailsプロジェクトをGitHubにプッシュします。

$ git remote add origin https://github.com/ユーザー名/リポジトリ名.git
$ git push -u origin master

以上でプッシュ完了です。
以下のサイトを参考にしました。
fuzz-jpn.com

正直まだ、ほとんどgitを理解できていないので開発しながら試行錯誤していこうと思います。
学校の卒研でもgit使えたらいいな。

Docker x Ruby on Rails

こんにちは。
とりあえずDocker を使った Ruby on Railsの開発環境が整ったので記事にしておきます。

色々試行錯誤しましたが、rails のプロジェクトを生成するimageとrailsの実行環境のimageの二つを作ることで今は落ち着かせています。

流れとしては、
1. railsのプロジェクト生成用imageでrails new をしてホスト上にプロジェクトを生成
2.railsの実行用imageで、先程作ったプロジェクトをマウントして実行
です。

1. railsのプロジェクト生成用imageでrails new をしてホスト上にプロジェクトを生成
最初にrails プロジェクト生成用と、rails実行用の二つのimageのディレクトリを作っておきます。

$ mkdir rails-app-gene rails-app

それからrails-app-geneディレクトリ上にDockerfileを作ります。
rails new 専用のDockerfileです。

FROM ruby
MAINTAINER akira

RUN apt-get update -y &&\ 
    apt-get install -y postgresql libpq-dev node.js
RUN gem install pg &&\ 
    gem install rails

WORKDIR /usr/src/

rails-app-geneディレクトリ上で、buildします。

docker build -t rails-app-generater . 

次にコンテナを作成し、rails-appディレクトリ上にプロジェクトを生成します。

docker run -it --rm -v "rails-appのパス":/usr/src/ rails-app-generater rails new my_project

rails-app上にプロジェクトを作成しているのは、rails-appのimageをbuildする際にbundle install をするのですが、プロジェクトが構築時の コンテント 内にある必要があるからです。
--rmオプションを指定しておいて、プロジェクトの生成が終わったら自動的にコンテナを削除するようにしておきましょう。
これで、ローカル上にプロジェクトの生成が完了しました。

2.railsの実行用imageで、先程作ったプロジェクトをマウントして実行
rails-app上にDockerfileを作成します。
railsの実行用のDockerfileは以下のようになっています。

FROM ruby
MAINTAINER akira

RUN apt-get update -y &&\ 
    apt-get install -y postgresql libpq-dev node.js
RUN gem install pg &&\ 
    gem install rails

WORKDIR /usr/src/my_project
COPY ./my_project/Gemfile* ./
RUN bundle install
COPY  ./test-app .

EXPOSE 3000

rails インストール後に、プロジェクトのGemfileとGemfile.lockだけを先にマウントしてbundle install しています。
こうすることで、再度buildする際にGemfileが変更されていなければ、bundle installのキャッシュを利用してくれるので高速で buildが完了します。

Dockerfileをbuildします。

$ docker build -t rails-app .


では、コンテナを作成してみましょう。

docker run -it -v "プロジェクトのパス":/usr/src/my_project -p 3000:3000 --name my_project rails-app /bin/bash

サーバーを起動してみましょう

コンテナ上$ rails s -b 0.0.0.0

mac上からアクセスできるように、ipを指定して起動します。
macchrome から http://192.168.99.100:3000でアクセスすれば、確認できます。
f:id:ishikawa_pro:20160817140658j:plain
イラスト変わったんですね。知らなかった笑
まだPostgreSQLを使用してアプリケーションを作ってないので、動作確認ができていないですが、とりあえずうまく動く予定です。次回の記事で確認します。

確認記事を作成しました。
ishikawa-pro.hatenablog.com

Docker上のPostgreSQLのデータの永続化の話

👇こちらがよりベターなやり方をまとめた記事です。
ishikawa-pro.hatenablog.com

初めまして
情報系の学生をやってまして趣味で色々作って遊んでいます。
作業手順をよく忘れたり、色々試した結果どうしたらうまくできたのかをよく忘れる性格なので、どんどん書き留めていきたいと思います。
飽きっぽいので続かないかも笑

今回は、最近使い始めたDocker の話です。
Docker上のPostgreSQLのデータの永続化でかなりつまずいたのでその記録です。
今回は、Mac book proで試しています。
そもそもデータベースをちゃんと扱ったことがなくてSQL文すらあやふやな状態だったので、Dockerで悩んだと言うよりはPostgresの設定的な部分でかなり悩んだ。


今回は、DockerHub公式リポジトリのpostgresは使わずに、1から作ってデータの永続化までやってみました。
ちなみに、データの永続化はデータボリュームコンテナを作りました。
ネットでよく、

データボリュームコンテナを作成して/var/lib/postgresql/dataをホストにマウント
            ↓
PostgreSQLコンテナでデータボリュームコンテナをマウントして永続化完了


見たいな記事をよく見かけたけど全然うまくできなかった。
そもそもデータボリュームコンテナのDockerfileで

VOLUME /var/lib/postgresql/data

とだけ書いて、データボリュームコンテナのimage 作ってPostgreSQLコンテナでマウントしたらデータベースクラスタディレクトリが空っぽになっちゃう気がするのは勘違いなのかな?


とにかく今回やったまず大まかな流れとしては、
1. PostgreSQLのimageの作成
2. データ保存用のVolumeを作成
3. データボリュームコンテナ の作成
4. PostgreSQLコンテナでデータボリュームコンテナをマウント
です。

Dockerfile作るの初めてでかなり色々勉強になった(笑)

1. PostgreSQLのimageの作成
Dockerfileは以下のようにしました。
とりあえずubuntuPostgreSQLをインストールして最低限の設定をしているだけです。

FROM ubuntu-upstart

MAINTAINER akira

RUN apt-get update && \
    apt-get install -y postgresql

USER postgres

RUN /etc/init.d/postgresql start &&\ 
    psql --command "CREATE ROLE user01 LOGIN CREATEDB PASSWORD 'your_password';" &&\ 
    psql --command "CREATE DATABASE test01 OWNER user01;" &&\ 
    echo "local all  postgres                      peer" >> /etc/postgresql/9.3/main/pg_hba.conf &&\ 
    echo "local all  all                           trust" >> /etc/postgresql/9.3/main/pg_hba.conf &&\ 
    echo "host  all  all         127.0.0.1/32      md5" >> /etc/postgresql/9.3/main/pg_hba.conf &&\ 
    echo "host  all  all         ::1/128           md5" >> /etc/postgresql/9.3/main/pg_hba.conf &&\ 
    echo "host  all  postgres    0.0.0.0/0         reject" >> /etc/postgresql/9.3/main/pg_hba.conf &&\ 
    echo "host  all  all         0.0.0.0/0         md5" >> /etc/postgresql/9.3/main/pg_hba.conf &&\ 
    echo "listen_addresses='*'" >> /etc/postgresql/9.3/main/postgresql.conf &&\ 
    /etc/init.d/postgresql reload

EXPOSE 5432

CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]

ユーザー名とパスワードとかは自分で設定してください。
次にDockerfileのあるディレクトリにて

$ docker build -t postgres9.3 .

を実行してimageの作成

2. データ保存用のVolumeを作成
データベースクラスタの置き場所を、pgDataという名前のVolumeであらかじめ作っておきます。

$ docker volume create --name pgData


3.データボリュームコンテナの作成
ここがかなり大事です。
まず、PostgreSQLコンテナを起動して、データベースクラスタディレクトリを先ほど作ったpgDataにマウントします。

$ run -it -v pgData:/var/lib/postgresql/9.3/main/ --name postgres-test -d postgres9.3

これでこのコンテナは用無しなので削除しておきます。
次にpgDataをマウントして データボリュームコンテナを作成します。
データボリュームコンテナは起動しておく必要はないのでrun ではなくcreate しておきます。

$ docker create -it -v pgData:/var/lib/postgresql/9.3/main/ --name postgres-data busybox

これでDataVolumeContainer内にデータベースクラスタを置くことができました。

4. PostgreSQLコンテナでデータボリュームコンテナをマウント
最後は、データボリュームコンテナをマウントしてPostgreSQLのコンテナを起動すれば永続化の完了です。

$ docker run -it --volumes-from postgres-data -p 5432:5432 -d --name postgres9.3 postgres9.3


Mac OS 上からPosticoを使ってテーブルを操作したりしてから、一旦コンテナ削除してもう一回立ち上げたりしてもちゃんとデータ残ってました。

ここまで来るのに約1週間くらいかかった笑 夏休みで時間はたくさんあるので別にいいですが笑
ローカルのディレクトリを汚したくないという理由でDockerを使い始めたけどかなり苦労しました。
次は本題のRuby on Railsのアプリケーションを作っていきたいと思ってます。来週中にできるかな?笑

Rails コンテナとPostgreSQLコンテナの連携については、こちら
ishikawa-pro.hatenablog.com