{"id":25442086,"url":"https://github.com/vitalygashkov/messenger","last_synced_at":"2025-11-01T14:30:23.283Z","repository":{"id":224356145,"uuid":"763045979","full_name":"vitalygashkov/messenger","owner":"vitalygashkov","description":"A simple messenger made as homework in university in 2018","archived":false,"fork":false,"pushed_at":"2024-02-25T12:19:35.000Z","size":53,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"homework4","last_synced_at":"2024-02-25T14:41:44.072Z","etag":null,"topics":["expressjs","mongodb","socket-io"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vitalygashkov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-25T12:19:33.000Z","updated_at":"2024-02-25T14:41:47.196Z","dependencies_parsed_at":"2024-02-25T14:41:46.301Z","dependency_job_id":"f37cdc2b-d1bc-4c1f-ba5c-037a17947b57","html_url":"https://github.com/vitalygashkov/messenger","commit_stats":null,"previous_names":["vitalygashkov/messenger"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalygashkov%2Fmessenger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalygashkov%2Fmessenger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalygashkov%2Fmessenger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitalygashkov%2Fmessenger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vitalygashkov","download_url":"https://codeload.github.com/vitalygashkov/messenger/tar.gz/refs/heads/homework4","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239293932,"owners_count":19615043,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["expressjs","mongodb","socket-io"],"created_at":"2025-02-17T13:16:45.040Z","updated_at":"2025-11-01T14:30:23.224Z","avatar_url":"https://github.com/vitalygashkov.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Домашнее задание #4\n\nВ рамках последнего домашнего задания предлагается реализовать многопользовательский чат с использованием фреймворков Express.JS и Socket.IO. Данное задание довольно объёмно и можно создавать запрос на слияние до полного выполнения, например, после создания какой-либо одной части - серверной или клиентской.\n\nТак как данное задание представляет собой отдельное приложение, перед началом работы необходимо установить нужные зависимости с помощью следующей команды, выполненной в папке текущего задания:\n\n    npm install\n\n\n### Клиентская часть\n\nНеобходимо реализовать одну HTML-страницу с двумя режимами:\n\n- режим входа, где можно будет ввести имя пользователя для использования его в чате\n- режим непосредственного обмена сообщениями\n\nПосле ввода имени пользователя в поле должен выполняться AJAX-запрос на сервер для проверки имени. В случае, если имя уже используется, должно показываться соответствующее сообщение. Если всё в порядке - должен осуществляться переход к обмену сообщениями.\n\n\n### Серверная часть\n\nСерверная часть должна обрабатывать два вида обращений от пользователей:\n\n- AJAX-запросы для проверки имени пользователя\n- сообщения для пересылки с использованием сокетов\n\nВ чате возможны следующие события:\n- при получении сообщения, оно должно отправляться всем пользователям, подключенным к серверу\n- при подключении или отключении пользователя всем должно отправляться соответствующее сообщение\n\n\n### Использование БД\n\nНа данном этапе необходимо доработать приложение, добавив в него возможность регистрации пользователей, во время которой можно указать имя пользователя и пароль для входа в чат. При входе в чат должны проверяться имя и пароль и при успешной проверке переходить к обмену сообщениями, а в случае ошибки - показывать соответствующее сообщение пользователю.\n\nВ качестве СУБД для хранения данных можно использовать одну из следующих:\n\n- MongoDB: https://www.mongodb.com, http://mongodb.github.io/node-mongodb-native/3.1/\n- Redis: https://redis.io, http://redis.js.org\n- PostgreSQL: https://www.postgresql.org, https://node-postgres.com\n\nВ зависимости от выбранной СУБД потребуется запустить один из Docker-контейнеров. Скрипты для локального запуска контейнеров расположены в папке `database`. Выбрав одну из СУБД необходимо перейти в соответствующую подпапку в папке `database` и выполнить команду:\n\n    docker-compose up\n\nПосле запуска контейнера можно запускать приложений, работающее с СУБД. Сведения для подключения к серверам:\n\n__MongoDB__\n\n- сервер: `localhost`\n- порт: `27017`\n- пользователь: `user`\n- пароль: `password`\n- база данных: `default`\n\n__Redis__\n\n- сервер: `localhost`\n- порт: `6479`\n\n__PostgreSQL__\n\n- сервер: `localhost`\n- порт: `5432`\n- пользователь: `user`\n- пароль: `password`\n- база данных: `default`\n\n\n### Дополнительные задания\n\n#### Задания для реализации\n\nПосле успешного выполнения основной части задания можно добавить что-либо из следующего функционала:\n\n- показывать сообщение, что тот или иной пользователь пишет сообщение\n- показать список пользователей, подключенных к чату\n- добавить возможность отправки приватных сообщений\n- что-то ещё на ваше усмотрение...\n\n#### Задания по развёртыванию\n\nДанное задание будет интересно, если вы хотите познакомиться с контейнеризацией и процессом развёртывания приложений в \"облаке\" на базе платформы OpenShift.\n\nПрежде всего необходимо зарегистрироваться на следующих страницах:\n\n- Docker Hub: https://hub.docker.com/\n- OpenShift: https://manage.openshift.com/register/confirm\n\n\n__Формирование Docker-контейнера__\n\nПеред развёртывание приложения для общего доступа необходимо создать контейнер, в котором оно будет храниться и \"доставляться\" на сервер. Для этого используется файл `Dockerfile`, расположенный в папке с данным заданием (можете ознакомиться с его содержимым перед выполнением дальнейших инструкций).\n\nВыполняем сборку контейнера:\n\n    docker build -t \u003cusername\u003e/\u003capp\u003e:\u003cversion\u003e .\n\n_Примечания:_\n\n- `username` - это ваше имя пользователя в Docker Hub  \n- `app` - наименование приложения (здесь и далее оно должно совпадать, например, `chat-web-app`)\n- `version` - версия контейнера (может быть любой, например, `first-test`)\n\nЗаходим в Docker Hub и создаём новый репозиторий: https://hub.docker.com/add/repository/ с именем, совпадающим с наименованием приложения, использованным в предыдущей команде.\n\nПосле этого авторизуемся в Docker Hub из командной строки:\n\n    docker login --username=\u003cusername\u003e --email=\u003cemail\u003e\n\nИ отправляем созданный контейнер:\n\n    docker push \u003cusername\u003e/\u003capp\u003e\n\n\n__Развёртывание Docker-контейнера на платформе OpenShift__\n\nПосле успешной публикации контейнера необходимо авторизоваться в OpenShift и перейти в консоль, где создать новый проект с любым именем. Когда проект будет создан можно будет добавить в него опубликованный контейнер, используя кнопку `Deploy image`.\n\nВ открывшемся окне развёртывания контейнера необходимо указать полное наименование, предварительно установив переключатель в значение `Image name`. Полное наименование контейнера следующее:\n\n    \u003cusername\u003e/\u003capp\u003e:\u003cversion\u003e\n\nПосле этого нужно нажать кнопку поиска для загрузки описания вашего контейнера. Если загрузка и проверка данных пройдет успешно - станет доступна кнопка `Deploy`, по нажатию на которую будет выполнено развёртывание контейнера.\n\nЧерез несколько минут приложение будет развёрнуто. Для доступа к нему через Интернет, необходимо добавить маршрутизацию, перейдя по ссылке `Create Route` и, ничего не изменяя, нажав `Create`. После этого для приложения будет создана внешняя ссылка, по которой его можно открыть в браузере.\n\nПри необходимости таким же образом можно в рамках того же проекта в консоли развернуть контейнер с СУБД для хранения данных. Наименования контейнеров для СУБД и дополнительные параметры следующие:\n\n__MongoDB__\n\n- контейнер: `bitnami/mongodb:latest`\n- переменные среды (environment variables):\n    - `MONGODB_USERNAME`: `user`\n    - `MONGODB_PASSWORD`: `password`\n    - `MONGODB_DATABASE`: `default`\n\n__Redis__\n\n- контейнер: `redis`\n\n__PostgreSQL__\n\n- контейнер: `postgres`\n- переменные среды (environment variables):\n    - `POSTGRES_USER`: `user`\n    - `POSTGRES_PASSWORD`: `password`\n    - `POSTGRES_DB`: `default`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitalygashkov%2Fmessenger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvitalygashkov%2Fmessenger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvitalygashkov%2Fmessenger/lists"}