Skip to content

Remote và Đồng bộ (Remotes and Sync) ​

Đây là tài liệu hướng dẫn chính thức về môi trường remote của Govard, các hoạt động đồng bộ và quy trình xử lý database từ xa.


Cấu hình Remote ​

Thêm một Remote ​

bash
govard remote add staging --host staging.example.com --user deploy --path /var/www/app

Các cờ của remote add:

CờMô tả
--hostTên miền hoặc IP của remote
--userTên đăng nhập SSH
--pathĐường dẫn dự án trên remote
--portPort SSH (mặc định: 22)
--capabilitiesCác quyền hạn, phân tách bằng dấu phẩy (files,media,db,deploy)
--auth-methodPhương thức đăng nhập (keychain, ssh-agent, keyfile)
--key-pathĐường dẫn tới SSH key (cho phương thức keyfile)
--strict-host-keyKích hoạt xác minh nghiêm ngặt host-key
--known-hosts-fileĐường dẫn file known_hosts tùy chỉnh
--protectedBảo vệ chống ghi đè cho remote này

GỢI Ý

Để sử dụng thư mục home của user trên remote, hãy đóng dấu nháy đơn cho đường dẫn để shell local không tự động expand nó:

bash
govard remote add staging --host staging.example.com --user deploy --path '~/public_html'

Xác minh kết nối ​

bash
govard remote copy-id staging    # Copy public key local của bạn vào authorized_keys của remote
govard remote test staging       # Kiểm tra kết nối SSH + rsync, đo độ trễ và phân loại lỗi

Lệnh remote test phân loại chính xác các lỗi: network, auth, permission, host_key, dependency.

Thiết lập xác thực bằng key luôn là việc bạn chủ động yêu cầu: cách tường minh là govard remote copy-id <remote>. Nơi duy nhất khác còn đề nghị copy public key là govard remote test — lệnh mà nhiệm vụ chính là chẩn đoán lỗi xác thực — và lời đề nghị đó giờ mặc định là Không trừ khi bạn nói có, nên một lần nhấn Enter sẽ không copy gì cả. Một lần đọc hay đồng bộ với remote chưa được thiết lập key sẽ không bao giờ ghi vào authorized_keys của remote như một tác dụng phụ. Trên remote write-protected (--protected, hoặc môi trường govard nhận ra là production), lời đề nghị bị từ chối hoàn toàn và remote thậm chí không được kết nối để hỏi — hãy tự thiết lập key bằng copy-id khi bạn thực sự muốn.

Thực thi lệnh và Giám sát lịch sử (Exec & Audit) ​

bash
govard remote exec staging -- ls -la
govard remote audit tail --lines 20
govard remote audit tail --status failure --lines 50
govard remote audit stats --lines 200

remote exec chạy bất kỳ lệnh shell nào bạn đưa vào và nằm ngoài gate bảo vệ ghi, kể cả với remote được bảo vệ: không có gì kiểm tra lệnh đó, nên người vận hành tự chịu trách nhiệm về thứ mình chạy (ví dụ ở trên cố ý là lệnh chỉ đọc). Một alias như stg được resolve về remote đã cấu hình trước, nên key của nó và các sự kiện audit dùng tên đã cấu hình.

Đường dẫn file nhật ký (Audit log paths):

  • ~/.govard/remote.log
  • ~/.govard/operations.log

Cơ chế bảo mật Remote (Remote Safety Model) ​

Bảo vệHành vi
Bảo vệ môi trường ProdCác remote có tên chứa prod mặc định được bảo vệ chống ghi đè: lớp bảo vệ chỉ áp dụng cho thao tác ghi, còn thao tác đọc từ remote được bảo vệ vẫn được phép
Kiểm soát quyền hạn (Capability)Mỗi thao tác đều kiểm tra quyền tương ứng: files, media, db, deploy
Xác thực host-keyChỉ áp dụng dạng opt-in trên từng remote, không ép buộc mặc định
Tích hợp 1PasswordCác trường cấu hình remote hỗ trợ tham chiếu secret dạng op://...

