Thứ năm, 18/10/2018 | 00:00 GMT+7

Cách triển khai ứng dụng Symfony 4 để sản xuất với LEMP trên Ubuntu 18.04

Symfony là một khung công tác PHP open-souce với cấu trúc trang nhã và nổi tiếng là một khung công tác phù hợp để bắt đầu bất kỳ dự án nào dù quy mô của nó. Là một tập hợp các thành phần có thể tái sử dụng, tính linh hoạt, kiến trúc và hiệu suất cao của nó khiến nó trở thành lựa chọn hàng đầu để xây dựng một ứng dụng doanh nghiệp phức tạp cao.

Trong hướng dẫn này, bạn sẽ triển khai ứng dụng Symfony 4 chuẩn, hiện có để production với LEMP (Nginx, MySQL và PHP) trên Ubuntu 18.04, điều này sẽ giúp bạn bắt đầu cấu hình server và cấu trúc của khung. Nginx là một server HTTP open-souce phổ biến, hiệu suất cao với các tính năng bổ sung bao gồm hỗ trợ Reverse Proxy . Nó có một danh tiếng tốt và lưu trữ một số trang web lớn nhất và lưu lượng truy cập cao nhất trên internet. Nếu bạn chọn triển khai ứng dụng Symfony của riêng mình thay vào đó, bạn có thể phải triển khai các bước bổ sung tùy thuộc vào cấu trúc hiện có của ứng dụng của bạn.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần :

Bước 1 - Tạo User và Database cho Ứng dụng

Theo các hướng dẫn trong Yêu cầu , bây giờ bạn có tất cả các phụ thuộc server cơ bản cần thiết để cài đặt ứng dụng. Vì mọi ứng dụng web động đều yêu cầu database , bạn sẽ tạo user và cấu hình đúng database cho ứng dụng trong phần này.

Để tạo database MySQL cho ứng dụng của ta và user được liên kết với nó, bạn cần truy cập vào client MySQL bằng account root MySQL:

  • mysql -u root -p

Nhập password thích hợp, password này phải giống với password được sử dụng khi chạy mysql_secure_installation .

Tiếp theo, tạo database ứng dụng với:

  • CREATE DATABASE blog;

Bạn sẽ thấy kết quả sau trong console :

Output
Query OK, 1 row affected (0.00 sec)

Bạn đã tạo thành công database ứng dụng của bạn . Đến đây bạn có thể tạo user MySQL và cấp cho họ quyền truy cập vào database mới được tạo.

Thực thi lệnh sau để tạo user và password MySQL. Bạn có thể thay đổi tên user và password thành một thứ gì đó an toàn hơn nếu bạn muốn:

  • CREATE USER 'blog-admin'@'localhost' IDENTIFIED BY 'password';

Bạn sẽ thấy kết quả sau:

Output
Query OK, 0 rows affected (0.00 sec)

Hiện tại, user blog- administrator không có quyền đối với database ứng dụng. Trên thực tế, ngay cả khi administrator blog cố gắng đăng nhập bằng password của họ, họ sẽ không thể truy cập vào MySQL shell.

User cần có quyền trước khi truy cập hoặc thực hiện một hành động cụ thể trên database . Sử dụng lệnh sau để cho phép truy cập đầy đủ vào database blog cho user administrator blog :

  • GRANT ALL PRIVILEGES ON blog.* TO 'blog-admin'@'localhost';

Bạn sẽ thấy kết quả sau:

Output
Query OK, 0 rows affected (0.00 sec)

Người quản trị blog hiện có tất cả các quyền trên tất cả các bảng bên trong database blog . Để reload các bảng-cấp quyền quyền và áp dụng các thay đổi, bạn cần thực hiện thao tác quyền cấp bằng cách sử dụng câu lệnh tuôn ra:

  • FLUSH PRIVILEGES;

Bạn sẽ thấy kết quả sau:

Output
Query OK, 0 rows affected (0.00 sec)

Bạn đã hoàn tất việc tạo user mới và cấp quyền . Để kiểm tra xem bạn có đang đi đúng hướng hay không, hãy thoát khỏi client MySQL:

  • quit;

Và đăng nhập lại, sử dụng thông tin đăng nhập của user MySQL bạn vừa tạo và nhập password khi được yêu cầu :

  • mysql -u blog-admin -p

Kiểm tra xem user có thể truy cập database bằng:

  • SHOW DATABASES;

Bạn sẽ thấy bảng blog trong kết quả :

Output
+--------------------+ | Database | +--------------------+ | information_schema | | blog | +--------------------+ 2 rows in set (0.00 sec)

