非プログラマーだが、破壊衝動が強くてすぐ開発環境をぶっ壊すから作り方を保存

#はじめに
- Window10,VirtualBox,Vagrant,CentOS8,MySQL,Rails,Vim
- 私は非プログラマーなので内容にまったく保証はありません。自己の自己による自己のための記録です。
- 見やすさ度外視、解説もほぼなし
- でも、ここはこうしたほうがいいよ、ここってどういう意味なの？どうしたらいいの？って言ってもらえたらめっちゃ嬉しいです。

## VirtualBox,Vagrant,teratermをダウンロード

  - VirtualBox 
    - https://www.virtualbox.org/

  - Vagrant
    - https://www.vagrantup.com/

  - teraterm
    - https://ja.osdn.net/projects/ttssh2/

※Windows10はVirtualization Technologyが無効になっているのでBIOSで有効にする。（メーカーによって方法が違う）

### データを管理するフォルダを作成
- コマンドプロンプトを開いて
`cd 作成したフォルダPath`

  - プラグインインストール
    - teratermログインセットアップ
    <br>`vagrant plugin install vagrant-teraterm`
    - Windos上共有フォルダのマウント
    <br>`vagrant plugin install vagrant-vbguest`

- 設定ファイル(Vagrantfile)の作成
　<br>`vagrant init`

### Vagrantfileの記述&起動
```:Vagtantfile
    config.vm.box = "generic/centos8"
    #ポートの開放
    config.vm.network :forwarded_port, guest: 3000, host: 3000
    config.vm.network :forwarded_port, guest: 6379, host: 6379
    #リアルタイム同期
    config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
    #共通化key
    config.ssh.insert_key = false
```

- 起動
`vagrant up`

- 接続
`vagrant teraterm`


## CentOSログイン後
- Curl等の接続確認
 `curl  yahoo.co.jp`
下記のように返ってきたらOK

```
<HTML>
<HEAD>
<TITLE>Document Has Moved</TITLE>
</HEAD>

<BODY BGCOLOR="white" FGCOLOR="black">
<H1>Document Has Moved</H1>
<HR>

<FONT FACE="Helvetica,Arial"><B>
Description: The document you requested has moved to a new location.  The new location is "https://www.yahoo.co.jp/".
</B></FONT>
<HR>
</BODY>
```

`curl: (6) Could not resolve host`
って返ってきたら
Windows dender等のセキュリティーソフトで止められている可能性があるので確認をする。
セキュリティーソフトを止めてみて確認をする。

-参考Ubuntuの日本語化
https://linuc.spa-miz.com/2020/08/30/ubuntu-to-ja/

- 時間設定
 `sudo  timedatectl set-timezone Asia/Tokyo`

- こいつは重要だから
`sudo dnf -y update kernel`

- 必要になるものまとめてインストール

`sudo dnf -y install rpm bzip2 dkms gcc gcc-c++ git kernel-devel kernel-headers make mysql-devel nodejs openssl-devel readline-devel ruby-devel zlib-devel zip git `

`sudo apt -y install git gcc make nodejs libncurses-dev mysql-server-8.0 unzip zip  zlib1g-dev redis rpm mecab mecab-ipadic build-essential libgcc1 libmysqlclient-dev firewalld openssl`

 
- さらにアップデート  
`sudo dnf update -y`


### Vim
/*ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー/
vimの準備
/ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー*/

- dein.tomlの設定

```:CentOS8
mkdir -p ~/.cache/dein
cd ~/.cache/dein
curl https://raw.githubusercontent.com/Shougo/dein-installer.vim/master/installer.sh > installer.sh
sh ./installer.sh ~/.cache/dein
※出力された内容を.vimrcに書き込む
```

細かい設定は.vimrcに書く。書き換えたらgithubにバックアップ
https://github.com/denden0930/vim

※VIMのバージョンが低いとdein.vimが動かないのでアップデート必要
要約：gitから最新版をクローンしてmake installする。

参考：
https://fedorakenken.doorblog.jp/archives/vim-9_0-build.html

### Github
/*ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー/
Githubへの接続
/ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー*/

