ログってなんぼ

日々のメモです

CodeIgniter3で環境ごとに設定ファイルを分ける

CodeIgniter3.1.4最近触っていまして。。。環境ごとに設定ファイルを分ける方法をメモ

Nginxが前提です

環境変数を定義

fastcgi_param CI_ENV production;

同名のディレクトリをconfig直下に作ってファイルを入れる

application/config/production/config.php
application/config/production/database.php

コレでOKです

Chatbot開発の効率がUP!「ngrok」でマシンのWebサーバーを一時的に外部公開する

f:id:Okisanjp:20160712181631p:plain

はーい!Chatbot開発してますか!

というわけで今回はngrok(エングロック)というサービスの紹介したいとおもいます。

127.0.0.1:8080などのlocalhost URLでテストできないPaypalやChatobotサービス連携の実装などで役に立ちます

herokuの無料プランに頻繁にデプロイしてテストしてもいいですが、リポジトリにpushするためにいちいちコミットメッセージ書かないといけないので作業効率が落ちますし、何より動くかどうかわからないコードのコミットメッセージは日記みたいになっちゃう(○○処理を△△してみた、とかw)のであまり好きじゃなかったりします

ngrokのインストール

Mac+homebrewならこんな感じ

$ brew install ngrok
==> Downloading https://homebrew.bintray.com/bottles/ngrok-*.*.*_*.el_capitan.bottle.tar.gz
######################################################################## 100.0%
==> Pouring ngrok-*.*.*_*.el_capitan.bottle.tar.gz
🍺  /usr/local/Cellar/ngrok/*.*.*_*: 4 files, 10.7M

ダウンロードサイト

ダウンロードしてインストールするならこちらから

https://ngrok.com/

localhostにWebサーバーを起動

$ rails s -p 8080

ngrokを起動

$ ngrok 8080


ngrok                                                                                                 (Ctrl+C to quit)

Tunnel Status                 online
Forwarding                    https://XXXXX.ngrok.com > 127.0.0.1:8080
Forwarding                    http://XXXXX.ngrok.com > 127.0.0.1:8080
Web Interface                 127.0.0.1:4040
# Conn                        0
Avg Conn Time                 0.00ms

有料プラン

Basicプラン(年60$)を選択すれば、3つまで任意の固定サブドメインをキープできる他、特典があります。

それ以上のプランを選択すれば、IP Whitelistその他特典付き。

ngrok.com

PaypalのIPN、ChatobotのコールバックURLなどを用いて開発をするときに便利です。ただし、セキュリティのため、使わない時にはちゃんと終了しておきましょう。

terraform:backendにS3を使って環境ごとに状態ファイルを管理する

www.terraform.io

prd環境とstg環境で設定ファイルとstateファイルを分けて管理するメモです

terraform0.9あたりからの機能を使っているっぽいのと、そのあたりちゃんと調べきれていないので一応v11.0以上推奨のメモということにしておきます

続きを読む

Windowsホスト+Vagrantのプロビジョニングにansible_localを使う

Vagrant環境のプロビジョニングにAnsibleを使っています。

Windows環境ではansibleをインストールすることが出来ないので、ホスト側のAnsibleを使うのではなく、ゲストOSにAnsibleを入れてそちらを使うようにする対応です。

Vagrantfile

    config.vm.provision "ansiblel" do |ansible|
      ansible.playbook = "ansible/dev.yml"
    end

これを

    config.vm.provision "ansible_local" do |ansible|
      ansible.playbook = "ansible/dev.yml"
    end

こう書き換えます

playbook

今回の例で言うとdev.ymlの中身になります

- hosts: dev-env
  connection: local
  user: vagrant
  vars_files:
    - group_vars/dev-env.yml
  roles:
    - common
    - web

connection: localを追記しています

vagrant for windows 1.9.6で動作確認済み

【事故防止】.ssh/configでIncludeを使う

追記したいのに上書きしてしまった

あるあるすぎる事故を未然に防ぎましょう(´・ω・`)

$ ssh -V
OpenSSH_7.5p1, LibreSSL 2.5.4

あなたのopensshが7.3以上ならできます

https://www.openssh.com/txt/release-7.3

前準備

まず~/.ssh/conf.dなどといった任意のディレクトリを作っておきます

$ mkdir ~/.ssh/conf.d

.ssh/config

.ssh/configには下記のようにIncludeと基本的な設定のみを書いておきます

ServerAliveInterval 30
Include conf.d/*

conf.d 以下

$ tree ~/.ssh/
/Users/okisanjp/.ssh/
├── conf.d
│   ├── service-1
│   ├── service-2
│   └── service-3

こんな感じで、サービスごとに設定ファイルを分けておけば、上書き事故が減ります

python boto3でawsのprofileを複数指定してそれぞれの請求額を取得する

たくさんアカウントを抱えていて、一気に確認したいのと、boto3使ってみたかったので。

~/.aws/credentialsのprofileをprofilesに列挙して実行

# coding:utf-8

from boto3.session import Session
import datetime

profiles = ['profile1', 'profile2']

for profile in profiles:
    session = Session(profile_name=profile)

    client = session.client('cloudwatch', region_name = 'us-east-1')

    bill_data = client.get_metric_statistics(
                    Namespace='AWS/Billing',
                    MetricName='EstimatedCharges',
                    Dimensions=[
                        {
                            'Name': 'Currency',
                            'Value': 'USD'
                        }
                    ],
                    StartTime=datetime.datetime.today() - datetime.timedelta(days=1),
                    EndTime=datetime.datetime.today(),
                    Period=86400,
                    Statistics=['Maximum']
                )['Datapoints'][0]

    print "{0:15s}".format(str(profile)) + "{0:8s}".format(str(bill_data['Maximum'])) + ' (USD)'

実行結果

profile1          653.16  (USD)
profile2         55.11    (USD)

うーん(・∀・)イイネ!!

他の機能も使ってみようっと

Boto 3 Documentation — Boto 3 Docs 1.4.8 documentation

firewalldでシンプルにIP制限(ホワイトリスト方式)

trustedゾーンにIPアドレスを追加

# firewall-cmd --zone=trusted --add-source=192.168.0.100

publicゾーンからサービスを削除

内容はお好みで

# firewall-cmd --zone=public --remove-service=http
# firewall-cmd --zone=public --remove-service=https
# firewall-cmd --zone=public --remove-service=ssh
# firewall-cmd --zone=public --remove-service=dhcpv6-client

trustedゾーンにサービス追加

お好みで

# firewall-cmd --zone=trusted --add-service=http
# firewall-cmd --zone=trusted --add-service=https
# firewall-cmd --zone=trusted --add-service=ssh

内容確認

こうなる

# firewall-cmd --zone=public --list-services
(何も表示されていない)
# firewall-cmd --zone=trusted --list-services
ssh http https