CircleCIでdocker-composerを使う

ローカルの環境をdocker-composerで作っていたものをCircleCIにあげたときにCI回せるように設定しました。

version: 2
jobs:
  build:
    # CircleCI側の仮想マシンを利用
    machine: true
    environment:
      # githubのリポジトリ指定
      - DOCKER_IMAGE_REPO: [github_acount]/[repository_name]
    # 作業用ディレクトリの指定(こだわりなければ何でも)
    working_directory: ~/[repository_name or somthing]
    steps:
      # githubからソースコードを取得
      - checkout

      # docker-composeコマンドをそのまま実行(buildなども可能   
      - run:
          # 実行時のカーソルに表示される(無くても良い)
          name: docker compose up
          command: docker-compose up -d
      # コマンド
      - run: 

      # 初期処理とか(初期処理用にinit.shを作っている場合)
      name: init
      command: ./init.sh

AmazonLinuxにMySql(5.7)のインストール

リポジトリの追加
sudo sudo yum -y install http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm
mysqlのインストール
sudo yum -y install mysql-community-server
起動設定
sudo chkconfig mysqld on
サービスの起動
sudo service mysqld start

Initializing MySQL database: [ OK ]
Installing validate password plugin: [ OK ]
Starting mysqld: [ OK ]

mysqlのルートのパスワードは
sudo vi /var/log/mysqld.logの中に
A temporary password is generated for root@localhost: XXXXXXXXXXXX
という行があってここに書いてあるのがパスワードです。

mysql -u root -p
で上記パスワードを入力するとコンソールで操作が可能になります。

Laravel実際に投げているクエリーの取得(5.2)

use IlluminateSupportFacadesDB;

DB::connection()->enableQueryLog();

ここでデータベースへの問い合わせ

$queries = DB::getQueryLog();
dd($queries);

もしくは

Event::listen('IlluminateDatabaseEventsQueryExecuted', function ($query) {
var_dump($query->sql);
var_dump($query->bindings);
var_dump($query->time);
});

https://laravel.com/docs/5.0/database#query-logging
http://laravel-tricks.com/tricks/display-all-sql-executed-in-eloquent#comment-2655309790

AWSのt2でmysqlが重い

AWSのt2でMySQLを動かし、大きめのテーブルを操作したところ
やけに反応が遅くてTOPを見るとどうもmysqlがメモリを使いまくっている状態
mysqlを止めて再起動すると
スタートに失敗して
mysqld dead but subsys lockedとの表示
freeで確認するとswapが内容なのでswapを作成することで解決

#dd if=/dev/zero of=/swapfile bs=1M count=1024
#mkswap /swapfile
#swapon /swapfile

vagrant+chefでcentos6.5+php5.5

秘伝のタレ状態で昔作ったVagrant環境を使いまわしていましたが
vagrantやVirtualBoxのバージョンを上げた所動かなくなったので
あらたに作り直しました。

Mac OSXへの環境構築を行います。

Vagrant
http://www.vagrantup.com/downloads.html
VirtualBox
https://www.virtualbox.org/wiki/Downloads
chef
http://www.getchef.com/downloads/chef-dk/
それぞれdmgでインストールしてください
knife soloを利用したいので

$chef gem install knife-solo

仮想環境にchefの設定を行うプラグインvagrant-omnibusも準備します。
$vagrant plugin install vagrant-omnibus

knife solo を使って初期化します。

$knife solo init centosphp(プロジェクト名等)
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...
Setting up Berkshelf...

引き続きphp等のレシピを作成します。

$cd centosphp
$knife cookbook create localedef -o site-cookbooks/
$knife cookbook create apache -o site-cookbooks/
$knife cookbook create php -o site-cookbooks/

それぞれ下記ファイルを修正します。
CentOSの日本語化
/site-cookbooks/localedef/recipes/default.rb

bash 'localedef' do
  code 'sudo localedef -f UTF-8 -i ja_JP ja_JP.UTF-8'
end

Apacheの設定
ドメインでアクセスさせるためにヴァーチャルホストを設定します。
/site-cookbooks/apache/recipes/default.rb

