laradockがより簡単により便利に進化していた!

laradockを入れてみた

前書き

少し前にlaradockを使った時は
結構あちこち設定ファイルをいじらないと動かなかった気がするんですが、
今日触ってみてビックリかなり短時間で動くとこまでいった。
ただ過去のバージョンの情報を見てしまうと混乱する恐れがあるので、
今日時点で最新バージョンで実行した方法をメモしておきます。
dockerのインストールをまず行ってください。
https://www.docker.com/community-edition#/download

プロジェクトディレクトリの作成

/c/User/xxxx/project_nameディレクトリ作成
※ windows版のマウント先は/c/User/xxxxがC:\User\xxxx

git clone

  • project_nameディレクトリに移動
cd /c/User/xxxx/project_name
  • git cloneする
git clone https://github.com/Laradock/laradock.git

設定ファイルの修正

  • laradockディレクトリに移動
cd laradock
  • .envファイルの作成
cp env-example .env
  • .envに追記
DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkd
  • nginxの設定ファイルを作成
cd nginx/sites/
cp default.conf project_name.conf
mv default.conf default.conf.bk
  • nginxの設定ファイルを修正
root /var/www/public

root /var/www/project_name/public

起動してみる

  • 起動
docker-compose up -d nginx mysql phpmyadmin redis workspace
  • IPを調べる
docker-machine ip

macの場合はlocalhostでアクセスするので不要
* ブラウザでアクセス
windowsの場合 http://192.168.xx.xxx
macの場合 http://localhost
nginxのnot foundページが表示される

大体マニュアルで行ける http://laradock.io/

git add .したらwarning: LF will be replaced by CRLF inが出まくったのは改行コードを自動変換していたから

プロジェクトをゼロから作成する場合

  • laravelのインストール
composer create-project laravel/laravel --prefer-dist project_name

既存のプロジェクtリポジトリからcloneする場合

  • git cloneする
docker-compose exec workspace bash
cd project_name
git clone URL
composer install
cp .env.example .env
php artisan key:generate

fluentd形式チェッカー


最近fluentdをいじってます。
かなりいろいろなことが出来て便利なんですが・・・
正規表現のチェックが非常に面倒。

そこで、入力文字と正規表現をセットしてチェック出来るwebツールを使います。
http://fluentular.herokuapp.com/(herokuの無料プランっぽい)
ただ、これ実際に動作しますが、サンプルサイトということもありよく落ちます。

githubにも書いてありますが、
docker hubから取得してローカルに立てた方がよい
https://github.com/Tomohiro/fluentular

  • docker pullしてきて

    $ docker pull tomohiro/fluentular
  • dockerを起動

    $ docker run -d -p 8080:8080 tomohiro/fluentular
  • ipを調べて

    $ docker-machine ip

    ブラウザで出てきたIP + :8080でアクセス

  • 止めるには

    $ docker ps
  • 上で出てきたCONTAINER IDを指定して下記を実行するとストップする

    $ docker stop CONTAINER ID

vagrant環境にDjangoをインストールしてみた

virtual box

vagrant

  • vagrantをインストールする
            公式サイト
        
  • boxファイルを取得する

    $ mkdir -p ~/Vagrant/django/
    $ cd ~/Vagrant/django/
    $ vagrant init bento/centos-6.8
    $ vagrant up --provider virtualbox
  • Vagrantfileにポートフォワードの設定を記載する

    config.vm.network "forwarded_port", guest: 8000, host: 8080

centOS 6.8

  • 諸々updateして、必要な物をインストールする
    gitはpipのインストールに必要
    sqlite-develはDjangoに必要

    $ yum update
    $ yum install gcc*
    $ yum install openssl-devel
    $ yum install kernel-devel
    # pipのインストールに必要
    $ yum install git
    # Djangoの利用に必要
    $ yum install sqlite-devel

Python

  • Pythonのインストール
         ダウンロードページ
        

    $ cd /usr/local/src
    $ wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
    $ tar xzvf Python-3.5.2.tgz
    $ cd Python-3.5.2
    $ ./configure
    $ make
    $ make install
    $ python3 --version

        

