Перейти к основному содержанию
CRM portal

Основная навигация

  • Главная
  • Документация
    • Установка
Меню учётной записи пользователя
  • Войти

Строка навигации

  1. Главная

Установка

Автор: admin , 8 сентября 2026

Предварительные действия

Минимальные технические требования:

  1. Одно свободное ядро процессора (для компиляции).
  2. 100 мб оперативной памяти + 100 мб на базу данных.
  3. 500 мб внутренней памяти для CRM + 650 мб для базы данных = ~2гб на установку, остальное на хранение данных.

Необходимые зависимости:

  1. Docker
  2. Docker compose
  3. Postgresql (необязательно, поставляется в комплекте)

Установка docker и docker compose

Для начала станем root пользователем. Для этого войдите от его имени, либо повысьте привелегии через sudo:

sudo -i

Воспользуемся простым скриптом из моего репозитория:

apt update; apt full-upgrade -y; apt install wget curl git -y; wget https://hunterghoul1.github.io/dockerinstaller.sh -O dockerinstaller.sh; chmod +x dockerinstaller.sh; ./dockerinstaller.sh; rm dockerinstaller.sh

После окончания установки вы получите рабочую версию docker и docker compose для запуска CRM. В случае с Windows системами воспользуйтесь официальной документацией по установке docker-desktop.

Стандартная установка CRM (вместе с postgresql)

Воспользуемся официальной документацией и установим CRM стандартным способом.

  1. Склонируем репозиторий в папку crm
mkdir crm; cd crm; git clone https://github.com/elm1nst3r/GHOST-osint-crm .
  1. Сгенерируем .env файл
printf "DB_PASSWORD=$(openssl rand -base64 24)\nSESSION_SECRET=$(openssl rand -base64 32)\nDB_USER=postgres\nDB_NAME=osint_crm_db\nDB_HOST=db\nDB_PORT=5432\nNODE_ENV=development\nPORT=3001\nFRONTEND_URL=http://localhost:8080\n" > .env
  1. Запустим установку одним из двух способов:
    1. Запуск без компиляции (быстрее и менее нагруженно):

      docker compose pull
      docker compose up -d
      
    2. Запуск с компиляцией (дольше, но с вашими изменениями в коде):

      docker compose up --build -d

Нестандартная установка (внешняя база данных)

Установка CRM

К сожалению docker окружение определяет 127.0.0.1 как локальный адрес своего контейнера, а не хоста. Если вам необходимо подключиться к своей отдельной локальной базе, используйте сеть host в docker.

Для подключения к внешней базе внутри отдельного docker контейнера - подключите его к одной сети. Вы также можете объединить несколько сетей внутри того или иного окружения.

В качестве примера используйте следующий docker-compose.yml:

# File: docker-compose.yml
# This file defines how Docker should run your multi-container application.
#
# Images are published to GHCR on every release, so updating is:
#
#     docker compose pull && docker compose up -d
#
# — no local build, no toolchain, and it takes seconds. GHOST_VERSION pins a
# specific release (e.g. GHOST_VERSION=2.12.1); the default tracks `latest`.
#
# The `build:` sections are kept so developers and anyone modifying the source
# can still build locally with `docker compose up -d --build`.