- Githubへの接続準備

```:CentOS8
cd ~/.ssh/
mkdir github
cd github

#キーペアの作成
ssh-keygen -t rsa

#保存先の指定
Enter file in which to save the key (/home/hoge/.ssh/id_rsa): /home/hoge/.ssh/github/id_rsa

#github登録用の公開鍵を確認
cat id_rsa.pub
※最後のユーザー名@IPアドレスはコピーしない
```


- Githubに入って鍵の登録  
※登録方法は割愛

####設定ファイルを作成
`vi ~/.ssh/config`

```:~/.ssh/config
Host github github.com
Hostname github.com
User git
IdentityFile ~/.ssh/github/id_rsa
```

##### 権限付与
`sudo chmod 700 ~/.ssh`
`sudo chmod 600 ~/.ssh/config`

##### 接続確認
`ssh -T github`

ついでにやっとこう。
`git config --global user.name "名前の登録"`
`git config --global user.email "メールアドレスの登録"`

### Conoha
/*ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー/
Conohaログインの再設定
/ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー*/

https://www.conoha.jp/login/?mode=logout

- サーバーに入り、パスワードログインの許可
 
`sudo vi /etc/ssh/sshd_config`

```
PasswordAuthentication yes
```

- 変更の反映
`sudo systemctl restart sshd`

- ログアウト後ローカル作業

```:CenotOS8
cd ~/.ssh

#鍵の保存フォルダの作成
mkdir conoha_hoge #名前は任意

#鍵ファイルの作成 
cd conoha_hoge

キーペアの作成　
`ssh-keygen -t rsa`

Enter file in which to save the key (/home/hoge/.ssh/id_rsa): 保存先の指定をしたい場合の保存先

ローカルの公開鍵をサーバーに保存
ssh-copy-id -iローカル秘密鍵パス -p ポート番号 ユーザー名@サーバーIPアドレス

```

- sshの設定ファイルの作成  
`vi ~/.ssh/config`

```:~/.ssh/config
Host conoha_hoge
HostName サーバのIPアドレス
User ユーザー名
Port 変更したSSHのポート番号  
IdentityFile  ~/.ssh/conoha_hoge/id_rsa
```

- 権限の設定
`cd conoha_hoge`
`sudo chmod 600 id_rsa`

- ログインの確認とパスワードログインの禁止
`ssh conoha_hoge`

```:Conohaサーバー
sudo vi /etc/ssh/sshd_config

#パスワードログインを禁止。yesからnoへ変更
PasswordAuthentication no
```
- 変更の反映
  <br>`sudo systemctl restart sshd`

### ruby
/*ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー/
rubyを使う準備(バージョン管理を楽にするために管理システムの導入)
/ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー*/

```:CentOS8
git clone https://github.com/rbenv/rbenv.git ~/.rbenv

#PATHにrbenvコマンドを追加
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

#rbenvの初期化
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

#bashの再読込
source ~/.bash_profile

git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

#rbenvのバージョン確認　バージョンが出ればOK
rbenv -v

#インストール可能なリストの確認
rbenv install --list

#リストの更新
cd "$(rbenv root)"/plugins/ruby-build && git pull

#インストール
rbenv install 2.7.0

#globalで使用するrubyの設定
rbenv global 2.7.0

#rbenvの再起動？
rbenv rehash

#rubyのバージョン確認
ruby -v
```

### MySQL
/*ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー/
MySQLの準備
/ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー*/

```:CentOS8
# インストール
sudo dnf install -y @mysql
sudo systemctl restart mysqld.service

# 初期設定
※パスワード設定でこけるようになったので
先にrootのパスワード設定が必要？
sudo mysql -uroot
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '好きなPassword';
exit
mysql_secure_installation

Change the password for root ? ((Press y|Y for Yes, any other key for No) : No
このパスワードを変更する？と聞かれるので、No

> Remove anonymous users?
匿名ユーザ（ anonymous user ）を削除するか y

> Remove test database and access to it?
テストデータベースの削除しますか？ ｙ

>Reload privilege tables now?
すぐに権限テーブルをリロードして変更を有効にするか ｙ

#タイムゾーンの作と読み込み
/usr/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo > ~/timezone.sql
mysql -u root -p -Dmysql < ~/timezone.sql

```