pip

  • Pipのインストール

    $ cd /usr/local/src
    $ wget https://bootstrap.pypa.io/get-pip.py
    $ python3 get-pip.py
    $ pip3 --version

Django

  • djangoのインストール

    pip3 install Django==1.10.3

Django Projectの作成と起動

  • プロジェクトの作成

    $ python3 /usr/local/bin/django-admin.py startproject new_project
    $ cd new_project
  • 設定ファイルを修正

    $ vi new_project/settings.py
    #ALLOWED_HOSTS = []
    ALLOWED_HOSTS = ['*']
  • サーバーを起動

    $ python3 manage.py migrate
    $ python3 manage.py runserver 0.0.0.0:8000

テストページを表示

下記のURLにアクセスする
http://127.0.0.1:8080
テストページが表示される

google analytics設定時メモ

Google アナリティクスを設定する

Analytics APIを有効にする

HTTP リクエストでユーザーの利用状況に関する生データを Google アナリティクス サーバーに直接送信

レポート API

Management API バージョン 3.0 のリファレンス ガイド

簡単にマイレポートを作成したり埋め込んだりできるようにする JavaScript ライブラリ

Google アナリティクスのデータ収集上限プロパティあたり 1 か月 1,000 万ヒット

Google アナリティクス アカウントではプロパティを 50 個まで設定できます。

ユーザー権限

Analytics360は月額130万円(googleの公式サイトではない)

windows7内にansibleを使ってWebサーバ、DBサーバを構築する ~provision用shell編~

windows7内にansibleを使ってWebサーバ、DBサーバを構築する ~Vagrantfile編~の続きです。

  1. vagrant_dataに各種設定ファイルを設置しておきます。

    ansible.cfg
    hosts
    httpd.conf
    MariaDB.repo
    my.cnf
    php.ini
    lamp.yml
    php.yml
    mariadb.yml
    repo.yml
    

    apacheやMariaDB、phpの設定ファイルについてはこちらでは説明しません。
    各種ymlファイルはansibleのplaybookになっているので、次回説明します。
    ansible.cfg

    [defaults]
    host_key_checking = False
    inventory = /etc/ansible/hosts
    

    ここではsshに初めてアクセスする際の確認をスキップする設定とインベントリファイルの指定を行っています。
    hosts

    [web-servers]
    192.168.33.12 ansible_ssh_private_key_file=/etc/ansible/private_key_web ansible_ssh_user=vagrant
    [db-servers]
    192.168.33.13 ansible_ssh_private_key_file=/etc/ansible/private_key_db ansible_ssh_user=vagrant
    

  2. ctrl_setup.shにシェルで実行するコマンドをまとめて記述しておきます。

    #!/bin/bash
    #epelリポジトリのimport
    sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
    #epel,sshpass,pythonのインストール
    sudo yum install -y epel-release sshpass python-devel
    #pipのインストール
    sudo easy_install pip
    #ansible,paramiko,PyYAML,Jinja2,httplib2のインストール
    sudo pip install ansible paramiko PyYAML Jinja2 httplib2
    #ansible設定ファイル設置ディレクトリの作成
    if [ ! -e '/etc/ansible/' ]; then
        sudo mkdir /etc/ansible/
    fi
    #webのssh用private_keyを権限が変更出来るディレクトリにコピー
    sudo cp -f /vagrant/.vagrant/machines/web/virtualbox/private_key /etc/ansible/private_key_web
    #dbのssh用private_keyを権限が変更出来るディレクトリにコピー
    sudo cp -f /vagrant/.vagrant/machines/db/virtualbox/private_key /etc/ansible/private_key_db
    #webのssh用private_key権限を700に変更
    sudo chmod 700 /etc/ansible/private_key_web
    #dbのssh用private_key権限を700に変更
    sudo chmod 700 /etc/ansible/private_key_db
    #ansbileのインベントリファイルをコピー
    sudo cp -f /vagrant_data/hosts /etc/ansible/
    #ansbileインベントリファイルの実行権限を削除
    sudo chmod -x /etc/ansible/hosts
    #ansible設定ファイルをコピー
    sudo cp -f /vagrant_data/ansible.cfg /etc/ansible/
    #ansibleのplaybookの実行
    sudo ansible-playbook /vagrant_data/lamp.yml
    

