centos7でwebサーバー構築1-基礎的なシステムの構築

#centos7でwebサーバー構築
環境構築というものは面倒くさくて時間がかかるので、構築手順をまとめました。いちいち他のユーザーに切り替えるのは面倒なので、すべてrootでログインしてから実行します。ちなみに、1つのネットワークに1つのサーバーを構築します。複数のサーバーを構築したいときはDNSサーバーを用意しますが、それはまた別のお話。。。いつか、まとめを書きます。

#webサーバー構築に必要なもの
>1.pcとos(centos7-minimal)
2.apache...webを動作させる為に必要なソフト
3.ssh...外部からアクセス(htmlファイルの編集など)するため
4.ファイアーウォール
5.ドメイン
6.やる気

centos7のインストールの際にはネットに繋げておきましょう
[centos7のインストール方法](https://qiita.com/SkyLaptor/items/1036d470c2d4117b9954)

#パッケージのインストール
apacheはhttpd,sshはopenssh-serverというパッケージをダウンロードして使います。ファイアーウォールはもともとダウンロードされているのでコマンドを打つ必要はありません。また、-yは無くても構いませんが後々面倒なので打っておいたほうがいいでしょう(後で"ほんまにダウンロードすんの？えぇ！？"みたいなこと言われるので)。

```bash:httpdをインストール
yum install -y httpd
```

```bash:openssh-serverをインストール
yum install -y openssh-server
```

#ファイアーウォールの設定
apacheは80番、sshは22番のポートを使用するので、ファイアーウォールでそれらのポートと外部の通信を許可する必要があります。

```bash:firewalldを起動
systemctl start firewalld
```

上記のコマンドを実行してから以下のコマンド(firewall-cmd --list-all)で通信が許可されているポートと許可されたサービスを確認できます(それぞれports:とservices:)

```bash:結果は環境によって多少異なります。
[root@localhost ~]firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: wlp1s0
  sources: 
  services: ssh dhcpv6-client
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules:
```

これで確認してから、80番、22番のポートとhttp(80番を使用)のサービスを追加します。もし、sshが表示されなかったらssh(22番を使用)も追加します。これらは、永続的な変更を行いたいので、--permanentを最後に記述します。ポートやサービスを停止させたい場合はaddをremoveに変更してください。
*変更に成功するとsuccessと表示されます。

```bash:ポートの開放
firewall-cmd --add-port=***/tcp --permanent 
```
```bash:例
firewall-cmd --add-port=80/tcp --permanent
```

***にはポート番号、tcpと記述されているところはプロトコルを指定します。httpとsshはすべてtcpで通信が行われます。

```bash:サービスの追加
firewall-cmd --add-service=servicename --permanent
```
```bash:例
firewall-cmd --add-service=http --permanent
```

servicenameにはhttpやsshといったサービスの名前を記述してください。

```bash:変更を適用
systemctl restart firewalld
```

以上で、各々のサービスが外部と通信できるようになりました。

#sshの設定
ふぅ、疲れたのでこちらをご参照ください。そのままやればいいです。ユーザーはインストール時に作成していると思うので、それを使えばいいと思います。
[CentOS7.3でSSH接続(パスワード認証)する方法](https://qiita.com/uhooi/items/ab845b06b136e623e51d)

##ssh通信で、/var/www/html内のファイルを編集できるようにする
最初はパーミッションの関係で、/var/www/html下のファイルの編集ができませんでした。そこで/var/www/htmlを"sshの設定"で使用したユーザーのものに設定します。

```bash:
chown username /var/www/html
```

これで、apacheがデフォルトで参照するディレクトリがssh通信で他のpcから変更できるようになりました。無論usernameにはユーザーの名前を入力してください。

##ssh通信でファイルをアップロード
ファイルまたはディレクトリのコピーをアップロードするにはscpコマンドを使用します。

```bash:scpコマンド
scp [オプション] [転送したいもののパス] ssh_username@ipaddress:[転送先のパス]
```

ファイル転送の際はオプションを指定しません。ディレクトリの際は-rオプションを渡します。ipaddressとありますが、ドメインを指定することもできます。ssh_usernameはsshで使うアカウントです。例えば、pipiというアカウントでwww.example.comに./index.htmlを/var/www/html/にアップロードするときは,

```bash:example
scp ./index.html pipi@www.example.com:/var/www/html/
```

同じネットワーク内にあるとき(同じルーターに接続しているとき)はwww.example.comにローカルipaddressを指定しましょう。
ダウンロードする場合はこんなかんじ。ここでもipaddressにはサーバーのipaddressまたはドメインを指定しましょう。

```bash:ダウンロードする
scp [オプション] ssh_username@ipaddress:[転送元のパス(サーバー)] [転送先のパス(自分のパソコン)]
```

#ルーターの設定
ルーターで、外部からの22番と80番のポートにアクセスがあればサーバーに処理が届くように設定しておいてください(静的ipマスカレードの設定)。以下のサイトをご参照ください。
[buffaloのルーターを使用中の方](http://buffalo.jp/qa/wireless/make/wireless-71_7-1.html)
[softbankのルーターを使用中の方](https://ybb.softbank.jp/support/connect/hikaric/pdf/router.pdf)
ソフトバンクの方は少しデータが古いことを確認しています。静的ipマスカレードの設定は"ルーター機能の設定/ポート転送設定"で行ってください。(上記のサイトを参照,WAN側ポート番号とLAN側ポート番号は80などの必要なポート番号をすべての欄に入力してください。)<img width="619" alt="スクリーンショット 2018-08-05 23.20.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/275906/d966d372-2767-3fdf-d75c-28dbb6e17251.png">
↑こんなかんじ

#ドメインの設定
皆さんのドメインのネームサーバーを設定しておいてください。(ドメインを取得したサイトでdnsサーバーの設定ができます。ddnsの設定もしておきましょう。)また、 whoisで個人情報が確認されないように設定しておきましょう。このへんは自身でお調べください。
こちらのサイトは参考程度に御覧ください。
・独自ドメイン取得 DNS情報設定
http://centos.server-manual.com/centos7_domain_value-domain.html
・ダイナミックDNS取得 DNS情報設定
http://centos.server-manual.com/centos7_domain_no-ip.html

#ホストネームの変更
インストールの時に設定していたらいいのですが、変更されていないとき

```bash:
[root@localhost ~]#
```
となっているときは、/etc/hostnameにアクセスしてlocalhostという記述を消してから自分のドメインを入力して再起動するとホストネームが適用されます。

#最後に

```bash:サービスを起動
systemctl start servicename
```

```bash:サービスがos起動時に自動的に起動するように設定
systemctl enable servicename
```

servicenameにはhttpd(apache),sshd(ssh),firewalldを指定します。(1つ1つ実行ましょう)また、startの部分に、"restart(再起動)"、"stop(停止)"も指定することができます。
あとは、他のコンピューターでアクセスしてみてください。<img width="794" alt="スクリーンショット 2018-08-02 18.20.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/275906/de6ea2a5-9c05-9ee5-b9ed-e1e42128d117.png">
こんな画面が表示されると成功です。
同じLanの中の携帯やpcからはドメイン名ではアクセスできないため、以下のようにローカルipで検索する

```bash:ローカルipアドレスが192.167.3.6のとき
http://192.167.3.6
```

または、携帯は4Gにする。pc(linux)は/etc/hostsに

```bash:
local_ipaddress domain
```

```bash:例
192.167.3.6 www.example.com
```

というように入力するとドメイン名でアクセスできるようになります。
http://www.example.com
↑こんなかんじで検索
*ちなみに、macでは書き換えができないので、前者の方法をおすすめします。linuxのときもrootなってからアクセスしましょう。

#参考
>・CentOS7でfirewalld（ファイアウォール）の設定。firewall-cmd –list-allでports（ポート番号）の指定をお忘れなく!
https://e-yota.com/webservice/post-2563/
・Linux(CentOS7)でSSHを利用する。
https://qiita.com/sango/items/816136188387221f05b3
・外部から自宅サーバー(web)にアクセスできるようにする手順
http://terakonya.sarm.net/wordpress/2011/02/22/accesswebserver/
・linux のコンソール画面でパワーセーブを無効にする方法
https://www.sssg.org/blogs/naoya/archives/702
・CentOS 7でノートPCを閉じてもスリープさせない方法
https://mseeeen.msen.jp/how-to-avoid-sleep-on-pc-closing-with-centos-7/

#シリーズ一覧
>1.[基礎的なシステムの構築(apache,firewall,sshについて)](https://qiita.com/kamogawa/items/b506208b93903741783d)