---
# System prepended metadata

title: 研修課題ノート

---

# 研修課題ノート
---
## Linux 入門

**◆Ubuntu導入方法**
　microsoftのストアから入手(verは確認)
　画面に従い、ID及びPWは任意のものを入力

1. **Linux 用語**
* グループ
グループで分けられた複数人でファイルを管理することができる
所有者が実行出来る権限
グループが実行出来る権限
その他のユーザが実行出来る権限等に分けられている
https://eng-entrance.com/linux-user-group

* パーミッション
ディレクトリ一個一個に許可属性を与え、管理出来るようになっている仕組みのこと
読み取りや書き込み等を制限することができる

* マウント
HDDやUSBメモリ、DVD-ROMなどのフォーマット済みの領域（ファイルシステム）を指定したディレクトリ（マウントポイント）と一時的に結び付けてアクセスできるようにする
https://www.atmarkit.co.jp/ait/articles/1802/15/news035.html
mount [オプション] デバイス [マウントポイント]
mount [オプション] マウントポイント
mount -l

* Proc
procファイルシステムとはカーネル(OSの根幹となるもの)の現在の状態を示す特別なファイルが置いてある階層
cat meminfo |head
↑カーネルの状態等が出てくる

* プロセス
プログラムが動いている実行状態を表す全ての情報
ex)lsコマンドであれば実行中はlsのプロセスが生成されるとなる
CPUが、プログラムに記載された順番と命令文にしたがって、あるメモリのデータに対して演算を行なっている状態。
https://qiita.com/uguis410/items/b568b28786516a105f34

* スレッド
1つのプロセスから生成される実行単位
性能の観点からはスレッドを起動するほうが効率的
同じリソースの共有があるため排他制御等を行う

* ジョブ
コンピューターに実行させる作業のまとまりのこと
パイプ等により異なる２コマンドを同時に実行した場合も１つのジョブになる
バックグラウンドジョブ・・・コマンドラインの最後に「&」を入れた状態
フォアグラウンドジョブ・・・コマンドを入力してEnterした状態。処理が終わればプロンプトが出る

* パイプ
コマンドとコマンドを連結させるもの
プロセス間での通信を可能にするチャネル
解凍はzcatを使用、結果をcstreamで律速、tarでアーカイブ展開など組み合わせを用いて効率的に作成できる

* FIFO
名前付きパイプと呼ばれるプロセス間の通信の一種
汎用的なプロセス間通信手段

* 終了ステータス
echo $?を入力
正常終了時exit 0
異常終了時には exit 1

* シグナル
プロセスとプロセスの間で通信を行う際に使用される信号のこと
シグナルを受け取ったプロセスは何らかの動作を行う

* サービス
Linux起動時に実行され、システム終了までバックグランドで動き続けるプログラム
/etc/init.d　配下にサービスの起動に関わるスクリプトがまとめられている。


2. **Linuxコマンド**
$ ls　--list表示
$ ls -l ファイル名　--パーミッション情報等の表示
※パーミッションの制約情報等は随時調べる
$ echo 任意文字  (> ファイル名)　--標準出力を行う
$ mkdir フォルダ名　--フォルダの作成
$ cd ディレクトリ名/　--ディレクトリ移動
$ touch ファイル名　--ファイル作成
$ echo hello　--コマンド上出力
$ cat ファイル名　--ファイルの中身を閲覧
$ rm ファイル名　--ファイル削除
$ cd ..　--前ディレクトリに戻る
$ rmdir --フォルダ名/　--フォルダの削除
$ pwd　--現在のディレクトリ表示
$ less(オプション) ファイル名
  more(オプション) ファイル名　--ファイルの閲覧が可能、オプションは必要な文字のパターンを入れたりすることができる。
$ yes 任意文字　--連続した文字の表示
$ grep --ファイル内の文字列に対して正規表現を使って検索し表示するコマンド
$ pgrep [オプション] [プロセス名のパターン]　--実行中のプロセスの中から、プロセス名やユーザー、グループ、端末名などを表すパターンを使ってプロセスIDを探すコマンド
$ ps　--Linux上で動作しているプロセスを確認する(オプション複数存在)
$ top　--システム全体の負荷,プロセス, CPU, メモリ, スワップの統計情報等を確認できる
>https://qiita.com/k0kubun/items/7368c323d90f24a00c2f
↑topコマンドを使用する際のオプション

