AB Lab

abgata20000 blog.

Railsをrunicornで起動

起動

1
unicorn -c config/unicorn.rb -D

現在実行中のプロセスを探す

1
ps ax | grep unicorn

停止

1
kill process_id

Railsでtaskを作成

参考サイト

タスクファイルの作成

rails g task  task_name

lib/task/task_name.rake が作成される

lib/task/task_name.rake
1
2
3
4
desc "Sample です" #=> 説明
task :sample => :environment do
  print 'hello sample.'
end

実行

1
rake task_name:sample

確認

1
rake -vT

Node.jsのデーモン化ツールpm2をインストール

npmでグローバルにインストール

1
npm install -g pm2

スクリプトを登録

1
pm2 start sample001.js

スクリプトを確認

1
pm2 list

スクリプトを止める

1
2
# listで確認して、appで登録されたスクリプトを止めたい場合
pm2 stop app

ログを参照

1
pm2 logs

モニタリング

1
pm2 monit

サーバーの初期設定

yumを最新状態にする

1
sudo yum update -y

使用言語を日本語に設定

1
2
sudo cp /etc/sysconfig/i18n /etc/sysconfig/i18n.org
sudo vim /etc/sysconfig/i18n
/etc/sysconfig/i18n
1
2
3
LANG="ja_JP.utf-8"

SYSFONT="latarcyrheb-sun16"

サーバーに時間変更(日本時間)

1
2
sudo mv /etc/localtime /etc/localtime.org
sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

再度ログインで日本語化(dateで確認)

サーバーのホスト名を変更する

1
2
sudo cp /etc/sysconfig/network /etc/sysconfig/network.org
sudo vim /etc/sysconfig/network
/etc/sysconfig/network
1
2
3
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=sample.abgata.org

hostsの設定

1
2
sudo cp /etc/hosts /etc/hosts.org
sudo vim /etc/hosts
/etc/hosts
1
127.0.0.1 sample.abgata.org localhost.localdomain

設定後はネットワークを再起動

1
sudo /etc/rc.d/init.d/network restart

ユーザーを追加

1
2
3
4
useradd myuser
passwd myuser

usermod -G wheel myuser

ユーザーにsudo権限を付与

1
2
3
cp /etc/sudoers /etc/sudoers.org

visudo
visudo
1
2
3
# %wheel ~~
# ↓
%wheel ~~

※一番最初のもの

sshの設定を変更

1
2
3
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org

vim /etc/ssh/sshd_config
/etc/ssh/sshd_config
1
2
3
4
Port YOUR_PORT_NUMBER
PasswordAuthentication yes
PermitRootLogin no
PubkeyAuthentication yes

sshdを再起動して設定を反映

1
service sshd restart

SSH接続してみる

1
ssh -p YOUR_PORT_NUMBER myuser@192.168.10.10

Iptablesの設定

設定ファイルを作成

