AB Lab

abgata20000 blog.

Epel、remiのリポジトリを導入

epel

ダウンロードサイトから最新版を取得

URL:

※ epel-releaseで検索する(執筆時点では、epel-release-6-8.noarch.rpm)

1
2
3
4
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm


rpm -Uvh epel-release-6-8.noarch.rpm

設定ファイルを変更

1
2
cp /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.org
vim /etc/yum.repos.d/epel.repo
/etc/yum.repos.d/epel.repo
1
2
3
enabled=0

# enabled=0で利用する

remi

ダウンロードサイトから最新版を取得

URL:

※centosで検索

1
2
3
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

rpm -Uvh remi-release-6.rpm

remiはデフォルトで設定がenabled=0なので設定ファイルは変更しない

Apache Php Mysqlをインストール(yum)

apache

1
2
3
4
sudo yum install httpd
sudo chkconfig httpd on
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
vim /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf
1
2
3
4
5
6
ServerTokens Prod
ServerSignature Off
Options Indexes → Options -Indexes FollowSymLinks
※var/www/html内のもの
ServerName www.example.com:80
NameVirtualHost *:80

設定を反映

1
2
3
sudo service httpd configtest
sudo service httpd start
chkconfig httpd on

※ヴァーチャルホストの設定を別ファイルに記載でもOK

1
2
cd /etc/httpd/conf.d
vim vhost.conf

バーチャルホスト用にフォルダを作成

1
mkdir -p /var/www/vhosts/default/public

php

1
2
3
4
yum install -y php php-devel php-mysql php-mbstring php-gd php-pear httpd-devel
php -v
cp /etc/php.ini /etc/php.ini.org
vim /etc/php.ini
/etc/php.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
error_log = /var/log/php.log
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
display_errors = On
mbstring.language = Japanese
expose_php = Off
date.timezone = Asia/Tokyo
max_execution_time = 300
magic_quotes_gpc = Off
upload_max_filesize = 200M
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = pass
mbstring.detect_order = auto
;mbstring.substitute_character = none;

max_file_uploads = 100
post_max_size = 100M
upload_max_filesize 100M

設定を反映

1
service httpd restart

mysql

1
2
3
yum install -y mysql-server
cp /etc/my.cnf /etc/my.cnf.org
vim /etc/my.cnf
/etc/my.cnf
1
2
3
4
5
6
7
8
9
10
11
[mysqld]以下に追加
character_set_server=utf8
default-storage-engine=InnoDB
innodb_file_per_table
group_concat_max_len=10000000

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

設定を反映

1
2
service mysqld start
chkconfig mysqld on

mysqlの初期設定

1
2
mysql_secure_installation
mysql -u root -p

SElinuxの設定

動作状態の確認

1
2
3
4
5
getenforce
# > Enforcing
# Enforcing    SELinux機能は有効でアクセス制御も有効。
# permissive   SElinuxはwarningを出すが、アクセス制限は行われません
# disabled    SElinux機能・アクセス制御ともに無効

SELinuxを一時的に無効化

1
2
3
4
setenforce 0
# SELinuxを復活
setenforce 1
# SELinuxの完全無効化
1
vim /etc/sysconfig/selinux
/etc/sysconfig/selinux
1
2
3
# SELINUX=enforcing
#   ↓
SELINUX=disabled

設定ファイルを変更したら、あとはrebootすればOK

1
2
cp /etc/sysconfig/selinux /etc/sysconfig/selinux.org
vim /etc/sysconfig/selinux
/etc/sysconfig/selinux
1
2
3
#SELINUX=enforcing
#   ↓
SELINUX=disabled

最新版PHPをインストール

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

1
sudo yum info --enablerepo=remi php

※執筆時点では5.4.19

利用しそうな依存ライブラリも一緒にインストール

1
sudo yum --enablerepo=remi install -y php php-devel php-mysql php-mbstring php-gd php-pear httpd-devel

バージョンの確認

1
php -v

設定ファイルを変更

1
2
cp /etc/php.ini /etc/php.ini.org
vim /etc/php.ini
/etc/php.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
error_log = /var/log/php.log
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
display_errors = On
mbstring.language = Japanese
expose_php = Off
date.timezone = Asia/Tokyo
max_execution_time = 300
magic_quotes_gpc = Off
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = pass
mbstring.detect_order = auto
;mbstring.substitute_character = none;

max_file_uploads = 100
post_max_size = 100M
upload_max_filesize 100M

apache再起動で反映

1
service httpd restart

最新版MySQLをインストール

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

1
yum info --enablerepo=remi mysql mysql-server mysql-devel

※執筆時点では5.5.53

利用しそうな依存ライブラリも一緒にインストール

