さくら VPS の初期設定メモ

# はじめに

## ねらい

業務にて自前サーバが必要となり、[さくら VPS](https://vps.sakura.ad.jp/) を使うことにしました。Qiita 的に新しい情報はありませんが、自分のためのメモとして残します（環境の再現性の確保）。

## 経緯

これまでに個人として [ConoHa VPS](https://www.conoha.jp/vps/) で遊んできました（例えば [こちら](https://qiita.com/mkoku/items/ea107a29fd925081ebcf) や [こちら](https://qiita.com/mkoku/items/3537d9cc7d4c029d886b) や [こちら](https://qiita.com/mkoku/items/e71c644bde372c3f36ca) の記事）。しかし ConoHa VPS は「請求書払い」ができないため、業務では手続き面で使いにくいのでした（個人のカードで立て替え払いする必要がある）。そこで、請求書払い（年間一括）が可能な さくら VPS を使うこととしました。

ついでに、個人用の ConoHa VPS とは少し異なる環境で運用することにしました。

* HTTP サーバ： Apache --> nginx
* デスクトップ： GNOME --> Xfce
* ドメイン取得： ムームードメイン --> さくら



## やったこと

* さくら VPS の契約
* ドメインの取得と設定
* CentOS 7 のインストール（LetsEncrypt スタートアップスクリプト利用）
* SSH の各種設定
* Xfce と tigervnc-server のインストールと各種設定
* Mondo Rescue によるイメージバックアップ


# さくら VPS の契約

[さくらの VPS のページ](https://vps.sakura.ad.jp/) から申し込むだけ。

## プラン（スペック）

今回契約したプランは以下（2G プラン）。

* CPU： 仮想 3 Core
* メモリ： 2 GB
* ストレージ： 50 GB SSD
* リージョン： 大阪第3
* VPS バージョン： v4

## 費用

費用は以下（2019年4月現在）。

* 月払いなら： 1,706 円 / 月
* 年払いなら： 18,770 円 / 年
* 初期費用： 2,160 円 / 初回のみ

クレジットカード払いの場合は、申込み後すぐに使えて、2週間の無料お試しができるが、
請求書払いの場合は、請求書が郵送され、入金確認後まで使えない（振込はコンビニまたは郵便局）。無料お試し期間はない。追加で請求書発行手数料が 324 円かかる。
もろもろコミコミの費用は 21,254 円だった。


# ドメインの取得と設定

## ドメイン取得
業務の目的上 SSL が必須なので、[Let's Encrypt](https://letsencrypt.org/) で SSL 化できるように、まずはドメインを取得。運用面でシンプルになるように、[さくらのドメイン](https://domain.sakura.ad.jp/) で取得した。
ほしいドメイン名が取得可能かを検索して、購入手続きをするだけ。

.com, .net, .org などは 1,852 円 / 年 だった（2019年4月現在）。上記 VPS とあわせて導入費用の総額は 23,106 円だった。


## ドメインの設定
ドメインの設定は VPS のコントロールパネルではなく「[会員メニュー](https://secure.sakura.ad.jp/auth/login)」から行う。

* 会員メニューのトップから「\> ドメインの確認」をクリック
* 契約ドメインの一覧で「▶ドメインメニュー」をクリック
* 「管理ドメインとネームサーバの一覧」にて「ゾーン編集」をクリック
* 「さくらインターネットのネームサーバに設定する」にて VPS の IPv4 アドレスを入力して「送信する」をクリック
* 基本的にこれだけで OK、以下のように自動で設定された
    * @ NS ns1.dns.ne.jp
    * @ NS ns2.dns.ne.jp
    * @ A {VPS の IPv4 アドレス}
    * @ MX 10 @
    * www CNAME @
    * mail CNAME @
    * ftp CNAME @


# CentOS 7 のインストール

OS は [CentOS 7](https://www.centos.org/) をインストールした。[CentOS_LetsEncrypt](https://vps-news.sakura.ad.jp/2017/11/21/encrypt/) というスタートアップスクリプトを利用することで、[nginx](https://nginx.org/) のインストールと、[Let's Encript](https://letsencrypt.org/) による SSL 化までを一気にやってもらえた。

## インストール作業

VPS への OS のインストール等の作業は「[コントロールパネル](https://secure.sakura.ad.jp/vps/#/login)」から行う。

* コントロールパネルで対象のサーバを選択
* 右上の「各種設定▼」メニューから「OS インストール」を選択
* オプションは以下を選択
    * 標準OS
    * CentOS7 x86_64
    * root のパスワードを2回入力
    * スタートアップスクリプトで「CentOS_LetsEncrypt」を選択
        * ドメイン名（上記で取得済）を入力
        * メールアドレスを入力

## おそらく不要な作業

CentOS_LetsEncrypt スタートアップスクリプトを使ってセットアップすると、「通常必要な90日ごとの更新作業も自動的に行われます」と[書かれている](https://vps-news.sakura.ad.jp/2017/11/21/encrypt/)。しかし、なんだか不安だったので、certbot をインストールして、タイマー設定しておいた。おそらく不要。

```shell-session
$ su
# yum install certbot
# systemctl enable --now certbot-renew.timer
# systemctl list-timers
```


# SSH で各種設定

OS のインストール終了後、定番の、以下の諸設定を実施した。

* パッケージの更新（yum update）
* パッケージ更新の自動化（yum install yum-cron）
* 一般ユーザの追加（＋ sudoers へ追加）
* 鍵交換方式による認証
* パスワード認証の不能化
* root でのログインの不能化

このあたりは、[こちら（私の記事）](https://qiita.com/mkoku/items/ea107a29fd925081ebcf) や [こちら（さくらのVPS講座）](https://knowledge.sakura.ad.jp/8218/) を参考にすることとして、ここでは詳細は割愛。



# Xfce と tigervnc-server のインストールと各種設定

なにかと GUI かつ日本語環境があると安心する性分。GNOME よりも軽量だという [Xfce](https://www.xfce.org/) をインストールして、VNC できるようにした。


## 前準備

日本語化のために iBus (Intelligent Input Bus) や日本語フォントをインストール

```shell-session
$ su
# localectl set-locale LANG=ja_JP.utf8
# yum install ibus-kkc vlgothic-* ipa-*-fonts
```

## Xfce のインストール

まずは Xfce 本体のインストール

```shell-session
$ su
# yum groupinstall Xfce
```


## tigervnc-server のインストールと諸設定

VNC サーバの tigervnc-server をインストールする。

```shell-session
$ su
# yum install tigervnc-server
```

VNC 用のポートを開ける。

```shell-session
$ su
# firewall-cmd --add-service=vnc-server --zone=public --permanent
```

VNC 用パスワードの設定。ログインするユーザにて…

```shell-session
$ vncpasswd
（VNC 用のパスワードを2回入力）
（view-only password? という質問には n と答える（VNC 経由で操作もできるように））
```

VNC サーバの自動起動の設定。まずは vncserver@:1.service を作る。

```shell-session
$ su
# cp -p /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
```

vncserver@:1.service を編集する。2箇所ある \<USER\> という部分を実際のユーザ名（例：hoge）に変える。

```shell-session
# nano /etc/systemd/system/vncserver@:1.service
```

```config:/etc/systemd/system/vncserver@:1.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l hoge -c "/usr/bin/vncserver %i"  # この行にあった <USER> を hoge に
PIDFile=/home/hoge/.vnc/%H%i.pid                                # この行にあった <USER> を hoge に
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

[Install]
WantedBy=multi-user.target
```

systemctl で vncserver@:1.service の自動起動を設定。

```shell-session
# systemctl daemon-reload
# systemctl start vncserver@:1.service
# systemctl enable vncserver@:1.service
```

## Xfce の起動設定

/home/hoge/.vnc/xstartup に1行追加（ユーザ名は例えば hoge）。

```shell-session
# nano /home/hoge/.vnc/xstartup
```

以下の1行を追加、/etc/X11/xinit/xinitrc の行はコメントアウト。

```config:/home/hoge/.vnc/xstartup
exec xfce4-session &
# /etc/X11/xinit/xinitrc
```



あとは VNC クライアントでよしなに接続する。


## Xfce で日本語入力を設定

当初は入力メソッド（ibus）が自動で起動しないようなので、以下を設定。

* 「アプリケーション」メニューから「設定」→「セッションと起動」
* 「自動開始アプリケーション」タブを選択
* 「入力メソッドのスターター」にチェック


## Xfce にゴミ箱を設置

当初はゴミ箱が無いようなので（アイコンが無いという意味ではなく、機能自体がない）、以下を設定。

```shell-session
$ su
# yum install gvfs
```

ちなみにゴミ箱の実体は ~/.local/share/Trash/ の中。


## 各種アプリケーションをインストール

Xfce にはアプリケーションがほとんど入っていないので、以下をインストール。

* Web ブラウザ Firefox
* テキストエディタ gedit

```shell-session
$ su
# yum install firefox
# yum install gedit
```

Visual Studio Code も[本家ページ](https://code.visualstudio.com/docs/setup/linux)の通りに以下を実行してインストール。

```shell-session
$ su
# rpm --import https://packages.microsoft.com/keys/microsoft.asc
# sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
# yum check-update
# yum install code
```


# Mondo Rescue によるイメージバックアップ

システムが固まってきたら、もしもに備えてイメージバックアップしたいところ。しかしながら、[さくら VPS にはイメージバックアップ機能が無い](https://help.sakura.ad.jp/hc/ja/articles/206078582) ので、[Mondo Rescue](http://www.mondorescue.org/) でイメージをバックアップした。
（ConoHa VPS はイメージバックアップ機能が標準で使える）

## Mondo Rescue のインストール

Mondo Rescue リポジトリを追加して、Mondo Rescue 本体と、圧縮ツールの lzop をインストール。

```shell-session
$ su
# cd /etc/yum.repos.d/
# wget http://www.mondorescue.org/ftp/centos/7/x86_64/mondorescue.repo
# yum install mondo lzop
```

## 仮想メモリの設定

デフォルトのままだとバックアップに失敗するので、/etc/mindi/mindi.conf を編集。

```shell-session
$ su
# nano /etc/mindi/mindi.conf
```

以下の2行を追記。

```config:/etc/mindi/mindi.conf
EXTRA_SPACE=320152
BOOT_SIZE=100000
```

EXTRA_SPACE は 240000 とする情報が多かったが、私の環境では上記 320152 で成功。

## バックアップ先ディレクトリの準備

バックアップ先となる任意のディレクトリを作る。TeraCLOUD などの WebDAV ストレージでもよいが、ここでは VPS の一般ユーザのディレクトリ内に作る。あとからイメージをダウンロードする前提。

```shell-session
$ mkdir /home/hoge/backup
```

## イメージバックアップ

例えば以下のコマンドで実行。

```shell-session
$ su
# mondoarchive -O -i -N -L -s16g -E /home/hoge/backup -d /home/hoge/backup -p Backup_yyyymmdd -g
```

各オプションの意味は以下。

* -O バックアップする
* -i ISO として保存
* -L lzo 圧縮を使用
* -N ローカルファイルのみ（ネットワークは除外）
* -s 最大ファイルサイズ（未指定だと約 680MB の CD サイズ）
* -E バックアップから除外するディレクトリ（バックアップ先そのものは除外）
* -d バックアップ先ディレクトリ
* -p バックアップファイル名（このあとに "-1.iso" が自動で追加される）
* -g GUIモード（任意、経過の見やすさのため）

最後に、できあがった iso ファイルを任意の場所（WebDAV ストレージや、ローカル PC 等）にダウンロードして保管しておく。



# まとめ

VPS を立てるのは2回めで、自分で過去にメモを残しておいたこともあり、スムーズに構築できました。誰かのお役には立てないかもしれませんが、なにがしかのご参考になれば。

なお、今後もなにかあれば随時追記していく予定です。