LoginSignup
8
8

More than 5 years have passed since last update.

dokku-altとheroku-buildpackで捗る社内サービス開発(Linuxパッケージ依存編)

Last updated at Posted at 2016-04-08

事の経緯

  1. 社内サービス開発!PHPで!出来によってはサービス化も!?どんなサーバーでも動くようによろしく!
  2. 社長!Imagickのみだとリソースやばいです!(前回参照)
  3. aptパッケージなら何とか実用に耐えられる速度・・・、レンタルサーバー等は諦めよう。
  4. ただデプロイも簡単にしたいしお金掛けたくないし、複数アプリを1台で簡単に賄えるようにしたいし、人的依存や管理コストも問題。
  5. dokku-altで何とかならんのか・・・?
  6. なんとかなりました。なりませんでした。
  7. dokku-altからdokkuに変更しました。(なんとかなりました)

追加

  • 2016/04/09
    • .envにtesseract-ocr用データを追記
    • Aptfileにtesseract-ocr用日本語・英語ライブラリを追加

dokkuのインストール等々、参考サイト

dokku-altのインストール等々、参考サイト

準備

// laravelインストール
composer create-project laravel/laravel sampleapp --prefer-dist
cd sampleapp

// PHPのExtensionパッケージはここで指定出来る
// 参照: https://devcenter.heroku.com/articles/php-support#extensions
vi composer.json
~略~
"require": {
    ~略~
    "ext-imagick": "*",
    ~略~
}

// おまじない
echo "WAIT=5" > CHECKS

// nginx起動用のconf指定
vi Procfile
web: vendor/bin/heroku-php-nginx -C nginx_app.conf public/

// tesseract-ocr用のライブラリ場所を指定
vi .env
TESSDATA_PREFIX=/app/.apt/usr/share/tesseract-ocr

// nginxのconf(locationのみでいい?)
vi nginx_app.conf
location / {
    try_files $uri @rewriteapp;
}

location @rewriteapp {
    rewrite ^(.*)$ /index.php/$1 last;
}

buildpackを指定する

// .envにビルドパックのURLを指定する。今回は複数のビルドパックを使いたいのでbuildpack-multiを指定
echo "BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi" >> .env

// 利用するビルドパック群を指定する
vi .buildpacks
https://github.com/ddollar/heroku-buildpack-apt
https://github.com/aozora0000/heroku-buildpack-php-custom // 自分でカスタムしたのも指定出来る

// heroku-buildpack-aptでインストールするaptパッケージを指定
vi Aptfile
tesseract-ocr
tesseract-ocr-jpn
tesseract-ocr-eng
poppler-utils

デプロイ

あとは何時も通り、commitしてから、git remote add dokku dokku@dokku.local:sampleappするだけ。

aptパッケージの行方

コンテナ内に入ってwhich pdfimagesしてみると、/app/.apt/usr/bin/pdfimagesにありました。
コンテナ内でパスは通っているので大丈夫だと思いますが、絶対パス指定したい場合はこの辺りを指定してあげるといいかもです。

dokku-altアプリの開発中の問題

  • ubuntu14.04+dokku-alt in virtualboxだと、docker周りが安定しない
    • Error response from daemon: Cannot start container cb4bcaa009ff8f039215ff9d3631fe37293dbcec41b3764051b347a8f69c7450: Error getting container cb4bcaa009ff8f039215ff9d3631fe37293dbcec41b3764051b347a8f69c7450 from driver devicemapper: Error mounting '/dev/mapper/docker-8:1-268031-cb4bcaa009ff8f039215ff9d3631fe37293dbcec41b3764051b347a8f69c7450' on '/var/lib/docker/devicemapper/mnt/cb4bcaa009ff8f039215ff9d3631fe37293dbcec41b3764051b347a8f69c7450': no such file or directory
    • こんなん出てデプロイ落ちる。
    • 一応dokkuサーバーにログインしてdokku delete sampleapp後に再度pushすると戻る、が手間
    • dokku-altからdokkuに変更すると出なくなった!
  • vagrant halt && vagrant upしたら、dokkuユーザーからdocker繋がらない
    • sudo su -でrootに入った後、usermod -G docker dokkuすると繋がった。
    • 初めてだとコケがちだと思うので公式対応して欲しいな・・・
  • composer.lockを.gitignoreに入れると死ぬ。
  • heroku/heroku-buildpack-phpのcedir-14.Dockerfileとは何だったのか・・・
8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8