Laravel là một framework PHP miễn phí và mã nguồn mở cung cấp một bộ công cụ và tài nguyên để xây dựng các ứng dụng PHP hiện đại. Với nhiều gói và tiện ích mở rộng tương thích, Laravel đã trở nên phổ biến, với nhiều nhà phát triển áp dụng nó làm framework lựa chọn của họ. Laravel cung cấp các công cụ cơ sở dữ liệu mạnh mẽ bao gồm ORM (Object Relational Mapper) được gọi là Eloquent và các cơ chế tích hợp để tạo các bản di chuyển cơ sở dữ liệu. Nó đi kèm với một công cụ dòng lệnh Artisan mà các nhà phát triển có thể sử dụng để khởi động các mô hình, bộ điều khiển và các thành phần ứng dụng khác mới, giúp tăng tốc quá trình phát triển ứng dụng nói chung.
Việc chứa một ứng dụng có nghĩa là quá trình điều chỉnh một ứng dụng và các thành phần của nó để có thể chạy ứng dụng đó trong các môi trường nhẹ được gọi là container. Hướng dẫn này sẽ sử dụng Docker Compose để chứa một ứng dụng Laravel để phát triển.
Chúng tôi sẽ tạo ba vùng chứa Docker cho ứng dụng Laravel của mình.
[*]
Cài đặt các gói tiện ích cơ bản. Một số trong số chúng có thể đã được cài đặt.
Kiểm tra xem tường lửa có đang chạy không.
Bạn sẽ nhận được thông báo sau đầu ra.
Cho phép cổng SSH để tường lửa không làm gián đoạn kết nối hiện tại khi bật nó.
Cho phép các cổng HTTP và HTTPS như tốt.
Bật Tường lửa
Kiểm tra trạng thái của tường lửa một lần nữa.
Bạn sẽ thấy kết quả tương tự.
Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Ubuntu hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng ta sẽ sử dụng phiên bản Snapd.
Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo phiên bản Snapd của bạn được cập nhật. Đảm bảo rằng phiên bản Snapd của bạn được cập nhật.
Cài đặt Certbot.
Sử dụng lệnh sau để đảm bảo rằng lệnh Certbot chạy bằng cách tạo liên kết tượng trưng đến
Chạy lệnh sau để tạo SSL Chứng chỉ.
Lệnh trên sẽ tải chứng chỉ xuống thư mục
Tạo chứng chỉ nhóm Diffie-Hellman.
Thực hiện chạy thử quy trình để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không.
Nếu không thấy lỗi, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.
Sau khi thiết lập Docker và cài đặt Laravel, quy trình gia hạn sẽ cần được sửa đổi. Chúng tôi sẽ đề cập đến vấn đề này trong phần sau.
Tạo tệp kho lưu trữ Docker.
Cập nhật kho lưu trữ hệ thống danh sách.
Cài đặt phiên bản Docker mới nhất.
Xác minh rằng đó là đang chạy.
Theo mặc định, Docker yêu cầu quyền root. Nếu bạn muốn tránh sử dụng
Bạn sẽ cần phải đăng xuất khỏi máy chủ và đăng nhập lại với cùng một người dùng để kích hoạt thay đổi này hoặc sử dụng lệnh sau lệnh.
Xác nhận rằng người dùng của bạn đã được thêm vào nhóm Docker.
Tạo thư mục ứng dụng Laravel.
Chuyển đến thư mục.
Sao chép bản phát hành Laravel mới nhất vào thư mục. Đừng quên
Sử dụng ảnh Compose của Docker để gắn các thư mục bạn cần cho dự án Laravel của mình. Điều này giúp tránh nhu cầu cài đặt Composer trên toàn cầu.
Lệnh trên tạo một vùng chứa tạm thời được gắn kết với thư mục hiện tại của bạn trước khi bị xóa. Nó sao chép nội dung của thư mục Laravel của bạn vào vùng chứa và đảm bảo rằng thư mục
Đặt quyền cho thư mục Laravel để nó thuộc sở hữu của người dùng hiện đang đăng nhập.
Dán mã sau vào đó. Tại đây, chúng tôi định nghĩa ba dịch vụ:
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Chúng ta hãy xem xét chi tiết các dịch vụ.
Tạo và mở Dockerfile để chỉnh sửa.
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Chúng ta hãy xem điều gì đang xảy ra ở đây. Đầu tiên, chúng ta tạo hình ảnh tùy chỉnh của mình trên hình ảnh Docker php:8.2-fpm. Đây là hình ảnh dựa trên Debian có cài đặt PHP 8.2-FPM. Dockerfile sử dụng nhiều chỉ thị khác nhau để thực hiện các hoạt động, chỉ thị
Đầu tiên, chúng ta sao chép các tệp Composer từ thư mục Laravel trên máy chủ bên trong vùng chứa vào
Tiếp theo, chúng tôi sao chép tất cả các tệp từ thư mục Laravel vào vùng chứa và thiết lập quyền trên thư mục làm việc cho người dùng
Cuối cùng, chúng ta mở cổng 9000 cho dịch vụ PHP-FPM sẽ được máy chủ Nginx sử dụng và chạy lệnh PHP để khởi động vùng chứa.
Tạo và mở
Dán mã sau vào nó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc. Các lệnh này đặt kích thước tải lên tối đa cho các tệp đã tải lên. Thay đổi giá trị theo yêu cầu của bạn. Bạn có thể đặt bất kỳ cấu hình cụ thể nào của PHP để ghi đè lên các chỉ thị mặc định.
Chúng ta cần tạo tệp cấu hình Nginx để sử dụng PHP-FPM làm máy chủ FastCGI để phục vụ Laravel.
Tạo và mở Tệp
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tệp trên cấu hình Nginx để phục vụ cả phiên bản HTTP và HTTPS của trang Laravel và tự động chuyển hướng mọi yêu cầu HTTP sang HTTPS. Đảm bảo giá trị của biến
Trong khối vị trí PHP, chỉ thị
Tạo thư mục MySQL.
Tạo và mở tệp
Dán mã sau vào đó.
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Tạo một bản sao của tệp môi trường ví dụ.
Mở
Tìm khối bắt đầu bằng
Giá trị của
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Lệnh này khi chạy lần đầu tiên sẽ kéo
Bạn sẽ thấy kết quả tương tự.
Sau khi các container chạy, đã đến lúc hoàn tất cài đặt Laravel bằng lệnh
Tạo khóa ứng dụng và sao chép vào Tệp
Tạo ứng dụng Laravel bộ nhớ đệm.
Lệnh này sẽ tải các thiết lập cấu hình vào tệp
Truy cập
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22389%22%3E%3C/svg%3E
Tạo thư mục SSL để lưu trữ tập lệnh.
Tạo
Tạo script
Tạo tập lệnh có thể thực thi.
Bây giờ chúng ta cần yêu cầu Certbot sử dụng các tập lệnh này. Mở tệp
Dán các dòng sau vào cuối tập tin.
Lưu tập tin bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Kiểm tra quy trình gia hạn Chứng chỉ bằng cách chạy thử.
Bạn sẽ nhận được kết quả tương tự xác nhận thành công.
Chứng chỉ SSL của bạn hiện sẽ được tự động gia hạn và được vùng chứa Docker sử dụng để phục vụ ứng dụng Laravel của bạn.
Kiểm tra kết nối MySQL bằng lệnh
Bạn sẽ nhận được kết quả sau.
Tiếp theo, khởi động bảng điều khiển PsySH bằng cách sử dụng
Bạn sẽ nhận được thông tin sau nhắc nhở.
Kiểm tra kết nối MySQL bằng cách lấy dữ liệu bạn vừa di chuyển bằng cách chạy lệnh sau tại dấu nhắc bảng điều khiển.
Bạn sẽ nhận được thông báo sau đầu ra.
Nhập
Bạn có thể sử dụng
Việc chứa một ứng dụng có nghĩa là quá trình điều chỉnh một ứng dụng và các thành phần của nó để có thể chạy ứng dụng đó trong các môi trường nhẹ được gọi là container. Hướng dẫn này sẽ sử dụng Docker Compose để chứa một ứng dụng Laravel để phát triển.
Chúng tôi sẽ tạo ba vùng chứa Docker cho ứng dụng Laravel của mình.
- Một dịch vụ
app
chạy PHP 8.2-FPM - Một dịch vụ
db
chạy MySQL 8.0 - Một
nginx
dịch vụ sử dụng dịch vụapp
để phân tích cú pháp mã PHP trước khi phục vụ ứng dụng Laravel cho người dùng
Điều kiện tiên quyết
-
Một máy chủ chạy Ubuntu 22.04.
-
Người dùng không phải root có quyền sudo.
-
Tên miền đủ điều kiện (FQDN) trỏ đến máy chủ của bạn. Đối với mục đích của chúng tôi, chúng tôi sẽ sử dụngexample.com
làm tên miền.
-
Đảm bảo mọi thứ đều được cập nhật.
Mã:
$ sudo apt update
Cài đặt các gói tiện ích cơ bản. Một số trong số chúng có thể đã được cài đặt.
Mã:
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
Bước 1 - Cấu hình Tường lửa
Bước đầu tiên là cấu hình tường lửa. Ubuntu mặc định có ufw (Uncomplicated Firewall).Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo ufw status
Mã:
Status: inactive
Mã:
$ sudo ufw allow OpenSSH
Mã:
$ sudo ufw allow http
$ sudo ufw allow https
Mã:
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Mã:
$ sudo ufw status
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
Bước 2 - Cài đặt SSL
Trước khi tiếp tục, trước tiên chúng ta hãy tạo chứng chỉ SSL cho tên miền của mình. Chúng ta sẽ tạo chứng chỉ này bên ngoài Docker vì nó dễ bảo trì. Sau đó, chúng tôi sẽ đồng bộ hóa các chứng chỉ với container, container này sẽ được gia hạn và làm mới thường xuyên.Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Ubuntu hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng ta sẽ sử dụng phiên bản Snapd.
Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đảm bảo phiên bản Snapd của bạn được cập nhật. Đảm bảo rằng phiên bản Snapd của bạn được cập nhật.
Mã:
$ sudo snap install core
$ sudo snap refresh core
Mã:
$ sudo snap install --classic certbot
/usr/bin
thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Mã:
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d example.com
/etc/letsencrypt/live/example.com
trên máy chủ của bạn.Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Mã:
$ sudo certbot renew --dry-run
Sau khi thiết lập Docker và cài đặt Laravel, quy trình gia hạn sẽ cần được sửa đổi. Chúng tôi sẽ đề cập đến vấn đề này trong phần sau.
Bước 3 - Cài đặt Docker và Docker Compose
Ubuntu 22.04 đi kèm với phiên bản Docker cũ hơn. Để cài đặt phiên bản mới nhất, trước tiên, hãy nhập khóa GPG của Docker.
Mã:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Mã:
$ 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
Mã:
$ sudo apt update
Mã:
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Mã:
$ sudo systemctl status docker
? docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2023-01-14 10:41:35 UTC; 2min 1s ago
TriggeredBy: ? docker.socket Docs: https://docs.docker.com Main PID: 2054 (dockerd) Tasks: 52 Memory: 22.5M CPU: 248ms CGroup: /system.slice/docker.service ?? 2054 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
sudo
mỗi khi bạn chạy lệnh docker
, hãy thêm tên người dùng của bạn vào docker
nhóm.
Mã:
$ sudo usermod -aG docker $(whoami)
Mã:
$ su - ${USER}
Mã:
$ groups
navjot wheel docker
Bước 4 - Tải xuống Laravel và Cài đặt các Phụ thuộc
Bước đầu tiên là tải xuống phiên bản Laravel mới nhất và cài đặt các phụ thuộc, bao gồm Composer, gói PHP quản lý.Tạo thư mục ứng dụng Laravel.
Mã:
$ mkdir ~/laravel
Mã:
$ cd ~/laravel
.
ở cuối lệnh, nghĩa là Git sẽ sao chép các tệp vào thư mục hiện tại.
Mã:
$ git clone https://github.com/laravel/laravel.git .
Mã:
$ docker run --rm -v $(pwd):/app composer install
vendor
mà Composer tạo bên trong vùng chứa được sao chép trở lại thư mục hiện tại.Đặt quyền cho thư mục Laravel để nó thuộc sở hữu của người dùng hiện đang đăng nhập.
Mã:
$ sudo chown -R $USER:$USER ~/laravel
Bước 5 - Tạo Tệp Docker Compose
Tạo và mở tệp Docker compose để chỉnh sửa.
Mã:
$ nano docker-compose.yml
app
, webserver
và db
. Thay thế MYSQL_ROOT_PASSWORD
trong dịch vụ db
bằng mật khẩu mạnh mà bạn chọn.
Mã:
services: app: build: context: . dockerfile: Dockerfile image: howtoforge/app container_name: app restart: unless-stopped tty: true environment: SERVICE_NAME: app SERVICE_TAGS: dev working_dir: /var/www volumes: - ./:/var/www - ./php/local.ini:/usr/local/etc/php/conf.d/local.ini networks: - app-network webserver: container_name: webserver image: nginx:alpine restart: unless-stopped tty: true ports: - 80:80 - 443:443 volumes: - ./:/var/www - ./nginx/conf.d:/etc/nginx/conf.d - ./nginx/logs:/var/log/nginx - /etc/ssl/certs/dhparam.pem:/etc/ssl/certs/dhparam.pem - /etc/letsencrypt:/etc/letsencrypt logging: options: max-size: "10m" max-file: "3" networks: - app-network db: image: mysql:latest container_name: db restart: unless-stopped tty: true ports: - "3306:3306" environment: MYSQL_DATABASE: laravel MYSQL_ROOT_PASSWORD: MYSQL_ROOT_PASSWORD MYSQL_USER: laraveluser MYSQL_PASSWORD: password SERVICE_TAGS: dev SERVICE_NAME: mysql volumes: - dbdata:/var/lib/mysql - ./mysql/my.cnf:/etc/mysql/my.cnf networks: - app-network
volumes: dbdata: driver: local
networks: app-network: driver: bridge
Chúng ta hãy xem xét chi tiết các dịch vụ.
-
app
- Dịch vụ này định nghĩa ứng dụng Laravel và chạy hình ảnh Docker của khách hàng có tênhowtoforge/app
. Chúng ta sẽ tạo hình ảnh này ở bước tiếp theo. Thư mục làm việc cho Laravel bên trong container được đặt tại/var/www
được ánh xạ tới thư mục hiện tại trên máy chủ. Chúng ta cũng gắn một tệp cấu hình PHP được sao chép vào container PHP. Chúng tôi sẽ cấu hình điều này ở bước sau. -
webserver
- Dịch vụ này tạo một vùng chứa bằng cách sử dụng hình ảnh Nginx Docker và hiển thị các cổng 80 và 443 cho máy chủ. Chúng tôi cũng bind-mount volumes cho nhật ký Nginx, cấu hình tùy chỉnh, thư mục ứng dụng Laravel và chứng chỉ SSL. -
db
- Dịch vụ này tạo một vùng chứa bằng cách sử dụng hình ảnh MySQL Docker và định nghĩa các biến môi trường thiết lập tên cơ sở dữ liệu và mật khẩu gốc MySQL. Bạn có thể đặt tên cho cơ sở dữ liệu theo ý muốn và thay thếMYSQL_ROOT_PASSWORD
bằng mật khẩu mạnh mà bạn chọn. Ngoài ra, hãy đặt tên người dùng MySQL (MYSQL_USER_NAME
) và mật khẩu (MYSQL_USER_PASSWORD
) để có thể truy cập vào cơ sở dữ liệu bạn đã chọn. Dịch vụ này cũng ánh xạ cổng 3306 từ container đến cổng 3306 trên máy chủ. Chúng tôi cũng bind-mount volume cho cấu hình MySQL tùy chỉnh và một volume cục bộ cho dữ liệu MySQL. Điều này cho phép bạn khởi động lại dịch vụdb
mà không làm mất dữ liệu.
app-network
. Nó được thiết lập như một mạng cầu nối. Nó cho phép các container được kết nối với nó giao tiếp với nhau. Trình điều khiển mạng cầu nối cài đặt các quy tắc trong máy chủ để các container trên các mạng cầu nối khác nhau không thể giao tiếp trực tiếp với nhau.Bước 6 - Tạo Dockerfile
Dockerfile được sử dụng để tạo hình ảnh tùy chỉnh. Không có hình ảnh chuẩn nào cho Laravel, đó là lý do tại sao chúng ta cần định nghĩa Dockerfile để tạo hình ảnh tùy chỉnh cho Laravel. Nó chứa các lệnh để cài đặt các gói và cấu hình môi trường Linux tùy thuộc vào nhu cầu ứng dụng của bạn. Bạn cũng có thể xuất bản hình ảnh tùy chỉnh của mình lên Docker Hub hoặc bất kỳ sổ đăng ký Docker riêng tư nào.Bạn có thể tìm hiểu thêm trong Hướng dẫn Dockerfile.Tạo và mở Dockerfile để chỉnh sửa.
Mã:
$ nano Dockerfile
Mã:
FROM php:8.2-fpm
# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update && apt-get install -y \ build-essential \ libpng-dev \ libjpeg62-turbo-dev \ libfreetype6-dev \ locales \ zip \ jpegoptim optipng pngquant gifsicle \ vim \ libzip-dev \ unzip \ git \ curl \ libonig-dev
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg
RUN docker-php-ext-install gd
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Copy existing application directory contents to the working directory
COPY . /var/www
# Assign permissions of the working directory to the www-data user
RUN chown -R www-data:www-data \ /var/www/storage \ /var/www/bootstrap/cache
# Assign writing permissions to logs and framework directories
RUN chmod 775 storage/logs \ /var/www/storage/framework/sessions \ /var/www/storage/framework/views
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
Chúng ta hãy xem điều gì đang xảy ra ở đây. Đầu tiên, chúng ta tạo hình ảnh tùy chỉnh của mình trên hình ảnh Docker php:8.2-fpm. Đây là hình ảnh dựa trên Debian có cài đặt PHP 8.2-FPM. Dockerfile sử dụng nhiều chỉ thị khác nhau để thực hiện các hoạt động, chỉ thị
RUN
chỉ định các lệnh để cập nhật, cài đặt và cấu hình các thiết lập bên trong vùng chứa, chỉ thị COPY
để sao chép các tệp vào vùng chứa, EXPOSE
chỉ thị để hiển thị một cổng trong vùng chứa và CMD
chỉ thị để chạy lệnh.Đầu tiên, chúng ta sao chép các tệp Composer từ thư mục Laravel trên máy chủ bên trong vùng chứa vào
/var/www
thư mục. Chúng tôi cũng đặt thư mục làm việc cho container thành /var/www
. Sau đó, chúng tôi cài đặt nhiều điều kiện tiên quyết và gói cần thiết để Laravel hoạt động bao gồm các tiện ích mở rộng PHP như mbstring, gd, exif, zip, pdo_mysql và pcntl. Sau đó, chúng tôi cài đặt trình quản lý gói Composer.Tiếp theo, chúng tôi sao chép tất cả các tệp từ thư mục Laravel vào vùng chứa và thiết lập quyền trên thư mục làm việc cho người dùng
www-data
. Đây là người dùng mà PHP sử dụng theo mặc định trên nền tảng Debian. Tiếp theo, chúng ta thiết lập quyền ghi chính xác cho các thư mục nhật ký, phiên và chế độ xem của Laravel.Cuối cùng, chúng ta mở cổng 9000 cho dịch vụ PHP-FPM sẽ được máy chủ Nginx sử dụng và chạy lệnh PHP để khởi động vùng chứa.
Bước 7 - Cấu hình PHP
Tạo thư mục PHP.
Mã:
$ mkdir ~/laravel/php
local.ini
tệp để chỉnh sửa.
Mã:
$ nano local.ini
Mã:
upload_max_filesize=40M
post_max_size=40M
Bước 8 - Cấu hình Nginx
Tạo thư mục Nginx để cấu hình trang web.
Mã:
$ mkdir ~/laravel/nginx/conf.d -p
Tạo và mở Tệp
app.conf
để chỉnh sửa.
Mã:
$ nano ~/laravel/nginx/conf.d/app.conf
Mã:
server { # Redirect any http requests to https listen 80; listen [::]:80; server_name example.com; return 301 https://$host$request_uri;
}
server { listen 443 ssl http2; listen [::]:443 ssl http2; index index.php index.html; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /var/www/public; client_max_body_size 40m; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_ecdh_curve secp384r1; ssl_dhparam /etc/ssl/certs/dhparam.pem; # OCSP stapling ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } location / { try_files $uri $uri/ /index.php?$query_string; gzip_static on; }
}
Tệp trên cấu hình Nginx để phục vụ cả phiên bản HTTP và HTTPS của trang Laravel và tự động chuyển hướng mọi yêu cầu HTTP sang HTTPS. Đảm bảo giá trị của biến
client_max_body_size
khớp với kích thước tải lên được đặt ở bước trước.Trong khối vị trí PHP, chỉ thị
fastcgi_pass
chỉ định rằng Dịch vụ app
đang lắng nghe trên một socket TCP ở cổng 9000. Máy chủ PHP-FPM cũng có thể lắng nghe trên một socket Unix có lợi thế hơn so với socket TCP. Nhưng nó không hoạt động nếu các dịch vụ đang chạy trên các máy chủ khác nhau, đây là trường hợp ở đây vì vùng chứa app
đang chạy trên một máy chủ khác với vùng chứa webserver
của bạn.Bước 9 - Cấu hình MySQL
Chúng tôi sẽ cấu hình MySQL để bật nhật ký truy vấn chung và chỉ định nhật ký tương ứng tệp.Tạo thư mục MySQL.
Mã:
$ mkdir ~/laravel/mysql
my.cnf
cho chỉnh sửa.
Mã:
$ nano ~/laravel/my.cnf
Mã:
[mysqld]
general_log = 1
general_log_file = /var/lib/mysql/general.log
Bước 10 - Thiết lập Môi trường Tệp
Bây giờ chúng ta đã tạo và cấu hình tất cả các dịch vụ, đã đến lúc khởi động các container. Nhưng trước khi thực hiện, chúng ta cần cấu hình các biến môi trường cho Laravel. Laravel đi kèm với một tệp môi trường mặc định,.env.example
.Tạo một bản sao của tệp môi trường ví dụ.
Mã:
$ cp .env.example .env
.env
tệp để chỉnh sửa.
Mã:
$ nano .env
DB_CONNECTION
và cập nhật các giá trị của các biến theo yêu cầu của bạn.
Mã:
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laraveluser
DB_PASSWORD=your_laravel_db_password
DB_HOST
sẽ là dịch vụ db
. DB_NAME
, DB_USERNAME
và DB_PASSWORD
sẽ là tên cơ sở dữ liệu, tên người dùng và mật khẩu mà bạn đã chọn ở bước 4 trong tệp Docker compose.Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Bước 11 - Khởi động Container và hoàn tất cài đặt Laravel
Cuối cùng cũng đến lúc khởi động container.
Mã:
$ docker compose up -d
Nginx
, MySQL
hình ảnh và sẽ tạo hình ảnh app
bằng cách sử dụng Dockerfile mà chúng tôi đã tạo. Sau khi quá trình hoàn tất, bạn có thể kiểm tra trạng thái của các container bằng lệnh sau.
Mã:
$ docker ps
Mã:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a57be976c0fa mysql:latest "docker-entrypoint.s…" 6 hours ago Up 6 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp db
85e515c4a404 howtoforge/app "docker-php-entrypoi…" 6 hours ago Up 6 hours 9000/tcp app
8418bbc83bd3 nginx:alpine "/docker-entrypoint.…" 6 hours ago Up 6 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp webserver
docker compose exec
để chạy lệnh bên trong container.Tạo khóa ứng dụng và sao chép vào Tệp
.env
để bảo mật phiên người dùng và mã hóa dữ liệu người dùng.
Mã:
$ docker compose exec app php artisan key:generate
Mã:
$ docker compose exec app php artisan config:cache
/var/www/bootstrap/cache/config.php
.Truy cập
https://example.com
trong trình duyệt của bạn và bạn sẽ thấy trang sau ngụ ý cài đặt thành công Laravel.data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22389%22%3E%3C/svg%3E
Bước 12 - Cấu hình gia hạn SSL
Bây giờ trang Laravel đã hoạt động, đã đến lúc xem lại Thiết lập SSL để cấu hình gia hạn. Đối với điều này, chúng ta sẽ cần tạo các tập lệnh để dừng dịch vụwebserver
trước khi bắt đầu gia hạn và bắt đầu lại dịch vụ sau khi chứng chỉ được gia hạn. Certbot cung cấp hai hook, pre_hook
và post_hook
cho mục đích này.Tạo thư mục SSL để lưu trữ tập lệnh.
Mã:
$ mkdir ~/laravel/ssl
server-stop.sh
script.
Mã:
$ sh -c 'printf "#!/bin/sh\ndocker stop webserver\n" > ~/laravel/ssl/server-stop.sh'
server-start.sh
.
Mã:
$ sh -c 'printf "#!/bin/sh\ndocker start webserver\n" > ~/laravel/ssl/server-start.sh'
Mã:
$ chmod +x ~/laravel/ssl/server-*.sh
/etc/letsencrypt/renewal/example.com.conf
để chỉnh sửa.
Mã:
$ sudo nano /etc/letsencrypt/renewal/example.com.conf
Mã:
pre_hook = /home//laravel/ssl/server-stop.sh
post_hook = /home//laravel/ssl/server-start.sh
Kiểm tra quy trình gia hạn Chứng chỉ bằng cách chạy thử.
Mã:
$ sudo certbot renew --dry-run
Mã:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Hook 'pre-hook' ran with output: webserver
Simulating renewal of an existing certificate for example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/example.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hook 'post-hook' ran with output: webserver
Bước 13 - Di chuyển dữ liệu và Tinker Console
Bây giờ ứng dụng đang chạy, bạn có thể di chuyển dữ liệu của mình và thử nghiệm với Lệnhtinker
. Tinker là REPL (Vòng lặp Đọc-Đánh giá-In) dành cho Laravel. Lệnh tinker
khởi tạo bảng điều khiển PsySH với Laravel được tải sẵn. PsySH là một bảng điều khiển dành cho nhà phát triển thời gian chạy và một trình gỡ lỗi tương tác cho PHP. Lệnh tinker
cho phép bạn tương tác với ứng dụng Laravel từ dòng lệnh trong một shell tương tác.Kiểm tra kết nối MySQL bằng lệnh
artisan migrate
trên container. Nó sẽ tạo một bảng migrations
trong cơ sở dữ liệu.
Mã:
$ docker compose exec app php artisan migrate
Mã:
INFO Preparing database. Creating migration table .............................................................................................. 32ms DONE INFO Running migrations. 2014_10_12_000000_create_users_table .................................................................................. 184ms DONE 2014_10_12_100000_create_password_resets_table ......................................................................... 259ms DONE 2019_08_19_000000_create_failed_jobs_table ............................................................................ 102ms DONE 2019_12_14_000001_create_personal_access_tokens_table .................................................................. 46ms DONE
tinker
lệnh.
Mã:
$ docker compose exec app php artisan tinker
Mã:
Psy Shell v0.11.10 (PHP 8.2.1 — cli) by Justin Hileman
>
Mã:
> \DB::table('migrations')->get();
Mã:
= Illuminate\Support\Collection {#3670 all: [ {#3679 +"id": 1, +"migration": "2014_10_12_000000_create_users_table", +"batch": 1, }, {#3681 +"id": 2, +"migration": "2014_10_12_100000_create_password_resets_table", +"batch": 1, }, {#3682 +"id": 3, +"migration": "2019_08_19_000000_create_failed_jobs_table", +"batch": 1, }, {#3683 +"id": 4, +"migration": "2019_12_14_000001_create_personal_access_tokens_table", +"batch": 1, }, ], }
exit
để thoát khỏi console.
Mã:
> exit INFO Goodbye.
tinker
để tương tác với cơ sở dữ liệu của bạn và thử nghiệm với các dịch vụ và mô hình. Bây giờ bạn có thể bắt đầu sử dụng Laravel để phát triển thêm.