Need Solr cloud setup on aws environment with a basic solr nodejs client to test functionalities

node.js & アマゾンウェブサービス Projects for ₹1500 – ₹12500. I need solr cloud setup on aws with all best practices like load balancing and auto backup etc. Mail me at [Removed by Freelancer.com Admin] if interested . Thanks…. 続きを読む

iperfでAWSのEC2インスタンスの速度を測定した

自己紹介

最近本腰を入れて技術の勉強をするようになりました、dtd root と言います。
私の投稿では、主に私の勉強の過程を記録し、可能ならば皆さまに知識を分けていただこうという趣旨の元投稿を行います。
至らない点や間違いが数多くありますが、どうぞご容赦ください。

AWSでTCPの最大レートを測定

環境は以下

測定リージョン
東京-東京間
東京-ソウル間

インスタンスタイプ
t2.micro

OS
Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Type

入力コマンド

クライアント側
iperf -c -t 60 -p

※宛先IPはパブリックIPです。

サーバー側
iperf -s -p

実行結果
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-60.2 sec 235 MBytes 32.8 Mbits/sec
[ 5] 0.0-60.0 sec 3.37 GBytes 482 Mbits/sec

Qita1.png

所感
ソウルを跨いだ方が帯域幅が低くなるのは当然の結果かと思われますが、理論値の算出方法がどうにもわかりませんでした。
ググってみてもうまくAWS-EC2の理論帯域が出てこないので、そちらとの比較が出来なかったのが残念だと思っています。
そしてこの値はどうすれば良くなるのか、どうすれば悪くなるのか、といったところも全く分からない状況なので、
今後手探りで知識を得ていければいいなと思っています。

参考文献

[1]Amazon Web Services 基礎からのネットワーク&サーバー構築
[2]ネットワーク測定ツールiperfの使い
https://qiita.com/takish/items/bff7a1df712d475432df
[3]EC2でiperfを使ってネットワークスループットを計測してみた。
https://dev.classmethod.jp/etc/ec2-iperf/

続きを読む

HDP 2.6.3をAWSにインストール 乞食版

ゴール

AWSの超安いインスタンスに、HDPをインストールして遊ぶ。

インスタンス初期化

Ambari

t2.nano

[ec2-user@ip-172-31 ~]$ free -m
              total        used        free      shared  buff/cache   available
Mem:            990          80         731          12         179         739
Swap:             0           0           0

AWS Amazon Linux スワップファイル作成によりSwap領域のサイズを増やす
https://qiita.com/na0AaooQ/items/278a11ed905995bd16af

現在は1GBあるので、8GBのSwapメモリを追加

grep Mem /proc/meminfo
grep Swap /proc/meminfo
free
uname -a
# /swapfile1 に保存
sudo dd if=/dev/zero of=/swapfile1 bs=1M count=8192
grep Swap /proc/meminfo

ll /swapfile1
sudo chmod 600 /swapfile1
sudo mkswap /swapfile1
ll /swapfile1
swapon -s
free
sudo swapon /swapfile1
free
grep Swap /proc/meminfo

メモリ追加しました。

[ec2-user@ip-172-31 ~]$ free -m
              total        used        free      shared  buff/cache   available
Mem:            990          77          64          12         848         731
Swap:          3083           0        3083
[ec2-user@ip-172-31 ~]$

t2.micro instance作成

Ambari:1台
Master:1台
Slave:3台

image.png

注意事項

RHEL 7.4

Red Hat Enterprise Linux 7.4 (HVM), SSD Volume Type – ami-26ebbc5c

AWS setting

t2.micro instance

Storage setups —

Ambari: EBS 15G
NN/DN: EBS 20G

image.png

image.png

セキュリティ設定

All Traffic, Allow, HDPのセキュリティグループID指定(内部通信を全部許可)
All Traffic, Allow, MyIP (管理者のIPを許可)
これでOK

ssh private key

scp -i amuisekey.pem amuisekey.pem ec2-user@ec2-54-234-94-128.compute-1.amazonaws.com:~/.ssh/id_rsa
# 全部サーバーにアップロード

