さくら VPS の CentOS 上で PHP や Ruby (ついでに Rails も) を導入するまで

基本的にはここが死ぬほど役立つ。 あとは詳細の部分が欠けているので、ここを見ながらやればサーバーの大体の設定はできる

あと、yum を使わない手法を提案してる記事があったので、次回はこっちもやってみたい。

===ユーザー設定===
―初期セキュリティ設定―
rootのままだと危ない(なんでもし放題なので)ので他のユーザーを作成する。

# adduser k_fujiyoshi
# passwd k_fujiyoshi

―セキュリティ対策―
※このあたりからウィンドウを二つ起動しておきましょう。いざというときにセキュリティ設定ミスると全く入れなくなるので。
ポート設定をしておく。番号はなんでもいいらしいが、ハックの際には10000番までがよく攻撃されるらしいので、それ以上がいいと思われる。

# vi /etc/ssh/sshd_config
Port22 ⇒ Port『好きな番号』に書き換え

# /etc/init.d/sshd restart

秘密鍵、公開鍵を作る。Terminalならssh-keygenコマンドがあるので、それで生成。
Winの場合はPuttygenを用いて生成。
公開鍵の方をauthorized_keysという名前でサーバーにアップ、もしくは設置。
ログインするユーザー権限でやらないと二度とログインできなくなります。

$ cd ~
$ mkdir .ssh
$ mv ???.pub /.ssh/authorized_keys
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

公開認証鍵ログインができることを確認する。

―個人設定―
やっぱりsudoとbashvimは設定しておくと動きやすさが違うので、ここらで設定しておく。
今後のためのyumの設定もしておく。
(XXXXXXXXX=ユーザ名)

# yum update
# yum list installed | grep sudo
 ⇒インストールされてなかったら、yum install sudoをしておく

# visudo
  ユーザ名ALL=(ALL) ALL

これが終わったら自分のログインの際に秘密鍵を用いるようにし、公開認証鍵でログインできるか確認。
ログインの処理を変更します。要別ウィンドウでのログイン状態キープ。

# vim /etc/ssh/sshd_config
  PermitRootLogin no
  PasswordAuthentication no
  PermitEmptyPasswords no