Cấu hình remote Sandbox ​

sandbox là tên remote duy nhất vừa resolve được dù chưa hề được cấu hình: govard sandbox up tạo một container trên máy này và govard resolve tên đó từ chính container đó. Vì vậy luật cho một block remotes.sandbox không phải là "khai báo host" — mà là định hình buổi diễn tập, không định hình máy.

Luôn lấy từ container: host, port, user, path, url, mọi trường auth (method, key_path, strict_host_key, known_hosts_file), paths, thông tin kết nối db_*, và hai cờ topology local và sandbox. Một identity bị rò rỉ không fail ầm ĩ: buổi diễn tập sẽ lặng lẽ chạy trên một máy khác, ở một path khác, bằng một key khác — và vẫn báo thành công.

Block được phép đặt: capabilities, protected, và đúng những trường deploy.* mà một override per-remote thực sự copy — keep_releases, command_timeout, artifact_dir, repository, branch, publish, deploy_path, db_backup, verify.url, verify.timeout, hooks, và settings theo từng khoá. deploy_path là trường duy nhất dời được buổi diễn tập: nó đổi chỗ release được publish bên trong sandbox và không với ra ngoài được. lock_stale_after, maintenance_timeout và verify.follow_redirects chỉ đọc ở cấp project, block sandbox bị bỏ qua với chúng — hãy để chúng trong block deploy: cấp project, nơi chúng thực sự được đọc.

Bốn khoá bị ghim ngược về container: deploy.settings.owner, writable_mode, php_bin và php_version. Bốn khoá đó mô tả đúng thứ image thực sự mang theo (user deployer sở hữu file, cách file được ghi, PHP binary và series), và một lần deploy sẽ từ chối chạy khi PHP ở đích không khớp series khai báo. writable_permissions và composer_bin không bị ghim.

Vì sao: người vận hành cần mô tả được hình dạng của đích diễn tập — số bản release giữ lại, quyền hạn, có cần xác nhận hay không — còn phương án thay thế (từ chối remote add sandbox, phớt lờ block viết tay) để lại một block được parse bởi một đường đi nhưng bị mọi bên đọc identity bỏ qua, tệ hơn cả hai cực đoan.

yaml
remotes:
  sandbox:
    capabilities:
      db: false
    protected: true
    deploy:
      keep_releases: 3
bash
govard remote add sandbox --capabilities db --protected   # cùng allowlist đó

Mọi cờ identity truyền vào remote add sandbox — --host, --user, --port, --path, --auth-method, --key-path, --known-hosts-file và --strict-host-key — đều bị bỏ qua và được nêu tên trên stderr; block được ghi ra mà không mang giá trị identity nào, và các lần lưu sau vẫn giữ nguyên như vậy. govard remote list vẫn chỉ in một dòng sandbox, đặt trạng thái ở cột HOST và capabilities của block ở cột CAPABILITIES, và báo block đã cấu hình là được lớp lên sandbox synthetic.

Desktop app resolve sandbox theo cùng cách: các nút Open admin / Open SFTP / Open SSH đi qua container, không đi qua block, nên một block không có host không thể khiến app mở https://localhost/admin trên chính máy của bạn. App liệt kê sandbox bất cứ khi nào container trả lời — cùng điều kiện kích hoạt với govard remote list, chứ không phải cùng quy tắc về dòng: bảng của app bỏ qua sandbox mà nó không resolve được, trong khi remote list luôn in một dòng và đặt trạng thái vào cột HOST. Khi project có cấu hình block remotes.sandbox mà không có container đang chạy, dòng đó bị bỏ khỏi bảng và lý do trả về dưới dạng warning trong bảng remote của project; một project không có block và cũng không có container thì không có dòng nào và không có warning nào.


Tổng quan về Đồng bộ (Sync Overview) ​

