【Linux】 CentOS でサーバー構築

前提条件

  • SSH がインストールされていること

rootユーザーでログインする

[local]$ ssh root@[ホスト名]

rootパスワードを変更する

  • 初期パスワードを変更する
# passwd

一般ユーザーを作成する

$ useradd [ユーザー名]
$ passwd [ユーザー名]
$ usermod -G wheel [ユーザー名]

sudoの設定

$ visudo
# %wheel        ALL=(ALL)       ALL
↓ アンコメント
%wheel        ALL=(ALL)       ALL

SSHの設定

先ほど作成したユーザーでサーバーへログインする

[local]$ ssh [ユーザー名]@[ホスト名]

鍵を置くディレクトリを作成する

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

ローカルマシンでRSA鍵を作成し、公開鍵をサーバーへ送る

[local]$ ssh-keygen
[local]$ scp ~/.ssh/id_rsa.pub [ユーザー名]@[ホスト名]:~/.ssh

サーバー側の公開鍵のファイル名とパーミッションを変更する

$ cd ~/.ssh
$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys

ローカルマシンから接続確認する

$ ssh [ユーザー名]@[ホスト名]

これで鍵を使ってログインすることができる。(パスワード不要)

SSH設定変更

# /etc/ssh/sshd_config

Port [ポート番号] #ポート番号変更
PermitRootLogin no #rootによるログインを禁止
PubkeyAuthentication yes #公開鍵認証を許可
AuthorizedKeysFile      .ssh/authorized_keys #認証キーを配置するパス
PermitEmptyPasswords no #空のパスワードでのログインを禁止
PasswordAuthentication no #パスワードによるログインを禁止
AllowUsers [ユーザー名] #追加したユーザーでSSH接続できるようにする
UsePAM no # 「PasswordAuthentication no」にした場合はこちらもnoにする

SSHの再起動

$ sudo service sshd restart

ローカルマシンにログイン情報を設定しておくと便利

# ~/.ssh/config

Host hoge
  HostName [ホスト名]
  User [ユーザー名]
  Port [ポート番号]
$ ssh hoge

でログインできるようになる。

iptablesの設定(ファイアーウォールの設定)

ファイルを新規作成し以下内容を記述(解放するポートは適宜修正すること)

# /etc/sysconfig/iptables

*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [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 -p 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, MySQL
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -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 3306  -j ACCEPT

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

COMMIT

iptablesを再起動

$ sudo service iptables restart

パッケージのアップデート

$ sudo yum -y update

「Error: File /var/cache/yum/x86_64/6/epel/metalink.xml is not XML」というエラーが発生した場合

$ sudo yum clean all

MySQLのインストール

remiリポジトリを登録する

参考: http://kzy52.com/entry/2014/07/10/064230

remiリポジトリを利用するにはepelリポジトリが必要なので先に入れる。

Centos 5.x の場合

$ sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
$ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

Centos 6.x の場合

$ sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

デフォルトでリポジトリを使用しないよう無効にする

  • /etc/yum.repos.d/remi.repo
  • /etc/yum.repos.d/epel.repo

上記ファイルのenabled=1となっている箇所をenabled=0に書き換えます。

インストール

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

MySQLの設定

$ sudo cp /etc/my.cnf /etc/my.cnf.org
# /etc/my.cnf

[mysqld]
character-set-server = utf8
skip-character-set-client-handshake

[mysql]
default-character-set = utf8

MySQLの起動

$ sudo service mysqld start

MySQLの自動起動設定

$ sudo chkconfig mysqld on

MySQLの初期設定

$ sudo mysql_secure_installation

Enter current password for root (enter for none): Enter
Set root password?(rootパスワード設定する?) [Y/n] Y
Remove anonymous users?(匿名ユーザー削除する?) [Y/n] Y
Disallow root login remotely?(リモートからのrootログインを拒否する?) [Y/n] Y
Remove test database and access to it?(テストDB削除する?) [Y/n] Y
Reload privilege tables now?(設定した内容を反映するか?) [Y/n] Y

Apacheのインストール

インストールする

$ sudo yum -y install httpd

Apacheの設定

$ sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
# /etc/httpd/conf/httpd.conf

# ユーザーとグループの設定
User apache
Group apache

# Web サーバーにアクセスしたクライアントに返す情報
# レスポンスヘッダには「Server: Apache」という名前しか返されない
ServerTokens Prod

# エラーページなどに出力されるサーバー情報
ServerSignature Off

設定をチェック

$ sudo apachectl configtest

Apacheを起動する

$ sudo service httpd start

Apacheの自動起動設定

$ sudo chkconfig httpd on

アクセス確認

http://[ホスト名]

nginxのインストール

インストールする

$ sudo yum -y install nginx

nginxを起動する

$ sudo service nginx start

nginxが自動起動するように設定する

$ sudo chkconfig nginx on

Rubyのインストール

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

$ sudo yum -y install openssl-devel readline-devel zlib-devel

rbenvのインストール

$ cd
$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source .bash_profile

ruby-buildのインストール

$ mkdir ~/.rbenv/plugins
$ cd ~/.rbenv/plugins
$ git clone git://github.com/sstephenson/ruby-build.git

インストール可能なRubyのバージョンを調べる

$ rbenv install -l

Rubyをインストールする

  • バージョンは適宜置き換えてください。
$ rbenv install 2.1.2
$ rbenv global 2.1.2
$ rbenv rehash

Redmineのインストール

以下記事を参考にしてください。

Nginx + Unicorn で Redmine をインストールする