Cuối cùng, thoát khỏi client MySQL:

  • quit;

Bạn đã tạo thành công một database , một user cho ứng dụng demo và cấp cho user mới được tạo các quyền phù hợp để truy cập database . Đến đây bạn đã sẵn sàng để cài đặt ứng dụng demo.

Bước 2 - Cài đặt ứng dụng Demo

Để đơn giản hướng dẫn này, bạn sẽ triển khai một ứng dụng blog được xây dựng bằng Symfony. Ứng dụng này sẽ cho phép user được xác thực tạo một bài đăng trên blog và lưu trữ nó trong database . Ngoài ra, user ứng dụng có thể xem tất cả các bài viết và thông tin chi tiết liên quan đến một tác giả.

Mã nguồn của ứng dụng blog mà bạn sẽ triển khai trong hướng dẫn này là trên GitHub . Bạn sẽ sử dụng Git để lấy mã nguồn của ứng dụng từ GitHub và lưu nó vào một folder mới.

Đầu tiên, tạo một folder sẽ dùng làm folder root cho ứng dụng của bạn. Vì vậy, hãy chạy lệnh sau từ console để tạo một folder mới có tên là symfony-blog :

  • sudo mkdir -p /var/www/symfony-blog

Để làm việc với các file dự án bằng account user không phải root, bạn cần thay đổi chủ sở hữu và group folder bằng lệnh:

  • sudo chown sammy:sammy /var/www/symfony-blog

Thay thế sammy bằng tên user không phải root có quyền sudo của bạn.

Bây giờ, bạn có thể thay đổi vào folder mẹ và sao chép ứng dụng trên GitHub:

  • cd /var/www
  • git clone https://github.com/yemiwebby/symfony-blog.git symfony-blog

Bạn sẽ thấy kết quả sau:

Output
Cloning into 'symfony-blog'... remote: Counting objects: 180, done. remote: Compressing objects: 100% (122/122), done. remote: Total 180 (delta 57), reused 164 (delta 41), pack-reused 0 Receiving objects: 100% (180/180), 167.01 KiB | 11.13 MiB/s, done. Resolving deltas: 100% (57/57), done.

Ứng dụng demo hiện đã được cài đặt . Trong bước tiếp theo, bạn sẽ cấu hình các biến môi trường và cài đặt các phụ thuộc cần thiết cho dự án.

Bước 3 - Cấu hình các biến môi trường của bạn cho ứng dụng

Để cài đặt hoàn chỉnh ứng dụng, bạn cần cài đặt các phụ thuộc dự án và cấu hình đúng các thông số ứng dụng.

Theo mặc định, ứng dụng Symfony chạy ở chế độ phát triển, cung cấp cho nó một log rất chi tiết cho mục đích gỡ lỗi. Điều này không áp dụng cho những gì bạn đang làm trong hướng dẫn này và không phải là thông lệ tốt cho môi trường production , vì nó có thể làm chậm mọi thứ và tạo ra các file log rất lớn.

Symfony cần lưu ý bạn đang chạy ứng dụng trong môi trường production . Bạn có thể cài đặt điều này bằng cách tạo file .env chứa khai báo biến hoặc tạo trực tiếp các biến môi trường. Vì bạn cũng có thể sử dụng file .env để cấu hình thông tin đăng nhập database của bạn cho ứng dụng này, bạn thực hiện việc này sẽ hợp lý hơn. Thay đổi folder làm việc của bạn thành dự án nhân bản và tạo file .env với:

  • cd symfony-blog
  • sudo nano .env

Thêm các dòng sau vào file để cấu hình môi trường ứng dụng production :

.env
APP_ENV=prod APP_DEBUG=0 

APP_ENV là biến môi trường chỉ định rằng ứng dụng đang được production , trong khi APP_DEBUG là biến môi trường chỉ định xem ứng dụng có nên chạy ở chế độ gỡ lỗi hay không. Đến đây bạn đã đặt nó thành false.

Lưu file và thoát khỏi editor .

Tiếp theo, cài đặt một phần mở rộng PHP mà các ứng dụng Symfony sử dụng để xử lý XML:

  • sudo apt install php7.2-xml

Tiếp theo, bạn cần cài đặt các phụ thuộc của dự án, chạy composer install :

  • cd /var/www/symfony-blog
  • composer install

Bạn đã cấu hình thành công các biến môi trường và cài đặt các phụ thuộc cần thiết cho dự án. Tiếp theo, bạn sẽ cài đặt thông tin đăng nhập database .

