Dùng AI viết app là một series mình viết lại quá trình mình build FastAI Rewrite (fastairewrite.com) bằng cách sử dụng AI. Các bạn có thể đọc các phần trước tại đây:
---
Nếu code có thể sử dụng AI để viết thì việc thiết lập server bắt buộc cần dùng tay. Trong quá trình set up server thì mình cũng có sử dụng AI nhưng mà chỉ để giải thích lỗi các thứ :vv
Để đầu làm cái ảnh thumbnail
Để đầu làm cái ảnh thumbnail
Để bắt đầu set up app, mình mất 1 tuần chỉ để sẵn sàng :vv Vì mình chưa biết làm như nào cả, mà khi bắt đầu làm một việc không rõ ràng như vậy thì dễ nản. Không sao, ít nhất thì sau 1 tuần mình cũng bắt đầu.

1. Domain

Bạn cứ hiểu đơn giản, một web app như một cửa hàng. Tương tự web app, để kinh doanh một cửa hàng thì bạn cần:
- Server - Cửa hàng: Chính là cửa hàng đó, làm sao nó có thể hoạt động, khách đến thì có ai tiếp,... Tương tự, server là nơi bạn chạy web app, "khách" có thể nhìn từ bên ngoài để đoán server hoạt động như nào nhưng không thể biết rõ.
- Domain - Địa chỉ cửa hàng: Địa chỉ này là địa chỉ bằng chữ, ví dụ số 205 Giải Phóng. Trong trường hợp không có địa chỉ chữ, khách hàng sẽ cần tìm tới cửa hàng bằng toạ độ, rất khó nhớ. Tương tự, domain chính là địa chỉ chữ của trang web để người dùng truy cập một cách dễ dàng hơn. Với FastAI Rewrite thì đó là fastairewrite.com.
Server: Highland Coffe Chùa Chuông, Domain: M334+RR, Lê Lợi, Hưng Yên
Server: Highland Coffe Chùa Chuông, Domain: M334+RR, Lê Lợi, Hưng Yên
Để có domain, bạn có thể mua ở các website cung cấp dịch vụ domain. Một số website nổi tiếng ở toàn cầu như: GoDaddy, Namecheap, Name,...
Mình ưa ngon bổ rẻ nên chọn một bên Việt Nam để mua là tenten.vn để tiện quản lý cùng một domain mình mua cho blog cá nhân là mankaistep.com.
Mình mua domain .com thì giá khoảng 300k/năm. Cũng không quá đắt. Các đuôi domain càng uy tín hoặc trend thì càng đắt. Ví dụ như domain đuôi .vn là 450k/năm, đuôi .ai là 3 triệu :D. Đó là lý do tại sao mình chọn .com thay vì .ai mặc dù app có liên quan tới AI, sót ví lắm.
3 củ =))))
3 củ =))))
Khi mua xong thì có giao diện quản lý như này. Việc tiếp theo là cần trỏ domain về địa chỉ của server, mình sẽ nói ở dưới.
UX của tenten.vn đuồi lắm, tại vì lỡ mua 1 domain ở đây rồi nên mua tiếp cho tiện quản lý thôi
UX của tenten.vn đuồi lắm, tại vì lỡ mua 1 domain ở đây rồi nên mua tiếp cho tiện quản lý thôi

2. Server

Mua hosting - server

Web app của mình là chạy trên Node.js, do đó mình cần mua một server có thể hỗ trợ chạy node. Dịch vụ mình chọn là Vietnix vì ở đây có Hosting giá rẻ, nghèo nên chọn luôn.
Rẻ điên
Rẻ điên
Ban đầu mình nghĩ service ở Việt Nam bán rẻ thật, cùng cấu hình mà ở công ty mình mua ở service khác đắt hơn nhiều lần.
Khi mua hosting, bạn sẽ có IP - địa chỉ của hosting và cần trỏ Domain về địa chỉ IP này.
Khi trỏ xong, thay vì khách truy cập web của bạn bằng IP (ví dụ: 234.31.23.112) thì họ có thể truy cập bằng domain (ví dụ: fastairewrite.com). Dễ nhớ hơn nhiều.

Set up app

