詰将棋アプリ開発ログ

1億総将棋ファン社会を目指し活動中。手始めに詰将棋アプリを開発中。

http://xxxx.comからhttps://xxxx.comにリダイレクト

前回https通信ができるようになった。

今回はhttpで来たユーザもhttpsにリダイレクトするようにnginxで設定します。

vi /etc/nginx/conf.d/default.conf(*.confでも良い)で設定ファイルを下記のように追記します。

+ server {
+      listen 80;
+     server_name xxxx.com;
+     return 301 https://$host$request_uri;
+ }

これでhttp://xxxx.comへアクセスが来たときhttps://xxxx.comにリダイレクトして返すようになります。

systemctl restart nginxで設定反映させるとhttp://xxxx.comhttps://xxxx.comにアクセスできるようになっているはずです。

ConoHaでSSL化対応してhttps通信できるようにする

今回はhttp://ドメイン名で表示できるサイトをSSL化対応してhttps://ドメイン名で表示できるようにします。

OS:CentOS7.4 (現時点でConoHaでの最新版です)

SSL化とは

http通信は情報がだだもれでデータを傍受されたりして安全とは言えない。

https通信は暗号化しており、セキュアな通信するために認証局からSSL証明書を発行してもらっている。

これでユーザが安心してブラウジングできるようになる。

うちのサイトは個人情報扱わないからいいやと思うかもしれないが、googleさんはhttpsのサイトを評価するらしく、

今後は検索順位に影響するらしいので必ずやっておいた方がいい。

SSL化手順

#ファイヤウォールがhttps通信を許可しているか確認
firewall-cmd --list-all | grep services
#  下記のようにhttpsが抜けているはず
#   services: ssh dhcpv6-client http

# https通信を有効にする
firewall-cmd --permanent --add-service=https --zone=public

# 再起動
firewall-cmd --reload

# certbot(SSL証明書を発行するツール)をインストール
yum install -y certbot

# 証明書を発行
 certbot certonly --webroot -w ドキュメントルート -d ドメイン名 

#nginx側の設定を行う。/etc/nginx/conf.d/default.confを編集
vi /etc/nginx/conf.d/default.conf

下記のように設定。

