takahoyo.netを構築した
最近、自分のプロフィールページのようなものを何となく作った。Webサーバだけど今まで自分がやって来なかったことを色々やったので、何をやったかをまとめようと思う。
ちなみに作ったページはこちら
takahoyo.net
サーバの調達
まずは、サーバから。と、いっても自分の家にサーバマシン本体があるという訳ではなく、VPS(Virtual Private Server)を借りた。
やっぱりハードの調達とか運用とか少し手間なので、手軽に始めるにはVPSは良い。
今回は#ssmjp 2014/10の時に、ConoHaの3,000円クーポンを頂いたのでConoHaを使ってみた。
ConoHa - 1分ではじめる、クラウドのようなVPS。ひと月930円から。
ConoHaは、クラウドのようなVPSということでワンクリックで簡単にVPSを始められる。コントロールパネルも個人的に好きなデザインで良い。
今回は以下表のようなスペックのVPSを作った。
CPU | メモリ | HDD | OS |
---|---|---|---|
2コア | 1024MB | 100GB | CentOS7-1406(64bit) |
ちなみに、IPアドレスはv4が1個、v6が16個貰える。v6そんなに要らな(ry
SSHの設定が完了するまでは、ConoHaコントロールパネルから操作を行った。
ユーザの作成
VPSを作った時はrootアカウントしかないので、一般のユーザを作った。そうしないと、sshでrootログインを許可しないといけなくなるので。
例えば、hogeというユーザを作ってパスワードを付けたい場合は以下のようになる。
# adduser hoge # passwd hoge Changing password for user hoge. New password: Retype new password: passwd: all authentication tokens updated successfully.
SSHの設定
今回は、公開鍵認証、rootログイン禁止の設定を変えた。
サーバ側
まず秘密鍵と公開鍵を作成する。
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/hoge/.ssh/id_rsa): Created directory '/home/hoge/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/hoge/.ssh/id_rsa. Your public key has been saved in /home/hoge/.ssh/id_rsa.pub. The key fingerprint is: 15:89:64:4c:09:fc:93:bb:0c:e6:4a:20:da:6e:8d:cc hoge@takahoyo.net The key's randomart image is: +--[ RSA 2048]----+ | ..=+o.. | | ..+ .. | | . .. | | +. | |. . So | |.o . o . | |.o.o.o o . | | .E.. . o | | .. .. | +-----------------+ $ ls ~/.ssh id_rsa id_rsa.pub $ chmod 600 id_rsa.pub
このコマンドを実行すると、~/.sshにid_rsaという秘密鍵ファイルとid_rsa.pubという公開鍵ファイルが作成される。
秘密鍵ファイルはクライアント側で、公開鍵ファイルはサーバ側でログイン時に使用。公開鍵のファイルはパーミッションを変更しておく。
# rootログインの禁止 PermitRootLogin no # 公開鍵認証の設定 RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/id_rsa.pub
sshdを再起動する。
# systemctl restart sshd
参考:CentOS で公開鍵認証による SSH ログイン設定を行う | Webセキュリティの小部屋
また、クライアント側で公開鍵認証が行えることを確認し公開鍵認証のみにしたい場合は、sshd-configの以下の設定を変更する。
PasswordAuthentication no
もちろん、sshdの再起動を忘れずに。
# systemctl restart sshd
クライアント側
ssh, scpコマンドが使える場合
scpを利用して秘密鍵ファイルをサーバからダウンロードする。
$ scp hoge@takahoyo.net:~/.ssh/id_rsa ~/.ssh/
sshコマンドで接続する場合、~/.sshに秘密鍵ファイルを保存して、以下のコマンドを実行するとホスト名のホストにSSH接続できる。
$ ssh -i ~/.ssh/id_rsa hoge@takahoyo.net
ちなみに、~/.ssh/configというファイルを作って設定を保存しておくと、Hostに設定した名前で接続できるので便利。
~/.ssh/config
Host test HostName takahoyo.net Port 22 Protocol 2 User hoge IdentityFile ~/.ssh/id_rsa #秘密鍵ファイルのパス
$ ssh test
参考:~/.ssh/config で簡単に複数ホストへのSSH接続を管理する - すぱぶろ
補足
Cygwinでsshをする場合、以下のようなエラーが出る場合がある。
$ ssh -i ~/.ssh/id_rsa hoge@takahoyo.net @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0660 for '/home/hoge/.ssh/id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: /home/hoge/.ssh/id_rsa Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
この場合は、以下のサイトを参考にしてid_rsaのパーミッションを変えると、接続できるようになる。
tIV.net: Cygwin: Permissions 0660 for '~/.ssh/id_rsa' are too open.
Nginxのインストール、設定
Webサーバは、Apache HTTP Serverを使用することが多いと思うが、今回は最近流行りのNginxを使用した。
まず、Nginxリポジトリを設定し、yumを使ってインストールを行う。
$ rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm $ yum -y install nginx
次に、/etc/nginx/nginx.confの編集と/etc/nginx/conf.d/server.confというファイルを作成する。
/etc/nginx/nginx.conf
user nginx nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; # gzip on; include /etc/nginx/conf.d/*.conf; server_tokens off; #レスポンスヘッダにバージョンを含めない }
/etc/nginx/conf.d/server.conf
server { listen 80; server_name takahoyo.net; location / { root /var/www/html; index index.html index.htm; } }
設定ファイルを編集したら、Nginxを起動する。
systemctl enable nginx.service systemctl start nginx.service
参考 : CentOS 7 でLAMP(Nginx+MariaDB(MySQL)+PHP)インストールからWordPressを動かすまで(Nginx編) | レンタルサーバー・自宅サーバー設定・構築のヒント
firewalldの設定
CentOS 7を使ってるので、iptablesではなくfirewalldの設定をfirewall-cmdを使って変更。
サーバをリモートから操作するためにsshで利用するポート、Webサーバとして使うためにhttpのサービスを開ける。
デフォルトでは、ゾーンがpublicになっていてsshサービスが使えるが、今回は不正なアクセスを遮断するために、自分が利用しているIPアドレス以外からSSHへの接続は遮断する。
※自分が利用しているIPアドレスは、sshでアクセス後に/var/log/secureファイルを見ると記録されている。
※w.x.y.zは自分のIPアドレス
# firewall-cmd --permanent --add-service=http --zone=public # firewall-cmd --permanent --remove-service=ssh --zone=public # firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="w.x.y.z" port port="22" protocol="tcp" accept' --zone=public
firewall-cmdで--permanentを指定した場合、firewalldのサービスをreloadもしくはrestartする必要があるので以下のコマンドのいずれかを実行する。
# systemctl reload firewalld.service
もしくは
# systemctl restart firewalld.service
参考
Webページの作成
今回はWebページを作るために、Bootstrapというフレームワークを利用した。
Bootstrap · The world's most popular mobile-first and responsive front-end framework.
cssとかjsを弄らなくても、htmlファイルでclassに指定するだけで、いろいろな機能を使える。レスポンシブデザイン対応なので、画面サイズに応じてサイトを見やすくしてくれる。
Bootstrapの公式サイトから、コンパイル済みのファイルをダウンロード。
Getting started · Bootstrap
ダウンロードして展開するとcss, js, fontsのディレクトリが出来るので、これを/var/www/html/に置く。
そして、index.htmlを作成して、css, jsを読み込む。
takahoyo.netで使ってるコンポーネントは、navbar, jumbotron, collapseと呼ばれるものである。
navbarはページ上部にあるナビゲーションで、collapseは俗に言うアコーディオン。
navbarもしくはcollapseの見たい項目を押すと、アコーディオンが開く仕組みとなっている。
特にカスタマイズはしていないから、まあ既視感がw
bootstrap関連は以下のサイトを参考に進めたので、この辺の話はリンク先を参照すると良いかも(汗)
感想
Webサーバの基盤的な部分(サーバの調達 ~ nginxのインストール、設定くらい)までは比較的すぐ出来たけど、WebページでHTMLを書くとなると少し時間がかかってしまった。Webの話をもっと勉強したいなと思った今回の構築でした。