Symfony là lựa chọn ưa thích của các nhà phát triển PHP để xây dựng các ứng dụng quy mô nhỏ đến lớn. Với mỗi bản phát hành mới, Symfony lại phát triển thành một bộ công cụ tốt hơn cho các nhà phát triển. Symfony cho phép các quy trình phát triển ứng dụng nhanh chóng để các nhà phát triển có thể xây dựng API quy mô đầy đủ, nền tảng thương mại điện tử, công nghệ tài chính và ứng dụng kế toán, v.v. ở phía bên kia của quang phổ, các nhà phát triển có thể tạo các trang web đơn giản với sự trợ giúp của công cụ tạo mẫu Twig.
Symfony 4 có hệ thống công thức thông minh và cấu trúc thư mục được đơn giản hóa, không làm quá tải các tệp mã trong dự án của bạn. Symfony Flex có chức năng cài đặt các thư viện với tên bí danh và tự động đăng ký chúng trong cấu hình của gói. Phiên bản mới cũng giới thiệu hệ thống định tuyến cực nhanh sử dụng tra cứu hash-map cho các tuyến tĩnh và kết hợp các biểu thức chính quy cho các tuyến có trình giữ chỗ.
Do Symfony 4 rất phổ biến, tôi quyết định cấu hình và thiết lập phiên bản này trên máy Debian 9. Trong bài viết này, tôi sẽ chỉ cho bạn cách thiết lập một Symfony Stack hoàn chỉnh để chạy các ứng dụng Symfony. Quy trình này bao gồm các bước liên quan đến quyền, webroot và máy chủ web.
Trong bài viết này, tôi sẽ chọn DigitalOcean, một nhà cung cấp dịch vụ lưu trữ đám mây được nhiều nhà phát triển yêu thích. Bạn có thể dễ dàng đăng ký tài khoản DigitalOcean và chọn phân phối, kích thước và trung tâm dữ liệu của máy chủ, như được hiển thị trong GIF sau:
Bây giờ, bước tiếp theo là khởi chạy thiết bị đầu cuối SSH. Nếu bạn là người dùng Linux hoặc Mac, bạn sẽ nhận được nó theo mặc định trên máy của mình. Nếu bạn là người dùng Windows, bạn cần tải xuống PuTTY. Tin tốt là Windows 10 đi kèm với PowerShell riêng mà bạn có thể sử dụng cho mục đích của bài viết này.
Sau khi khởi chạy droplet, bạn cần ba mục sau để đăng nhập vào thiết bị đầu cuối SSH:
Tiếp theo, nhập thông tin xác thực và bạn sẽ đăng nhập vào droplet DigitalOcean của mình bằng quyền truy cập root.
Symfony cũng đã định nghĩa cấu hình máy chủ web cho Nginx và Apache trong tài liệu của họ nên tôi sẽ trình bày các thiết lập chính ở đây và bạn có thể đọc phần còn lại ở đó.
Bắt đầu bằng cách kiểm tra phiên bản Debian trên máy chủ bằng cách chạy lệnh sau:
Vì vậy, tôi có Debian 9.4 trên máy chủ DigitalOcean của mình.
Tiếp theo, chạy các lệnh sau để cập nhật các gói qua SSH:
Sau khi mọi thứ đã được cập nhật, tôi đã sẵn sàng cài đặt máy chủ web.
Sau khi lệnh hoàn tất, hãy truy cập IP của máy chủ và bạn sẽ thấy trang chào mừng Apache:
Tiếp theo. vào cấu trúc thư mục con bằng lệnh:
Trước tiên, hãy nhanh chóng bật tùy chọn mod_rewrite bằng lệnh này:
Bây giờ hãy mở tệp 000-default.conf[/b] và thêm nội dung sau để cấu hình máy chủ web trong Apache 2:
Bây giờ, Apache2 được cấu hình để chạy dự án từ thư mục /var/www/html. Nhưng bạn cũng có thể mở rộng cấu hình bằng một vài tùy chọn khác phù hợp nhất với Symfony 4. Sau đây là một ví dụ:
Bạn cũng có thể sử dụng các tùy chọn Apache mới nhất như Require all granted và cấu hình các biến môi trường trong các thiết lập ở trên. Bây giờ hãy tải lại máy chủ Apache bằng lệnh sau để các thiết lập mới có hiệu lực:
Bắt đầu bằng cách cài đặt Nginx với lệnh sau:
Bây giờ hãy chạy cd /etc/nginx/conf.d và cấu hình tệp như sau:
Bây giờ hãy tải lại máy chủ bằng cách chạy lệnh sau:
Bây giờ ở bước tiếp theo, hãy chạy các lệnh sau:
Sau khi cài đặt thành công, hãy kiểm tra phiên bản PHP:
Tôi cũng cần cài đặt thêm một vài thư viện nữa để đảm bảo PHP 7.2 hoạt động bình thường trên máy chủ. Chạy lệnh sau để cài đặt các thư viện cần thiết:
Các thư viện sẽ được cài đặt và PHP 7.2 được cấu hình đúng cho Symfony 4.
Bắt đầu bằng cách chạy lệnh sau:
Quá trình sẽ tạm dừng để xin phép bạn. Nhập (y) và nhấn Enter. Trong cửa sổ tiếp theo, hãy đặt mật khẩu cho người dùng root MySQL.
Quá trình hoàn tất trong vài phút.
Tiếp theo, tôi sẽ cấu hình MySQL theo yêu cầu của ngăn xếp LAMP. Để thực hiện, hãy nhập lệnh sau:
Tại thời điểm này, quá trình thiết lập máy chủ đã hoàn tất theo yêu cầu của Symfony 4. Bây giờ tôi sẽ tập trung vào việc cài đặt chính khuôn khổ này.
Trước tiên, hãy sao chép trình cài đặt vào thư mục /tmp:
Tiếp theo, chạy lệnh sau để thực thi tệp Composer và cài đặt nó trên toàn cầu:
Bây giờ Composer đã được cài đặt, tôi sẽ tiến hành cài đặt Symfony 4 thực tế.
Vào thư mục html và chạy lệnh Composer sau để cài đặt Symfony 4:
Khung sẽ được cài đặt trong vài giây. Vì Symfony 4 được tối ưu hóa rất nhiều với cơ sở mã và các phụ thuộc nhỏ, nên nó sẽ không yêu cầu bất kỳ thông tin xác thực nào trong quá trình cài đặt. Sau khi hoàn tất, bạn cần cấu hình cơ sở dữ liệu.
Sau khi quá trình hoàn tất, hãy truy cập IP của máy chủ và bạn sẽ thấy trang chào mừng:
Tiếp theo, tôi sẽ thêm thông tin xác thực cơ sở dữ liệu vào tệp .env của Symfony.
Đối với Symfony 3.0:
Đối với Symfony 3.1:
Nếu bạn cần trợ giúp trong việc cài đặt và thiết lập Symfony 4 trên máy Debian 9, hãy cho tôi biết trong phần bình luận.
Symfony 4 có hệ thống công thức thông minh và cấu trúc thư mục được đơn giản hóa, không làm quá tải các tệp mã trong dự án của bạn. Symfony Flex có chức năng cài đặt các thư viện với tên bí danh và tự động đăng ký chúng trong cấu hình của gói. Phiên bản mới cũng giới thiệu hệ thống định tuyến cực nhanh sử dụng tra cứu hash-map cho các tuyến tĩnh và kết hợp các biểu thức chính quy cho các tuyến có trình giữ chỗ.
Do Symfony 4 rất phổ biến, tôi quyết định cấu hình và thiết lập phiên bản này trên máy Debian 9. Trong bài viết này, tôi sẽ chỉ cho bạn cách thiết lập một Symfony Stack hoàn chỉnh để chạy các ứng dụng Symfony. Quy trình này bao gồm các bước liên quan đến quyền, webroot và máy chủ web.
Tạo máy chủ DigitalOcean
Hiện nay, bạn có thể tìm thấy một số nhà cung cấp dịch vụ lưu trữ đám mây trên thị trường và lựa chọn thực sự phụ thuộc vào sự kết hợp giữa các yêu cầu về hiệu suất và ngân sách của bạn.Trong bài viết này, tôi sẽ chọn DigitalOcean, một nhà cung cấp dịch vụ lưu trữ đám mây được nhiều nhà phát triển yêu thích. Bạn có thể dễ dàng đăng ký tài khoản DigitalOcean và chọn phân phối, kích thước và trung tâm dữ liệu của máy chủ, như được hiển thị trong GIF sau:
Bây giờ, bước tiếp theo là khởi chạy thiết bị đầu cuối SSH. Nếu bạn là người dùng Linux hoặc Mac, bạn sẽ nhận được nó theo mặc định trên máy của mình. Nếu bạn là người dùng Windows, bạn cần tải xuống PuTTY. Tin tốt là Windows 10 đi kèm với PowerShell riêng mà bạn có thể sử dụng cho mục đích của bài viết này.
Sau khi khởi chạy droplet, bạn cần ba mục sau để đăng nhập vào thiết bị đầu cuối SSH:
-
Địa chỉ IP của máy chủ
-
Tên người dùng
-
Mật khẩu hoặc khóa SSH
Tiếp theo, nhập thông tin xác thực và bạn sẽ đăng nhập vào droplet DigitalOcean của mình bằng quyền truy cập root.
Ngăn xếp Symfony LAMP
Symfony dựa trên ngăn xếp LAMP thông thường bao gồm PHP, Apache/Nginx, MySQL và bản phân phối Linux. Trước tiên, bạn cần cài đặt tất cả các thành phần phần mềm này, sau đó cấu hình Apache/Nginx theo yêu cầu của Symfony. May mắn thay, tất cả các thành phần để tạo ngăn xếp Symfony đều là mã nguồn mở nên bạn chỉ cần chạy các lệnh và cài đặt chúng qua SSH trên máy chủ của mình.Symfony cũng đã định nghĩa cấu hình máy chủ web cho Nginx và Apache trong tài liệu của họ nên tôi sẽ trình bày các thiết lập chính ở đây và bạn có thể đọc phần còn lại ở đó.
Cập nhật các gói trên Debian
Mục hành động đầu tiên trong danh sách là cập nhật các gói trên máy Debian.Bắt đầu bằng cách kiểm tra phiên bản Debian trên máy chủ bằng cách chạy lệnh sau:
Mã:
cat /etc/debian_version
Vì vậy, tôi có Debian 9.4 trên máy chủ DigitalOcean của mình.
Tiếp theo, chạy các lệnh sau để cập nhật các gói qua SSH:
Mã:
apt-get update[B]apt-get upgrade
apt-get dist-upgrade
Cài đặt Apache2 cho Symfony 4
Truy cập thiết bị đầu cuối SSH và cài đặt Apache2 trước bằng lệnh sau:
Mã:
apt-get install apache2 -y
Tiếp theo. vào cấu trúc thư mục con bằng lệnh:
Mã:
cd /etc/apache2/sites-available/
Mã:
a2enmod rewrite
Mã:
Mã:
ServerName domain.tld
Mã:
ServerAlias www.domain.tld
Mã:
Mã:
DocumentRoot /var/www/html/symfony4/public
Mã:
Mã:
Options FollowSymLinks MultiViews
Mã:
AllowOverride All
Mã:
Order allow,deny
Mã:
Allow from All
Mã:
Mã:
Mã:
# bỏ chú thích các dòng sau nếu bạn cài đặt tài sản dưới dạng liên kết tượng trưng
Mã:
# hoặc gặp sự cố khi biên dịch tài sản LESS/Sass/CoffeeScript
Mã:
#
Mã:
# Tùy chọn FollowSymlinks
Mã:
#
Mã:
Mã:
ErrorLog /var/log/apache2/project_error.log
Mã:
CustomLog /var/log/apache2/projec_access.log kết hợp
Mã:
Mã:
Mã:
ServerName domain.tld
Mã:
ServerAlias www.domain.tld
Mã:
Mã:
DocumentRoot /var/www/html/symfony4/public
Mã:
Mã:
AllowOverride None
Mã:
Require all granted
Mã:
Allow from All
Mã:
Mã:
Mã:
Options -MultiViews
Mã:
RewriteEngine Trên
Mã:
RewriteCond %{REQUEST_FILENAME} !-f
Mã:
RewriteRule ^(.*)$ index.php [QSA,L]
Mã:
Mã:
Mã:
Mã:
# bỏ chú thích các dòng sau nếu bạn cài đặt tài sản dưới dạng liên kết tượng trưng
Mã:
# hoặc gặp sự cố khi biên dịch tài sản LESS/Sass/CoffeeScript
Mã:
#
Mã:
# Tùy chọn FollowSymlinks
Mã:
#
Mã:
Mã:
# tùy chọn vô hiệu hóa RewriteEngine cho tài sản thư mục
Mã:
# cho phép apache chỉ cần trả lời bằng 404 khi không tìm thấy tệp
Mã:
# thay vì chuyển yêu cầu vào ngăn xếp symfony đầy đủ
Mã:
Mã:
Mã:
RewriteEngine Off
Mã:
Mã:
Mã:
Mã:
ErrorLog /var/log/apache2/crvfakeexample.com_error.log
Mã:
CustomLog /var/log/apache2/crvfakeexample.com_access.log kết hợp
Mã:
Mã:
# tùy chọn đặt giá trị của các biến môi trường được sử dụng trong ứng dụng
Mã:
#SetEnv APP_ENV prod
Mã:
#SetEnv APP_SECRET
Mã:
#SetEnv DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name"
Mã:
Mã:
service apache2 reload
Cài đặt Nginx cho Symfony 4
Nếu bạn không muốn sử dụng Apache, Nginx là một lựa chọn tuyệt vời cho máy chủ web. Quá trình này khá giống nhau.Bắt đầu bằng cách cài đặt Nginx với lệnh sau:
Mã:
apt-get update
Mã:
apt-get install nginx -y
Mã:
server {
Mã:
server_name domain.tld www.domain.tld;
Mã:
root /var/www/html/symfony4/public;
Mã:
Mã:
location / {
Mã:
# thử phục vụ tệp trực tiếp, chuyển sang index.php
Mã:
try_files $uri /index.php$is_args$args;
Mã:
}
Mã:
location ~ ^/index\.php(/|$) {
Mã:
fastcgi_pass unix:/var/run/php7.1-fpm.sock;
Mã:
fastcgi_split_path_info ^(.+\.php)(/.*)$;
Mã:
bao gồm fastcgi_params;
Mã:
Mã:
# tùy chọn đặt giá trị của các biến môi trường được sử dụng trong ứng dụng
Mã:
# fastcgi_param APP_ENV prod;
Mã:
# fastcgi_param APP_SECRET ;
Mã:
# fastcgi_param DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name";
Mã:
Mã:
# Khi bạn sử dụng liên kết tượng trưng để liên kết gốc tài liệu với
Mã:
# phiên bản hiện tại của ứng dụng, bạn nên truyền đường dẫn ứng dụng
Mã:
# thực thay vì đường dẫn đến liên kết tượng trưng tới PHP
Mã:
# FPM.
Mã:
# Nếu không, OPcache của PHP có thể không phát hiện đúng các thay đổi đối với
Mã:
# các tệp PHP của bạn (xem https://github.com/zendtech/ZendOptimizerPlus/issues/126
Mã:
# để biết thêm thông tin).
Mã:
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
Mã:
fastcgi_param DOCUMENT_ROOT $realpath_root;
Mã:
# Ngăn chặn các URI bao gồm bộ điều khiển phía trước. Điều này sẽ trả về 404:
Mã:
# http://domain.tld/index.php/some-path
Mã:
# Xóa chỉ thị nội bộ để cho phép các URI như thế này
Mã:
internal;
Mã:
}
Mã:
# trả về 404 cho tất cả các tệp php khác không khớp với bộ điều khiển phía trước
Mã:
# điều này ngăn chặn quyền truy cập vào các tệp php khác mà bạn không muốn truy cập.
Mã:
location ~ \.php$ {
Mã:
return 404;
Mã:
}
Mã:
error_log /var/log/nginx/project_error.log;
Mã:
access_log /var/log/nginx/project_access.log;
Mã:
}
Mã:
service nginx reload
Cài đặt PHP 7.2 cho Symfony 4
Một phụ thuộc quan trọng của Symfony 4 là PHP 7.1.3 (hoặc cao hơn) trên máy chủ. Để cài đặt phiên bản bắt buộc, tôi cần cập nhật/cài đặt một số gói trên Debian 9 để cài đặt PHP 7.2. Vào thiết bị đầu cuối SSH (và đảm bảo rằng bạn đang ở gốc) và chạy các lệnh sau:
Mã:
sudo apt install ca-certificates apt-transport-https
Mã:
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
Mã:
sudo echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list
Mã:
sudo apt update
Mã:
sudo apt install php7.2
Mã:
php -v
Mã:
sudo apt install php7.2-cli php7.2-common php7.2-curl php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-xml libapache2-mod-php7.2
Cài đặt MySQL để cấu hình cơ sở dữ liệu
Chúng ta hãy nhanh chóng cài đặt cơ sở dữ liệu MySQL.Bắt đầu bằng cách chạy lệnh sau:
Mã:
apt-get install mysql-server
Quá trình hoàn tất trong vài phút.
Tiếp theo, tôi sẽ cấu hình MySQL theo yêu cầu của ngăn xếp LAMP. Để thực hiện, hãy nhập lệnh sau:
Mã:
mysql_secure_installation
Cài đặt Composer trên Debian 9
Cài đặt Composer trên toàn cầu là một ý tưởng hay vì theo cách này, mọi người dùng đều có thể dễ dàng sử dụng. Vì vậy, tôi sẽ cài đặt nó trong thư mục /user/local/bin.Trước tiên, hãy sao chép trình cài đặt vào thư mục /tmp:
Mã:
php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"
Mã:
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
Bây giờ Composer đã được cài đặt, tôi sẽ tiến hành cài đặt Symfony 4 thực tế.
Cuối cùng, hãy cài đặt Symfony 4 trên Máy chủ Debian 9
Tại đây điểm, tôi đã cấu hình máy chủ Apache cho webroot bằng cách cung cấp URL: /var/www/html/symfony4/public.Vào thư mục html và chạy lệnh Composer sau để cài đặt Symfony 4:
Mã:
composer create-project symfony/skeleton symfony4
Sau khi quá trình hoàn tất, hãy truy cập IP của máy chủ và bạn sẽ thấy trang chào mừng:
Tiếp theo, tôi sẽ thêm thông tin xác thực cơ sở dữ liệu vào tệp .env của Symfony.
Mã:
###> doctrine/doctrine-bundle ###
Mã:
APP_ENV=dev
Mã:
APP_DEBUG=1
Mã:
APP_SECRET=bd4d4fxxxx035a97fxxxed13f18646f
Mã:
Mã:
# tùy chỉnh dòng này!
Mã:
DATABASE_URL="mysql://db_user:[emailprotected]:3306/db_name"
Mã:
###< doctrine/doctrine-bundle ###
Lời kết
Symfony 4 đã được nhiều nhà phát triển PHP áp dụng và đánh giá cao, đồng thời đã có hàng triệu lượt tải xuống. Bạn cũng có thể sử dụng các phiên bản chuẩn của Symfony 3.x (bạn chỉ cần cập nhật lệnh để cài đặt phiên bản cụ thể):Đối với Symfony 3.0:
Mã:
composer create-project symfony/framework-standard-edition your_project_name "3.0.*"
Mã:
composer create-project symfony/framework-standard-edition your_project_name "3.1.*"