Skip to content

LeTraceurSnorkLibrary/MessSaga

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MessSaga

Coverage Status

Веб-приложение для импорта и просмотра переписок из мессенджеров (Telegram, WhatsApp, Viber). Laravel + Inertia + Vue.


Требования

  • PHP 8.2+
  • Composer
  • Node.js 18+ и npm
  • MySQL 8+ (или MariaDB) — сервер должен быть запущен, база создана до make setup / make migrate

Запуск с нуля (только что склонировали репозиторий)

1. Одна команда — полная установка

make setup

Эта команда по очереди:

  1. Копирует .env.example в .env, если файла .env ещё нет.
  2. Генерирует APP_KEY в .env.
  3. Для SQLite создаёт файл database/database.sqlite (для MySQL базу нужно создать вручную заранее).
  4. Ставит PHP-зависимости (composer install).
  5. Ставит Node-зависимости (npm install --legacy-peer-deps).
  6. Запускает миграции (php artisan migrate).
  7. Собирает фронтенд (npm run build).

После этого проект готов к запуску.


Docker (production-образ и деплой)

В проект добавлен production-ready Dockerfile в docker/Dockerfile (Laravel + собранные Vite-ассеты).

1. Сборка образа

make docker-build

или напрямую:

docker build -t messsaga-app:latest -f docker/Dockerfile .

2. Запуск контейнера приложения (если БД внешняя)

make docker-up

или напрямую:

docker run --rm -p 8080:80 --env-file .env messsaga-app:latest

Если БД не в контейнере приложения, укажите в .env внешний DB_HOST.

3. Полный стек через compose (app + queue + mysql)

Быстрый запуск через Makefile:

make docker-up

или напрямую:

docker compose up -d --build

Это поднимет:

  • app (HTTP на порту ${SERVER_PORT} из .env, по умолчанию 8080)
  • queue (воркер php artisan queue:work)
  • mysql (внутри compose-сети)

Важно: для deploy-стека app и queue принудительно используют MySQL (через docker-compose.yml), чтобы оба контейнера работали с одной очередью.

4. Миграции внутри контейнера

docker compose exec app php artisan migrate --force

Остановить deploy-стек:

make docker-down

5. Тюнинг под инстанс

  • Порт снаружи меняется в docker-compose.yml (7500:80 или другой указанный в .env).
  • Переменные окружения задаются через .env/env_file.
  • Для отдельного процесса очередей можно масштабировать queue:
docker compose up -d --scale queue=2

2. Запуск приложения

Вариант А — всё в одном терминале (удобно для разработки):

make run

Поднимаются: Laravel-сервер, воркер очередей, лог и Vite. Откройте в браузере адрес, который выведет скрипт (обычно http://127.0.0.1:8000).

Вариант Б — в разных терминалах:

# Терминал 1 — сервер
make serve

# Терминал 2 — очередь (обработка импорта чатов)
make queue

# Терминал 3 — фронтенд с hot reload
make dev

Сервер по умолчанию на порту 8000. Другой порт: PORT=8080 make serve.


Почему появляется ошибка про APP_KEY?

В репозитории нет файла .env (он в .gitignore). В нём хранятся секреты и настройки окружения.

В .env.example лежит шаблон, где APP_KEY пустой. Laravel требует непустой APP_KEY для шифрования сессий, cookies и т.п. Если ключа нет, приложение выдаёт ошибку вроде:

No application encryption key has been specified.

Что сделать: один раз сгенерировать ключ:

cp .env.example .env
php artisan key:generate

Либо просто выполнить make setup — он сам создаёт .env и запускает key:generate.


База данных

По умолчанию — MySQL

В .env заданы параметры MySQL:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=messsaga
DB_USERNAME=root
DB_PASSWORD=

Перед первым запуском:

  1. Запустите сервер MySQL (или MariaDB).

  2. Создайте базу (один раз):

    CREATE DATABASE messsaga CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  3. В .env укажите правильные DB_USERNAME и DB_PASSWORD, если отличаются от root и пустого пароля.

  4. Выполните make setup или make migrate.

SQLite (опционально)

Чтобы использовать SQLite вместо MySQL:

  1. В .env задайте:

    DB_CONNECTION=sqlite
    # DB_HOST=127.0.0.1
    # DB_PORT=3306
    # DB_DATABASE=messsaga
    # DB_USERNAME=root
    # DB_PASSWORD=
  2. Создайте файл БД и выполните миграции:

    make db-create
    make migrate

Хранение медиа (S3 / MinIO)

Медиа-вложения можно хранить не локально, а в S3-совместимом хранилище.

  1. В .env задайте:
MEDIA_DISK=s3
AWS_ACCESS_KEY_ID=minioadmin
AWS_SECRET_ACCESS_KEY=minioadmin
AWS_DEFAULT_REGION=ru-central1
AWS_BUCKET=messsaga-media
AWS_ENDPOINT=http://127.0.0.1:9000
AWS_URL=http://127.0.0.1:9000/messsaga-media
AWS_USE_PATH_STYLE_ENDPOINT=true
  1. Поднимите MinIO в dev-профиле compose:
docker compose --profile dev up -d minio minio-init

После этого приложение продолжит отдавать вложения через защищённый API-роут, но сами файлы будут храниться в S3-совместимом бакете.

Для продакшна с Яндекс Object Storage используются те же переменные AWS_* (endpoint/region/bucket/credentials), обычно с MEDIA_DISK=s3.


Полезные команды (Makefile)

Команда Описание
make setup Полная установка с нуля (.env, ключ, БД, зависимости, миграции, сборка).
make run Запуск всего: сервер + очередь + Vite + логи.
make serve Только Laravel-сервер.
make queue Воркер очередей (импорт чатов).
make dev Vite в режиме разработки (hot reload).
make build Сборка фронтенда для production.
make docker-build Сборка Docker-образа приложения (messsaga-app:latest).
make docker-up Поднять deploy-стек Docker (app + queue + mysql).
make docker-down Остановить deploy-стек Docker.
make db-create Создать database/database.sqlite при использовании SQLite.
make migrate Выполнить миграции.
make fresh Сбросить БД и заново выполнить миграции.
make test Запуск тестов.
make logs Просмотр логов в реальном времени.
make clear Очистка кэша приложения.
make help Список всех целей.

Если что-то пошло не так

  • «No application encryption key» — выполните php artisan key:generate или заново make setup.
  • Ошибки при миграции / «could not find driver» — для MySQL нужен PHP-модуль pdo_mysql. Для SQLite — pdo_sqlite.
  • «SQLSTATE[HY000] [1049] Unknown database» — создайте базу MySQL: CREATE DATABASE messsaga CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • Очередь не обрабатывает импорт — должен быть запущен воркер: make queue или make run.
  • После pull не работают стили/скрипты — пересоберите фронтенд: npm install --legacy-peer-deps && make build.

Стек

  • Backend: Laravel 12, PHP 8.2+
  • Frontend: Vue 3, Inertia.js, Vite
  • БД по умолчанию: MySQL (опционально SQLite)
  • Очереди: database driver (таблица jobs)

About

Service to keep all of your messages from different messengers/socials

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors