RubyGemsについて
RubyGemsとは
RubyGemsは、Ruby言語用のパッケージ管理システムであり、Rubyのプログラムと("gem" と呼ばれる)ライブラリの配布用標準フォーマットを提供している。gemを容易に管理でき、gemを配布するサーバの機能も持つ。Rubyバージョン1.9以降では標準ライブラリの一部となっている。
RubyGemsの歴史
使いかた
ライブラリを探す
Ruby のライブラリは主に RubyGems.org に gem として置かれている。直接ウェブサイトを閲覧したり、gem コマンドを使用してそれらを探すことができる。(gemコマンドについて知るにはRubyGems' docsを参照)
また、Ruby プロジェクトを探索しやすくするThe Ruby Toolbox もあり。
尚、gem としては RubyGems.org に公開されますが、gem のソースコードのほとんどは GitHub 上で確認可。
gemを探すコマンドは「list」「search」。
list と search は機能的に同じであるが、検索先のデフォルト指定が、ローカルとなっているか、リモートになっているかが違う。
従って、入手可能なgemの検索は search、インストール済みのgemの検索は list を使う等、使い分けるのが便利。
- 入手可能なgemを検索
$ gem list -r (オプションのrを指定しなければデフォルトはローカル(インストール済みgemを表示。-r 指定でRubyGemsのリモートリポジトリを検索し入手可能なgemを表示)
$ gem search (オプションのrを指定しなければデフォルトはリモート) - インストール済みのgemを調べる
$ gem list (オプションの l を指定しなければデフォルトはl:ローカル)
$ gem search -l (オプションの l を指定しなければデフォルトはr:リモート) - 文字列で入手可能なgemを検索(正規表現指定も可)する
$ gem list -r 検索したい文字列 (例:$ gem search -r html5)
$ gem search 検索したい文字列 (例:$ gem search html5) - インストール済みのgemを文字列で検索する
$ gem list 検索したい文字列
$ gem search -l 検索したい文字列
gemのインストールとアンインストール
- インストール
$ gem install 対象gem名 (例:$ gem install rails) - バージョンを指定したインストール
$ gem install -v 対象gem名 - アンインストール
$ gem uninstall 対象gem名
gemのアップデートの確認とアップデートとクリーンナップ
- アップデートのあるgemを確認
$ gem outdated - gemのアップデート(gem名を省略した場合は全て対象)
$ gem update アップデート対象gem名 - gemの掃除(アップデートすると古いバージョンのgemはそのまま残るが、cleanupコマンドで古いバージョンのGemを削除。gem名を省略した場合は全て対象)
$ gem cleanup 対象gem名
gemの場所を探す
- コマンドでインストールしたgemのPATHを調査する
$ gem which 対象gem名
ヘルプ
- 使用できるコマンドの一覧を表示する
$ gem help commands - コマンドのヘルプを表示する
$ gem help コマンド名
参考サイト
【Ruby】Gemコマンドの使い方まとめ - TASK NOTES
そろそろ整理しておきたい、Gemコマンドの使い方 - ばくのエンジニア日誌
Debian8(さくらVPS)サーバのnginxにLet's Encryptを導入しSSL対応サイトを構築する
目的
Debian8(さくらVPS)サーバのnginxをSSL対応する。
SSL対応に際しては、誰でも無料で使えるSSL/TLS証明書発行サービスである「Let's Encrypt」を使用する。
backportsを設定する
Debian 8 Jessieを使ってるので、sources.listのリポジトリにbackportsを追加。
現状設定を保存
$ cp /etc/apt/sources.list /etc/apt/sources.list.org
設定の追加
$ sudo vim /etc/apt/sources.list
最後の行に以下追加。
deb http://ftp.debian.org/debian jessie-backports main
保存したらupdateを実行。
$ sudo apt-get update
certbotをインストール
$ sudo apt-get install certbot -t jessie-backports
問題ないことを確認するため以下実施。
$ sudo certbot --help
ヘルプ内容が表示されOK
証明書を取得
nginxを停止し、certbot コマンド実行
$ sudo service nginx stop
$ certbot certonly --standalone -d ドメイン名
以下、出力されOK。
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at ~~~
証明書の場所は以下の通り。
サーバ証明書(公開鍵)
/etc/letsencrypt/live/ドメイン名/cert.pem
中間証明書
/etc/letsencrypt/live/ドメイン名/chain.pem
サーバ証明書と中間証明書が結合されたファイル
/etc/letsencrypt/live/ドメイン名/fullchain.pem
秘密鍵
/etc/letsencrypt/live/ドメイン名/privkey.pem
ドメイン名をsub1.domain-a.com とした。
nginxの設定実施
すでに作成済みの以下のファイルに追加。
/etc/nginx/conf.d/nihongelist.conf
以下、追記。(ドメイン名とrootは各個別名)
server {
listen 443 default ssl;
ssl on;
ssl_certificate /etc/letsencrypt/live/sub1.domain-a.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sub1.domain-a.com//privkey.pem;
root /home/user1/sites/sub1/domain-a.com/public/;
index index.html index.php;
}
確認
$ sudo service nginx stop
$ sudo service nginx start
https://sub1.domain-a.com/ にアクセスし、表示されOK。
SSL/TLS サーバ証明書の更新
Let's EncryptのSSL証明書の有効期限は90日と短くなっています。また、更新が可能になるのは期限切れの30日前からとなっています。
尚、cron ジョブの自動追加については、以下とのこと。
引用元:Certbot クライアントのインストール - Let's Encrypt 総合ポータル
Debian パッケージ版の Certbot クライアントは、自動的に cron ジョブを
/etc/cron.d/certbot
に追加します。この cron ジョブは、毎日2回 certbot renew を実行して、有効期限が近い SSL/TLS サーバ証明書を自動的に更新します。※有効期限が近い証明書が存在しない場合には、証明書の更新は行われません。
参考サイト
Let's Encrypt - Free SSL/TLS Certificates
プログラミングビギナーNekoteniがあなたに贈る!NginxでSSLの巻 - ねこテニ
オレオレ証明書をopensslで作る(詳細版) - ろば電子が詰まっている
Let’s EncryptのSSL証明書で、安全なウェブサイトを公開 - さくらのナレッジ
光の速さのWEBサーバー(nginx)をlet's encryptでSSL化及びHTTP/2化。ついでにセキュリティ評価をA+にする。 - Qiita
Nginxで起動中のサーバーにLet's Encryptを導入してSSL証明書を発行する - 望月いちろうのREADME.md
ユーザーガイド - Let's Encrypt 総合ポータル
Debian8(さくらVPS)にNginxでVirtual Hostを構築
目的
Debian8(さくらVPS)サーバにインストールしたNginxでVirtual Host を構築する。
前提と環境
- さくら VPSにDebian8 ( 8.6 )インストール済み
- Nginx ( 1.10.2) はDebian8にインストール済み
- ドメインは以前取得済み(ムームードメイン)のドメインを使用
- 複数のサブドメインで運用できるようにする
NginxにVirtual Hostを設定
さくらインターネット側でドメインの登録
今回の設定は、ムームードメイン側の設定は「 GMOペパボ以外 のネームサーバを使用する」とし、さくらインターネット側に既取得済みのドメインの情報を登録することとした。
さくらインターネット側でサブドメインの設定を実施。
手順の詳細は参考サイト記載の「さくらVPSのサブドメイン設定方法 - メコログ」の通り。
会員メニュー --> 契約情報 --> 契約ドメインの確認 --> ドメインメニュー --> ゾーン編集 -->
ドメインが有効かを nsloojup コマンドで確認。
$ nslookup sub1.domain-a.com
ディレクトリ構成の決定
お好みですが、各ユーザのhomeディレクトリにsitesというディレクトリを新たに作成し、各webサイトの格納ディレクトリを作るという構成にしました。
サブドメインを作る場合は、サブドメイン名を、無い場合は www と命名することとしました。
/home/ユーザ名/sites/サブドメイン名/ドメイン名/public <-- index.html等格納
/log <-- log格納
今回、具体的には、sub1/domain-a.com と sub2/domain-a.comの2つを構築する。
/home/user1/sites/sub1/domain-a.com/.....
/home/user1/sites/sub2/domain-a.com/.....
NginxにVirtual Hostの設定
- Virtual Host用のデータを格納するディレクトリ作成
$ mkdir /home/user1/sites
$ mkdir /home/user1/sites/sub1
$ mkdir /home/user1/sites/sub1/domain-a.com
$ mkdir /home/user1/sites/sub1/domain-a.com/{public,log}
以下、sub2も同様に作成。
トップページ(index.html)の作成
$ vim ~/sites/sub1/domain-a.com/public/index.html
$ vim ~/sites/sub2/domain-a.com/public/index.html
テスト的に内容は以下。
<html>
<head>
<title>sub1/domain-a</title>
</head>
<body>
Welcome to Sub1.Domain-a.com! ←Webの画面にこれが表示されます。
</body>
</html>
バーチャルホスト設定ファイルの作成と配置
設定ファイルに関する情報は以下のファイルです。
/etc/nginx/nginx.conf
この中に、以下の記述があります。
include /etc/nginx/conf.d/*.conf;
デフォルトの設定ファイルは以下です。
/etc/nginx/conf.d/default.conf
設定ファイルの反映の方法は色々できるわけですが、/etc/nginx/conf.d ディレクトリ に「定義名.conf」のファイルを作成し、配置することとした。
/etc/nginx/conf.d/domain-a.conf
設定内容は以下。
server {
listen 80;
server_name sub1.domain-a.com ;
access_log /home/user1/sites/sub1/domain-a.com/log/access.log;
error_log /home/user1/sites/sub1/domain-a.com/log/error.log;
location / {
root /home/user1/sites/sub1/domain-a.com/public/;
index index.html index.php;
}
}
server {
listen 80;
server_name sub2/domain-a.com ;
access_log /home/user1/sites/sub2/domain-a.com/log/access.log;
error_log /home/user1/sites/sub2/domain-a.com/log/error.log;
location / {
root /home/user1/sites/sub2/domain-a.com/public/;
index index.html index.php;
}
}
確認
Nginxの再起動
$ sudo /etc/init.d/nginx stop ←Nginx停止
$ sudo /etc/init.d/nginx start ←Nginx起動
ブラウザで確認
参考サイト
プログラミングビギナーNekoteniがあなたに贈る!NginxでVirtual Hostの巻 - ねこテニ
nginxのサブドメインでrailsの複数アプリを運用 - mikami's engineer diary
nginx連載4回目: nginxの設定、その2 - バーチャルサーバの設定 - インフラエンジニアway - Powered by HEARTBEATS
Debian8(さくらVPS)に最新安定化版 nginxをインストールする
最新安定化バージョンの確認
以下で最新バージョン確認
2016/11/30時点の最新安定化版は以下。
2016-10-18 nginx-1.10.2 stable version has been released.
最新安定化バージョンのインストール
普通にapt-get install した場合は、Version: 1.6.2-5+deb8u4 であることを確認。
$ apt-cache show nginx
Package: nginx
Version: 1.6.2-5+deb8u4
このため、リポジトリ追加設定を行い、最新安定化版1.10.2 をインストールする。
リポジトリ追加の設定
パッケージの公開鍵をダウンロードしてapt-keyで追加
$ wget "http://nginx.org/keys/nginx_signing.key"
$ sudo apt-key add nginx_signing.key
nginxのサイトをリポジトリに追加
事前に既存ファイルを保存
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.org
以下で追加編集
$ sudo vi /etc/apt/sources.list
追加編集内容:最終行に以下を追加(Debian8 につき「jessie」)
deb http://nginx.org/packages/debian/ jessie nginx
deb-src http://nginx.org/packages/debian/ jessie nginx
登録内容を反映
$ sudo apt-get update
確認
$ apt-cache show nginx
Package: nginx
Version: 1.10.2-1~jessie
インストール実施
$ sudo apt-get install nginx
インストール確認
バージョン確認
$ sudo nginx -v
nginx version: nginx/1.10.2
ブラウザで Welcome to nginx! と表示されたらOK。
参考サイト
Debianで最新版のnginxをapt-getでインストールする - 飲んだり寝たり
Debian 8 (Jessie) - Web サーバ Nginx 構築(Nginx 公式リポジトリ使用)! - mk-mode BLOG
csstutorialを終えて
指摘・改善事項の振り返り
cssについて基本的なところは抑えていたつもりであるが、ワークを開始すると、あやふやなところ、テクニカルな事項で不足しているところがかなりあり、時間を要した。
作成に際して、いろんなサイト情報を参考にさせていただきました。
csstutorialを終えて、改善・留意事項等、指摘をいただき、備忘と今後の参考のため、以下、書き記す。
サイトの目的により優先順位、観点が違ってくることもあるが、以下。
文章の読みやすさ
- 文章を読みやすくするために、line-height(行間) は必ず指定。特に、和文の場合、英文よりも広くline-heightを取らないと可読性が悪い。
操作性への配慮
- input 周りでは、paddingを指定。余白を多めに取ったり、角を丸くしたりなどし、入力に伴う心理的ハードルを低く。
- 業務アプリの場合は、一つの画面でなるべくスクロールをしないで多くの処理ができるように、処理効率の観点に留意。
- 見逃しや、ミスを誘発しないよう、リンクの周り、インプット周りにマージンを付ける。
可読性
- cssのインデントもhtmlと同様、揃える。
参考サイト
さくらVPS(Debian8)にMySQLをインストールする
MySQLをインストール
インストールされるバージョンを確認
$ sudo apt-get update
$ apt-cache show mysql-server | grep Version
Version: 5.5.53-0+deb8u1
Version: 5.5.50-0+deb8u1
aptでインストール
$ sudo apt-get install mysql-server
インストールの中で、rootパスワードの設定を求められるので入力
インストールされたバージョンの確認
$ mysql --version
mysql Ver 14.14 Distrib 5.5.53, for debian-linux-gnu (x86_64) using readline 6.3
参考サイト
SSLとは
SSL(secure sockets layer)とは
SSLはインターネット上でデータを安全にやりとりするプロトコル。
接続相手のサーバーが信頼できるかどうかを確かめたうえで,データを暗号化してやりとりする。
SSLを使うと何ができるか
「データの暗号化」と「通信相手の認証」確認ができる。
データ暗号化とは
インターネットでやりとりするデータを暗号化し,万一データが見られても内容がわからないようにする。
相手認証の機能とは
通信相手が信頼のおけるサーバーかどうかを確かめる機能。
クライアントがサーバーから「サーバー証明書」と呼ばれる情報を受け取り,そのサーバー証明書を検証することで,通信相手のサーバーが信頼できるかどうかを判断する。
暗号の仕組み
暗号化の流れ
- 送信側の流れ
アプリケーション(webブラウザ)-->SSL(暗号化)-->TCP(TCPはTCPパケットにSSLのデータであることを示す443番port宛と明記)-->IP-->イーサネット-->回線へ - 受信側の流れ
回線-->イーサネット-->IP-->TCP-->SSL(暗号化されたデータを復号)-->アプリケーション(webサーバソフト)へ
暗号方式
「共通鍵暗号」と「公開鍵暗号」という二つの暗号方式を組み合わせて利用している。
相手認証の仕組み
クライアントはサーバーからの「サーバー証明書」を受け取り,証明書を検証することで,信頼できるかどうかを判断する。サーバー証明書は,サーバーの管理者が,「認証局」と呼ばれる組織に申請して発行してもらう。そしてサーバ証明書には認証局の署名(認証局の秘密鍵で暗号化したデータ)を施した認証局の証明書も送付される。その際、一番上位に位置する「ルート認証局の証明書が必ず送付される。
クライアントは「ルート認証局が信頼できるか」確認する。
確認の方法は、以下。
パソコンにはあらかじめ,信頼できるルート認証局 の証明書(自己証明書)が複数インストールされている (*1) 。クライアントは,そのあらかじめ入っている証明書と,サーバーから受信した証明書が一致するかを確認し,一致したら受信した証明書は信頼できると判断する。
*1 ルート認証局の証明書
ルート認証局が自分自身に対して発行した証明書のことをルート証明書という。Webブラウザやメールクライアントには監査基準(WebTrust等)を満たしたルート証明書が予め搭載されている。
証明書は誰でも発行することができるが信頼性を持たせるため信頼のできる第三者機関から発行された証明書を使用することが必要となる。
信頼性のない(Webブラウザにプレインストールされていない)ルート証明書の場合、Webブラウザからセキュリティ警告が発せられる。
参考サイト
図解で学ぶネットワークの基礎:SSL編 - イントロ:Webアクセスに欠かせない,情報の秘密を守るしくみ:ITpro
ルート認証局の信頼性 | SSL・電子証明書ならGMOグローバルサイン
https://www.jp.websecurity.symantec.com/welcome/pdf/wp_sslandroot-certificate.pdf