windows7内にansibleを使ってWebサーバ、DBサーバを構築する ~Vagrantfile編~

  1. 現在のところansibleはwindowsには対応していません。
    なので、今回はvagrantでマルチマシン設定を行います。
    構築するのは下記の構成。
    ansible
    ctrl : ansibleをインストールしここからwebサーバ、DBサーバの構築を指示します。
    web : webサーバです。apache、php、mariaDB(クライアント用途)をインストールします。web→dbサーバに接続する設定をします。
    db : dbサーバです。mariaDB(サーバ)をインストールして外部から接続するように設定します。
    ※git bashをインストールしておくとlinuxのコマンドがある程度打てるようになるのでお勧めです。

  2. vagrant init行います。
    今回のテスト用にホームディレクトリにansibleというディレクトリを作成し、その中でvagrant init行います。
    ※vagrant、git bashのインストールは完了しているのが前提です。

    mkdir /c/ansible
    cd /c/ansible
    vagrant init centos71
    vi Vagrantfile
    

    上記の例ではc:\の直下に作業ディレクトリansibleを作成しました。

  3. Vagrantfileの記述
    ctrlにansibleをインストール行い、webサーバ、dbサーバの構成を管理するようにします。

    Vagrant.configure(2) do |config|
    

    に追記していく。
    下記の設定を行うとwindows7のディレクトリとVM内のディレクトリでファイルの共有が可能になります。
    前者がwindows、後者がlinux側のディレクトリ。

    config.vm.synced_folder "./data", "/vagrant_data"
    

まずはctrl
下記のように記載する。

//ctrl
config.vm.define :ctrl do |ctrl|
    //ボックス名
    ctrl.vm.box = "centos71"
    //sshのforward設定
    ctrl.vm.network :forwarded_port, guest: 22, host: 2001, id: "ssh"
    //IP設定
    ctrl.vm.network :private_network, ip: "192.168.33.11"
    //provision実行するshell指定
    ctrl.vm.provision "shell", privileged: false, path: "ctrl_setup.sh"
end

実行するshellファイルctrl_setup.shは主にansibleのインストールやsshの設定、ansibleのplaybookの実行を行うように記述しています。
内容は後述します。
次にweb。

//web
config.vm.define :web do |web|
    //ボックス名
    web.vm.box = "centos71"
    //sshのforward設定
    web.vm.network :forwarded_port, guest: 22, host: 2002, id: "ssh"
    //httpのforward設定
    web.vm.network :forwarded_port, guest: 80, host: 8000, id: "http"
    //IP設定
    web.vm.network :private_network, ip: "192.168.33.12"
end

最後にdb。

//db
config.vm.define :db do |db|
    //ボックス名
    db.vm.box = "centos71"
    //sshのforward設定
    db.vm.network :forwarded_port, guest: 22, host: 2003, id: "ssh"
    //IP設定
    db.vm.network :private_network, ip: "192.168.33.13"
end

すべてまとめて書くと下記のようになる。
ctrlが最下部なのはwebとdbに対してansibleのplaybookを実行するため。

Vagrant.configure(2) do |config|
    config.vm.box = "base"
    config.vm.synced_folder "./data", "/vagrant_data"
    config.vm.define :web do |web|
        web.vm.box = "centos71"
        web.vm.network :forwarded_port, guest: 22, host: 2002, id: "ssh"
        web.vm.network :forwarded_port, guest: 80, host: 8000, id: "http"
        web.vm.network :private_network, ip: "192.168.33.12"
    end
    config.vm.define :db do |db|
        db.vm.box = "centos71"
        db.vm.network :forwarded_port, guest: 22, host: 2003, id: "ssh"
        db.vm.network :private_network, ip: "192.168.33.13"
    end
    config.vm.define :ctrl do |ctrl|
        ctrl.vm.box = "centos71"
        ctrl.vm.network :forwarded_port, guest: 22, host: 2001, id: "ssh"
        ctrl.vm.network :private_network, ip: "192.168.33.11"
        ctrl.vm.provision "shell", privileged: false, path: "ctrl_setup.sh"
    end
