Hướng dẫn cài đặt IonCube php extension trên Heroku - Tưởng không dễ mà dễ không tưởng

Hướng dẫn cài đặt IonCube php extension trên Heroku - Tưởng không dễ mà dễ không tưởng

·

2 min read

Tôi vốn là một Fan của Heroku nên mỗi khi deploy một ứng dụng web nào đấy tôi liền nghĩ ngay đến Heroku - vì nó miễn phí mà lại cloud :~) Lần này tôi tình cờ deploy một ứng dụng PHP nhưng cần phải dùng một php extension không có sẵn -IonCube. "Tưởng không dễ mà dễ không tưởng" chính xác phù hợp cho trường hợp này.

Cho ai cần tìm hiểu về cách deploy một ứng dụng PHP trên Heroku có thể tham khảo thêm tại devcenter.heroku.com/articles/getting-start.. (build thêm web pack heroku-buildpack-php) hoặc 1 list các App có sẵn tại elements.heroku.com/search/buttons?q=php

Tại sao phải build thêm Extension?

image.png

Tương tự Ruby, Python, để deploy trên Heroku cũng cần sử dụng Composer tương tự với Gem và Pip. Heroku chỉ hỗ trợ mặc định một số Extension có sẵn cho PHP (devcenter.heroku.com/articles/php-support#e..). Và muốn dùng extension khác thì phải dùng repositive bên thứ 3 hoặc tự build repositive theo hướng dẫn của Heroku.

Tưởng không dễ

image.png

Tưởng không dễ vì đọc topic của Heroku về cách build, cũng loằng ngoằng phết, làm theo, thử đi thử lại bao nhiêu lần chẳng hiểu sao toàn fail (mất toi 2 ngày trời!) - github.com/heroku/heroku-buildpack-php/blob..

Tuy không thành công nhưng cũng tốt vì vỡ ra nhiều điều, hiểu thêm về kiến trúc build trên Heroku, có cơ hội tôi sẽ viết thêm sau.

Dễ không tưởng

Đến khi hầu như không còn hi vọng gì, định xuống tiền cho Google với Amazon rồi thì tia sáng lóe lên. Ông Heroku này bản chất chạy docker, vì vậy cấu hình hay extension gì cứ copy sẵn ở bản local rồi commit lên là sẽ có, không nhất thiết phải cài đặt theo kiểu composer. Vì vậy tôi tìm ra cách dễ không tưởng.

Bước 1: Download bản build sẵn của extension

Trong trường hợp này là Ioncube thì cứ lên trang chủ down về thôi (ioncube.com/loaders.php). Nhớ download đúng bản tương ứng với stack sử dụng ở Heroku (Ubuntu là ok - devcenter.heroku.com/articles/stack-packages)

Bước 2: Giải nén và copy vào đường dẫn trên local tương ứng với thư mục của php extension. Trường hợp này là:

mkdir -p .heroku/php/lib/php/extensions/no-debug-non-zts-20180731/

Bước 3: Copy file config ioncube vào thư mục ini của php.d

echo "zend_extension = /app/.heroku/php/lib/php/extensions/no-debug-non-zts-20180731/ioncube_loader_lin_7.3.so" > .heroku/php/etc/php/conf.d/00-ioncube.ini

Bước 4: Commit và chờ thành quả

image.png

Ảnh: Dùng script loader có sẵn của Ioncube để check

Chúc các bạn thành công!