Biểu tượng website Khó ăn cát bê tông

Trên lối mòn lần tìm đến vườn DevOps

Bài viết này được viết với sự ngớ ngẩn cao độ, kèm theo sự mơ mộng hão huyền rằng người viết cũng sắp trở thành một DevOps đến nơi. Nếu nghiêm chỉnh con đường kỹ sư công nghệ, ngay từ lúc đầu quân vào một công ty công nghệ hoặc chuyên về lập trình, phát triển phần mềm vào thời điểm được tuyển làm kỹ sư,… có thể bạn sẽ hổng có bài viết này để đọc. Người viết bài nhiều năm vẫn không trở nên chuyên nghiệp bởi gã chỉ sử dụng công nghệ thông tin để làm công việc văn phòng, giải trí, chứ hiếm khi chuyên tâm làm việc như lập trình viên, kỹ sư phần mềm.

Để hình dung con đường DevOps tự học, đi loanh quanh chơi

DevOps có tiếp xúc với nhiều nhóm công cụ, hệ sinh thái phát triển phần mềm khác nhau như: JAMStack, LAMP stack, LEMP stack, MEAN stack, Jam stack, .NET stack,…

Khi đi dạo một lát bạn thấy rằng thực ra một ông DevOps làm công việc khá giống như việc san lấp mặt bằng, xây dựng hạ tầng kiểu điện, đường, trường, trạm cho một khu đô thị mới vậy, chỉ khác là hạ tầng này về công nghệ thông tin, phần mềm.

Trong lĩnh vực phần mềm hoặc giải pháp (thiên về phần mềm) công nghệ thông tin, công việc DevOps chính là một công việc mới nảy sinh khoảng sau năm 2006, khi mà điện toán đám mây hiện đại như chúng ta thấy ngày nay được khởi đầu với Amazon Web Services.

Trước đó, một người hoặc nhóm người gọi là lập trình viên, kỹ sư phần mềm thường làm luôn công việc của DevOps. Dần dần, hệ thống trở nên phức tạp, các dự án lớn cần nhiều người phối hợp nên độ chuyên môn hoá cao, vậy là nảy sinh ra DevOps.

DevOps có một phần của lập trình viên, một phần của SysAdmin mạng máy tính, đôi khi còn có một phần của IT HelpDesk.

Các công cụ thường dùng của DevOps

Tóm lại, DevOps khá giống bịch bông, trên đe, dưới búa đập ình ình. Nghe có vẻ buồn cười nhưng nếu DevOps không giỏi, họ có thể bị các đám còn lại coi khinh, nhưng nếu họ giỏi, thì họ lại là bệ đỡ vứng chắc giúp cho những thành phần còn lại toả sáng.

Tui đi dạo vì có nhiều thứ về DevOps tui chưa biết

Tui có biết vài thứ mà sau khi nhìn vào các stack thông dụng được liệt kê tui tự đánh giá bản thân có kiến thức, kỹ năng gần với LAMP Stack nhất.

LAMP stack gồm những gì?

Tui hãy còn biết quá ít ỏi về các công cụ như Git, Docker, Chef, Jenkins, AWS, Google Cloud Platform, Microsoft Azure,… dù thi thoảng có sử dụng đến vài món khi triển khai một phần mềm ứng dụng chạy trên nền PHP hoặc Perl.

Thảng hoặc tui cũng có đụng đến Odoo, Django Framework, app trên nền Microsoft SharePoint, hoặc app trên nền IBM WebSphere… nhưng rồi cũng chỉ dừng ở mức mang tính biểu diễn chơi, kiếm chút chi phí cà phê khi mentor cho vài “IT man”, không mang tính nghề ngỗng gì.

Với đoạn viết bên dưới, tui bắt đầu cuộc dạo chơi của mình để dần dần thử làm một gã DevOps cho vài dự án kiểu lính đánh thuê xem sao. Dám cá rằng nếu bạn là dân trong nghề, bạn thấy bài viết này hoàn toàn vớ vẩn, bậy bạ, kiến thức lởm khởm,… nhưng mặc kệ bạn, blog của tui tui cứ viết 😜

