Hướng Dẫn Sử Dụng sPhoton ERP CLI (erp)
Công cụ dòng lệnh sPhoton ERP CLI (erp) giúp tự động hóa hoàn toàn việc khởi tạo, cấu hình, quản lý và vận hành các môi trường phát triển (development) cũng như kiểm thử/vận hành (staging/production) cho hệ thống ERPNext/Frappe sử dụng Docker Compose.
1. Các lệnh CLI và Cờ (Flags)
Dưới đây là tổng hợp đầy đủ các lệnh, cờ tương ứng, cách dùng và ngữ cảnh sử dụng thực tế.
1.1. Xem thông tin phiên bản (version)
- Cú pháp:
go run cli/main.go version# Hoặc qua tệp nhị phân đã builderp versionerp -verp --version
- Khi nào dùng: Cần kiểm tra thông tin liên hệ của maintainer, slogan thương hiệu, website chính thức hoặc kiểm tra phiên bản CLI hiện tại.
1.2. Khởi tạo dự án mới (new)
- Cú pháp:
erp new <project_dir> [flags]
- Các cờ (Flags):
--run: Tự động khởi chạy provisioning dựng môi trường ngay sau khi tạo cấu hình thành công.--local: Chỉ định môi trường phát triển cục bộ (local).--staging: Chỉ định môi trường kiểm thử (staging).--production: Chỉ định môi trường vận hành thực tế (production).--name <company_name>: Thiết lập tên công ty / dự án (Mặc định:ERPNext).--port <host_port>: Thiết lập cổng dịch vụ trên máy host (Mặc định:8123).--domain <domain>: Thiết lập tên miền site (Mặc định:localhost:<port>).--admin-password <password>: Thiết lập mật khẩu cho tài khoảnAdministrator.--apps <apps>: Danh sách các ứng dụng cài đặt kèm, phân cách bằng dấu phẩy (ví dụ:hrms,payments).
- Chế độ tự động hoàn toàn (Non-interactive / Agent-friendly):
Nếu bạn truyền đủ 3 thông số bắt buộc: Môi trường (một trong các cờ
--local/--staging/--production), Tên công ty (--name), và Cổng (--port), CLI sẽ bỏ qua giao diện tương tác TUI hoàn toàn và trực tiếp tạo cấu hình. Ví dụ lệnh chạy nhanh:go run cli/main.go new dev_project --run --local --name ERPNext --port 2345 --domain localhost:2345 --admin-password admin - Giao diện Wizard tương tác (TUI):
Nếu thiếu bất kỳ tham số bắt buộc nào, CLI sẽ tự động kích hoạt TUI Wizard tương ứng để hỏi thông tin còn thiếu. Bạn có thể dùng phím
Tab/Enterđể chuyển bước,Shift+Tabđể quay lại vàSpaceđể chọn app.
1.3. Khởi dựng và chạy môi trường (run)
- Cú pháp:
erp run [flags]
- Các cờ (Flags):
--dry-run: Chỉ in ra màn hình các lệnh docker và bench sẽ được chạy mà không thực sự thực thi chúng.
- Cách thức hoạt động:
- Tự động viết tệp
compose.ymlvà ghi các tài nguyên Docker (Dockerfile, scripts entrypoint) vào thư mục dự án. - Khởi động các Docker container ở chế độ chạy ngầm (
docker compose up -d). - Tự động vá lỗi
setup_wizard.jscủa Frappe core trên host để Setup Wizard nhận diện tiếng Việt mặc định. - Chờ MariaDB container sẵn sàng, sau đó chạy
bench new-siteđể tạo site mới. - Cài đặt
erpnextvà các ứng dụng bổ sung được định nghĩa trong cấu hình. - Đặt các thông số hệ thống tiếng Việt mặc định (
vi,Vietnam,Asia/Ho_Chi_Minh,VND, định dạng ngàydd-mm-yyyy, ngày đầu tuần thứ HaiMonday). - Khởi động lại các container ứng dụng để tải mã nguồn mới nhất.
- Tự động viết tệp
- Khi nào dùng: Chạy lệnh này ngay tại thư mục dự án khi bắt đầu khởi động hoặc dựng mới môi trường dự án.
1.4. Dừng dự án (stop)
- Cú pháp:
erp stop
- Mô tả: Tắt tất cả các containers đang chạy ngầm của dự án hiện tại bằng lệnh
docker compose down. - Khi nào dùng: Khi kết thúc ngày làm việc hoặc muốn tạm dừng dự án để giải phóng tài nguyên CPU/RAM trên máy tính.
1.5. Kiểm tra đồng bộ (verify)
- Cú pháp:
erp verify [project_dir]
- Mô tả: Quét cấu hình
erp-config.yamlvà đối chiếu với file chạy thực tếcompose.ymlđể kiểm tra sự trùng khớp về cổng ánh xạ Nginx, các biến môi trường cài đặt app của backend. - Khi nào dùng: Sử dụng trước khi deploy hoặc khi cần kiểm tra xem tệp compose chạy thực tế có đồng bộ với file cấu hình cấu hình dự án hay không.
1.6. Trình quản lý HUD Dashboard (dashboard)
- Cú pháp:
erp dashboard
- Mô tả: Giao diện HUD quản trị tập trung (TUI Bubbletea) hiển thị danh sách các dự án đang tồn tại trên hệ thống. Ở phiên bản v1.0.2, giao diện được nâng cấp thành cấu trúc hai cột ngang:
- Cột bên trái: Danh sách các dự án hiện có và trạng thái chạy/dừng thời gian thực.
- Cột bên phải: Sidebar hiển thị logo nghệ thuật ASCII sPhoton, siêu dữ liệu dự án (Maintainer, Copyright, Slogan, Phiên bản) và hộp "Quick Help" trợ giúp phím tắt thông minh.
- Các phím điều khiển nhanh:
s: Bật dự án được chọn (docker compose up -dngầm).x: Tắt dự án được chọn (docker compose down).r: Khởi động lại dự án (docker compose restart).d: Gỡ bỏ đăng ký (Unregister) dự án khỏi Dashboard (không xóa file trên đĩa cứng).qhoặcCtrl+C: Thoát dashboard.
- Khi nào dùng: Khi có nhiều dự án chạy song song và muốn có một giao diện chung trực quan để bật, tắt và giám sát nhanh trạng thái của chúng.
1.7. Quản lý ứng dụng (app)
Quản lý các ứng dụng Frappe động cho site của dự án hiện tại:
- Cài đặt ứng dụng:
Ví dụ:erp app install <app_name_or_url> [repo_url] [--force]
erp app install hrmshoặcerp app install wiki https://github.com/frappe/wiki.git - Gỡ cài đặt ứng dụng:
erp app uninstall <app_name> [--force]
- Cập nhật ứng dụng:
erp app update <app_name>
1.8. Sao lưu và Khôi phục (backup & restore)
- Sao lưu cơ sở dữ liệu và files:
Mô tả: Tạo bản sao lưu nénerp backup
.sql.gzlưu bên trong thư mụcsites/của dự án. - Khôi phục cơ sở dữ liệu:
Mô tả: Khôi phục cơ sở dữ liệu của site từ tệp sao lưu. CLI tự động xử lý việc sao chép tệp tạm vào volume container nếu tệp nằm ngoài vùng mount của docker.erp restore <backup_file_path>
1.9. Quản lý dịch thuật đa ngôn ngữ (export:lang & import:lang)
- Xuất dịch thuật ra file CSV:
Ví dụ:erp export:lang <language_code> -f <csv_path>
erp export:lang vi -f translation_vi.csv - Nhập dịch thuật từ file CSV:
Mô tả: Cập nhật bản dịch từ tệp CSV vào các tệperp import:lang <language_code> -f <csv_path>
.pocủa các ứng dụng, tự động chạy biên dịch.movà xoá cache Desk để cập nhật ngay từ dịch mới lên giao diện.
1.10. Đổi mật khẩu Administrator (reset-password)
- Cú pháp:
erp reset-password [new_password]
- Mô tả: Thay đổi mật khẩu tài khoản
Administratorcủa site và ghi nhận lại mật khẩu mới này vào tệp cấu hình dự án. Nếu không truyền mật khẩu mới, CLI sẽ tự động sinh mật khẩu ngẫu nhiên an toàn dài 16 ký tự.
1.11. Cấu hình GitHub Token (github login)
- Cú pháp:
erp github login --token <token>
- Các cờ (Flags):
--token: Mã Personal Access Token (PAT) của GitHub có quyền đọc/pull các repository private của tổ chức.
- Khi nào dùng:
Khi cấu hình các ứng dụng tùy chỉnh (custom apps) trong tệp
erp-config.yamlsử dụng địa chỉ SSH (git@github.com:workdone-vn/...) hoặc HTTPS (https://github.com/workdone-vn/...), CLI sẽ tự động chèn Token đã cấu hình này để chuyển URL thành định dạng truy cập qua HTTPS OAuth2 (https://oauth2:<token>@github.com/...) lúc clone app. - Cơ chế hoạt động:
- Xác thực token: CLI sẽ tự động dùng lệnh
git ls-remoteđể kiểm tra trực tiếp xem token được cung cấp có hợp lệ và có quyền truy cập (đọc/pull) repository của tổ chức (workdone-vn/erpmanager.git) hay không. Nếu không, CLI sẽ trả về lỗi và không lưu token. - Mã hóa bảo mật: Token sau khi xác thực thành công sẽ được mã hóa đối xứng (sử dụng khóa được tạo từ định danh thiết bị và người dùng hệ điều hành để đảm bảo token không bị lưu dưới dạng văn bản thuần - clear text) và lưu tại tệp cấu hình an toàn trên máy người dùng (
~/.erp_github_token).
- Xác thực token: CLI sẽ tự động dùng lệnh
1.12. Cấu hình SSH Key (ssh-key import)
- Cú pháp:
erp ssh-key import [flags]
- Các cờ (Flags):
--path <path>: Đường dẫn tới tệp SSH Key riêng tư (ví dụ:~/.ssh/id_rsa) hoặc thư mục chứa các SSH key (ví dụ:~/.ssh). Mặc định là thư mục.sshcủa người dùng (~/.ssh).
- Khi nào dùng:
Khi bạn muốn sử dụng khóa SSH có sẵn trên máy host để clone/triển khai các custom app qua giao thức SSH (ví dụ:
git@github.com:...) thay vì cấu hình GitHub Personal Access Token (PAT). - Cơ chế hoạt động:
- Lưu cấu hình: CLI kiểm tra sự tồn tại của tệp/thư mục SSH Key trên máy host và lưu đường dẫn tuyệt đối vào tệp cấu hình toàn cục
~/.erp_ssh_key_path. - Copy vào container: Khi khởi chạy
erp runhoặcerp app install, CLI tự động copy thư mục hoặc tệp SSH Key từ máy host vào thư mục home của user trong container backend (/home/frappe/.ssh) thông qua lệnhdocker compose cp. - Cấu hình quyền bảo mật: CLI tự động chạy script cấu hình quyền sở hữu (
chown -R frappe:frappe) và quyền truy cập (chmod 700cho thư mục.ssh,chmod 600cho các file bên trong) ở container backend. - Tác dụng: Giúp container backend tự động sử dụng SSH Credentials và danh sách
known_hostsđược copy từ máy host để clone code trực tiếp qua Git SSH mà không cần phải can thiệp thủ công, đồng thời giữ cho tệpcompose.ymlhoàn toàn độc lập và di động (không phụ thuộc vào đường dẫn tuyệt đối của host).
- Lưu cấu hình: CLI kiểm tra sự tồn tại của tệp/thư mục SSH Key trên máy host và lưu đường dẫn tuyệt đối vào tệp cấu hình toàn cục
1.13. Chạy lệnh trực tiếp trong Container (exec)
- Cú pháp:
erp exec <command>
- Mô tả: Chạy các câu lệnh tùy ý trực tiếp bên trong Docker container của dịch vụ backend đang hoạt động. Lệnh này sẽ tự động xác thực sự tồn tại của tệp cấu hình
erp-config.yamlvà kiểm tra sự sẵn sàng của lệnhdockertrong môi trường hệ thống. - Ví dụ:
# Truy cập bash shell bên trong container backenderp exec bash# Chạy bench console trực tiếperp exec "bench --site erp.localhost console"# Kiểm tra phiên bản Python trong containererp exec "python --version"
- Khi nào dùng: Khi nhà phát triển hoặc quản trị viên cần thực thi nhanh một lệnh tùy biến bên trong container của dự án hiện hành mà không muốn gõ dòng lệnh docker dài dòng.
2. Hướng dẫn phát triển Custom App (Local Development)
Khi làm việc ở môi trường phát triển cục bộ (local), thư mục ./apps trên máy host sẽ được mount trực tiếp vào container. Bạn có thể áp dụng quy trình phát triển và kiểm thử sau:
2.1. Khởi tạo Custom App mới
Chạy lệnh tại thư mục dự án:
erp dev create-app <app_name>
2.2. Cơ chế tự động nạp lại (Auto-reload)
- Frontend (JS/CSS/Assets): Chạy watcher để tự động phát hiện và biên dịch lại assets frontend khi bạn lưu file thay đổi ở host:
erp dev watch
- Backend (Python API & Controllers): Ở chế độ
ENVIRONMENT=development, Gunicorn chạy trong container backend được bật cờ--reload. Mỗi khi bạn chỉnh sửa và lưu file.pyở host, Gunicorn tự động tải lại code Python mới ngay lập tức, bạn không cần chạy lệnh restart thủ công.
2.3. Khi nào cần chạy lệnh Reload thủ công (erp dev reload)?
Các tiến trình chạy nền như Background Workers (bench worker) và Scheduler (bench schedule) không sử dụng Gunicorn nên không có tính năng tự động reload. Bạn cần chạy lệnh reload thủ công khi:
- Thay đổi logic của các tác vụ chạy nền (background tasks / jobs).
- Thay đổi cấu hình hệ thống trong file
hooks.py(chỉ được load lại khi khởi động hoặc clear cache cụ thể). Lệnh chạy:
erp dev reload
Lệnh này sẽ xoá cache và khởi động lại nhanh các container backend và workers để load code mới.
2.4. Mở Interactive Console
Truy cập nhanh Python interactive console của Frappe trực tiếp trong container để test code, chạy thử lệnh ORM hoặc kiểm tra database:
erp dev console