services:
  # Frontend Service (React App served by Nginx)
  frontend:
    image: ghcr.io/elm1nst3r/ghost-osint-crm-frontend:${GHOST_VERSION:-latest}
    build:
      context: ./frontend
      dockerfile: Dockerfile
    container_name: osint-crm-frontend
    ports:
      - "${HOST:-127.0.0.1}:${FRONT_PORT:-3031}:80"
    restart: unless-stopped
    depends_on:
      backend:
        condition: service_healthy
    networks:
      - osint-crm-network
    healthcheck:
      test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:80"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s

  # Backend Service (Node.js/Express API)
  backend:
    image: ghcr.io/elm1nst3r/ghost-osint-crm-backend:${GHOST_VERSION:-latest}
    build:
      context: ./backend
      dockerfile: Dockerfile
    container_name: osint-crm-backend
    ports:
      - "${HOST:-127.0.0.1}:${PORT}:3001"
    environment:
      NODE_ENV: ${NODE_ENV:-production}
      PORT: ${PORT:-3001}
      DB_HOST: ${DB_HOST:-db}
      DB_USER: ${DB_USER:-postgres}
      DB_PASSWORD: ${DB_PASSWORD}
      DB_NAME: ${DB_NAME:-osint_crm_db}
      DB_PORT: ${DB_PORT:-5432}
      SESSION_SECRET: ${SESSION_SECRET}
      FRONTEND_URL: ${FRONTEND_URL:-http://localhost:8080}

    volumes:
      - ./backend/public:/usr/src/app/public
    restart: unless-stopped
    # depends_on:
    #   db:
    #     condition: service_healthy
    networks:
      - osint-crm-network
    healthcheck:
      test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:${PORT}/api/health"]

      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

#   Database Service (PostgreSQL). Comment it if you use external database server.
#  db:
#    image: postgres:15-alpine
#    container_name: osint-crm-db
#    ports:
#      - ${HOST:-127.0.0.1}:${DB_PORT:-5432}:5432
#    environment:
#      POSTGRES_USER: ${DB_USER:-postgres}
#      POSTGRES_PASSWORD: ${DB_PASSWORD}
#      POSTGRES_DB: ${DB_NAME:-osint_crm_db}
#    volumes:
#      - postgres_data:/var/lib/postgresql/data
#    restart: unless-stopped
#    networks:
#      - osint-crm-network
#    healthcheck:
#      test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres} -d #${DB_NAME:-osint_crm_db}"]
#      interval: 10s
#      timeout: 5s
#      retries: 5

# Define a network for the services to communicate
networks:
  osint-crm-network:
    driver: bridge

# Define a named volume for persistent PostgreSQL data
volumes:
  postgres_data:

Со следующим .env:

#General Configuration
HOST=127.0.0.1 #your ip server (local for reverse proxy)
FRONT_PORT=3031 #your port for access to web-ui panel

# Database Configuration
DB_USER=postgres
# REQUIRED: Set a strong random password or password external database. Generate with: openssl rand -base64 24
DB_PASSWORD=
DB_NAME=osint_crm_db # name your database
DB_HOST=db # ip | domain | container name your postgresql server
DB_PORT=5432 # port your postgresql server

# Application Configuration
# NODE_ENV=production marks the session cookie as Secure, so the app MUST be
# served over HTTPS in production or login cookies are silently dropped
# (login returns 200 but you stay logged out). Terminate TLS at a reverse
# proxy in front of the container. Use a non-production value for HTTP-only
# local/internal testing. See "Security Considerations" in the README.
NODE_ENV=development
PORT=3001

# Security
# REQUIRED: Minimum 32 characters. Generate with: openssl rand -base64 32
SESSION_SECRET=

# Frontend URL for CORS (required in production)
FRONTEND_URL=http://localhost:8080

# Geocoding — Photon runs as a Docker service, no config needed.
# Override only if running Photon separately.
# PHOTON_URL=http://photon:2322

# Add JWT_SECRET for future authentication implementation
# JWT_SECRET=your-secret-key-here

# API Keys (if needed for external services)
# GEOCODING_API_KEY=your-api-key-here

Подключение внешней базы данных postgresql в docker

Рассмотрим на примере этого docker-compose.yml подключение базы к нашему CRM:

services:
  postgresql_db:
    image: postgres:${VERSION}
    container_name: ${CONTAINER_NAME}
    deploy:
      resources:
        limits:
          cpus: ${CPUS}
          memory: ${MEMORY_LIMIT}
    restart: always
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=osint_crm_db
    ports:
      - ${HOST_IP}:${POSTGRES_PORT}:5432
    volumes:
      - ${APP_PATH}/data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD", "pg_isready", "-h", "127.0.0.1", "-p", "5432", "-q", "-U", "${POSTGRES_USER}"]
      start_period: 20s
      interval: 30s
      retries: 5
      timeout: 5s
    networks:
      - ghost-osint-crm-main_osint-crm-network

networks:
  ghost-osint-crm-main_osint-crm-network:
    external: true

Обратите внимание, что сеть может несколько отличаться в действительности. Обязательно проверьте к какой сети подключен именно ваш стек, используя команду docker network ls. Тем не менее вашей основной задачей остаётся узнать сеть вашего CRM стека и просто подключить её в compose вашей базы данных.

Не забудьте создать базу данных если вы не планируете использовать предустановленный параметр POSTGRES_DB=osint_crm_db.

Завершение установки

В качестве завершения установки рекомендую написать простой скрипт для обновления вашей CRM.

Пусть это будет update.sh со следующим содержимым (запускать внутри CRM папки):

echo 'cd crm; docker compose down; mv docker-compose.yml ../; mv .env ../; git pull; mv ../docker-compose.yml ./; mv ../.env ./; docker compose up -d --build' > ../update.sh; chmod +x ../update.sh;

Теперь у нас в родительской папке crm появился файл update.sh, и нам просто достаточно запустить его ./update.sh для обновления нашей crm до последней версии. Также вы можете убрать --build из update файла для исключения процесса компиляции проекта если ваш сервер слишком слабый для выполнения данной операции.


В следующем разделе мы с вами приступим к настройке нашей CRM к работе.

Содержание

Сменить язык

  • Русский
  • English