ubuntu上のdocker-composeのバージョンをあげる方法

久しぶりに一本書きます。

which docker-compose //docker-composeの場所を調べ、以下コマンドで最新版に置き換える
sudo curl -L "https://github.com/docker/compose/releases/download/1.16.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo docker-compose version

docker-compose version 1.16.1, build 6d1ac21
docker-py version: 2.5.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

あんま文献なくて、1時間ほどはまったのでひとまず。

alias設定することでviコマンドでvimを起動する

Gakuです。
最近よくvimを使っているのですが、viコマンドとvimコマンドで起動するvimが異なっており、いろいろうざい感じになっていました。
alias設定を行うことで、viでもvimでもどちらのコマンドでもvimコマンドで立ち上がるvimになるように設定しました。

alias vi='vim'

エイリアス設定を行うことで、viコマンドでもvimコマンドで立ち上がるvimが起動するように設定できます。

おわりに

alias便利っすね!
docker-composeコマンドとか長くてうざいので、エイリアス設定すればいろいろ楽になりそうです( ´Д`)y━・~~
シェル芸もっと極めたい。。。

Vagrantで「default: Warning: Connection reset. Retrying…」が繰り返される現象の解消法

Gakuです。

最近、golangとかreactとかdockerとかばかりやってて、1年ほどvagrantを触っていませんでした。
今回、RoRやるためにちょっとvagrantを触ったら盛大にハマったので、そのハマり内容&解消法を記載したいと思います。

ハマり内容

Vagrantbox.esから、Ubuntu 16.04 with Docker enabled (based on amd64 server iso file)のファイルを追加したら、以下内容で全く処理が終了しない現象に陥りました。

takehiro-hidakanoMacBook-Pro:ubuntu gaku$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 80 (guest) => 3000 (host) (adapter 1)
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    ...

SSHあたりの設定を試みるも

文献漁っていると、「公開鍵・秘密鍵の設定を適切に設定すれば動くよ!」という助言があったため、その内容を適用したりもしましたが、結局

default: Warning: Connection reset. Retrying...
default: Warning: Remote connection disconnect. Retrying...

が永遠に繰り返される現象は解消しませんでした。

解消法

いろいろ文献漁っているとVagrantbox.esのboxはあまりよろしくないとのこと。
何やら、vagrantの公式boxサイトがあるとのことなので、以下リンク先のものを設定し、再度挑戦
[blogcard url=”https://app.vagrantup.com/ubuntu/boxes/xenial64″][/blogcard]

すると

takehiro-hidakanoMacBook-Pro:ubuntu gaku$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'ubuntu/xenial64' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'ubuntu/xenial64'
    default: URL: https://atlas.hashicorp.com/ubuntu/xenial64
==> default: Adding box 'ubuntu/xenial64' (v20170626.0.0) for provider: virtualbox
    default: Downloading: https://app.vagrantup.com/ubuntu/boxes/xenial64/versions/20170626.0.0/providers/virtualbox.box
==> default: Box download is resuming from prior download progress
==> default: Successfully added box 'ubuntu/xenial64' (v20170626.0.0) for 'virtualbox'!
==> default: Importing base box 'ubuntu/xenial64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/xenial64' is up to date...
==> default: Setting the name of the VM: ubuntu_default_1499084159453_22500
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: ubuntu
    default: SSH auth method: password
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 5.0.40
    default: VirtualBox Version: 5.1
==> default: Mounting shared folders...
    default: /vagrant => /Users/gaku/src/vagrant/ubuntu
takehiro-hidakanoMacBook-Pro:ubuntu gaku$ vagrant ssh
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-83-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.


ubuntu@ubuntu-xenial:~$ ls

余裕の解消( ^∀^)b

おわりに

やはり、定期的にいろいろ触らないとダメですねw
vagrantの公式boxサイトがあるとは知りませんでした。昔はVagrantbox.esが主流でしたが(※僕の中では)今度からは公式サイトを使用していきたいと思います。

wordpressデータの移行方法について

Gakuです。

最近放置気味のこのブログなんですが、サクラのVPSがお高い&動作が重い感&conohaにvpsを統一したい願望がむくむくと湧き出てきたため、今回思い切って移行してみました。

あばれるコメント欄、放置される更新


2000件を超えるスパムコメント。。。

放置される更新。。。

さすがにあかんっすわ。なので移行です。

移行手順

いろいろ文献見てると、結構みんなハマってるみたいですw
今回の行った移行手順は、移行先に投稿記事&その他メディアだけのお引越しとなります。
プラグインやテーマの引越しは考えていませんのであしからず。

移行元からデータエクスポート

まずは移行元wordpressサーバからデータをエクスポートしてきます。

「エクスポートファイルをダウンロード」ボタンをクリックすると、下記のようなファイルがダウンロードされます。
このファイルが移行データになります。

ドメインの設定

ここまで終われば、移行元wordpressサイトは不要です。
なので、このタイミングでドメインを移行先サイトへ設定しておきます。

wordpressのインストール前にこの作業を行っておかないと、動作がおかしなことになるので、必ずやっておきましょう。
(※ここらへんどうにかならんのかな。。。)

ドメインの設定が完了したら移行先サーバへwordpressのインストールを行います。

移行データを編集

先ほどエキスポートしたxmlデータですが、このままインポートすると失敗します。
原因としては画像データ等々が前ドメインの内容になっていて、インポート元で参照することができないためです。
そこで、下記コマンドでxmlの内容を一括置換します。

sed -i -e 's/https:\/\/www.gakusmemo.com\//http:\/\/???.???.???.???\//g' ~/Desktop/ファイル名

https://www.gakusmemo.com/部分は各自の移行元ドメイン名を設定し、???.???.???.???は移行元のIPアドレスを設定します。
これでhttps://www.gakusmemo.com/が移行元サーバIPの???.???.???.???になるため、インポート先でも失敗なく参照できるようになります。

移行先へデータをインポート

先ほど編集したxmlファイルを移行先wordpressへインポートします。


wordpressの今すぐインストールをクリック。

xmlファイルを指定します。
ここで、エラーが出る場合、uploadのファイルサイズ制限に引っかかっている可能性があります。
その際は、php.iniのupload_max_filesizeの数値を大きくして、再度uploadします。

uploadが完了すればこの画面に遷移します。
この画面では必ず、「添付ファイルをダウンロードしてインポートする」にチェックを入れて「実行」ボタンを押してください。
チェックを入れることで、画像等々のファイルを格納してくれます。

少し待って、この画面に遷移すれば移行完了です。

おわりに

みんなくっそハマってますねw
文献参照していると「dbdump取っていろいろやる」という手法が多いのですが、沼地にハマっていく気がしてこの方法に行き着きました。
わかってしまえば簡単です。純正のインポートツール使うのが一番の近道ですね。

これでdocker上で動くwordpress環境が手に入りましたので、今後はそこまでビビらずいろいろ作業できそうです( ^ω^ )
ではでは。

ubuntuにdockerとdocker-composeをインストールする

gakuです。

サーバ構築絡みでもう一件投稿します。
ubuntu16.04(64bit)版にdockerをインストールする手順を覚え書き程度に書いてきます。

インストール方法

apt-get update

とりあえず、updateします。

sudo apt-get update

必要pkgインストールとGPG鍵の入手

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

レポジトリの取得&dockerのインストール

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce

インストール確認

sudo docker version

Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 17:14:09 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 17:14:09 2017
 OS/Arch:      linux/amd64
 Experimental: false

OKぃ(´・ω・`)b

