計算研究会ではVPSサーバーを借りて、ホームページの運用などを行っています。そのサーバーの運用、構築の能力を後輩に引き継いでいくために、半年に一度サーバーの新規作成、環境構築を行うことにしています。これをサークル内では式年遷宮と呼んでいて、6/3に行いました。次回以降の式年遷宮の参考のために、記録を記事にしていこうと思います。
内部向け資料です。
今回選択したOSはUbuntu 16.04です。OSインストールはConoHa VPS側の機能で行いました。
1. ユーザーの作成
まず、サークルの会員のユーザーアカウントの作成をしました。
useradd
コマンドを使用しました。
使用したオプションは以下の通りです。
- -m : ホームディレクトリを作成する
- -s : ログインシェルを指定する
- -g : ユーザーの主グループを指定する
- -u : ユーザーIDを指定する
アカウント名はアルファベット1文字 + 数字6桁で構成されており、アカウント名の数字6桁をユーザーIDに設定したため、以下のシェルスクリプトでアカウントの作成を行いました。
#!/bin/bash
username=$1
userid=${username:1:6}
useradd -m -s /bin/bash -g 2000 -u $userid $username
本サーバーでは全ユーザーがCSMというグループに所属させており、それに加えて管理者にはsudoに所属させています。
group add
コマンドにおいて、-g
オプションを使用することで、グループIDを指定してグループを作成することができます。
具体的には、
groupadd -g 2000 CSM
でCSMというグループを作成しています。そのため先ほどのシェルスクリプトではグループID 2000を指定しています。
ユーザー作成後、管理者のユーザーにはusermod -aG sudo <ユーザー名>
としています。
オプション-aG
により、新たにサブグループを追加できます。
2. ファイルの移動
つぎに、移転前のサーバーから移転後へのファイルの移動です。
今回はホームディレクトリのみの移動で、ファイルサイズも数GB程度だったため、scp
コマンドを用いて移動を行いました。
ただ、そのまま転送しようとするとファイルの権限がややこしくなったので、一度tarで圧縮して、転送した後、tar
コマンドに-p
オプションをつけて権限を維持したまま展開を行いました。
3. sshの設定
この時点ではrootアカウントにsshでログインして作業をおこなっているので、セキュリティ的に問題があります。sshの設定を変更して、rootログインの禁止、パスワードによるログインを禁止し、鍵認証によるログインのみを許可するようにします。
この変更を行う前に、公開鍵をユーザー/.ssh/authorized_keys
に登録して、鍵認証によるログインができるようにしておきます。
エディタで/etc/ssh/sshd_config
を編集します。
- PermitRootLogin no
- RSAAuthentication yes
- PubkeyAuthentication yes
- PasswordAuthentication no
以上のように変更します。
4. Webサーバーの立ち上げ
4.1 nginxのインストール
本サイトを運営するために、Webサーバーにはnginxを使用しました。
configファイルの内容は以下のようになっています。
```
user www-data; ←プロセスを起動するユーザーを指定します
worker_processes auto; ←nginxのプロセス数を指定します。デフォルトでは1です
pid /run/nginx.pid ←プロセスIDを保存するファイルを指定します。
events {
worker_connections 768; ←workerプロセスが処理できる最大コネクション数を指定します。
}
http {
sendfile on; ←sendfile APIを有効にするかを指定します。使用したほうがカーネル空間内でファイルの読み込みと送信が完了するため、効率よくファイル転送がおこなえるようです。
tcp_nopush on; ←sendfileが有効なときに、TCP_CORKソケットオプションを有効にするかを指定します。有効にするとレスポンスヘッダとファイルの内容をまとめて送るようになり、少ないパケット数で効率良く送ることができるようです。
tcp_nodelay on;
keepalive_timeout 65; ←クライアントからの再要求を待つ時間を指定します。(秒)
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 接続を許可するSSLバージョンを指定します。このようにすることでSSLv3の脆弱性「POODLE」を回避することができます。
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log; ←アクセスログの保存場所を指定します
error_log /var/log/nginx/error.log; ←エラーログの保存場所を指定します。
gzip on; ←コンテンツの圧縮を行うかを指定します。
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
```
nginxでバーチャルホストを設定することで、`www.calc.mie.jp` `pages.calc.mie.jp` といった複数のサイトを運用しています。
そのため、
1. nginxの設定ファイル `/etc/nginx/nginx.conf` の
`http{` 内に `include /etc/nginx/sites-enabled/*` と書く。
1. `/etc/nginx/sites-available` に `www.calc.mie.jp` といったサイトのドメイン名のファイルを作成し、ここに各サイトの設定を書く。
1. `/etc/nginx/sites-enabled` にsites-available内のファイルのシンボリックリンクを貼る。
という設定ファイルの配置になっています。
この各サイトの設定ファイルの内容はそれぞれ変わってきます。
例えばwww.calc.mie.jpにアクセスすると、httpの場合httpsに転送して、httpsの場合index.htmlを表示するという内容になっています。
```
server {
listen 80;
listen [::]:80;
server_name www.calc.mie.jp;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate ;
ssl_certificate_key ;
ssl_trusted_certificate ;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2;
ssl_ciphers < >;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security max-age=15768000;
ssl_stapling on;
ssl_stapling_verify on;
server_name www.calc.mie.jp;
ssl_dhparam ;
location / {
root /srv/calc-web;
index index.html index.htm;
}
}
```
SSL通信のあたりの設定については別の記事で紹介できればと思います。
### 4.2 Hakyllの設定
当サイトでは、MarkdownファイルからHakyllを使ってhtmlファイルを生成するという方法をとっています。
Hakyllについては下の記事でまとめられています。
[https://www.calc.mie.jp/posts/2017-02-20-hakyll.html](https://www.calc.mie.jp/posts/2017-02-20-hakyll.html)