feat(deploy): production deployment setup and fixes
- Debian-based api image (bookworm-slim), docker/debian mirrors, prisma binaryTargets for openssl 3.0 - nginx: admin SPA under /admin, TLS via acme.sh (ZeroSSL) + auto-renewal cron, http->https redirect - prisma: add origin_goods.delisted migration, sync missing schema (good_image/tag_font_color/good_tags), fix users.createdAt Timestamptz - api: CORS wildcard reflection, helmet CORP cross-origin, price backfill in persistProductDetail, categoryIcon ancestor fallback, mediaByColor per-color gallery in public goods detail - admin: /admin base path (vite + router) - import-data.mjs: udt_name casting, serial sequence advance fix
This commit is contained in:
@@ -1,101 +1,101 @@
|
||||
# Site Config
|
||||
|
||||
Foundation module providing shared configuration for all SEO modules.
|
||||
|
||||
## Configuration
|
||||
|
||||
```ts
|
||||
// nuxt.config.ts
|
||||
export default defineNuxtConfig({
|
||||
site: {
|
||||
url: 'https://example.com', // Required for absolute URLs
|
||||
name: 'My Site', // Site name (used in titles, schema)
|
||||
description: 'Site description', // Default meta description
|
||||
defaultLocale: 'en', // Default language
|
||||
indexable: true, // Allow search engine indexing
|
||||
trailingSlash: false, // URL trailing slash preference
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
## Environment-Based Indexing
|
||||
|
||||
Control indexing per environment using `NUXT_SITE_*` env vars:
|
||||
|
||||
```bash
|
||||
# .env.production
|
||||
NUXT_SITE_URL=https://example.com
|
||||
NUXT_SITE_ENV=production
|
||||
|
||||
# .env.staging
|
||||
NUXT_SITE_URL=https://staging.example.com
|
||||
NUXT_SITE_ENV=staging
|
||||
```
|
||||
|
||||
The module auto-detects `env` and sets `indexable: false` for non-production environments.
|
||||
|
||||
For explicit control:
|
||||
|
||||
```ts
|
||||
export default defineNuxtConfig({
|
||||
site: {
|
||||
url: process.env.NUXT_SITE_URL,
|
||||
// Explicit: only index when explicitly set to 'true'
|
||||
indexable: process.env.NUXT_SITE_INDEXABLE === 'true'
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
**Note:** `!== 'false'` defaults to `true` when env var is undefined - use `=== 'true'` for fail-safe behavior.
|
||||
|
||||
## Runtime Access
|
||||
|
||||
```ts
|
||||
const site = useSiteConfig()
|
||||
console.log(site.url, site.name, site.description)
|
||||
```
|
||||
|
||||
Works in components, composables, and server routes.
|
||||
|
||||
## i18n Integration
|
||||
|
||||
Automatically integrates with `@nuxtjs/i18n`:
|
||||
|
||||
```ts
|
||||
export default defineNuxtConfig({
|
||||
site: {
|
||||
url: 'https://example.com',
|
||||
defaultLocale: 'en',
|
||||
},
|
||||
i18n: {
|
||||
locales: [
|
||||
{ code: 'en', language: 'en-US' },
|
||||
{ code: 'fr', language: 'fr-FR' },
|
||||
]
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
Locale-specific overrides in `site` object:
|
||||
|
||||
```ts
|
||||
site: {
|
||||
name: 'My Site',
|
||||
locales: {
|
||||
fr: { name: 'Mon Site' }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Override Per-Page
|
||||
|
||||
Use route rules for page-specific config:
|
||||
|
||||
```ts
|
||||
export default defineNuxtConfig({
|
||||
routeRules: {
|
||||
'/admin/**': { site: { indexable: false } },
|
||||
'/fr/**': { site: { name: 'Mon Site', defaultLocale: 'fr' } }
|
||||
}
|
||||
})
|
||||
```
|
||||
# Site Config
|
||||
|
||||
Foundation module providing shared configuration for all SEO modules.
|
||||
|
||||
## Configuration
|
||||
|
||||
```ts
|
||||
// nuxt.config.ts
|
||||
export default defineNuxtConfig({
|
||||
site: {
|
||||
url: 'https://example.com', // Required for absolute URLs
|
||||
name: 'My Site', // Site name (used in titles, schema)
|
||||
description: 'Site description', // Default meta description
|
||||
defaultLocale: 'en', // Default language
|
||||
indexable: true, // Allow search engine indexing
|
||||
trailingSlash: false, // URL trailing slash preference
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
## Environment-Based Indexing
|
||||
|
||||
Control indexing per environment using `NUXT_SITE_*` env vars:
|
||||
|
||||
```bash
|
||||
# .env.production
|
||||
NUXT_SITE_URL=https://example.com
|
||||
NUXT_SITE_ENV=production
|
||||
|
||||
# .env.staging
|
||||
NUXT_SITE_URL=https://staging.example.com
|
||||
NUXT_SITE_ENV=staging
|
||||
```
|
||||
|
||||
The module auto-detects `env` and sets `indexable: false` for non-production environments.
|
||||
|
||||
For explicit control:
|
||||
|
||||
```ts
|
||||
export default defineNuxtConfig({
|
||||
site: {
|
||||
url: process.env.NUXT_SITE_URL,
|
||||
// Explicit: only index when explicitly set to 'true'
|
||||
indexable: process.env.NUXT_SITE_INDEXABLE === 'true'
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
**Note:** `!== 'false'` defaults to `true` when env var is undefined - use `=== 'true'` for fail-safe behavior.
|
||||
|
||||
## Runtime Access
|
||||
|
||||
```ts
|
||||
const site = useSiteConfig()
|
||||
console.log(site.url, site.name, site.description)
|
||||
```
|
||||
|
||||
Works in components, composables, and server routes.
|
||||
|
||||
## i18n Integration
|
||||
|
||||
Automatically integrates with `@nuxtjs/i18n`:
|
||||
|
||||
```ts
|
||||
export default defineNuxtConfig({
|
||||
site: {
|
||||
url: 'https://example.com',
|
||||
defaultLocale: 'en',
|
||||
},
|
||||
i18n: {
|
||||
locales: [
|
||||
{ code: 'en', language: 'en-US' },
|
||||
{ code: 'fr', language: 'fr-FR' },
|
||||
]
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
Locale-specific overrides in `site` object:
|
||||
|
||||
```ts
|
||||
site: {
|
||||
name: 'My Site',
|
||||
locales: {
|
||||
fr: { name: 'Mon Site' }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Override Per-Page
|
||||
|
||||
Use route rules for page-specific config:
|
||||
|
||||
```ts
|
||||
export default defineNuxtConfig({
|
||||
routeRules: {
|
||||
'/admin/**': { site: { indexable: false } },
|
||||
'/fr/**': { site: { name: 'Mon Site', defaultLocale: 'fr' } }
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user