Ubuntu16.04の初期設定

# Ubuntu16.04 のインストール
refs: https://help.sakura.ad.jp/hc/ja/articles/115000045522-OS%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E6%83%85%E5%A0%B1-Ubuntu16-04-LTS-%7D

## vagrant

```ruby:Vagrantfile
config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.customize ["modifyvm", :id, "--cableconnected1", "on"]
  end
```

```
vagrant up
```

## apt-getを更新
```
sudo apt-get update
sudo apt-get upgrade -y
```

## hostの設定
hostnameの設定

```
sudo hostname my-hostname
sudo vim /etc/hostname
# host名を書き換え
```

ループバックアドレスに設定したホスト名を設定

```
sudo vi /etc/hosts
# 127.0.0.1 my-hostname
```

## 日本語設定
```
sudo apt-get -y install language-pack-ja-base language-pack-ja ibus-mozc
sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
```

## タイムゾーン設定
```
sudo timedatectl set-timezone Asia/Tokyo
```

## ユーザーの作成
```
adduser username
# useradd はホームディレクトリが作成されない
# sudo権限必要な場合は追加
gpasswd -a username sudo
```

## sudoの実行にパスワードを要求しない
```
sudo visudo
# %sudo  ALL=(ALL:ALL) NOPASSWD:ALL
```

## vim & git & zsh
```
sudo apt-get install -y vim git zsh
```

## ssh鍵認証
```
vi ~/.ssh/authorized_keys
# ssh keyを入力
chmod 600 ~/.ssh/authorized_keys

# sshdの設定を変更
sudo vim /etc/ssh/sshd_config
# PasswordAuthentication no
# パスワードログインを許可しない
sudo systemctl restart ssh
```

## iptables
```
# さくらVPSだとデフォルトがこれ
sudo vi /etc/iptables/iptables.rules

sudo iptables-restore < /etc/iptables/iptables.rules
```

## zsh の設定
refs: https://qiita.com/sayama0402/items/ac9e078b024c3287f99f

ログインシェルを変更する

```
chsh
# /usr/bin/zsh
```

## ruby
rbenvのインストール

```
sudo apt-get install -y libreadline-dev git build-essential libssl-dev
# 最新のものがいい場合は直接リポジトリから引っ張ってくるにする
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv -v
```

capistrano でrbenvのパス見つけられないのでリンク貼っておく

```
# /home/vagrant の箇所は適宜変更すること
sudo ln -s /home/vagrant/.rbenv /usr/local/rbenv
```


PATHを設定

```
echo 'export RBENV_ROOT="/usr/local/rbenv"'     >> /etc/profile.d/rbenv.sh
echo 'export PATH="/usr/local/rbenv/bin:$PATH"' >> /etc/profile.d/rbenv.sh
echo 'eval "$(rbenv init -)"'                   >> /etc/profile.d/rbenv.sh

source /etc/profile.d/rbenv.sh
```

rubyをインストール

```
rbenv install 2.4.2
rbenv global 2.4.2
rbenv rehash
ruby -v
```
## nodejs
apt-getでnode,npm,yarnをインストールする
※バージョン管理必要ならnodenv等で入れたほうがいい

```
sudo apt-get install -y nodejs npm
sudo ln -s /usr/bin/nodejs /usr/bin/node
```

n パッケージでnodeを最新のバージョンにする

```
sudo npm cache clean
sudo npm install n -g
sudo n stable
sudo ln -sf /usr/local/bin/node /usr/bin/node
node -v
sudo npm install -g yarn
```

apt-getでいれた古いバージョンを削除する

```
sudo apt-get purge -y nodejs npm
```


## mysql
インストール

```
sudo apt install -y mysql-server mysql-client libmysqlclient-dev
# rootのパスワード設定する画面でてくるので設定しておく
```

バージョンの確認

```
mysql --version
# mysql  Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using  EditLine wrapper
```

文字コードの設定

```
sudo vi /etc/mysql/my.cnf
```

以下を追加

```
[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
default-storage-engine=INNODB

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8
```


接続先のIPの制限を解除する

```
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
# bind-address            = 0.0.0.0
```

起動と自動起動設定

```
sudo systemctl restart mysql
sudo systemctl enable mysql
```

ユーザーの作成

```
GRANT ALL PRIVILEGES ON *.* TO username@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
```

## redis
インストール

```
sudo apt-get -y install redis-server
```

設定を調整

```
sudo vi /etc/redis/redis.conf
# 接続元のホストを指定
# bind 0.0.0.0
```

起動と自動起動設定

```
sudo systemctl restart redis
sudo systemctl enable redis
```

## mongodb
refs: https://www.trifields.jp/how-to-install-mongodb-on-ubuntu-2751
MongoDBの公開GPGキーを登録

```
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
```

パッケージの登録

```
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
```

パッケージデータベースを更新

```
sudo apt-get update
```

インストール

```
sudo apt-get install -y mongodb-org
```

起動と自動起動設定

```
sudo systemctl restart mongod
sudo systemctl enable mongod
```

確認

```
mongo
```


WARNING: Access control is not enabled for the database. の設定

```
# 鍵の作成
sudo mkdir /etc/ssl/mongodb
cd /etc/ssl/mongodb
sudo openssl rand -base64 756 > security.key
sudo chmod 400 security.key
sudo chown mongodb:mongodb /etc/ssl/mongodb/security.key
# 鍵の設定
sudo vim /etc/mongod.conf
# security:
#  keyFile: /etc/ssl/mongodb/security.key
```

再起動

```
sudo systemctl restart mongod
```

## postgresql
パッケージの登録

```
sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
```

公開鍵を登録

```
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
apt-key list
```

パッケージの更新

```
sudo apt-get update
```

インストール

```
sudo apt-get install -y postgresql
```

確認

```
psql --version
# psql (PostgreSQL) 10.1
```

起動と自動起動の設定

```
sudo systemctl restart postgresql
sudo systemctl enable postgresql
```

## nginx

```
curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
VCNAME=`cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2` && sudo -E sh -c "echo \"deb http://nginx.org/packages/ubuntu/ $VCNAME nginx\" >> /etc/apt/sources.list"
VCNAME=`cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2` && sudo -E sh -c "echo \"deb-src http://nginx.org/packages/ubuntu/ $VCNAME nginx\" >> /etc/apt/sources.list"
sudo apt-get update
sudo apt-get install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
```


## 必要に応じてportを開放する
起動しているサービスのポートを確認

```
netstat -ant
```