Linuxサーバーの環境構築の自分用メモ（Ubuntu 22.04.1 LTS, ConoHa 1GB）

## 環境

ConoHa でサーバーを立てる際の参考になれば

- Unbuntu 22.04.1 LTS
- ConoHa 1GBプラン

## ユーザーの作成

```bash
[ローカル]$ ssh root@NNN.NNN.NNN.NNN -i ~/.ssh/XXXXXXXX.pem
```

### adduserで対話的にユーザーを作成

ConoHa で VPS を立てた際は root ユーザーしか存在しないようなので、新しく好きな名前でユーザーを作成します。
Ubuntu では adduser と useradd は違うようなので注意。

> cf. 【Ubuntu】useraddとadduserの違い
> https://qiita.com/kaitoland/items/386ebc94c3efa17bbecb

```bash
$ adduser yuinore
```

### ユーザーのホームディレクトリに公開鍵をコピーする

ConoHa では Root ユーザーのホームディレクトリ（`/root`）に公開鍵が登録されるので、それを `/.ssh/yuinore` にコピーする

```bash
ls -alh /root/.ssh/authorized_keys
mkdir /home/yuinore/.ssh/
cp /root/.ssh/authorized_keys /home/yuinore/.ssh/
chmod 700 -R /home/yuinore/.ssh/
chown yuinore:yuinore -R /home/yuinore/.ssh/
```

### yuinore ユーザーで sudo できるように修正

> cf. Ubuntuでsshのrootログインを禁止する
> https://qiita.com/patao-tech/items/3ed828d6769a7adf5a12

```
visudo
```

以下を追記

```
%yuinore  ALL=(ALL) ALL
```


### 作成したユーザーでログインできるかどうか確認

```bash
[ローカル]$ ssh yuinore@NNN.NNN.NNN.NNN -i ~/.ssh/XXXXXXXX.pem
```

sudo できることも確認

```bash
sudo echo hello
```

## ssh設定の修正

### rootログインを禁止する

root ユーザーで SSH ログインできるとセキュリティ的に良くないという話があるので禁止します。

```bash
sudo vi /etc/ssh/sshd_config
```

```diff_shell:/etc/ssh/sshd_config
- PermitRootLogin yes
+ PermitRootLogin no
```

```bash
sudo systemctl restart sshd
```

### ポートを変更する

ポート変更も簡単なので一応やっておきます。別に変えなくても大丈夫です。

```bash
sudo vim /etc/ssh/sshd_config
```

```diff_shell:/etc/ssh/sshd_config
- # Port 22
+ Port 22
+ Port ****
```

```bash
sudo systemctl restart sshd
sudo ufw allow ****/tcp
sudo ufw reload
```

この状態でログインできることを確認
確認できたら22番ポート削除

```bash
sudo vim /etc/ssh/sshd_config
```

```diff_shell:/etc/ssh/sshd_config
- Port 22
+ # Port 22
  Port ****
```

```bash
sudo systemctl restart sshd
sudo ufw status
sudo ufw delete allow OpenSSH
sudo ufw reload
```

## インターネット疎通確認

```bash
ping -c 4 8.8.8.8
ping -c 4 yahoo.co.jp
curl -L yahoo.co.jp
```

## キーボード入力の確認

ConoHa ではデフォルトで日本語キーボードが設定されているのでそのままでOK

```bash
echo あいうえお
echo '!"#$%&()=~|'
```

## タイムゾーンの設定

ConoHa ではデフォルトでタイムゾーンが日本になっているので設定しなくてもOK

```
date '+%Y/%m/%d %H:%M:%S %z'

sudo timedatectl set-timezone Asia/Tokyo
date '+%Y/%m/%d %H:%M:%S %z'
```

## スワップ領域の設定

ConoHa ではデフォルトでスワップ領域が設定されていることを確認する。
設定しないと apt コマンドの実行中にメモリ不足のエラーが起きたりする（と思う）

```bash
$ free -h
               total        used        free      shared  buff/cache   available
Mem:           969Mi       246Mi        71Mi       1.0Mi       650Mi       569Mi
Swap:          2.0Gi       0.0Ki       2.0Gi
```

```bash
$ swapon -s
Filename               Type           Size            Used           Priority
/swap.img              file           2097148         560            -2
```

## .bashrc の編集

```bash
vi ~/.bashrc
```

