Lóng ngóng với CakePHP trên môi trường Docker

315

Người viết: Hoàng Đức Quân

Bài viết này ngoài đưa ra 1 cách để cài đặt CakePHP trên môi trường Docker thì cũng lưu lại 1 quãng đường gian khổ mày mò của mình về sử dụng cái framework CakePHP rối rắm này.

Phần mở đầu

Khi mà việc lập trình có tiện hơn 1 chút thì mình bắt đầu muốn học và làm nghiêm túc hơn, bắt đầu chuyển từ thói quen code win thành code trên 1 hệ điều hành kiểu Unix để sau còn deploy server. Và vấn đề to ở chỗ CakePHP khá là lằng nhằng để có thể code được trên HĐH kiểu Unix mình mới, lúc nào cũng báo thiếu gói *-intl mà mình hỏi mãi ở trên này không thấy giải pháp nào mình dùng được cả

Sau đó ông bạn làm cùng đã bày cho giải pháp ảo hóa với Vagrant. Nhưng không hiểu mình xử lý thế nào mà lại cũng vẫn thiếu cái extension khó chịu kia. Và mình lại phải đi tìm hiểu 1 chút. Và cũng vỡ ra được vài điều. Vấn đề mình gặp hóa ra nhiều bác trước cũng gặp rồi và các bác ấy cũng đề xuất ra mấy mô hình. Mô hình mà dùng Vagrant kia là mô hình thế này:

Dùng máy ảo mình không thấy hiệu quả với mình. Mà kể cả hiệu quả thì việc dùng máy ảo tốn RAM mình cũng không thích. “Vũ khí” cũ của mình toàn là các loại thiếu tài nguyên nên kể cả khi dùng đồ này thì mình cũng thực sự rén…. Thế là mình lại phải về “tà đạo”, mở đồ cũ code trên win lấy demo cho nhanh.

Về lại “tà đạo” thuận tiện thật, nhưng lương tâm bứt rứt vô cùng. Mình lại phải cố gắng làm thế nào mà nó lại có thể chạy trên môi trường kiểu Unix kia. Và đành vượt qua nỗi sợ + đang dịch bài, mình bắt đầu dấn thân tìm hiểu Docker. Và sơ sơ mình đã hiểu qua được mô hình của nó cũng như thích sự dùng đủ của containerization, không thích dùng ngốn nhưng ko dùng hết của virtualization.

Và thế là tự mày mò cài đặt. Thế quái nào vẫn chả chạy. Việc gấp cần báo cáo nên mình đã xin cầu viện và 1 vị BrSE tốt bụng đã gọi thẳng mình lên gặp trực tiếp để debug luôn. Giờ nghĩ lại ông anh toàn đi debug cho thằng sinh viên này từ phỏng vấn tới tận giờ cũng ngại thật (bow)

Và sau cùng thì nó cũng chạy. Tuy nhiên giờ mình lại phải làm 1 cái project khác. Và chặng đường lại bắt đầu.

Có thể bạn cần xem

Deploy web app với Traefik và Docker Swarm

Cố gắng lần 1(fail)

Đầu tiên, dựa vào bài dịch của các bác bên trên, mình đã chạy các lệnh sau:

Rồi chạy php:7.1.5-apache

Sau đó chạy thêm các thư viện cần thiết và cài composer

Mọi thứ đều rất ok cho tới khi mình tạo Dockerfile và docker-compose.yml. Đúng là mọi thứ đã chạy, mỗi tội không biết project đi đâu mà lần Làm sao để có thể code project được đây?

Tra cứu tiếp thì các hướng dẫn khác cũng không chạy nốt Tạm viết lại cái lần sai này để xem sau có thể sửa được nó thành đúng không hoặc có các bạn khác lấy ý tưởng để làm đúng vậy.

Cố gắng lần 2: Khá trâu bò nhưng hiệu quả

Túng quá đâm mình liều. Download source code dạng zip của cakephp về rồi thêm vào source code ấy Dockerfile và docker-compose.yml.

Dockerfile như sau:

Còn đây là docker-compose.yml

Ở app.php mình chỉnh như sau:

Chạy lần lượt các lệnh

Sau đó nhập http://localhost:8765, nó sẽ cho giao diện thế này

Tất cả các thông số đều màu xanh. Chứng tỏ là project này hoàn toàn kết nối tới 1 database và bạn hoàn toàn có thể chiến đấu thoải mái.

Các bước tiếp theo về migrate, seed,… các bạn sẽ đọc ở blog của cloud66 mình đính kèm link dưới đây.

Tuy nhiên với bản thân mình thì còn cần tạo cả khung MVC với các bảng nữa nên mình sẽ để 1 terminal chạy docker-compose up ở 1 bên và mở terminal mới chạy lệnh sau:

Bạn sẽ có 1 cái terminal mới:

Với terminal này bạn có thể tuỳ ý chạy các command thông thường của CakePHP, ví dụ:

À với cách này bạn phải tự tạo .gitattributes và .gitignore bằng tay nhé.

Tổng kết

Tưởng như đơn giản mà làm không ra, rồi sai sót mấy lần.

Cảm ơn các bạn đã đọc cái bài post lộn xộn này. Nội dung cũng thập cẩm này nọ thật. Rất mong các bạn thông cảm nếu thấy lằng nhằng

Techtalk via Viblo

CHIA SẺ