$ sed　--ファイルや表示の置換が可能
$ mkfifo　--fifoの作成
$ man コマンド名　--マニュアルを参照する
$ kill　--プロセスの終了
$ systemctl start --サービスの起動
>https://qiita.com/sinsengumi/items/24d726ec6c761fc75cc9
↑systemctl コマンド一覧

**<vi コマンド>**
$ vi ファイル名　--編集モード ---i　インサート　--esc　編集終了　--:wq!　保存して終了
viコマンドは必要に応じて調べる
https://prev.net-newbie.com/linux/commands/vi.html


## Apache 入門

**1. Apacheのインストール**
---

**インストール後のコマンドについて**

公式サイトからApacheをダウンロードした後、起動させ停止させる。
サービスに追加してしまえばGUIで起動させることも可能
```
インストール
httpd -k install
```
インストールするディレクトリは各自のApacheのダウンロード先に準ずる
※管理者権限でcmdを使用
```
cd 各自のディレクトリ～Apache24\bin
ex)C:\Program Files\Apache\Apache24\bin
```

**Apacheを操作するためのコード**

開始
`httpd -k start`


停止
```
httpd -k stop
または
httpd -k shutdown
```

再起動
`httpd -k restart`

**ポート番号は必要に応じて変更する。**

Apache24\conf　下のhttpd.confファイル編集
ex)Listen 80　→ Listen 8080
使用しているアカウントに書き込み権限が無い場合は以下手順で付与させる
https://qiita.com/murashi/items/708acd6b37aaf46b4fec

---
**2.Apache基本設定**
---
**httpd.confファイル 用語 メモ**

* ServerName: 自分自身のホスト名を示す時に使われる名前を指定する際に使用される。
→「ホスト名:ポート番号」の形式で指定する
   ex)localhost:8080

* ServerAdmin: サーバーエラー等が起きた際の問い合わせ用メールアドレス

* ServerRoot: 起点となるディレクトリ
→最初に明記しておけば、後にパスを追加する際に短縮できる

* Listenディレクティブ: 外部からリクエストを受け付けるポート番号を指定する。
 ex)ポート番号8080で指定したい場合→Listen 8080
 →指定するポート番号は複数可能

* Include ディレクティブ: 補助設定ファイルを読みこむ場合に使用する
→分割整理することによって管理を容易にする。

* セクションコンテナ: 影響を与える範囲を指定して設定を記述する。
ex)<Directory "C:\Program Files\Apache\Apache24\bin">....    </Directory>
   <FilesMatch "^¥.ht">....     </FilesMatch>ワイルドカード、正規表現も使用可能
   <Location URLパス名>....     </Location>URLパス名に対して設定が有効になる。

* ローカル・ループバック・アドレス: IPアドレス127.0.0.1のこと。自分自身を指す。

* hostsファイル: C:¥WINDOWS¥system32¥drivers¥etc¥に設置されているファイルのこと
IPアドレス　　ホスト名で登録されている
　ex)127.0.0.1 localhost
   
---
**3. コンテンツの設置**
---
Webサーバとしてクライアントに公開するコンテンツの設置方法や外部からのアクセス方法まとめ

* DocumentRoot・・・コンテンツのリクエストに対して対応するコンテンツを配置しておく場所
※主にhtdocsが配置場所になることが多い
以降変数DocumentRootでhtdocsがアクセス可能になる

* DirectoryIndex・・・ファイル名を指定しないリクエストがあった場合、どのファイルを返すかを指定できる
複数ファイルが指定可能
ex)DirectoryIndex index.html index.htm index.php

* Alias・・・ドキュメントルートに限定せずドキュメントの設置が可能になる

* MIMEタイプ・・・mime.typesにMIMEタイプと対応する拡張子を登録する。(今回はPHP等を追加)