# /etc/init.d/sshd restart
(# service sshd restartでも動くらしいので好きな方で。)

$PATH をきちんと張る。

$ vi ~/.bash_profile
  PATH=$PATH:$HOME/bin
  ⇒ 以下のように書き換え
  PATH=$PATH:$HOME/bin
  PATH=$PATH:/sbin
  PATH=$PATH:/usr/bin
  PATH=$PATH:/usr/local/bin

$ source ~/.bash_profile
$ vi ~/.bashrc
  # User specific aliases and functions
  alias rm='rm -i'
  alias cp='cp -i'
  alias mv='mv -i'
  alias ll='ls -l'
  alias la='ls -al'
  alias vi='vim'

  # Source global definitions
  if [ -f /etc/bashrc ]; then
  . /etc/bashrc
  fi

$ source .bashrc
# yum -y install vim-enhanced
  (vimrcは個人でお好きに書いてください。)
  :set encoding=utf-8
  :set fileencodings=iso-2022-jp,jjjjjjutf-8,cp932,euc-jp,default,latin
  だけは書いておいた方がいいかも。

―ファイアーウォールの設定―
一応確認。
なかったらインストールしましょう。

$ yum list installed | grep iptables
# vi /etc/sysconfig/iptables
  *filter
  :INPUTACCEPT [0:0]
  :FORWARDACCEPT [0:0]
  :OUTPUTACCEPT [0:0]
  :RH-Firewall-1-INPUT - [0:0]

  -A INPUT -j RH-Firewall-1-INPUT
  -A FORWARD -j RH-Firewall-1-INPUT
  -A RH-Firewall-1-INPUT -i lo -j ACCEPT
  -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
  -A RH-Firewall-1-INPUT -p 50 -j ACCEPT
  -A RH-Firewall-1-INPUT -p 51 -j ACCEPT
  -A RH-Firewall-1-INPUT -pkkk udp --dport 5353 -d 224.0.0.251 -j ACCEPT
  -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
  -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
  -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

  # SSH, HTTP, FTP1, FTP2, MySQL
  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport (自分でしていたPort番号) -j ACCEPT
  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

  -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

  COMMIT

# /etc/rc.d/init.d/iptables restart

―デーモンの設定―
いらない機能がたくさんあるので、それをOffに。

# /sbin/chkconfig auditd off
# /sbin/chkconfig autofs off
# /sbin/chkconfig avahi-daemon off
# /sbin/chkconfig bluetooth off
# /sbin/chkconfig cups off
# /sbin/chkconfig firstboot off
# /sbin/chkconfig gpm off
# /sbin/chkconfig haldaemon off
# /sbin/chkconfig hidd off
# /sbin/chkconfig isdn off
# /sbin/chkconfig kudzu off
# /sbin/chkconfig lvm2-monitor off
# /sbin/chkconfig mcstrans off
# /sbin/chkconfig mdmonitor off
# /sbin/chkconfig messagebus off
# /sbin/chkconfig netfs off
# /sbin/chkconfig nfslock off
# /sbin/chkconfig pcscd off
# /sbin/chkconfig portmap off
# /sbin/chkconfig rawdevices off
# /sbin/chkconfig restorecond off
# /sbin/chkconfig rpcgssd off
# /sbin/chkconfig rpcidmapd off
# /sbin/chkconfig smartd off
# /sbin/chkconfig xfs off
# /sbin/chkconfig yum-updatesd off

===Apache導入===

$ rpm -qa httpd
 ⇒なければ入れよう
# yum -y install httpd
# rpm -qa httpd
 ⇒表示されればOK
# httpd -v
 ⇒バージョン確認
# vi /etc/httpd/conf/httpd.conf
  44行目
  ServerTokens Prod
  265行目
  ServerName (IPアドレスもしくはホスト名)
  320行目
  Options -Indexes FollowSymLinks
  524行目
  ServerSignature Off

# apachectl configtest
 ⇒Syntax OKなら大丈夫
# service httpd start
# chkconfig httpd on
# chkconfig --list httpd
 ⇒ONになっていればOK

…ついでに

# vi /etc/sysconfig/i18n
  LANG="ja_JP.UTF-8"
  SYSFONT="latarcyrheb-sun16"

に書き換え。これで再ログイン後にCentOSの文字が日本語になるはず。
(注:この時WinのPuttyなどでログインしている場合は使用言語を日本語に変更しないと死にたくなるので変更しておきましょう)

===PHP導入===
悲劇的なことに、CentOSyum では PHP を入れようとすると 5.1 をインストールしてしまうそうなので(笑)、Remi レポジトリを使用した。
新しいバージョンについては要検索。

# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
# wget http://rpms.famillecollet.com/el5.i386/remi-release-5-8.el5.remi.noarch.rpm
# rpm -Uvh remi-release-5-8.el5.remi.noarch.rpm epel-release-5-4.noarch.rpm
# vi /etc/yum.repos.d/remi.repo
  enabled=0
 ⇒  enabled=1
# yum install php-devel php-mbstring php-mysql php-gd php-mcrypt php-pear
# wget http://sourceforge.net/projects/eaccelerator/files/eaccelerator/eAccelerator%200.9.6.1/eaccelerator-0.9.6.1.zip/download
# unzip eaccelerator-0.9.6.1.zip
# cd eaccelerator-0.9.6.1
# phpize
# ./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config
# make
# make install
# vi /etc/php.ini
  zend_extension="/usr/lib64/php/modules/eaccelerator.so"
  eaccelerator.shm_size = "32"
  eaccelerator.cache_dir = "/var/cache/eaccelerator"
  eaccelerator.enable = "1"
  eaccelerator.optimizer = "1"
  eaccelerator.check_mtime = "1"
  eaccelerator.debug = "0"
  eaccelerator.filter = ""
  eaccelerator.shm_max = "0"
  eaccelerator.shm_ttl = "0"
  eaccelerator.shm_prune_period = "0"
  eaccelerator.shm_only = "0"
  eaccelerator.compress = "1"
  eaccelerator.compress_level = "9"
  eaccelerator.keys = "shm_and_disk"
  eaccelerator.sessions = "shm_and_disk"
  eaccelerator.content = "shm_and_disk"

# /etc/rc.d/init.d/httpd restart

=== MySQL 導入===

# yum install mysql-server
# vi /etc/my.cnf

以下は僕の場合です。人によって微妙に違ったりするみたいです。(サーバー設定絡みがあるので)

  [mysqld]
  # Settings user and group are ignored when systemd is used (fedora >= 15).
  # If you need to run mysqld under different user or group,
  # customize your systemd unit file for mysqld according to the
  # instructions in http://fedoraproject.org/wiki/Systemd
  user=mysql
  #clients
  old_passwords=1

  # character-set
  #default-character-set=utf8
  skip-character-set-client-handshake

  datadir=/var/lib/mysql
  socket=/var/lib/mysql/mysql.sock

  # Disabling symbolic-links is recommended to prevent assorted security risks
  symbolic-links=0

  # Semisynchronous Replication
  # http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html
  # uncomment next line on MASTER
  ;plugin-load=rpl_semi_sync_master=semisync_master.so
  # uncomment next line on SLAVE
  ;plugin-load=rpl_semi_sync_slave=semisync_slave.so

  # Others options for Semisynchronous Replication
  ;rpl_semi_sync_master_enabled=1
  ;rpl_semi_sync_master_timeout=10
  ;rpl_semi_sync_slave_enabled=1

  # http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html
  ;performance_schema

  [client]
  default-character-set=utf8

  [mysql]
  default-character-set=utf8

  [mysqldump]
  default-character-set=utf8

  [mysqld_safe]
  log-error=/var/log/mysqld.log
  pid-file=/var/run/mysqld/mysqld.pid

# chkconfig mysqld on
# service mysqld start
# mysqladmin -u root password '(使用したいパスワード)'
# mysql -u root -p
  > DROP DATABASE test;
  > USE mysql;
  > DELETE FROM user WHERE user = '' OR ( user = 'root' AND host != 'localhost' );
  >GRANT USAGE ON * . * TO 'ユーザ名'@'localhost' IDENTIFIED BY 'パスワード' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
  >GRANT ALL PRIVILEGES ON `ユーザ名\_%` . * TO 'ユーザ名'@'localhost';
  >FLUSH PRIVILEGES;
  > quit

$ mysql -u k_fujiyoshi -p
  > CREATE DATABASE `好きなdb名` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

⇒ これで k_fujiyoshi 用の MySQL アカウントとDB設定完了

=== public_html 公開===

# vi /etc/httpd/conf/httpd.conf
  355行目
  UserDir disable⇒#UserDir disable
  362行目
  #UserDir public_html⇒UserDir public_html

$ mkdir public_html
$ chmod 755 public_html
$ chmod 711 ../k_fujiyoshi
# /etc/init.d/httpd restart

⇒ これで http://***/~k_fujiyoshi/ でアクセスできるようになる

参考リンク

===S creen の導入===

# yum install screen
$ vi .screenrc

これは自由に書いていいと思います。

===ruby on rails3 の導入===
ruby のインストール―

# cd /usr/local/src
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p290.tar.gz
# tar xvzf ruby-1.9.2-p180.tar.gz
# cd ruby-1.9.2-p290.tar.gz
# ./configure --prefix=/usr
# make
# make install
# ruby -v
  ⇒ ちゃんと表示されればインストール完了

― gem のインストール―

# cd /usr/local/src
# wget http://rubyforge.org/frs/download.php/74619/rubygems-1.7.2.tgz
# tar xvzf rubygems-1.7.2.tgz
# cd rubygems-1.7.2
# ruby setup.rb
# gem -v
  ⇒ ちゃんと表示されればインストール完了

― zlib-devel のインストールー

# cd /usr/local/src
# yum install zlib-devel
# cd ruby-1.9.1-p429/ext/zlib
# ruby extconf.rb --with-zlib-include=/usr/include -with-zlib-lib/usr/lib
# make
# make install

rails のインストールー

# cd /usr/local/src
# gem install rails --include-dependencies
# gem install rails --pre
# rails -v
  ⇒ ちゃんと表示されればインストール完了

sqlite のインストール―
※もちろん Ruby-MySQL のような Gem とかもあるし、Mysql でもいいのだけれど、
普通 Ruby では Sqlite を使うので、入れておくといいかも。参考文献の数も桁違いだしね。

# wget http://www.sqlite.org/sqlite-autoconf-3070602.tar.gz
# tar xvzf sqlite-autoconf-3070602
# cd sqlite-autoconf-3070602
# ./configure
# make
# make install
# gem install sqlite3-ruby -- --with-sqlite3-include=/usr/local/include --with-sqlite3-lib=/usr/local/include

― sqlite3_initialize のエラー対策―

# vi ~/.bashrc
  一番下に
  ・
  ・
  ・
  LD_LIBRARY_PATH=/usr/local/lib
  export LD_LIBRARY_PATH

# source ~/.bashrc

⇒ 設定完了

―テスト―

$ rails new demo
$ rails server

⇒ 動いたら成功

参考リンク

※僕の場合ここでエラーが出たのでその対策も。
jquery-rails がなくて rails new demo の際にエラーが出ていたため、インストールしようとしてみたところ今度は、

ArgumentError: invalid byte sequence in US-ASCII

で引っかかった。そこで、

# export LANG=en_US.UTF-8
# export LC_ALL=en_US.UTF-8
# gem install jquery-rails -v '1.0.19'

としてエラー解決。

参考リンク