From 117fa960070932ed44f22075a175108c0304c1da Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 5 Aug 2019 10:33:23 +0100 Subject: [PATCH] WIP on docker-compose workflow --- docker/compose/bootstrap.Dockerfile | 19 +++++++ docker/compose/bootstrap.ini | 76 ++++++++++++++++++++++++++ docker/compose/docker-compose.yml | 59 +++++++++++++++++++++ docker/compose/router.Dockerfile | 19 +++++++ docker/compose/router.ini | 82 +++++++++++++++++++++++++++++ docker/router.Dockerfile | 3 +- 6 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 docker/compose/bootstrap.Dockerfile create mode 100644 docker/compose/bootstrap.ini create mode 100644 docker/compose/docker-compose.yml create mode 100644 docker/compose/router.Dockerfile create mode 100644 docker/compose/router.ini diff --git a/docker/compose/bootstrap.Dockerfile b/docker/compose/bootstrap.Dockerfile new file mode 100644 index 000000000..b95851c18 --- /dev/null +++ b/docker/compose/bootstrap.Dockerfile @@ -0,0 +1,19 @@ +ARG LOKINET_NETID=docker + +FROM alpine:edge as builder + +RUN apk update && \ + apk add build-base cmake git libcap-dev libcap-static libuv-dev libuv-static curl ninja bash binutils-gold + +WORKDIR /src/ +COPY . /src/ + +RUN make NINJA=ninja STATIC_LINK=ON BUILD_TYPE=Release + +FROM alpine:latest + +COPY ./docker/compose/bootstrap.ini /root/.lokinet/lokinet.ini +COPY --from=builder /src/build/lokinet . + +CMD ["./lokinet"] +EXPOSE 1090/udp 1190/tcp diff --git a/docker/compose/bootstrap.ini b/docker/compose/bootstrap.ini new file mode 100644 index 000000000..6b01cb265 --- /dev/null +++ b/docker/compose/bootstrap.ini @@ -0,0 +1,76 @@ +# this configuration was auto generated with 'sane' defaults +# change these values as desired + + +[router] +# number of crypto worker threads +threads=4 +# path to store signed RC +contact-file=/root/.lokinet/self.signed +# path to store transport private key +transport-privkey=/root/.lokinet/transport.private +# path to store identity signing key +ident-privkey=/root/.lokinet/identity.private +# encryption key for onion routing +encryption-privkey=/root/.lokinet/encryption.private + +# uncomment following line to set router nickname to 'lokinet' +#nickname=lokinet + + +[logging] +level=info +# uncomment for logging to file +#type=file +#file=/path/to/logfile +# uncomment for syslog logging +#type=syslog + +[metrics] +json-metrics-path=/root/.lokinet/metrics.json + +# admin api (disabled by default) +[api] +enabled=true +#authkey=insertpubkey1here +#authkey=insertpubkey2here +#authkey=insertpubkey3here +bind=127.0.0.1:1190 + +# system settings for privileges and such +[system] +user=lokinet +group=lokinet +pidfile=/root/.lokinet/lokinet.pid + +# dns provider configuration section +[dns] +# resolver +upstream=1.1.1.1 +bind=127.3.2.1:53 + +# network database settings block +[netdb] +# directory for network database skiplist storage +dir=/netdb + +# lokid settings (disabled by default) +[lokid] +enabled=false +jsonrpc=127.0.0.1:22023 +#service-node-seed=/path/to/servicenode/seed + +# network settings +[network] +profiles=/root/.lokinet/profiles.dat +enabled=true +exit=false +#exit-blacklist=tcp:25 +#exit-whitelist=tcp:* +#exit-whitelist=udp:* +ifaddr=10.200.0.1/8 +ifname=loki-docker0 + +# ROUTERS ONLY: publish network interfaces for handling inbound traffic +[bind] +eth0=1090 diff --git a/docker/compose/docker-compose.yml b/docker/compose/docker-compose.yml new file mode 100644 index 000000000..a88028e83 --- /dev/null +++ b/docker/compose/docker-compose.yml @@ -0,0 +1,59 @@ +version: '3.2' +services: + bootstrap-router: + build: + context: . + dockerfile: docker/compose/bootstrap.Dockerfile + image: bootstrap + cap_add: + - NET_ADMIN + devices: + - "/dev/net/tun:/dev/net/tun" + ports: + - target: 1090 + protocol: udp + mode: host + - target: 1190 + protocol: tcp + mode: host + volumes: + - bootstrap-dir:/root/.lokinet/ + environment: + - LOKINET_NETID=docker + networks: + testing_net: + + router: + depends_on: + - bootstrap-router + build: + context: . + dockerfile: docker/compose/router.Dockerfile + image: router + devices: + - "/dev/net/tun:/dev/net/tun" + ports: + - target: 1090 + protocol: udp + mode: host + - target: 1190 + protocol: tcp + mode: host + cap_add: + - NET_ADMIN + volumes: + - bootstrap-dir:/bootstrap/ + environment: + - LOKINET_NETID=docker + networks: + testing_net: + +volumes: + bootstrap-dir: + +networks: + testing_net: + ipam: + driver: default + config: + - subnet: 172.28.0.0/16 diff --git a/docker/compose/router.Dockerfile b/docker/compose/router.Dockerfile new file mode 100644 index 000000000..a934c2a7d --- /dev/null +++ b/docker/compose/router.Dockerfile @@ -0,0 +1,19 @@ +ARG LOKINET_NETID=docker + +FROM alpine:edge as builder + +RUN apk update && \ + apk add build-base cmake git libcap-dev libcap-static libuv-dev libuv-static curl ninja bash binutils-gold + +WORKDIR /src/ +COPY . /src/ + +RUN make NINJA=ninja STATIC_LINK=ON BUILD_TYPE=Release + +FROM alpine:latest + +COPY ./docker/compose/router.ini /root/.lokinet/lokinet.ini +COPY --from=builder /src/build/lokinet . + +CMD ["./lokinet"] +EXPOSE 1090/udp 1190/tcp diff --git a/docker/compose/router.ini b/docker/compose/router.ini new file mode 100644 index 000000000..873bb617c --- /dev/null +++ b/docker/compose/router.ini @@ -0,0 +1,82 @@ +# this configuration was auto generated with 'sane' defaults +# change these values as desired + + +[router] +# number of crypto worker threads +threads=4 +# path to store signed RC +contact-file=/root/.lokinet/self.signed +# path to store transport private key +transport-privkey=/root/.lokinet/transport.private +# path to store identity signing key +ident-privkey=/root/.lokinet/identity.private +# encryption key for onion routing +encryption-privkey=/root/.lokinet/encryption.private + +# uncomment following line to set router nickname to 'lokinet' +#nickname=lokinet + + +[logging] +level=info +# uncomment for logging to file +#type=file +#file=/path/to/logfile +# uncomment for syslog logging +#type=syslog + +[metrics] +json-metrics-path=/root/.lokinet/metrics.json + +# admin api (disabled by default) +[api] +enabled=true +#authkey=insertpubkey1here +#authkey=insertpubkey2here +#authkey=insertpubkey3here +bind=127.0.0.1:1190 + +# system settings for privileges and such +[system] +user=lokinet +group=lokinet +pidfile=/root/.lokinet/lokinet.pid + +# dns provider configuration section +[dns] +# resolver +upstream=1.1.1.1 +bind=127.3.2.1:53 + +# network database settings block +[netdb] +# directory for network database skiplist storage +dir=/netdb + +# bootstrap settings +[bootstrap] +# add a bootstrap node's signed identity to the list of nodes we want to bootstrap from +# if we don't have any peers we connect to this router +add-node=/bootstrap/self.signed + +# lokid settings (disabled by default) +[lokid] +enabled=false +jsonrpc=127.0.0.1:22023 +#service-node-seed=/path/to/servicenode/seed + +# network settings +[network] +profiles=/root/.lokinet/profiles.dat +enabled=true +exit=false +#exit-blacklist=tcp:25 +#exit-whitelist=tcp:* +#exit-whitelist=udp:* +ifaddr=10.200.0.1/8 +ifname=loki-docker0 + +# ROUTERS ONLY: publish network interfaces for handling inbound traffic +[bind] +eth0=1090 diff --git a/docker/router.Dockerfile b/docker/router.Dockerfile index 7e0c00549..33c913bdf 100644 --- a/docker/router.Dockerfile +++ b/docker/router.Dockerfile @@ -1,3 +1,4 @@ +ARG bootstrap="https://i2p.rocks/i2procks.signed" FROM alpine:edge as builder RUN apk update && \ @@ -7,7 +8,7 @@ WORKDIR /src/ COPY . /src/ RUN make NINJA=ninja STATIC_LINK=ON BUILD_TYPE=Release -RUN ./lokinet-bootstrap +RUN ./lokinet-bootstrap ${bootstrap} FROM alpine:latest