mirror of https://github.com/lukechilds/polar.git
jamaljsr
5 years ago
11 changed files with 321 additions and 6 deletions
@ -0,0 +1,24 @@ |
|||||
|
FROM debian:stable-slim |
||||
|
|
||||
|
ARG BITCOIN_VERSION |
||||
|
ENV PATH=/opt/bitcoin-${BITCOIN_VERSION}/bin:$PATH |
||||
|
|
||||
|
RUN useradd -r bitcoin \ |
||||
|
&& apt-get update -y \ |
||||
|
&& apt-get install -y curl gosu \ |
||||
|
&& apt-get clean \ |
||||
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
||||
|
|
||||
|
RUN curl -SLO https://bitcoin.org/bin/bitcoin-core-${BITCOIN_VERSION}/bitcoin-${BITCOIN_VERSION}-x86_64-linux-gnu.tar.gz \ |
||||
|
&& tar -xzf *.tar.gz -C /opt \ |
||||
|
&& rm *.tar.gz |
||||
|
|
||||
|
COPY docker-entrypoint.sh /entrypoint.sh |
||||
|
|
||||
|
VOLUME ["/home/bitcoin/.bitcoin"] |
||||
|
|
||||
|
EXPOSE 8332 8333 18332 18333 18443 18444 |
||||
|
|
||||
|
ENTRYPOINT ["/entrypoint.sh"] |
||||
|
|
||||
|
CMD ["bitcoind"] |
@ -0,0 +1,16 @@ |
|||||
|
#!/bin/sh |
||||
|
set -e |
||||
|
|
||||
|
if [ $(echo "$1" | cut -c1) = "-" ]; then |
||||
|
echo "$0: assuming arguments for bitcoind" |
||||
|
|
||||
|
set -- bitcoind "$@" |
||||
|
fi |
||||
|
|
||||
|
if [ "$1" = "bitcoind" ] || [ "$1" = "bitcoin-cli" ] || [ "$1" = "bitcoin-tx" ]; then |
||||
|
echo |
||||
|
exec gosu bitcoin "$@" |
||||
|
fi |
||||
|
|
||||
|
echo |
||||
|
exec "$@" |
@ -0,0 +1,90 @@ |
|||||
|
version: '3.3' |
||||
|
services: |
||||
|
bitcoind: |
||||
|
image: bitcoind:0.18.0 |
||||
|
container_name: bitcoind |
||||
|
user: bitcoin |
||||
|
# Note: need to escape the dollar sign ($$) in rpcauth. there is only one in the actual password |
||||
|
command: bitcoind |
||||
|
-server=1 |
||||
|
-regtest=1 |
||||
|
-rpcauth=kiteuser:d81315a082bcf36bcdcd640e816566f3$$a7a42c95772b9e7461f016a8c797f5729b494ad569555aea28f5c42ee2b3fcda |
||||
|
-debug=0 |
||||
|
-zmqpubrawblock=tcp://0.0.0.0:28334 |
||||
|
-zmqpubrawtx=tcp://0.0.0.0:28335 |
||||
|
-txindex=1 |
||||
|
-dnsseed=0 |
||||
|
-upnp=0 |
||||
|
-rpcbind=0.0.0.0 |
||||
|
-rpcallowip=0.0.0.0/0 |
||||
|
volumes: |
||||
|
- ${PWD}/_data/bitcoind:/home/bitcoin/.bitcoin |
||||
|
expose: |
||||
|
- '18443' # RPC |
||||
|
- '18444' # p2p |
||||
|
- '28334' # ZMQ blocks |
||||
|
- '28335' # ZMQ txns |
||||
|
ports: |
||||
|
- '18443:18443' # RPC |
||||
|
- '28334:28334' # ZMQ blocks |
||||
|
- '28335:28335' # ZMQ txns |
||||
|
|
||||
|
alice: |
||||
|
image: lnd:0.7.1-beta |
||||
|
container_name: lnd_alice |
||||
|
user: lnd |
||||
|
command: wait-for-it bitcoind:18443 -- lnd |
||||
|
--noseedbackup |
||||
|
--tlsextradomain=lnd |
||||
|
--listen=0.0.0.0:9735 |
||||
|
--rpclisten=0.0.0.0:10009 |
||||
|
--restlisten=0.0.0.0:8080 |
||||
|
--bitcoin.active |
||||
|
--bitcoin.regtest |
||||
|
--bitcoin.node=bitcoind |
||||
|
--bitcoind.rpchost=bitcoind |
||||
|
--bitcoind.rpcuser=kiteuser |
||||
|
--bitcoind.rpcpass=kitepass |
||||
|
--bitcoind.zmqpubrawblock=tcp://bitcoind:28334 |
||||
|
--bitcoind.zmqpubrawtx=tcp://bitcoind:28335 |
||||
|
restart: always |
||||
|
volumes: |
||||
|
- ${PWD}/_data/lnd/alice:/home/lnd/.lnd |
||||
|
expose: |
||||
|
- '10000' # gRPC |
||||
|
- '8080' # REST |
||||
|
- '9735' # p2p |
||||
|
ports: |
||||
|
- '11001:10000' # gRPC |
||||
|
- '8001:8080' # REST |
||||
|
- '9001:9735' # p2p |
||||
|
|
||||
|
bob: |
||||
|
image: lnd:0.7.1-beta |
||||
|
container_name: lnd_bob |
||||
|
user: lnd |
||||
|
command: wait-for-it bitcoind:18443 -- lnd |
||||
|
--noseedbackup |
||||
|
--tlsextradomain=lnd |
||||
|
--listen=0.0.0.0:9735 |
||||
|
--rpclisten=0.0.0.0:10009 |
||||
|
--restlisten=0.0.0.0:8080 |
||||
|
--bitcoin.active |
||||
|
--bitcoin.regtest |
||||
|
--bitcoin.node=bitcoind |
||||
|
--bitcoind.rpchost=bitcoind |
||||
|
--bitcoind.rpcuser=kiteuser |
||||
|
--bitcoind.rpcpass=kitepass |
||||
|
--bitcoind.zmqpubrawblock=tcp://bitcoind:28334 |
||||
|
--bitcoind.zmqpubrawtx=tcp://bitcoind:28335 |
||||
|
restart: always |
||||
|
volumes: |
||||
|
- ${PWD}/_data/lnd/bob:/home/lnd/.lnd |
||||
|
expose: |
||||
|
- '10000' # gRPC |
||||
|
- '8080' # REST |
||||
|
- '9735' # p2p |
||||
|
ports: |
||||
|
- '11002:10000' # gRPC |
||||
|
- '8002:8080' # REST |
||||
|
- '9002:9735' # p2p |
@ -0,0 +1,24 @@ |
|||||
|
FROM debian:stable-slim |
||||
|
|
||||
|
ARG LND_VERSION |
||||
|
ENV PATH=/opt/lnd-linux-amd64-v${LND_VERSION}:$PATH |
||||
|
|
||||
|
RUN useradd -r lnd \ |
||||
|
&& apt-get update -y \ |
||||
|
&& apt-get install -y curl gosu wait-for-it \ |
||||
|
&& apt-get clean \ |
||||
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
||||
|
|
||||
|
RUN curl -SLO https://github.com/lightningnetwork/lnd/releases/download/v${LND_VERSION}/lnd-linux-amd64-v${LND_VERSION}.tar.gz \ |
||||
|
&& tar -xzf *.tar.gz -C /opt \ |
||||
|
&& rm *.tar.gz |
||||
|
|
||||
|
COPY docker-entrypoint.sh /entrypoint.sh |
||||
|
|
||||
|
VOLUME ["/home/lnd/.lnd"] |
||||
|
|
||||
|
EXPOSE 8332 8333 18332 18333 18443 18444 |
||||
|
|
||||
|
ENTRYPOINT ["/entrypoint.sh"] |
||||
|
|
||||
|
CMD ["lnd"] |
@ -0,0 +1,16 @@ |
|||||
|
#!/bin/sh |
||||
|
set -e |
||||
|
|
||||
|
if [ $(echo "$1" | cut -c1) = "-" ]; then |
||||
|
echo "$0: assuming arguments for lnd" |
||||
|
|
||||
|
set -- lnd "$@" |
||||
|
fi |
||||
|
|
||||
|
if [ "$1" = "lnd" ] || [ "$1" = "lncli" ]; then |
||||
|
echo |
||||
|
exec gosu lnd "$@" |
||||
|
fi |
||||
|
|
||||
|
echo |
||||
|
exec "$@" |
@ -0,0 +1,41 @@ |
|||||
|
/* eslint-disable @typescript-eslint/camelcase */ |
||||
|
import { bitcoind, lnd } from './nodeTemplates'; |
||||
|
|
||||
|
export interface ComposeService { |
||||
|
[key: string]: { |
||||
|
image: string; |
||||
|
container_name: string; |
||||
|
user: string; |
||||
|
command: string; |
||||
|
volumes: string[]; |
||||
|
expose: string[]; |
||||
|
ports: string[]; |
||||
|
restart?: 'always'; |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
export interface ComposeContent { |
||||
|
version: string; |
||||
|
services: ComposeService[]; |
||||
|
} |
||||
|
|
||||
|
class ComposeFile { |
||||
|
content: ComposeContent; |
||||
|
|
||||
|
constructor() { |
||||
|
this.content = { |
||||
|
version: '3.3', |
||||
|
services: [], |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
addBitcoind(name: string) { |
||||
|
this.content.services.push(bitcoind(name)); |
||||
|
} |
||||
|
|
||||
|
addLnd(name: string) { |
||||
|
this.content.services.push(lnd(name)); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export default ComposeFile; |
@ -0,0 +1,20 @@ |
|||||
|
import ComposeFile from './ComposeFile'; |
||||
|
|
||||
|
class NetworkManager { |
||||
|
start(network: Network) { |
||||
|
this._buildComposeFile(network); |
||||
|
} |
||||
|
|
||||
|
private _buildComposeFile(network: Network) { |
||||
|
const file = new ComposeFile(); |
||||
|
network.nodes.bitcoin.forEach(node => { |
||||
|
file.addBitcoind(node.name); |
||||
|
}); |
||||
|
network.nodes.lightning.forEach(node => { |
||||
|
file.addLnd(node.name); |
||||
|
}); |
||||
|
console.log(JSON.stringify(file.content, null, 2)); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export default new NetworkManager(); |
@ -0,0 +1,74 @@ |
|||||
|
/* eslint-disable @typescript-eslint/camelcase */ |
||||
|
/* eslint-disable no-template-curly-in-string */ |
||||
|
import { ComposeService } from './ComposeFile'; |
||||
|
|
||||
|
const trimInside = (text: string): string => text.replace(/\s+/g, ' ').trim(); |
||||
|
|
||||
|
export const bitcoind = (name: string): ComposeService => ({ |
||||
|
bitcoind: { |
||||
|
image: 'bitcoind:0.18.0', |
||||
|
container_name: name, |
||||
|
user: 'bitcoin', |
||||
|
command: trimInside(` |
||||
|
bitcoind |
||||
|
-server=1 |
||||
|
-regtest=1 |
||||
|
-rpcauth=kiteuser:d81315a082bcf36bcdcd640e816566f3$$a7a42c95772b9e7461f016a8c797f5729b494ad569555aea28f5c42ee2b3fcda |
||||
|
-debug=0 |
||||
|
-zmqpubrawblock=tcp://0.0.0.0:28334
|
||||
|
-zmqpubrawtx=tcp://0.0.0.0:28335
|
||||
|
-txindex=1 |
||||
|
-dnsseed=0 |
||||
|
-upnp=0 |
||||
|
-rpcbind=0.0.0.0 |
||||
|
-rpcallowip=0.0.0.0/0 |
||||
|
`),
|
||||
|
volumes: ['${PWD}/_data/bitcoind:/home/bitcoin/.bitcoin'], |
||||
|
expose: [ |
||||
|
'18443', // RPC
|
||||
|
'18444', // p2p
|
||||
|
'28334', // ZMQ blocks
|
||||
|
'28335', // ZMQ txns
|
||||
|
], |
||||
|
ports: [ |
||||
|
'18443:18443', // RPC
|
||||
|
'28334:28334', // ZMQ blocks
|
||||
|
'28335:28335', // ZMQ txns
|
||||
|
], |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
export const lnd = (name: string): ComposeService => ({ |
||||
|
lnd: { |
||||
|
image: 'lnd:0.7.1-beta', |
||||
|
container_name: name, |
||||
|
user: 'lnd', |
||||
|
command: trimInside(` |
||||
|
wait-for-it bitcoind:18443 -- lnd |
||||
|
--noseedbackup |
||||
|
--tlsextradomain=lnd |
||||
|
--listen=0.0.0.0:9735 |
||||
|
--rpclisten=0.0.0.0:10009 |
||||
|
--restlisten=0.0.0.0:8080 |
||||
|
--bitcoin.active |
||||
|
--bitcoin.regtest |
||||
|
--bitcoin.node=bitcoind |
||||
|
--bitcoind.rpchost=bitcoind |
||||
|
--bitcoind.rpcuser=kiteuser |
||||
|
--bitcoind.rpcpass=kitepass |
||||
|
--bitcoind.zmqpubrawblock=tcp://bitcoind:28334
|
||||
|
--bitcoind.zmqpubrawtx=tcp://bitcoind:28335
|
||||
|
`),
|
||||
|
volumes: ['${PWD}/_data/lnd/alice:/home/lnd/.lnd'], |
||||
|
expose: [ |
||||
|
'10000', // gRPC
|
||||
|
'8080', // REST
|
||||
|
'9735', // p2p
|
||||
|
], |
||||
|
ports: [ |
||||
|
'11001:10000', // gRPC
|
||||
|
'8001:8080', // REST
|
||||
|
'9001:9735', // p2p
|
||||
|
], |
||||
|
}, |
||||
|
}); |
Loading…
Reference in new issue