hosts

自分のMBP /etc/hosts

    127.0.0.1 localhost.localdomain localhost
    ::1 localhost6.localdomain6 localhost6

#外部IP
    10.110.35.23 hdpmaster1.hdp.hadoop hdpmaster1
    10.191.45.41 hdpmaster2.hdp.hadoop hdpmaster2
    10.151.94.30 hdpslave1.hdp.hadoop hdpslave1
    10.151.87.239 hdpslave2.hdp.hadoop hdpslave2
    10.70.78.233 hdpslave3.hdp.hadoop hdpslave3
    10.151.22.30 ambarimaster.hdp.hadoop ambarimaster

AWSサーバーの /etc/hosts

    127.0.0.1 localhost.localdomain localhost
    ::1 localhost6.localdomain6 localhost6

#外部IP
    10.110.35.23 hdpmaster1.hdp.hadoop hdpmaster1
    10.191.45.41 hdpmaster2.hdp.hadoop hdpmaster2
    10.151.94.30 hdpslave1.hdp.hadoop hdpslave1
    10.151.87.239 hdpslave2.hdp.hadoop hdpslave2
    10.70.78.233 hdpslave3.hdp.hadoop hdpslave3
    10.151.22.30 ambarimaster.hdp.hadoop ambarimaster

Install

https://community.hortonworks.com/articles/14512/ambari-on-ec2.html

image.png

続きを読む

Ubuntu 16.04 on AWSでリモートデスクトップを実現する(Macから接続)

前置き

Ubuntu 16.04 on AWSでリモートデスクトップ接続を実現しようとしたらハマったのでメモ。
Mac <-> UbuntuなのでVNCとかでやる方が普通そうなので需要あるかわかりませんが。。

以下のようなページを彷徨い、色々と試したが結果的にうまくリモートデスクトップが動かなかった。(ハマった箇所は色々あったが最後はssh接続は問題なくできているのにリモートデスクトップからだと「Connection Refused」で先に進めない。権限周りなどを色々と確認したがうまくいかなかった。)

https://cryptotrader.muragon.com/entry/56.html
http://akira.matrix.jp/archives/972

環境

サーバー
– Ubuntu Server 16.04 LTS (HVM), SSD Volume Type on AWS EC2

クライアント
– MacOSX 10.12.6

解決方法

しかし以下のページのコマンドで一発で行けた。ありがとう。
https://qiita.com/tmikada/items/be27df3affc56eeffd8b

インストール
$ sudo apt install xrdp xfce4 xfce4-goodies tightvncserver

ただし、以降の部分は実行したらうまくいかなかった(接続はされてるが、グレーの画面が表示されてデスクトップが表示されない。Xウィンドウの設定なんだと思うが、時間がないので調査は割愛)。

実行したらうまくいかなかった箇所
$ sudo vi /etc/xrdp/xrdp.ini
# 以下のように編集
---------
...
#. /etc/X11/Xsession
---------

実施した手順

最終的に実行した一連の流れは以下の通り。

xrdpのインストール
$ sudo apt install xrdp xfce4 xfce4-goodies tightvncserver
$ sudo service xrdp restart

AWSコンソールのセキュリティグループの設定(インバウンド)で以下を追加。

image.png

クライアントからログイン

Macのリモートデスクトップ接続で設定。

image.png

無事にデスクトップに接続。

image.png

続きを読む

5分で構築、AmazonLinux+PHP7+Nginx+WordPress

使用した環境

以下環境のバージョンなど
AMIは、amzn-ami-hvm-2017.09.1.20171120-x86_64-gp2
Nginxは、version1.12.1
Wordpressは、version4.9.2日本語版

