個人サイトを作ろう(1) Ubuntu Serverを動かそう
動機
のくです。最近めっきりMisskeyのにじみす鯖にいます。昔の雑談掲示板のようで居心地が良いです。
MisskeyはActivityPubのプロトコルを使用した分散型SNSで、Mastodonに比べて思想的(反中央集権主義)なものも少なくまったりしています。
作品を載せる場の所感としては(ActivityPub全体がそうですが)
- サーバー横断検索に弱い
- ノート配信の仕組みのため作品の掲載範囲のコントロールしづらい
などが創作物の公開に関してはちょっと難があるように感じました。
そのためか、Misskey内部の創作系鯖では個人サイト作成で盛り上がってる部分もあり、私も個人サイト作りたい!!という気持ちがどんどん湧いてきました。
というかここも個人サイトなのですが、一昨年使用していないMovableTypeが脆弱性を突かれて改竄されスパムの踏み台にされたため、該当のディレクトリ以外は改竄されなかったのですがコンテンツを色々と下げてしまいました…。
せっかくなので新しいことがやりたい!という気持ちもあって、
- VPSサーバーを借りる
- 独自ドメインを取る
- Nginx+Node.jsで構築
- Next.jsあたりで動的サイト作成
- Gitのリモートリポジトリを置いてGithubには置けない年齢制限のある小説もgit管理する
- PleromaでActivityPubのおひとりさまサーバー作成
あたりを目標に考えています。以前HTML4+PHPで動的サイトを作っていて、技術の進歩にちょっと浦島太郎ですが頑張りたいです。
OSの選定
個人のLinuxサーバーというとCentOSのイメージだったのですが、開発終了に伴い契約予定のさくらのVPSではRocky Linuxなどがオススメされているようです。
Linuxには大まかにRedHat系とDebian系があり、前者がCentOSやRocky Linuxなど、後者がUbuntuなどです。パッケージ管理の方法やディレクトリ構成などに違いがあります。(そういえば初めて触ったLinuxは無償版のときのRed Hat Linuxでした…)
悩みましたがシェア的に現在はUbuntu Serverの割合がだいぶ上がってきていてドキュメントも豊富そうなのと、普段安いノートPCにLinux Mintを入れて使用しているので、コマンドに慣れているDebian系のUbuntu Serverを動かすことにしました。
Ubuntu Serverを動かす
いきなりVPS契約してやってしまってもいいのですが、せっかくなのでWindows上で仮想マシンを動かして練習しよう~~と思いました。
早速Windows機に仮想マシンを扱うためのVirtualboxをインストールしました。
インストール
UbuntuのサイトからUbuntu Sever 22.04.2 LTSのisoファイルをダウンロードし、Virtualboxで仮想マシンを新規作成します。
メモリは契約予定の1GBにしました。そのまま仮想HDDを作成します。
ネットワーク設定はアダプター1をNAT、アダプター2をホストオンリーアダプターに設定します。ホストOS(Windows)を介してゲストOS(Ubuntu)をインターネットに接続します。
仮想マシンを起動しUbuntu Serverのインストールを始めます。
キーボードはJapaneseを選んでおかないとあとでUS配列で面倒になります。
WindowsからSSH接続で操作する予定なのでOpenSSHサーバーはインストールしておきます。
インストールに成功しました。設定したユーザー名とパスワードでログインできます。
今回インストール時の設定で「Ubuntu」をユーザー名にしています。
インターネット接続が成功しているとsudo apt update
コマンドでパッケージの更新を取得できます。そのままsudo apt -y upgrade
で更新。
あとはsudo timedatectl set-timezone 'Asia/Tokyo'
でタイムゾーンの変更をしておきます。
ufwを設定
ファイヤーウォールのufwを設定します。ufwはubuntu serverに標準インストールされています。
SSH接続の22番ポート開放
$ sudo ufw allow 22
http、httpsのポート開放
$ sudo ufw allow 80 $ sudo ufw allow 443
ポート番号の代わりにプロトコルでも指定できます
$ sudo ufw allow ssh $ sudo ufw allow http $ sudo ufw allow https
とりあえずさくらのVPSが標準でポート番号で開放されているのでそれに習って番号で開放しました。sudo ufw enable
コマンドでufwを有効化します。
さらにVirtualboxのネットワーク設定のNAT→Advancedからポートフォワーディングルールを設定しておきます。
443も開けているのは後でオレオレ証明書を発行する予定のためです。
ホストOS(Windows)から接続
sshサーバー、ufwの準備ができたのでWindowsのコマンドプロンプトからSSH接続で仮想サーバーへ接続してみます。
Virtualboxで使用している仮想ネットワークアダプターのIPアドレスを確認しておきます。IPアドレスは手動にして「192.168.56.101」をゲストOS用のIPとして設定しました。「192.168.56.***」がこのホストOS(Windows)とゲストOS(Ubuntu)間のみで使用するプライベートIPになります。
Windowsのコマンドプロンプトを起動し、下記を入力します。今回ユーザー名を「Ubuntu」で作成しているのでこうなります。
ssh [email protected]
パスワード入力が求められ、接続が成功しました。
これ以降はホストOS(Windows)のコマンドプロンプトからリモートで接続し、色々操作していきます。
公開鍵認証の設定
毎回Windowsから接続時にパスワード入力するのも面倒なので、公開鍵を生成して認証を行いログインできるようにします。
「id_rsa_ubuntu」という名称のファイルで公開鍵&秘密鍵ペアを作成することにしました。OpenSSHのインストールしてあるWindowsのコマンドプロンプトで下記を実行し、公開鍵ペアを生成します。
ssh-keygen -t rsa -f id_rsa_ubuntu
できた「id_rsa_ubuntu」ファイルをホストOS(Windows)の「C:\Users\(Windowsのユーザー名)\.ssh」(フォルダがなければ作成)に移動します。
WinSCPというSSH接続でファイル操作ができるアプリを使用します。UbuntuのIP、ユーザー名、パスワードを入力してログインします。
「設定」→「パネル」→「隠しファイルを表示」で.sshフォルダが表示されるようにしておきます。
/home/(ユーザー名)/に移動し、「.ssh」フォルダをパーミッション「700」で作成します。
/.ssh/フォルダに移動し、ローカルから「id_rsa_ubuntu.pub」ファイルを/.ssh/フォルダにコピーします。その後ゲストOS(Ubuntu)上の「id_rsa_ubuntu.pub」ファイル名を「authorized_keys」に変更します。コピー元ファイルは削除してかまいません。
コマンドプロンプト上またはVirtualbox上のUbuntuにてservice ssh restart
コマンドでSSHサーバーの再起動を行います。
Windowsからの接続時に楽をしたいのでWindowsの「C:\Users\(Windowsのユーザー名)\.ssh\」にconfigファイルを開き、下記を追記します
Host ubuntu HostName 192.168.56.101 User ubuntu Port 22 IdentityFile ~/.ssh/id_rsa_ubuntu
保存すると、以降はコマンドプロンプトのssh ubuntu
コマンドのみでゲストOS(Ubuntu)にログインできるようになります。
今回の作業
今回はここまで。次回はwebサーバーを立てます。