今まで個人でnginxを使用する際はDockerで構築してきたのですが、本番で運用するには問題があったので直接インストールしました。

ところが、インストールしたバージョンのnginxを確認すると1.10.2なんですね。古い!!OSはUbuntu16.04です。どうにもUbuntuのパッケージセンターではこれ以上新しいのは入らないっぽいですね。

最新をインストールするとなれば、PPAリポジトリからインストールするか、自分でビルドするかになります。Dockerで構築したnginxに関しては自分でビルドしたものを使用していたのですが、これは流石にめんどくさいです。ですので、少し古くてもよいので公式(nginx.org)で配布しているnginxをインストールすることにしました。 公式のドキュメントを参考にしてます(というよりほぼそのままです)

対象のバージョンを確認


Ubuntuのコードネーム確認

Ubuntuのリリース情報から自分が使用しているバージョンのコードネームを確認します。
例えば16.04ならXenial Xerusです。

nginxのディストリビューションリスト確認

nginxのディストリビューションリストから先ほどのコードネームのものを探します。
例えば16.04ならXenial Xerusなのでxenialです。

パッケージリスト作成


/etc/apt/sources.list.d/nginx.listを作成して下記を記述します。

1
2
deb http://nginx.org/packages/ubuntu/ $codename nginx
deb-src http://nginx.org/packages/ubuntu/ $codename nginx

この時に$codenameの部分に先ほどのnginxのディストリビューションリストで確認したコードネームを指定します。16.04なら下記のようにxenialになります。

1
2
deb http://nginx.org/packages/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/ubuntu/ xenial nginx

インストール


あとは下記のコマンドでインストールします。

1
2
sudo apt-get update
sudo apt-get install nginx

この時、下記のようにGPGエラーが発生するかもしれません。

1
2
3
4
W: GPG error: http://nginx.org/packages/ubuntu xenial InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ABF5BD827BD9BF62
W: The repository 'http://nginx.org/packages/ubuntu xenial InRelease' is not signed.
N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
N: See apt-secure(8) manpage for repository creation and user configuration details.

この場合はNO_PUBKEY ********の部分(上述のエラーだとABF5BD827BD9BF62)を控えて下記のようにapt-key adv ....でキーを更新します。

1
2
3
4
5
6
7
8
9
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
Executing: /tmp/tmp.8Lb6bb6Ic7/gpg.1.sh --keyserver
keyserver.ubuntu.com
--recv-keys
ABF5BD827BD9BF62
gpg: requesting key 7BD9BF62 from hkp server keyserver.ubuntu.com
gpg: key 7BD9BF62: public key "nginx signing key <signing-key@nginx.com>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)

後は前述の通りにnginxをインストールすれば終わりです。