Cài một web panel tên Virtualmin để dễ quản lý web server ảo

SSH thẳng vô Ubuntu server của tui sẵn sàng ở dấu nháy lệnh như bên dưới:

SSH vào máy ảo, hãy xem nó như một con VPS

Truy cập ngay vào website chính chủ của Virtualmin, một web panel nguồn mở, để điều khiển một con VPS hoặc server họ Linux thông qua giao diện web. Tui đang nhìn thấy có cái gì trông như thế này:

Đoạn hướng dẫn cài đặt Virtualmin tại trang web chính chủ

Gõ lại dòng (1) ở hình trên vào Terminal để tải file script về Ubuntu Server máy ảo của tui để sẵn sàng cho việc cài đặt. Mất chừng 5 giây script đã tải xong, nằm ngay trên thư mục hiện tại. Tui nhảy dựng lên, phát ngay một lệnh sau:

sudo sh virtualmin-install.sh

Script cài đặt Virtualmin đáp lại tui, nó hiện lên vài thông tin thông báo để bạn hiểu được chuyện gì sắp xảy ra. Trông giông giống như sau:

Xác nhận cài Virtualmin

Chỉ cần Yes là script thực hiện việc cài đặt. Sau khi tui bấm Yes, mọi chuyện cứ ngỡ đầu xuôi đuôi lọt, hoá ra không hoàn toàn suôn sẻ chút nào hết trơn, hiện lên mớ gì đó:

Lỗi cài Virtualmin
Lỗi cài đặt Virtualmin

Tui còn biết làm gì hơn ngoài việc cố đọc hiểu lỗi là gì để chỉnh sửa nhằm đáp ứng yêu cầu của Virtualmin trước khi thử lại. Tui đã làm như gợi ý, phát ngay lệnh:

sudo dpkg --configure -a

Một mớ cái gì đó chạy chạy, mất gần 10 phút, hiện lên những dòng cuối cùng trước khi xuất hiện lại dấu nhắc lệnh, trông tím lim trời mây như này:

Ubuntu hiển thị quá trình cập nhật, yêu cầu khỏi động lại

Tui quất ngay lệnh sudo reboot để khởi động lại ngay và luôn không chậm trễ một giây nào. Ngay sau khi máy khởi động lại, tui tiếp tục SSH vào nó để trở lại với lệnh chạy script cài đặt Virtualmin.

Lần này, liệu có may mắn nào xảy ra? Tui đang rất mong chờ, gõ dòng này trong lúc máy ảo đang khởi động.

Virtualmin hỏi tên đầy đủ như máy tui phục vụ public ra Internet vậy

Nhập tên vô y chang server đang chạy với một địa chỉ IP dạng public có thể truy cập từ Internet vậy, rồi Enter xem chuyện gì tiếp theo? Hoá ra Virtualmin tải về những thành phần của nó, trước đó nó dự kiến tới 2GB chỗ trống. Tui ngồi đợi mất hơn bốn chục phút, mạng mẽo Việt Nam ra quốc tế quá hẻo, tốc độ gì đâu có 300Mbps mà thôi. Rồi cũng thấy kết quả:

Cài đặt Virtualmin thành công

Mở trình duyệt ra, gõ địa chỉ như gợi ý ở hình trên, tức là địa chỉ:

https://lamp.ubuntu2204.local:10000
hoặc https://10.0.2.15

Người khác làm theo tui? Họ sẽ nhìn thấy dòng địa chỉ khác với ở tên chứ hổng thể nào y chang đươc trừ khi họ có VPS có địa chỉ IP nội bộ hoặc cài mạng LAN có máy ảo đặt IP giống của tui. Enter một phát, những gì xuất hiện trên màn hình làm tui không tin vào mắt mình:

Cảnh báo SSL không an toàn
Báo lỗi này là bình thường vì SSL không được trust

Chỉ cân bấm nút Advanced như trên hình để bung ra một khung, giúp cho việc đi tiếp có thể thực hiện được. Khung cũng có nút bấm:

Chấp nhận rủi ro SSL
Bấm vào nút để chấp nhận rủi ro

Màn hình đăng nhập Virtualmin với tư cách ông trùm quản trị hiện lên:

Màn hình đăng nhập Virtualmin

Lập tức điền username và mật khẩu rồi bấm nút Sign in để được Virtualmin cho phép vào màn hình tiếp theo. Vì mới cài đặt xong, nên sẽ hiện lên các bước “hậu cài đặt”, ta lần lượt đi qua để những lần sau Virtualmin đã có thông số, không hỏi lại nữa:

Hậu cài đặt Virtualmin, cửa sổ dạng Wizard hiện lên, cứ bấm Next

Qua một màn hình kế tiếp cũng có nút Next:

Thiết lập GUI của Virtualmin
Chỉ có Yes, No mà thôi, cứ đọc hiểu và click vào

Một màn hình khác lại hiện ra, liên quan đến trình quét virus nguồn mở danh tiếng ClamAV:

Có sử dụng ClamAV hay không?
Click Next để hoàn tất hậu cài đặt

Lại có thêm một màn hình mới, cho phép bạn chọn cơ sở dữ liệu dùng trên hệ thống:

Cơ sở dữ liệu LAMP stack
Chọn cơ sở dữ liệu, đại diện bằng chữ M trong LAMP stack

Các bước còn lại tui cũng chủ yếu bấm Next mà thôi. Nhưng sẽ có một bước tui phải check vào mục Skip check for resolvability vì máy của tui hổng phải là máy public ra Interne, nếu không check vào đó, báo lỗi, tui không thể bấm Next đi tiếp.

Khi thấy xuất hiện dòng chữ Virtualmin post-installation configuration is now complete! là hoàn tất. Lúc này có thể khám phá Virtualmin.

Tạo một server ảo để làm nơi cho một ứng dụng PHP chạy

Trên menu chính của Virtualmin, click mục Create Virtual Server sẽ ra một màn hình để điền thông số:

Tạo server ảo trong Virtualmin
Điền các thông số rồi bấm nút Create Server

Trong vòng 1 phút server ảo sẽ được tạo xong dựa trên domain mà bạn cung cấp vào (2) ở hình bên trên. Khi xong, thử nhập địa chỉ đó lên thanh địa chỉ trình duyệt, hình ảnh tui nhìn thấy:

Màn hình mặc định virtual server
Màn hình cho thấy tài khoản virutual server vừa tạo đã hoạt động

Click nút Login to Virtualmin, nhập username (là card), và mật khẩu để đăng nhập. Lúc này màn hình không phải của trùm quản trị nên đơn giản hơn, ít chức năng hơn:

Màn hình dành cho người dùng Virtualmin với tư cách Admin của 1 virtual server

Chú ý: tui đã vọc khá thuộc bài nên tui phân biệt được trình quản lý hosting vơi lại website tuy cùng địa chỉ URL nhưng khác port. Cụ thể trong ca đang xử lý như sau:

http://card.ubuntu2204.local : đây là địa chỉ website
còn https://card.ubuntu2204.local:10000 : đây là địa chỉ để truy cập vào Virtualmin, địa chỉ này user card không có quyền sudo để thực hiện các tác vụ hệ thống, mà chỉ làm được một số việc của user bình thường, và thư mục của user này là /home/card
địa chỉ https://lamp.ubuntu2204.local:10000 là địa chỉ có thể truy cập với quyền root của server hoặc quyền của user gọi là sudoer, đánh lệnh Terminal để cấu hình này nọ là dùng với user này.

Vì server là của tui nên tui có thể luân chuyển các quyền qua lại khi cần thiết. Nhưng tui cũng luôn dựng tóc gáy lên (không phải do sợ hãi, 😳 mà tui đang nghĩ mình là một bác… cự đà Nam Mỹ ) để kịp nhìn nhận đang ở vai trò user nào trên hệ thống.

