Ubuntuを入れたサーバの環境構築をする

<!-- Ubuntuを入れたサーバの環境構築をする -->

※この記事は[Udon Advent Calendar 2024 - Adventar](https://adventar.org/calendars/10764)の19日目の記事です。

## はじめに

この記事では、Ubuntuを入れたサーバの環境構築を行います。とりあえず思いついた「sshの設定」「IPアドレスの固定」「公開鍵認証によるログインの設定」「ufwの設定」「Apacheのインストールと設定」「Dockerのインストールと設定」「Tailscaleのインストールと設定」を行います。

事前にサーバを何らかの形でインターネットに接続しておきましょう。

## sshの設定

まずはこのサーバにsshでログインできるようにします。

```bash
sudo apt update
sudo apt install ssh
```

その後、IPアドレスを確認します。

```bash
ip a
```

いろいろ書いてありますが、inetの後に書かれているIPアドレスがLAN内でのIPアドレス(クラスが合っているか確認。10か172か192.168から始まるはず)です。これを控えておきましょう。以下では仮に`w.w.w.w`とします。

わかりづらい場合は、まず以下のコマンドを使ってnet-toolsをインストールします。

```bash
sudo apt install net-tools
```

その後、以下のコマンドを使ってIPアドレスを確認します。

```bash
ifconfig
```

こうするといくらか見やすくなります。

また、ネットマスクも確認しておきましょう。IPアドレスの固定をする際に必要になります。

では、sshでログインしてみましょう。同一ネットワーク内のクライアント機で以下のコマンドを打ち込みます。

```bash
ssh [username]@w.w.w.w
```

パスワード認証が入るので、パスワードを入力します。これでログインできればOKです。

## IPアドレスの固定

次に、このサーバのIPアドレスを固定します。IPアドレスはDHCPによって割り当てられるわけですが、クライアントならともかくサーバはIPアドレスが変わると困ることが多いです。なので、固定IPアドレスにしておきましょう。

以下のコマンドで設定ファイルを作成します。

```bash
sudo nano /etc/netplan/99_config.yaml
```

以下の内容を記述します。まずはWi-Fiを使う場合の例です。

```yaml
network:
  version: 2
  renderer: networkd
  wifis:
    network-name:
      dhcp4: false
      access-points:
        "SSID":
          password: "password"
      addresses:
        - x.x.x.x/z
      routes:
        - to: default
          via: y.y.y.y
      nameservers:
        addresses: [y.y.y.y]
```

まず、`network-name`に関しては、`ifconfig`や`ip a`で確認したネットワーク名を指定します。

`dhcp4`はDHCPを使うかどうかを指定します。`false`にして固定IPアドレスを使うようにします。

`access-points`はWi-Fiの設定です。`SSID`にはWi-Fiの名前を、`password`にはパスワードを指定します。

`x.x.x.x/z`ではサーバに割り当てるIPアドレスとネットマスクを指定します。

`z`の数字については、ネットマスクが1になっているビットの数です。例えば、`255.255.255.0`の場合は`24`です。

また、`y.y.y.y`はゲートウェイのIPアドレスです。`nameservers`にはDNSサーバのIPアドレスを指定します。基本的にはゲートウェイと同じになるはずです。これだけで大丈夫ですが、GoogleのDNSサーバを使って複数個指定してもOKです。

また、イーサネットを使う場合は以下のようになります。

```yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    network-name:
      dhcp4: false
      addresses: [x.x.x.x/z]
      routes:
        - to: default
          via: y.y.y.y
      nameservers:
        addresses: [y.y.y.y]
```

保存できたら、権限を変更して、設定を反映させます。

```bash
sudo chmod 600 /etc/netplan/99_config.yaml
sudo netplan apply
```

反映後、ssh接続していた場合はいったん切断されます。新しいIPアドレスで再接続してください。

```bash
ssh [username]@x.x.x.x
```

## 公開鍵認証によるログインの設定

パスワード認証は面倒なので、公開鍵認証によるログインを設定します。

まず、クライアント機で以下のコマンドを実行します。

```bash
cd ~/.ssh
ssh-keygen -b 4096 -f id_server
```

`id_server`は任意の名前です。わかりやすいようにサーバの名前にしておきましょう。`-b`はビット数で、多いほど安全なので4096にしておきます。

こうすると、公開鍵と秘密鍵が生成されます。前者は`id_server.pub`、後者は`id_server`です。前者の内容をコピーしておきましょう。

次に、`config`ファイルを編集します。以下の形で記述しましょう。

```bash
Host [hostname]
  HostName x.x.x.x
  Port 22
  IdentityFile ~/.ssh/id_server
  User [username]
```

`hostname`は適当に決めて大丈夫です。

そして、サーバにログインし、以下のコマンドを実行します。

```bash
mkdir .ssh
cd .ssh
echo [your_public_key] >> authorized_keys
```

`.ssh`ディレクトリや`authorized_keys`ファイルは元から存在する場合があります。

これで設定は完了です。クライアント機で以下のコマンドを実行してログインしてみましょう。

```bash
ssh [hostname]
```

パスワードを聞かれることなくログインできれば成功です。

## ufwの設定

自宅内で使う場合はあまり必要ないかもしれませんが、セキュリティのためにもufwを設定しておきましょう。

まずはufwをインストールします。元から入っている場合もあります。

```bash
sudo apt install ufw
```

次に、以下のコマンドで設定をします。まずは`ssh`接続が切れないようにします。

```bash
sudo ufw default deny
sudo ufw allow 22
sudo ufw enable
```

まず全てを拒否するように設定し、その後`ssh`接続に用いる22番ポートを許可します。最後に有効化します。有効化を最後にやらないと`ssh`接続が切れ、再接続できなくなってしまいます。

不正アクセス対策で、`ssh`接続に用いるポートを変更する場合は、それに応じたポートを許可してください。

## Apacheのインストールと設定

まずはApacheをインストールします。

```bash
sudo apt install apache2
```

インストール後、以下のコマンドでApacheを起動します。

```bash
sudo systemctl start apache2
```

そして、以下のコマンドで自動起動を設定します。

```bash
sudo systemctl enable apache2
```

これでApacheが自動起動するようになります。

次に、Apacheが表示するページが確認できるようにします。まずはファイアウォールの設定をします。httpプロトコルとhttpsプロトコルが用いるポートを開けます。

```bash
sudo ufw allow 80
sudo ufw allow 443
```

再度に有効化します。

```bash
sudo ufw enable
```

同ネットワーク内で次のURLにアクセスしてみましょう。

```
http://x.x.x.x
```

ApacheのDefaultページが表示されれば成功です。

/var/www/html/index.htmlを編集することで、表示されるページを変更できます。

## Dockerのインストールと設定

Dockerを使うと、いろいろホスティングすることが楽になります。まずはDockerをインストールしましょう。

以下の一連のコマンドを実行します。

```bash
sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
    $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo groupadd docker
sudo usermod -aG docker [username]
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

完了後、以下のコマンドを実行してDockerが正しくインストールされたか確認しましょう。

```bash
docker --version
docker-compose --version
```

それぞれバージョンが表示されれば成功です。`docker-compose`がなかったら、以下のコマンドを実行してインストールしましょう。

```bash
sudo apt install docker-compose
```

### 2025/02/16追記

上記の方法でうまくいかない場合、`snap`を用いてインストールしても良いようです。

```bash
sudo snap install docker
```

というかこっちのほうが圧倒的に楽なので、こちらを推奨します(docker-composeも同時に入るらしい)。

## Gitのインストールと設定

Gitも入れておきましょう。

```bash
sudo apt install git
```

インストール後、以下のコマンドで設定をします。

```bash
git config --global user.name [username]
git config --global user.email [email]
```

`[username]`と`[email]`は適宜変更してください。

適当なリポジトリをクローンしてみて、正しくクローンできていたら成功です。

## NetDataのインストールと設定

リソース管理のために、NetDataをインストールしておきます。

手順は以下の通り。

```bash
sudo apt install netdata
sudo nano /etc/netdata/netdata.conf
```

ここで、`bind socket to IP`をそのサーバのIPアドレスにしておきます。`xxx.xxx.xxx.xxx`形式で指定します。

それが終わったら、以下のコマンドでnetdataを有効化すればOKです。

```bash
sudo systemctl restart netdata
```

デフォルトでは19999番ポートでホストされるので、以下のコマンドによりufwに穴を開けておきます。

```bash
sudo ufw allow 19999
sudo ufw enable
```

適当なWebブラウザで`xxx.xxx.xxx.xxx:19999`を指定すると、NetDataのサイトが表示されます。

## Tailscaleのインストールと設定

[この記事](https://qiita.com/Q_Udon/items/2ab2af068a563ae07cb9)でやったように、Tailscaleをセットアップします。これでこのサーバに外部からもアクセスできるようになり、遠隔保守が可能になります。

詳しくはリンク先を参照してください。

## おわりに

サーバの環境構築ができました。ここから、各サーバに合わせて様々なアプリケーションなどを導入していくことになります。

自分が使うサーバの内容はこれからもちょくちょく記事にするつもりです。

ではまた。明日の記事でお会いしましょう。

## 参考文献

[Ubuntu 22.04 LTSで固定IPアドレスの設定 #Linux - Qiita](https://qiita.com/zen3/items/757f96cbe522a9ad397d)

[Ubuntu の IP アドレスを固定する３｜荒川仁志](https://note.com/hitoshiarakawa/n/n3a197f545196)

[Ubuntu で Docker のインストール #docker-compose - Qiita](https://qiita.com/tf63/items/c21549ba44224722f301)

[ubuntu 24.04 LTSで自宅サーバー構築（NetDataの設定） #Linux - Qiita](https://qiita.com/sqoot610/items/1b72f6f3c8331b609ab6)