0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linux9レンタルサーバ(xServer)をセットアップする

Last updated at Posted at 2025-03-19

はじめに

以前にこちらの記事で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アドレス>

とすると確認できます。

スクリーンショット 2025-03-17 14.17.34.jpg

Let's Encryptを利用したSSL/TLS 証明書の設定

参考記事を見ながら作業して設定しました。少し詰まりましたが出来ました。

nginxの設定ファイル

まずはじめに、http接続での設定とします。

http設定

/etc/nginx/nginx.conf
に設定ファイルがあり、証明書の保存場所やリダイレクト設定などが記載されています。
以下のように設定しました。

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にするだけです。

nginx.conf
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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?