プログラミングガール

Developing a better me

Vagrant Share でHTTPS通信する

1.Vagrantfile記述

2.オレオレ証明書を発行

① 証明書の発行
# On Vagrant
$ yum install mod_ssl openssl
$ openssl genrsa -out ca.key 2048
$ openssl req -new -key ca.key -out ca.csr
② 決められた場所に各ファイルを配置する
$ cp ca.crt /etc/pki/tls/certs/
$ cp ca.key /etc/pki/tls/private/
$ cp ca.csr /etc/pki/tls/private/
③ /etc/httpd/conf.d/ssl.confに以下を記述
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
④ /etc/httpd/conf/httpd.confに以下を記述
Listen 443

LoadModule ssl_module modules/mod_ssl.so

NameVirtualHost *:443
#
#
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/ca.crt
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key
    <Directory /home/vagrant/www/public>
        AllowOverride All
    </Directory>
    DocumentRoot /home/vagrant/www/public/
    ServerName myfirst.test
</VirtualHost>

3.Vagrant Shareする

Vagrantが立ち上がっている状態で以下を実行。

$ vagrant share --ssh --https 443

ssh:シェアする人がSSHVagrantに入れるようにする設定
https {{ポート番号}}:Vagrantfile内で定義したdeveliop.vm.network 'forwarded_port', guest: 443, host: 8443guest の値

文字化け問題の解決

問題

開発している環境(Vagrant上)で以下の問題が発生。
① viしたときに日本語が文字化けて見える
② git diffしたときに日本語が文字化けて見える

①の解決方法

$ vi ~/.vimrc
---- .vimrc追記内容 ----
set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac
------------------------
$ source ~/.vimrc

②の解決方法

$ echo "export LESSCHARSET=utf-8" >> ~/.bashrc
$ source ~/.bashrc

git の pager が less コマンドを使っていて、その文字コードutf-8 に設定されていないことが原因。
.bashrc に LESSCHARSET の環境変数を追加。

Vagrant Shareを使ってみた

Vagrant Shareは、ローカルで立てたVagrantの環境へ誰でもアクセスできるようにしてくれます。
まぁとりあえず使ってみよう。

www.vagrantup.com

HOW TO

1.ATLASの無料のアカウント作成
https://atlas.hashicorp.com/account/new

2.ローカルのVagrantを立ち上げる

$ vagrant up

3.コマンドライン上からログインする

$ vagrant login
You are now logged in.

4.共有できるURLを発行する

$  vagrant share
==> default: Detecting network information for machine...
    default: Local machine address: 192.168.33.20
    default: Local HTTP port: 80
    default: Local HTTPS port: disabled
==> default: Checking authentication and authorization...
==> default: Creating Vagrant Share session...
    default: Share will be at: slight-fox-6296
==> default: Your Vagrant Share is running! Name: slight-fox-6296
==> default: URL: http://slight-fox-6296.vagrantshare.com

5.共有をストップ
Ctrl + C

割り振られるURLは毎回違うようです。
Vagrant Shareがお名前解決してくれてるということかな。 すんばらしい〜!

おまけの妄想

ラズパイとVagrant Share(SSHもできるらしい)を組み合わせたら、簡易のSTG環境できないかな 笑

AWS構築|Let’s Encrypt で レッツ暗号化

なにするの?

AWSにのっけたWebサービスHTTPSでアクセスできるようにする。

HOW TO ENCRYPT on AWS

1.Apache停止
$ apachectl stop
2.Certbotをダウンロード
$ git clone https://github.com/certbot/certbot
3.Certbotの実行(証明書の取得)
$ cd certbot/
$ ./certbot-auto certonly --standalone -d kpter.net -d www.kpter.net --debug

AWS上では--debug つけないと文句いわれちゃう

3.5.Emailアドレスの入力

f:id:hana_ori:20160728090300p:plain

途中、メールアドレスの入力を求められる。(緊急時の通知や鍵をなくした際の復旧用)

↓できたっぽい。

Requesting root privileges to run certbot...
  /home/ec2-user/.local/share/letsencrypt/bin/letsencrypt certonly --standalone -d kpter.net -d www.kpter.net --debug
Version: 1.1-20080819
Version: 1.1-20080819

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/kpter.net/fullchain.pem. Your cert will
   expire on 2016-10-16. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot-auto again. To
   non-interactively renew all of your certificates, run
   "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
4.Apacheの設定いじる @ /etc/httpd/conf.d/ssl.conf
  • 証明書 /etc/letsencrypt/live/kpter.net/cert.pem
  • 秘密鍵 /etc/letsencrypt/live/kpter.net/privkey.pem
  • 中間証明書 /etc/letsencrypt/live/kpter.net/chain.pem
<VirtualHost *:443>
   ServerName kpter.net
   DocumentRoot "/var/www/html/KPTer-web/lp"

   SSLEngine on
   SSLHonorCipherOrder on
   Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
   SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2
   SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

   SSLCertificateFile /etc/letsencrypt/live/kpter.net/cert.pem 
   SSLCertificateKeyFile /etc/letsencrypt/live/kpter.net/privkey.pem
   SSLCertificateChainFile /etc/letsencrypt/live/kpter.net/chain.pem
</VirtualHost>

ssl.confに書かないと以下の警告が出た

[warn] _default_ VirtualHost overlap on port 443, the first has precedence
5.Apache再起動
$ apachectl start

以上で完成です!

サービス開発|KPTアプリをリリースしたよ