1
sudo yum install -y --enablerepo=remi mysql-server mysql-devel

設定ファイルの変更

1
2
cp /etc/my.cnf /etc/my.cnf.org
vim /etc/my.cnf
/etc/my.cnf
1
2
3
4
5
6
7
8
9
10
11
[mysqld]以下に追加
character_set_server=utf8
default-storage-engine=InnoDB
innodb_file_per_table
group_concat_max_len=10000000

[mysql]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

設定を反映

1
2
service mysqld start
chkconfig mysqld on

mysqlの初期設定

1
2
mysql_secure_installation
mysql -u root -p

Ruby_sinatra


layout: post date: 2013-12-22 00:00:00 title: Ruby sinatraでwebサーバー構築 category : Sinatra

tags : [Sinatra, Ruby]

プロジェクトの下準備

bundle init

設定ファイルを記述

vim Gemfile
Gemfile
# coding: utf-8
source "http://rubygems.org"

# sinatra本体と便利なプラグイン
gem "sinatra", require: "sinatra/base"
gem "sinatra-contrib", require: "sinatra/contrib/all"


# nodejsインストールしていない環境では必要
gem "execjs"
gem "therubyracer"

# 三種の神器
gem "haml"
gem "sass"
gem "coffee-script"

依存ファイルをインストール

bundle install --path vendor/bundle

config.ruを作成

vim config.ru
config.ru
require 'bundler'
Bundler.require

require './app'

run App

実行ファイル作成

vim app.rb
app.rb
class App < Sinatra::Base
  register Sinatra::Reloader

  get '/' do
    'Hello World'
  end
end

サーバー起動

bundle exec rackup -p 3000 -o sample.com

シナトラをユニコーンで起動

unicorn -D

Ruby_mysql


layout: post date: 2013-12-22 00:00:00 title: gemでmysqlライブラリをインストールする category : Ruby

tags : [Ruby, Gem, MySQL]

mysql-develがないとダメみたいなのでyumでインストール

sudo yum install -y mysql-devel

Gemでライブラリをインストール

gem install mysql -- --with-mysql-config=/usr/bin/mysql_config
gem install mysql2 -- --with-mysql-config=/usr/bin/mysql_config

gem install activerecord-mysql-adapter
gem install activerecord-mysql2-adapter

Casper.jsをインストール

参考サイト

Macの場合はhomebrewで一発

1
brew install phantomjs casperjs

Phantom.jsをインストール

1
2
3
wget https://phantomjs.googlecode.com/files/phantomjs-1.9.1-linux-x86_64.tar.bz2
tar jxfv phantomjs-1.9.1-linux-x86_64.tar.bz2
sudo cp phantomjs-1.9.1-linux-x86_64/bin/phantomjs  /usr/local/bin/

Casper.jsをインストール

1
2
3
4
wget https://github.com/n1k0/casperjs/archive/1.1-beta1.tar.gz
tar zxfv 1.1-beta1.tar.gz
cd casperjs-1.1-beta1/
sudo ln -sf `pwd`/bin/casperjs /usr/local/bin/casperjs

Googleのキャプチャを撮ってみる

1
2
3
4
5
6
casper = require("casper").create()
casper.start "http://google.com/", ->
          @capture "google.png"
          return

casper.run()

AngularJSの注意点

参考サイト

POSTでパラメータを送信する際は、設定が必要

1
2
3
4
5
6
@testApp.config ($httpProvider) ->
          $httpProvider.defaults.transformRequest = (data = {}) ->
      $.param(data);
          $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'

   @

そのままPOST送信するとパラメータがJSON文字列?で送信されるらしく、

うまくデータを送れないので通常のForm送信の方式に合わせる必要がある

ただ、 railsangularjs-rails-resource を使っていると大丈夫な模様

$resourceでPOST or PUT する際のURLパラメータの渡し方。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
url = '/api/action/:id'