php70.x86_64                         7.0.25-1.26.amzn1             @amzn-updates
php70-cli.x86_64                     7.0.25-1.26.amzn1             @amzn-updates
php70-common.x86_64                  7.0.25-1.26.amzn1             @amzn-updates
php70-fpm.x86_64                     7.0.25-1.26.amzn1             @amzn-updates
php70-json.x86_64                    7.0.25-1.26.amzn1             @amzn-updates
php70-mbstring.x86_64                7.0.25-1.26.amzn1             @amzn-updates
php70-mysqlnd.x86_64                 7.0.25-1.26.amzn1             @amzn-updates
php70-pdo.x86_64                     7.0.25-1.26.amzn1             @amzn-updates
php70-process.x86_64                 7.0.25-1.26.amzn1             @amzn-updates
php70-xml.x86_64                     7.0.25-1.26.amzn1             @amzn-updates

インストール

yumのアップデート

sudo yum -y update

yumで必要なものを入れる

sudo yum -y install php70
sudo yum -y install php70-mbstring
sudo yum -y install php70-pdo
sudo yum -y install php70-fpm
sudo yum -y install php70-mysqlnd

設定

apacheのユーザから、nginxに置き換える

/etc/php-fpm.d/www.conf
user = nginx
group = nginx

Nginxの設定

nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    index   index.php index.html index.htm;

}

作成するサイトのドメインをsample.comとする

