An open API service indexing awesome lists of open source software.

https://github.com/vitalygashkov/messenger

A simple messenger made as homework in university in 2018
https://github.com/vitalygashkov/messenger

expressjs mongodb socket-io

Last synced: 8 months ago
JSON representation

A simple messenger made as homework in university in 2018

Awesome Lists containing this project

README

          

## Домашнее задание #4

В рамках последнего домашнего задания предлагается реализовать многопользовательский чат с использованием фреймворков Express.JS и Socket.IO. Данное задание довольно объёмно и можно создавать запрос на слияние до полного выполнения, например, после создания какой-либо одной части - серверной или клиентской.

Так как данное задание представляет собой отдельное приложение, перед началом работы необходимо установить нужные зависимости с помощью следующей команды, выполненной в папке текущего задания:

npm install

### Клиентская часть

Необходимо реализовать одну HTML-страницу с двумя режимами:

- режим входа, где можно будет ввести имя пользователя для использования его в чате
- режим непосредственного обмена сообщениями

После ввода имени пользователя в поле должен выполняться AJAX-запрос на сервер для проверки имени. В случае, если имя уже используется, должно показываться соответствующее сообщение. Если всё в порядке - должен осуществляться переход к обмену сообщениями.

### Серверная часть

Серверная часть должна обрабатывать два вида обращений от пользователей:

- AJAX-запросы для проверки имени пользователя
- сообщения для пересылки с использованием сокетов

В чате возможны следующие события:
- при получении сообщения, оно должно отправляться всем пользователям, подключенным к серверу
- при подключении или отключении пользователя всем должно отправляться соответствующее сообщение

### Использование БД

На данном этапе необходимо доработать приложение, добавив в него возможность регистрации пользователей, во время которой можно указать имя пользователя и пароль для входа в чат. При входе в чат должны проверяться имя и пароль и при успешной проверке переходить к обмену сообщениями, а в случае ошибки - показывать соответствующее сообщение пользователю.

В качестве СУБД для хранения данных можно использовать одну из следующих:

- MongoDB: https://www.mongodb.com, http://mongodb.github.io/node-mongodb-native/3.1/
- Redis: https://redis.io, http://redis.js.org
- PostgreSQL: https://www.postgresql.org, https://node-postgres.com

В зависимости от выбранной СУБД потребуется запустить один из Docker-контейнеров. Скрипты для локального запуска контейнеров расположены в папке `database`. Выбрав одну из СУБД необходимо перейти в соответствующую подпапку в папке `database` и выполнить команду:

docker-compose up

После запуска контейнера можно запускать приложений, работающее с СУБД. Сведения для подключения к серверам:

__MongoDB__

- сервер: `localhost`
- порт: `27017`
- пользователь: `user`
- пароль: `password`
- база данных: `default`

__Redis__

- сервер: `localhost`
- порт: `6479`

__PostgreSQL__

- сервер: `localhost`
- порт: `5432`
- пользователь: `user`
- пароль: `password`
- база данных: `default`

### Дополнительные задания

#### Задания для реализации

После успешного выполнения основной части задания можно добавить что-либо из следующего функционала:

- показывать сообщение, что тот или иной пользователь пишет сообщение
- показать список пользователей, подключенных к чату
- добавить возможность отправки приватных сообщений
- что-то ещё на ваше усмотрение...

#### Задания по развёртыванию

Данное задание будет интересно, если вы хотите познакомиться с контейнеризацией и процессом развёртывания приложений в "облаке" на базе платформы OpenShift.

Прежде всего необходимо зарегистрироваться на следующих страницах:

- Docker Hub: https://hub.docker.com/
- OpenShift: https://manage.openshift.com/register/confirm

__Формирование Docker-контейнера__

Перед развёртывание приложения для общего доступа необходимо создать контейнер, в котором оно будет храниться и "доставляться" на сервер. Для этого используется файл `Dockerfile`, расположенный в папке с данным заданием (можете ознакомиться с его содержимым перед выполнением дальнейших инструкций).

Выполняем сборку контейнера:

docker build -t /: .

_Примечания:_

- `username` - это ваше имя пользователя в Docker Hub
- `app` - наименование приложения (здесь и далее оно должно совпадать, например, `chat-web-app`)
- `version` - версия контейнера (может быть любой, например, `first-test`)

Заходим в Docker Hub и создаём новый репозиторий: https://hub.docker.com/add/repository/ с именем, совпадающим с наименованием приложения, использованным в предыдущей команде.

После этого авторизуемся в Docker Hub из командной строки:

docker login --username= --email=

И отправляем созданный контейнер:

docker push /

__Развёртывание Docker-контейнера на платформе OpenShift__

После успешной публикации контейнера необходимо авторизоваться в OpenShift и перейти в консоль, где создать новый проект с любым именем. Когда проект будет создан можно будет добавить в него опубликованный контейнер, используя кнопку `Deploy image`.

В открывшемся окне развёртывания контейнера необходимо указать полное наименование, предварительно установив переключатель в значение `Image name`. Полное наименование контейнера следующее:

/:

После этого нужно нажать кнопку поиска для загрузки описания вашего контейнера. Если загрузка и проверка данных пройдет успешно - станет доступна кнопка `Deploy`, по нажатию на которую будет выполнено развёртывание контейнера.

Через несколько минут приложение будет развёрнуто. Для доступа к нему через Интернет, необходимо добавить маршрутизацию, перейдя по ссылке `Create Route` и, ничего не изменяя, нажав `Create`. После этого для приложения будет создана внешняя ссылка, по которой его можно открыть в браузере.

При необходимости таким же образом можно в рамках того же проекта в консоли развернуть контейнер с СУБД для хранения данных. Наименования контейнеров для СУБД и дополнительные параметры следующие:

__MongoDB__

- контейнер: `bitnami/mongodb:latest`
- переменные среды (environment variables):
- `MONGODB_USERNAME`: `user`
- `MONGODB_PASSWORD`: `password`
- `MONGODB_DATABASE`: `default`

__Redis__

- контейнер: `redis`

__PostgreSQL__

- контейнер: `postgres`
- переменные среды (environment variables):
- `POSTGRES_USER`: `user`
- `POSTGRES_PASSWORD`: `password`
- `POSTGRES_DB`: `default`