Tạo môi trường phát triển web đơn giản với Homestead

Lời giới thiệu

Bạn là một web developer, bạn hầu như chỉ biết dev sản phẩm của mình và hầu như các công việc ở giai đoạn lằng nhằng như cài LAMP (Linux – Apache – MySQL -PHP) hay LEMP (Linux – NginX – MySQL – PHP), cấu hình tên miền, cấu hình server hay đại loại là SSL quá lằng nhằng và tất nhiên việc bạn đem project của mình từ môi trường windows (WAMP) lên server linux thì đúng không thể nào lường trước được nó sẽ ra bao nhiêu là lỗi. Bạn chỉ muốn tập trung vào việc code thôi và chắc rằng môi trường local giống môi trường production đương nhiên phải chắc chắn rằng bạn không cần làm những công đoạn lằng quằng đó. Đó chí là lý do ra đời của Homestead.

Homestead do Laravel phát triển, nó bao gồm:

  • Ubuntu 14.04
  • Git
  • PHP 7.0
  • HHVM
  • Nginx
  • MySQL
  • MariaDB
  • Sqlite3
  • Postgres
  • Composer
  • Node (Bao gồm cả PM2, Bower, Grunt, và Gulp)
  • Redis
  • Memcached
  • Beanstalkd

Homestead có thể chạy trên cả Windows, Mac, và Linux vì thế bạn không cần lo ngại về việc nó có thể chạy trên hệ điều hành của mình không?

Hướng dẫn cài đặt

Bước 1: Chuẩn bị

Trước khi thiết lập một môi trường Homestead, bạn cần phải cài đặt VirtualBox 5.x (miễn phí) hoặc VMWare (có phí), GitVagrant. Các phần mềm trên đều rất dễ cài đặt và tất nhiên đều hỗ trợ đa nền tảng.

Nếu bạn sử dụng VMware, bạn phải mua cả bản VMware Fusion / Workstation và VMware Vagrant plug-in. Nó không miễn phí nhé, VMware mới có thể dễ dàng chia sẽ nhanh chóng thư mục, tập tin từ Homestead và Máy của ta.

Bước 2: Cài đặt Homestead

Tải box Homestead trên Vagrant, bằng cách mở cửa sổ dòng lệnh ra (CMD với Windows hoặc Terminal với Linux/Unix) và gõ dòng lệnh sau:

vagrant box add laravel/homestead

Nó sẽ hỏi là bạn dùng VirtualBox hay VNWare, nhớ chọn cho phù hợp nhé.

Bước 3: Chuẩn bị Homestead

Chúng ta clone file cấu hình từ Github, ta gõ tiếp:

# windows phải là thư mục C:\Users\Username còn trên Linux/Unix thì là ~
cd ~
git clone https://github.com/laravel/homestead.git Homestead

Chú ý: một Virtual Machine dùng cho tất cả các webapp.

Trong thư mục Homestead, bạn hãy chạy lệnh bash init.sh hoặc init.bat (với Windows) để tạo ra tập cấu hình Homestead.yaml. Homestead.yaml sẽ được lưu tại thư mục ẩn ~/.homestead

Bước 4: Cấu hình Homestead:

Tại thư mục ~/.homestead có tập tin Homestead.yaml – tập tin này sẽ chứa tất cả các website của chúng ta.

Provider

# IP mặc định
ip: "192.168.10.10"

# RAM cho máy ảo

memory: 2048

# Số CPU sử dụng

cpus: 1

# Provider có thể là virtualbox, vmware_fusion, hoặc vmware_workstation
provider: virtualbox

Cách tạo SSH (nếu chưa có)

Dùng lệnh ssh-keygen -t rsa -C "[email protected]". Thay [email protected] bằng email của bạn. (Những bạn windows có thể sử dụng PuTTYgen).

Thêm key SSH cho homestead:

# Key public
authorize: ~/.ssh/id_rsa.pub
# Key private
keys:
    - ~/.ssh/id_rsa

Chú ý là có dấu – ở đàu mỗi keys.

Thư mục Shared

Tiếp theo là cấu hình thư mục Shared (thưc mục kết nối giữa máy thực và máy ảo)