```diff_shell:~/.bashrc
- HISTSIZE=1000
- HISTFILESIZE=2000
+ HISTSIZE=20000
+ HISTFILESIZE=20000
+ alias be='bundle exec'
```

```bash
source ~/.bashrc
```

## 基本パッケージのインストール

curl、wget、vim、gitはデフォルトで入ってました。ありがたい。

```bash
sudo apt -y update
sudo apt -y install curl wget zip unzip vim git tig
sudo apt -y install mlocate
sudo updatedb
```

```bash
vim ~/.vimrc
```

```vim:~/.vimrc
scriptencoding utf-8
set encoding=utf-8

filetype plugin indent on
:set tabstop=2
:set shiftwidth=2
:set expandtab

cnoremap w!! w !sudo tee > /dev/null %<CR> :e!<CR>

set list
set listchars=tab:»-,trail:-,extends:»,precedes:«,nbsp:%
```

root ユーザーで vim を叩いた場合にも適用されるようにする

```bash
sudo ln -s ~/.vimrc /root/
```

```bash
git config --global user.email "yuinore@hotmail.co.jp"
git config --global user.name "yuinore"
git config --global core.editor "$(which vim)"
```

## nginxのインストール

apache2 が動いていた場合は必ず disable しておく

```bash
sudo systemctl disable apache2
```

```bash
sudo apt -y install nginx
sudo ufw app list
sudo ufw allow 'Nginx HTTP'
sudo systemctl restart nginx

sudo systemctl is-enabled nginx
sudo systemctl enable nginx
sudo systemctl is-enabled nginx # 確認
```

## Javaのインストール

バージョンはお好きなものを

```bash
sudo apt -y install openjdk-17-jdk
java --version
```

## Python3 のインストール (pyenv使用)

前提ライブラリのインストール

> ubuntu 20.04 / 18.04 に pyenv をインストール
> https://zenn.dev/neruo/articles/install-pyenv-on-ubuntu

```bash
sudo apt install \
  build-essential libssl-dev zlib1g-dev \
  libbz2-dev libreadline-dev libsqlite3-dev curl llvm \
  libncursesw5-dev tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev \
  libopencv-dev git
```

```bash
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec $SHELL
pyenv --version
pyenv install --list | grep '3.11.'
pyenv install 3.11.0
pyenv versions
pyenv global 3.11.0
pyenv version
```

## MySQL のインストール

```bash
sudo apt install -y libmysqlclient-dev
sudo apt install -y mysql-server
```

サーバーではさすがにパスワードなしでログインできるようにはしないので、パスワードを一応設定する

```bash
sudo mysql -u root
```

```sql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '【パスワード】';
```

パスワードを使用して sudo なしでログインできることを確認

```bash
sudo systemctl restart mysql
mysql -u root -p
```

## ruby (rbenv, bundler)

```bash
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="~/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
rbenv -v
 
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
sudo apt install -y build-essential libssl-dev zlib1g-dev
rbenv install --list
rbenv install 3.1.2
rbenv global 3.1.2
ruby -v
```

```bash
gem update
gem install bundler
bundle -v
```

## php

```bash
sudo apt -y install php
sudo apt -y install php-fpm php-mysql
```

## RMagick

```bash
sudo apt -y install libmagickcore-dev
```

## node (nodenv + yarn)

```bash
git clone https://github.com/nodenv/nodenv.git ~/.nodenv
echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(nodenv init -)"' >> ~/.bashrc
source ~/.bashrc
nodenv -v
```

nodenv-yarn-install を導入して、 nodenv install コマンドの実行と同時に yarn もインストールします。

```bash
git clone https://github.com/nodenv/node-build.git $(nodenv root)/plugins/node-build
git clone https://github.com/pine/nodenv-yarn-install.git "$(nodenv root)/plugins/nodenv-yarn-install"
nodenv install --list
nodenv install 16.15.0
nodenv global 16.15.0
curl -fsSL https://github.com/nodenv/nodenv-installer/raw/master/bin/nodenv-doctor | bash
nodenv versions
nodenv version
yarn -v
```

## pyonpyon

かわいい。

```bash
mkdir -p ~/projects
cd ~/projects/
git clone https://github.com/sgymtic/sl.git pyonpyon
cd pyonpyon/
git checkout pyonpyon
make
./pyonpyon
sudo cp pyonpyon /usr/local/bin
echo 'alias sl="pyonpyon"' >> ~/.bashrc
source ~/.bashrc
sl
```