mirror of
https://github.com/fromchat-messenger/web.git
synced 2026-09-22 19:15:08 +03:00
Fix inter-services communication
This commit is contained in:
@@ -2,13 +2,15 @@
|
||||
-- This script creates dedicated users with limited privileges for each service
|
||||
|
||||
-- Create service-specific database roles with limited privileges
|
||||
CREATE ROLE account_service_user LOGIN PASSWORD 'account_service_password';
|
||||
CREATE ROLE profile_service_user LOGIN PASSWORD 'profile_service_password';
|
||||
CREATE ROLE device_service_user LOGIN PASSWORD 'device_service_password';
|
||||
CREATE ROLE messaging_service_user LOGIN PASSWORD 'messaging_service_password';
|
||||
CREATE ROLE push_service_user LOGIN PASSWORD 'push_service_user_password';
|
||||
CREATE ROLE webrtc_service_user LOGIN PASSWORD 'webrtc_service_password';
|
||||
CREATE ROLE moderation_service_user LOGIN PASSWORD 'moderation_service_password';
|
||||
-- All services use the same password from DB_PASSWORD environment variable
|
||||
CREATE ROLE account_service_user LOGIN PASSWORD '${DB_PASSWORD}';
|
||||
CREATE ROLE profile_service_user LOGIN PASSWORD '${DB_PASSWORD}';
|
||||
CREATE ROLE device_service_user LOGIN PASSWORD '${DB_PASSWORD}';
|
||||
CREATE ROLE messaging_service_user LOGIN PASSWORD '${DB_PASSWORD}';
|
||||
CREATE ROLE push_service_user LOGIN PASSWORD '${DB_PASSWORD}';
|
||||
CREATE ROLE webrtc_service_user LOGIN PASSWORD '${DB_PASSWORD}';
|
||||
CREATE ROLE moderation_service_user LOGIN PASSWORD '${DB_PASSWORD}';
|
||||
CREATE ROLE gateway_user LOGIN PASSWORD '${DB_PASSWORD}';
|
||||
|
||||
-- Create dedicated schemas for each service
|
||||
CREATE SCHEMA IF NOT EXISTS account_schema AUTHORIZATION account_service_user;
|
||||
|
||||
@@ -56,8 +56,17 @@ services:
|
||||
context: ..
|
||||
dockerfile: docker/Dockerfile.multi
|
||||
target: gateway
|
||||
ports: ["8300:8300"]
|
||||
environment:
|
||||
DATABASE_URL: postgresql://gateway_user:${DB_PASSWORD:-changeme}@database:5432/fromchat
|
||||
PORT: 8300
|
||||
ACCOUNT_SERVICE_URL: http://account_service:8302
|
||||
PROFILE_SERVICE_URL: http://profile_service:8303
|
||||
DEVICE_SERVICE_URL: http://device_service:8304
|
||||
MESSAGING_SERVICE_URL: http://messaging_service:8305
|
||||
PUSH_SERVICE_URL: http://push_service:8306
|
||||
WEBRTC_SERVICE_URL: http://webrtc_service:8307
|
||||
MODERATION_SERVICE_URL: http://moderation_service:8308
|
||||
depends_on:
|
||||
migration_runner:
|
||||
condition: service_completed_successfully
|
||||
@@ -95,6 +104,7 @@ services:
|
||||
environment:
|
||||
DATABASE_URL: postgresql://account_service_user:${DB_PASSWORD:-changeme}@database:5432/fromchat
|
||||
JWT_SECRET: ${JWT_SECRET:-changeme}
|
||||
PORT: 8302
|
||||
depends_on:
|
||||
migration_runner:
|
||||
condition: service_completed_successfully
|
||||
@@ -125,6 +135,8 @@ services:
|
||||
VAPID_PRIVATE_KEY: ${VAPID_PRIVATE_KEY:-}
|
||||
VAPID_PUBLIC_KEY: ${VAPID_PUBLIC_KEY:-}
|
||||
VAPID_SUBJECT: ${VAPID_SUBJECT:-mailto:admin@example.com}
|
||||
MESSAGING_SERVICE_URL: http://messaging_service:8305
|
||||
PORT: 8303
|
||||
depends_on:
|
||||
migration_runner:
|
||||
condition: service_completed_successfully
|
||||
@@ -151,6 +163,7 @@ services:
|
||||
target: device_service
|
||||
environment:
|
||||
DATABASE_URL: postgresql://device_service_user:${DB_PASSWORD:-changeme}@database:5432/fromchat
|
||||
PORT: 8304
|
||||
depends_on:
|
||||
migration_runner:
|
||||
condition: service_completed_successfully
|
||||
@@ -175,12 +188,16 @@ services:
|
||||
context: ..
|
||||
dockerfile: docker/Dockerfile.multi
|
||||
target: messaging_service
|
||||
ports:
|
||||
- "8305:8305"
|
||||
environment:
|
||||
DATABASE_URL: postgresql://messaging_service_user:${DB_PASSWORD:-changeme}@database:5432/fromchat
|
||||
FIREBASE_CERT: ${FIREBASE_CERT:-}
|
||||
VAPID_PRIVATE_KEY: ${VAPID_PRIVATE_KEY:-}
|
||||
VAPID_PUBLIC_KEY: ${VAPID_PUBLIC_KEY:-}
|
||||
VAPID_SUBJECT: ${VAPID_SUBJECT:-mailto:admin@example.com}
|
||||
PUSH_SERVICE_URL: http://push_service:8306
|
||||
PORT: 8305
|
||||
depends_on:
|
||||
migration_runner:
|
||||
condition: service_completed_successfully
|
||||
@@ -214,6 +231,7 @@ services:
|
||||
VAPID_PRIVATE_KEY: ${VAPID_PRIVATE_KEY:-}
|
||||
VAPID_PUBLIC_KEY: ${VAPID_PUBLIC_KEY:-}
|
||||
VAPID_SUBJECT: ${VAPID_SUBJECT:-mailto:admin@example.com}
|
||||
PORT: 8306
|
||||
depends_on:
|
||||
migration_runner:
|
||||
condition: service_completed_successfully
|
||||
@@ -243,6 +261,7 @@ services:
|
||||
target: webrtc_service
|
||||
environment:
|
||||
DATABASE_URL: postgresql://webrtc_service_user:${DB_PASSWORD:-changeme}@database:5432/fromchat
|
||||
PORT: 8307
|
||||
depends_on:
|
||||
migration_runner:
|
||||
condition: service_completed_successfully
|
||||
@@ -269,6 +288,7 @@ services:
|
||||
target: moderation_service
|
||||
environment:
|
||||
DATABASE_URL: postgresql://moderation_service_user:${DB_PASSWORD:-changeme}@database:5432/fromchat
|
||||
PORT: 8308
|
||||
depends_on:
|
||||
migration_runner:
|
||||
condition: service_completed_successfully
|
||||
@@ -315,6 +335,20 @@ services:
|
||||
- gateway
|
||||
profiles: ["prod"]
|
||||
|
||||
# Frontend service - serves the React app
|
||||
frontend:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: deployment/frontend/Dockerfile
|
||||
ports:
|
||||
- "8301:8301"
|
||||
environment:
|
||||
- PORT=8301
|
||||
- BACKEND_HOST=http://gateway:8300
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- fromchat_external
|
||||
|
||||
volumes:
|
||||
database:
|
||||
name: fromchat-database
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import express from 'express';
|
||||
import type { Request, Response } from 'express';
|
||||
import { createProxyMiddleware } from 'http-proxy-middleware';
|
||||
import { resolve } from 'path';
|
||||
|
||||
const app = express();
|
||||
const port = process.env.PORT || 3000;
|
||||
const port = Number(process.env.PORT) || 8301;
|
||||
const backendHost = process.env.BACKEND_HOST || "http://localhost:8300";
|
||||
const filePath = process.env.STATIC_FILE_PATH || ".";
|
||||
|
||||
@@ -15,14 +16,17 @@ app.use('/api', createProxyMiddleware({
|
||||
ws: true
|
||||
}));
|
||||
|
||||
// WebSockets are handled by the general API proxy above
|
||||
|
||||
// Serve static files
|
||||
app.use(express.static(resolve(filePath)));
|
||||
|
||||
// SPA routing - catch all handler for client-side routing
|
||||
app.use((_req, res) => {
|
||||
app.use((_req: Request, res: Response) => {
|
||||
res.sendFile(resolve(filePath, 'index.html'));
|
||||
});
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Server launched on http://localhost:${port}`);
|
||||
app.listen(port, '0.0.0.0', () => {
|
||||
console.log(`Backend host: ${backendHost}`);
|
||||
console.log(`Server launched on http://0.0.0.0:${port}`);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user