Bước 4 - Cài đặt thông tin đăng nhập database

Để truy xuất dữ liệu từ database của ứng dụng mà bạn đã tạo trước đó, bạn cần cài đặt và cấu hình thông tin đăng nhập database bắt buộc từ bên trong ứng dụng Symfony.

Mở lại file .env :

  • sudo nano .env

Thêm nội dung sau vào file , điều này sẽ cho phép bạn dễ dàng kết nối và tương tác đúng cách với database . Bạn có thể thêm nó ngay sau dòng APP_DEBUG=0 trong file .env :

.env
... DATABASE_URL=mysql://blog-admin:password@localhost:3306/blog 

Khung công tác Symfony sử dụng thư viện của bên thứ ba được gọi là Doctrine để giao tiếp với database . Doctrine cung cấp cho bạn các công cụ hữu ích để thực hiện các tương tác với database dễ dàng và linh hoạt.

Như vậy, bạn có thể sử dụng Doctrine để cập nhật database của bạn với các bảng từ ứng dụng Github được sao chép. Chạy lệnh này để làm điều đó:

  • php bin/console doctrine:schema:update --force

Bạn sẽ thấy kết quả sau:

Output
Updating database schema... 4 queries were executed [OK] Database schema updated successfully!

Sau khi cài đặt thông tin đăng nhập cần thiết và cập nhật schemas database , bây giờ bạn có thể dễ dàng tương tác với database . Để khởi động ứng dụng với một số dữ liệu, bạn sẽ tải một tập hợp dữ liệu giả vào database trong phần tiếp theo.

Bước 5 - Điền vào database của bạn bằng Doctrine-Fixtures

Hiện tại, các bảng mới tạo đang trống. Bạn sẽ điền nó bằng cách sử dụng các đồ đạc học thuyết . Sử dụng Doctrine-Fixtures không phải là yêu cầu đối với các ứng dụng Symfony, nó chỉ được sử dụng để cung cấp dữ liệu giả cho ứng dụng của bạn.

Chạy lệnh sau để tự động tải dữ liệu thử nghiệm chứa thông tin chi tiết về tác giảbài đăng mẫu vào bảng database được tạo cho blog:

  • php bin/console doctrine:fixtures:load

Bạn sẽ nhận được một cảnh báo về việc database bị xóa. Bạn có thể tiếp tục và nhập Y :

Output
Careful, database will be purged. Do you want to continue y/N ? y > purging database > loading App\DataFixtures\ORM\Fixtures

Trong phần tiếp theo, bạn sẽ xóa và làm nóng bộ nhớ cache.

Bước 6 - Xóa và làm nóng bộ nhớ cache của bạn

Để đảm bảo ứng dụng của bạn tải nhanh hơn khi user đưa ra yêu cầu, bạn nên làm nóng bộ nhớ cache trong quá trình triển khai. Việc làm nóng bộ nhớ cache sẽ tạo ra các trang và lưu trữ chúng để phản hồi nhanh hơn sau này thay vì tạo các trang hoàn toàn mới. May mắn là Symfony có lệnh xóa bộ nhớ cache cũng gây ra hiện tượng nóng lên. Chạy lệnh sau cho mục đích đó:

  • php bin/console cache:clear

Bạn sẽ thấy kết quả sau:

Output
Clearing the cache for the prod environment with debug false [OK] Cache for the "prod" environment (debug=false) was successfully cleared.

Bạn sẽ kết thúc việc cài đặt sau một chút. Tất cả những gì còn lại là cấu hình web server . Bạn sẽ làm điều đó trong phần tiếp theo.

Bước 7 - Cấu hình web server và chạy ứng dụng

Bây giờ, bạn đã cài đặt Nginx để phục vụ các trang web và MySQL để lưu trữ và quản lý dữ liệu . Đến đây bạn sẽ cấu hình web server bằng cách tạo một khối server ứng dụng mới, thay vì chỉnh sửa khối mặc định.

Mở một khối server mới với:

  • sudo nano /etc/nginx/sites-available/blog

Thêm nội dung sau vào file cấu hình khối server mới. Đảm bảo bạn thay thế your_server_ip trong khối server bằng địa chỉ IP server của bạn :

/ etc / nginx / sites-available / blog
 server {     listen 80;     listen [::]:80;      server_name blog your_server_ip;     root /var/www/symfony-blog/public;     index index.php;     client_max_body_size 100m;      location / {         try_files $uri $uri/ /index.php$is_args$args;     }      location ~ \.php {         try_files $uri /index.php =404;         fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;         fastcgi_param SCRIPT_NAME $fastcgi_script_name;         fastcgi_split_path_info ^(.+\.php)(/.+)$;         fastcgi_index index.php;         include fastcgi_params;       }      location ~ /\.(?:ht|git|svn) {         deny all;     } } 