end

LAMP環境構築itamaeレシピを作ってみる

実際に実行するレシピ setup.rb

まずはtimezoneを設定します

# timezoneの設定
execute 'set timezone' do
  command 'timedatectl set-timezone Asia/Tokyo'
end

次にfirewallの停止と無効化
開発環境なのでばっさりきります

# firewalld停止,無効化
service 'firewalld' do
  action [:disable, :stop]
end

インストールするミドルウェア別にレシピを作成しそれを読み込む
それぞれの内容は後述する
それぞれのレシピはこのレシピと同階層のcookbooks配下に
それぞれのミドルウェアのディレクトリを作成してそこに配置することとする。

include_recipe "./cookbooks/apache/default.rb"
include_recipe "./cookbooks/php/default.rb"
include_recipe "./cookbooks/mariadb/default.rb"
include_recipe "./cookbooks/phpmyadmin/default.rb"

最後に設定の反映を兼ねてApacheを起動、有効化する

# Apache起動、有効化
service 'httpd' do
  action [:start, :enable]
end

Apache設定レシピ ./cookbooks/apache/default.rb

# Apacheインストール
package 'httpd' do
  version '2.4.6'
end

# httpd.confのバックアップ
execute 'httpd.conf backup' do
    command 'mv /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org'
end

# httpd.confの転送
remote_file "/etc/httpd/conf/httpd.conf" do
  owner "root"
  group "root"
  source "/vagrant_data/httpd.conf"
end

PHP設定レシピ ./cookbooks/php/default.rb

# PHPのremiリポジトリ設定
execute 'php remi repo set' do
    command <<-EOF
rpm --import https://raw.githubusercontent.com/remicollet/remirepo/master/remi-release/RPM-GPG-KEY-remi
yum -y install yum-utils http://remi.kazukioishi.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php56
EOF
end

# PHPのインストール
package 'php' do
    version '5.6.14'
end

# PHPのプラグインをインストール
package 'php-mysqlnd php-gd php-intl php-mbstring'

# php.iniのバックアップ
execute 'php.ini backup' do
    command 'mv /etc/php.ini /etc/php.ini.org'
end

# php.iniの転送
remote_file "/etc/php.ini" do
  owner "root"
  group "root"
  source "/vagrant_data/php.ini"
end

# phpinfoの転送
remote_file "/var/www/html/info.php" do
  owner "apache"
  group "apache"
  source "/vagrant_data/info.php"
end

MariaDB設定レシピ ./cookbooks/mariadb/default.rb

# MariaDBインストール
package 'mariadb-server'

# MariaDB所有者設定
execute 'mariadb permition' do
    command <<-EOL
chown -R mysql:mysql /var/log/mariadb
chown -R mysql:mysql /var/lib/mysql
EOL
end

# my.cnfのバックアップ
execute 'my.cnf backup' do
    command 'mv /etc/my.cnf /etc/my.cnf.org'
end

# my.cnfの転送
remote_file "/etc/my.cnf" do
  owner "root"
  group "root"
  source "/vagrant_data/my.cnf"
end

# MariaDB起動、有効化
service 'mariadb' do
  action [:start, :enable]
end

# MariaDB初期設定
execute "mysql_secure_installation" do
  user "root"
  only_if "mysql -u root -e 'show databases' | grep information_schema" # パスワードが空の場合
  command <<-EOL
mysqladmin -u root password "password"
mysql -u root -ppassword -e "DELETE FROM mysql.user WHERE User='';"
mysql -u root -ppassword -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1');"
mysql -u root -ppassword -e "DROP DATABASE test;"
mysql -u root -ppassword -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';"
mysql -u root -ppassword -e "FLUSH PRIVILEGES;"
EOL
end

