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コマンドを使って、以下のポートを開いてください。
HTTP | 80 |
HTTPS | 443 |
SSH | SSHで利用するポート(デフォルトの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のインストールと起動確認を行います。
データベースサーバーと関連ライブラリのインストール
- mariadb-clientのインストール - MariaDBクライアント
- mariadb-serverのインストール - MariaDBデータベースサーバー
- libmysqlclient-dev のインストール - MariaDBクライアントのヘッダとライブラリ
- libmariadb-devのインストール - 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モジュールを有効にします。
- ApacheでHTTPSで通信できるようにmod_sslを有効化
- Apacheでmod_rewriteモジュールを有効にする
- Apacheでmod_headersモジュールを有効にする
- Apacheでmod_proxyモジュールを有効にする
- Apacheでmod_proxy_httpモジュールを有効にする
- ApacheでWebSocketリバースプロキシのproxy_wstunnelモジュールを有効にする
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ディストリビューションとしては、CentOS、Fedora、Debian、Rocky Linux、Red Hat Enterprise Linuxなどがあります。