1
vim /etc/sysconfig/iptables
/etc/sysconfig/iptables
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
*filter
:INPUT    DROP    [0:0]
:FORWARD  DROP    [0:0]
:OUTPUT   ACCEPT  [0:0]
:SERVICES -       [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4  -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -j SERVICES
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p udp --sport 123 --dport 123 -j ACCEPT

-A SERVICES -p tcp --dport 25 -j ACCEPT
-A SERVICES -p tcp --dport 110 -j ACCEPT
-A SERVICES -p tcp --dport 587 -j ACCEPT
-A SERVICES -p tcp --dport 80 -j ACCEPT
-A SERVICES -p tcp --dport 443 -j ACCEPT

-A INPUT -p udp -m udp --dport 137:138 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 139 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 445 -j ACCEPT


COMMIT

設定を反映

1
2
3
4
5
6
7
8

service iptables restart

iptables -L

chkconfig iptables on

chkconfig --list iptables

Node.jsをnodebrewでインストール

nodebrewをインストール

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
curl https://raw.github.com/hokaccha/nodebrew/master/nodebrew | perl - setup

# ユーザーディレクトリにインストールされるので、全ユーザーで利用する場合はノードユーザー作ってインストールして共通パス通すのがいいかも

useradd node

cd /home/node

chmod -R 777 /home/node

echo 'export PATH="/home/node/.nodebrew/current/bin:$PATH"'     >> /etc/profile.d/nodebrew.sh
# echo 'export PATH="/home/node/.nodebrew/current/bin:$PATH"'     >> /etc/profile.d/nodebrew.sh

source /etc/profile.d/nodebrew.sh

echo $PATH

# ユーザー権限でも実行したい場合は実行グループ作って登録すれば大丈夫。

nodeグループを作成

1
2
3
4
groupadd node
usermod -G wheel,node myuser
# usermod -G wheel,node,ruby myuser
groups myuser

.nodebrewの所有グループを変更

1
2
3
cd /home/node
chgrp -R node .nodebrew
chmod -R g+rwxX .nodebrew

/home/nodeへの閲覧権限がなかったのでグループをwheelに変更

1
sudo chgrp wheel /root

インストール可能なバージョンの確認

1
2
nodebrew ls-all
# 奇数バージョンは開発版、偶数バージョンが安定版らしい

インストール(バイナリからインストールしたほうが速い)

1
2
nodebrew install-binary v0.10.20
# インストールはユーザーディレクトリにされるっぽいのでノードユーザーでインストールする

利用するバージョンを変更

1
nodebrew use v0.10.20

現在のバージョンを確認

1
node -v

サーバーサンプル

1
2
3
4
5
6
7
8
var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello Node.js');
}).listen(8124);

console.log('Server running at http://localhost:8124');

Grape を Rails4で利用する場合の注意点

参考サイト

なんかいろいろとはまってしまったので備忘録

file pathを追加する

config/application.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
module TestApp
  class Application < Rails::Application
    ...
    config.paths.add "app/api", glob: "**/*.rb"
    config.autoload_paths += Dir["#{Rails.root}/app/api/*"]
    ...
  end
end
routes.rbにmountするコードを一行追加

TestApp::Application.routes.draw do
  mount TestAPI => 'api'
  ...
end

流れ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ rails new test-app
$ cd test-app
$ vi Gemfile
# + gem 'grape', :git => "https://github.com/intridea/grape.git"
$ bundle install
$ mkdir app/api
$ vi app/api/test_api.rb
$ vi app/api/api_v1.rb
$ mkdir app/api/v1
$ vi app/api/ping.rb
$ vi config/application.rb
$ vi config/routes.rb
$ bundle exec rails s
$ open http://localhost:3000/api/v1/hello
files
app/api/test_api.rb
1
2
3
class TestAPI < Grape::API
  mount API_V1
end
app/api/api_v1.rb

v1/以下のclassをmountする

1
2
3
4
class API_V1 < Grape::API
  prefix 'v1' # とりあえずprefixだけつけている
  mount V1::Ping
end
app/api/v1/ping.rb
1
2
3
4
5
6
7
8
9
module V1
  class Ping < Grape::API
    format :json

    get :hello do
      {hello: "world"}
    end
  end
end

ベースのクラスをモジュールで囲うと何故かサブクラス呼び出せない

不思議だ。

要調査

Node.jsのデーモン化ツールforeverをインストール

npmでグローバルにインストール

1
npm install -g forever

スクリプトを登録

1
forever start sample001.js

スクリプトを確認

1
forever list

スクリプトを止める

1
2
# listで確認して、[0]で登録されたスクリプトを止めたい場合
forever stop 0

フォルダを圧縮して自動バックアップするスクリプト

シェルスクリプトを作成

1
vim images_backup.sh
images_backup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/sh

# バックアップファイルを何日分残しておくか
period='+7'
# バックアップファイルを保存するディレクトリ
dirpath='/path/to/backup/images'

#バックアップ元フォルダ
backupfolder="/path/to/from"

# ファイル名を定義(※ファイル名で日付がわかるようにしておきます)
mydate=`date +%y%m%d%H%M%S`
filename="images_$mydate.tar.gz"
#backup実行
tar -zcvf $dirpath/$filename $backupfolder

# パーミッション変更
chmod 700 $dirpath/$filename

# 古いバックアップファイルを削除
find $dirpath -type f -daystart -mtime $period -exec rm {} \;

権限設定の変更

1
chmod 700 images_backup.sh