https://github.com/lagden/boilerplate-ws
Boilerplate para desenvolvimento de Websocket.
https://github.com/lagden/boilerplate-ws
boilerplate nodejs uwebsockets websocket
Last synced: 10 months ago
JSON representation
Boilerplate para desenvolvimento de Websocket.
- Host: GitHub
- URL: https://github.com/lagden/boilerplate-ws
- Owner: lagden
- Created: 2022-05-06T18:19:11.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-04-11T13:37:38.000Z (about 2 years ago)
- Last Synced: 2025-04-04T00:41:18.288Z (about 1 year ago)
- Topics: boilerplate, nodejs, uwebsockets, websocket
- Language: JavaScript
- Homepage:
- Size: 14.6 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Boilerplate Websocket Server
[![Build Status][ci-img]][ci] [![Coverage Status][coveralls-img]][coveralls]
[ci-img]: https://github.com/lagden/boilerplate-ws/actions/workflows/nodejs.yml/badge.svg
[ci]: https://github.com/lagden/boilerplate-ws/actions/workflows/nodejs.yml
[coveralls-img]: https://coveralls.io/repos/github/lagden/boilerplate-ws/badge.svg?branch=main
[coveralls]: https://coveralls.io/github/lagden/boilerplate-ws?branch=main
Boilerplate para desenvolvimento de uma aplicação.
- [Instalação](#instalação)
- [Como utilizar](#como-utilizar)
- [watch](#watch)
- [teste](#teste)
- [Imagem](#imagem)
- [Deploy](#deploy)
- [Exemplo](#exemplo)
- [Middlewares](#middlewares)
- [License](#license)
## Instalação
Utilize `@tadashi/boilerplate-create` para iniciar o projeto.
```
npm i -g @tadashi/boilerplate-create
boilerplate-create
```
ou
```
npx --yes @tadashi/boilerplate-create
```
E siga as instruções do prompt.
## Como utilizar
Após finalizado o `scaffolding` do projeto, instale os pacotes.
```shell
bin/node/pkg.js
bin/node/zera
```
Feito isso, o projeto está pronto para funcionar.
Para rodar **local**, utilize:
```shell
bin/local/start
```
E via **docker**, utilize:
```shell
bin/docker/start
```
> [!IMPORTANT]
> No **docker**, caso seja instalado um novo pacote, é necessário fazer o `build` da imagem novamente.
Pare o container (`bin/docker/stop` ou `control + c`) e rode novamente passando o parâmetro `-b`:
```shell
bin/docker/start -b
```
### watch
O **watch** reinicia a aplicação caso ocorra alguma alteração.
Rodando via **docker** isso ocorre por padrão, mas **local** é necessário fazer algumas instalações e configurações.
```shell
bin/local/start -w
```
### teste
Para executar os testes.
**local:**
```shell
bin/local/test
```
**docker:**
```shell
bin/docker/test
```
## Imagem
Crie os arquivos de usuário e senha do **registry** que serão utilizados para fazer o `push` da imagem.
```shell
echo 'username' > .registry-user
echo 'password' > .registry-passwd
```
Verifique as suas variáveis de ambiente `.env-*`.
E para fazer o `push` da imagem de sua aplicação, execute:
```shell
bin/docker/image -e production
```
## Deploy
Para executar o **deploy** é necessário alguns binários instalados:
- **envsubst** by Bruno Haible
- **rsync** by Andrew Tridgell, Wayne Davison and others
O fluxo do sistema de **deploy** é simples:
1. Carrega as variáveis de ambiente (`staging` ou `production`)
2. Executa o script `bin/docker/image` (se passado o parâmetro `-i` esse processo é ignorado)
3. Cria o arquivo `docker-compose-{VERSION}.yml` utilizando o **envsubst**
4. Envia os arquivos para o servidor via **rsync**
5. Executa o `docker stack deploy` no servidor
```shell
bin/docker/deploy -e production
```
## Exemplo
Utilize o [wscat](https://www.npmjs.com/package/wscat).
```shell
npm i -g wscat
```
Abra um shell e execute:
```
wscat -c 'ws://[::1]:5001/?access_token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwiaWQiOiI2MjcxYmFiNWY2N2U5Y2NkNDkwMzNhYmIifQ.hmoUE_vayFKMKGz0v9iPLfIuneklDkL_qnD2n5QVKrYXmUwUqoJlSKGgafXIQGlyFxNZTucE8z8qdSRHZ-IXRQ'
Connected (press CTRL+C to quit)
> {"action": "direct", "message": "Olá", "to": "6271bab5f67e9ccd49033abc"}
> {"action": "me", "message": "Espelho, espelho meu!!"}
> {"action": "broadcast", "message": "Olá pessoal!"}
```
Em outro shell:
```
wscat -c 'ws://[::1]:5001/?access_token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsYmVydG8gUm9iZXJ0byIsImFkbWluIjp0cnVlLCJpYXQiOjE1MTYyMzkwMjIsImlkIjoiNjI3MWJhYjVmNjdlOWNjZDQ5MDMzYWJjIn0.CEoDPZn3IRrP4Cob6V_C41FxiqZoNkI6maN6c9tvfMrzw8gB5WWxBSiGdUWJ9HF4drPJANgEvfHKL8C0gNeuxA'
Connected (press CTRL+C to quit)
< {"action": "direct", "message": "Bãooo?", "to": "6271bab5f67e9ccd49033abb"}
> {"action": "broadcast", "message": "ihhhhulll!!!"}
```
## Buy me a coffee
BTC: bc1q7famhuj5f25n6qvlm3sssnymk2qpxrfwpyq7g4
## License
MIT © [Thiago Lagden](https://github.com/lagden)