Frameworks
Govard tự động nhận diện các framework được hỗ trợ và áp dụng các cấu hình runtime mặc định cùng với các ghi đè phù hợp với từng phiên bản.
Bảng hỗ trợ (Support Matrix)
| Framework | Tự động nhận diện | Profile theo phiên bản | Web Root mặc định | Audit Lint (govard) | Deploy Recipe |
|---|---|---|---|---|---|
| Magento 2 | ✅ | ✅ | /pub | ✅ | ✅ |
| Mage-OS | ✅ | cấu hình mặc định | /pub | ✅ (qua Magento 2) | ✅ (qua Magento 2) |
| Magento 1 / OpenMage | ✅ | cấu hình mặc định | thư mục gốc dự án | — | — |
| Laravel | ✅ | ✅ | /public | ✅ | ✅ |
| Next.js | ✅ | cấu hình mặc định | thư mục gốc dự án | — | — |
| Emdash | ✅ | cấu hình mặc định | thư mục gốc dự án | — | — |
| Drupal | ✅ | ✅ | /web | — | — |
| Symfony | ✅ | ✅ | /public | ✅ | ✅ |
| Shopware | ✅ | cấu hình mặc định | /public | — | — |
| CakePHP | ✅ | cấu hình mặc định | /webroot | — | — |
| PrestaShop | ✅ | cấu hình mặc định | thư mục gốc dự án | — | — |
| WordPress | ✅ | ✅ | / | ✅ | ✅ |
| Django | ✅ | cấu hình mặc định | thư mục gốc dự án | — | — |
| Dagster | ✅ | cấu hình mặc định | thư mục gốc dự án | — | — |
| Tùy chỉnh (Custom) | thủ công | thủ công | thư mục gốc dự án | — | — |
Cột Linter:
Audit Lint (govard)cho biếtgovard audit run --checks lintcó được hỗ trợ không. ✅ = có providergovardgốc (Magento2: chuẩnMagento2CS, Laravel:PSR12, Symfony:Symfony, WordPress:WordPress); mọi lần lint còn bắt buộc media guard (pub/mediachứa*.php/*.phtml/*.pht→M2-LINT-MEDIAfailed, phamedia-guardtrong container kèm fallbackScanMediaGuardtrên host) và vệ sinh.gitignore(pub/media/*.phpv.v. quainternal/blueprints/files/.gitignore). Xem Audit — Lint & Profiler.Cột Deploy Recipe: ✅ nghĩa là framework tự đăng ký recipe, nên
govard deploylấp các bước trung tính của pipeline bằng đúng lệnh mà ứng dụng đó cần — mỗi mục framework bên dưới liệt kê cụ thể. Dấu—nghĩa là framework vẫn deploy được, nhưng qua recipe mặc định của engine: tạo release, shared files, quyền, kích hoạt, verify, rollback — những bước vốn không phụ thuộc framework. Các bước thuộc về ứng dụng (cài dependency, migration, cache) không được lấp, vì engine không tự đoán một lệnh mà ứng dụng chưa khai; dự án thuộc nhóm này gắndeploy.hooksvào task id tương ứng. Xem Triển khai cho toàn bộ pipeline và Deploy recipe cho bốn framework đã có recipe.
Cấu hình mặc định (Runtime Defaults)
| Framework | PHP | Node | Python | DB | Cache | Search | Queue |
|---|---|---|---|---|---|---|---|
| Magento 2 | 8.4 | 24 | — | mariadb 11.4 | valkey 8.0.0 | opensearch 2.19.0 | none |
| Mage-OS | 8.4 | 24 | — | mariadb 11.8 | redis 7.4 | opensearch 3.0 | none |
| Magento 1 / OpenMage | 8.1 | — | — | mariadb 10.11 | none | none | none |
| Laravel | 8.4 | — | — | mariadb 11.4 | none | none | none |
| Next.js | — | 24 | — | none | none | none | none |
| Emdash | — | 22 | — | none | none | none | none |
| Drupal | 8.4 | — | — | mariadb 11.4 | none | none | none |
| Symfony | 8.4 | — | — | mariadb 11.4 | none | none | none |
| Shopware | 8.4 | — | — | mariadb 11.4 | none | none | none |
| CakePHP | 8.4 | — | — | mariadb 11.4 | none | none | none |
| PrestaShop | 8.1 | — | — | mariadb 10.11 | none | none | none |
| WordPress | 8.3 | — | — | mariadb 11.4 | none | none | none |
| Django | — | — | 3.12 | postgres 16 | none | none | none |
| Dagster | — | — | 3.12 | postgres 16 | none | none | none |
| Tùy chỉnh (Custom) | 8.4 | — | — | mariadb 11.4 | none | none | none |
Ký hiệu — nghĩa là Govard không ép buộc giá trị mặc định cho thành phần stack đó.
Ghi đè theo phiên bản (Version-Aware Overrides)
| Framework | Phiên bản | Ghi đè PHP | Khác |
|---|---|---|---|
| Laravel | 10 | 8.1 | |
| Laravel | 11 | 8.3 | |
| Laravel | 12 | 8.4 | |
| Symfony | 6.0-6.3 | 8.1 | |
| Symfony | 6.4+ | 8.2 | |
| Symfony | 7.0-7.1 | 8.2 | |
| Symfony | 7.2+ | 8.3 | |
| Drupal | 10 | 8.3 | |
| Drupal | 11 | 8.4 | |
| WordPress | 6.0 | 8.0 | MariaDB 10.6 |
| WordPress | 6.3 | 8.1 | MariaDB 10.6 |
| WordPress | 6.4-6.5 | 8.2 | MariaDB 10.11 |
| WordPress | 6.6+ | 8.3 | MariaDB 10.11 |
| WordPress | 6 (bare) | 8.3 | MariaDB 10.11 — bare major resolves to latest minor (6.6+) |
| WordPress | 7 | 8.4 | MariaDB 11.4 |
| Magento 2 | 2.4.9+ | 8.4 | MariaDB 11.4, Redis 7.2, OpenSearch 3.0.0, RabbitMQ 4.1.0 |
| Magento 2 | 2.4.8 | 8.4 | MariaDB 11.4, Redis 7.2, OpenSearch 2.19.0 hoặc 3.0.0 |
| Magento 2 | 2.4.7 | 8.3 | MariaDB 10.6 hoặc 10.11, Redis 7.2, OpenSearch 2.12.0-2.19.0 |
| Magento 2 | 2.4.6 | 8.2 | MariaDB 10.6 hoặc 10.11, Redis 7.0-7.2, OpenSearch 2.5.0-2.19.0 |
Audit lint:
govard audit run --checks lint(providergovard) được hỗ trợ cho Magento 2, Laravel, Symfony và WordPress — 4 framework.audit lint supported for 4. Imagegovard-glintđóng gói sẵn các coding standard gốc (WPCS 3.1 cho WordPress, Symfony CS cho Symfony, PSR12 cho Laravel, Magento2 cho Magento) +phpstan/phpstan-symfony+phpstan/phpstan-wordpress, nên WordPress/Symfony chạy native mà không phải fallback về PSR12.
# Kiểm tra profile được áp dụng thực tế
govard config profile --json
govard config profile --framework laravel --framework-version 11 --json
# Matrix: ProjectPHPVersions [8.1-8.4], PHPStanLevel 5, Linters [phpcs,phpstan]🧱 Magento 2
Magento 2 là framework được hỗ trợ sâu sắc nhất trong Govard.
Các tính năng chính
govard config autotự động cấu hình DB, cache, search, Varnish và các URL cơ sở vàoapp/etc/env.php.govard tool magento [command]chạy Magento CLI (bin/magento) bên trong container PHP.govard tool magerun [command](Phím tắt:mr) chạyn98-magerun2bên trong container PHP.govard tool magento cron:installcài đặt các crontab bên trong container.- Hỗ trợ Selenium/MFTF tùy chọn (
mftf: truetrong cấu hình features). - Hỗ trợ đồng bộ frontend tích hợp tùy chọn (
frontend_sync: truetrong features). - Định tuyến riêng biệt
php-debugkhi bật Xdebug.
Quy trình thông thường
govard env up
govard config auto
govard tool magento cache:clean
govard test phpunit🏎️ Đồng bộ Frontend
Dự án Magento 2 và Mage-OS có thể bật đồng bộ frontend BrowserSync tích hợp của Govard:
stack:
features:
frontend_sync: truefrontend_sync mặc định là false và không hợp lệ với framework khác. Tùy chọn này bật việc phát hiện runtime frontend do dự án sở hữu. govard env up không khởi động hoặc cấp phát dịch vụ frontend development và luôn route domain dự án đến web hoặc Varnish; lifecycle frontend theo yêu cầu được quản lý riêng.
Dự án Hyva cần đúng một scripts.browser-sync dưới app/design/frontend/<Vendor>/<Theme>/web/tailwind; mọi package Tailwind được phát hiện cần package-lock.json đã commit. Dự án Luma cần Gruntfile.js, package.json và package-lock.json ở thư mục gốc (Magento mặc định ship các file này dạng .sample — copy đổi tên rồi chạy npm install để tạo lockfile); Gruntfile/LiveReload mặc định của Magento không cần sửa gì thêm. Một dự án không được thỏa mãn discovery của cả Hyva lẫn Luma cùng lúc; phải gỡ 1 trong 2 setup trước khi chạy frontend sync. Govard không tạo hoặc chỉnh sửa các file BrowserSync, Magento hay theme trong dự án.
Luma không cần config BrowserSync riêng của project, nhưng browser-sync.config.js của Hyva (do theme sở hữu, không phải Govard) phải đọc đúng biến môi trường Govard truyền vào và dùng đúng các setting sau để hoạt động chính xác như 1 reverse proxy đứng trước app thật:
module.exports = {
proxy: {
target: process.env.GOVARD_FRONTEND_SYNC_TARGET, // Govard set biến này trỏ tới container app
proxyOptions: { changeOrigin: false }, // giữ nguyên Host header gốc
cookies: { stripDomain: false }, // giữ nguyên domain cookie session của Magento
},
port: Number.parseInt(process.env.GOVARD_FRONTEND_SYNC_PORT || '3000', 10),
open: false, // container không có display
socket: {
domain: "//'+location.host+'", // resolve động lúc request qua Caddy
path: '/browser-sync/socket.io', // phải khớp route /browser-sync/*
},
};changeOrigin: false và cookies.stripDomain: false là 2 setting quan trọng nhất: nếu sai 1 trong 2, BrowserSync sẽ gửi cho Magento 1 Host header hoặc phạm vi cookie không khớp domain đang browse — có thể kích hoạt redirect base-URL của chính Magento hoặc làm hỏng session cookie, dù frontend start vẫn báo thành công bình thường. open: false để tránh BrowserSync cố mở trình duyệt bên trong container Node không có display. socket.path phải giữ nguyên /browser-sync/socket.io vì đó là path duy nhất route Caddy của Govard proxy tới container BrowserSync.
Chuyển đổi theme Hyva đang active
Vì discovery yêu cầu đúng 1 chủ sở hữu scripts.browser-sync, project có nhiều theme Hyva chỉ có thể chạy frontend sync cho 1 theme tại 1 thời điểm. Để chuyển: xóa (hoặc đổi tên) key scripts.browser-sync trong web/tailwind/package.json của theme đang active, thêm đúng script đó (kèm browser-sync.config.js, các script trong package.json, và package-lock.json riêng) vào theme muốn chuyển sang, rồi chạy lại govard frontend start — Govard tự phát hiện lại theme nào hiện là chủ sở hữu duy nhất.
Theme chỉ kế thừa 1 theme Hyva khác qua <parent> trong theme.xml (và không override web/tailwind riêng) sẽ dùng chung CSS đã biên dịch của theme cha, không cần setup BrowserSync riêng — frontend sync của theme cha đã phủ sẵn theme con này qua cơ chế fallback file tĩnh của Magento.
Theme không phải Hyva (dựa trên Luma, không phụ thuộc Hyva_Theme) không thể chạy qua đường Hyva ở trên — cần điều kiện tiên quyết của Luma (Gruntfile.js/package.json/package-lock.json ở root) thay vào đó, và discovery Hyva/Luma vẫn loại trừ lẫn nhau trên toàn project: chỉ 1 trong 2 setup được hợp lệ tại 1 thời điểm.
Sau govard env up, dùng govard frontend start; dùng govard frontend logs [service] -f cho BrowserSync, LiveReload, HTML injector hoặc watcher đã phát hiện (các service tên là sync, watch-<theme>, inject — container ra tên <project>-frontend-sync-1, v.v.), và govard frontend stop để chỉ xóa dịch vụ frontend nhưng giữ lại dependency volume. Khi runtime hoạt động, Caddy route request Hyva /browser-sync/* và Luma /livereload/* đến đúng cổng (3000 và 35729) để phục vụ client asset và socket; cả hai chế độ đồng thời chuyển mọi traffic ứng dụng khác qua injector riêng của mình — injector chỉ buffer response HTML để chèn script client (của BrowserSync hoặc LiveReload chuẩn) trước </body>, còn body không phải HTML được giữ nguyên. Khi dừng, Govard khôi phục route ứng dụng thông thường trước khi xóa container frontend.
Pipeline Nâng cấp Tự động (Native Upgrade Pipeline)
# Thử nghiệm nâng cấp trong một profile độc lập
cp .govard.yml .govard.upgrade-test.yml
GOVARD_ENV=upgrade-test govard upgrade --version 2.4.8-p4 --dry-run
GOVARD_ENV=upgrade-test govard upgrade --version 2.4.8-p4Những gì lệnh govard upgrade thực hiện cho Magento 2:
- Xác định chính xác phiên bản PHP/MariaDB/Search tương ứng cho phiên bản Magento đích.
- Tự động gộp Composer (Composer merge) thông minh (giữ nguyên các module và custom repo của bạn).
- Tự động nới lỏng các ràng buộc phiên bản cho các công cụ dev (
phpunit,phpmd). - Xử lý các lệnh
composer update,setup:upgrade, và compile static content.
Setup Multi-Website / Multi-Store
framework: "magento2"
domain: "primary.test"
store_domains:
store-a.test:
code: base
type: website
store-b.test:
code: store_b
type: storegovard domain add store-a.test
govard domain add store-b.test
govard config auto
govard tool magento cache:flushNhững gì Govard tự động xử lý:
- Định tuyến tất cả các domain qua proxy dùng chung với giao thức HTTPS.
- Cấu hình base URL toàn cục từ
domain. - Chạy lệnh
bin/magento config:setphù hợp cho từng store view trong cấu hìnhstore_domains. - Inject biến host
MAGE_RUN_CODE/MAGE_RUN_TYPE(dưới dạng object vớityperõ ràng) tự động vào nginx/Apache.
Những gì bạn vẫn cần làm:
- Tạo các website, store và store view tương ứng trong admin panel của Magento.
- Xóa cache/config sau khi thay đổi ánh xạ store.
🌱 Mage-OS
Mage-OS là bản fork cộng đồng, có thể thay thế trực tiếp cho Magento 2 Open Source. Govard nhận diện Mage-OS qua mage-os/product-community-edition hoặc mage-os/project-community-edition trong composer.json, và tái sử dụng Docker image, template nginx cùng compose stack Varnish của Magento 2 — mọi công cụ Magento 2 ở trên (govard tool magento, govard tool magerun, govard config auto, định tuyến multi-site) đều áp dụng không thay đổi.
Cấu hình runtime mặc định: PHP 8.4.
Cài đặt mới & Pipeline Nâng cấp Tự động
govard bootstrap --framework mageos --fresh
govard upgrade --version 1.3.1govard bootstrap/govard upgrade sử dụng mage-os/project-community-edition và repository công khai của Mage-OS (https://repo.mage-os.org) thay vì repository riêng tư của Magento.
🛒 Magento 1 / OpenMage
govard tool magerun [command]Cấu hình runtime mặc định: PHP 8.1 + MariaDB 10.11. Không bắt buộc sử dụng các dịch vụ cache/search/queue.
Pipeline Nâng cấp Tự động
govard upgrade --version <version>Xử lý: Đồng bộ Composer, xóa cache (var/cache, var/session, v.v.), bảo trì compiler, và thực thi nâng cấp database qua n98-magerun.
Multi-Store với Định tuyến tường minh (Typed Routing)
framework: "magento1"
domain: "primary.test"
store_domains:
store-a.test:
code: base
type: website
store-b.test:
code: store_b
type: store
store-c.test: store_c # dạng scalar = hành vi cũ (thử cho cả code website + store)Dạng Object với trường type cụ thể giúp Govard tự động inject cấu hình biến host MAGE_RUN_CODE / MAGE_RUN_TYPE vào nginx/Apache — không cần cấu hình thủ công các luật SetEnvIf trong .htaccess.
🎨 Laravel
govard tool artisan [command]Mặc định: thư mục web root /public, MariaDB 11.4, PHP tương ứng theo phiên bản.
Pipeline Nâng cấp Tự động
govard upgrade --version 12- Cập nhật ràng buộc framework trong
composer.json. - Chạy lệnh
composer update. - Chạy lệnh
php artisan migrate --force.
Triển khai (Deployment)
Laravel có deploy recipe tên laravel, nên govard deploy chạy đúng lệnh của Laravel thay vì các bước mặc định trung tính của engine:
govard deploy check production # xem target ngụ ý gì, trước khi chạy bất cứ thứ gì
govard deploy production --yes| Bước | Lệnh chạy trên target |
|---|---|
build:vendors | composer install --no-dev --optimize-autoloader --no-interaction --prefer-dist |
build:frontend | frontend_command trong từng frontend_dir; frontend_dir rỗng thì bỏ qua bước |
app:configure | artisan storage:link |
db:migrate | artisan migrate --force |
maintenance:enable / disable | artisan down / artisan up, chạy trong release đang được phục vụ |
app:workers:pause | khi bật worker_control: artisan queue:restart, thêm horizon:terminate nếu dự án có Horizon |
app:cache:flush | artisan optimize:clear rồi artisan optimize |
deploy:verify (app) | artisan db:show; Laravel 10 trở xuống dùng migrate:status |
db:backup | — (không có lệnh dump: bật --db-backup sẽ fail kèm lý do) |
.env là file shared và storage là thư mục shared, vì cờ maintenance nằm tại storage/framework/down — chỉ thư mục shared mới mang được nó qua lần swap release. sync_paths gồm vendor và public/build cho docroot in-place. Recipe khai bốn setting (frontend_dir, frontend_command, worker_control, runtime_reload_command) và yêu cầu sandbox cài default-mysql-client, bộ extension của Laravel (bcmath, curl, gd, intl, mbstring, mysql, sqlite3, xml, zip) cùng hai service mariadb + redis-server.
Cache được build trên target, không bao giờ trên máy build: artisan optimize ghi ra bootstrap/cache/config.php, và khi file đó tồn tại thì biến môi trường của tiến trình không còn ghi đè .env nữa — cache build ở máy khác sẽ mang cấu hình của máy đó lên production.
Danh sách lệnh đầy đủ và lý do: Laravel, Symfony và WordPress. Cấu hình mẫu: Ca 9 — Laravel, frontend Vite, webroot symlink.
🌐 Drupal
govard tool drush [command]Mặc định: thư mục web root /web, MariaDB 11.4, PHP tương ứng theo phiên bản.
⚡ Symfony
govard tool symfony [command]Mặc định: thư mục web root /public, MariaDB 11.4, PHP tương ứng theo phiên bản.
Pipeline Nâng cấp Tự động
govard upgrade --version 7- Cập nhật các ràng buộc của gói
symfony/framework-bundle. - Chạy lệnh
composer update. - Chạy lệnh
doctrine:migrations:migrate. - Chạy lệnh
cache:clear.
Triển khai (Deployment)
Symfony có deploy recipe tên symfony. Recipe này tồn tại chủ yếu để vô hiệuauto-scripts của Composer — thứ chạy cache:clear và assets:install sai chỗ:
govard deploy check production
govard deploy production --yes| Bước | Lệnh chạy trên target |
|---|---|
build:vendors | composer install --no-dev --optimize-autoloader --no-interaction --prefer-dist --no-scripts |
build:assets | bin/console assets:install public --symlink --relative — đánh dấu cần ứng dụng, nên target vẫn chạy cả ở artifact mode |
build:frontend | frontend_command trong từng frontend_dir; frontend_dir rỗng thì bỏ qua bước |
db:migrate | doctrine:migrations:migrate --env=… --no-interaction --allow-no-migration |
app:cache:flush | cache:clear --env=… --no-warmup rồi cache:warmup --env=… |
app:workers:pause | khi bật worker_control: messenger:stop-workers --env=… |
maintenance:enable / disable | rỗng — Symfony không có cơ chế lõi, nên cả hai bước được báo là skipped |
deploy:verify (app) | dbal:run-sql "SELECT 1"; DoctrineBundle cũ dùng doctrine:query:sql |
db:backup | — (không có lệnh dump: bật --db-backup sẽ fail kèm lý do) |
Mọi lệnh bin/console ở trên lấy --env từ setting symfony_env:
bin/console doctrine:migrations:migrate --env={{settings.symfony_env}} --no-interaction --allow-no-migration
bin/console cache:clear --env={{settings.symfony_env}} --no-warmup
bin/console messenger:stop-workers --env={{settings.symfony_env}}.env.local là file shared và var/log là thư mục shared; var/cachecố ý không shared, vì container đã compile thuộc về đúng một release và một environment. sync_paths gồm vendor và public/bundles cho docroot in-place. symfony_env (mặc định prod) quyết định environment mà mọi lệnh console chạy dưới đó, và không được validate — gõ sai tên sẽ build sai thư mục cache. Sandbox nhận default-mysql-client, bộ extension (intl, mysql, mbstring, xml, curl, zip) cùng hai service mariadb + redis-server.
Vì hai bước maintenance rỗng, db:migrate chạy trên site đang sống; dự án cần khoảng downtime thì tự thêm bằng hai deploy.hooks gắn vào maintenance:enable / maintenance:disable.
Danh sách lệnh đầy đủ và lý do: Laravel, Symfony và WordPress. Cấu hình mẫu: Ca 10 — Symfony, migration Doctrine, target PostgreSQL.
🛍️ Shopware
govard tool shopware [command]Mặc định: thư mục web root /public, MariaDB 11.4, PHP 8.4.
🍰 CakePHP
govard tool cake [command]Mặc định: thư mục web root /webroot, MariaDB 11.4.
🏪 PrestaShop
govard tool prestashop [command]Mặc định: thư mục web root là thư mục gốc dự án, MariaDB 10.11, PHP 8.1. Govard tự động nhận diện các dự án PrestaShop và hỗ trợ clone/cấu hình cho các bản cài đặt sẵn có; hiện chưa có luồng cài đặt mới (fresh-install) hay pipeline nâng cấp tự động (native upgrade pipeline) cho PrestaShop.
📰 WordPress
govard tool wp [command]Mặc định: thư mục web root /, MariaDB 11.4, PHP 8.3.
Cài đặt mới (Fresh Bootstrap)
WordPress fresh bootstrap tải mã nguồn gốc trực tiếp từ wordpress.org và cài đặt qua các script khởi tạo PHP — không yêu cầu công cụ wp-cli trong luồng cài đặt ban đầu.
govard bootstrap --framework wordpress --freshPipeline Nâng cấp Tự động
govard upgrade --version 6.7- Chạy
wp core update --version=<version> - Chạy
wp core update-db - Chạy
wp cache flush
Triển khai (Deployment)
WordPress có deploy recipe tên wordpress, chỉ cho layout classic: file core và wp-content/ nằm ở thư mục gốc repository, không có composer.json. Layout Bedrock (core trong vendor/, docroot web/) và checkout chỉ có content đều không được hỗ trợ.
govard deploy check production
govard deploy production --yes| Bước | Lệnh chạy trên target |
|---|---|
build:vendors | composer install … chỉ khi có composer.json (bước có guard, không phải || true) |
build:frontend | frontend_command trong từng frontend_dir; frontend_dir rỗng thì bỏ qua bước |
db:migrate | wp core update-db, hoặc wp_upgrade() qua wp-load.php khi target không có wp-cli |
app:cache:flush | wp cache flush + wp rewrite flush --hard, hoặc wp_cache_flush() + flush_rewrite_rules(true) |
maintenance:enable / disable | ghi/xoá .maintenance và file wp-content/maintenance.php có marker, trong path đang phục vụ |
db:backup / restore | wp db export / wp db import — ngoài Magento, đây là recipe duy nhất có lệnh dump |
deploy:verify (app) | wp core is-installed, hoặc is_blog_installed() khi không có wp-cli |
Ba bước là hybrid: chạy wp khi target có wp-cli, và bootstrap PHP qua wp-load.php khi không. wp-cli là thứ server thật có, nhưng govard không thể cài nó lên target, và deploy không được fail vì lý do không liên quan tới release.
wp-config.php là file shared và wp-content/uploads là thư mục shared; wp-content/cache, upgrade và languages được ghi. sync_paths là vendor, chỉ có ý nghĩa với dự án quản lý plugin/theme bằng Composer. Sandbox nhận default-mysql-client, bộ extension (mysqli, curl, gd, intl, mbstring, xml, zip), hai service mariadb + redis-server và tool wp-cli.
Hai điều cần biết trước lần deploy đầu: phải seed shared/wp-config.php, vì deploy:shared chỉ link một entry shared khi nó đã tồn tại — shared/ rỗng sẽ để release đầu tiên giữ wp-config.php của repository, tức file trỏ vào database development. Và cờ maintenance được ghi bằng time() + 86400 thay vì time() của chính WordPress, vì wp_is_maintenance_mode() coi cờ cũ hơn mười phút là hết hạn: một cửa sổ deploy dài hơn thế sẽ âm thầm mở lại site giữa lúc migration.
Danh sách lệnh đầy đủ và lý do: Laravel, Symfony và WordPress. Cấu hình mẫu: Ca 11 — WordPress, layout classic, wp-cli trên target.
⚡ Next.js
govard shell # mở container web tại thư mục /app
govard tool npm [command]
govard tool npx [command]Mặc định: Node 24, không ép buộc cấu hình database. Khởi chạy web tại thư mục gốc của dự án. govard tool npm và govard tool npx dùng standalone Node image đã cấu hình; govard shell vẫn mở application web container.
🔵 Emdash
Cấu hình local runtime ưu tiên Node: Node 22, không quản lý các dịch vụ PHP/DB/cache/search/queue.
govard shell # container web tại thư mục /app
govard tool pnpm [command]
govard open admin # mở trang /_emdash/adminKhởi tạo mới hoàn toàn:
govard bootstrap --framework emdash --fresh
govard env upTự động nhận diện Package Manager: Govard đọc các thông tin từ package.json (trường packageManager), pnpm-workspace.yaml và các file lock.
Phạm vi hiện tại là chạy Node + SQLite local + upload local. Govard chưa tự động hóa các luồng Cloudflare D1/R2.
🐍 Django
Cấu hình local runtime ưu tiên Python: Python 3.12 (có thể cấu hình qua stack.python_version), PostgreSQL 16, không quản lý các dịch vụ PHP/cache/search/queue.
govard shell # container web tại thư mục /app
govard tool manage [command] # chạy python manage.py [command]
govard db connect # kết nối psql vào database postgresCài đặt mới (khởi tạo một dự án hoàn toàn mới):
mkdir myproject && cd myproject
govard init --framework django
govard bootstrap --fresh --framework django --framework-version 5.1Cài đặt mới (clone một dự án có sẵn, sau đó bootstrap):
git clone <your-django-repo> myproject && cd myproject
govard init --framework django
govard env up
govard bootstrap --framework djangoNhận diện: bất kỳ dự án nào có file manage.py ở thư mục gốc.
Phạm vi hiện tại chỉ hỗ trợ
requirements.txt+pip(chưa hỗ trợ Poetry/pyproject.toml), chỉ hỗ trợ PostgreSQL (chưa có tùy chọn SQLite/MySQL), và dùngmanage.py runservercho local dev (chưa hỗ trợ Gunicorn). Cả hai luồng đều tự động chạypip install+manage.py migrate.--freshkhởi tạo dự án quadjango-admin startproject config ., cấu hìnhsettings.pyđể dùng container Postgres mà Govard đã cung cấp sẵn, và cấu hìnhALLOWED_HOSTS/CSRF_TRUSTED_ORIGINStheo domain của dự án.
⚙️ Dagster
Cấu hình local runtime ưu tiên Python: Python 3.12 (có thể cấu hình qua stack.python_version), PostgreSQL 16, không quản lý các dịch vụ PHP/cache/search/queue.
govard shell # container web tại thư mục /app
govard tool dagster [command] # chạy Dagster CLI [command]
govard db connect # kết nối psql vào database postgresCài đặt mới (khởi tạo một dự án hoàn toàn mới):
mkdir myproject && cd myproject
govard init --framework dagster
govard bootstrap --fresh --framework dagsterCài đặt mới (clone một dự án có sẵn, sau đó bootstrap):
git clone <your-dagster-repo> myproject && cd myproject
govard init --framework dagster
govard env up
govard bootstrap --framework dagsterNhận diện: bất kỳ dự án nào có file workspace.yaml hoặc dagster.yaml ở thư mục gốc.
Phạm vi hiện tại chỉ hỗ trợ
requirements.txt+pip(chưa hỗ trợ Poetry/pyproject.toml) và chỉ hỗ trợ PostgreSQL, thông quadagster-postgres. Cả hai luồng đều tự động chạypip install.--freshkhởi tạo dự án quadagster project scaffoldvà ghi filedagster.yaml(cấu hình storage Postgres trỏ vào container mà Govard đã cung cấp sẵn) cùng vớiworkspace.yamltrỏ vào module vừa khởi tạo. Blueprint compose cũng mount và tin cậy (trust) sẵn Root CA nội bộ của Govard trong container, nên các lời gọi HTTPS ra ngoài tới các dự án Govard khác qualinked_projectssẽ xác thực đúng cách.
🔧 Custom Stack
govard init --framework customTrình chọn tương tác cho các thành phần:
- Web server (
nginx,apache,hybrid) - Engine database và phiên bản tương ứng
- Dịch vụ cache
- Công cụ tìm kiếm
- Dịch vụ queue (hàng đợi)
- Tùy chọn Varnish
Đóng góp một Framework mới
Muốn thêm một framework chưa có trong danh sách này? Xem Thêm Framework mới để biết cấu trúc registry nội bộ và hướng dẫn từng file.