%w[httpd httpd-devel mod_ssl
].each do |pkg|
  package "#{pkg}" do
    action :install
  end
end

service 'httpd' do
  supports :status => true, :restart => true, :reload => true
  action [ :enable, :start ]
end

template "/etc/httpd/conf/httpd.conf" do
  source "httpd-2.2.conf.erb"
end

template "/etc/httpd/conf.d/php.vm.conf" do
  source "php.vm.conf.erb"
end

/site-cookbooks/apache/templates/default/httpd-2.2.conf.erb
設定ファイル一回仮想環境で作成したもの等をコピーして
NameVirtualHost *:80
の部分のコメントを外しました。

php.vmというドメインでアクセスさせます。
ドキュメントルートは後で設定するVagrantfileの中のsyncfolderとの関連で
適時修正してください。
ここでは仮想サーバの/var/www/src/php/public
をドキュメントルートとします。

/site-cookbooks/apache/templates/default/php.vm.conf.erb

<VirtualHost *:80>
    ServerName php.vm
    DocumentRoot /var/www/src/php/public

    <Directory /var/www/src/php/public>
        Options All
        AllowOverride All
        Order allow,deny
        Allow from all
   </Directory>
</VirtualHost>

remiからPHPをインストールしたいのでrepoの登録を行ってからPHPのインストールをします。
/site-cookbooks/php/recipes/default.rb

#epel
remote_file "/tmp/#{node['epel']['file_name']}" do
  source "#{node['epel']['remote_uri']}"
  not_if { ::File.exists?("/tmp/#{node['epel']['file_name']}") }
end

package node['epel']['file_name'] do
  action :install
  provider Chef::Provider::Package::Rpm
  source "/tmp/#{node['epel']['file_name']}"
end

#remi
remote_file "/tmp/#{node['remi']['file_name']}" do
  source "#{node['remi']['remote_uri']}"
  not_if { ::File.exists?("/tmp/#{node['remi']['file_name']}") }
end

package node['remi']['file_name'] do
  action :install
  provider Chef::Provider::Package::Rpm
  source "/tmp/#{node['remi']['file_name']}"
end

%w[ php php-pdo php-mbstring php-mysqlnd].each do |pkg|
  package "#{pkg}" do
    action :install
    options "--enablerepo=remi,epel,remi-php55"
  end
end

attributeにremiとepelのrpmのダウンロード先を指定します。
/site-cookbooks/php/attributes/default.rb

default['remi']['file_name']  = "remi-release-6.rpm"
default['remi']['remote_uri'] = "http://rpms.famillecollet.com/enterprise/remi-release-6.rpm"
default['epel']['file_name']  = "epel-release-6-8.noarch.rpm"
default['epel']['remote_uri'] = "http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm"

Vagrantfileの修正

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "chef/centos-6.5"
  config.vm.network "private_network", ip: "192.168.33.104"

  config.vm.synced_folder "./src", "/var/www/src", :create => true, :owner => 'vagrant', :group => 'vagrant', :mount_options => ['dmode=777', 'fmode=775']

  config.omnibus.chef_version = :latest

  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = "./site-cookbooks"
    chef.add_recipe "localedef"
    chef.add_recipe "apache"
    chef.add_recipe "php"
  end
end

php.vmでアクセスできるようにhostsの設定

$ sudo vi /etc/hosts

Vagrantfileで指定したIPを記述します

192.168.33.104 php.vm

後から手順を拾ったので、そのままで動かなかったらすいません

利用バーション
VirtualBox 4.2.36
Vagrant 1.7.2
Chef: 12.3.0

参考にしたページ
http://www.d-wood.com/blog/2014/09/29_6938.html
http://shusatoo.net/infra/chef/vagrant-chef-solo-php-mysql-development-environment/
http://dqn.sakusakutto.jp/2014/05/mac_osx_linux_chef_knife_berkshelf.html
その他
ありがとうございました。

knife solo initでCannot find sub command for: ‘solo init chef’

MacのOSXでknife soloを使おうとしたところ

$ knife solo init chef
FATAL: Cannot find sub command for: 'solo init chef'
Available subcommands: (for details, knife SUB-COMMAND --help)