#### システム設定
`sudo vi /etc/my.cnf.d/charset.cnf`
または
`sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf`

```:charset.cnf
[mysqld]
character-set-server = utf8mb4
default-time-zone = 'Asia/Tokyo'
[client]
loose-default-character-set=utf8mb4
```
- MySQLの再起動  
`sudo systemctl restart mysqld.service`

- socket(13)のエラー対策
- mysql_config --socket　で使用されてるソケットの場所をまずは確認してみよう

#### MySQLへのログイン
`mysql -u root -p`

```:MySQL
# データベースの作成
CREATE DATABASE your_app_development;

# vagrantユーザーの作成
CREATE USER 'vagrant'@'localhost' IDENTIFIED BY 'password';

# 権限の付与
grant all on your_app_development.* to vagrant@localhost;
```

##### 環境変数の読み込み設定
`echo "source /your/APP/path/app.env" >>~/.bash_profile`

### redis
/*ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー/
redisの準備
/ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー*/

```:CentOS8
#インストール
sudo dnf install -y @redis

#自動起動と起動
sudo systemctl enable --now redis
```

### rails
/*ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー/
railsの準備

`gem install -y rails`

/ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー*/

#### ひらがな,かななど相互互換変換する gem 'natto'の準備

```:CentOS8
 #全文検索エンジンgroongaのリポジトリを追加
sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
      
# インストール
mecab --version
sudo dnf install -y mecab mecab-ipadic

# 環境変数にmecab用のパスを追加する
#mecabのライブラリのある場所を調べる
sudo find / -name libmecab.so*

# 調べたライブラリを環境変数に追加する
echo 'export MECAB_PATH=/usr/lib64/libmecab.so.2' >> ~/.bash_profile

#bash設定の再読み込み
source ~/.bash_profile
```

```:CentOS8
#bundleの準備
gem install bundle
gem update bundler

※開発データフォルダに移動して
bundle
bundle update

※ubuntuでmysqlのインストールに失敗するときは
sudo apt install -y libmysqlclient-dev
が入ってるか確認

```

#### aliasの登録

```:CentOS8
#フォルダ移動して編集開始
echo "alias rails_vim='cd your/app/path; vi'" >> ~/.bash_profile

#rails sの起動
echo "alias rails_s='cd your/app/path; rails s -b 0.0.0.0'" >> ~/.bash_profile

#rails sが死んだとき用プロセス確認
echo "alias ps_p='ps aux | grep [p]uma'" >> ~/.bash_profile

#シャットダウン
echo "alias down_now='sudo shutdown now'" >> ~/.bash_profile

#ridgepole
- schema→ＤＢ反映
echo "alias schema_db='bundle exec ridgepole -c config/database.yml --apply -f db/schemas/Schemafile'" >> ~/.bash_profile

- ＤＢ→schema反映
echo "alias db_schema='bundle exec ridgepole -c config/database.yml -E development --split --export -o db/schemas/Schemafile'" >> ~/.bash_profile

#Capistranoデプロイ
echo "alias cap_deploy='bundle exec cap production deploy'"  >> ~/.bash_profile

#Beep音の無効化
echo "set bell-style none" >> ~/.bash_profile

```

#### 設定終わったら反映
`source ~/.bash_profile`


### firewall
/*ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー/
ポートの開放
/ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー*/


```
sudo firewall-cmd --add-port=3000/tcp --zone=public --permanent
sudo firewall-cmd --add-port=6379/tcp --zone=public --permanent

# リロード（設定の反映）
sudo firewall-cmd --reload

#設定が有効になっているか確認
sudo firewall-cmd --list-all

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 3000/tcp 6379/tcp ←ここに出ればOK
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```

### 開発時
/*ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー/
rails sの実行
/ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー*/

Alt　＋　D
でウィンドウ追加できるのでそこでrails s　を実行する。


サーバーの豆知識
環境変数の設定はコイツが良さげ
sudo vim /etc/environment