Không được nhầm lẫn để rồi cảm thấy… ủa ủa gì đó là hổng phải. Cũng từ nay khi đã cài Virtualmin, khi truy cập địa chỉ lamp.ubuntu2204.local (tương đương địa chỉ IP 10.0.2.15) với quyền trùm, tui có thể click vào menu Terminal để gõ lệnh mà không còn cần SSH từ của số Putty hoặc Ubuntu Terminal của máy tính desktop tui đang nữa.

Thử vào File Manager, upload một file lên, xả nén ra thành một số file, thư mục con:

Quản lý file với File Manager

Vậy là truy cập vào mục docs xem có gì trong đó, nhập như sau lên thanh địa chỉ trình duyệt của tui:

http://card.ubuntu2204.local/docs/docs/index.html

Hiện ra một màn hình trông khá đẹp mắt của một phần mềm vCard:

InfyVCards-SaaS
Màn hình chào của InfyVCards-SaaS

Click ngay nút Get start màu xanh lá sáng khá bắt mắt để xem chi tiết tài liệu:

Yêu cầu về PHP để cài InfyVCards-SaaS
Yêu cầu để cài đặt InfyVCards-SaaS: Technologies Used

Cái vùng khoanh đỏ ô-van này mới làm tui cảm thấy chột dạ quá chừng. Lý do: mặc định khi cài Virtualmin, phiên bản PHP sẽ là 7.4.x theo như tui được biết cách đây vài tuần. Dù gì đi nữa, kiểm tra lại cho chắc ăn. Quay lại File Manager, tui tạo một file check-php-ver.php có thông tin:

<?php
phpinfo();
?>

Nhập lại đường dẫn đẩy đủ lên thanh địa chỉ trình duyệt, tức như sau:

http://card.ubuntu2204.local/check-php-ver.php

Hiện thông tin về PHP ra màn hình cái nào… Màu tím xám nhạt của PHP khiến tui bất an quá:

Thông tin từ hàm phpinfo trả về

Ui, may mắn làm sao, Virtualmin phiên bản vừa cài đặt đây đã mặc định PHP 8.1. Tui mừng quá, đỡ vất vả hẳn. Nếu không lại phải loay hoay với cái gọi là multi-version, cài cắm mệt bở hơi tai chưa chắc đã chạy được.

Nhưng vẫn còn một lăn tăn nhỏ đó là trên hệ thống của tui là MariaDB, trong khi phần mềm ghi là MySQL. Mặc dù 2 phần mềm cơ sở dữ liệu này rất giống nhau, có cùng nguồn gốc nhưng không luôn luôn phần mềm có thể chạy được nếu lập trình viên có sử dụng cái gì đó đặc trưng của riêng một trong hai phần mềm này.

Dù sao, tui cũng cứ thử xem thế nào, lúc đó mới biết được chứ ngồi phỏng đoán sẽ không đi đến đâu.

Cài đặt InfyVCards-SaaS phiên bản 8.2.0

Đây là một ví dụ thực tế khách hàng thuê tui cài đặt một ứng dụng được họ mua từ trang CodeCanyon.net – một thành viên của hệ sinh thái Envato. Đây gọi là DevOps sẽ khiến những bạn DevOps cười khúc khích bởi nó trông quá “múa rìu qua mắt thợ”, hoàn toàn là một ca quá sơ khai, kiểu như… lùa gà ☺ 😊

Đúng, tui đến với DevOps theo kiểu “dân chơi nhạc rừng”, không tranh cãi với các bạn làm gì. Kiến thức, kỹ năng DevOps của tui hoàn toàn tự học dựa trên nền…. cài Win dạo trong chục năm 2002-1012. Cái sở học tui thấm đẫm không theo mô thức nào.

Bài viết này cũng mang tính chất đọc chơi, không phải là một tech blog, dân trong nghề cố đọc để rồi phát bực mình, âu đó là sự nhầm nhọt vậy.

Xem thử gói cài đặt InfyVCards-SaaS version 8.2.0 có gì?

Một file ZIP gồm có: 1 thư mục docs và một file dist.zip. Trong thư mục docs có nhiều file, thư mục con, còn khi giải nén file dist.zip ra được nhiều thư mục khác, theo cấu trúc của một ứng dụng PHP được viết trên nền Laravel.

