Ubuntuサーバー構築入門

Ubuntuサーバー構築入門は、LinuxディストリビューションのひとつであるUbuntuでゼロからサーバー構築をするための無料Web講座です。目標は、Webシステム開発環境の構築です。データ分析のためのデータベースの環境構築も、Web開発環境を構築すれば、だいたいできあがります。

この講座では、Ubuntu上に、スケーラブルで、現代的なリアルタイムWeb対応のWebアプリケーションを構築してみます。

Ubuntu上にWebサーバーをインストールし、Webアプリケーションを作成、WebサーバーからリバースプロキシでWebアプリケーションに接続し、外部へ公開するところまでを解説します。WebアプリケーションのサンプルとしてはPerlのWebフレームワークを使用します。

2021年11月17日現在、Ubuntuのバージョンは、Ubuntu 18で確認しています。特別な注記がない限り、Ubuntu 20、Ubuntu 16でも、動作すると想定します。

もしこの無料のUbuntu講座が良かったと感じたら他の人とシェアしてみませんか?

Ubuntuを利用できるようにする

Ubuntuを利用できるようにしましょう。

コマンドを実行できるコンソール画面を表示するところまで進んで、初期ユーザーでログインするところまで進みましょう。

ユーザーの作成

次は、コンソール画面でユーザーを作成します。Webアプリケーションの実行ユーザー(myapp)を作成するのと、自分自身のユーザー(たとえばkimoto)の二つを作成してみましょう。

ユーザー追加「-m」オプションあり、パスワードの設定、sudoグループへ追加の手順を行いましょう。

グループの作成

Webアプリケーションで必要になる「myapp-group」グループを作成します。これは、データディレクトリにWebアプリケーションのユーザー、開発ユーザー、Apacheユーザーが、アクセスするために必要になります。

次に、myappユーザーと開発者ユーザ(たとえばkimoto)を「myapp-group」に追加しましょう。

ファイアーウォールの設定

ホスティングサービスが用意するネットーワークのファイアーウォール設定で以下のポートを開いてください。またオンプレミスでサーバーを構築している場合はufwコマンドを使って、以下のポートを開いてください。

HTTP80
HTTPS443
SSHSSHで利用するポート(デフォルトの22番ポートは危険)
開発Webアプリ3000
本番Webアプリ8080

3000番ポートは、Mojoliciousの開発サーバーのデフォルトのポートです。

開発者が複数いる場合は、必要に応じて、パケットフィルタから別のポートを開放しましょう(3001番、3002番など)。

8080番ポートは、Mojoliciousの本番サーバーのデフォルトのポート番号です。

複数のWebアプリケーションを動かす場合は、必要に応じて、パケットフィルタから別のポートを開放しましょう(8081番、8082番など)。

SSHクライアントの利用

パソコン上からSSHでサーバーへの接続して、コマンド実行とファイル編集ができるようにしましょう。

SSHクライアントでコマンド実行

SSHクライアントでSSHサーバーに接続してコマンド実行するツールに、Windowsの場合はTeraTermがあります。

PuTTYなどの他のWindowsで動くSSHクライアントもありますので、お好みで。

Macの場合は、ターミナルからsshコマンドが使えます。

SCPを使ってサーバー上のファイルを編集

SCPというSSH上に構築されるプロトコルを使うとサーバー上のファイルを編集できます。

SCPクライアントとして、Windowsの場合はWinSCPがあります。

MacにもWindowsのWinSCPの代わりになるようなソフトウェアがあるので、インストールしましょう。

SSHサーバーの設定

タイムゾーンの設定

タイムゾーンを「Asia/Tokyo」に設定しましょう。

パッケージのインストール

Webシステム開発環境構築に必要なパッケージをインストールしましょう。デフォルトパッケージでは、足りないものをインストールしていきます。

インストールがうまくいかない場合があるので、最初にaptを最新のバージョンにしましょう。

まずは、ひとつのマシンの中に、Webサーバー、アプリケーションサーバー、メール送信サーバー、DBサーバーをすべて構築しましょう。

コンパイラ・リンカ

C言語・C++のコンパイラ・リンカのインストール。

テキストエディタ

HTTPクライアント

SSL通信

画像処理

圧縮・解凍

ネットワーク

リポジトリ管理

SSL証明書

プログラミング言語

プログラミング言語のインストールです。ABC順。

データ用ディレクトリの作成

Webアプリケーションからアップロードされたファイルを保存したり、バッチ処理でデータを要約したJSONを保存しておくための、データ用のディレクトリを作成します。このディレクトリは「myapp」ユーザー、他の開発ユーザーが立ち上げた、Webアプリケーションが、ファイルをアップロードする場所です。適切なパーミッションを設定しておきましょう。