このあいだ、「KPTer」というKPTiOSアプリをリリースしました!
業務中にKPTをしている方も多いのではないかと思います。ぜひ一度つかってみてください(^^)

アプリはこちらFacebookページはこちら

LPも作ってみました♡ kpter.net

コンセプト

振り返り手法KPTをもちいて、プロジェクトメンバー、友だち、恋人、夫婦などで普段いえないことを共有できるシンプルかつ強力な新しいコミュニケーションツール
ありがとうのきもちを、Keepとして。
むしゃくしゃしたことを、Problemとして。
そして、そこからよりよい明日につながるためのTryを考えていきましょう!

f:id:hana_ori:20160724165759p:plain:w300 f:id:hana_ori:20160724165557p:plain:w300 f:id:hana_ori:20160724165623p:plain:w300 f:id:hana_ori:20160724165649p:plain:w300

なぜ作ろうと思い至ったか

1.新しい働き方が増える時代に置いて、効果的にコミュニケーションがとれる場をつくりたかった
DMM内でもリモートワークのお話が出たりします。リモートワークを採用する会社もこれから増えてくるのではないでしょうか。
そういった働き方の多様化の時代に、アナログな方法のみでKPTを進めていくと臨場感の喪失や手間などからコミュニケーションに支障がでてしまうことがあるのではないかと考えました。
KPTerが仕事環境においてよりみなさんが業務をより円滑に協力して進められるように手助けできればと思います。

2.KPTをより身近なものにしたかった
チーム内でKPTをするようになってから、プライベートでもKPTを行うようになりました。
そうしたなかで気づいたのは、普段自分がいかに相手に気持ちを伝えきれていなかったかということです。
ありがとうの感謝のきもちも、なにがどう悲しかったかも特別なシーンや気合を入れてからしか伝えてこなかったなと自分を振り返って思いました。
仕事場でだけでなく、KPTをもっと身近な存在にすることで家族や恋人、友人とのこころの距離を縮められたら、と考えました。

3.Swiftさわってみたかってん・・・!
It is because we are engineers.
エンジニアの性なのでしょうか、新しい言語とかさわってみたくなっちゃったんです。
サーバー代がかからないというのもたいへん魅力的でした( ´ ▽ ` )

追加予定機能

まだまだ機能たりてないんです・・・(´-ι_-`)
コミュニケーションを取るにはまだまだ足りてない機能がてんこ盛りなので、Ph2.0以降で実装できればと思っています。

  • Web ver
  • 同期機能
  • 共有機能
  • 未完了Try一覧 とかとか。

使ってみてくれたひとの中で、もっとこんな機能ほしーい!っていうのがあったら教えてほしいなぁ(´∀`)

CentOS|SSHログイン時にアスキーアートを表示する

なにがしたい

sshでサーバにログインした時に、AAを表示することでどのサーバにログインしたかをわかりやすくしたい。

HOW TO

1.AAを作成

Text to ASCII Art Generator (TAAG)

2./etc/motdに上記で作成したAAを記述

______              _            _   _             
| ___ \            | |          | | (_)            
| |_/ / __ ___   __| |_   _  ___| |_ _  ___  _ __  
|  __/ '__/ _ \ / _` | | | |/ __| __| |/ _ \| '_ \ 
| |  | | | (_) | (_| | |_| | (__| |_| | (_) | | | |
\_|  |_|  \___/ \__,_|\__,_|\___|\__|_|\___/|_| |_|
                                                   
Production 本番                                                   

3.試してみる

$ ssh production

Last login: Wed Jul 13 15:41:47 2016 from 172.16.100.15
______              _            _   _             
| ___ \            | |          | | (_)            
| |_/ / __ ___   __| |_   _  ___| |_ _  ___  _ __  
|  __/ '__/ _ \ / _` | | | |/ __| __| |/ _ \| '_ \ 
| |  | | | (_) | (_| | |_| | (__| |_| | (_) | | | |
\_|  |_|  \___/ \__,_|\__,_|\___|\__|_|\___/|_| |_|
                                                   
Production 本番 

イエイ!


くれぐれも「STGと間違って本番にデプロイしちゃった☆」みたいなことがないようにしましょう!

Rails|Emailのバリデーション

背景

はじめはemail_validatorを使用していたのですが、
「hogehoge@hoge.com」のように入力された時、うまくバリデーションがかからなく・・・。
あらためて調べてみると、以下の場合はうまくバリデーションがかかっていないようでした。

  • 先頭に半角/全角スペース許容してる
  • 全角を許容してる

うーむ、困った。


解決方法

1.email_validatorに代わってvalidates_email_format_ofを使用する

github.com

  • @前は64文字以内であること
  • 全角は弾く
  • 先頭/email中/末尾の全角スペースは弾く
  • email中の半角スペースは弾く

上記ちゃんとチェックしてくれているようです。


2.先頭/末尾の半角スペースを弾く
バリデーションをかける前に、不要なスペースを排除します。
Stringクラスのstripは前後の空白文字を削除してくれる強いやつ。

class User < ActiveRecord::Base

    before_validation :remove_space

    # バリデーション前に前後の空白文字を削除
    def remove_space
        self.email.strip!
    end

    # validations
    validates_presence_of :email, message: "入力必須です。"
    validates_length_of :email, in: 0..100, message: "100文字以内で入力ください。", if: :email?
    validates :email, :email_format => {:message => '正しいメールアドレスの形式で入力ください。'}

end