さくらのVPSでCentOSからRockyLinuxへ移行

webサーバなどとして遊び場に借りているさくらVPSのOSをCentOSからRockyLinuxへ移行したので、備忘録です。

今回は必要なデータをバックアップし、環境を再構築する方法を採っています。なので、この記事の内容はほぼRockyLinuxのセットアップ内容となっています。

環境ごとバックアップしたい場合などは、別の記事を参照してください。

## 環境
- さくらVPS 1G
- OS CentOS6 -> RockyLinux 9

操作はwindows11のWSLから行います。

## データのバックアップ
筆者の場合はバックアップするものは`/var/www/html`ぐらいしかありませんでした。適宜必要なものをバックアップしてください。

```bash
cd /var/www/html/
zip -r html.zip *
```

html.zipをどこか（サーバ以外の場所）に保管しておきます。

## さくらVPSのコントロールパネルからOSを再インストール

バックアップのし忘れはないか、慎重に確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696043/cd3b1892-0061-bda0-e145-b3a071f921c4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696043/3844a773-d3d2-724d-76cf-d31188e5b6bf.png)

パケットフィルターはさくらVPS側のファイアウォールですが、なしにして自分で設定でも良いと思います。あとから変更もできます。**sshログインのポートを変更する場合、そのポートも追加してください。**

しばらく時間がかかります。

## VPSの初期設定

管理ユーザrockyでssh接続します。巷にはTeraTermなどを使うとよいとありますが、個人的にはWSLから行うとラクでよいと思います。

↓ここを参考にしました。

https://knowledge.sakura.ad.jp/8218/

接続したら、`sudo su -`で設定したパスワードを入力し昇格。以下、rootで作業します。

とりあえずパッケージをアップデートします。最優先です。
```
yum update
```

`passwd`コマンドでrootのパスワードを設定し、ユーザーを追加します。デフォルトのユーザーを使っても良いと思うのでお好みです。

```bash
# ユーザー追加して、sudo権限を付与
adduser user1
passwd user1 # 任意のパスワードを設定
usermod -aG wheel user1 # sudo権限を付与

```

## 作業を始める前に：Vimのインストール

この項目は必須ではありません。

OS標準のviは機能が少なかったりするため、vimをインストールします。
```
yum install vim
```

そうしたら、`vi ~/.vimrc`で.vimrcを編集し、次の記述をします。
```
set number
syntax on
```

これで、vimを開いたときに行番号が表示され、色分けもされるようになります。.vimrcの記述についてはググれば山ほど出てくると思うのでお好みにしてください。

## SSHログインの設定

セキュリティのため、rootユーザーでsshログインできなくします。また、ログインできないとしても、22番ポートを開けっ放しにしておくとログイン失敗のログが大量に溜まり心臓に悪いので、ついでにsshのポートも変えてしまいます。これはお好みかなと思います。（作業に失敗するとsshログインできなくなる恐れがあるので、注意！）

/etc/ssh/sshd_configを編集します。

```diff
- #Port 22
+ Port 22
+ Port 22222 # 任意のポート

- #PermitRootLogin yes
+ PermitRootLogin no
```

`systemctl restart sshd.service`でsshdを再起動します。

ここで、追加したユーザー、ポートでログインできることを必ず確認します。後のファイアウォールの設定が終わるまで22番ポートは閉じないほうがよいです。

## ファイアウォールの設定

https://knowledge.sakura.ad.jp/10583/

ここを参考に作業します。ひとまずhttpとftp、それとさっき設定したsshのポートを開放します（大事）

```Bash
systemctl enable firewalld # ファイアウォールの自動起動

systemctl start firewalld # ファイアウォールを開始

#必要なポートを開放
firewall-cmd --add-service=ftp --zone=public --permanent

firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent

firewall-cmd --add-port=22222/tcp --zone=public --permanent # さっき設定したsshのポート

firewall-cmd --reload #せっていのはんえい

firewall-cmd --list-all # 追加した設定が反映されているか確認する

systemctl restart firewalld # 再起動
```

ここまで来たら、さきほど設定したポートでsshログインできることを確認し、sshd側で22番ポートを閉じます。

```diff:sshd.config
- Port 22
+ #port 22
```
```bash
systemctl restart sshd
```

## Webサーバ(Apache), Let's encryptの導入

https://knowledge.sakura.ad.jp/8541/

ここを参考に作業。

```bash
yum install httpd

systemctl start httpd
systemctl enabled httpd
```

基本的にはこれだけです。ブラウザでip直打ちでアクセスしてみて、こんな画面が出てくればOK。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/696043/a5b673e4-35ea-5c75-2c22-f3e00ca66036.png)

### Let's encrypt

次にLet's encryptを導入します。いろいろ試行錯誤したので抜けがあるしれない。

まずは準備として、ssl_modが必要なのでyumでインストール。

```bash
yum install ssl_mod
```

certbotはyum経由でインストールできなくなっているので、snapdを使います。
https://egatech.net/centos7-snapd/


```bash
yum install epel-release
yum install snapd

systemctl enable --now snapd.socket 
ln -s /var/lib/snapd/snap /snap #classicオプションのために必要らしい

```

`/var/lib/snapd/snap/bin`をrootに追加する。

```sh
echo "PATH=$$PATH:/var/lib/snapd/snap/bin" >> ~/.profile
source ~/.profile
```

コピペで作業してると`error: too early for operation, device not yet seeded or device model not acknowledged`と怒られる場合がある（なぜ？なんか準備をしてるのかな）しばらく待ってから作業する。


```bash
snap install certbot --classic

certbot --apache 

#メールアドレスやらドメインやらを対話形式で聞かれるので入力していく。

systemctl restart httpd
```

https://yourdomain/ にアクセスして証明書が有効ならOK。httpからhttpsへリダイレクトされることも確認する。

## /var/www/htmlの復元

/var/www/htmlにhtml.zipをアップロードしてunzipします。

元のページが出ることを確認したら、ひとまず終了。おつかれさまでした。