83 lines
2.3 KiB
Markdown
83 lines
2.3 KiB
Markdown
---
|
|
description: How to manage and deploy Directus CMS infrastructure changes.
|
|
---
|
|
|
|
# Directus CMS Infrastructure Workflow
|
|
|
|
This workflow ensures "Industrial Grade" consistency and stability across local, testing, and production environments for the `at-mintel` Directus CMS.
|
|
|
|
## 1. Local Development Lifecycle
|
|
|
|
### Starting the CMS
|
|
To start the local Directus instance with extensions:
|
|
```bash
|
|
cd packages/cms-infra
|
|
npm run up
|
|
```
|
|
|
|
### Modifying Schema
|
|
1. **Directus UI**: Make your changes directly in the local Directus Admin UI (Collections, Fields, Relations).
|
|
2. **Take Snapshot**:
|
|
```bash
|
|
cd packages/cms-infra
|
|
npm run snapshot:local
|
|
```
|
|
This updates `packages/cms-infra/schema/snapshot.yaml`.
|
|
3. **Commit**: Commit the updated `snapshot.yaml`.
|
|
|
|
## 2. Deploying Schema Changes
|
|
|
|
### To Local Environment (Reconciliation)
|
|
If you pull changes from Git and need to apply them to your local database:
|
|
```bash
|
|
cd packages/cms-infra
|
|
npm run schema:apply:local
|
|
```
|
|
> [!IMPORTANT]
|
|
> This command automatically runs `scripts/cms-reconcile.sh` to prevent "Field already exists" errors by registering database columns in Directus metadata first.
|
|
|
|
### To Production (Infra)
|
|
To deploy the local snapshot to the production server:
|
|
```bash
|
|
cd packages/cms-infra
|
|
npm run schema:apply:infra
|
|
```
|
|
This script:
|
|
1. Syncs built extensions via rsync.
|
|
2. Injects the `snapshot.yaml` into the remote container.
|
|
3. Runs `directus schema apply`.
|
|
4. Restarts Directus to clear the schema cache.
|
|
|
|
## 3. Data Synchronization
|
|
|
|
### Pulling from Production
|
|
To update your local environment with production data and assets:
|
|
```bash
|
|
cd packages/cms-infra
|
|
npm run sync:pull
|
|
```
|
|
|
|
### Pushing to Production
|
|
> [!CAUTION]
|
|
> This will overwrite production data. Use with extreme care.
|
|
```bash
|
|
cd packages/cms-infra
|
|
npm run sync:push
|
|
```
|
|
|
|
## 4. Extension Management
|
|
When modifying extensions in `packages/*-manager`:
|
|
1. Extensions are automatically built and synced when running `npm run up`.
|
|
2. To sync manually without restarting the stack:
|
|
```bash
|
|
cd packages/cms-infra
|
|
npm run build:extensions
|
|
```
|
|
|
|
## 5. Troubleshooting "Field already exists"
|
|
If `schema:apply` fails with "Field already exists", run:
|
|
```bash
|
|
./scripts/cms-reconcile.sh
|
|
```
|
|
This script ensures the database state matches Directus's internal field registry (`directus_fields`).
|