Lệnh govard sync di chuyển các file nguồn, media, và dữ liệu database giữa môi trường local và remote được chỉ định.

bash
govard sync --source staging --destination local --full --plan
govard sync --from staging --to local --media
govard sync -s dev --db --no-noise --no-pii
govard sync -s prod --file --path app/etc/config.php
govard sync -s dev --file app/design/frontend/MyTheme

Tự động chọn remote staging nếu không khai báo --source, và fallback về dev. Cờ --media đơn lẻ sẽ mặc định chạy chế độ đồng bộ media dạng optimized.

Nguồn hoặc đích là sandbox sẽ được resolve từ container đang chạy, chứ không phải từ file cấu hình, nên govard sync -s sandbox chạy được ngay cả khi project không có block remotes.sandbox nào. Lệnh truyền tải được dựng từ chính identity của container — 127.0.0.1, user deployer, port được publish, và khoá do sandbox up sinh ra — nên block cấu hình chỉ định hình được buổi diễn tập, không bao giờ trỏ luồng truyền sang máy khác. Trên máy không có Docker thì không thể resolve sandbox, và yêu cầu tên này sẽ thoát với mã 3 kèm CAPABILITY_MISSING thay vì báo tên chưa được cấu hình.

Các cờ chỉ định Endpoint ​

CờMô tả
-s, --source / --fromMôi trường nguồn
-d, --destination / --toMôi trường đích
-e, --environmentViết tắt của --source

Các cờ phạm vi dữ liệu (Scope Flags) ​

CờNhững gì được đồng bộ
-A, --fullTất cả mọi thứ (files + media + database)
-f, --fileMã nguồn và các file chung
-m, --media [mode]File media đặc thù của framework; gọi --media đơn lẻ mặc định là optimized
-b, --dbCơ sở dữ liệu của dự án

Các cờ truyền tải dữ liệu (Transfer Flags) ​

CờMô tả
--planChỉ hiển thị kế hoạch thực thi rồi thoát, không chạy thực tế
-D, --deleteXóa các file ở đích nếu không tồn tại ở nguồn
-R, --resumeBật tính năng tiếp tục truyền tải file dở dang (mặc định: true)
--no-resumeTắt tính năng tiếp tục truyền tải file dở dang
-C, --no-compressTắt nén dữ liệu khi chạy rsync
-y, --yesBỏ qua các xác nhận tương tác
-p, --pathChỉ định một file hoặc thư mục cụ thể tương đối với thư mục gốc dự án
-I, --includeCấu hình pattern bao gồm của rsync (có thể lặp lại nhiều lần)
-X, --excludeCấu hình pattern loại trừ của rsync (có thể lặp lại nhiều lần)

Kế hoạch và bản tóm tắt xác nhận hiện mật khẩu database dưới dạng export MYSQL_PWD=***; (export PGPASSWORD=***; với PostgreSQL); lệnh được chạy vẫn mang giá trị thật. --db và --full còn cần container runtime (database đi qua container database local), trừ khi dùng --plan.

TIP

Nếu không truyền --path, toàn bộ thư mục gốc của dự án sẽ được đồng bộ — govard sync sẽ cảnh báo điều này trong kế hoạch trước khi hỏi xác nhận. Bạn cũng có thể bỏ qua -p/--path và truyền path dưới dạng tham số cuối cùng, ví dụ: govard sync -s dev --file app/design/frontend/MyTheme.

Các bộ lọc bảo mật cơ sở dữ liệu (Database Privacy Filters) ​

CờPhân loạiCác bảng bị loại trừ (Magento 2)LaravelWordPress
--no-noiseDữ liệu rác/tạm thờicron_schedule, session, cache_tag, report_eventcache, sessions, failed_jobsredirection_404, wflogs
--no-piiThông tin cá nhâncustomer_entity, sales_order, quote, admin_userusers, password_resetsusers, usermeta, comments

LƯU Ý