/etc/nginx/conf.d/sample.conf
server {
    listen       80;
    client_max_body_size 20M;
    server_name  sample.com;
    root         /var/www/html/sample;
    index        index.php index.html;

    location ~ .php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /var/www/html/sample$fastcgi_script_name;
        #fastcgi_param  PATH_INFO $fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_read_timeout 180;
    }


    include /etc/nginx/default.d/*.conf;

    location / {
    }

    # redirect server error pages to the static page /40x.html
    #
    error_page 404 /404.html;
        location = /40x.html {
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

}

以下のコマンドを打って、/var/www/html以下に、wordpressを配置

cd /var/www/html
sudo wget https://ja.wordpress.org/wordpress-4.9.2-ja.zip
sudo unzip wordpress-4.9.2-ja.zip
sudo mv wordpress sample
sudo chown -R nginx:nginx sample

起動時にNginxとPHPが立ち上がるようにする

sudo chkconfig nginx on
sudo chkconfig php-fpm-7.0 on

起動

sudo service nginx start
sudo service php-fpm-7.0 start

アクセスしてWordpressをインストール

サーバのIPアドレスにアクセス

続きを読む

AWS と Azure と自宅の PC で NVIDIA GPU Cloud (NGC) のコンテナを動かしてみた

こんにちは。エヌビディアの佐々木です。

NVIDIA GPU Cloud (NGC) というサービスをご存知でしょうか。端的に書けば 「NVIDIA が公開している Docker コンテナリポジトリ」 です。CaffeChainerTensorFlow 等の各種ディープラーニング フレームワークや、GAMESSGromacsLAMMPS といった HPC アプリケーションのコンテナが揃っており、もちろん GPU 実行に最適化されています。このコンテナを使えば、計算環境構築の手間をかなり削減することができます。

「Cloud」とあるので、クラウドで GPU を使うためのサービスと思われることがあるのですが、NGC は「コンテナを提供するクラウドサービス」であって、そのコンテナはクラウドに限らず、オンプレミスのコンピューターでも利用できます。

今のところ、コンテナの利用環境としてエヌビディアが正式にサポートするのは AWS の P3 インスタンス と、NVIDIA TITAN V を搭載するコンピューターのみですが、それ以外の環境でも Pascal 世代以降の GPU であれば動作するはずです。

というわけで、次のような3つの環境で試してみました。

  • AWS の P3 インスタンス (Tesla V100 搭載)
  • Microsoft Azure の ND インスタンス (Tesla P40 搭載)
  • 私の自宅 PC (GeForce GTX 1050 Ti 搭載)

※ 私の PC だけちょっと弱めですが、ロープロファイルのカードしか付かないんです…

NGC のアカウントを作る

まず、 NGC のサインアップページでアカウントを作成します。無料です。
2018-01-28_205005.png

NGC の API キーを生成する

アカウントができたらログインして、画面右上の “Get API Key” をクリックしてください。
2018-01-28_205552.png

次に、”Generate API Key” をクリックして API キーを生成します。これは後ほど NGC からコンテナを pull する際に使用します。
2018-01-28_210946.png

生成されたキーは必ずどこかに控えておいてください。”This is the only time your API Key will be displayed.” とあるとおり、二度と表示されません。
2018-01-28_211158.png

さて、アカウントと API Key ができたら、あとは実行環境の準備です。要件は次の通り。

  • Pascal 世代以降の GPU (と、そのドライバ)
  • NVIDIA Docker

では、AWS, Azure, 自宅 PC のそれぞれで試していきます。

実行環境を作る (AWS で)

AWS は NGC の正式サポート環境なので、準備も簡単です。NVIDIA Volta Deep Learning AMI という AMI をエヌビディアが提供していますので、これを使って P3 インスタンスを作れば OK です。ドライバも NVIDIA Docker もインストール済み。別途セットアップする必要はありません。(なお、G2, G3, P2 は、GPU が Kepler や Maxwell 世代なので NGC 非対応)

早速作ってみます。
2018-01-28_212822.png
東京は高いのでオレゴンで、インスタンスタイプは p3.2xlarge (Tesla V100 を1基搭載)を選びました。

インスタンスが動き始めたらログインしてみます。シェルのプロンプトが出る前にこんなことを聞いてきます。

Welcome to the NVIDIA Volta Deep Learning AMI. This environment is provided to
enable you to easily run the Deep Learning containers from the NGC Registry.
All of the documentation for how to use NGC and this AMI are found at
  http://docs.nvidia.com/deeplearning/ngc
Initializing nvidia-docker volume...

Please enter your NGC APIkey to login to the NGC Registry:

ここで、先ほど生成した API キーを入力(ペースト)します。

Logging into the NGC Registry at nvcr.io...Login Succeeded

こうなれば NGC 利用準備完了です。コンテナを動かす前に、 GPU を確認してみます。

$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.81                 Driver Version: 384.81                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla V100-SXM2...  On   | 00000000:00:1E.0 Off |                    0 |
| N/A   32C    P0    19W / 300W |     10MiB / 16152MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

本当に Tesla V100 SXM2 だ!テンション上がりますねー

では、コンテナを動かしてみます。NGC サイトの AWS のチュートリアルにある、PyTorch での MNIST 手書き文字認識が動作確認には手軽です。

$ nvidia-docker run --rm -ti nvcr.io/nvidia/pytorch:17.10
17.10: Pulling from nvidia/pytorch
f5c64a3438f6: Pull complete
51899d335aae: Pull complete
<略>

初回なのでいろいろとダウンロードする必要があり、少し時間がかかりますが、うまくコンテナが動き出しました。

=============
== PyTorch ==
=============

NVIDIA Release 17.10 (build 192702)

Container image Copyright (c) 2017, NVIDIA CORPORATION.  All rights reserved.

Copyright (c) 2016-     Facebook, Inc            (Adam Paszke)
Copyright (c) 2014-     Facebook, Inc            (Soumith Chintala)
Copyright (c) 2011-2014 Idiap Research Institute (Ronan Collobert)
Copyright (c) 2012-2014 Deepmind Technologies    (Koray Kavukcuoglu)
Copyright (c) 2011-2012 NEC Laboratories America (Koray Kavukcuoglu)
Copyright (c) 2011-2013 NYU                      (Clement Farabet)
Copyright (c) 2006-2010 NEC Laboratories America (Ronan Collobert, Leon Bottou, Iain Melvin, Jason Weston)
Copyright (c) 2006      Idiap Research Institute (Samy Bengio)
Copyright (c) 2001-2004 Idiap Research Institute (Ronan Collobert, Samy Bengio, Johnny Mariethoz)
All rights reserved.

Various files include modifications (c) NVIDIA CORPORATION.  All rights reserved.
NVIDIA modifications are covered by the license terms that apply to the underlying project or file.

NOTE: The SHMEM allocation limit is set to the default of 64MB.  This may be
   insufficient for PyTorch.  NVIDIA recommends the use of the following flags:
   nvidia-docker run --ipc=host ...

root@b3d044efeae1:/workspace#

コンテナの中で、サンプルスクリプトを動かしてみます。

root@b3d044efeae1:/workspace# cd /opt/pytorch/examples/mnist && python main.py
Train Epoch: 1 [0/60000 (0%)]   Loss: 2.390087
<中略>
Train Epoch: 10 [58880/60000 (98%)]     Loss: 0.272635
Train Epoch: 10 [59520/60000 (99%)]     Loss: 0.082086

Test set: Average loss: 0.0553, Accuracy: 9804/10000 (98%)

root@b3d044efeae1:/opt/pytorch/examples/mnist#

1分半ほどで10エポック完了しました。環境構築の手間いらずで、実に簡単ですね。

実行環境を作る (Azure で)

Microsoft Azure の仮想マシンで、Pascal 以降の GPU を搭載しているのは次の3種類です。

  • NCv2 (Tesla P100)
  • ND (Tesla P40)
  • NCv3 (Tesla V100: ただし、2018年1月時点ではプレビュー提供中)

今回は ND シリーズの一番小さいやつ(ND6s)をData Science Virtual Machine for Linux (Ubuntu)で作りました。これは AWS の NVIDIA Volta Deep Learning AMI のように、GPU ドライバや NVIDIA Docker があらかじめインストールされた仮想マシンイメージです。楽ちんです。

2018-01-28_221052.png

ログインしたら GPU を確認。確かに、Tesla P40 が搭載されていますね。こいつの GPU メモリサイズは 24GB と、P100 や V100 よりも大きいのです。

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.111                Driver Version: 384.111                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P40           Off  | 00008B49:00:00.0 Off |                    0 |
| N/A   25C    P8    11W / 250W |     10MiB / 22912MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

では、動作確認を。Azure の場合、 AWS の NVIDIA Volta Deep Learning AMI のようにログイン時に NGC のキーを入力していませんので、まずは NGC へのログインが必要です。

下記コマンドの ‘$oauthtoken’ の部分は「環境に応じて適切に置き換えてください」という意味ではなく、「そのまま」入力してください。シェルに変数展開されないようにシングルクォートで括る必要があります。

$ docker login -u '$oauthtoken' --password-stdin nvcr.io <<< 'API キー'
Login Succeeded

あとは、AWS の場合と同じです。こちらでも PyTorch の MNIST を試してみました。同じことをやっても面白くありませんが、「同じものがどこでも動く」というのがコンテナの便利なところなので。

$ nvidia-docker run --rm -ti nvcr.io/nvidia/pytorch:17.10

=============
== PyTorch ==
=============

NVIDIA Release 17.10 (build 192702)

Container image Copyright (c) 2017, NVIDIA CORPORATION.  All rights reserved.

<略>

root@84835550d223:/opt/pytorch/examples/mnist# cd /opt/pytorch/examples/mnist && time python main.py

<略>

Train Epoch: 1 [0/60000 (0%)]   Loss: 2.390087
Train Epoch: 1 [640/60000 (1%)] Loss: 2.350225

<略>

Train Epoch: 10 [58880/60000 (98%)]     Loss: 0.307370
Train Epoch: 10 [59520/60000 (99%)]     Loss: 0.081178

Test set: Average loss: 0.0546, Accuracy: 9813/10000 (98%)

root@84835550d223:/opt/pytorch/examples/mnist#

(当たり前ですが) 無事に動きました。簡単ですね。

実行環境を作る (自宅の PC 等で)

さて、2種類のクラウドを試しましたが、次に自宅の PC でも試してみました。環境は次の通りです。

  • OS: Ubuntu 16.04.3 LTS
  • GPU: GeForce GTX 1050 Ti (Pascal 世代)

Deep Learning AMI のような便利なものはないので、GPUのドライバと NVIDIA Docker は自分でインストールする必要があります。

GPU ドライバのインストール

NVIDIA のドライバダウンロードページから、自分の GPU に対応したドライバのインストーラーをダウンロードしてインストールします。なお、NVIDIA Docker さえ動けば良いので、CUDA Toolkit のインストールは不要です。

NVIDIA Docker のインストール

NVIDIA Docker のインストールには前提条件として Docker が必要です。私はこちらのページを参考にして、Docker CE をインストールしました。実行したコマンドは次の通りです。

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce

次に、 NVIDIA Docker をインストールします。こちらのページに手順がまとまっています。実行したコマンドは次の通りです。

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt update

sudo apt install nvidia-docker2
sudo pkill -SIGHUP dockerd

あと、sudo なしで Docker を実行できるように、自分を docker グループに追加しました。

sudo gpasswd -a 自分 docker

コンテナの動作確認

「またか」という感じですが、PyTorch で MNIST してみます。

$ docker login -u '$oauthtoken' --password-stdin nvcr.io <<< 'API キー'
Login Succeeded
$ nvidia-docker run --rm -ti nvcr.io/nvidia/pytorch:17.10

=============
== PyTorch ==
=============

NVIDIA Release 17.10 (build 192702)

Container image Copyright (c) 2017, NVIDIA CORPORATION.  All rights reserved.

<略>

root@2dc683eff1b2:/opt/pytorch/examples/mnist# cd /opt/pytorch/examples/mnist && python main.py

<略>

Train Epoch: 1 [0/60000 (0%)]   Loss: 2.390087
Train Epoch: 1 [640/60000 (1%)] Loss: 2.350225

<略>

Train Epoch: 10 [58880/60000 (98%)]     Loss: 0.288593
Train Epoch: 10 [59520/60000 (99%)]     Loss: 0.084271

Test set: Average loss: 0.0529, Accuracy: 9821/10000 (98%)

root@2dc683eff1b2:/opt/pytorch/examples/mnist#

無事に動きました!

まとめ

NVIDIA GPU Cloud のコンテナを、2種のクラウドと自宅の PC で動かしてみました。
AWS と Azure は GPU ドライバと NVIDIA Docker インストール済みの仮想マシンイメージが使えるのでとても簡単。それ以外の環境でも、NVIDIA Docker の環境さえ作ってしまえば、あとは毎月更新される最新のコンテナを活用することで、環境構築とメンテナンスをかなり効率化できます。是非お試しを!

関連情報

続きを読む

keystoneJSをnginxでデプロイしてaws上で動かす。

wordpressが使いたくなく、python大好きマンなのでmezzanineを使おうと思ったのですが、デプロイで頓挫したのでnodeJSでやろう。keystoneJSでやろうという次第です。

DDNSにはno-IPを利用しました。

keystoneJS official

前提

  • awsにインスタンスを作成済み
  • 上記インスタンスの3000番ポートを開けておく
  • 上記のインスタンスにssh接続出来る

諸々のインストール

sudo yum update -y

nodeJS


curl -L git.io/nodebrew | perl - setup
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
ebisennet$ source ~/.bash_profile

nodebrew install-binary v9.4.0

mongoDB

こちらの記事を参考にさせて頂きました。

sudo vim /etc/yum.repos.d/mongodb-org-3.2.repo

[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc

sudo yum install -y mongodb-org

sudo service mongod start

sudo chkconfig mongod on

Yoeman

sudo npm install --global yo

keystoneJS

sudo npm install -g generator-keystone

no-IP

sudo yum-config-manager --enable epel
sudo yum install -y noip

nginx

sudo yum install nginx

forever

npm install -g forever

keystoneJSの実行

公式ページの通りに進めます。
htmlはpug,cssはsassがオススメです。

mkdir my-test-project
cd my-test-project
yo keystone

node keystone

この時点で[myIP]の3000ポートにアクセスするとページが見れるはずです。
example : http://x.x.x.x:3000

no-IPの設定

awsのドキュメントを参考に進めます。

sudo noip2 -C
sudo chkconfig noip on
sudo service noip start

nginxでデプロイ

sudo vi /etc/nginx/nginx.conf
nginx.conf
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf; #この一行だけ加える
    ...
sudo vi /etc/nginx/conf.d/keystone.conf
keystone.conf
upstream node-sampleapp1 {
    server localhost:3000;
}

server {
    listen       80;
    server_name  http://DNSNAME/;
    proxy_redirect                          off;
    proxy_set_header Host                   $host;
    proxy_set_header X-Real-IP              $remote_addr;
    proxy_set_header X-Forwarded-Host       $host;
    proxy_set_header X-Forwarded-Server     $host;
    proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
    location / {
        proxy_pass http://node-sampleapp/;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   /usr/share/nginx/html;
    }
}

foreverでデーモン化

forever start keystone.js

デバックモードを切る

vi my-test-project/.env

NODE_ENV=productionとする。

あとは、templatesやpublic,routesなどを編集して自分好みのスタイルに変更する。
また、記事の投稿はhttp://DNSNAME/keystone/signin より行う。

オチ

markdownのプラグインとか欲しいのでwordpressを始めようと思いました。

続きを読む

AWS VPCでRoute53のプライベートホストゾーンを使う

はじめに

VPCでのプライベートホストゾーンについて説明します。
これはroute53.testのような実在しないドメインをRoute53に登録&設定すれば、設定したVPC限定でそのドメインが使えるというものです。

これを使って例えば次のようなことができます。

インスタンスAにweb.route53.testというレコードセットをRoute53に登録

設定したVPCのインスタンスからはwebという名前でインスタンスAにアクセスできる(どちらかと言うとリゾルバの機能ですが)

踏み台からのSSHやリレー、プロキシ先の指定などに便利ですよね。

料金について

こちらをご覧ください。月0.5ドルかかります。日割り計算はありません。

ただし作成から12時間は料金は発生しないようなので、テスト目的ならば12時間以内に削除しましょう。

設定

ドキュメントにいろいろ書かれていますが、大抵の場合次の手順でいけるはずです。

  1. Route53でプライベートホストゾーンを登録
  2. VPCのDNS, DHCP設定を変更

VPCのDHCPの設定を変更すれば/etc/resolv.confの設定は自動で行われます。便利ですね。

1. Route53でプライベートホストゾーンを登録

Route53のページに行ってホストゾーンを作成します。
特に迷うことはないと思いますがこんな感じで
スクリーンショット 2018-01-25 19.37.07.png

次にレコードを登録しましょう。
登録するIPはもちろんプライベートIPアドレスで。
スクリーンショット 2018-01-25 19.41.35.png

Route53での作業は以上です。

2. VPCのDHCP設定を変更

VPC一覧のページに移動し、DNSホスト名をはいに設定します。
スクリーンショット 2018-01-25 19.48.19.png

次にVPCのDHCP オプションセットというページに移動します。

ここで予めオプションの値をメモしておいてください。
※多分こんな感じで設定がされていると思います。
domain-name = ap-northeast-1.compute.internal;domain-name-servers = AmazonProvidedDNS;

ドメイン名にメモしたdomain-nameで指定されている値とスペースを開けて今回設定するプライベートホストゾーンの値を入力します。
ドメインネームサーバーにはAmazonProvidedDNSと入力してください。

スクリーンショット 2018-01-25 19.54.18.png

最後にVCPの一覧画面に移動し、DHCPオプションセットの編集から、先ほど作成したオプションセットを指定します。
スクリーンショット 2018-01-25 19.57.55.png

5分程度待つと、設定したVPC内のインスタンスの/etc/resolv.confが自動で変更され、instance01とinstance02でIPが引けるようになります。

スクリーンショット 2018-01-25 20.07.03.png

※テストで作った場合は忘れずにホストゾーンを削除しましょう!

注意点

自分は試していないのですが、ドキュメントに記載がある通り、名前空間が重複するパブリックゾーンとプライベートホストゾーンだと注意が必要です。

たとえばdevドメインのような実在するパブリックなドメインをプライベートホストゾーンに登録してしまうと、パブリックな方のDNSサーバには問い合わせてくれないということです。
気をつけましょう。

続きを読む

Amazon Linux 2 で Rails アプリケーションのサーバーを構成してみる

Amazon Linux 2 の特徴

  • AWS INTEGRATION

    • AWS tools (e.g. AWS CLI) と cloud-init が入った
  • LONG TERM SUPPORT
  • EXTRAS REPOSITORY FOR SOFTWARE PACKAGES
    • amazon-linux-extras で nginx などのパッケージを管理できる
  • ON-PREMISES USE
    • オンプレ利用用途に VM Image などが用意されている
  • SYSTEMD SUPPORT
  • TUNED LTS KERNEL AND NEW TOOLCHAIN
  • SECURITY CONFIGURATIONS
  • SECURITY UPDATES

インスタンスの作成

AMI 選択画面で Amazon Linux 2 LTS Candidate AMI 2017.12.0 (HVM), SSD Volume Type (ami-c2680fa4) を選択してインスタンスを立てる.

公開鍵の追加

vi ~/.ssh/authorized_keys

ユーザーの追加

sudo adduser deploy

ライブラリのインストール

sudo yum -y install 
git make gcc-c++ patch 
openssl-devel 
libyaml-devel libffi-devel libicu-devel 
libxml2 libxslt libxml2-devel libxslt-devel 
zlib-devel readline-devel 
mysql mysql-server mysql-devel 
ImageMagick ImageMagick-devel 
epel-release protobuf-devel

デプロイ先フォルダの用意

sudo mkdir /var/www
sudo chown deploy /var/www/
sudo mkdir /var/www/deploy
sudo chown deploy /var/www/deploy/

nginx のインストール

Amazon Linux 2 では amazon-linux-extras で入れる.

# 確認する
amazon-linux-extras
# install する
sudo amazon-linux-extras install nginx1.12
# ついでに emacs も入れる
sudo amazon-linux-extras install emacs

nginx の起動

# 起動
sudo systemctl start nginx.service
# ステータスの確認
sudo systemctl status nginx.service
# systemd を有効化
sudo systemctl enable nginx.service
# 有効になっているか確認
systemctl is-enabled nginx.service

nginx の設定

# nginx の設定ファイル
sudo vi /etc/nginx/nginx.conf
# 設定再読込
sudo nginx -s reload

ffmpeg

sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
mkdir ~/tmp
cd ~/tmp
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum -y localinstall epel-release-latest-7.noarch.rpm
sudo yum -y install ffmpeg ffmpeg-devel

wkhtmltoimage

https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
sudo mv wkhtmltox/bin/wkhtmltoimage /usr/bin/wkhtmltoimage

NodeJS

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
source ~/.bashrc
nvm install v8.9.4
nvm use v8.9.4
nvm alias default v8.9.4

Ruby

sudo git clone https://github.com/sstephenson/rbenv.git /usr/local/rbenv
sudo git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugin/ruby-build
sudo /usr/local/rbenv/plugin/ruby-build/install.sh
sudo vi /etc/profile.d/rbenv.sh
sudo su -
source /etc/profile.d/rbenv.sh
rbenv install 2.4.3
rbenv global 2.4.3
gem install bundler --no-ri --no-rdoc

タイムゾーン, host の修正

timedatectl, hostnamectl を利用する.

sudo timedatectl set-timezone Asia/Tokyo
sudo hostnamectl set-hostname deploy.dot.com
sudo reboot

New Relic Infrastructure の追加

https://rpm.newrelic.com/accounts/813076 でライセンスキー確認

echo "license_key: YOUR_LICENSE_KEY" | sudo tee -a /etc/newrelic-infra.yml
sudo curl -o /etc/yum.repos.d/newrelic-infra.repo https://download.newrelic.com/infrastructure_agent/linux/yum/el/7/x86_64/newrelic-infra.repo
sudo yum -q makecache -y --disablerepo='*' --enablerepo='newrelic-infra'
sudo yum install newrelic-infra -y

公開鍵

sudo su - deploy
mkdir ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# デプロイするサービスの公開鍵を追加
vi ~/.ssh/authorized_keys

refs

続きを読む