LoginSignup
20

More than 5 years have passed since last update.

VPSでCentOS7の初期設定と、Docker&Docker Composeのインストールまで

Last updated at Posted at 2017-03-09

VPSにインストールされたCentOS7の初期設定と、DockerとDocker Composeが動くところまでを自分用メモとして残しておきます。
ConoHa VPSを契約して操作していますが、さくらなど他のVPSでもだいたい一緒だと思います。

VPS契約してCentOS7をインストールする

ConoHaコントロールパネルを操作。CentOSの最新版をインストールしました。
2017年3月時点で、バージョンは7.3.1611

SSHでログインする

サーバーの設定をやっていきます。最初に設定したrootパスワードを入力してログイン。

$ ssh root@[VPSのIPアドレス]

作業用のユーザーを追加

rootで何でもかんでもやるのはまずいので、作業用のユーザーを作成します。
僕の名前にちなんでryoというユーザーを作成することにしよう。

// ユーザー作成
$ adduser ryo
// パスワードの設定
$ passwd ryo

rootになれるユーザーを限定する

suでrootになって作業することができますが、どのユーザーもrootになれたら困るので、wheelというグループに入っているユーザーしかrootになれないように設定します。

// ryoをwheelに追加
$ usermod -G wheel ryo
// 設定ファイルを開く
$ vim /etc/pam.d/su

// 下記のコメントアウトを解除する
#auth       required     pam_wheel.so use_uid
↓
auth       required     pam_wheel.so use_uid

ところで、いきなりvimがインストールされてたんですけど、CentOS7だから?ConoHaだから?分かりません。

一旦ログアウト

$ exit

ここからはローカルで作業します。

公開鍵と秘密鍵の作成と、VPSへ公開鍵の転送

サーバーをいじるたびにssh ryo@[VPSのIPアドレス]と打って、パスワードを入力するのは面倒だし、セキュリティ的にもよくありませんので、公開鍵と秘密鍵を作り、公開鍵認証でログインできるようにします。ついでにパスワードの入力ではログインできないようにしたりします。

// 公開鍵と秘密鍵の作成
$ ssh-keygen -t rsa

僕はconohavps_rsaという名前にしました。.sshconohavps_rsaconohavps_rsa.pubというファイルが生成されればオッケー。

// VPSに公開鍵を転送する
$ scp ~/.ssh/conohavps_rsa.pub ryo@[VPSのIPアドレス]:~

VPSの/home/ryo(ryoのホームディレクトリのトップ)にconohavps_rsa.pubが転送されました。

VPSに再度ログインする

またVPSにSSHログインして、VPS上で作業します。

$ ssh ryo@[VPSのIPアドレス]

公開鍵の設置

現在自分がいる場所は~/、つまり/home/ryoです。
ここに.sshディレクトリを作り、公開鍵を設置します。ついでにパーミッションも変更します。

// .sshディレクトリの作成
$ mkdir .ssh
// .sshディレクトリのパーミッションを変更
$ chmod 700 .ssh
// conohavps_rsa.pubを.sshに移動
$ mv conohavps_rsa.pub .ssh
// conohavps_rsa.pubのパーミッションも変更
$ chmod 600 .ssh/conohavps_rsa.pub

ちなみにパーミッションの700と600は、

  • 700: 自分だけが読み書きと実行ができる
  • 600: 自分だけが読み書きできる

です。

SSHの設定を変更

sshd_configという設定ファイルを変更します。

設定ファイルをいじる時はroot権限じゃないと基本的にダメなんですが、rootで作業すると、ryoに戻ることを忘れて危険なので、sudoを先頭につけてコマンドを実行していきます。

// SSHの設定ファイルを開く
$ sudo vim /etc/ssh/sshd_config
// 以下を探して変更して、保存

// rootでSSHログインできないようにする
PermitRootLogin no

// 鍵認証を有効化
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/conohavps_rsa.pub

// パスワード認証を無効化する
PasswordAuthentication no
// sshdを再起動
$ sudo systemctl restart sshd

CentOS6の時はservice sshd restartでいけたんですが、CentOS7になったら書き方が変わってました。

またログアウト

$ exit

ローカルのSSHの設定を変更する

またローカルで作業です。ssh conohavpsと打つだけで、パスワード不要でVPSにログインできるようにします。

// 設定ファイルを開く
$ vim ~/.ssh/config
// 以下を入力して、保存

Host conohavps
  HostName [VPSのIPアドレス]
  User ryo
  Port 22
  IdentityFile ~/.ssh/conohavps_rsa
  TCPKeepAlive yes
  IdentitiesOnly yes