Thư mục docs

Phỏng đoán ban đầu của tui hệ thống (web server và PHP) phải đáp ứng được yêu cầu cho cả Laravel và yêu cầu riêng của InfyVCards-SaaS.

Lần lượt chúng ta phải giải quyết các yêu cầu này trước khi InfyVCards-SaaS có thể chạy được.

Thiết lập môi trường cho Laravel, InfyVCards-SaaS

Tui di chuyển thư mục docs vào public_html rồi gõ lên trình duyệt:

http://card.ubuntu2204.local/docs

Ra một trang hướng dẫn đầy đủ do người cung cấp InfyVcards-SaaS cung cấp, hình hài trang trông như sau:

Tài liệu hướng dẫn của InfyVcards

Click nút Get started tui được dẫn đến một trang khá dài, được bố trí theo kiểu chương phần như một tài liệu học thuật hoặc cuốn sách. Tui không định liệt kê hết mọi thứ ra đây, chỉ tập trung vào việc làm sao cài được phần mềm.

Vậy là kiểm đếm lại xem hệ thống đã có gì? Trên hệ thống đã có PHP 8.1, MySQL 5.6+ thì tui có MariaDB 10.6. Hai món jQuery, Ajax phía client, tức dùng bất cứ trình duyệt web thông dụng nào chạy trên Windows 10 đều đáp ứng.

Đọc tiếp đoạn docs dở dang ngay bên dưới đoạn Technologies Used đề cập bên trên, tui đến đoạn Installation Guide → System Requirement thấy có các thông tin:

Có 2 yêu cầu: 1 cho Laravel, 2 cho PHP đang trên hệ thống

Giải quyết (1): Laravel Requirements (tạm hiểu là những yêu cầu để có thể đáp ứng được hoạt động của framework Laravel – được xem là một trong những nền tảng mạnh nhất trong làng PHP). Tui đã thực hiện lệnh ở Terminal (giờ đây dùng của Virtualmin tại lamp.ubuntu2204.local) như sau:

Cài đặt Composer – công cụ để cài đặt các gói PHP

Khi đã có Composer rồi, cài Laravel là việc gõ lệnh, ngồi vuốt râu đợi mà thôi! Có phải dzậy hông? Đơn giản vậy có thể một nhóc học lớp 4 cũng trở thành một tay DevOps cả rồi. tui thử tạo một project Laravel với lệnh:

composer create-project laravel/laravel app-cua-tui

Nó sẽ hiện lên những thông báo thú vị trông đến là bối rối như sau:

Hệ thống chưa đáp ứng yêu cầu cài đặt Laravel

Tui đành copy lại cái danh sách những PHP Extension được yêu cầu ra một trình soạn thảo văn bản text thô, trên máy của tui là GNOME Text Editor, rồi biến nó thành:

sudo apt-get install -y php8.1-mysqlnd php8.1-opcache php8.1-pdo php8.1-xml php8.1-calendar php8.1-ctype php8.1-dom php8.1-exif php8.1-ffi php8.1-fileinfo php8.1-ftp php8.1-gettext php8.1-iconv php8.1-mbstring php8.1-mysqli php8.1-pdo_mysql php8.1-phar php8.1-posix php8.1-readline php8.1-shmop php8.1-simplexml php8.1-sockets php8.1-sysvmsg php8.1-sysvsem php8.1-sysvshm php8.1-tokenizer php8.1-xmlreader php8.1-xmlwriter php8.1-xsl