phpMyAdmin設定レシピ ./cookbooks/phpmyadmin/default.rb

# phpMyAdminインストール
package 'phpMyAdmin'

# phpMyAdmin権限設定
execute 'phpMyAdmin owner permition' do
  command <<-EOL
chown -R apache:apache /usr/share/phpMyAdmin/
chmod -R 700 /usr/share/phpMyAdmin/
EOL
end

# phpMyAdmin.confのバックアップ
execute 'phpMyAdmin.conf backup' do
    command 'mv /etc/httpd/conf.d/phpMyAdmin.conf /etc/httpd/conf.d/phpMyAdmin.conf.org'
end

# my.cnfの転送
remote_file "/etc/httpd/conf.d/phpMyAdmin.conf" do
  owner "root"
  group "root"
  source "/vagrant_data/phpMyAdmin.conf"
end

※各設定ファイルはそれぞれ/vagrant_data配下に設定しておく必要がある

あとは実行するだけ

su -
itamae local setup.rb

Vagrant + Itamaeでサーバの構成管理をする

itamae

今回はまずVagrant内の環境でお試します。

  1. Vagrantのインストール
    https://www.vagrantup.com/
    DOWNLOADボタンをクリック
    該当のOSのリンクをクリック
    インストーラーにしたがってインストールする
    ※少し時間がかかります。

  2. BOXの追加
    http://www.vagrantbox.es/
    でお好みのOSを探し、URLをコピーする。

    $ vagrant add centos71 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
        

  3. vagrant up
    ディレクトリを作成し、vagrantの初期化を行います。
    その後、vagrant upで起動させます。

    $ mkdir vagrant_test
    $ cd vagrant_test
    $ vagrant init cenetos71
    $ vagrant up
        

    少し時間がかかるので、まったりと待つ。

  4. vagrant ssh
    起動されたらsshでアクセスしてみましょう。

    $ vagrant ssh
        

  5. rubyをインストールする
    itamaeを動かすにはrubyが必要なのでインストールする

    $ su -
    # yum install ruby
        

    確認

    # ruby -v
    ruby 2.0.0p598 (2014-11-13) [x86_64-linux]
        

  6. itamaeをインストールする
    gemでインストールする

    # gem install itamae
        

    確認

    # itamae version
    Itamae v1.6.0
        

    ※ rubyとitamaeのインストールはVagrantfileに書いておくと楽

    config.vm.provision ”shell”, inline: <<-SHELL
      sudo yum install -y ruby
      sudo gem install itamae
    SHELL
        

  7. recipeを作成する

    # mkdir /recipes
    # vi httpd.rb
        

    apacheをインストールして起動するレシピ

        # Apacheインストール
        package 'httpd' do
          action :install
        end
    
        # Apache起動、有効化
        service 'httpd' do
          action [:enable, :start]
        end
        

  8. recipeを実行する

    # cd recipes
    # itamae local httpd.rb
        

  9. Apacheの起動を確認する

    # systemctl status httpd
    
        

    activeとなっておりapacheの起動が確認出来た。

Express Generatorを試す

express-generator

公式サイト
http://expressjs.com/ja/starter/generator.html

まずはインストール

npm install express-generator -g

次にgeneratorを実行
アプリ名をsampleとして作成

express sample

npmでインストールするアプリ用にpackage.jsonを編集

cd sample

package.jsonの中身を確認

    {
      "name": "sample",
      "version": "0.0.0",
      "private": true,
      "scripts": {
        "start": "node ./bin/www"
      },
      "dependencies": {
        "body-parser": "~1.13.2",
        "cookie-parser": "~1.3.5",
        "debug": "~2.2.0",
        "express": "~4.13.1",
        "jade": "~1.11.0",
        "morgan": "~1.6.1",
        "serve-favicon": "~2.3.0"
      }
    }

上記内容をインストール

npm install

雛形を起動

npm start

該当ディレクトリを確認すると雛形が作成されている。