Đưa mã nguồn Laravel lên hosting DirectAdmin

Bài này hướng dẫn đưa một dự án Laravel lên hosting dùng bảng điều khiển DirectAdmin.

Có hai cách. Cách 1 an toàn hơn và nên dùng nếu được. Cách 2 là phương án khi hosting không cho đổi thư mục gốc, và nó đòi thêm vài bước bảo vệ bắt buộc.

1. Vì sao Laravel không giống một website PHP thông thường

Một website PHP thông thường thì mọi tệp đều nằm trong thư mục gốc của tên miền, và trình duyệt vào được tất cả.

Laravel thì khác: nó được thiết kế để chỉ thư mục public là công khai. Những thư mục còn lại nằm ngoài tầm với của trình duyệt, trong đó có:

Thư mục hoặc tệp Chứa gì
.env Mật khẩu cơ sở dữ liệu, khoá ứng dụng, khoá dịch vụ bên ngoài
storage Nhật ký, tệp người dùng tải lên, bộ nhớ đệm
vendor Toàn bộ thư viện, kèm phiên bản của chúng
app, config, routes Mã nguồn và cấu hình

Hiểu điều này là hiểu vì sao hai cách dưới đây khác nhau về mức độ an toàn.

2. Cách 1: trỏ thư mục gốc của tên miền vào public

Đây là cách Laravel được thiết kế để chạy, và là cách nên dùng.

  1. Tải toàn bộ dự án lên hosting, giữ nguyên cấu trúc thư mục, không di chuyển gì cả. Đặt ở một chỗ ngoài thư mục gốc hiện tại, ví dụ /home/<tài khoản>/laravel-app.
  2. Trong DirectAdmin, mở phần quản lý tên miền và đổi thư mục gốc (document root) của tên miền thành thư mục public của dự án.
  3. Nếu không thấy mục đổi thư mục gốc, hãy liên hệ bộ phận hỗ trợ, vì tuỳ gói hosting mà quyền này có thể bị giới hạn.

Làm xong thì không phải sửa index.php, không phải di chuyển tệp, và toàn bộ phần nhạy cảm nằm ngoài tầm với của trình duyệt.

Khi nâng cấp dự án về sau, chỉ việc thay mã nguồn, không phải làm lại bước nào.

3. Cách 2: đưa nội dung public ra thư mục gốc

Dùng khi hosting không cho đổi thư mục gốc.

🔴 Cách này đặt toàn bộ dự án vào vùng trình duyệt vào được. Làm theo mà bỏ qua mục 4 thì bất kỳ ai cũng có thể mở https://tên-miền-của-bạn/.env và đọc được mật khẩu cơ sở dữ liệu. Mục 4 là bắt buộc, không phải tuỳ chọn.

Bước 1. Mở thư mục dự án trên máy của quý Khách hàng. Nên sao ra một bản khác rồi sửa trên bản sao, giữ nguyên bản gốc.

Thư mục public trong dự án Laravel

Bước 2. Cắt toàn bộ nội dung bên trong thư mục public.

Cắt nội dung bên trong thư mục public

Bước 3. Quay lại thư mục gốc của dự án và dán vào đó.

Dán vào thư mục gốc của dự án

Bước 4. Sửa tệp index.php vừa chuyển ra. Tìm hai dòng:

require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';

Hai dòng cần sửa trong index.php

Đổi thành:

require __DIR__.'/vendor/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';

Hai dòng sau khi sửa

Hai dòng này đang trỏ lên một cấp vì index.php vốn nằm trong public. Khi nó đã ra thư mục gốc thì không còn cấp nào để lên nữa.

Bước 5. Sửa tệp .env cho khớp thông tin cơ sở dữ liệu trên hosting.

Sửa tệp .env

Bước 6. Xoá bộ nhớ đệm cũ sinh ra lúc chạy ở máy cá nhân, trong bootstrap/cache và storage/framework. Đây là chỗ hay làm website báo lỗi ngay sau khi lên hosting, vì các tệp đệm còn giữ đường dẫn của máy cũ.

Xoá bộ nhớ đệm trong bootstrap

Xoá bộ nhớ đệm framework

Xoá bộ nhớ đệm view

4. 🔴 Bắt buộc nếu dùng Cách 2: chặn truy cập các tệp nhạy cảm

Tạo tệp .htaccess ở thư mục gốc (hoặc bổ sung vào tệp đã có) với nội dung:

# Chan truy cap tep cau hinh va cac thu muc khong duoc phep cong khai
<FilesMatch "^\.env">
    Require all denied
</FilesMatch>

RedirectMatch 404 ^/(vendor|storage|bootstrap|app|config|database|routes|resources|tests)/
RedirectMatch 404 ^/(composer\.(json|lock)|artisan|package\.json)$

Sau khi đặt xong, kiểm bằng cách mở thử các địa chỉ sau trên trình duyệt. Cả ba phải ra trang báo lỗi, không được hiện nội dung:

https://<tên-miền-của-bạn>/.env
https://<tên-miền-của-bạn>/composer.json
https://<tên-miền-của-bạn>/storage/logs/laravel.log

Nếu một trong ba địa chỉ hiện ra nội dung thì tệp .htaccess chưa có tác dụng. Đừng đưa website vào chạy thật cho tới khi cả ba đều bị chặn.

5. Cơ sở dữ liệu

Tạo cơ sở dữ liệu và nhập dữ liệu vào theo bài Hướng dẫn tạo mới và import database bằng phpMyAdmin trên DirectAdmin.

Sau đó khai lại bốn dòng trong .env cho khớp: tên cơ sở dữ liệu, tên người dùng, mật khẩu và máy chủ.

6. Tải dự án lên hosting

Hai cách, chọn một:

Với dự án nhiều tệp nhỏ, nén lại thành một tệp .zip rồi tải lên và giải nén trên hosting sẽ nhanh hơn nhiều so với tải từng tệp qua FTP. Thư mục vendor thường có hàng chục nghìn tệp.

7. Lỗi thường gặp sau khi đưa lên

Hiện tượng Nguyên nhân thường gặp
Trang trắng, không báo gì Chưa xoá bộ nhớ đệm cũ ở bước 6, hoặc sai quyền thư mục storage
Báo lỗi không kết nối được cơ sở dữ liệu Bốn dòng cấu hình trong .env chưa khớp với thông tin hosting
Báo lỗi khoá ứng dụng Thiếu APP_KEY trong .env
Mở được .env từ trình duyệt Chưa làm mục 4. Xử lý ngay, và đổi mật khẩu cơ sở dữ liệu vì nó đã công khai
Trang chủ chạy, trang con báo lỗi Thiếu tệp .htaccess của Laravel ở thư mục gốc

Hàng thứ tư cần xử lý ngay trong ngày. Mật khẩu đã công khai thì phải coi như đã lộ, kể cả khi chưa thấy dấu hiệu bị khai thác.

8. Nếu cần hỗ trợ

Quý Khách hàng gặp vướng ở bước đổi thư mục gốc, hoặc không chắc tệp nhạy cảm đã được chặn, hãy nhắn qua khung chat ở góc phải màn hình kèm tên miền, bộ phận kỹ thuật sẽ kiểm giúp.

Hướng dẫn này có ích cho bạn?

Cần đặt dịch vụ? Xem cấu hình và giá tại bảng giá Cloudzone - đặt gói trực tuyến, nhận dịch vụ ngay sau thanh toán. Cần tư vấn, mở khung chat ở góc phải màn hình.

Hướng dẫn liên quan