Como criar um Relay Nostr privado no Windows.
Neste simples tutorial, vou lhe mostrar como instalar de forma fácil como instalar um Relay Nostr privado com o Docker e Tailscale.
O que você precisa para instalar um Relay Nostr Privado no Windows?
Docker é um sistema de containers, tailscale é pra você ter acesso ao seu relay através da vpn
Configurando o Docker
Não vou entrar no mérito da instalação do Docker que é bem simples, porém, vou deixar as configurações gerais que usei aqui.
Configurando Tailscale VPN
O Tailscale vai servir para você ter acesso ao seu Relay de qualquer lugar desde que você esteja conectado à VPN.
Aqui as configurações são simples, no menu DNS (pelo computador), habilite o MagicDNS e HTTPS Certificates.
Configurando Nostream
Neste exemplo vou usar como base para configuração do Relay, o caminho (c:\apps)
Crie uma pasta chamada: apps na raiz do seu drive C:
Faça download do Nostream e salve dentro da pasta apps.
Pronto você já tem o código do Relay dentro da pasta apps.
Vamos gerar as chaves HTTPS da máquina no Tailscale VPN.
Abra o terminal CMD e navegue para a pasta apps, exemplo do comando :
cd c:\apps
Rode o comando para obter o certificado https da sua máquina.
tailscale cert
O Tailscale irá gerar certificado da sua máquina, algo como:
test.taild350d.ts.net.key e test.taild350d.ts.net.crt
"test" é o nome da sua máquina e taild350d.ts.net vem do "tailnet name" dentro do Tailscale no menu DNS.
Vamos criar uma pasta core com as subpastas dentro de c:\apps
\---core
+---domains
| \---test.taild350d.ts.net
| +---certs
| \---log
+---environment
| \---nginx
| \---sites-enabled
| test.taild350d.ts.net.conf
Vamos executar o comando abaixo partindo de c:\apps
mkdir core && cd core && mkdir domains && cd domains && mkdir test.taild350d.ts.net && cd test.taild350d.ts.net && mkdir certs && mkdir log && cd ../../ && mkdir environment && cd environment && mkdir nginx && cd nginx && mkdir sites-enabled && cd sites-enabled && type NUL > test.taild350d.ts.net.conf && cd ../../../../
Copie as chaves test.taild350d.ts.net.key e test.taild350d.ts.net.crt para dentro da pasta certs core/domains/test.taild350d.ts.net/certs
Atualize as configurações do nginx dentro do arquivo environment/nginx/sites-enabled/test.taild350d.ts.net.conf
server {
listen 80;
listen [::]:80;
server_name test.taild350d.ts.net;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name test.taild350d.ts.net;
ssl_certificate /etc/nginx/certs/test.taild350d.ts.net.crt;
ssl_certificate_key /etc/nginx/certs/test.taild350d.ts.net.key;
# ssl_protocols TLSv1.2;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!RC4:!3DES:!aDSS:!aNULL:!kPSK:!kSRP:!MD5:@STRENGTH:+SHA1:+kRSA;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://nostream:8008;
proxy_read_timeout 90;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
}
Vamos atualizar o docker-compose.yml dentro da pasta nostream-main.
A intenção aqui é adicionar o nginx para o relay.
Vou deixar a configuração completa do docker-compose.yml, porém, só fiz uma alteração no final do arquivo antes de networks, adicionei o nostream-nginx
services:
nostream:
build: .
container_name: nostream
environment:
RELAY_PORT: 8008
# Master
NOSTR_CONFIG_DIR: /home/node/.nostr
DB_HOST: nostream-db
DB_PORT: 5432
DB_USER: nostr_ts_relay
DB_PASSWORD: nostr_ts_relay
DB_NAME: nostr_ts_relay
DB_MIN_POOL_SIZE: 16
DB_MAX_POOL_SIZE: 64
DB_ACQUIRE_CONNECTION_TIMEOUT: 60000
# Read Replica
READ_REPLICA_ENABLED: 'false'
RR_DB_HOST: db
RR_DB_PORT: 5432
RR_DB_USER: nostr_ts_relay
RR_DB_PASSWORD: nostr_ts_relay
RR_DB_NAME: nostr_ts_relay
RR_DB_MIN_POOL_SIZE: 16
RR_DB_MAX_POOL_SIZE: 64
RR_DB_ACQUIRE_CONNECTION_TIMEOUT: 10000
# Redis
REDIS_HOST: nostream-cache
REDIS_PORT: 6379
REDIS_USER: default
REDIS_PASSWORD: nostr_ts_relay
TOR_HOST: tor_proxy
TOR_CONTROL_PORT: 9051
TOR_PASSWORD: nostr_ts_relay
HIDDEN_SERVICE_PORT: 80
# Enable DEBUG for troubleshooting. Examples:
# DEBUG: "primary:*"
# DEBUG: "worker:*"
# DEBUG: "knex:query"
user: node:node
volumes:
- ${PWD}/.nostr:/home/node/.nostr
ports:
- 8008:8008
depends_on:
nostream-cache:
condition: service_healthy
nostream-db:
condition: service_healthy
nostream-migrate:
condition: service_completed_successfully
restart: on-failure
networks:
default:
nostream-db:
image: postgres
container_name: nostream-db
environment:
POSTGRES_DB: nostr_ts_relay
POSTGRES_USER: nostr_ts_relay
POSTGRES_PASSWORD: nostr_ts_relay
volumes:
- ${PWD}/.nostr/data:/var/lib/postgresql/data
- ${PWD}/.nostr/db-logs:/var/log/postgresql
- ${PWD}/postgresql.conf:/postgresql.conf
networks:
default:
command: postgres -c 'config_file=/postgresql.conf'
restart: always
healthcheck:
test: ["CMD-SHELL", "pg_isready -U nostr_ts_relay"]
interval: 5s
timeout: 5s
retries: 5
start_period: 360s
ports:
- 5432:5432
nostream-cache:
image: redis:7.0.5-alpine3.16
container_name: nostream-cache
volumes:
- cache:/data
command: redis-server --loglevel warning --requirepass nostr_ts_relay
networks:
default:
restart: always
healthcheck:
test: [ "CMD", "redis-cli", "ping", "|", "grep", "PONG" ]
interval: 1s
timeout: 5s
retries: 5
nostream-migrate:
image: node:18-alpine3.16
container_name: nostream-migrate
environment:
DB_HOST: nostream-db
DB_PORT: 5432
DB_USER: nostr_ts_relay
DB_PASSWORD: nostr_ts_relay
DB_NAME: nostr_ts_relay
entrypoint:
- sh
- -c
- 'cd code && npm install --no-save --quiet knex@2.4.0 pg@8.8.0 && npx knex migrate:latest'
volumes:
- ./migrations:/code/migrations
- ./knexfile.js:/code/knexfile.js
depends_on:
nostream-db:
condition: service_healthy
networks:
default:
ipv4_address: 10.10.10.254
nostream-nginx:
image: 'nginx:latest'
restart: always
ports:
- '80:80'
- '443:443'
volumes:
- '../core/environment/nginx/sites-enabled:/etc/nginx/conf.d'
- '../core/domains/test.taild350d.ts.net/certs:/etc/nginx/certs'
- '../core/domains/test.taild350d.ts.net/log:/var/log/nginx'
extra_hosts:
- "test.taild350d.ts.net:host-gateway"
networks:
default:
name: nostream
ipam:
driver: default
config:
- subnet: 10.10.10.0/24
volumes:
cache:
Todas as configurações acima foram feitas a partir do nome da máquina "test" e o Tailnet name taild350d.ts.net mude para as suas configurações.
Agora vamos rodar o nosso relay.
Abra o cmd novamente e execute o comando:
cd c:\apps\nostream-main\ && docker-compose up -d
Feito isso o Docker irá baixar as dependências e iniciar os serviços.
Testando configurações do Relay
Acesse o site: https://websocketking.com/ e insira o endereço abaixo e clique em Connect:
wss://test.taild350d.ts.net
A cada atualização do nostream você terá que mudar as configurações do docker-compose.yml adicionando o nostream-nginx.
Essa configuração acima foi feita de forma básica, você também poderá utilizar git e outros métodos para rodar o Relay.
Dúvidas? Comente abaixo!