Оптимизация для Ubuntu+Traefik
This commit is contained in:
File diff suppressed because one or more lines are too long
45
.dockerignore
Normal file
45
.dockerignore
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
# Dependencies
|
||||
node_modules
|
||||
nextjs_space/node_modules
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# Next.js
|
||||
nextjs_space/.next
|
||||
.next
|
||||
|
||||
# Testing
|
||||
coverage
|
||||
.nyc_output
|
||||
|
||||
# Misc
|
||||
.DS_Store
|
||||
*.pem
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
# Debug
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# IDE
|
||||
.vscode
|
||||
.idea
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# Git
|
||||
.git
|
||||
.gitignore
|
||||
README.md
|
||||
|
||||
# Docker
|
||||
Dockerfile
|
||||
docker-compose.yml
|
||||
.dockerignore
|
||||
9
.env.example
Normal file
9
.env.example
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
# Домен вашего сайта
|
||||
DOMAIN=global-it24.example.com
|
||||
|
||||
# URL сайта (используется для метатегов и canonical URL)
|
||||
NEXT_PUBLIC_SITE_URL=https://global-it24.example.com
|
||||
|
||||
# Для production окружения
|
||||
NODE_ENV=production
|
||||
58
Dockerfile
Normal file
58
Dockerfile
Normal file
@@ -0,0 +1,58 @@
|
||||
|
||||
# Многоступенчатая сборка для оптимизации размера образа
|
||||
|
||||
# Стадия 1: Установка зависимостей
|
||||
FROM node:18-alpine AS deps
|
||||
RUN apk add --no-cache libc6-compat
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем файлы зависимостей
|
||||
COPY nextjs_space/package.json nextjs_space/yarn.lock* ./
|
||||
RUN yarn install --frozen-lockfile --production=false
|
||||
|
||||
# Стадия 2: Сборка приложения
|
||||
FROM node:18-alpine AS builder
|
||||
WORKDIR /app
|
||||
|
||||
# Копируем зависимости из предыдущей стадии
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY nextjs_space/ ./
|
||||
|
||||
# Используем production конфигурацию
|
||||
RUN mv next.config.prod.js next.config.js || true
|
||||
|
||||
# Создаем .env файл для сборки
|
||||
ARG NEXT_PUBLIC_SITE_URL
|
||||
ENV NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL}
|
||||
|
||||
# Собираем приложение
|
||||
RUN yarn build
|
||||
|
||||
# Стадия 3: Production образ
|
||||
FROM node:18-alpine AS runner
|
||||
WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
ENV NEXT_TELEMETRY_DISABLED=1
|
||||
|
||||
# Создаем пользователя для безопасности
|
||||
RUN addgroup --system --gid 1001 nodejs
|
||||
RUN adduser --system --uid 1001 nextjs
|
||||
|
||||
# Копируем необходимые файлы
|
||||
COPY --from=builder /app/public ./public
|
||||
COPY --from=builder /app/.next/standalone ./
|
||||
COPY --from=builder /app/.next/static ./.next/static
|
||||
|
||||
# Устанавливаем правильные права
|
||||
RUN chown -R nextjs:nodejs /app
|
||||
|
||||
USER nextjs
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
ENV PORT=3000
|
||||
ENV HOSTNAME="0.0.0.0"
|
||||
|
||||
# Запускаем приложение
|
||||
CMD ["node", "server.js"]
|
||||
265
README.deployment.md
Normal file
265
README.deployment.md
Normal file
@@ -0,0 +1,265 @@
|
||||
|
||||
# Инструкция по развертыванию Global-IT24 на Ubuntu с Traefik
|
||||
|
||||
## Предварительные требования
|
||||
|
||||
1. Ubuntu Server (20.04 или новее)
|
||||
2. Docker и Docker Compose установлены
|
||||
3. Traefik настроен как reverse proxy
|
||||
4. Домен направлен на ваш сервер
|
||||
|
||||
## Шаг 1: Настройка Traefik
|
||||
|
||||
Если Traefik еще не настроен, создайте базовую конфигурацию:
|
||||
|
||||
```bash
|
||||
# Создайте сеть для Traefik
|
||||
docker network create traefik-public
|
||||
|
||||
# Создайте директорию для Traefik
|
||||
mkdir -p ~/traefik
|
||||
cd ~/traefik
|
||||
```
|
||||
|
||||
Создайте `docker-compose.yml` для Traefik:
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:v2.10
|
||||
container_name: traefik
|
||||
restart: unless-stopped
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
networks:
|
||||
- traefik-public
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- ./traefik.yml:/traefik.yml:ro
|
||||
- ./acme.json:/acme.json
|
||||
- ./config.yml:/config.yml:ro
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.traefik.entrypoints=web"
|
||||
|
||||
networks:
|
||||
traefik-public:
|
||||
external: true
|
||||
```
|
||||
|
||||
Создайте `traefik.yml`:
|
||||
|
||||
```yaml
|
||||
api:
|
||||
dashboard: true
|
||||
insecure: false
|
||||
|
||||
entryPoints:
|
||||
web:
|
||||
address: ":80"
|
||||
http:
|
||||
redirections:
|
||||
entryPoint:
|
||||
to: websecure
|
||||
scheme: https
|
||||
websecure:
|
||||
address: ":443"
|
||||
http:
|
||||
tls:
|
||||
certResolver: letsencrypt
|
||||
|
||||
providers:
|
||||
docker:
|
||||
endpoint: "unix:///var/run/docker.sock"
|
||||
exposedByDefault: false
|
||||
network: traefik-public
|
||||
file:
|
||||
filename: /config.yml
|
||||
|
||||
certificatesResolvers:
|
||||
letsencrypt:
|
||||
acme:
|
||||
email: your-email@example.com
|
||||
storage: acme.json
|
||||
httpChallenge:
|
||||
entryPoint: web
|
||||
```
|
||||
|
||||
Создайте файл для SSL сертификатов:
|
||||
|
||||
```bash
|
||||
touch acme.json
|
||||
chmod 600 acme.json
|
||||
```
|
||||
|
||||
Запустите Traefik:
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## Шаг 2: Развертывание Global-IT24
|
||||
|
||||
1. **Клонируйте или скопируйте проект на сервер:**
|
||||
|
||||
```bash
|
||||
cd /home/your-user
|
||||
# Скопируйте папку global_it24_landing на сервер
|
||||
```
|
||||
|
||||
2. **Создайте .env файл:**
|
||||
|
||||
```bash
|
||||
cd global_it24_landing
|
||||
cp .env.example .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
Отредактируйте `.env`:
|
||||
|
||||
```env
|
||||
DOMAIN=ваш-домен.ru
|
||||
NEXT_PUBLIC_SITE_URL=https://ваш-домен.ru
|
||||
NODE_ENV=production
|
||||
```
|
||||
|
||||
3. **Соберите и запустите контейнер:**
|
||||
|
||||
```bash
|
||||
# Сборка образа
|
||||
docker-compose build
|
||||
|
||||
# Запуск контейнера
|
||||
docker-compose up -d
|
||||
|
||||
# Проверка логов
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
## Шаг 3: Проверка работы
|
||||
|
||||
1. Откройте браузер и перейдите на ваш домен
|
||||
2. Проверьте, что HTTPS работает корректно
|
||||
3. Проверьте мобильную версию сайта
|
||||
|
||||
## Команды для управления
|
||||
|
||||
```bash
|
||||
# Перезапуск контейнера
|
||||
docker-compose restart
|
||||
|
||||
# Остановка контейнера
|
||||
docker-compose down
|
||||
|
||||
# Просмотр логов
|
||||
docker-compose logs -f
|
||||
|
||||
# Обновление после изменений
|
||||
docker-compose down
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
|
||||
# Проверка статуса
|
||||
docker-compose ps
|
||||
```
|
||||
|
||||
## Оптимизация производительности
|
||||
|
||||
1. **Включите кэширование в Traefik** (добавьте в labels):
|
||||
```yaml
|
||||
- "traefik.http.middlewares.cache-control.headers.customResponseHeaders.Cache-Control=public, max-age=31536000"
|
||||
```
|
||||
|
||||
2. **Настройте компрессию** (добавьте в labels):
|
||||
```yaml
|
||||
- "traefik.http.middlewares.compress.compress=true"
|
||||
- "traefik.http.routers.global-it24-secure.middlewares=compress@docker"
|
||||
```
|
||||
|
||||
3. **Ограничьте ресурсы контейнера** (добавьте в docker-compose.yml):
|
||||
```yaml
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '1'
|
||||
memory: 512M
|
||||
reservations:
|
||||
cpus: '0.5'
|
||||
memory: 256M
|
||||
```
|
||||
|
||||
## Резервное копирование
|
||||
|
||||
```bash
|
||||
# Создайте скрипт для бэкапа
|
||||
cat > backup.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
BACKUP_DIR="/backup/global-it24"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
mkdir -p $BACKUP_DIR
|
||||
docker-compose exec global-it24-web tar czf - /app > $BACKUP_DIR/backup_$DATE.tar.gz
|
||||
EOF
|
||||
|
||||
chmod +x backup.sh
|
||||
```
|
||||
|
||||
## Мониторинг
|
||||
|
||||
```bash
|
||||
# Проверка использования ресурсов
|
||||
docker stats global-it24-landing
|
||||
|
||||
# Проверка здоровья контейнера
|
||||
docker inspect --format='{{.State.Health.Status}}' global-it24-landing
|
||||
```
|
||||
|
||||
## Устранение неполадок
|
||||
|
||||
### Контейнер не запускается:
|
||||
```bash
|
||||
docker-compose logs global-it24-web
|
||||
```
|
||||
|
||||
### Проблемы с SSL:
|
||||
```bash
|
||||
docker logs traefik
|
||||
# Проверьте acme.json
|
||||
```
|
||||
|
||||
### Сайт недоступен:
|
||||
```bash
|
||||
# Проверьте, что контейнер работает
|
||||
docker ps | grep global-it24
|
||||
|
||||
# Проверьте сеть
|
||||
docker network inspect traefik-public
|
||||
|
||||
# Проверьте порты
|
||||
netstat -tulpn | grep -E '80|443'
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
1. Регулярно обновляйте Docker образы
|
||||
2. Используйте файрвол (ufw):
|
||||
```bash
|
||||
sudo ufw allow 80/tcp
|
||||
sudo ufw allow 443/tcp
|
||||
sudo ufw enable
|
||||
```
|
||||
|
||||
3. Настройте автоматические обновления безопасности:
|
||||
```bash
|
||||
sudo apt install unattended-upgrades
|
||||
sudo dpkg-reconfigure --priority=low unattended-upgrades
|
||||
```
|
||||
|
||||
## Контакты для поддержки
|
||||
|
||||
При возникновении проблем проверьте логи и документацию Traefik: https://doc.traefik.io/traefik/
|
||||
33
backup.sh
Executable file
33
backup.sh
Executable file
@@ -0,0 +1,33 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для резервного копирования
|
||||
|
||||
set -e
|
||||
|
||||
BACKUP_DIR="./backups"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_FILE="$BACKUP_DIR/global-it24_backup_$DATE.tar.gz"
|
||||
|
||||
echo "💾 Создание резервной копии..."
|
||||
|
||||
# Создание директории для бэкапов
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# Создание архива проекта
|
||||
tar -czf $BACKUP_FILE \
|
||||
--exclude='node_modules' \
|
||||
--exclude='.next' \
|
||||
--exclude='backups' \
|
||||
--exclude='.git' \
|
||||
.
|
||||
|
||||
echo "✅ Резервная копия создана: $BACKUP_FILE"
|
||||
echo "📦 Размер: $(du -h $BACKUP_FILE | cut -f1)"
|
||||
|
||||
# Удаление старых бэкапов (оставляем последние 5)
|
||||
cd $BACKUP_DIR
|
||||
ls -t global-it24_backup_*.tar.gz | tail -n +6 | xargs -r rm
|
||||
cd ..
|
||||
|
||||
echo "🧹 Старые бэкапы очищены (оставлены последние 5)"
|
||||
57
deploy.sh
Executable file
57
deploy.sh
Executable file
@@ -0,0 +1,57 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для быстрого развертывания Global-IT24 на Ubuntu с Traefik
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 Развертывание Global-IT24..."
|
||||
|
||||
# Проверка наличия .env файла
|
||||
if [ ! -f .env ]; then
|
||||
echo "⚠️ Файл .env не найден. Создаю из .env.example..."
|
||||
cp .env.example .env
|
||||
echo "📝 Отредактируйте файл .env и запустите скрипт снова."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Загрузка переменных окружения
|
||||
source .env
|
||||
|
||||
# Проверка наличия сети traefik-public
|
||||
if ! docker network inspect traefik-public >/dev/null 2>&1; then
|
||||
echo "📡 Создаю сеть traefik-public..."
|
||||
docker network create traefik-public
|
||||
fi
|
||||
|
||||
# Остановка предыдущей версии
|
||||
echo "🛑 Остановка предыдущей версии..."
|
||||
docker-compose down 2>/dev/null || true
|
||||
|
||||
# Сборка нового образа
|
||||
echo "🔨 Сборка Docker образа..."
|
||||
docker-compose build --no-cache
|
||||
|
||||
# Запуск контейнера
|
||||
echo "▶️ Запуск контейнера..."
|
||||
docker-compose up -d
|
||||
|
||||
# Ожидание готовности
|
||||
echo "⏳ Ожидание готовности сервиса..."
|
||||
sleep 10
|
||||
|
||||
# Проверка статуса
|
||||
if docker-compose ps | grep -q "Up"; then
|
||||
echo "✅ Развертывание успешно завершено!"
|
||||
echo "🌐 Сайт доступен по адресу: ${NEXT_PUBLIC_SITE_URL}"
|
||||
echo ""
|
||||
echo "📊 Статус контейнера:"
|
||||
docker-compose ps
|
||||
echo ""
|
||||
echo "📝 Для просмотра логов используйте: docker-compose logs -f"
|
||||
else
|
||||
echo "❌ Ошибка при запуске контейнера!"
|
||||
echo "📝 Логи:"
|
||||
docker-compose logs
|
||||
exit 1
|
||||
fi
|
||||
54
docker-compose.yml
Normal file
54
docker-compose.yml
Normal file
@@ -0,0 +1,54 @@
|
||||
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
global-it24-web:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
NEXT_PUBLIC_SITE_URL: ${NEXT_PUBLIC_SITE_URL:-https://global-it24.local}
|
||||
container_name: global-it24-landing
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- NEXT_PUBLIC_SITE_URL=${NEXT_PUBLIC_SITE_URL:-https://global-it24.local}
|
||||
networks:
|
||||
- traefik-public
|
||||
labels:
|
||||
# Включаем Traefik для этого контейнера
|
||||
- "traefik.enable=true"
|
||||
|
||||
# Настройка HTTP
|
||||
- "traefik.http.routers.global-it24.rule=Host(`${DOMAIN:-global-it24.local}`)"
|
||||
- "traefik.http.routers.global-it24.entrypoints=web"
|
||||
- "traefik.http.routers.global-it24.middlewares=redirect-to-https@docker"
|
||||
|
||||
# Настройка HTTPS
|
||||
- "traefik.http.routers.global-it24-secure.rule=Host(`${DOMAIN:-global-it24.local}`)"
|
||||
- "traefik.http.routers.global-it24-secure.entrypoints=websecure"
|
||||
- "traefik.http.routers.global-it24-secure.tls=true"
|
||||
- "traefik.http.routers.global-it24-secure.tls.certresolver=letsencrypt"
|
||||
|
||||
# Middleware для редиректа HTTP -> HTTPS
|
||||
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
||||
- "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true"
|
||||
|
||||
# Указываем порт сервиса
|
||||
- "traefik.http.services.global-it24.loadbalancer.server.port=3000"
|
||||
|
||||
# Middleware для заголовков безопасности
|
||||
- "traefik.http.middlewares.security-headers.headers.customResponseHeaders.X-Frame-Options=SAMEORIGIN"
|
||||
- "traefik.http.middlewares.security-headers.headers.customResponseHeaders.X-Content-Type-Options=nosniff"
|
||||
- "traefik.http.middlewares.security-headers.headers.customResponseHeaders.X-XSS-Protection=1; mode=block"
|
||||
- "traefik.http.routers.global-it24-secure.middlewares=security-headers@docker"
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3000/"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
networks:
|
||||
traefik-public:
|
||||
external: true
|
||||
7
logs.sh
Executable file
7
logs.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для просмотра логов
|
||||
|
||||
echo "📋 Логи Global-IT24 (Ctrl+C для выхода)..."
|
||||
docker-compose logs -f --tail=100
|
||||
50
nextjs_space/next.config.prod.js
Normal file
50
nextjs_space/next.config.prod.js
Normal file
@@ -0,0 +1,50 @@
|
||||
const path = require('path');
|
||||
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
distDir: process.env.NEXT_DIST_DIR || '.next',
|
||||
output: 'standalone',
|
||||
experimental: {
|
||||
outputFileTracingRoot: path.join(__dirname, '../'),
|
||||
},
|
||||
eslint: {
|
||||
ignoreDuringBuilds: true,
|
||||
},
|
||||
typescript: {
|
||||
ignoreBuildErrors: false,
|
||||
},
|
||||
images: {
|
||||
unoptimized: true,
|
||||
domains: [],
|
||||
},
|
||||
// Оптимизация для production
|
||||
compress: true,
|
||||
poweredByHeader: false,
|
||||
reactStrictMode: true,
|
||||
swcMinify: true,
|
||||
// Настройки для работы за reverse proxy (Traefik)
|
||||
async headers() {
|
||||
return [
|
||||
{
|
||||
source: '/:all*(svg|jpg|jpeg|png|gif|ico|webp)',
|
||||
headers: [
|
||||
{
|
||||
key: 'Cache-Control',
|
||||
value: 'public, max-age=31536000, immutable',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
source: '/_next/static/:path*',
|
||||
headers: [
|
||||
{
|
||||
key: 'Cache-Control',
|
||||
value: 'public, max-age=31536000, immutable',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = nextConfig;
|
||||
68
nginx.conf.example
Normal file
68
nginx.conf.example
Normal file
@@ -0,0 +1,68 @@
|
||||
|
||||
# Альтернативная конфигурация для Nginx (если вы используете Nginx вместо Traefik)
|
||||
|
||||
upstream global_it24_app {
|
||||
server localhost:3000;
|
||||
keepalive 64;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name ваш-домен.ru www.ваш-домен.ru;
|
||||
|
||||
# Редирект на HTTPS
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name ваш-домен.ru www.ваш-домен.ru;
|
||||
|
||||
# SSL сертификаты (Let's Encrypt)
|
||||
ssl_certificate /etc/letsencrypt/live/ваш-домен.ru/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/ваш-домен.ru/privkey.pem;
|
||||
|
||||
# SSL настройки
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||
ssl_prefer_server_ciphers on;
|
||||
ssl_session_cache shared:SSL:10m;
|
||||
ssl_session_timeout 10m;
|
||||
|
||||
# Логи
|
||||
access_log /var/log/nginx/global-it24-access.log;
|
||||
error_log /var/log/nginx/global-it24-error.log;
|
||||
|
||||
# Безопасность
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
|
||||
# Основная локация
|
||||
location / {
|
||||
proxy_pass http://global_it24_app;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
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;
|
||||
}
|
||||
|
||||
# Кэширование статики
|
||||
location /_next/static {
|
||||
proxy_pass http://global_it24_app;
|
||||
add_header Cache-Control "public, max-age=31536000, immutable";
|
||||
}
|
||||
|
||||
# Кэширование изображений
|
||||
location ~* \.(jpg|jpeg|png|gif|ico|svg|webp)$ {
|
||||
proxy_pass https://placehold.co/1200x600/e2e8f0/1e293b?text=Proxy_server_address_for_caching_image_files_with_
|
||||
add_header Cache-Control "public, max-age=31536000, immutable";
|
||||
}
|
||||
|
||||
# Размер загрузки файлов
|
||||
client_max_body_size 10M;
|
||||
}
|
||||
27
status.sh
Executable file
27
status.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для проверки статуса
|
||||
|
||||
echo "📊 Статус Global-IT24:"
|
||||
echo ""
|
||||
|
||||
# Статус контейнера
|
||||
echo "=== Статус контейнера ==="
|
||||
docker-compose ps
|
||||
echo ""
|
||||
|
||||
# Использование ресурсов
|
||||
echo "=== Использование ресурсов ==="
|
||||
docker stats global-it24-landing --no-stream
|
||||
echo ""
|
||||
|
||||
# Здоровье контейнера
|
||||
echo "=== Здоровье контейнера ==="
|
||||
HEALTH=$(docker inspect --format='{{.State.Health.Status}}' global-it24-landing 2>/dev/null || echo "не настроено")
|
||||
echo "Статус: $HEALTH"
|
||||
echo ""
|
||||
|
||||
# Последние логи
|
||||
echo "=== Последние 10 строк логов ==="
|
||||
docker-compose logs --tail=10
|
||||
9
stop.sh
Executable file
9
stop.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для остановки приложения
|
||||
|
||||
echo "🛑 Остановка Global-IT24..."
|
||||
docker-compose down
|
||||
|
||||
echo "✅ Приложение остановлено"
|
||||
24
update.sh
Executable file
24
update.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для быстрого обновления приложения без пересборки
|
||||
|
||||
set -e
|
||||
|
||||
echo "🔄 Обновление Global-IT24..."
|
||||
|
||||
# Перезапуск контейнера
|
||||
echo "🔄 Перезапуск контейнера..."
|
||||
docker-compose restart
|
||||
|
||||
echo "⏳ Ожидание готовности..."
|
||||
sleep 5
|
||||
|
||||
if docker-compose ps | grep -q "Up"; then
|
||||
echo "✅ Обновление завершено!"
|
||||
docker-compose ps
|
||||
else
|
||||
echo "❌ Ошибка при перезапуске!"
|
||||
docker-compose logs --tail=50
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user