diff --git a/.env.example b/.env.example index a5b2167..4315635 100644 --- a/.env.example +++ b/.env.example @@ -42,7 +42,7 @@ RABBITMQ_URL=amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:${RAB # ────────────────────────────────────────────── # CORS # ────────────────────────────────────────────── -CORS_ORIGINS=http://localhost:3000,http://localhost:5173 +CORS_ORIGINS=http://localhost:3010,http://localhost:5173 # ────────────────────────────────────────────── # Rate Limiting diff --git a/Dockerfile b/Dockerfile index 447a636..b2edf86 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,6 +16,6 @@ COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package.json ./ COPY --from=builder /app/prisma ./prisma USER sso -EXPOSE 3000 +EXPOSE 3010 ENV NODE_ENV=production CMD ["node", "dist/main"] diff --git a/docker-compose.yml b/docker-compose.yml index f71d731..b9c5303 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,7 @@ services: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} ports: - - "${POSTGRES_PORT:-5432}:5432" + - "${POSTGRES_PORT:-3184}:5432" volumes: - pgdata:/var/lib/postgresql/data healthcheck: @@ -21,7 +21,7 @@ services: image: redis:7-alpine restart: unless-stopped ports: - - "${REDIS_PORT:-6379}:6379" + - "${REDIS_PORT:-3185}:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s @@ -36,8 +36,8 @@ services: RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER} RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD} ports: - - "${RABBITMQ_PORT:-5672}:5672" - - "${RABBITMQ_UI_PORT:-15672}:15672" + - "${RABBITMQ_PORT:-3186}:5672" + - "${RABBITMQ_UI_PORT:-3187}:15672" healthcheck: test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"] interval: 10s diff --git a/install.sh b/install.sh index dd4b680..e8633a4 100644 --- a/install.sh +++ b/install.sh @@ -258,14 +258,11 @@ while [ "$I" -le 30 ]; do break fi if [ "$I" -eq 30 ]; then - echo "=== PG LOOP TIMEOUT ===" + warn "PostgreSQL did not become ready after 60s — continuing anyway..." fi I=$((I + 1)) sleep 2 done -echo "=== AFTER PG LOOP ===" - -echo "=== CHECKPOINT: after postgres loop ===" info "Waiting for Redis..." for ((i=1; i<=15; i++)); do @@ -278,41 +275,27 @@ for ((i=1; i<=15; i++)); do fi sleep 2 done -echo "=== CHECKPOINT: after redis loop ===" # ─── 6. Dependencies & Prisma ──────────────────────────────────── -echo "=== CHECKPOINT: step 6 ===" step "6/8 Installing dependencies" -echo "=== CHECKPOINT: npm install ===" npm install --no-audit --no-fund || error "'npm install' failed. Check network / ${INSTALL_DIR}/package.json" -echo "=== CHECKPOINT: npm ci done ===" info "npm dependencies installed" -echo "=== CHECKPOINT: prisma generate ===" npx prisma generate || error "'prisma generate' failed." -echo "=== CHECKPOINT: prisma generate done ===" info "Prisma client generated" export DATABASE_URL -echo "=== CHECKPOINT: prisma db push ===" npx prisma db push || error "'prisma db push' failed. Is PostgreSQL accessible? Check ${INSTALL_DIR}/.env DATABASE_URL" -echo "=== CHECKPOINT: prisma db push done ===" info "Database schema applied" # ─── 7. Seed ───────────────────────────────────────────────────── -echo "=== CHECKPOINT: step 7 ===" step "7/8 Seeding database" -echo "=== CHECKPOINT: seed ===" npx ts-node -P tsconfig.json prisma/seed.ts || error "Seed failed." -echo "=== CHECKPOINT: seed done ===" info "Seed data created" # ─── 8. Build & Start ──────────────────────────────────────────── -echo "=== CHECKPOINT: step 8 ===" step "8/8 Building and starting SSO Service" -echo "=== CHECKPOINT: build ===" npm run build || error "'npm run build' failed. Check TypeScript errors above." -echo "=== CHECKPOINT: build done ===" info "Application built" # Остановить предыдущий процесс, если был diff --git a/prisma/seed.ts b/prisma/seed.ts index 1f6f71a..a6eb8ee 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -33,7 +33,7 @@ async function main(): Promise { name: "Test OAuth Client", clientId: testClientId, clientSecret, - redirectUris: ["http://localhost:5173/callback", "http://localhost:3000/callback"], + redirectUris: ["http://localhost:5173/callback", "http://localhost:3010/callback"], grants: ["authorization_code", "client_credentials", "refresh_token"], isConfidential: true, }, diff --git a/src/config/configuration.ts b/src/config/configuration.ts index fcb3ff5..8afb718 100644 --- a/src/config/configuration.ts +++ b/src/config/configuration.ts @@ -2,7 +2,7 @@ import { registerAs } from '@nestjs/config'; export default registerAs('app', () => ({ nodeEnv: process.env.NODE_ENV, - port: parseInt(process.env.PORT ?? '3000', 10), + port: parseInt(process.env.PORT ?? '3010', 10), host: process.env.HOST ?? '0.0.0.0', trustProxy: parseInt(process.env.TRUST_PROXY ?? '1', 10), @@ -15,7 +15,7 @@ export default registerAs('app', () => ({ redis: { host: process.env.REDIS_HOST ?? 'localhost', - port: parseInt(process.env.REDIS_PORT ?? '6379', 10), + port: parseInt(process.env.REDIS_PORT ?? '3185', 10), }, rabbitmq: { @@ -23,7 +23,7 @@ export default registerAs('app', () => ({ }, cors: { - origins: (process.env.CORS_ORIGINS ?? 'http://localhost:3000').split(','), + origins: (process.env.CORS_ORIGINS ?? 'http://localhost:3010').split(','), }, throttle: { diff --git a/src/config/env.validation.ts b/src/config/env.validation.ts index 05dba4f..0802f10 100644 --- a/src/config/env.validation.ts +++ b/src/config/env.validation.ts @@ -4,7 +4,7 @@ export const envSchema = z.object({ NODE_ENV: z .enum(['development', 'production', 'test']) .default('development'), - PORT: z.coerce.number().int().positive().default(3000), + PORT: z.coerce.number().int().positive().default(3010), HOST: z.string().default('0.0.0.0'), TRUST_PROXY: z.coerce.number().int().min(0).default(1), @@ -19,15 +19,15 @@ export const envSchema = z.object({ POSTGRES_DB: z.string().min(1), REDIS_HOST: z.string().default('localhost'), - REDIS_PORT: z.coerce.number().int().positive().default(6379), + REDIS_PORT: z.coerce.number().int().positive().default(3185), RABBITMQ_USER: z.string().min(1), RABBITMQ_PASSWORD: z.string().min(1), RABBITMQ_HOST: z.string().default('localhost'), - RABBITMQ_PORT: z.coerce.number().int().positive().default(5672), + RABBITMQ_PORT: z.coerce.number().int().positive().default(3186), RABBITMQ_URL: z.string(), - CORS_ORIGINS: z.string().default('http://localhost:3000'), + CORS_ORIGINS: z.string().default('http://localhost:3010'), THROTTLE_TTL: z.coerce.number().int().positive().default(60), THROTTLE_LIMIT: z.coerce.number().int().positive().default(10),