server {
-    listen 80;
+    listen 443 ssl;
+    ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
+    ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;

systemctl restart nginxで設定を反映させ、http://ドメイン名では表示されず、https://ドメイン名で表示すれば成功。

証明書の有効期限は3ヶ月なのでcertbot renewコマンドをクーロンで定期実行すればよいが、 このままだとこのコマンドが80番ポートを利用するためnginxの設定を変更しなければならない。

それを避けるため--webrootを利用する。このモードはドキュメントルート以下に/.well-known/acme-challenge/というディレクトリを作ってその中に認証用のファイルを書き出し、letsencryptのサイトから取らせることにより認証しようとする。サービスで使っているNginxを利用するため止める必要がなくなる。

一旦、--standaloneで実行して作成された設定ファイル/etc/letsencrypt/renewal/ドメイン名.conf--webrootのものに書き換えるには次の様に--webrootを指定し、force-renewalをつけて実行すると設定ファイルが上書きされる。

 certbot certonly --webroot -w ドキュメントルート -d ドメイン名 --agree-tos --force-renewal -n

crontab -eでクーロンの設定編集画面を開き、下記を追記する

0 4 1 * * /usr/bin/certbot renew && /usr/bin/systemctl reload nginx

この設定で毎月1日の朝4時に証明書を取りに行ってnginxを再起動する。

これで完了。またクーロンがちゃんと動くか分からないので3月1日にうまく行っているか確認して追記します。

お名前.comで独自ドメインを取得してConoHaで公開する手順

サーバーの用途にもよりますが、http://xxx.yyy.zzz.aaa/みたいなipアドレス丸出しだとカッコつかないので 独自ドメインをとってサーバーへhttp://独自ドメインでアクセスできるようにします。

今回はtsumetore.comをとってみます。

お名前.comで

お名前.comでドメインを検索

f:id:tukushiari:20180202165655p:plain

検索結果の中からトップレベルドメイン(.comとか.net)を選びます。

安いものは2年目以降の更新料が高いものが多いので注意。

無難に.comを選びます。

f:id:tukushiari:20180202165906p:plain

次に何年分の使用料金を払うか聞かれます。

絶対にこのサービスは流行るから5年分とっておこうってのも気合的にはアリですが、

更新できるのでひとまず最低の1年で。

注意としてwhois情報公開代行には必ずチェックしましょう。

しないとお名前.comに登録した自分の住所がドメインと一緒に世に出てしまいます。

ここを忘れると有料になるそうなので気をつけて。私がやったときはデフォルトでチェックついていました。

f:id:tukushiari:20180202170254p:plain

この後は支払いを済ませればOK

ConoHaの設定

ConoHaのコントロールパネルを開き、

サーバ→ネームタグをクリックしてipアドレスを控えておきましょう。

次にDNS→右上のドメイン追加をクリック。

f:id:tukushiari:20180202173050p:plain

ドメインを入力して追加クリックします。

f:id:tukushiari:20180202173127p:plain

そのあと右側の鉛筆ボタンを押して、

として保存します。

f:id:tukushiari:20180202205920p:plain

元々ある3行の値(ns-ax.conoha.io)は後でお名前.comの方で入力します。

お名前.comの設定

次にお名前.comのログインページに入り、右上のよく見るページのドメイン一覧をクリック。

f:id:tukushiari:20180202173353p:plain

f:id:tukushiari:20180202173410p:plain

このような脅しっぽい画面が出ますが無視します。(商売っ気見え見えでやな感じです)

下の画面に飛んでドメイン設定の中のDNS関連機能の設定をクリック。

f:id:tukushiari:20180202173542p:plain

設定するドメインを選んで下の方の「DNSレコード設定を利用する」ボタンをクリック。

f:id:tukushiari:20180202173645p:plain

真ん中あたりの入力欄に

を入力し、追加ボタンを押して、そのまま進む。

また最初の画面に戻ってくるので、ネームサーバーの変更を選んで、変更するドメインにチェック。

下の方の「他のネームサーバーを利用」タブを押して、ネームサーバー情報を入力欄に

Conohaで控えたns-a~を順番に3つ入力。

f:id:tukushiari:20180202174151p:plain

f:id:tukushiari:20180202174040p:plain

お名前.comは人を迷わすようなUIにわざとしてそうなので

ちなみこの設定が終わってもdnsの設定はすぐに反映しません。ジワジワ反映します

この設定が終わって3時間半くらいしたら見られるようになりました。

では!

CentOS7.4にphp72をインストール

CentOSphpの最新バージョンを入れてfpmで動かすまでの手順になります。

OSとバージョンはCentOS7.4になります。

# レポジトリ情報を追加
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# php72をインストール
yum install --enablerepo=remi,remi-php72 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt

# php-fpmをインストール
yum install php72-php-fpm

# インストールされたか確認
php -v 

# こんな感じで表示される
# PHP 7.2.2 (cli) (built: Jan 30 2018 12:47:44) ( NTS )
# Copyright (c) 1997-2018 The PHP Group
# Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

設定ファイル(/etc/opt/remi/php72/php-fpm.d/www.conf )に変更が必要。

設定ファイルの中のapaceってなってるところをnginxに変え、listen.modeを0666に変更。

vi /etc/opt/remi/php72/php-fpm.d/www.conf 

- user = apache
- group = apache
- listen.owner = apache
- listen.group = apache
- listen.mode = 0660

+ user = nginx
+ group = nginx
+ listen.owner = nginx
+ listen.group = nginx
+ listen.mode = 0666

その後php-fpmを再起動します。

systemctl restart php72-php-fpm

次にnginx側の設定ファイルを編集する。

- location / {
-     root   /usr/share/nginx/html;
-     index  index.html index.htm;
- }
+ location / {
+     root   /home/ユーザ名/www;
+     index  index.html index.htm index.php;
+ }

- #location ~ \.php$ {
- #    root           html;
- #    fastcgi_pass   127.0.0.1:9000;
- #    fastcgi_index  index.php;
- #    fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
- #    include        fastcgi_params;
- #}
+ location ~ \.php$ {
+     root           /home/ユーザ名/www;
+     fastcgi_pass   127.0.0.1:9000;
+     fastcgi_index  index.php;
+     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
+     include        fastcgi_params;
+ }

設定を反映させるために systemctl restart nginxで再起動。

ユーザディレクトリ下にwwwフォルダを作ってindex.phpを作成します。

mkdir ~/www
vi ~/www/index.php
<?php
    phpinfo();
?>

確認

ブラウザでhttp://ipアドレス/で表示されるか確認。

403 forbiddenが表示されたときはユーザディレクトリに権限が足りないので chmod 755 /home/ユーザ名で追加。

下記のようなphpの情報画面が表示されれば成功です。

f:id:tukushiari:20180201111114p:plain

次回

いよいよ次回はphpとsqlite3(データベース)を連携してデータベースからデータをブラウザに表示までやってみようと思います。

ではでは!

yumって何?

VPSで色々アプリを入れる時につかうyumくん。(ヤムって呼べばいいのか?)

正直インストールしてくれるコマンドくらいしか分かっていなかったのでちょっと調べてみる。

yum とは

yumYellowdog Updater Modifiedの略で「パッケージ管理システム」。

パッケージとはソフトウェアのセット(phpとかnginxとか)のことで

そのパッケージたちを管理(インストールや削除したりするときによしなにしてくれる)するツール。

たとえばパッケージAをインストールしたい時、パッケージBが必要となる場合は一緒にインストールしてくれたり、 それぞれのパッケージ同士のバージョンが合わないと動かないときはそれもうまいこと調整してくれる。

つまりパッケージ間の依存関係を気にせず自分の欲しい機能をyumが調整してインストールしてくれる。

リポジトリとは

リポジトリとはyumがパッケージをインストールするときのインストール元のこと。

yumは安定版をインストールするんだけど最新のバージョンが欲しいときは別のリポジトリからインストールしないといけない。

EPEL、Remiなどがあり、

  • EPELはエンタープライズ向けなので信頼性が高い
  • Remiは最新バージョンのパッケージを入手できる

インストール自体もyumでできます。

# epelのインストール
 yum install epel-release

#remiのインストール
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

それぞれ/etc/yum/repos.d/にxxxx.repoファイルがあり、設定を記述してある。 たとえばenable=1だとインストールの際にそのリポジトリを使ってくれる。

enable=0の場合は yum install enablerepo=remi packageとするとそのレポジトリを使ってくれる。

良く使うyumコマンド

# インストールしたパッケージの中からxxxが含まれるものを探す
yum list installed | grep xxx

# xxxをインストール(-yオプションはyes/no聞かれるところを全部yesで進む)
yum -y install xxx

#yumのパッケージを更新する yum自体も更新するのでインストール前にやっておくとよい
yum update

# xxxのパッケージを削除する
 yum remove xxx

まとめ

yumとは依存関係を気にせずパッケージ(ソフト)をインストールできるコマンド。

標準でもだいたいうまくやってくれるが、パッケージがない場合やバージョンを最新にしたいときには リポジトリ(インストール元)をいじって対応する。

nginxでブラウザから閲覧できるようにする

前回まででVPSを借りて公開鍵を使ったログインができるようになりました。

www.conoha.jp

今回はnginxを使ってWEBブラウザから閲覧できるようにします。

OSはCentOS 7.4になります。

nginx(えんじんえっくす)って何?

apacheと並ぶwebサーバアプリ。

10k問題(1万人が同時に接続すると厳しい問題)を解決するためにできたものらしく、シンプルで省メモリらしい。

ぶっちゃけそこまでユーザが集まったことがないからapacheでもどっちでもいいですが、

最近シェアが伸びていて、設定ファイルがシンプルで使い易いので今回はnginxを使います。

導入手順

# レポジトリ情報を書く
vi /etc/yum.repos.d/nginx.rep

ファイルの内容は下記。(本家サイトからなので間違いはないかと。)

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
# インストール
yum install nginx --evablerepo=nginx

# 起動
systemctl start nginx 

このままでは http://xxx.xxx.xxx.xxx(ipアドレス)としても「ページが見つかりません」と表示されまだ見えません。

ファイアウォールの設定を追加します。

# http通信を許可する
firewall-cmd --add-service=http --permanent

# 設定反映のためリロード
firewall-cmd --reload

ブラウザでhttp://xxx.xxx.xxx.xxxと打ち込むと下記のようにnginxのwelcomページが出てくれば成功です。

f:id:tukushiari:20180131171226p:plain

ちなみに設定ファイルは/etc/nginx/nginx.confとその下の/etc/nginx/conf.d/default.confにあります。

デフォルトページのhtmlは/usr/share/nginx/htmlに置いてあります。

/etc/nginx/conf.d/default.confのrootのところにあるディレクトリを書き換えれば自分の好きなディレクトリを公開できます。

まとめ

ここまでくれば自分のホームページを作ったりと割とサーバらしいことができるようになった気がします。

次回はphpを起動するところまで解説しようと思います。

ではでは!

ConoHaVPSでサーバを借りてから公開鍵を使ってログインできるまで設定

次回アプリの構想もだいたい決まってきたのでサーバを立てようと思います。

前作アプリ詰将棋らっしゅもConoHaのVPSサーバを使っていて何の問題もなく動いているので今回もConoHaで行きます。

この記事から何回かに分けてVPSサーバを借りて色々Unityアプリからデータを取ってくるところまで解説します。

Macからの操作になります。

サーバを借りる

申し込みは下記サイトから。

www.conoha.jp

ログインするとコントロールパネル画面が現れるので左上の「サーバ追加」を押す。

f:id:tukushiari:20180130175542p:plain

サーバの選択画面

上から必要なものを選んでいく。

プラン

  • タイプ:VPSを選択。
  • リージョン:サーバの場所なので日本人中心のアプリなら東京がよい。
  • メモリ:お試しなら512MB、本番稼働なら1GBにしておけばあとで2GB以上に変更できます。

f:id:tukushiari:20180130175555p:plain

イメージ

  • イメージタイプ:OS
  • OS:CentOS 特にこだわりがなければCentOSで。デフォルトだけあって情報量が多いです。次点でUbuntu
  • バージョン:最新で。
  • rootパスワード:ログインする際のパスワード。あとで使うので控えておきましょう。

f:id:tukushiari:20180130175557p:plain

オプションは一番下のネームタグ(サーバ一覧のところに表示される名前)だけ好きな名前に変えて、 それ以外はそのままで。

ネームタグも後で変更できます。

f:id:tukushiari:20180130175652p:plain

内容と金額を確認してよければ「追加」ボタンを押すと20秒もたたずに追加されます。

サーバに削除ロックをかける

サーバ一覧に表示されたらまずは削除ロックをかけておきましょう。

conohaのコントロールパネルは削除もすぐにできちゃいます。

間違えて削除しないようにサーバのチェックボックスにチェックをいれて「削除ロック」を選択。

リストの頭に鍵マークが付いていればOKです。

f:id:tukushiari:20180130194343p:plain

f:id:tukushiari:20180130194346p:plain

f:id:tukushiari:20180130194347p:plain

ターミナルからログイン

ipアドレスはネームタグをクリックし、ネットワーク情報の中にIPアドレス(借りたサーバの住所)があるのでこれをメモ。

f:id:tukushiari:20180130200935p:plain

ssh root@ipアドレス

と打つと、「繋いだことないんだけど繋いじゃうよ?」みたいなこと聞かれるのでyesを その後パスワードを聞かれるので設定したrootパスワードを入力すると入れます。

f:id:tukushiari:20180130201433p:plain

ユーザを追加

rootユーザは管理者権限なのでなんでもできちゃうので、 新しいユーザ newuserさんを追加します。

newuserのところはご自分で決めたユーザ名に置き換えてください。

# ユーザ作成
adduser newuser

# パスワード設定
passwd newuser

# グループに追加
gpasswd -a newuser wheel

# newuserでログインできるか確認 Switch User
su newuser

# [newuser@ipadress root]$のように頭がユーザ名になっていれば成功です。
# 戻るときはsuでrootパスワードを入れるとrootユーザに戻れます。

鍵を使ったログインができるようにする

今はパスワードとipアドレスさえ分かればどこからでもアクセスできる状態です。

「パスワードが漏れなきゃいいんじゃない?」と思うかもしれませんが、

ブルードフォースアタック(順番にパスワードを入力していく)もあるので危険な状態です。

なのでRSA暗号鍵を使ってセキュリティを高めましょう。

暗号鍵でのログインを許可。

sudo vi /etc/ssh/sshd_config

viはunixのエディタで使い方は下記を見てみてください。

viはCUIでよく使うので覚えておきましょう。

viエディタの使い方

下記2行の設定を変更。

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

[注意]少し前までは RSAAuthentication yes を入れるようになっていましたが、非推奨でないようです。 CentOSの7.4以降はデフォルトでこの設定自体がなくなっています。

下記コマンドで設定を再読み込みします。

sudo systemctl restart sshd

鍵を作成

# newuserのディレクトリで行ってくださいsu newuser
# フォルダを作成 バージョン7.4では元からあるので下記3行は不要
pwd
# /home/newuser/が表示されることを確認
mkdir .ssh
chmod 700 .ssh

# 鍵を作成
cd .ssh
ssh-keygen -t rsa -b 4096
# 鍵の名前はお好みで
# パスワードも設定しておく

#公開鍵(xxxx.pub)をsushi_configで設定してあった名前に変更する
mv xxxx.pub authorized_keys

#644でもOK 他のユーザの書き込み権限がなければよい
chmod 600 authorized_keys

自分のPCに秘密鍵をコピーする

cat xxxx(さっきの鍵の名前)

で鍵の中身を表示し全てコピーします。

ここからはもう一枚ターミナルを開き、PC側に秘密鍵の設定をしていきます。

cd ~/.ssh
vi xxxx # catした内容をコピペする
chmod 600 xxxx

sshの設定ファイルの中に接続情報を書き込みます

# xxxx
Host xxxx
    HostName xxx.yyy.zzz.aaa(ipアドレス)
    User newuser
    Port 22
    IdentityFile ~/.ssh/xxxx
````

### 接続できるか確認

ターミナルからsshでログインできるか確認

ssh xxxx

### rootログインを禁止に

いよいよrootでのログインを禁止にします。

sudo vi /etc/ssh/sshd_config




rootユーザでのログインを禁止

PermitRootLogin no

パスワードログインを禁止

7.4では下記行が2つあるので片方をコメントアウト(# Pass~)しましょう

PasswordAuthentication no

再起動し設定を読み込む。

systemctl restart sshd

## ポート番号を変える

ファイヤウォールの自動起動するようにする

systemctl enable firewalld

xxxxxはポート番号

firewall-cmd --add-port=xxxxx/tcp --zone=public --permanent

firewalldを再起動

systemctl restart firealld




vi /etc/ssh/sshd_config




port xxxxx




systemctl restart sushi

自分のPC側の~/.ssh/ssh_configのポート番号も変えてsshログインできればOKです。

今日はここまです。


## まとめ

長くなりましたが家でいうと

<b>「家を借りて鍵を作って自分だけ入れるようになった。」</b>状態です。

ConoHaVPSは初期費用がかからず、日割り計算なのでちょっと触って見たい人にもオススメです。

サーバ構築は慣れが大切なので作って削除してがコントロールパネルですぐできるのもポイント。

私は上記の手順を5回はやっていますし、この記事通りいくか試すために2回通しでやっています。

Linuxはコマンドラインしか見えず、覚えるには手を動かすしかないのでトライアンドエラーでやっていくのがいいと思います。

[https://www.conoha.jp/referral/?token=4CsQUCEKVCch0IgKmdE4KenQTWug.dK2sjLeXR_4cMe.pFI_Eks-KJV:embed:cite]

上記のリンクから申し込みすれば1000円分のクーポンがついているので一番下のプランなら一ヶ月はタダで遊べます。

次回はnginxを入れてwebブラウザから見れるようにしたいと思います。

色々つまづくことがあればコメントで教えてください。

なるべくお答えするか新しく記事にしようと思います。

ではでは!