diff --git a/.env.example b/.env.example index 49527ca..f1e5fb4 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,10 @@ +# bitcoin node running in your private network 192.168.1.0/24 BITCOIN_RPC_URL=http://192.168.1.100 + +# bitcoin node running undockered on the same PC +# needs to add rpcallowip=172.16.0.0/12 to your bitcoin.conf +#BITCOIN_RPC_URL=http://host.docker.internal + BITCOIN_RPC_USER= BITCOIN_RPC_PASSWORD= BITCOIN_RPC_PORT=8332 @@ -31,4 +37,4 @@ ENABLE_PROXY=true BRAIINS_ACCESS_TOKEN= -PROXY_PORT=3333 \ No newline at end of file +PROXY_PORT=3333 diff --git a/README.md b/README.md index 73c15c9..2808c89 100644 --- a/README.md +++ b/README.md @@ -53,14 +53,37 @@ Build container: $ docker build -t public-pool . ``` -Run container (with default configuration): - -```bash -$ docker container run --name public-pool --rm -p 3333:3333 -p 3334:3334 -p 8332:8332 public-pool -``` - -Run container (with custom configuration): +Run container: ```bash $ docker container run --name public-pool --rm -p 3333:3333 -p 3334:3334 -p 8332:8332 -v .env:.env public-pool ``` + +### Docker Compose + +Build container: +```bash +$ docker compose build +``` + +Run container: +```bash +$ docker compose up -d +``` + +The docker-compose binds to `127.0.0.1` by default. To expose the Stratum services on your server change: +```diff + ports: +- - "127.0.0.1:3333:3333/tcp" +- - "127.0.0.1:3334:3334/tcp" ++ - "3333" ++ - "3334" +``` + +**note**: To successfully connect to the bitcoin RPC you will need to add + +``` +rpcallowip=172.16.0.0/12 +``` + +to your bitcoin.conf. \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..8fb0927 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,20 @@ +version: '3.8' + +services: + public-pool: + container_name: public-pool + build: + context: . + dockerfile: Dockerfile + restart: unless-stopped + extra_hosts: + - "host.docker.internal:host-gateway" + ports: + - "127.0.0.1:${STRATUM_PORT}:${STRATUM_PORT}/tcp" + - "127.0.0.1:${API_PORT}:${API_PORT}/tcp" + volumes: + - "./${NETWORK}-DB:/public-pool/DB" + - "./.env:/public-pool/.env:ro" + environment: + - NODE_ENV=production + diff --git a/src/main.ts b/src/main.ts index f785ac5..9485205 100644 --- a/src/main.ts +++ b/src/main.ts @@ -43,6 +43,11 @@ async function bootstrap() { process.exit(0); }); + process.on('SIGTERM', () => { + console.log(`Stopping services`); + process.exit(0); + }); + app.enableCors(); useContainer(app.select(AppModule), { fallbackOnErrors: true }); diff --git a/src/services/bitcoin-rpc.service.ts b/src/services/bitcoin-rpc.service.ts index 69ec03d..d2bee67 100644 --- a/src/services/bitcoin-rpc.service.ts +++ b/src/services/bitcoin-rpc.service.ts @@ -37,7 +37,7 @@ export class BitcoinRpcService { this.pollMiningInfo(); } else { setInterval(this.pollMiningInfo.bind(this), 500); - } + } } public async pollMiningInfo() { @@ -60,7 +60,7 @@ export class BitcoinRpcService { } }); } catch (e) { - console.log('Error getblocktemplate'); + console.error('Error getblocktemplate:' ,e.message); throw new Error('Error getblocktemplate'); } console.log(`getblocktemplate tx count: ${result.transactions.length}`); @@ -71,7 +71,7 @@ export class BitcoinRpcService { try { return await this.client.getmininginfo(); } catch (e) { - console.log('Error getmininginfo'); + console.error('Error getmininginfo', e.message); return null; }