model = $resource url, null ,
  get: {method: 'GET', isArray: false}
  post: {method: 'POST', isArray: false, params: {id: "@id"}
  put: {method: 'PUT', isArray: false, params: {id: "@id"}}
  delete: {method: 'DELETE', isArray: false}

param =
  id: 1
  name: 'myName'

model.put param, (res, e) ->
      console.log res

GET と DELETE は そのままで paramidaction/:id に反映されるが、 PUT と POST の場合は、モデルのメソッド作成の際に指定しておく必要がある模様

1
2
3
4
5
model = $resource url, {id: "@id"} ,
  get: {method: 'GET', isArray: false}
  post: {method: 'POST', isArray: false}
  put: {method: 'PUT', isArray: false}
  delete: {method: 'DELETE', isArray: false}

これでも大丈夫そう。

FTPサーバーの設定

参考サイト

FTPサーバー導入の経緯

最近は、GitもしくはSFTPでのファイルのやりとりが多く、

普段、FTPってあんまり使わないのでFTPサーバーをインストールしていなかったのだが、

クライアント様のサーバーでFTPを利用したいとの事だったので設定した。

折角なので、備忘録として記載しておくことに

vsftpd のインストール

1
2
3
4
5
sudo yum -y install vsftpd

sudo service vsftpd start

sudo chkconfig vsftpd on

で、後はポート開放して完了。

結構あっさりですね。

ただ、このまま使うにはあまりにも無防備すぎるのと、

今回のクライアント様のご要望は、SSL通信での利用を想定との事だったため、もう少し設定する。

一般設定

1
sudo vim /etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
anonymous_enable=NO
# Anonymous FTP接続の禁止。

local_enable=YES
# ローカルユーザのログインを許可。

write_enable=YES
# 書き込み(Upload)許可。公開専用の場合はNOにすると書き込み禁止にできる。

local_umask=022
# ローカルユーザのumask値。

listen_port=10021
# FTP制御チャンネルの接続待ち受けポートの指定。
# デフォルトポートの利用には抵抗がある

connect_from_port_20=NO
# Activeモード時のデータコネクションポートの指定。
# 今回はpasv接続にするのでNO。

nopriv_user=ftp
# vsftpが利用する非特権ユーザ名の指定を ftp に指定。

chroot_local_user=YES
# ローカルユーザの操作範囲を自身のホームディレクトリ内のみに行動を制限(chroot)する。

chroot_list_enable=NO
# 「chroot_local_user=YES」とした場合にchrootしない例外ユーザを許可しないに指定。
# YESにした場合「chroot_list_file=/etc/vsftpd.chroot_list」を登録

ftpd_banner=Welcome to blah FTP service.
# クライアントソフト名が表示されるのを変更

SSL関係設定

1
sudo vim /etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
rsa_cert_file=/etc/ssl/certs/vsftp.pem
# vsftpd用の証明書ファイルの指定。SSL証明書の発行方法は省略

rsa_private_key_file=/etc/ssl/certs/vsftp.key
# vsftpd用の秘密鍵ファイル

rsa_cert_file=/etc/ssl/certs/ftp.pem
# vsftpd用の証明書ファイルの指定。SSL証明書の発行方法は省略

use_localtime=YES
# 時刻の扱いをローカルタイムにする。

userlist_enable=YES
# ユーザリストによる規制をかける。

userlist_deny=YES
# ユーザリストをログイン不可ユーザの一覧とする。(NOだとログイン可のユーザ一覧になる)

userlist_file=/etc/ftpusers
# ユーザリストの指定。

pasv_min_port=30000
# Pasv接続で外部からのコネクション利用を許可するポート範囲の最小値。

pasv_max_port=30100
# Pasv接続で外部からのコネクション利用を許可するポート範囲の最大値。

ssl_enable=YES
# SSL接続の有効化

ssl_tlsv1=YES
# vsftpd はSSLのプロトコルとして、SSL v2(ssl_sslv2)、SSL v3(ssl_sslv3)、TLS v1(ssl_tlsv1)の3種類をサポートしているが、デフォルトはTLS v1であり、多くの場合、この設定で問題ないのでデフォルトのままとする。

force_local_logins_ssl=YES
# 制御チャンネル(ログイン等)でSSL接続しか許可しない。

force_local_data_ssl=YES
# データチャンネルでSSL接続しか許可しない。

再起動で反映

1
sudo service vsftpd restart

FTPS接続の種類

【FTP over SSL には Explicit、Implicitの2種類がある】

違いはコネクションを張る際にクライアントが明示的にSSL化を要求するか、暗黙でSSL化するか。

Explicit

Conntct直後にSSLに切り替える要求をクライアントから明示的に送信する(ここは平文)。

この際にポートは平文時と同じポート21等を使う(参考:RFC2228)。 その後Login及びデータはSSL化される。

従来の平文運用との併用は比較的し易そう。別途SSL用にポートも使わないので。

ただしSSL切り替えのオーバーヘッドが少しあるが余程のトラフィックがなければ気にならない程度だとは思う。

Implicit

Conntct直後以降クライアント/サーバは自動的に暗黙でSSL化する。 この際ポート990などのSSL用に設けたポートを使う。

SSLでしか接続させない仕様。

ポート990はクライアント/サーバの設定次第なので変更できるだろうが、このポートを使って従来の平文接続はできないのが大きな違いか。

いずれの場合もデータのセキュアさには差は無いと思う。