---
**4. アクセス制限**
---
前バージョンのものと2.4でアクセス許可の仕方が変わっているので注意する。
https://www.softel.co.jp/blogs/tech/archives/3142
```
ex)Allow from all→Require all granted
Allow from env="変数名"→Require env 変数名
```

* リンク制限・・・SetEnvIf Referer リンク元情報(URL) 設定する環境変数(任意の変数)
リファラーを使うことで直接URLにアクセスすることができなくなる
セキュリティソフトによってはリファラーを消すものがあるので注意する

**認証の設定**
AuthType 認証方式(basic/digest)
AuthName 認証領域
AuthUserFile パスワードファイル

**許可するユーザー**
Require オプション ユーザー名1 ユーザー名2 ・・・で認証を許可するユーザーを追加する

**パスワードファイル新規作成**
htpasswd -c "パスワードファイルのパス" ユーザー名
ユーザーの追加
htpasswd "パスワードファイルのパス" ユーザー名
ユーザーの削除
htpasswd -D パスワードファイル名 ユーザー名

**グループファイルの作成(例)**
```
staff: yamada tanaka suzuki
sales: yamada suzuki
other: uchida
```
グループファイルはテキストファイルで1から作成する必要がある
httpd.confにも以下を記述
```
    AuthGroupFile "グループファイルのパス"
    Require group グループ名
```
**条件の設定方法**
どちらかだけの条件が通ればアクセスを許可する設定
→Satisfy any

両方の条件が満たされた場合だけアクセスを許可する設定
→Satisfy all

**ベーシック認証**・・・ユーザー名とパスワードに関する情報をサーバに対して送信する時にプレインテキストで送られる
**ダイジェスト認証**・・・ユーザー名とパスワードに関する情報をMD5で暗号化してから通信する方式

---
**5. PHP利用のための設定**
---
PHPをインストールしておく
https://www.javadrive.jp/php/install/index1.html
※インストールしたディレクトリを覚えておく

---
**6. CGIの利用**
---
perlのダウンロードを行う
https://tutorial.perlzemi.com/blog/20080602121231.html
CGIとはリクエストがあった際にサーバ側で実行してその結果をブラウザに返すファイルのこと

* ScriptAlias・・・設定したファイルに対する要求が合った場合にCGIプログラムの要求があったと判断して実行した結果を返す
ex)ScriptAlias 見た目上のディレクトリ 実際のディレクトリ

**CGIの実行を許可するにはディレクトリに対して設定を行う**
`Option ExecCGI`

**.plや.cgiが付いたファイルに対してリクエストがあった場合に、CGIとして実行した結果を返すようにする**
`AddHandler cgi-script .pl .cgi`

---
**7. SSLによる暗号化通信**
---
OpenSSLとは・・・ンターネット上で標準的に利用される暗号通信プロトコルであるSSLおよびTLSの機能を実装したプログラムの一つ
https://blog.codecamp.jp/ssl-mechanism

---
**8. ログファイルの詳細**
---
**CustomLogでログファイルの設定を行う**
`CustomLog ログファイルの場所 ログのフォーマット名`

 Errorlogでエラーログファイルの位置を指定する

**ログフォーマットのカスタマイズ**
https://www.adminweb.jp/apache/log/index2.html

**Loglevelでエラーのレベルを記録する**
→上位のエラーレベルもすべて記録されるようになる。

**logresolveを使用してIPアドレスをホスト名に変換する**
`logresolve < 対象ログファイル`
**別ファイルとして保存する**
`logresolve < 対象ログファイル > 変換後ログファイル`

**ログのローテーションを設定する**
`CustomLog "|rotatelogs 対象ログファイル 指定時間" ログのフォーマット名`
ログファイルを日付等で分けて格納することが可能になる

---
**9. 仮想ホストの設定**
---
**仮想ホスト**・・・1つのサーバー上で複数ドメインを同時に運用することができるようになる。
IPアドレスの節約効果やサーバー機器を減らすことで運用コストの削減などのメリットがある。

