scp(1) を使用してサイトを Oracle Cloud Free Tier に移行する方法

scp(1) を使用してサイトを Oracle Cloud Free Tier に移行する方法

オラクルクラウド最近、 Oracleの無料プランを利用して、ローエンドのウェブサイトを無料で提供したいと考えていました。Oracleの無料プランに移行することで、これまでサイトを運用していたVPSの月額5ドルを節約できるようになりました。

数日前、 25230 が、 Oracle Free Tier で Caddy サーバーをセットアップした方法についての記事を公開しました。

Oracle Free Tier インスタンスに Caddy をインストールした後、次のステップはサイトのファイルを古いサーバーから新しいサーバーに移動することでした。

ファイルを移動するために、 scp(1), secure copy を使用しました。secure copy ( scp(1),元々はSecure Copy Protocol を実装したコマンドです。

この記事では、scp(1) を使ってサーバー間でファイルをコピーするのがいかに簡単かを説明します。例として、私のサイトを以前の環境から Oracle Free Tier に移行した事例を紹介します。また、トラブルが発生した場合でもファイル転送をより安全に行うための役立つヒントもいくつか紹介します。

古いサイトをバックアップする

まず、古いサイトをバックアップしましょう。バックアップは大切です!

以前のマシンではroot権限で作業していたため、コマンドを間違えるとトラブルの原因になる可能性がありました。そこで、サイトの移転に先立ち、/rootディレクトリ内のファイルと/var/www/html内のサイト本体ファイルのバックアップを作成することにしました。

bash:~$ ssh [email protected]
Linux metalvps 5.10.0-8-amd64 #1 SMP Debian 5.10.46-5 (2021-09-23) x86_64

Debian GNU/Linux システムに含まれるプログラムはフリーソフトウェアです。
各プログラムの正確な配布条件については、
/usr/share/doc/*/copyright 内の個々のファイル。

Debian GNU/Linuxには、いかなる保証も一切ありません。
適用法によって許可されている。
最終ログイン: 2022年9月18日(日) 20:19:42 (200.68.171.136)
root@metalvps:~# cd /
root@metalvps:/# 日付
2022年9月18日日曜日 20:52:41 UTC
root@metalvps:/# tar cvzf metalvps.com-202209182052.tgz var/www/html ルート
var/www/html/
[ . . . ファイル . . . ]
根/
[ . . . ファイル . . . ]
ルート@metalvps:/#

旧サーバーに追加のtarアーカイブを用意しました。このアーカイブには、転送予定のすべてのファイルの追加コピーが含まれています。万が一、予期せぬ事態が発生した場合に備えてです。

新しいボックスの異なる管理設定

新しいマシン内の管理設定は、古いサーバーとは少し異なります。Oracleのデフォルトに従い、新しいサーバーではrootユーザーとして作業していません。代わりに、opcという一般ユーザーとして作業しています。ただし、opcにはsudo権限があるため、rootコマンド(「特権」操作)を実行できます。便宜上、古いマシンでは/rootで実行していた操作の一部を、新しいマシンでは/home/opcで実行します。

新しいボックスでSSHキーを生成する

scp(1) を使用するには、まず新しいマシンでSSH キーを生成する必要があります。新しいマシンから古いマシンに直接アクセスするには、新しく生成されたキーが必要になります。そこで、新しいマシンに接続し、.ssh ディレクトリに移動してキーを生成します。

bash:~$ ssh [email protected]
Activate the web console with: systemctl enable --now cockpit.socket

最終ログイン: 2022年9月18日(日) 20:28:36 (187.189.238.1)
[opc@instance-20220717-1620 ~]$ cd .ssh
[opc@instance-20220717-1620 .ssh]$ ssh-keygen -t ed25519
公開/秘密 ed25519 キー ペアを生成しています。
キーを保存するファイルを入力してください (/home/opc/.ssh/id_ed25519):
パスフレーズを入力してください(パスフレーズがない場合は空白)。
同じパスフレーズをもう一度入力してください:
あなたの識別情報は /home/opc/.ssh/id_ed25519 に保存されました。
公開鍵は /home/opc/.ssh/id_ed25519.pub に保存されました。
[. . . ]
[opc@instance-20220717-1620 .ssh]$ ls
承認済みキー id_ed25519 id_ed25519.pub
[opc@instance-20220717-1620 .ssh]$

新しいボックスをバックアップする

そこで、新しいサーバーでは、古いサーバーのルートディレクトリの内容をopcのホームディレクトリに置きたいと考えました。そのため、転送中に何か問題が発生して元に戻す必要が生じた場合に備えて、/home/opcディレクトリの転送前の内容をバックアップしておきたかったのです。

[opc@instance-20220717-1620 home]$ sudo tar cvzf opc-202209182117.tgz opc
opc/
[ . . . files . . . ]
[opc@instance-20220717-1620 ~]$

この時点では、新しいマシンにはまだ /var/www ディレクトリが存在しませんでした。そのため、バックアップする必要はありません。

[opc@instance-20220717-1620 ~]$ cd /var; ls
account crash ftp kerberos lock nis preserve tmp
adm db games lib log oled run yp
cache empty gopher local mail opt spool
[opc@instance-20220717-1620 var]$

古いボックスから新しいボックスへの直接SSHアクセスを有効にする

まず、新しい箱の中身

新しく生成された公開鍵を表示するには、cat コマンドを使用します。鍵をクリップボードにコピーします。鍵に改行がないことを確認してください。マウスで鍵を選択し、Ctrl + C キーを押します。

[opc@instance-20220717-1620 .ssh]$ cat id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHsyzJ1ev5mmmbVh13GpvV+qVQHg1QQ/T+5kXR9p/+5J opc@instance-20220717-1620
[opc@instance-20220717-1620 .ssh]$

第二に、古い箱の中

echo(1) を使って、新しい鍵を .ssh ディレクトリ内の authorized_keys ファイルに追加します。echo と入力し、クリップボードから鍵を貼り付け、「大なり記号」を2つ入力し、authorized_keys と入力してリターンキーを押します。

root@metalvps:/# cd .ssh
echo ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHsyzJ1ev5mmmbVh13GpvV+qVQHg1QQ/T+5kXR9p/+5J opc@instance-20220717-1620 >> authorized_keys
root@metalvps:/#

scp(1) でルートディレクトリのファイルをコピーする

ルートディレクトリのファイルを転送しましょう。ウェブサイトの一部ではないものの、ルートディレクトリに新しいマシンに移動したいファイルがありました。もちろん、この手順は、他に移動したいディレクトリがある場合でも同様です。

[opc@instance-20220717-1620 ~]$ scp -pr [email protected]:/root root-old
Enter passphrase for key '/home/opc/.ssh/id_ed25519':
[ . . . files . . . ]
[opc@instance-20220717-1620 ~]$

すべてのファイルが揃っていることを確認しましょう。

[opc@instance-20220717-1620 ~]$ ls -aR root-old/
[ . . . files . . . ]]
[opc@instance-20220717-1620 ~]$

/var/wwwディレクトリを作成する

[opc@instance-20220717-1620 ~]$ cd /var
[opc@instance-20220717-1620 var]$ ls
[opc@instance-20220717-1620 var]$ sudo mkdir www

ディレクトリの権限は大丈夫ですか?

[opc@instance-20220717-1620 var]$ ls -l | grep www
drwxr-xr-x. 2 root root 6 Sep 18 22:24 www
[opc@instance-20220717-1620 var]$

scp(1)でサイトファイルをコピーする

古いサーバーから新しいサーバーにサイトファイルをコピーしましょう。

[opc@instance-20220717-1620 var]$ cd www
[opc@instance-20220717-1620 www]$ sudo scp -i /home/opc/.ssh/id_ed25519 -pr [email protected]:/var/www/html .

必要なファイルはすべて揃っていますか?

[opc@instance-20220717-1620 html]$ ls

[ たくさんのファイル! ]

ファイルの権限は大丈夫ですか?

[opc@instance-20220717-1620 www]$ ls -l
total 4
drwxr-xr-x. 7 root root 4096 Sep 17 03:22 html
[opc@instance-20220717-1620 www]$ cd html
[opc@instance-20220717-1620 html]$ ls -l

[ たくさんのファイル! ]

以前にインストールされたCaddyサーバー

前回の投稿では、新しいボックスにCaddy サーバーをインストールする方法について説明しました。

Caddyfileの変更

次のステップは/etc/caddy/Caddyfile.のデフォルトのWebページとインストール手順に記載されているように、:80をmetalvps.comに変更し、サイトのルートを/var/www/html.

SELinux は満足ですか?

Oracle CloudでOracle Linux 8.6を使って初めてこれを試したのですが、SELinuxがCaddyによる新しく転送されたファイルへのアクセスを許可しませんでした。サイトにアクセスしようとしても、ブラウザに空白ページしか表示されませんでした。残念!

幸運なことに、 /var/log/messages. sudo journalctl -xeの出力にもエラーメッセージが含まれていた可能性があります。

「SELinux が caddy によるファイル /var/www/html/index.html への getattr アクセスを妨げています」というエラーを Google で検索しました。Google の検索結果と役立つエラーメッセージに基づくと、解決策はsudo restorecon -v '/var/www/html/index.html'.のマニュアルページを読んで試してみたところ、うまくいきました。

監視をメンテナンスに設定する

DNS を更新する前に、 Hetrix Tools の監視をメンテナンス モードに設定しました。

Hetrixツール監視のスクリーンショット

DNSを更新する

Porkbunにアクセスし、サイトのAとAAAAのDNSレコードを変更しました。その後、変更が反映されるまで数分間待ちました。

新しいボックスから提供されるサイトをご覧ください

DNS の変更が伝播された後、新しいボックスからサイトが提供されているのを確認できました。

LynxブラウザでのMetalVPSウェブサイト

最終ステップ

すべてが正常に動作しているように見えたので、Hetrixに戻り、IPモニターに設定されている数値アドレスを変更し、メンテナンスモードを終了しました。その後、新しいマシンに新規インストール時のサイトをバックアップしました。もちろん、古いマシンにあったサイトのバックアップもすべて残しておきました。古いマシンは削除しました。さて、Oracle Cloud Free Tierを利用して節約した数十億ドルをどう使うか考えなければなりません!

ログ記録

興味深いことに、最初に読んだCaddyのインストール手順には、ログ記録に関する記述が全くありませんでした。新しいマシンでサーバーが稼働した後、 /var/logにアクセスしてもCaddyのログが全く記録されていないことに驚きました。Caddyのログ記録を有効にするには、Caddyfileへの追加変更に加え、SELinuxの別の問題を解決する必要がありました。これらの作業については、今後の投稿で詳しく取り上げます。

結論

今回と前回の投稿では、Oracle Cloud Free Tier に Caddy サーバーをインストールする方法と、別のプロバイダーから Oracle Cloud に Web サイトを転送する 1 つの方法について説明しました。

付録: scp(1) の最近の変更点

現在、内部で何が起こっているかは変化しているにもかかわらず、scp の単純な使用で起こっていることはこれまでと同じように見えます。

バージョン 8.0 のリリース ノートより:

The scp protocol is outdated, inflexible and not readily fixed. We
recommend the use of more modern protocols like sftp and rsync for
file transfer instead.
-- https://www.openssh.com/txt/release-8.0

バージョン 9.0 のリリース ノートより:

This release switches scp(1) from using the legacy scp/rcp protocol
to using the SFTP protocol by default.
-- https://www.openssh.com/txt/release-9.0

おすすめの記事