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
- Host: GitHub
- URL: https://github.com/vitalygashkov/messenger
- Owner: vitalygashkov
- Created: 2024-02-25T12:19:33.000Z (over 2 years ago)
- Default Branch: homework4
- Last Pushed: 2024-02-25T12:19:35.000Z (over 2 years ago)
- Last Synced: 2024-02-25T14:41:44.072Z (over 2 years ago)
- Topics: expressjs, mongodb, socket-io
- Language: HTML
- Homepage:
- Size: 51.8 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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`