** BOOTSTRAP COMMANDS **
knife bootstrap FQDN (options)
knife bootstrap windows ssh FQDN (options)
knife bootstrap windows winrm FQDN (options)

メッセージが続く

Cannot find sub command for: ‘solo init chef’
となってしまった。

$witch knife
/usr/bin/knife

となっていたのでインストールはされていたようだ

入れなおそうと

$brew list
$gem list

とかして探してみるがみつからず
2つchefを入れているとかそういう状態では無いようでした。

$ ls -la /usr/bin/knife*
lrwxr-xr-x  1 * *  21  5 13 20:07 /usr/bin/knife -> /opt/chefdk/bin/knife

chefdkでインストールしていたようだ

そこで「chefdk knife solo」と検索をしてみるとDQNEOさんのページがHITした
http://dqn.sakusakutto.jp/2014/05/mac_osx_linux_chef_knife_berkshelf.html

ChefDKにはknife soloが含まれていません。

なんと、、
記事にあるとおり

$chef gem install knife-solo

とするとChefDK内にknife-soloをインストールしてくれらしいです。

$ knife solo init chef
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...
Setting up Berkshelf...

ばっちり!

WordPressからSMTP(Google Apps 二段階認証)

WordPressからSMTPにてメールの送信を行う場合、WP Mail SMTPを利用すると便利です。

通常は

 

SMTP:smtp.google.com

 

WP Mail SMTP 設定画面
WP Mail SMTP 設定画面

SMTP:smtp.google.com

SMTP Port:465

Username:xxxxx@gGoogleAppsのドメイン

Password:GoogleAppsのパスワード

で送信が出来ますが、GoogleApps側で二段階認証を行っている場合は通常のパスワードでは送信出来ません。

送信に利用するユーザでログインした状態で

https://www.google.com/settings/security

Google Appsのセキュリティ設定にてアプリ パスワードの設定を選択してください。

 

次の画面でアプリパスワードの設定を行います。

画面の下の方のリストボックスで選択をします。

端末を選択で「その他」を選択し、名前を入力します。この名前は適当でいいですが仮にWordPressとでも入力しておきましょう。

 

生成を押すと黄色い枠の中にアプリパスワードが表示されます。

このパスワードを先ほどのWP Mail SMTPの設定画面のユーザパスワードの部分に設定してください。

設定後はその下にあるテストで実在するメールを入力してみてください。

メールが届かず、結果画面でfalseが表示されたらメールの送信は失敗です。

Google Appsのポリシーや、ユーザアカウントの設定等も再度確認してください。

 

 

Drupalのファイルアップロードサイズ

Drupalでファイルブラウザーを使って

ファイルアップロードすると2MBを超えています。等のエラーに鳴る場合がある

この場合php.iniの制限にかかっている場合があるので

php.iniを直接編集するか

upload_max_filesize = 50M
post_max_size = 50M

.htaccessにて

php_value upload_max_filesize 50M
php_value post_max_size 50M

を追加する必要がある。

Drupal7でCKEditor(TinyMCE)を使用する場合

Wysiwygのモジュールをインストールし有効にする。

環境設定>Wysiwyg profilesより

CKEditorの欄メッセージにしたがって

http://ckeditor.com/download

こちらからCKEditorをダウンロード

解凍したら

sites/all/libraries/ckeditor

にコピー

この状態で本来有効になるはずだが

The version of CKEditor could not be detected.

とエラーが表示される、この場合先ほどインストールしたディレクトリ中の

ckeditor.incの修正が必要となる

if (preg_match(‘@version:'(?:CKEditor )?([d.]+)(?:.+revision:'([d]+))?@’, $line, $version)) {

大体81行目付近、無い場合は@version等で検索をかけてください

この行の’を”に変更

if (preg_match(‘@version:”(?:CKEditor )?([d.]+)(?:.+revision:”([d]+))?@’, $line, $version)) {

として保存この状態でCKEditorが選択可能になるはず

なので編集からCKEditorを選択してください

 

追記20120301

ボタンの設定を行っていたところfont colorのボタンが表示されませんでしたので。

TimyMCEを使いました。