Đầu tiên, ta đã chỉ định các chỉ thị listen cho Nginx, theo mặc định trên cổng 80 , sau đó đặt tên server để trùng với các yêu cầu đối với địa chỉ IP của server . Tiếp theo, ta đã sử dụng các chỉ thị root để chỉ định root tài liệu cho dự án. Ứng dụng symfony-blog được lưu trữ trong /var/www/symfony-blog , nhưng để tuân theo các phương pháp hay nhất, ta đặt root web thành /var/www/symfony-blog/public vì chỉ folder con /public mới được hiển thị với mạng internet. Cuối cùng, ta đã cấu hình chỉ thị vị trí để xử lý quá trình PHP processor .

Sau khi thêm nội dung, hãy lưu file và thoát khỏi editor .

Lưu ý: Nếu bạn đã tạo file example.com trong bài viết tiên quyết Cách cài đặt Linux, Nginx, MySQL, PHP ( LEMP ) trên Ubuntu 18.04, hãy xóa file khỏi folder sites-enabled bằng sudo rm /etc/nginx/sites-enabled/ example.com để nó không xung đột với file mới này.

Để kích hoạt khối server mới được tạo, ta cần tạo một softlink từ file cấu hình khối server mới nằm trong folder /etc/nginx/sites-available đến /etc/nginx/sites-enabled bằng cách sử dụng lệnh sau:

  • sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/

Kiểm tra file cấu hình mới để tìm bất kỳ lỗi cú pháp nào bằng lệnh:

  • sudo nginx -t

Lệnh này sẽ in lỗi ra console nếu có. Khi không có lỗi, hãy chạy lệnh này để reload Nginx:

  • sudo systemctl reload nginx

Bạn vừa kết thúc bước cuối cùng cần thiết để triển khai thành công ứng dụng Symfony 4. Bạn đã cấu hình web server bằng cách tạo khối server và đặt đúng root web để làm cho ứng dụng web có thể truy cập được.

Cuối cùng, bây giờ bạn có thể chạy và thử nghiệm ứng dụng. Truy cập http:// your_server_ip trong trình duyệt yêu thích của bạn:

Hình ảnh sau là ảnh chụp màn hình của ứng dụng blog Symfony mà bạn sẽ thấy tại địa chỉ IP server của bạn :

Ảnh chụp màn hình thay thế của ứng dụng blog Symfony

Kết luận

Symfony là một khung công tác PHP giàu tính năng với kiến trúc giúp cho việc phát triển web trở nên thú vị đối với nhà phát triển xây dựng phần mềm sử dụng nó. Symfony là một khung phát triển web giàu tính năng cung cấp cho các nhà phát triển các công cụ mạnh mẽ để xây dựng các ứng dụng web. Nó thường được coi là một lựa chọn tốt cho các ứng dụng doanh nghiệp do tính linh hoạt của nó. Các bước để triển khai một ứng dụng Symfony điển hình khác nhau — tùy thuộc vào cài đặt , độ phức tạp và yêu cầu của ứng dụng.

Trong hướng dẫn này, bạn đã triển khai thủ công ứng dụng Symfony 4 để production trên server Ubuntu 18.04 chạy LEMP. Đến đây bạn có thể áp dụng kiến thức này để triển khai các ứng dụng Symfony của bạn .


Tags:

Các tin liên quan

Cách cài đặt và sử dụng Composer trên Ubuntu 18.04
2018-10-16
Làm thế nào để kiểm tra các vai trò không thể phục hồi với Molecule trên Ubuntu 18.04
2018-10-02
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04 [Quickstart]
2018-07-16
Cách bật SFTP mà không cần quyền truy cập Shell trên Ubuntu 18.04
2018-07-13
Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 18.04
2018-07-13
Cách cài đặt Git trên Ubuntu 18.04 [Quickstart]
2018-07-12
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04
2018-07-12
Cách sử dụng Chế độ độc lập của Certbot để truy xuất chứng chỉ SSL Let's Encrypt trên Ubuntu 18.04
2018-07-11
Cách cài đặt WordPress với LEMP trên Ubuntu 18.04
2018-07-11
Cách sử dụng LVM để quản lý thiết bị lưu trữ trên Ubuntu 18.04
2018-07-11