Giới thiệu
Docker đã trở thành công cụ tiêu chuẩn để đóng gói và triển khai ứng dụng web. Bài viết này hướng dẫn cách đưa một dự án Laravel lên VPS bằng Docker, giúp bạn có môi trường đồng nhất, dễ bảo trì và mở rộng.
Chuẩn bị môi trường
Trước khi bắt đầu, bạn cần:
- VPS chạy hệ điều hành Ubuntu 22.04 (hoặc phiên bản tương đương).
- Quyền
roothoặcsudotrên máy. - Mã nguồn Laravel đã sẵn sàng, bao gồm file
composer.jsonvà.env.
Cài đặt Docker và Docker Compose
Thực hiện các lệnh sau để cài Docker Engine và Docker Compose:
sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable docker sudo systemctl start docker
Sau khi cài, kiểm tra phiên bản:
docker --version docker compose version
Xây dựng Dockerfile cho Laravel
Dockerfile sẽ định nghĩa môi trường PHP, các extension cần thiết và cài đặt Composer. Tạo file Dockerfile trong thư mục gốc dự án:
FROM php:8.2-fpm
WORKDIR /var/www
RUN apt-get update && apt-get install -y \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip \
git
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer
COPY . /var/www
RUN composer install --no-dev --optimize-autoloader
EXPOSE 9000Tạo file docker-compose.yml
Docker Compose sẽ quản lý các container: PHP-FPM, Nginx và MySQL. Tạo file docker-compose.yml:
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
container_name: laravel_app
volumes:
- .:/var/www
networks:
- laravel
depends_on:
- db
web:
image: nginx:stable-alpine
container_name: nginx_web
ports:
- "80:80"
volumes:
- .:/var/www
- ./nginx/conf.d:/etc/nginx/conf.d
networks:
- laravel
depends_on:
- app
db:
image: mysql:8.0
container_name: mysql_db
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: laravel
MYSQL_USER: laravel
MYSQL_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
networks:
- laravel
networks:
laravel:
driver: bridge
volumes:
db_data:Cấu hình Nginx
Tạo thư mục nginx/conf.d và thêm file default.conf:
server {
listen 80;
server_name localhost;
root /var/www/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}Triển khai và kiểm tra
Chạy Docker Compose:
docker compose up -d --build
Sau khi các container khởi động, truy cập http://your_server_ip để xem trang Laravel mặc định. Đừng quên cập nhật .env để kết nối tới MySQL:
DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=laravel DB_PASSWORD=secret
Xử lý lỗi thường gặp
- Permission denied: Đảm bảo thư mục
storagevàbootstrap/cachecó quyền ghi cho người dùngwww-datatrong container. - Cannot connect to MySQL: Kiểm tra lại biến môi trường
DB_HOST(phải làdb– tên service trong docker-compose). - Missing PHP extensions: Thêm extension cần thiết vào Dockerfile và rebuild image.
Kết luận
Việc sử dụng Docker để Deploy Laravel trên VPS mang lại môi trường nhất quán, dễ mở rộng và giảm thiểu lỗi cấu hình. Nếu muốn nắm vững toàn bộ quy trình Deploy và các kiến thức nền tảng, bạn có thể Tham khảo khóa học "Deploy Web - Triển khai website lên môi trường Internet" tại đây.








