はじめに
以前にこちらの記事でLinux8の設定過程を記載しました。今回は職場のサーバがLinux9に置き換わったため、再度テストをするためにVPSサーバをレンタルしました。その設定過程を記載します。
私が求める条件としては、Rocky Linux 9.5が使用出来る、Node.jsがインストール出来る、ドメインのネームサーバの変更が出来るというものでした。
レンタルサーバ環境
xServerさんのVPSをレンタルすることにしました。
仕事で使用しているサーバがRed Hat Enterprise Linux 9.5 (Plow)ですので、それと互換性があるRocky Linux 9.5を選択します。
OS: Rocky Linux 9.5(64bit)
メモリ: 2GB
ストレージ(NVMe SSD): 50GB
node version: v22.14.0 ※nvmで管理
npm version: 10.9.2
サーバにログイン
サーバ契約時に作成した公開鍵は、サーバの
/root/.ssh/authorized_keys
にあります。
サーバ契約時に作成した秘密鍵は自身のPCの以下に保存しています。
~/.ssh/xServerKey2.pem
以下のコマンドでログイン出来ます。
ssh -i ~/.ssh/xServerKey2.pem root@(IPアドレス)
-i ~/.ssh/xServerKey2.pem で使用する秘密鍵を指定しています。
こちらのxServerさんのマニュアルを参考にして、パケットフィルター設定はOFFにしています。
ssh接続のための設定
参考記事を見ながら作業します。
以下のコマンドでログイン出来るようになりました。
ssh -i ~/.ssh/xServerKey2.pem newusername@(IPアドレス)
sudoコマンドを使用するための設定
デフォルトでは新しいユーザはsudoを実行する権限を持っていないので与えました。
ファイアウォールの設定
参考記事を見ながら作業して設定しました。
FTP設定
ローカルからサーバにファイルなどを転送するためにFTP設定を参考記事を見ながら作業して設定しました。
FileZillaを使用した接続も出来ました。
nvmのインストール
ユーザでサーバにログインします。
こちらの記事を参考にインストールします。
node.jsのインストール
nvmを利用して、開発環境のホスティングサーバに合わせて
node version: v22.14.0
をインストールします。
nvm install v22.14.0
ちなみにnpmのバージョンはv10.9.2がインストールされています。
ついでに過去のバージョンであるv16.20.2もインストールしておきます。
nvm install v16.20.2
(追記)nvmのアンインストールとnode.jsの再インストール
nvmでバージョン管理を行ってきましたが、sudoを利用するときにnvm のパスが効かずエラーが発生する時があるので、nvmをアンインストールして、node.jsを再インストールします。
nvm で入れた Node.js のアンインストール
ホームディレクトリの .nvm フォルダを削除
rm -rf ~/.nvm
.bashrcから以下の行を削除
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
シェルを再読み込み
source ~/.bashrc
ターミナルをもう一度立ち上げ直します。
削除確認
command -v nvm
何も表示されなければ、nvmを削除出来ています。
少し詰まりながらもできました。
node.jsの再インストール
次に直接node.jsをインストールします。
# 1. NodeSource のリポジトリを追加
sudo curl -sL https://rpm.nodesource.com/setup_22.x | sudo bash -
# 2. Node.js をインストール
sudo dnf install -y nodejs
node version: v22.14.0
npm verstion: v10.9.2
がインストールされました。
Nginxのインストール
リバースプロキシを使用したいので、Nginxをインストールします。
システムを最新の状態に更新
sudo dnf update -y
EPEL リポジトリを有効化
Rocky Linux のデフォルトリポジトリには nginx が含まれていますが、最新版を取得するために EPEL (Extra Packages for Enterprise Linux) リポジトリ を追加するのが一般的です。
sudo dnf install -y epel-release
Nginx のインストール
sudo dnf install -y nginx
インストール後、Nginx を起動し、OS 起動時に自動起動するように設定します。
# Nginx の起動
sudo systemctl start nginx
# Nginx を自動起動するように設定
sudo systemctl enable nginx
# Nginx の状態を確認
sudo systemctl status nginx
ブラウザにおいて、
http://<サーバーのIPアドレス>
とすると確認できます。
Let's Encryptを利用したSSL/TLS 証明書の設定
参考記事を見ながら作業して設定しました。少し詰まりましたが出来ました。
nginxの設定ファイル
まずはじめに、http接続での設定とします。
http設定
/etc/nginx/nginx.conf
に設定ファイルがあり、証明書の保存場所やリダイレクト設定などが記載されています。
以下のように設定しました。
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host; # クライアントのホスト名を保持
proxy_set_header X-Real-IP $remote_addr; # クライアントの IP アドレスを保持
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # プロキシを経由した元の IP アドレスを送信
}
例えば、
https://k96mz.xyz/test/index.html
にきたリクエストは、
http://localhost:8080/test/index.html
に転送されます。
node.jsでサーバを立ち上げる
node.jsでサーバを立ち上げて、実際の挙動を確かめました。
const express = require('express');
const app = express();
const PORT = 8080;
// ルート("/")にアクセスしたときのレスポンス
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.get('/test', (req, res) => {
res.send('Test response');
});
// サーバーを起動
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
最初はうまく行きませんでした。
SELinux の状態を確認しました。
getenforce
Enforcingとなっていたので、一時的に無効化してみました。
sudo setenforce 0
そうするとうまくいきました。
そのため、この設定を永続化します。
手動でファイルを開いて修正:
SELINUX=disabled
実際に
https://k96mz.xyz
とすると「Hello, World!」が返り、
https://k96mz.xyz/test
とすると、「Test response」が返ります。
https設定
次に、https接続での設定とします。
/etc/nginx/nginx.conf
の設定ファイルを以下のように設定します。httpをhttpsにするだけです。
location / {
proxy_pass https://localhost:8080;
}
node.jsでサーバを立ち上げる
node.jsでサーバを立ち上げて、実際の挙動を確かめました。
const express = require('express');
const spdy = require('spdy');
const fs = require('fs');
const app = express();
const PORT = 8080; // HTTPS のポート
// SSL 証明書のパス(Let's Encrypt などで取得したものを指定)
const privkeyPath = './key/privkey.pem';
const fullchainPath = './key/cert.pem';
// SSL 証明書の読み込み
const options = {
key: fs.readFileSync(privkeyPath),
cert: fs.readFileSync(fullchainPath),
allowHTTP1: true // HTTP/1.1 のリクエストも許可
};
// ルート("/")にアクセスしたときのレスポンス
app.get('/', (req, res) => {
res.send('Hello, Secure HTTP/2 World!');
});
app.get('/test', (req, res) => {
res.send('Test response (HTTP/2)');
});
// HTTP/2 サーバーを起動
spdy.createServer(options, app).listen(PORT, () => {
console.log(`HTTP/2 Server is running on https://localhost:${PORT}`);
});
実際に
https://k96mz.xyz
とすると「Hello, Secure HTTP/2 World!」が返り、
https://k96mz.xyz/test
とすると、「Test response (HTTP/2)」が返ります。
まとめ
Rocky Linux 9.5のセットアップ過程を記載しました。
Reference