docker-composeのインストール

ついでにdocker-composeもインストールしておきます。

sudo apt-get install docker-compose

インストール確認

sudo docker-compose version

docker-compose version 1.8.0, build unknown
docker-py version: 1.9.0
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016

完璧んダック(´・ω・`)b

おわりに

最近、勤め人に戻りました。
毎朝5時おき、電車の中で1時間、会社付近のカフェで1時間半実装しているのですが、かなりはかどります(´・ω・`)
ニート時代に構築していたプライベート実装ももう少しで落ち着きそうなので、それ終わり次第、仕事で使いそうなTensorFlowを触って、新しいモダンなWEBサイトを構築しようかと妄想中です。

とりあえず言えること。
「conohaちゃん可愛い(*´﹃`*)」

以上です。

ConohaでVPSレンタルしたら、最初にやる設定

Gakuです(´・ω・`)

conohaのVPSが月700円くらいとお安く、最近よくレンタルするようになってます。
その際、sshの鍵認証周りの設定を忘れる頻度が高すぎるので、覚書程度に書きたいと思います。

インストールOS

ubuntu16.04(64bit)
で書いていきます。

設定

パスワード認証でのSSH接続

gaku:.ssh gaku$ ssh root@???.???.???.???
root@:~#

OSインストールした際に設定したPWを入力し、rootで接続します。