folders:
    # thư mục trên máy ảo
    - map: ~/Code
    # thư mục trên máy thực
      to: /home/vagrant/Code

Cấu hình Website

sites:
 # tên miền
 - map: homestead.app
 # thư mục trỏ đến
   to: /home/vagrant/Code/Laravel/public

Nếu website của bạn có sử dụng HHVM thì bạn chỉ cần thêm một thuộc tính là hhvm với giá trị là true.

sites:
 # tên miền
 - map: homestead.app
 # thư mục trỏ đến
   to: /home/vagrant/Code/Laravel/public
   hhvm: true

Chú ý: khi bạn thay đổi site, thì khi muốn Homestead cập nhật bạn cần dùng lệnh vagrant reload --provision

Ta cần chỉnh sửa Hosts để có thể chạy được các tên miền ảo, ở Linux hay OS X thì nó ở hosts. Thêm các dòng như sau:

192.168.10.10 homestead.app

Chạy Homestead

Sau khi hoàn tất việc cấu hình Homestead bạn chỉ cần dùng 1 câu lệnh duy nhất:

vagrant up

ngay lập tức mọi thức sẽ “up” ngay! nào lúc đó hãy vào thử http://laravel.app xem điều gì sẽ xảy ra nhé

Để hủy bỏ máy Homestead này bạn dùng lệnh vagrant destroy --force hoặc vagrant halt để tắt máy homestead.

Bước 5: Database, SSH, PORT

Port

Mặc đinh, Homestead sẽ cấu hình như sau:

  • SSH: 2222 → Forwards To 22
  • HTTP: 8000 → Forwards To 80
  • HTTPS: 44300 → Forwards To 443
  • MySQL: 33060 → Forwards To 3306
  • Postgres: 54320 → Forwards To 5432

Thêm Port

ports:
    - send: 93000
    to: 9300
    - send: 7777
    to: 777
    protocol: udp

DATABASE

Mặc đinh Homestead cấu hình giống như trong file .env của Laravel

Để kết nối với MySQL hoặc Postgres bằng công cụ Navicat hay Sequel Pro, hãy kết nối máy chủ 54320 (Postgres). Thông tin đăng nhập là homestead / secret.

SSH

Rất đơn giản, Chỉ cần dùng lệnh vagrant ssh để kết nối SSH của Homestead.

Ví dụ một Project mới

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
 - ~/.ssh/id_rsa

folders:
 - map: D:\Hometead
 to: /home/vagrant/Code

sites:
 - map: laravel.app
   to: /home/vagrant/Code/Laravel/public
 - map: webcuatui.app
   to: /home/vagrant/Code/Dinhquochan

databases:
 - homestead
 - dinhquochan

Mở hosts và chỉnh sửa:

192.168.10.10 webcuatui.app

Mình dùng thêm --provision vì đã thêm 1 website mới vào đó.

vagrant up --provision

Tiếp đến mình gõ từ trình duyệt http://webcuatui.app thật tuyệt vời phải không nào :grinning:

Tất cả file web của mình sẽ nằm trong thư mục như cấu hình trên D:\Hometead\dinhquochan

Lời kết

Homestead ra đời nó giúp cho ta tiếc kiệm rất nhiều thời gian vào các dự án của mình, không còn lo lắng nhiều liệu môi trường trên local và môi trường của khách có phù hợp không, không cần thực hiện các công việc lằng nhằng để tạo ra một máy chủ ảo trên máy. Và nó kiến mình phải thốt lên rằng Homestead ! I love You “moa moaz”.

Mình hy vọng rằng homestead củng sẽ làm bạn hài lòng.

Tham khảo

8 Likes

Nice post !!

Nhớ thời chiến đầu ngay đêm với Laravel quá :wink:

À mà anh thắc mắc. Tại sao Laravel vẫn dùng Vagrant làm môi trường phát triển nhỉ ? Anh nghĩ mọi người đã chuyển sang docker hết rồi chứ. Vagrant mà chạy 2 website cùng lúc là thấy đuối lắm rồi. Docker thì chấp 10 site

2 Likes

Có kế hoạch lên Docker rồi anh dự là vào Laracon lần này sẽ ra mắt :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?