deply
This commit is contained in:
+32
@@ -0,0 +1,32 @@
|
|||||||
|
FROM node:22-alpine AS deps
|
||||||
|
WORKDIR /app
|
||||||
|
COPY package.json package-lock.json ./
|
||||||
|
RUN npm ci
|
||||||
|
|
||||||
|
FROM node:22-alpine AS builder
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --from=deps /app/node_modules ./node_modules
|
||||||
|
COPY . .
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
FROM node:22-alpine AS runner
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
ENV NODE_ENV=production
|
||||||
|
ENV PORT=3000
|
||||||
|
ENV HOSTNAME=0.0.0.0
|
||||||
|
|
||||||
|
RUN addgroup --system --gid 1001 nodejs && \
|
||||||
|
adduser --system --uid 1001 nextjs
|
||||||
|
|
||||||
|
COPY --from=builder /app/public ./public
|
||||||
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
|
||||||
|
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
|
||||||
|
|
||||||
|
RUN mkdir -p /app/uploads && chown nextjs:nodejs /app/uploads
|
||||||
|
|
||||||
|
USER nextjs
|
||||||
|
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
CMD ["node", "server.js"]
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
name: strike_arena
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: strike_arena_app
|
||||||
|
restart: unless-stopped
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
expose:
|
||||||
|
- "3000"
|
||||||
|
volumes:
|
||||||
|
- uploads_data:/app/uploads
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:3000/ || exit 1"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 5
|
||||||
|
start_period: 30s
|
||||||
|
|
||||||
|
nginx:
|
||||||
|
image: nginx:1.27-alpine
|
||||||
|
container_name: strike_arena_nginx
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
app:
|
||||||
|
condition: service_healthy
|
||||||
|
ports:
|
||||||
|
- "10.20.0.20:18073:80"
|
||||||
|
volumes:
|
||||||
|
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1/health || exit 1"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: mysql:8.4
|
||||||
|
container_name: strike_arena_db
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
|
||||||
|
MYSQL_DATABASE: ${MYSQL_DATABASE}
|
||||||
|
expose:
|
||||||
|
- "3306"
|
||||||
|
volumes:
|
||||||
|
- db_data:/var/lib/mysql
|
||||||
|
- ./init/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-u", "root", "--password=${MYSQL_PASSWORD}"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
start_period: 30s
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
db_data:
|
||||||
|
uploads_data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
backend:
|
||||||
|
driver: bridge
|
||||||
+133
@@ -0,0 +1,133 @@
|
|||||||
|
SET NAMES utf8mb4;
|
||||||
|
SET character_set_client = utf8mb4;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `rooms` (
|
||||||
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`description` text COLLATE utf8mb4_unicode_ci,
|
||||||
|
`cpu` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`ram` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`gpu` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`mouse` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`keyboard` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`headphones` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`monitor` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`bracket` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`chair` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
INSERT INTO `rooms` VALUES
|
||||||
|
(1,'solo','5 отдельных комнат с мощным железом для игры соло','intel i7-13700kf','kingston 16gX2=32G/3200','Asus dual4070 012g','Logitech superlight 2','Hyper X origins core','Hyper X Cloud II','ASUS ROG 380 Hz','NB Display stand','DX Racer Gladiator'),
|
||||||
|
(2,'DUO / TRIO','4 комнаты на двоих и 3 на троих','intel i5-14600kf','kingston 16gX2=32G/3200','MSI 4060 Ventus 2X','Logitech superlight 1','Hyper X origins core','Hyper X Cloud II','ASUS ROG 310 Hz','NB Display stand','DX Racer Gladiator'),
|
||||||
|
(3,'BOOTCAMP 5/6','2 буткэмпа на пять и 1 на шесть игроков','intel i5-12400f','kingston 16gX2=32G/3200','MSI 4060 Ventus 2X','Logitech G403','Hyper X origins core','Hyper X Cloud II','ASUS ROG 310 Hz','NB Display stand','DX Racer Gladiator'),
|
||||||
|
(4,'ps','Консольный зал','PlayStation 5','2x DualShock','LG 55','','','','','','');
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `faq` (
|
||||||
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
|
`title` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`description` text COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
INSERT INTO `faq` VALUES
|
||||||
|
(1,'Можно ли загрузить свою игру?','Да, вы можете установить свою игру самостоятельно, однако после перезагрузки компьютера игра удалится. Если вам нужно долгосрочное использование игры, сообщите нам заранее, и мы поможем всё настроить.'),
|
||||||
|
(2,'Какая у вас версия игр?','Мы всегда используем только самые свежие и актуальные версии игр. Наши операторы регулярно следят за обновлениями.'),
|
||||||
|
(3,'Установлены ли CS-2, CS:GO, CS 1.6?','Да, у нас установлены все популярные версии Counter-Strike: CS-2, CS:GO и CS 1.6.'),
|
||||||
|
(5,'Сколько стоит комп в общем зале?','Общего зала у нас нет. Наш клуб является VIP-форматом и предлагает только приватные кабинки. Вы можете забронировать место в BootCamp 5/6, если вам комфортно играть рядом с другими игроками.'),
|
||||||
|
(6,'Можно ли распечатать документы?','Да, можно распечатать документы в чёрно-белом формате. Стоимость распечатки — 100 тг за одну сторону листа А4.'),
|
||||||
|
(7,'Указанная цена за 1 компьютер или за весь буткэмп?','Все цены указаны за одно игровое место (1 компьютер).'),
|
||||||
|
(8,'Почему такие высокие цены?','Наш клуб ориентирован на тех, кто ценит приватность, комфорт и тишину. Наши гости часто отмечают, что наши цены полностью оправданы высоким уровнем комфорта и качества обслуживания.'),
|
||||||
|
(9,'Как можно забронировать место?','Есть два способа бронирования:\nЧерез администратора с предварительной оплатой 1000 тг за каждый компьютер.\nОнлайн через регистрацию с дополнительной скидкой 10%.');
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `contacts` (
|
||||||
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
|
`type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`value` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
INSERT INTO `contacts` VALUES
|
||||||
|
(1,'phone','+7 700 062 8559'),
|
||||||
|
(2,'whatsapp','https://wa.me/77752608559'),
|
||||||
|
(3,'tg','https://t.me/StrikeArenaAstana'),
|
||||||
|
(4,'gis2','https://2gis.kz/astana/firm/70000001097382279'),
|
||||||
|
(5,'inst','https://www.instagram.com/strikearena_astana');
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `games` (
|
||||||
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
|
`title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`image_url` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`platform` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT 'pc',
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
INSERT INTO `games` VALUES
|
||||||
|
(14,'Мир танков','image.png','pc'),
|
||||||
|
(15,'Sims4','image-1.png','pc'),
|
||||||
|
(16,'Pubg','image-2.png','pc'),
|
||||||
|
(17,'Generals zerohour','image-3.png','pc'),
|
||||||
|
(18,'Dota2','image-4.png','pc'),
|
||||||
|
(19,'Valorant','image-5.png','pc'),
|
||||||
|
(20,'CS2','image-6.png','pc'),
|
||||||
|
(21,'League of legends','image-7.png','pc'),
|
||||||
|
(22,'CS1.6','image-8.png','pc'),
|
||||||
|
(23,'Genshin Impact','image-9.png','pc'),
|
||||||
|
(24,'Call of duty','image-10.png','pc'),
|
||||||
|
(25,'War thunder','image-11.png','pc'),
|
||||||
|
(26,'Gta 5','image-12.png','pc'),
|
||||||
|
(27,'Warface','image-13.png','pc'),
|
||||||
|
(28,'InZoi','image-14.png','pc'),
|
||||||
|
(29,'Gta SA','image-15.png','pc'),
|
||||||
|
(30,'It takes two','image-16.png','pc'),
|
||||||
|
(31,'Heroes of might and magic','image-17.png','pc'),
|
||||||
|
(32,'Left4dead 2','image-18.png','pc'),
|
||||||
|
(33,'Frozen throne','image-19.png','pc'),
|
||||||
|
(34,'Overwatch 2','image-20.png','pc'),
|
||||||
|
(35,'Nfs carbon','image-21.png','pc'),
|
||||||
|
(36,'Fortnite','image-22.png','pc'),
|
||||||
|
(37,'Red dead redemption 2','image-23.png','pc');
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `prices` (
|
||||||
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
|
`game_type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`room_type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`day_type` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`hour_1` decimal(10,2) DEFAULT NULL,
|
||||||
|
`hour_3` decimal(10,2) DEFAULT NULL,
|
||||||
|
`hour_5` decimal(10,2) DEFAULT NULL,
|
||||||
|
`night` decimal(10,2) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
INSERT INTO `prices` VALUES
|
||||||
|
(1,'ПК','solo','ПН-ЧТ',2800.00,5600.00,8400.00,10000.00),
|
||||||
|
(2,'ПК','solo','ПТ-ВС',3000.00,6000.00,9000.00,11000.00),
|
||||||
|
(3,'ПК','duo','ПН-ЧТ',2500.00,5000.00,7500.00,9500.00),
|
||||||
|
(4,'ПК','duo','ПТ-ВС',2700.00,5400.00,8100.00,10500.00),
|
||||||
|
(5,'ПК','trio','ПН-ЧТ',2300.00,4600.00,6900.00,9000.00),
|
||||||
|
(6,'ПК','trio','ПТ-ВС',2500.00,5000.00,7500.00,9800.00),
|
||||||
|
(7,'ПК','five','ПН-ЧТ',2100.00,4200.00,6300.00,8500.00),
|
||||||
|
(8,'ПК','five','ПТ-ВС',2300.00,4600.00,6900.00,9200.00),
|
||||||
|
(9,'ПК','six','ПН-ЧТ',2000.00,4000.00,6000.00,8200.00),
|
||||||
|
(10,'ПК','six','ПТ-ВС',2200.00,4400.00,6600.00,9000.00),
|
||||||
|
(11,'PS','lounge','2000',4000.00,9000.00,9000.00,14000.00),
|
||||||
|
(13,'PS','vip_normal','2500',5000.00,10000.00,10000.00,15000.00),
|
||||||
|
(15,'PS','vip_big','3000',6000.00,11000.00,12000.00,17000.00);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `bookings` (
|
||||||
|
`id` int NOT NULL AUTO_INCREMENT,
|
||||||
|
`type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`room` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`date_time` datetime NOT NULL,
|
||||||
|
`time_slot` varchar(5) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`game` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`contact` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||||
|
`contact_method` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||||
|
`status` enum('pending','confirmed','cancelled') COLLATE utf8mb4_unicode_ci DEFAULT 'pending',
|
||||||
|
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `idx_date_room_time` (`date_time`,`room`,`time_slot`),
|
||||||
|
KEY `idx_status` (`status`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
/** @type {import('next').NextConfig} */
|
/** @type {import('next').NextConfig} */
|
||||||
const nextConfig = {
|
const nextConfig = {
|
||||||
|
output: 'standalone',
|
||||||
reactStrictMode: true,
|
reactStrictMode: true,
|
||||||
eslint: {
|
eslint: {
|
||||||
ignoreDuringBuilds: true,
|
ignoreDuringBuilds: true,
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
client_max_body_size 64m;
|
||||||
|
|
||||||
|
location = /health {
|
||||||
|
access_log off;
|
||||||
|
return 200 "ok\n";
|
||||||
|
add_header Content-Type text/plain;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://app:3000;
|
||||||
|
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
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;
|
||||||
|
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
|
||||||
|
proxy_read_timeout 60s;
|
||||||
|
proxy_connect_timeout 10s;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~* \.(css|js|mjs|png|jpg|jpeg|gif|webp|svg|ico|woff|woff2)$ {
|
||||||
|
proxy_pass http://app:3000;
|
||||||
|
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
|
||||||
|
expires 30d;
|
||||||
|
add_header Cache-Control "public, immutable";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
|
||||||
<url><loc>https://strike-arena.kz/admin/contacts</loc><lastmod>2026-06-02T12:51:55.363Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
<url><loc>https://strike-arena.kz/admin/faq</loc><lastmod>2026-06-02T13:00:15.241Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
||||||
<url><loc>https://strike-arena.kz/admin/faq</loc><lastmod>2026-06-02T12:51:55.363Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
<url><loc>https://strike-arena.kz/admin/price</loc><lastmod>2026-06-02T13:00:15.242Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
||||||
<url><loc>https://strike-arena.kz/admin/games</loc><lastmod>2026-06-02T12:51:55.363Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
<url><loc>https://strike-arena.kz/admin/games</loc><lastmod>2026-06-02T13:00:15.242Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
||||||
<url><loc>https://strike-arena.kz/admin/login</loc><lastmod>2026-06-02T12:51:55.363Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
<url><loc>https://strike-arena.kz/admin/login</loc><lastmod>2026-06-02T13:00:15.242Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
||||||
<url><loc>https://strike-arena.kz/admin/price</loc><lastmod>2026-06-02T12:51:55.363Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
<url><loc>https://strike-arena.kz/admin/hardware</loc><lastmod>2026-06-02T13:00:15.242Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
||||||
<url><loc>https://strike-arena.kz/policy</loc><lastmod>2026-06-02T12:51:55.363Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
<url><loc>https://strike-arena.kz/admin/contacts</loc><lastmod>2026-06-02T13:00:15.242Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
||||||
<url><loc>https://strike-arena.kz/admin/hardware</loc><lastmod>2026-06-02T12:51:55.363Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
<url><loc>https://strike-arena.kz</loc><lastmod>2026-06-02T13:00:15.242Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
||||||
<url><loc>https://strike-arena.kz</loc><lastmod>2026-06-02T12:51:55.363Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
<url><loc>https://strike-arena.kz/policy</loc><lastmod>2026-06-02T13:00:15.242Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url>
|
||||||
</urlset>
|
</urlset>
|
||||||
Reference in New Issue
Block a user