ユーザ追加

root@:~# adduser gaku
Adding user `gaku' ...
Adding new group `gaku' (1000) ...
Adding new user `gaku' (1000) with group `gaku' ...
Creating home directory `/home/gaku' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for gaku
Enter the new value, or press ENTER for the default
	Full Name []:
	Room Number []:
	Work Phone []:
	Home Phone []:
	Other []:
Is the information correct? [Y/n] Y

ついでにsudoユーザとしても追加します。

root@:~# gpasswd -a gaku sudo
Adding user gaku to group sudo

SSH鍵作成

一旦サーバからログアウトして、クライアント側のPCで鍵を作成します。

gaku:.ssh gaku$ cd ~/.ssh/
gaku:.ssh gaku$ ssh-keygen -t rsa -f conoha
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
gaku:.ssh gaku$ ls
config		conoha		conoha.pub	id_rsa		id_rsa2		id_rsa2.pub	id_rsa3		id_rsa3.pub	known_hosts

conohaの名前で鍵が作成されていることを確認します。

サーバに鍵を転送

公開鍵(末尾.pub)をサーバへ転送します。

scp ./conoha.pub gaku@???.???.???.???:
root@'s password:

ログインしsshの配置を行います。

ssh gaku@???.???.???.???

サーバにログインし鍵の登録&権限周りの設定をします。

gaku@:~$ cd ~
gaku@:~$ mkdir .ssh
gaku@:~$ mv conoha.pub .ssh/.
gaku@:~$ chmod 700 .ssh
gaku@:~$ cd .ssh
gaku@:~/.ssh$ cat conoha.pub >> authorized_keys
gaku@:~/.ssh$ chmod 600 authorized_keys

sshd設定

sshdの設定を行います。

root@:~/.ssh# vi /etc/ssh/sshd_config

//以下三項目を修正
PermitRootLogin no
AuthorizedKeysFile      %h/.ssh/authorized_keys
PasswordAuthentication no

service sshd restart

鍵認証でログインしてみる

ssh -i ~/.ssh/conoha gaku@???.???.???.???

入れたらOK(´・ω・`)b

エイリアス登録しておく

vi ~/.ssh/config
//以下追記
Host conoha
    HostName ???.???.???.???
    User gaku
    IdentityFile ~/.ssh/conoha

この設定でこんな感じでログインでける。

ssh conoha

おわりに

たまに超絶はまるので(´・ω・`)(これ書いてるときも微はまりの連続でした。。。

今更ながらシェルスクリプトにはまる

Gakuです。

最近、dockerを良く触っており、環境構築自動化にはまっていました。
そこで、今まであまり使っていなかったシェルスクリプトにも触れたので、その所感を記述したいと思います。

シェルスクリプトってなんぞ?

Linux系OSで使用されるコマンドを1つのファイルに記述し、そのファイルを実行することでファイルに記述したコマンドを実行するものです。
Windows系で言えばbatファイルにあたります。

Hello Worldをシェルスクリプトで記述してみる

シェルスクリプトを作成するのはすごく簡単です。
拡張子.shでファイルを作成し、その中にいつも使っているコマンドを記述するだけです。
今回はHello Worldと出力するコマンドを記述したシェルスクリプトを作成します。

echo "Hello World"

これで準備完了です(´Д` )