Sau khi research các thứ, để web app chạy một cách tối ưu ở môi trường production (môi trường thực tế) thì cần build.
Build đại khái là việc từ một thư mục dự án gồm rất nhiều các file các nhau, sau khi build thì nó sẽ thành một file tối ưu hơn để chạy app. Nếu chạy file chưa được build thì tốn tài nguyên hơn rất nhiều.
Ban đầu, đây là cách mình thiết lập để server có thể chạy app mình:
- Để dự án vào một repository ở Github
- Tạo 1 file run app, khi file này chạy thì bước đầu tiên là sẽ clone repository ở Github về, sau đó thực hiện lệnh build và start app
repo nè
repo nè
Khi đó, việc build sẽ diễn ra ở server của mình.
Tuy nhiên, đến bước build, server báo lỗi không đủ tài nguyên. Sau khi hỏi 7 7 49 câu hỏi cho AI và thực hiện các config tối ưu, vẫn lỗi tùm lum dkm cay vl. Lúc ấy mình bất lực vãi.
Loanh quanh việc fix lỗi để cho build được này mình mất 1 tuần.
Sau đó, mình quyết định nâng server từ 2 CPU + 2GB Ram lên 4 CPU + 6GB Ram. Tự tin lắm, nghĩ kiểu gì cũng chạy được, nhưng vẫn gặp lỗi, lần này là không thể chạy app trên port 80. Ngoài ra, không hiểu sao port 3000 của mình khi truy cập lại thấy 1 website lạ hoắc.
Mida cũng không cứu được ca này
Mida cũng không cứu được ca này
Có vẻ hosting của mình bị hack.

Kêu cứu hỗ trợ Vietnix

Quả này căng, mình làm cái ticket cho Vietnix, xong trao đổi qua lại các thứ.
Cuối cùng, mình nhận ra vấn đề là:
- Hosting này là mình sẽ dùng chung với nhiều người khác, đó là tại sao rẻ vkl và port 3000 của mình lại là một website dạy lái xe.
- Hosting được tối ưu cho wordpress nên giới hạn các phần khác, đó cũng là lý do tại sao chạy app lỗi liên tục.
Vậy là do chọn sai nền văn minh từ đầu, mình tốn 2 tuần chỉ để fix các lỗi mà không thể giải quyết được do cấu hình server.
Mình chọn gói VPS CHEAP 3, nhưng mình nghĩ cheap 1 là đủ chạy app mình rồi
Mình chọn gói VPS CHEAP 3, nhưng mình nghĩ cheap 1 là đủ chạy app mình rồi
Sau đó mình chuyển dịch vụ sang VPS và set up lại. Cuối cùng web app cũng chạy, quá phê (phê thật đấy, cảm giác vượt qua chính bản thân mình vậy).
Log ở server nè
Log ở server nè

3. CI/CD

CI/CD có thể hiểu đơn giản là một quy trình mà nó sẽ tự động thực hiện các thao tác để đưa code mới của bạn lên môi trường thực. Lợi ích của nó là hạn chế việc theo tác thủ công.
Việc fix lỗi suốt 2 tuần không phải tốn công vô ích mà mình cũng tìm ra một cách để build mà không cần chạy trên server là build ở trên Github.
Được giới thiệu cho
Được giới thiệu cho
Cảm ơn anh Mida 🙏
Khi set up thành công, luồng mới sẽ như này:
- Mỗi khi mình push code lên main của repository github thì một luồng Action của Github sẽ chạy
- Github sẽ thực hiện build project của mình và push code sau khi được build qua một project khác
- Ở server, khi chạy app thì server sẽ clone repository đã được build về và chạy
Đây là các bước mà Github action sẽ chạy khi có code push lên production
Đây là các bước mà Github action sẽ chạy khi có code push lên production
Khi có luồng CI/CD như này, khi có code mới. Mình chỉ cần:
- Push lên main
- Đợi 1-2 phút cho chạy CI/CD xong
- Truy cập vào server và restart lại app
Nếu không có luồng CI/CD này, thì mình sẽ phải vào server, thực hiện build và migrate database các thứ nếu cần. Quy trình sẽ gồm nhiều bước hơn nhiều.
Vip hơn nữa thì có thể set up làm sao để luồng CI/CD tự restart lại app luôn. Khi đó thì mình chỉ cần push code lên main rồi đợi một lúc là các code mới tự được cập nhật lên production.
Mình lười nên không làm :vv app nhỏ nhỏ thôi nên cũng không cần set up quá vip làm gì. Biết là khả thi là được rồi, khi nào cần thì tìm hiểu.
Ngoài ra để quản lý tiến trình chạy hiệu quả thì mình sử dụng pm2. Để trỏ port 80 về port 3000 của mình thì mình sử dụng ngnix.
pm2 giúp app mình vẫn chạy khi mình thoát khỏi server
pm2 giúp app mình vẫn chạy khi mình thoát khỏi server
---
Đây cũng là bước cuối cùng để mọi người có thể truy cập web app FastAI Rewrite một cách tự do.
Bước tiếp theo là mình cần làm Chrome Extension phiên bản mới và submit lên Chrome Web Store. Phiên bản này cần đảm bảo hoạt động mượt mà cùng Web app.
App ở trên Chrome Web Store
App ở trên Chrome Web Store
Mọi người cùng đón đọc phần tiếp tại: ... (chưa có)