Các bộ lọc database được tối ưu hóa sâu nhất cho Magento 2. Đối với các framework khác, các pattern an toàn mặc định sẽ được sử dụng nếu khả dụng.


Thông tin kết nối database của remote ​

Với các thao tác --db, Govard tự đọc cấu hình trên remote qua SSH thay vì hỏi thông tin kết nối — nhưng chỉ cho ba họ framework: dotenv (.env), WordPress (wp-config.php) và Magento 2 / MageOS (app/etc/env.php). Mọi stack khác đều không được thăm dò: nếu không tìm thấy gì nó sẽ cảnh báo và dùng defaults của framework — dump fallback mà không kết nối được sẽ fail rõ ràng thay vì ra file rỗng, nên hãy coi mọi cảnh báo credential là tín hiệu cần kiểm tra lại remote path.

Mỗi probe được hỗ trợ thử ba vị trí app root theo thứ tự — remote path đã cấu hình trước, rồi <path>/public_html, rồi <path>/current — nên remote trỏ vào layout root vẫn resolve được. Ứng viên hợp lệ đầu tiên thắng: file .env cũ còn sót ở layout root sẽ che mất file .env thật của ứng dụng nằm sâu hơn một cấp, vì layout root được thử trước. Hãy trỏ path của remote đúng vào app root thật (hoặc xoá file cũ) khi probe đọc nhầm database.

Mọi lệnh mysql/mariadb chạy trên remote đều kèm --no-defaults, nên credential probe được là nguồn duy nhất có hiệu lực: password cũ trong ~/.my.cnf trên remote không bao giờ lặng lẽ đè lên chúng (thứ tự ưu tiên của client là command-line > option file > MYSQL_PWD).

Hành vi đồng bộ (Sync Behavior) ​

Tiếp tục truyền tải dở dang (Resumable Transfers) ​

Đồng bộ file và media mặc định sử dụng chế độ tiếp tục của rsync (--partial + --append-verify).

bash
govard sync -s staging --file        # mặc định có thể resume
govard sync -s staging --file --no-resume  # tắt chế độ resume

Bộ lọc Include và Exclude ​

Các cờ --include và --exclude (hoặc -I và -X) chỉ áp dụng cho phạm vi -f, --file và -m, --media — chúng sẽ bị bỏ qua đối với phạm vi DB.

Trong lệnh govard bootstrap, cờ --exclude hoạt động như bộ lọc bỏ qua toàn cục cho cả việc clone mã nguồn và đồng bộ media sau đó.

Loại trừ media thông minh (Chỉ Magento) ​

Govard tích hợp bộ lọc tự động khi đồng bộ media Magento nhằm tối ưu hóa băng thông mạng và dung lượng lưu trữ ổ đĩa.