早速SSHでログインしてみる

$ ssh conohavps

これでログインできればオッケーです。

秘密鍵なくしたらアカンで!!!!

ローカルに保存してある秘密鍵をなくすとVPSにログインできなくなり、VPSの再構築(初期化)をするはめになり、上記の設定が完全におしゃかになってしまうので、頑張って管理しましょう!
セキュリティ的にどうかはわからないけど、僕はDropboxにコピーしておきました。

iptablesのインストールと、firewalldの無効化

ファイアウォールであるiptablesの設定をしていきます。
CentOS7からfirewalldというものに変わったらしいですが、よく分からないので、CentOS6に引き続きiptablesを使っていきます。

// firewalldを停止
$ sudo systemctl stop firewalld
// firewalldの自動起動をオフ
$ sudo systemctl disable firewalld
// iptablesのインストール
$ sudo yum -y install iptables-services
// iptablesの起動
$ sudo systemctl start iptables
// iptablesの自動起動をオン
$ sudo systemctl enable iptables

iptablesの設定

ConoHa VPSだけど、さくらVPSの設定を参考にしてやっていきます。
iptablesの設定方法 – さくらのサポート情報

// データを持たないパケットの接続を破棄
$ sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

// SYNflood攻撃と思われる接続を破棄
$ sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

// ステルススキャンと思われる接続を破棄
$ iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

// ポートを開ける
// 今回は、ssh/http/httpsのポートを開けます
$ sudo iptables -A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
$ sudo iptables -A IN_public_allow -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
$ sudo iptables -A IN_public_allow -p tcp -m tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT

// 確立済みの通信を許可
$ sudo iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

// 許可した通信以外のサーバに受信するパケットを拒否し、サーバから送信するパケットを許可
$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT ACCEPT

上記が完了したら、設定を保存します。

// iptablesの設定を保存する
$ sudo service iptables save
// iptablesを再起動
$ sudo systemctl restart iptables

CentOSのシステムを最新にアップデート

CentOSを最新の状態にしておきます。

// 最新にする
$ sudo yum -y update

Dockerのインストール

DockerとDocker Composeをインストールしていきます。Dockerは自動起動の設定もしておきます。
Dockerはdocker-enginedocker-ioなどがありますが、公式ドキュメントにある通りにdocker-ce(Docker Community Edition)をインストールしてみようと思います。

Get Docker for CentOS - Docker Documentation

// yum-utilsをインストール
$ sudo yum install -y yum-utils
// リポジトリの追加
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
// yumパッケージのアップデート
$ sudo yum makecache fast
// Docker CEのインストール
$ sudo yum install docker-ce
// Docker起動
$ sudo service docker start
// 自動起動の設定
$ sudo systemctl enable docker

Docker Composeのインストール

Docker Composeは、下記を参考にしながらインストールしていきます。
Get Docker for CentOS - Docker Documentation

// Docker Composeのインストール
$ curl -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
// パーミッションの変更
$ chmod +x /usr/local/bin/docker-compose

その時のDockerのバージョンによってcurlのURLが変わってくるので、リンク先を参照するようにしましょう。

sudoなしでDockerを使う

Dockerをインストールしただけだと、sudoをつけないとコマンドが実行できません。
以下の公式ドキュメントを参考にしながらやっていきます。

Post-installation steps for Linux - Docker Documentation

// sudoつけないとこんな感じで実行できない
$ docker ps
↓
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

現在のグループ一覧からdockerという名前のものを抜き出してみます。

$ cat /etc/group | grep docker
↓
docker:x:991:

このdockerというグループにユーザーを追加すれば、sudoなしでDockerを使うことができるようになります。

// ryoというユーザーをdockerグループに追加
$ $ sudo usermod -aG docker ryo
// docker再起動
$ sudo systemctl restart docker

もう一回docker psを実行してみて、以下のように出力されればオッケーです。

// もう一回やってみる
$ docker ps
↓
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                      NAMES

以上

以上、CentOS7の初期設定と、DockerとDocker Composeのインストールでした。あとは別途ドメインの設定など。
CentOS6とCentOS7では、service/chkconfigsystemctlになっていたりと若干の違いがあるので、ググる時によく分からなくなったりして少し大変でした。

上記の作業は、こうしてまとめてしまうとそこまで大変でもないですが、できればここも自動化して設定をgit管理したいなぁと思うし、次はAnsible辺りを試してみたいと思います。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20