【ITニュース解説】VPS Server Setup for Any Application (with Easy Deployment Flow)
2025年09月18日に「Dev.to」が公開したITニュース「VPS Server Setup for Any Application (with Easy Deployment Flow)」について初心者にもわかりやすく解説しています。
ITニュース概要
VPSサーバーでPHPやNode.jsなど複数Webアプリを効率的にデプロイ・運用する設定手順を解説。Ubuntu上にNginx、php-fpm、pm2、DB、Let's Encrypt SSLを構築、Gitで簡単なデプロイフローを確立し、異なるバージョンのアプリを同じサーバーで安全に運用する設定を紹介する。
ITニュース解説
VPS(Virtual Private Server)は、一台の物理サーバーを複数に分割し、それぞれを独立したサーバーとして利用できるサービスである。これにより、利用者自身が自由にOSやソフトウェアをインストールし、設定できるため、ウェブサイトやアプリケーションをインターネット上に公開するための基盤として広く使われている。この解説では、新たにVPSを契約したシステムエンジニアの初心者が、複数のウェブアプリケーションを効率的かつ安全にデプロイし、管理するための手順と考え方を説明する。
まず、基盤となるOSには、サーバー用途で広く利用されている「Ubuntu 22.04 LTS」というLinuxディストリビューションを使用する。このOS上で、ウェブサーバーとして「Nginx(エンジンエックス)」を導入する。Nginxは、ユーザーからのウェブアクセスを受け付け、適切なアプリケーションにそのリクエストを振り分ける役割を担う。例えば、ウェブブラウザから特定のドメイン名でアクセスがあった際、Nginxはそのアクセスをどのアプリケーションに渡すかを判断する。
アプリケーションが使用するデータは、「MySQL/MariaDB」や「PostgreSQL」といったデータベースに保存される。これらのデータベースは、ユーザー情報や商品データなど、アプリケーションの動的な情報を管理する上で不可欠な要素である。
サーバーへのアクセスは、セキュリティを考慮し、「SSHキー」を使用する。SSHキーは、パスワードよりも安全にサーバーへログインするための認証方法であり、不正アクセスを防ぐために非常に重要だ。
複数のアプリケーションを管理するために、サーバー上には整理されたディレクトリ構造を設ける。具体的には、「/var/www/」というディレクトリの配下に、それぞれのアプリケーションのプロジェクトフォルダを配置する。例えば、Laravelアプリケーションなら「/var/www/laravel-app1/」、Node.jsアプリケーションなら「/var/www/node-app1/」のように分けることで、どこにどのアプリケーションがあるか一目でわかるようになる。
異なるアプリケーションは、それぞれ異なるバージョンのプログラミング言語を必要とすることがよくある。PHPアプリケーションの場合は、「php-fpm」というプロセス管理ツールを使用する。これにより、PHP 7.4、PHP 8.1、PHP 8.2といった複数のPHPバージョンを同時にサーバー上で動作させることが可能になる。それぞれのPHPアプリケーションは、自分が必要とする特定のPHPバージョン(例えば、Laravel App1はPHP 8.1、Laravel App2はPHP 8.2)と紐付けられ、Nginxがアクセスを適切なPHPバージョンにルーティングする仕組みだ。
Node.jsアプリケーションの場合は、「NVM(Node Version Manager)」というツールを使って、複数のNode.jsバージョンを管理する。これにより、プロジェクトごとに異なるNode.jsバージョンを指定できる。アプリケーション自体は「PM2」というプロセス管理ツールによってバックグラウンドで常に動作し続けるよう設定される。Nginxは、ユーザーからのアクセスを、内部の特定のポート番号で待機しているNode.jsアプリケーションに転送する「リバースプロキシ」という仕組みを利用して、ウェブサイトとして公開する。例えば、node-app1.yourdomain.com へのアクセスは、サーバー内部の localhost:3001 で動いているNode.jsアプリに振り向けられる。
インターネット上でアプリケーションを公開するには、「ドメイン名」が必要になる。まず、「DNSレコード」という設定を使い、購入したドメイン(例: app1.yourdomain.com)がVPSのIPアドレスを指すように設定する。次に、Nginxに各ドメイン名に対応する設定ファイルを作成する。これらの設定ファイルには、そのドメインへのアクセスがどのディレクトリのアプリケーションを指すか、あるいはどのPHPバージョンを使用するかといった情報が記述される。設定ファイルは「/etc/nginx/sites-available/」ディレクトリに作成し、それを「/etc/nginx/sites-enabled/」ディレクトリへシンボリックリンクを張ることで有効化される。
ウェブサイトのセキュリティを確保し、ユーザーの信頼を得るためには、「SSL証明書」によるHTTPS化が不可欠である。ここでは、「Let’s Encrypt」という無料のSSL証明書発行サービスと、「Certbot(サートボット)」というツールを利用する。CertbotはNginxと連携し、各ドメインに対して無料でSSL証明書を取得し、自動的に設定してくれるだけでなく、90日ごとの自動更新も行ってくれるため、常に安全な通信が保たれる。
アプリケーションのデプロイ(公開)は、以下のシンプルな流れで行われる。 まず、開発したコードを「GitHub」などのバージョン管理システムにプッシュする。次に、SSHを使ってVPSにログインし、GitHubから最新のコードをサーバーにクローンまたはプル(取得)する。その後、アプリケーションの依存関係をインストールする。PHPアプリケーションならComposerとnpmを使い、Node.jsアプリケーションならnpmを使い、PM2を再起動する。必要であれば、データベースのマイグレーション(スキーマ変更)やシード(初期データ投入)も実行する。これらの作業が終われば、NginxとSSLの設定はすでに完了しているため、アプリケーションはすぐにインターネット上で公開される。
この一連の設定を行うことで、一台のVPSが複数のウェブアプリケーションを効率的にホストする強力なプラットフォームとなる。PHPアプリケーションとNode.jsアプリケーションが同じサーバー上で共存し、それぞれに独立したドメイン、SSL証明書、そしてプロセス管理が提供される。デプロイ作業も、GitHubへのプッシュとサーバーでの簡単なコマンド実行だけで完結するようになる。これは、HerokuやVercelのようなPaaS(Platform as a Service)が提供するような柔軟性と手軽さを持ちながらも、VPSの持つ完全な制御権を保持できるという大きなメリットがある。初心者でもこの流れを理解し実践することで、自分だけの多機能なサーバーを構築し、多くのアプリケーションを運用するスキルを身につけることができるだろう。