* IPベース・・・1台のサーバに複数のIPアドレスを持っており、それぞれのIPアドレスに別々の仮想ホストを割り当てる
* 名前ベース・・・IPアドレスは一つしかなく、Hostsのヘッダーでどこへアクセスするのかを割り当てる

**IPベース設定例**
```
<VirtualHost 192.168.1.1:80>
    ServerName     www.adminweb.jp
    ServerAdmin    hogehoge@adminweb.jp
    DocumentRoot   "C:/Program Files/Apache/Apache24/adminweb_docs"
    CustomLog      logs/adminweb.access.log common
    ErrorLog       logs/adminweb.error.log
</VirtualHost>
・
・
・
<VirtualHost 192.168.1.2:80>
    ServerName     www.officepro.jp
    ServerAdmin    hogehoge@officepro.jp
    DocumentRoot   "C:/Program Files/Apache/Apache24/officepro_docs"
    CustomLog      logs/officepro.access.log common
    ErrorLog       logs/officepro.error.log
</VirtualHost>
```
どこ宛にアクセスがあるかによって返すコンテンツを返る

**名前ベース設定例**

NameVirtualHost IPアドレス:ポート番号
1つだけしかIPアドレスが無い場合には「*」でも可

別の動作をさせたい場合には以下のように設定

```
NameVirtualHost *:80
<VirtualHost *:80>
    ServerName     www.adminweb.jp
    ServerAdmin    hogehoge@adminweb.jp
    DocumentRoot   "C:/Program Files/Apache/Apache24/adminweb_docs"
    CustomLog      logs/adminweb.access.log common
    ErrorLog       logs/adminweb.error.log
</VirtualHost>
・
・
・
<VirtualHost *:80>
    ServerName     www.officepro.jp
    ServerAdmin    hogehoge@officepro.jp
    DocumentRoot   "C:/Program Files/Apache/Apache24/officepro_docs"
    CustomLog      logs/officepro.access.log common
    ErrorLog       logs/officepro.error.log
</VirtualHost>
```

hostファイルに以下を記述
```
127.0.0.1       www.adminweb.jp
127.0.0.1       www.officepro.jp
```

httpd-vhosts.confをhttpd.conf上で有効にする
httpd-vhosts.confファイルの設定を自分のパス等に合わせて変更する


httpd.confに以下記載
```
<Directory "C:/Program Files/Apache/Apache24/adminweb_docs">
　Require all granted
</Directory>

<Directory "C:/Program Files/Apache/Apache24/officepro_docs">
　Require all granted
</Directory>
```

仮想ホストに登録されてないホスト名でアクセスがあった場合
通常→最初に登録されている(上記であればadminweb.jp)が表示される
「ServerAlias ホスト名」　を記載する→別名ホスト名として登録でき、アクセスがあった際に表示可能

---
**10. Tomcatとの連携**
---
**Tomcat**・・・Java Servletを動かすときに必要なソフト。サーブレットコンテナのことを指す。

下記サイトを参考にしてTomcatをインストールしておく
https://www.javadrive.jp/servlet/

クラスパスを通しておく
https://www.javadrive.jp/servlet/install/index6.html
サーブレットの記事は時間があるときに読んでおく

必要なサーブレットクラスは%CATALINA_HOME%¥lib¥のディレクトリ下でコンパイルする
`ex)javac HelloWorld.java`

Apache経由で接続する際はserver.xmlの該当箇所をコメントにする。
```
ex)
    <Connector
port="8080"               maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />
```
**→localhost8080では接続できなくなる**

httpd.confのmod_proxy,mod_proxy_ajpを読み込む。

下記をhttpd.confに記載する。
```
<Location /hello/>
    ProxyPass ajp://localhost:8009/hello/
</Location>
```

Include conf/extra/httpd-proxy.confを追記して該当ディレクトリにhttpd-proxy.confを追加しておく

---
**11. 動作状況の確認**
---
サーバーの動作状況を確認する
`SetHandler server-status`

※記述が古いためローカルのみアクセス許可する場合は以下を設定しておく
`Require host localhost`

処理しているURLやリソースに関する情報も合わせて取得
`ExtendedStatus On`