Lòng mừng khấp khởi, phen này lệnh chạy vun vút như quái xế đua xe. Ngay khi Enter, nhìn lại thấy… hơi ơi là:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'php8.1-mysql' instead of 'php8.1-mysqlnd'
Note, selecting 'php8.1-common' instead of 'php8.1-pdo'
Note, selecting 'php8.1-common' instead of 'php8.1-calendar'
Note, selecting 'php8.1-common' instead of 'php8.1-ctype'
Note, selecting 'php8.1-xml' instead of 'php8.1-dom'
Note, selecting 'php8.1-common' instead of 'php8.1-exif'
Note, selecting 'php8.1-common' instead of 'php8.1-ffi'
Note, selecting 'php8.1-common' instead of 'php8.1-fileinfo'
Note, selecting 'php8.1-common' instead of 'php8.1-ftp'
Note, selecting 'php8.1-common' instead of 'php8.1-gettext'
Note, selecting 'php8.1-common' instead of 'php8.1-iconv'
Note, selecting 'php8.1-mysql' instead of 'php8.1-mysqli'
Note, selecting 'php8.1-common' instead of 'php8.1-phar'
Note, selecting 'php8.1-common' instead of 'php8.1-posix'
Note, selecting 'php8.1-common' instead of 'php8.1-shmop'
Note, selecting 'php8.1-xml' instead of 'php8.1-simplexml'
Note, selecting 'php8.1-common' instead of 'php8.1-sockets'
Note, selecting 'php8.1-common' instead of 'php8.1-sysvmsg'
Note, selecting 'php8.1-common' instead of 'php8.1-sysvsem'
Note, selecting 'php8.1-common' instead of 'php8.1-sysvshm'
Note, selecting 'php8.1-common' instead of 'php8.1-tokenizer'
Note, selecting 'php8.1-xml' instead of 'php8.1-xmlreader'
Note, selecting 'php8.1-xml' instead of 'php8.1-xmlwriter'
E: Unable to locate package php8.1-pdo_mysql
E: Couldn't find any package by glob 'php8.1-pdo_mysql'
E: Couldn't find any package by regex 'php8.1-pdo_mysql'

Đành ngồi mà sửa thủ công lại câu lệnh theo như gợi ý lẫn báo lỗi trên, giờ đây câu lệnh trông có vẻ gọn gàng, ngắn hơn:

sudo apt-get install -y php8.1-mysql php8.1-opcache php8.1-common php8.1-xml php8.1-mbstring php8.1-readline php8.1-xsl

Khi câu lệnh chạy, hoá ra trên hệ thống đã khá đầy đủ rồi, thông báo như sau:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
php8.1-common is already the newest version (8.1.2-1ubuntu2.14).
php8.1-common set to manually installed.
php8.1-mbstring is already the newest version (8.1.2-1ubuntu2.14).
php8.1-mbstring set to manually installed.
php8.1-mysql is already the newest version (8.1.2-1ubuntu2.14).
php8.1-mysql set to manually installed.
php8.1-opcache is already the newest version (8.1.2-1ubuntu2.14).
php8.1-opcache set to manually installed.
php8.1-readline is already the newest version (8.1.2-1ubuntu2.14).
php8.1-readline set to manually installed.
php8.1-xml is already the newest version (8.1.2-1ubuntu2.14).
php8.1-xml set to manually installed.

Chạy lại lệnh composer tạo một project Laravel xem sao. Hy vọng lần này Laravel đã sẵn sàng làm việc. Nào xem thông báo có gì?

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - spatie/laravel-ignition[2.0.0, ..., 2.3.2] require ext-curl * -> it is missing from your system. Install or enable PHP's curl extension.
    - Root composer.json requires spatie/laravel-ignition ^2.0 -> satisfiable by spatie/laravel-ignition[2.0.0, ..., 2.3.2].

Vẫn còn lỗi, tui bồi thêm câu lệnh: sudo apt-get install php8.1-curl xem sao, rồi lại tạo project. Lần này chạy cái gì đó mất chừng 1 phút, và thấy có màu xanh lá cây, tui cho rằng đã ổn, với thông báo sau:

83 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan vendor:publish --tag=laravel-assets --ansi --force

   INFO  No publishable resources for tag [laravel-assets].  

No security vulnerability advisories found.
> @php artisan key:generate --ansi

   INFO  Application key set successfully.  

OK, giờ thì đã có thể nạp App InfyVcards-SaaS kia vào chạy được rồi. Nào, thực hiện các bước:

Giải quyết (2): rất đơn giản mà thôi, chắc chắn trong Virtualmin tồn tại đâu đó, tui liền tìm kiếm và thấy ngay:

Cấu hình PHP-fpm trong virutualmin

Hình minh hoạ trên có được bằng cách vào menu Web Configuration → PHP-FPM Configuration → Edit Configuration Manually (icon cuối, có hình cây bút viết trên cuốn sổ). Ba dòng 18-20 chính là dòng tui vừa thêm.

Sau khi đã ổn với Composer, tui di chuyển thư mục vcards có được từ file dist.zip giải nén đã đề cập vào thư mục /home/card

Tui bắt đầu làm biếng nên hỏi khách hàng là thư mục web root có nhiều site hay chỉ có mỗi cái ứng dụng vcards này, được đáp rằng chỉ có mỗi nó. Vậy là khoẻ cho tui gì đâu.

Tui liền xoá thư mục web root mặc định /home/card/public_html đi, tạo ngay một soft link mang tên public_html ở ngay trong /home/card để Apache HTTP Server vẫn nhìn nhận thư mục gốc web root (tức tương đương htdocs nếu cài Apache mặc định) vẫn y như cũ. Tất nhiên, soft link này trỏ đến /home/card/vcards/public để phần mềm nạp lên đúng.

Tiếp theo, chỉnh sửa nội dung file .env , file này có đường dân cụ thể đầy đủ như sau:

/home/card/vcards/.env : đây là file ẩn, cho nên nếu không nhìn thấy nó, cần phải chỉnh trên Virtualmin để hiện file ẩn, hoặc dùng chức năng Terminal của Virtualmin gõ lệnh ls -a /home/card/vcards

Nạp các thông số cấu hình như hướng dẫn trong docs của phần mềm:

Cấu hình .env cho Laravel 10.x
Thông số cấu hình .env

Vì khách hàng chỉ muốn xem qua phần mềm, chưa cần phải cài đặt đầy đủ chức năng nên tui bỏ qua phần cấu hình mail. Chỉ cần như hình trên đã tạm đủ để chạy.

Tiếp theo, dùng Virutualmin tạo cơ sở dữ liệu (trong MariaDB) có tên vcards, gán người dùng tên card và mật khẩu như hình thông số .env kể trên.

Ta có cơ sở dữ liệu ban đầu của phần mềm được đặt tại file:

/home/card/vcards/database/infy-vcards.sql

Tất nhiên là tui có thể chọn 2 phương án là gõ lệnh trực tiếp từ command line ngay trên Virtualmin hoặc từ máy tính client của tui vì khách đã gửi cho tui file, và tui dễ dàng upload qua phpMyAdmin.

Vì file dữ liệu chỉ có 2,1 Megabyte mà thôi nên tui dùng phpMyAdmin cho trực quan một chút. Kết quả import vào trông như sau:

Dữ liệu vcards được nhìn thấy trong màn hình phpMyAdmin

Đến đây, tui đã thiết lập xong mọi thứ. Giờ chỉ còn giống như đợi cắt băng khánh thành mà thôi.

Truy cập InfyVCards-SaaS lần đầu tiên

Mặc dù triển khai hàng trăm dự án CNTT từ đơn giản đến phức tạp khác nhau nhưng tui luôn có cảm giác hồi hộp mỗi khi mở màn một cái mới như hiện đang. Để bớt hồi hộp, tui đành phải mở trình duyệt web lên, gõ dòng:

http://card.ubuntu2204.local

rồi nhắm mắt lại trước khi bấm Enter. 5 giây sau, tui mở mắt lại, có cái gì hiện trên màn hình? Đây là cái mà tui nhìn thấy:

Màn hình InfyVCards-SaaS vừa mới cài đặt xong

Lúc này tui đành quay lại đọc docs xem có tài khoản mặc định nào không để mà đăng nhập xem như một người quản trị hệ thống. Không cần phải lăn tăn, tài khoản đó luôn có, và tui đã login thử:

Màn hình đăng nhập

Ngay sau Enter chừng 2 giây, hiện ra như này:

Màn hình Admin trên phần mềm

Đến đây, xem như tui tạm xong thoả thuận với khách hàng, việc còn lại để him vọc.

Đăng tại Chưa phân loại