Phân loạiHành viCác đường dẫn bị loại trừ
None--media noneBỏ qua hoàn toàn việc đồng bộ media
Minimal--media minimal*.jpg, *.png, *.webp, *.mp4, *.pdf (chỉ đồng bộ asset code)
OptimizedChế độ mặc địnhcatalog/product/ (Magento), */cache/* (WordPress)
Catalog--media catalogNhư optimized nhưng bao gồm ảnh sản phẩm, bỏ qua cache sản phẩm (chỉ Magento)
All--media allĐồng bộ tất cả mọi thứ (sử dụng cẩn thận)

LƯU Ý

Tất cả các chế độ ngoại trừ All đều tự động loại trừ các thư mục rác của framework như tmp/, cache/, và logs/.

Sử dụng --media all để tải về toàn bộ media. Sử dụng --media minimal nếu chỉ cần CSS/JS/Fonts.

Các đích đến được bảo vệ (Protected Destinations) ​

CẢNH BÁO

Sử dụng --delete kết hợp với --db sẽ hiển thị cảnh báo chính sách an toàn. Các remote thuộc môi trường Production được bảo vệ chống ghi đè và sẽ chặn các thao tác phá hủy này. Lớp bảo vệ chỉ áp dụng cho thao tác ghi, không áp dụng cho thao tác đọc: db info hoặc db top trên remote được bảo vệ vẫn được phép (db dump cũng vẫn được phép — lệnh này chỉ tạo một tệp archive mới trên remote), và chỉ thao tác ghi vào remote đó — db import không dùng --stream-db (bản dùng cờ đó chỉ đọc dump của remote rồi ghi vào database cục bộ của bạn), db query, db connect, snapshot push — mới bị từ chối.

Tích hợp với lệnh bootstrap ​

Lệnh govard bootstrap sử dụng chung các cờ đồng bộ và bộ lọc khi khởi tạo môi trường mới:

bash
govard bootstrap --clone -e staging --no-pii --no-noise --delete

Giải quyết tên Remote (Remote Name Resolution) ​

Govard chấp nhận bất kỳ định danh hợp lệ nào làm tên môi trường remote. Tên chỉ được chứa chữ cái viết thường, chữ số, dấu gạch ngang hoặc gạch dưới (ví dụ: qa, preprod, demo, client-uat, load-test).

Các cờ remote hỗ trợ:

  • Tìm kiếm chính xác theo key remote (ví dụ: qa, preprod).
  • Ánh xạ các tên viết tắt quen thuộc (ví dụ: stg → staging, live → production).
  • Fallback so khớp không phân biệt chữ hoa/thường.

Các tên viết tắt quen thuộc ​

Input đầu vàoSẽ giải quyết thành
dev, development, developdevelopment
staging, stage, stgstaging
prod, production, liveproduction
Các tên khác (qa, preprod, demo, v.v.)Giữ nguyên gốc

Độ ưu tiên tự động chọn (Auto-Select Priority) ​

Khi không khai báo remote cụ thể cho lệnh bootstrap hoặc sync, Govard sẽ tìm kiếm theo thứ tự:

  1. staging (hoặc các viết tắt: stg, stage)
  2. development (hoặc các viết tắt: dev, develop)

Nếu cả staging và development đều không tồn tại trong cấu hình, bạn phải sử dụng cờ -e để khai báo rõ ràng tên remote:

bash
govard sync -s qa --db
govard bootstrap -e preprod --yes

Các lệnh sau tương đương nhau nếu có tồn tại remote staging:

bash
govard sync -s stg --db
govard sync --source staging --db
govard sync --from staging --db

Ví dụ về cấu hình Remote tùy chỉnh ​

bash
# Thêm môi trường QA
govard remote add qa --host qa.example.com --user deploy --path /var/www/app

# Thêm môi trường pre-production
govard remote add preprod --host preprod.example.com --user deploy --path /var/www/app

# Khởi tạo từ môi trường QA (bắt buộc truyền cờ -e vì qa không thuộc diện tự động chọn)
govard bootstrap -e qa --yes

# Đồng bộ DB từ preprod
govard sync -s preprod --db --no-pii

Chính sách bảo mật cho Remote tùy chỉnh ​

Các tên remote tùy chỉnh không tự động được bảo vệ. Sử dụng cờ --protected hoặc thiết lập cấu hình protected: true để kích hoạt:

bash
govard remote add preprod --host preprod.example.com --user deploy --path /var/www/app --protected

Hoặc cấu hình trong .govard.yml:

yaml
remotes:
  preprod:
    host: preprod.example.com
    user: deploy
    path: /var/www/app
    protected: true

Chỉ các remote có tên chuẩn hóa thành prod (như prod, production, live) mới được tự động bảo vệ chống ghi đè.


Các trường Deploy trên Remote ​

Sync và deploy đọc hai path khác nhau từ cùng một block remote, và chúng không phải cùng một thư mục:

TrườngÝ nghĩa
pathdocroot đang được phục vụ — nơi web server trả lời request. Việc nó không tồn tại, là symlink hay là thư mục thật chính là thứ quyết định cách govard deploy publish một release.
deploy.deploy_pathlayout root chứa releases/, shared/ và .dep/. Nếu bỏ trống, nó được dò từ target và chỉ được chấp nhận khi đúng một ứng viên khớp.

Remote chỉ ghi đè hành vi deploy trong block deploy: lồng nhau — mỗi key đúng một cách viết, nên không thể xung đột:

yaml
remotes:
  staging:
    host: staging.example.com
    user: deploy
    path: /home/deploy/public_html       # docroot đang phục vụ (target này dùng symlink)
    deploy:
      deploy_path: /home/deploy/.deployer  # releases/, shared/, .dep/
      publish: symlink                   # auto | symlink | in_place
      branch: main
      settings:
        php_bin: php8.3
        php_version: "8.3"
        mage_mode: production
      verify:
        url: https://staging.example.com/

Bốn key topology nhận mặc định chung ở block deploy: của dự án, để giá trị dùng chung cho mọi remote chỉ viết một lần: repository, branch, publish và deploy_path.

yaml
deploy:
  repository: [email protected]:app/shop.git
  keep_releases: 5
remotes:
  staging:
    host: staging.example.com
    user: deploy
    path: /home/deploy/public_html
    deploy:
      branch: staging        # khác nhau theo môi trường, giữ ở từng remote

Thứ tự ưu tiên cho mỗi remote, trên thắng: override deploy.* của remote đó → mặc định deploy: của dự án → hành vi cũ (thiếu branch mà không kèm flag vẫn lỗi, deploy_path trống vẫn dò từ target).

Các dạng ghi flat ở remote (remotes.<tên>.branch, remotes.<tên>.repository, remotes.<tên>.publish, remotes.<tên>.deploy_path) đã bị xóa: trình đọc YAML bỏ qua key lạ trong lặng lẽ, nên loader từ chối chúng thật to thay vì deploy nhầm ref:

remotes.staging: "branch" was removed; move it under remotes.staging.deploy.branch

Giá trị path được giữ nguyên từng byte, kể cả dạng ~ — remote shell là nơi expand chúng, govard không bao giờ làm việc đó, nên đừng expand hay quote chúng đi.

govard deploy check <remote> báo cáo layout nó tìm thấy và chiến lược publish mà layout đó hàm ý, trước khi bất cứ thứ gì được tạo.

→ Hướng dẫn đầy đủ: Triển khai và Case study triển khai


Snapshot trên Remote (Remote Snapshots) ​

bash
govard snapshot create -e staging
govard snapshot list -e staging
govard snapshot restore latest -e staging
govard snapshot delete latest -e staging

Các snapshot remote chạy trực tiếp lệnh mysqldump và tar trên remote server mà không cần truyền tải dữ liệu qua mạng. Với remote có deploy layout (releases/, shared/ và link current), snapshot được lưu tại shared/.govard/snapshots/ dưới deploy path, ngoài release đang phục vụ. Remote không có layout đó giữ vị trí cũ .govard/snapshots/ dưới path của remote và snapshot create sẽ cảnh báo. list, restore, delete và pull đọc cả hai vị trí.

Truyền tải hai chiều (Bidirectional Transfer) ​

bash
# Tải snapshot từ staging về local
govard snapshot pull before-upgrade -e staging

# Đẩy snapshot local lên production (bị chặn mặc định bởi chính sách bảo mật)
govard snapshot push fallback-state -e prod

Quy trình làm việc Database Remote ​

Dump dữ liệu ​

bash
govard db dump                        # Dump DB local vào thư mục var/ của dự án
govard db dump -e staging             # Dump DB remote → lưu trên remote (~backup/)
govard db dump -e staging --local     # Dump DB remote → stream trực tiếp về lưu ở local var/
govard db dump --no-noise --no-pii    # Dump kèm bộ lọc bảo mật dữ liệu

Dump trên remote đi qua một file tạm trong /tmp của remote: bản dump thô chưa nén — toàn bộ database, kể cả PII — nằm ở đó trong lúc chờ nén để truyền đi, rồi được xoá bằng rm -f. Nếu kết nối SSH đứt giữa chừng, bước dọn dẹp không bao giờ chạy và file thô ở lại (phía remote không có trap — đây là giới hạn đã biết), nên hãy dump lại và tự xoá file thừa thay vì mặc định rằng nó đã mất.

Bản thân file dump chỉ thuộc về chủ sở hữu: file local được tạo với 0600 (file đã có mà rộng quyền hơn thì bị siết trước), còn file remote do db dump -e <remote> ghi được tạo dưới umask 077, nên một thư mục nó tạo, như ~/backup, là 0700.

Import dữ liệu ​

bash
govard db import --file backup.sql --drop
govard db import --stream-db -e staging --drop

Cờ --stream-db tải dữ liệu trực tiếp từ remote và import vào database local. Cờ --drop thực hiện reset sạch database trước khi import.

Truy vấn, Thông tin và Giám sát trực tiếp ​

bash
govard db query "SELECT COUNT(*) FROM sales_order"
govard db info -e staging
govard db top -e staging    # Giám sát các tiến trình đang chạy trên remote

Các thao tác Remote trên Desktop ​

Giao diện Desktop gọi trực tiếp các api backend tương ứng với CLI:

  • Mở Database (Remote) → Gọi lệnh govard open db -e <remote> --client
  • Mở terminal SSH (Remote) → Ưu tiên các terminal gốc của Linux, fallback về giao thức ssh://
  • Mở SFTP (Remote) → Ưu tiên ứng dụng FileZilla, fallback về giao thức sftp://

Đối với phương thức cấu hình auth.method: ssh-agent, ứng dụng Desktop tái sử dụng SSH_AUTH_SOCK và thăm dò socket tại /run/user/<uid>/keyring/ssh trên môi trường Linux.


Xem trước kế hoạch trước khi chạy thực tế:

bash
govard sync --source staging --destination local --full --plan

Chỉ đồng bộ một file cụ thể:

bash
govard sync --source prod --file --path app/etc/config.php

Tạo bản dump DB local an toàn từ remote:

bash
govard db dump -e staging --local --no-noise --no-pii

Khởi tạo dự án từ staging loại bỏ dữ liệu nhạy cảm:

bash
govard bootstrap --clone -e staging --no-pii --no-noise --yes

Tình huống: Bootstrap Magento hiệu quả

Giả sử bạn đang bootstrap một dự án Magento 2 lớn nhưng chỉ muốn code và một phần media:

bash
# Clone code, sync DB không PII, và sync media KHÔNG có ảnh sản phẩm nặng (mặc định: optimized)
govard bootstrap --clone -e staging --no-pii --no-noise --yes

Tình huống: Đồng bộ media có chọn lọc với exclude

Nếu bạn cần đồng bộ media nhưng muốn bỏ qua một thư mục lớn không nằm trong smart exclude mặc định:

bash
# Sync media từ staging nhưng bỏ qua thư mục large-assets
govard sync -s staging --media -X "large-assets/*"

Tình huống: Cần ảnh sản phẩm khi bootstrap

Nếu bạn thực sự cần ảnh sản phẩm cho công việc frontend:

bash
govard bootstrap --clone -e staging --media all --yes

Tình huống: "Cây chổi" vs "Cây nhíp"

Kết hợp smart mode có sẵn (cây chổi) với custom exclude (cây nhíp) để kiểm soát tối đa:

bash
# Lấy toàn bộ media nhưng bỏ qua thư mục backup cũ trên server
govard bootstrap --clone -e staging --media all -X "pub/media/backup_2022/*" --yes

Tình huống: Đồng bộ siêu nhanh (Minimal)

Nếu bạn chỉ làm frontend CSS/JS và không quan tâm ảnh:

bash
# Chỉ đồng bộ asset tĩnh (css, js, fonts, json)
govard sync -s staging --media minimal

Tham khảo Framework | SSL và Tên miền

Phát hành theo giấy phép MIT.