下記のコメントを外して読み込みをするApacheの設定情報を取得する
```
LoadModule info_module modules/mod_info.so
Include conf/extra/httpd-info.conf
```

以下の記述をhttpd-info.confに記載する
```
<Location /server-info>
    SetHandler server-info
</Location>
```

http://localhost/server-infoへアクセス

---
# Railsサイト構築
---
**◆環境構築**
Virtual boxとVagrantをローカル環境にダウンロードする
https://www.virtualbox.org/     // VirtualBox
→ubuntu上で行う際は、Linux版をダウンロード
https://www.vagrantup.com/      //Vagrant
**※バージョンが違った場合はコマンドがうまく実行できないためバージョンは合わせておく**



**◆以下コマンドを実行**
host $ git clone https://github.com/iz-j/rails-dev-ja.git
host $ cd rails-dev-ja

以下サイトを参考にVirtual boxを構成
https://qiita.com/apatchk/items/8b1029ceaee60d3e18a2

`cd rails-dev-ja`で`vagrant up`を実行する

以下サイトを参考に仮想環境にRubyをダウンロードする
https://qiita.com/kt_flcl/items/50504b125e2c4eaee23d

rubyインストールコマンド↓
```
Rubyをコンパイルするために必要なパッケージ
yum -y install gcc zlib-devel openssl-devel readline-devel libffi-devel
```
```
ソースを落として解凍↓
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.gz
tar zxvf ruby-2.5.5.tar.gz
cd ruby-2.5.5
./configure
make
make install
```

今回はrailsのバージョン5.2.4.4を使用
`gem install rails -v 5.2.4.4`

rbenvが別のものを使用してしまう場合は↓
`sudo /usr/local/bin/gem install rails -v 5.2.4.4`

Administrateは、Railsの4.2から5.0まで。
Ruby2.4以降をサポートしているためインストールの際に注意する。


**◆ rails アプリケーション作成**
`rails new アプリ名`
以下参考にrailsのアプリを作成する
https://www.techscore.com/tech/Ruby/Rails/quick-start/Rails3/

アプリを作成したら
`bin/rails server -b 0.0.0.0`を打ち込む

下記エラーが出た際は
`Specified 'sqlite3' for database adapter, but the gem is not loaded. Add gem sqlite3 to your Gemfile`
下記サイトを参考にGemfileを編集する
https://qiita.com/norifumi/items/dea416617f2026047120

※必要に応じてbundleコマンドを打ち込んでインストールを行う

**◆サーバー起動**
`rails s`　を打ち込む(rails serverと同義)
http://localhost:3000/　に接続する
→サンプル起動画面が立ち上がる

→エラーでPermission deniedが出る際は
以下サイトを参考にSSH接続が可能になるように設定する
https://qiita.com/0ta2/items/25c27d447378b13a1ac3

**◆Administrateインストール**

・GemfileにダウンロードするAdministrateのバージョンを記載する
https://qiita.com/mm36/items/c36c7a95e4e836dbffef

※nokogiriがインストールできずにbundle installが成功しない場合は以下を参考にnokogiri をインストール
https://makky12.hatenablog.com/entry/2016/04/26/200812

**◆rbenvを使用する方法**
https://qiita.com/tatsurou313/items/2a67075ae2416922bff0

---
# WindowsにRubyの環境を構築する
---
* 以下サイトから該当バージョンのRuby+Devkitをインストールする
https://rubyinstaller.org/downloads/
MSYS2も一緒にダウンロードする
ruby -vでバージョンを確認する

* `gem install rails`を実行する
上記うまくいったら`rails -v`でrailsのバージョンを確認する
該当のバージョンではないときは以下のサイトを参考にバージョン調整する
ダウングレード↓
https://qiita.com/Hassan/items/eef26c870eb26a0c68e0
アップグレード↓
https://note.com/campfire_dev/n/nb5969d388fd3

* `bundle install`を実行する
* `bin/rails server`を実行し、サンプル画面を表示する


**administrate を導入する**

* GemFileに以下を書き込む
`gem 'administrate'`

* 再度管理者権限で`bundle install`を実行する
→`gem list`でadministrateのバージョンを確認する
