[ref] some improvements
This commit is contained in:
@@ -1,37 +1,70 @@
|
|||||||
# I2PD_YGGDRASIL_DOCKER
|
# 🌐🔒 I2P over Yggdrasil Network
|
||||||
|
|
||||||
## Description
|
## 📝 Description
|
||||||
|
|
||||||
This project is a set of tools for building [I2PD](https://i2pd.website/) over [YGGDRASIL](https://yggdrasil-network.github.io/) docker images.
|
A Docker container that runs [I2PD](https://i2pd.website/) over the [Yggdrasil](https://yggdrasil-network.github.io/) encrypted mesh network, providing enhanced anonymity and network resilience.
|
||||||
No clearnet for i2p, only yggdrasil!
|
|
||||||
|
No clearnet for I2P (Invisible Internet Project), only Yggdrasil!
|
||||||
|
|
||||||
|
## 🎯 Overview
|
||||||
|
|
||||||
|
This project creates a privacy-focused networking stack that combines:
|
||||||
|
|
||||||
|
- **I2P (Invisible Internet Project)**: An anonymous overlay network that focuses on secure and anonymous communication
|
||||||
|
- **Yggdrasil Network**: An early-stage implementation of an encrypted IPv6 routing network for mesh and point-to-point connectivity
|
||||||
|
|
||||||
|
### ✨ Key Features
|
||||||
|
|
||||||
|
- **Double Encryption** 🔒🔒: Traffic is encrypted through both Yggdrasil and I2P layers
|
||||||
|
- **Mesh Networking** 🕸️: Operates over Yggdrasil's peer-to-peer mesh network
|
||||||
|
- **Enhanced Anonymity** 🎭: I2P's anonymity features combined with Yggdrasil's encryption
|
||||||
|
- **Automatic Peer Discovery** 🔍: Automatically finds and connects to optimal Yggdrasil peers
|
||||||
|
- **Strong Cryptography** 🛡️: Generates cryptographically strong Yggdrasil addresses
|
||||||
|
|
||||||
|
## 🏗️ Architecture
|
||||||
|
|
||||||
At startup, the script searches YGGDRASIL public peers and chooses several best of them.
|
At startup, the script searches YGGDRASIL public peers and chooses several best of them.
|
||||||
Then it generates YGGDRASIL *PublicKey* and *PrivateKey* unless the keys not set in environment variables.
|
Then it generates YGGDRASIL *PublicKey* and *PrivateKey* unless the keys not set in environment variables.
|
||||||
|
|
||||||
## Preparations
|
+-------------------------+
|
||||||
|
| I2P Applications |
|
||||||
|
+-------------------------+
|
||||||
|
| I2P Routing Layer |
|
||||||
|
+-------------------------+
|
||||||
|
| Yggdrasil Network Layer |
|
||||||
|
+-------------------------+
|
||||||
|
| Physical Network |
|
||||||
|
+-------------------------+
|
||||||
|
|
||||||
Before building and deploying i2pd_yggdrasil docker image, you need to run the script
|
## 📋 Prerequisites
|
||||||
|
|
||||||
> bash support/requirements.sh
|
- Docker Engine 20.10+
|
||||||
|
- Docker Compose 2.0+
|
||||||
|
- Linux host (for TUN device access)
|
||||||
|
- IPv6 support enabled
|
||||||
|
|
||||||
## Building
|
## 🚀 Quick Start
|
||||||
|
|
||||||
You can build docker image by simply run script *make_i2pd_yggdrasil_docker_image.sh*.
|
1. **Clone and build** 📥:
|
||||||
|
```bash
|
||||||
|
chmod +x make_docker_image.sh
|
||||||
|
./make_docker_image.sh
|
||||||
|
```
|
||||||
|
|
||||||
> bash support/make_docker_image.sh
|
2. **Run with Docker Compose** 🏃♂️:
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
Feel free to modify it with your own building arguments.
|
3. **Access (I2P web console)[http://localhost:7070] to check I2P router state** 🌐:
|
||||||
|
```bash
|
||||||
|
# View I2P status
|
||||||
|
curl http://localhost:7070
|
||||||
|
```
|
||||||
|
|
||||||
## Running
|
## Security Considerations 🔒
|
||||||
|
|
||||||
To run docker container just use docker-compose like this
|
- The container runs with NET_ADMIN capabilities for TUN device access
|
||||||
|
- Yggdrasil keys are generated automatically on first run
|
||||||
> docker-compose -f src/docker-compose.yml up -d
|
- I2P is configured in floodfill mode by default (can be disabled)
|
||||||
|
- Both networks use strong encryption by default
|
||||||
## Deploy
|
|
||||||
|
|
||||||
To deploy built image to your host use script
|
|
||||||
|
|
||||||
> bash support/docker_deploy.sh
|
|
||||||
|
|
||||||
Note, this script takes parameters from *secrets/settings.json*, look *secrets/settings_pattern.json* for example.
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get -y upgrade
|
|
||||||
sudo apt-get install -y gcc
|
|
||||||
sudo apt-get install -y \
|
|
||||||
git \
|
|
||||||
make \
|
|
||||||
cmake \
|
|
||||||
debhelper
|
|
||||||
sudo apt-get install -y \
|
|
||||||
libboost-date-time-dev \
|
|
||||||
libboost-filesystem-dev \
|
|
||||||
libboost-program-options-dev \
|
|
||||||
libboost-system-dev \
|
|
||||||
libssl-dev \
|
|
||||||
zlib1g-dev
|
|
||||||
sudo apt-get install -y \
|
|
||||||
libminiupnpc-dev
|
|
||||||
mkdir /tmp/BUILD_I2PD/
|
|
||||||
cd /tmp/BUILD_I2PD/
|
|
||||||
git clone --depth 1 --branch 2.58.0 https://github.com/PurpleI2P/i2pd.git
|
|
||||||
cd /tmp/BUILD_I2PD/i2pd/build
|
|
||||||
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_AESNI=ON -DWITH_UPNP=ON .
|
|
||||||
make
|
|
||||||
|
|
||||||
sudo apt-get install -y golang
|
|
||||||
mkdir /tmp/BUILD_YGGDRASIL/
|
|
||||||
cd /tmp/BUILD_YGGDRASIL/
|
|
||||||
git clone --depth 1 --branch $YGGDRASIL_VERSION https://github.com/yggdrasil-network/yggdrasil-go.git
|
|
||||||
ENV CGO_ENABLED=0
|
|
||||||
cd /tmp/BUILD_YGGDRASIL/yggdrasil-go
|
|
||||||
sed -i -e 's/yggdrasil yggdrasilctl/yggdrasil yggdrasilctl genkeys/g' build
|
|
||||||
./build
|
|
||||||
|
|
||||||
sudo apt-get install -y \
|
|
||||||
libminiupnpc17 \
|
|
||||||
git python3 python3-pip iputils-ping
|
|
||||||
mkdir /opt/I2PD/
|
|
||||||
cd /opt/I2PD/
|
|
||||||
cp /opt/BUILD_I2PD/i2pd/build/i2pd .
|
|
||||||
cp /opt/BUILD_I2PD/i2pd/contrib/certificates ./certificates
|
|
||||||
cp /tmp/i2pd_yggdrasil_docker/i2pd.conf .
|
|
||||||
ulimit -n 4096
|
|
||||||
|
|
||||||
mkdir /opt/YGGDRASIL/
|
|
||||||
cd /opt/YGGDRASIL/
|
|
||||||
cp /tmp/BUILD_YGGDRASIL/yggdrasil-go/yggdrasil .
|
|
||||||
cp /tmp/BUILD_YGGDRASIL/yggdrasil-go/yggdrasilctl .
|
|
||||||
cp /tmp/BUILD_YGGDRASIL/yggdrasil-go/genkeys .
|
|
||||||
cp /tmp/i2pd_yggdrasil_docker/yggdrasil.conf .
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
git config --global advice.detachedHead false
|
|
||||||
git clone --depth 1 --branch v0 https://github.com/oldnick85/yggdrasil_get_keys.git /tmp/yggdrasil_get_keys
|
|
||||||
python3 -m pip install -r /tmp/yggdrasil_get_keys/requirements.txt
|
|
||||||
python3 /tmp/yggdrasil_get_keys/yggdrasil_get_keys.py \
|
|
||||||
--genkeys="/opt/YGGDRASIL/genkeys" \
|
|
||||||
--yggdrasil-conf="/opt/YGGDRASIL/yggdrasil.conf" \
|
|
||||||
--timeout=60 \
|
|
||||||
--environment
|
|
||||||
rm -rf /tmp/yggdrasil_get_keys
|
|
||||||
git clone --depth 1 --branch v3 https://github.com/oldnick85/yggdrasil_find_public_peers.git /tmp/yggdrasil_find_public_peers
|
|
||||||
python3 -m pip install -r /tmp/yggdrasil_find_public_peers/requirements.txt
|
|
||||||
python3 /tmp/yggdrasil_find_public_peers/yggdrasil_find_public_peers.py \
|
|
||||||
--yggdrasil-conf="/opt/YGGDRASIL/yggdrasil.conf" \
|
|
||||||
--parallel=4 \
|
|
||||||
--pings=10 \
|
|
||||||
--best=5 \
|
|
||||||
--ping-interval=0.5
|
|
||||||
rm -rf yggdrasil_find_public_peers
|
|
||||||
sysctl net.ipv6.conf.all.disable_ipv6=0 || true
|
|
||||||
/opt/YGGDRASIL/yggdrasil -useconffile /opt/YGGDRASIL/yggdrasil.conf &
|
|
||||||
sleep 1m
|
|
||||||
/opt/I2PD/i2pd --datadir /opt/I2PD --conf /opt/I2PD/i2pd.conf &
|
|
||||||
wait -n
|
|
||||||
exit $?
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"deploy" :
|
|
||||||
{
|
|
||||||
"host" : "0.0.0.0",
|
|
||||||
"user" : "root",
|
|
||||||
"path" : "/opt"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+100
-82
@@ -1,120 +1,138 @@
|
|||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
ARG UBUNTU_VERSION=24.04
|
ARG UBUNTU_VERSION=24.04
|
||||||
|
|
||||||
|
# I2P build stage
|
||||||
FROM ubuntu:${UBUNTU_VERSION} AS builder_i2pd
|
FROM ubuntu:${UBUNTU_VERSION} AS builder_i2pd
|
||||||
ARG I2PD_VERSION=2.58.0
|
ARG I2PD_VERSION=2.58.0
|
||||||
ARG I2PD_COMPILER=gcc
|
ARG I2PD_COMPILER=gcc
|
||||||
RUN DEBIAN_FRONTEND=noninteractive \
|
|
||||||
apt-get update &&\
|
|
||||||
apt-get -y upgrade
|
|
||||||
RUN DEBIAN_FRONTEND=noninteractive \
|
|
||||||
apt-get install -y $I2PD_COMPILER
|
|
||||||
RUN DEBIAN_FRONTEND=noninteractive \
|
|
||||||
apt-get install -y \
|
|
||||||
git \
|
|
||||||
make \
|
|
||||||
cmake \
|
|
||||||
debhelper
|
|
||||||
RUN DEBIAN_FRONTEND=noninteractive \
|
|
||||||
apt-get install -y \
|
|
||||||
libboost-date-time-dev \
|
|
||||||
libboost-filesystem-dev \
|
|
||||||
libboost-program-options-dev \
|
|
||||||
libboost-system-dev \
|
|
||||||
libssl-dev \
|
|
||||||
zlib1g-dev
|
|
||||||
RUN DEBIAN_FRONTEND=noninteractive \
|
|
||||||
apt-get install -y \
|
|
||||||
libminiupnpc-dev
|
|
||||||
WORKDIR /BUILD_I2PD/
|
|
||||||
RUN git config --global advice.detachedHead false
|
|
||||||
RUN git clone --depth 1 --branch $I2PD_VERSION https://github.com/PurpleI2P/i2pd.git
|
|
||||||
WORKDIR /BUILD_I2PD/i2pd/build
|
|
||||||
RUN cmake -DCMAKE_BUILD_TYPE=Release -DWITH_AESNI=ON -DWITH_UPNP=ON .
|
|
||||||
RUN make
|
|
||||||
|
|
||||||
|
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
|
||||||
|
apt-get -y upgrade && \
|
||||||
|
apt-get install -y \
|
||||||
|
$I2PD_COMPILER \
|
||||||
|
git make cmake debhelper \
|
||||||
|
libboost-date-time-dev \
|
||||||
|
libboost-filesystem-dev \
|
||||||
|
libboost-program-options-dev \
|
||||||
|
libboost-system-dev \
|
||||||
|
libssl-dev \
|
||||||
|
zlib1g-dev \
|
||||||
|
libminiupnpc-dev && \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
WORKDIR /BUILD_I2PD/
|
||||||
|
RUN git config --global advice.detachedHead false && \
|
||||||
|
git clone --depth 1 --branch $I2PD_VERSION https://github.com/PurpleI2P/i2pd.git
|
||||||
|
|
||||||
|
WORKDIR /BUILD_I2PD/i2pd/build
|
||||||
|
RUN cmake -DCMAKE_BUILD_TYPE=Release -DWITH_AESNI=ON -DWITH_UPNP=ON . && \
|
||||||
|
make -j$(nproc)
|
||||||
|
|
||||||
|
# Yggdrasil build stage
|
||||||
FROM ubuntu:${UBUNTU_VERSION} as builder_yggdrasil
|
FROM ubuntu:${UBUNTU_VERSION} as builder_yggdrasil
|
||||||
ARG YGGDRASIL_VERSION=v0.5.12
|
ARG YGGDRASIL_VERSION=v0.5.12
|
||||||
RUN DEBIAN_FRONTEND=noninteractive \
|
|
||||||
apt-get update && \
|
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
|
||||||
apt-get -y upgrade
|
apt-get -y upgrade && \
|
||||||
RUN DEBIAN_FRONTEND=noninteractive \
|
apt-get install -y git golang && \
|
||||||
apt-get install -y git golang
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
WORKDIR /BUILD_YGGDRASIL/
|
WORKDIR /BUILD_YGGDRASIL/
|
||||||
RUN git config --global advice.detachedHead false
|
RUN git config --global advice.detachedHead false && \
|
||||||
RUN git clone --depth 1 --branch $YGGDRASIL_VERSION https://github.com/yggdrasil-network/yggdrasil-go.git
|
git clone --depth 1 --branch $YGGDRASIL_VERSION https://github.com/yggdrasil-network/yggdrasil-go.git
|
||||||
|
|
||||||
ENV CGO_ENABLED=0
|
ENV CGO_ENABLED=0
|
||||||
WORKDIR /BUILD_YGGDRASIL/yggdrasil-go
|
WORKDIR /BUILD_YGGDRASIL/yggdrasil-go
|
||||||
# add genkeys to build
|
# Add genkeys to build and build binaries
|
||||||
RUN sed -i -e 's/yggdrasil yggdrasilctl/yggdrasil yggdrasilctl genkeys/g' build
|
RUN sed -i 's/yggdrasil yggdrasilctl/yggdrasil yggdrasilctl genkeys/g' build && \
|
||||||
RUN ./build
|
./build
|
||||||
# script to get strong yggdrasil address (https://yggdrasil-network.github.io/configuration.html#generating-stronger-addresses-and-prefixes)
|
|
||||||
RUN git clone --depth 1 --branch v0 https://github.com/oldnick85/yggdrasil_get_keys.git /UTILS/yggdrasil_get_keys
|
|
||||||
RUN rm -rf /UTILS/yggdrasil_get_keys/.git
|
|
||||||
# script to find yggdrasil public peers
|
|
||||||
RUN git clone --depth 1 --branch v4 https://github.com/oldnick85/yggdrasil_find_public_peers.git /UTILS/yggdrasil_find_public_peers
|
|
||||||
RUN rm -rf /UTILS/yggdrasil_find_public_peers/.git
|
|
||||||
|
|
||||||
|
# Utility scripts for enhanced Yggdrasil functionality
|
||||||
|
RUN git clone --depth 1 --branch v0 https://github.com/oldnick85/yggdrasil_get_keys.git /UTILS/yggdrasil_get_keys && \
|
||||||
|
git clone --depth 1 --branch v4 https://github.com/oldnick85/yggdrasil_find_public_peers.git /UTILS/yggdrasil_find_public_peers && \
|
||||||
|
rm -rf /UTILS/yggdrasil_get_keys/.git /UTILS/yggdrasil_find_public_peers/.git
|
||||||
|
|
||||||
|
# Final runtime image
|
||||||
FROM ubuntu:${UBUNTU_VERSION}
|
FROM ubuntu:${UBUNTU_VERSION}
|
||||||
RUN DEBIAN_FRONTEND=noninteractive \
|
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
|
||||||
apt-get update && \
|
|
||||||
apt-get -y upgrade && \
|
apt-get -y upgrade && \
|
||||||
DEBIAN_FRONTEND=noninteractive \
|
|
||||||
apt-get install -y \
|
apt-get install -y \
|
||||||
libboost-date-time-dev \
|
libboost-date-time-dev \
|
||||||
libboost-filesystem-dev \
|
libboost-filesystem-dev \
|
||||||
libboost-program-options-dev \
|
libboost-program-options-dev \
|
||||||
libboost-system-dev \
|
libboost-system-dev \
|
||||||
libssl3 \
|
libssl3 \
|
||||||
zlib1g \
|
zlib1g \
|
||||||
libminiupnpc17 \
|
libminiupnpc17 \
|
||||||
git \
|
git \
|
||||||
python3 python3-pip iputils-ping && \
|
python3 \
|
||||||
apt-get clean -y
|
python3-pip \
|
||||||
|
iputils-ping \
|
||||||
|
ca-certificates && \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
|
update-ca-certificates
|
||||||
|
|
||||||
# ==== UTILS ====
|
# ==== UTILS ====
|
||||||
WORKDIR /UTILS/
|
WORKDIR /UTILS/
|
||||||
COPY --from=builder_yggdrasil /UTILS/yggdrasil_get_keys /UTILS/yggdrasil_get_keys
|
COPY --from=builder_yggdrasil /UTILS/ /UTILS/
|
||||||
COPY --from=builder_yggdrasil /UTILS/yggdrasil_find_public_peers /UTILS/yggdrasil_find_public_peers
|
|
||||||
RUN python3 -m pip install --break-system-packages -r /UTILS/yggdrasil_get_keys/requirements.txt && \
|
# Install Python dependencies securely
|
||||||
python3 -m pip install --break-system-packages -r /UTILS/yggdrasil_find_public_peers/requirements.txt && \
|
RUN python3 -m pip install --no-cache-dir --break-system-packages \
|
||||||
python3 -m pip cache purge
|
-r /UTILS/yggdrasil_get_keys/requirements.txt \
|
||||||
# save peers to use in case of unavailable repository
|
-r /UTILS/yggdrasil_find_public_peers/requirements.txt
|
||||||
|
|
||||||
|
# Cache public peers during build for fallback
|
||||||
RUN python3 /UTILS/yggdrasil_find_public_peers/yggdrasil_find_public_peers.py \
|
RUN python3 /UTILS/yggdrasil_find_public_peers/yggdrasil_find_public_peers.py \
|
||||||
--yggdrasil-conf="" \
|
--yggdrasil-conf="" \
|
||||||
--yggdrasil-peers-json="/UTILS/yggdrasil_find_public_peers/public_peers.json"
|
--yggdrasil-peers-json="/UTILS/yggdrasil_find_public_peers/public_peers.json" || true
|
||||||
# ==== I2P ====
|
|
||||||
# Ports Used by I2P
|
# ==== I2P CONFIGURATION ====
|
||||||
# Webconsole
|
# I2P Service Ports
|
||||||
|
# Web console
|
||||||
EXPOSE 7070
|
EXPOSE 7070
|
||||||
# HTTP Proxy
|
# HTTP proxy
|
||||||
EXPOSE 4444
|
EXPOSE 4444
|
||||||
# SOCKS Proxy
|
# SOCKS proxy
|
||||||
EXPOSE 4447
|
EXPOSE 4447
|
||||||
# SAM Bridge (TCP)
|
# SAM bridge
|
||||||
EXPOSE 7656
|
EXPOSE 7656
|
||||||
# BOB Bridge
|
# BOB bridge
|
||||||
EXPOSE 2827
|
EXPOSE 2827
|
||||||
# I2CP
|
# I2CP
|
||||||
EXPOSE 7654
|
EXPOSE 7654
|
||||||
# I2PControl
|
# I2PControl
|
||||||
EXPOSE 7650
|
EXPOSE 7650
|
||||||
# Port to listen for connections
|
# Main listener
|
||||||
EXPOSE 10765
|
EXPOSE 10765
|
||||||
|
|
||||||
WORKDIR /I2PD/
|
WORKDIR /I2PD/
|
||||||
COPY --from=builder_i2pd /BUILD_I2PD/i2pd/build/i2pd .
|
COPY --from=builder_i2pd /BUILD_I2PD/i2pd/build/i2pd .
|
||||||
COPY --from=builder_i2pd /BUILD_I2PD/i2pd/contrib/certificates ./certificates
|
COPY --from=builder_i2pd /BUILD_I2PD/i2pd/contrib/certificates ./certificates
|
||||||
COPY ./src/i2pd.conf .
|
COPY ./i2pd.conf .
|
||||||
|
|
||||||
|
# Increase file descriptor limit for better performance
|
||||||
RUN ulimit -n 4096
|
RUN ulimit -n 4096
|
||||||
# ==== YGGDRASIL ====
|
|
||||||
# Ports used by YGGDRASIL
|
# ==== YGGDRASIL CONFIGURATION ====
|
||||||
# Listen
|
# Yggdrasil listener
|
||||||
EXPOSE 10654
|
EXPOSE 10654
|
||||||
# Default yggdrasil port
|
|
||||||
EXPOSE 9001
|
|
||||||
WORKDIR /YGGDRASIL/
|
WORKDIR /YGGDRASIL/
|
||||||
COPY --from=builder_yggdrasil /BUILD_YGGDRASIL/yggdrasil-go/yggdrasil .
|
COPY --from=builder_yggdrasil /BUILD_YGGDRASIL/yggdrasil-go/yggdrasil .
|
||||||
COPY --from=builder_yggdrasil /BUILD_YGGDRASIL/yggdrasil-go/yggdrasilctl .
|
COPY --from=builder_yggdrasil /BUILD_YGGDRASIL/yggdrasil-go/yggdrasilctl .
|
||||||
COPY --from=builder_yggdrasil /BUILD_YGGDRASIL/yggdrasil-go/genkeys .
|
COPY --from=builder_yggdrasil /BUILD_YGGDRASIL/yggdrasil-go/genkeys .
|
||||||
COPY ./src/yggdrasil.conf .
|
COPY ./yggdrasil.conf .
|
||||||
|
|
||||||
|
# ==== FINAL SETUP ====
|
||||||
WORKDIR /
|
WORKDIR /
|
||||||
COPY ./src/entrypoint.sh .
|
COPY ./entrypoint.sh .
|
||||||
|
RUN chmod +x /entrypoint.sh
|
||||||
|
|
||||||
|
# Health check to ensure services are running
|
||||||
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
||||||
|
CMD bash -c 'pgrep i2pd && pgrep yggdrasil'
|
||||||
|
|
||||||
CMD ["bash", "/entrypoint.sh"]
|
CMD ["bash", "/entrypoint.sh"]
|
||||||
+23
-14
@@ -1,7 +1,6 @@
|
|||||||
version: "3.3"
|
version: "3.8"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# I2PD_YGGDRASIL
|
|
||||||
i2pd_yggdrasil:
|
i2pd_yggdrasil:
|
||||||
image: i2pd_yggdrasil:${APP_VERSION:-latest}
|
image: i2pd_yggdrasil:${APP_VERSION:-latest}
|
||||||
container_name: i2pd_yggdrasil
|
container_name: i2pd_yggdrasil
|
||||||
@@ -11,14 +10,24 @@ services:
|
|||||||
devices:
|
devices:
|
||||||
- /dev/net/tun:/dev/net/tun
|
- /dev/net/tun:/dev/net/tun
|
||||||
ports:
|
ports:
|
||||||
- "2827:2827"
|
# I2P Service Ports
|
||||||
- "4444:4444"
|
- "2827:2827" # BOB Bridge
|
||||||
- "4447:4447"
|
- "4444:4444" # HTTP Proxy
|
||||||
- "7070:7070"
|
- "4447:4447" # SOCKS Proxy
|
||||||
- "7650:7650"
|
- "7070:7070" # Web Console
|
||||||
- "7654:7654"
|
- "7650:7650" # I2PControl
|
||||||
- "7656:7656"
|
- "7654:7654" # I2CP
|
||||||
- "10765:10765"
|
- "7656:7656" # SAM Bridge
|
||||||
- "10654:10654"
|
- "10765:10765" # Main I2P Listener
|
||||||
- "9001:9001"
|
# Yggdrasil Ports
|
||||||
restart: always
|
- "10654:10654" # Yggdrasil Listener
|
||||||
|
environment:
|
||||||
|
- TZ=UTC
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "bash", "-c", "pgrep i2pd && pgrep yggdrasil"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 60s
|
||||||
|
|
||||||
|
|||||||
+47
-6
@@ -1,11 +1,29 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# get strong yggdrasil address (https://yggdrasil-network.github.io/configuration.html#generating-stronger-addresses-and-prefixes)
|
set -e # Exit on any error
|
||||||
|
|
||||||
|
echo "Starting I2P over Yggdrasil setup..."
|
||||||
|
|
||||||
|
# Function to handle graceful shutdown
|
||||||
|
cleanup() {
|
||||||
|
echo "Received shutdown signal, stopping services..."
|
||||||
|
kill -TERM $i2pd_pid $yggdrasil_pid 2>/dev/null
|
||||||
|
wait
|
||||||
|
echo "Services stopped gracefully."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
trap cleanup SIGTERM SIGINT
|
||||||
|
|
||||||
|
# Generate strong Yggdrasil address (https://yggdrasil-network.github.io/configuration.html#generating-stronger-addresses-and-prefixes)
|
||||||
|
echo "Generating Yggdrasil keys..."
|
||||||
python3 /UTILS/yggdrasil_get_keys/yggdrasil_get_keys.py \
|
python3 /UTILS/yggdrasil_get_keys/yggdrasil_get_keys.py \
|
||||||
--genkeys="/YGGDRASIL/genkeys" \
|
--genkeys="/YGGDRASIL/genkeys" \
|
||||||
--yggdrasil-conf="/YGGDRASIL/yggdrasil.conf" \
|
--yggdrasil-conf="/YGGDRASIL/yggdrasil.conf" \
|
||||||
--timeout=60 \
|
--timeout=60 \
|
||||||
--environment
|
--environment
|
||||||
# find yggdrasil public peers
|
|
||||||
|
# Find and configure public Yggdrasil peers
|
||||||
|
echo "Discovering Yggdrasil public peers..."
|
||||||
python3 /UTILS/yggdrasil_find_public_peers/yggdrasil_find_public_peers.py \
|
python3 /UTILS/yggdrasil_find_public_peers/yggdrasil_find_public_peers.py \
|
||||||
--yggdrasil-conf="/YGGDRASIL/yggdrasil.conf" \
|
--yggdrasil-conf="/YGGDRASIL/yggdrasil.conf" \
|
||||||
--yggdrasil-peers-json="/UTILS/yggdrasil_find_public_peers/public_peers.json" \
|
--yggdrasil-peers-json="/UTILS/yggdrasil_find_public_peers/public_peers.json" \
|
||||||
@@ -14,11 +32,34 @@ python3 /UTILS/yggdrasil_find_public_peers/yggdrasil_find_public_peers.py \
|
|||||||
--best=6 \
|
--best=6 \
|
||||||
--max-from-country=2 \
|
--max-from-country=2 \
|
||||||
--ping-interval=0.5
|
--ping-interval=0.5
|
||||||
|
|
||||||
|
# Enable IPv6 (required for Yggdrasil)
|
||||||
|
echo "Enabling IPv6..."
|
||||||
sysctl net.ipv6.conf.all.disable_ipv6=0 || true
|
sysctl net.ipv6.conf.all.disable_ipv6=0 || true
|
||||||
# start YGGDRASIL
|
|
||||||
|
# Start Yggdrasil in background
|
||||||
|
echo "Starting Yggdrasil..."
|
||||||
/YGGDRASIL/yggdrasil -useconffile /YGGDRASIL/yggdrasil.conf &
|
/YGGDRASIL/yggdrasil -useconffile /YGGDRASIL/yggdrasil.conf &
|
||||||
sleep 1m
|
yggdrasil_pid=$!
|
||||||
# start I2PD
|
|
||||||
|
# Wait for Yggdrasil to establish connections
|
||||||
|
echo "Waiting for Yggdrasil network connectivity (60 seconds)..."
|
||||||
|
sleep 60
|
||||||
|
|
||||||
|
# Start I2P in background
|
||||||
|
echo "Starting I2P..."
|
||||||
/I2PD/i2pd --datadir /I2PD --conf /I2PD/i2pd.conf &
|
/I2PD/i2pd --datadir /I2PD --conf /I2PD/i2pd.conf &
|
||||||
|
i2pd_pid=$!
|
||||||
|
|
||||||
|
echo "Both services started successfully!"
|
||||||
|
echo "I2P Web Console: http://localhost:7070"
|
||||||
|
echo "Yggdrasil status: check container logs"
|
||||||
|
|
||||||
|
# Wait for any process to exit and handle restart if needed
|
||||||
wait -n
|
wait -n
|
||||||
exit $?
|
|
||||||
|
# If we reach here, one process died
|
||||||
|
echo "One of the services stopped unexpectedly, shutting down..."
|
||||||
|
kill -TERM $i2pd_pid $yggdrasil_pid 2>/dev/null
|
||||||
|
wait
|
||||||
|
exit 1
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e # Exit on error
|
||||||
|
|
||||||
|
# Get version from git tags or use default
|
||||||
|
TAG_VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "v1.0.0")
|
||||||
|
COMMIT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||||
|
|
||||||
|
echo "Building I2P over Yggdrasil Docker image..."
|
||||||
|
echo "Version: $TAG_VERSION"
|
||||||
|
echo "Commit: $COMMIT_HASH"
|
||||||
|
|
||||||
|
# Build the Docker image with build args and tags
|
||||||
|
docker build --file="Dockerfile" \
|
||||||
|
--build-arg UBUNTU_VERSION=24.04 \
|
||||||
|
--build-arg I2PD_VERSION=2.58.0 \
|
||||||
|
--build-arg I2PD_COMPILER=gcc \
|
||||||
|
--build-arg YGGDRASIL_VERSION=v0.5.12 \
|
||||||
|
--label "org.label-schema.version=$TAG_VERSION" \
|
||||||
|
--label "org.label-schema.vcs-ref=$COMMIT_HASH" \
|
||||||
|
--label "org.label-schema.build-date=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \
|
||||||
|
--tag i2pd_yggdrasil:${TAG_VERSION} \
|
||||||
|
--tag i2pd_yggdrasil:latest \
|
||||||
|
.
|
||||||
|
|
||||||
|
echo "Build completed successfully!"
|
||||||
|
echo "Images: i2pd_yggdrasil:${TAG_VERSION}, i2pd_yggdrasil:latest"
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
echo "Deploy i2pd yggdrasil"
|
|
||||||
host=$(cat secrets/settings.json | jq -r .deploy.host)
|
|
||||||
user=$(cat secrets/settings.json | jq -r .deploy.user)
|
|
||||||
path=$(cat secrets/settings.json | jq -r .deploy.path)
|
|
||||||
echo " stop docker container"
|
|
||||||
ssh -l ${user} ${host} "cd ${path} ; docker-compose down"
|
|
||||||
echo " upload docker images"
|
|
||||||
ssh ${user}@${host} "mkdir -p ${path}"
|
|
||||||
docker save i2pd_yggdrasil:latest | bzip2 | pv | ssh ${user}@${host} docker load
|
|
||||||
echo " upload docker compose"
|
|
||||||
scp src/docker-compose.yml ${user}@${host}:${path}
|
|
||||||
echo " start docker container"
|
|
||||||
ssh -l ${user} ${host} "cd ${path} ; docker-compose up -d"
|
|
||||||
echo " all done"
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
TAG_VERSION=$(git describe --tags || echo "unknown")
|
|
||||||
docker build --file="src/Dockerfile" \
|
|
||||||
--build-arg UBUNTU_VERSION=24.04 \
|
|
||||||
--build-arg I2PD_VERSION=2.58.0 \
|
|
||||||
--build-arg I2PD_COMPILER=gcc \
|
|
||||||
--build-arg YGGDRASIL_VERSION=v0.5.12 \
|
|
||||||
--tag i2pd_yggdrasil:${TAG_VERSION} \
|
|
||||||
--tag i2pd_yggdrasil:latest \
|
|
||||||
.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
sudo apt install pv jq
|
|
||||||
Reference in New Issue
Block a user