もし、アタッチされたディスクを使って、それをデータ用のディレクトリにする場合は、こちらの手順を先に行っていください。「/datadrive」というデータ用のディレクトリが作成されます。

アプリケーションサーバーのデフォルトのディスクを使う場合は「/datadrive」をmkdirコマンドで作成してください。

sudo mkdir /datadrive

次に、このデータディレクトリに、アプリケーションユーザーと他の開発ユーザーが書き込めるようにします。

これで、データ用ディレクトリが完成しました。

Redisサーバー

揮発性の情報の保存サーバーであるRedisサーバーのインストールと起動確認を行います。

以下の記事の「sudo systemctl status redis-server」を実行してRedisサーバーが起動していることを確認してください。

データベースサーバー MariaDB

データベースサーバーであるMariaDBのインストールと起動確認を行います。

データベースサーバーと関連ライブラリのインストール

データベースサーバーの起動確認

以下の記事の「sudo systemctl status mariadb」を実行してMariaDBが起動していることを確認してください。

MariaDBサーバーの初期設定

データベースサーバーであるMariaDBの初期設定を行いましょう。

cron

定期プログラム実行の常駐アプリケーションであるcronの起動確認を行います。

cronの起動確認

以下の記事の「sudo systemctl status cron」を実行してApacheが起動していることを確認してください。

crontabの設定

crontabの初期設定をしておきましょう。

Apache

WebサーバーであるApacheのインストールと設定を行います。

Mojoliciousアプリケーションに接続できるようにリバースプロキシの設定を行います。

HTTPSで接続できるようにSSLの設定を行います。

Apacheのインストール

Apacheをインストールして、起動していることを確認します。

Apacheの設定ファイル

Apacheの設定ファイルのディレクトリに移動して、Apacheの設定を行います。Apacheの設定ファイルが正しいかをチェックする方法、Apacheの設定を有効にする方法を見ておきましょう。

Apacheモジュール

リバースプロキシの設定とSSLの設定に必要なApacheモジュールを有効にします。

Webアプリケーションの作成

Webアプリケーションの作成です。サンプルとしてPerlのWebフレームワークを使用しています。

安定性を求める場合は、CPANモジュールのインストールや警告表示などで不具合のない「perl-5.20.3」をインストール。

セキュアな最新版が良い場合は「perl-5.30.3」をインストール。

次にWebアプリケーションをデプロイします。

バッチプログラムがWebアプリケーションのライブラリのパスを発見できるようにしておきましょう。Webアプリケーションに加えて、バッチプログラムを作成する場合の準備をしておきます。

「~/.bashrc」に追加しましょう。

vi ~/.bashrc
export PERL5LIB=/home/myapp/webapp/lib

ドメイン名の取得とDNSサーバーの設定

ドメインを取得して、ドメイン名とサーバーIPアドレスを紐づけましょう。インターネット上でWebサイトを公開するためと、メール送信サーバーのポータビリティのある設定のために必要です。

メールアドレスの作成とDNSサーバーの設定

メール送信

メール送信を行うためにpostfixをインストールします。クラウドメールサービスに申し込んでメールを送信できるようにします。

WebサーバーとWebアプリケーションの接続

WebサーバーとWebアプリケーションの接続しましょう。リバースプロキシは、Webサーバーで受けたHTTPリクエストを、他のサーバーアプリケーションに、透過的に渡す仕組みです。Webアプリケーションを起動後、リバースプロキシを使って、HTTPリクエストを、Webアプリケーションに渡します。

SSL証明書の取得とSSLの設定

HTTPSでリクエストを受けるために、SSL証明書の発行とSSLの設定を行います。

Webアプリケーションのsystemdによる管理

OSが再起動したときにWebアプリケーションが自動起動する設定を行いましょう。

VPSやパブリッククラウドで環境構築する手順

VPSやクラウドサーバーを使った個別の手順は以下で公開しています。

更新情報

Ubuntu関連情報

Ubuntuに関連する情報です。

Linuxサーバー管理

viテキストエディタや基本的なLinuxコマンド、Linuxの仕組みについて学びたい方はこちら。

Linuxディストリビューション

Ubuntuと比較できるLinuxディストリビューションとしては、CentOSFedoraDebianRocky LinuxRed Hat Enterprise Linuxなどがあります。

スクリプト言語

Ubuntuのサーバー管理で利用できるスクリプト言語には、PerlPythonRubyなどがあります。

関連情報