作成したシェルスクリプトを実行していみる

シェルスクリプトを実行するのはすごく簡単です。
bashコマンドを用いて作成したシェルスクリプトを指定すれば、シェルスクリプト内に記述したコマンドが実行されます。

bash test.sh

スクリーンショット 2016-08-19 10.24.32

魅惑のシェルスクリプトの世界へようこそ( ^ω^ )

おわりに

シェルスクリプトを作成するのが最近すごく楽しいです。
一回書いちゃえば、もうその作業をする必要がなくなりますからね。
こういうことが好きってことはインフラエンジニアにも向いているのかもしれないと思っている今日この頃です。

ちなみに、私のGitHubリポジトリにvim環境構築用シェルスクリプトやrails5環境構築用シェルスクリプトなどを格納しております。
[blogcard url=”https://github.com/gaku3601/dotfile”][/blogcard]

よければ、参考にして下さい。でわでわ

docker-composeを使って複数コンテナの管理を簡易化する

Gakuです。

前回はdockerを使用し、railsコンテナとpostgreSQLコンテナを立ち上げ連携する方法を掲載しました。
[blogcard url=”http://160.16.72.126/?p=569″][/blogcard]

今回はdocker-composeなるものを導入し、複数コンテナの管理を簡易化したいと思います。

docker-composeとは何ぞ?

ここらへんの記事をみると幸せになれるかもしれません。
[blogcard url=”http://qiita.com/y_hokkey/items/d51e69c6ff4015e85fce”][/blogcard]

複数コンテナを1コマンドで立ち上げたり、docker run時のめんどうなオプションを記述して管理できる仕組みです。

ファイル構成

ファイル構成は下記のような感じで構成します。

.
├── docker-compose.yml
└── rails
    └── Dockerfile

Dockerfileは前回と同様のDockerfileを使用しております。

docker-compose.ymlの編集

postgreSQLとrailsコンテナを管理するため、docker-compose.ymlを下記のように編集します。

postgres0:
  image: postgres:9.5.4
  ports:
    - 5432:5432
rails:
  build: rails
  ports:
    - 3000:3000
  volumes:
    - /Users/gaku/Documents/develop/projects:/usr/src/docker-rails-test
  links:
    - postgres0:postgres0
  tty: true

設定内容はdocker run時のオプションと似ているのでとっつきやすいかと思います。

これで準備完了です( ^ω^ )

実行してみる

実行はすごく簡単です。

docker-compose build //イメージの作成
docker-compose pull  //イメージのダウンロード
docker-compose up -d //コンテナの生成

たったこれだけです。
3コマンドで全てのコンテナのイメージ作成からコンテナ生成までやってくれます。
こ。。。これがdockerの強さか。。。

後片付けのコマンド

コンテナの後片付けもすごく簡単です。

docker-compose stop //全てのコンテナの停止
docker-compose rm   //全てのコンテナの削除

今まで一つ一つコンテナを削除していたのですが、これで一気に削除できます。
う〜ん。きもちぃε-(´∀`; )

/bin/bashが起動できない

今までdocker run -it コマンドでbashを立ち上げる設定をしていたのですが、docker-composeには-i相当の機能がないらしい。
(-tはdocker-composeのtty:trueの記述が該当している。)

なので、docker-composeで/bin/bashを立ち上げる場合、下記コマンドで実行してあげる必要がある。

docker exec -it <コンテナID> bash

おわりに

docker-composeを知るまで、

「dockerめんどくせぇな〜。vagrant+virtualBOXのが良いんじゃね(´q` )」
って思っていましたが、今回composeやってみて世界が変わりました。

dockerで設定すれば、もう環境構築ほとんどやらんでええやん!すばらしき世界!

2日間dockerを触ってきて、だいたいのことはできるようになりました。
今度はheroku上のdocker-herokuなるもので、herokuへのUPを試みたいと思います( *`ω´)

DockerでpostgreSQLを導入しrailsと連携する

Gakuです。

前回までで、Dockerfileからrails環境を構築する方法を掲載してきました。
[blogcard url=”http://160.16.72.126/?p=562″][/blogcard]

今回はpostgreSQLコンテナを作成し、railsコンテナと連携する方法を掲載したいと思います。

postgreSQLコンテナの準備

下記コマンドを実行することで、postgreSQLコンテナを作成できます。

docker pull postgres:9.5.4
docker run --name pos-con -p 5432:5432 -d postgres

簡単すぎる( ^ω^ )

railsコンテナの準備

下記コマンドを実行しrailsコンテナを作成します。

docker run -it -p 3000:3000 -v "$PWD":/usr/src/docker-rails-test --name railstest --link pos-con:pos-con  gaku/rails

(※–linkオプションが今回の肝です。)

で、仮想環境へアクセスされると思うので、対象のフォルダでrails newします。

rails new postgretest -d postgresql

これで準備完了です。

database.ymlを編集しpostgreSQLとコネクトする

railsのdatabase.ymlのdefault部分を下記のように編集し、postgreSQLコンテナとドッキングします。

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: pos-con
  username: postgres

下記コマンドでエラーが出ずdatabaseが作成されれば完了です。

rails db:create

おわりに

案外簡単にpostgreSQLとrailsの連携が可能でした。
今までは単体で起動していた各コンテナを、まとめて立ち上げることが可能なdocker-composeなるものを触ってみようと思います。( ^ω^ )

Dockerでrails環境を構築する

Gakuです。

前回の記事で、Dockerfileを作成しrubyコマンドを実行するところまで備忘録として残しました。
[blogcard url=”http://160.16.72.126/?p=557″][/blogcard]

今回はそのDockerfileを編集し、rails環境を構築します。

Dockerfileを編集

Dockerfileを以下のように編集し、rails環境構築用Dockerfileを作成します。

vi Dockerfile
FROM ruby:2.3.1

ENV APP_ROOT /usr/src/docker-rails-test

#Workディレクトリの設定
WORKDIR $APP_ROOT

#apt-getでtoolのインストール
RUN apt-get update && \
        apt-get install -y nodejs && \
        apt-get install -y vim

#rails導入
RUN gem install --no-ri --no-rdoc rails -v 5.0.0.1

#docker runの-pのヒント これでポート解放されるわけではない
#あくまで道しるべ
EXPOSE 3000:3000

#bashの立ち上げ
CMD ["/bin/bash"]

これで準備完了です( ^ω^ )

railsコンテナを立ててみる

作成したDockerファイルをビルドしてイメージを作成します。

docker build -t gaku/rails .

作成したイメージからコンテナを作成する。

docker run -it -p 3000:3000 -v "$PWD":/usr/src/docker-rails-test gaku/rails

そしたら仮想環境へアクセスする形となるので、いつもどおりrailsアプリケーションを作成してアプリケーションを立ち上げる

rails new test1
cd test1
rails s -b 0.0.0.0

docker-machineのipを確認しておき、そのipでホストPCのブラウザよりアクセスする。
スクリーンショット 2016-08-16 10.21.42

おつかれさまでした〜( ^ω^ )

作成したコンテナを操作する

一旦exitコマンドでコンテナを抜けるとコンテナが終了してしまう。
その際はコンテナを起こしてあげて、アクセスする必要がある。
下記コマンドで上記操作は可能です。

docker start コンテナID
docker attach コンテナID

おわりに

完全にDockerfileのCMDコマンドではまりました。。。つらかった。
CMDでbashを立ち上げるように設定するのがミソですね。
また、docker run時にいろいろなオプションを付けるのですが、その点をミスらなければすんなりrailsの導入は可能です。
次回はDBをpostgreSQLへ変更した場合の対処法などを掲載したいと思ってます。