Обновление конфигурации Astro: замена адаптера Vercel на Node с режимом "standalone" и добавление параметров сервера. Удаление зависимости от пакета @astrojs/vercel из package.json.
This commit is contained in:
59
.dockerignore
Normal file
59
.dockerignore
Normal file
@ -0,0 +1,59 @@
|
||||
# Зависимости
|
||||
node_modules
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# Сборка
|
||||
dist
|
||||
.output
|
||||
.vercel
|
||||
|
||||
# Environment files
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
# IDE
|
||||
.vscode
|
||||
.idea
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Git
|
||||
.git
|
||||
.gitignore
|
||||
|
||||
# Docker
|
||||
Dockerfile
|
||||
.dockerignore
|
||||
docker-compose.yml
|
||||
stack.env
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# Temporary folders
|
||||
tmp
|
||||
temp
|
||||
|
||||
# Astro
|
||||
.astro
|
99
DOCKER_DEPLOY.md
Normal file
99
DOCKER_DEPLOY.md
Normal file
@ -0,0 +1,99 @@
|
||||
# Docker Деплой для OOODMDK
|
||||
|
||||
## Описание
|
||||
|
||||
Этот проект настроен для деплоя на VPS с использованием Docker Compose. Приложение использует Astro с Node.js адаптером вместо Vercel.
|
||||
|
||||
## Файлы конфигурации
|
||||
|
||||
- `Dockerfile` - конфигурация Docker образа
|
||||
- `docker-compose.yml` - оркестрация контейнеров
|
||||
- `stack.env` - переменные окружения
|
||||
- `.dockerignore` - исключения для Docker сборки
|
||||
|
||||
## Настройка
|
||||
|
||||
### 1. Переменные окружения
|
||||
|
||||
Отредактируйте файл `stack.env`:
|
||||
|
||||
```bash
|
||||
# Замените на ваш домен
|
||||
PUBLIC_SITE_URL=https://yourdomain.com
|
||||
|
||||
# Настройки порта (если нужно)
|
||||
APP_PORT=4321
|
||||
|
||||
# Sanity токен (если используете приватные данные)
|
||||
SANITY_TOKEN=your_sanity_token_here
|
||||
```
|
||||
|
||||
### 2. Сборка и запуск
|
||||
|
||||
```bash
|
||||
# Сборка образа
|
||||
docker-compose build
|
||||
|
||||
# Запуск в фоновом режиме
|
||||
docker-compose up -d
|
||||
|
||||
# Просмотр логов
|
||||
docker-compose logs -f
|
||||
|
||||
# Остановка
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
### 3. Обновление
|
||||
|
||||
```bash
|
||||
# Остановка контейнеров
|
||||
docker-compose down
|
||||
|
||||
# Пересборка с обновлениями
|
||||
docker-compose build --no-cache
|
||||
|
||||
# Запуск обновленной версии
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## Мониторинг
|
||||
|
||||
Приложение включает health check, который проверяет доступность на порту 4321 каждые 30 секунд.
|
||||
|
||||
```bash
|
||||
# Проверка статуса контейнеров
|
||||
docker-compose ps
|
||||
|
||||
# Проверка health check
|
||||
docker inspect ooodmdk-app | grep Health -A 10
|
||||
```
|
||||
|
||||
## Порты
|
||||
|
||||
- **4321** - основное приложение Astro
|
||||
|
||||
## Безопасность
|
||||
|
||||
- Приложение запускается под непривилегированным пользователем
|
||||
- Используется многоэтапная сборка для минимизации размера образа
|
||||
- Переменные окружения изолированы в `stack.env`
|
||||
|
||||
## Nginx (настройте самостоятельно)
|
||||
|
||||
Пример базовой конфигурации для Nginx:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name yourdomain.com;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:4321;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
}
|
||||
```
|
53
Dockerfile
Normal file
53
Dockerfile
Normal file
@ -0,0 +1,53 @@
|
||||
# Многоэтапная сборка для оптимизации размера образа
|
||||
FROM node:20-alpine AS base
|
||||
|
||||
# Установка pnpm глобально
|
||||
RUN npm install -g pnpm
|
||||
|
||||
# Этап установки зависимостей
|
||||
FROM base AS deps
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем файлы для установки зависимостей
|
||||
COPY package*.json ./
|
||||
COPY pnpm-lock.yaml* ./
|
||||
|
||||
# Устанавливаем зависимости
|
||||
RUN pnpm install --frozen-lockfile
|
||||
|
||||
# Этап сборки
|
||||
FROM base AS builder
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем зависимости из предыдущего этапа
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
|
||||
# Собираем приложение
|
||||
RUN pnpm run build
|
||||
|
||||
# Финальный этап - production
|
||||
FROM base AS runner
|
||||
WORKDIR /app
|
||||
|
||||
# Создаем пользователя для безопасности
|
||||
RUN addgroup --system --gid 1001 nodejs
|
||||
RUN adduser --system --uid 1001 astro
|
||||
|
||||
# Копируем собранное приложение
|
||||
COPY --from=builder --chown=astro:nodejs /app/dist ./dist
|
||||
COPY --from=builder --chown=astro:nodejs /app/node_modules ./node_modules
|
||||
COPY --from=builder --chown=astro:nodejs /app/package.json ./package.json
|
||||
|
||||
# Переключаемся на пользователя astro
|
||||
USER astro
|
||||
|
||||
# Открываем порт
|
||||
EXPOSE 4321
|
||||
|
||||
# Устанавливаем переменные окружения
|
||||
ENV HOST=0.0.0.0
|
||||
ENV PORT=4321
|
||||
|
||||
# Запускаем приложение
|
||||
CMD ["node", "./dist/server/entry.mjs"]
|
@ -3,7 +3,7 @@ import tailwind from "@astrojs/tailwind";
|
||||
import sanity from "@sanity/astro";
|
||||
import react from "@astrojs/react";
|
||||
|
||||
import vercel from "@astrojs/vercel/serverless";
|
||||
import node from "@astrojs/node";
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
@ -16,5 +16,11 @@ export default defineConfig({
|
||||
react(),
|
||||
],
|
||||
output: "server",
|
||||
adapter: vercel(),
|
||||
adapter: node({
|
||||
mode: "standalone"
|
||||
}),
|
||||
server: {
|
||||
host: true,
|
||||
port: 4321
|
||||
}
|
||||
});
|
||||
|
40
docker-compose.yml
Normal file
40
docker-compose.yml
Normal file
@ -0,0 +1,40 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
app:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: ooodmdk-app
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3016:4321"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- HOST=0.0.0.0
|
||||
- PORT=4321
|
||||
# Sanity переменные окружения
|
||||
- SANITY_PROJECT_ID=${SANITY_PROJECT_ID:-hngg8xd3}
|
||||
- SANITY_DATASET=${SANITY_DATASET:-production}
|
||||
- SANITY_API_VERSION=${SANITY_API_VERSION:-2023-05-03}
|
||||
- SANITY_TOKEN=${SANITY_TOKEN:-}
|
||||
# Дополнительные переменные
|
||||
- PUBLIC_SITE_URL=${PUBLIC_SITE_URL:-http://localhost:4321}
|
||||
env_file:
|
||||
- stack.env
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:4321/"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
networks:
|
||||
- app-network
|
||||
|
||||
networks:
|
||||
app-network:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
app-data:
|
||||
driver: local
|
@ -13,7 +13,6 @@
|
||||
"@astrojs/node": "^9.2.2",
|
||||
"@astrojs/react": "^4.3.0",
|
||||
"@astrojs/tailwind": "^6.0.2",
|
||||
"@astrojs/vercel": "^8.2.0",
|
||||
"@portabletext/react": "^3.1.0",
|
||||
"@sanity/astro": "^3.1.6",
|
||||
"@sanity/client": "^6.21.3",
|
||||
|
19
stack.env
Normal file
19
stack.env
Normal file
@ -0,0 +1,19 @@
|
||||
# Основные настройки приложения
|
||||
NODE_ENV=production
|
||||
APP_PORT=4321
|
||||
|
||||
# URL вашего сайта (замените на ваш домен)
|
||||
PUBLIC_SITE_URL=http://localhost:4321
|
||||
|
||||
# Sanity CMS настройки
|
||||
SANITY_PROJECT_ID=hngg8xd3
|
||||
SANITY_DATASET=production
|
||||
SANITY_API_VERSION=2023-05-03
|
||||
# Токен для Sanity (если нужен для приватных данных)
|
||||
SANITY_TOKEN=
|
||||
|
||||
# Дополнительные настройки безопасности
|
||||
CORS_ORIGIN=*
|
||||
|
||||
# Логирование
|
||||
LOG_LEVEL=info
|
Reference in New Issue
Block a user