diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 65fb277..0000000 --- a/Dockerfile +++ /dev/null @@ -1,35 +0,0 @@ -FROM alpine:3.20 AS base - -RUN apk add --no-cache \ - python3 \ - git \ - openjdk21-jre-headless \ - unzip \ - wget \ - bash - -RUN mkdir /services && mkdir /data -WORKDIR /services - - -# Install i2psnark -RUN wget https://i2pplus.github.io/installers/i2psnark-standalone.zip -O i2psnark-standalone.zip && \ - unzip i2psnark-standalone.zip && \ - rm i2psnark-standalone.zip -RUN mkdir -p /data/i2psnark_config/i2psnark.config.d && \ - mv i2psnark/jetty-i2psnark.xml /data/i2psnark_config/ && \ - mv i2psnark/i2psnark-appctx.config /data/i2psnark_config/ && \ - ln -s /data/i2psnark_config/jetty-i2psnark.xml i2psnark/jetty-i2psnark.xml && \ - ln -s /data/i2psnark_config/i2psnark-appctx.config i2psnark/i2psnark-appctx.config && \ - ln -s /data/i2psnark_config/i2psnark.config.d i2psnark/i2psnark.config.d - - - -# Install AniworldDownloader -RUN python3 -m venv aniworlddownnloader_venv && \ - aniworlddownnloader_venv/bin/pip install aniworld && \ - mkdir /data/aniworld_downloads - -WORKDIR / -COPY entrypoint.sh /entrypoint.sh -ENTRYPOINT ["sh", "/entrypoint.sh"] diff --git a/aniworld/Dockerfile b/aniworld/Dockerfile new file mode 100644 index 0000000..9c2f560 --- /dev/null +++ b/aniworld/Dockerfile @@ -0,0 +1,28 @@ +FROM alpine:3.20 AS base + +ARG PROXY_SERVER +ARG PROXY_PORT + +RUN apk add --no-cache \ + python3 \ + iptables + +ADD https://github.com/semigodking/redsocks/releases/download/release-0.71/redsocks2-x86_64-release-0.71 /bin/redsocks2 +RUN chmod +x /bin/redsocks2 + +COPY redsocks.conf /etc/redsocks.conf +RUN sed -i "s/vPROXY-SERVER/${PROXY_SERVER}/g" /etc/redsocks.conf && \ + sed -i "s/vPROXY-PORT/${PROXY_PORT}/g" /etc/redsocks.conf + +RUN mkdir /services && mkdir /data +WORKDIR /services + + +# Install AniworldDownloader +RUN python3 -m venv aniworlddownnloader_venv && \ + aniworlddownnloader_venv/bin/pip install aniworld && \ + mkdir /data/aniworld_downloads + +WORKDIR / +COPY entrypoint.sh /entrypoint.sh +ENTRYPOINT ["sh", "/entrypoint.sh"] diff --git a/entrypoint.sh b/aniworld/entrypoint.sh similarity index 52% rename from entrypoint.sh rename to aniworld/entrypoint.sh index ce19d7d..8c55fa2 100755 --- a/entrypoint.sh +++ b/aniworld/entrypoint.sh @@ -1,6 +1,7 @@ #!/usr/share/env bash - -bash /services/i2psnark/launch-i2psnark & +iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 12345 +iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-port 12345 +redsocks2 -c /etc/redsocks.conf /services/aniworlddownnloader_venv/bin/aniworld --web-ui --no-browser --web-expose --web-port 3000 --output-dir /data/aniworld_downloads & while true; do sleep 1000; done \ No newline at end of file diff --git a/aniworld/redsocks.conf b/aniworld/redsocks.conf new file mode 100644 index 0000000..5a88ae3 --- /dev/null +++ b/aniworld/redsocks.conf @@ -0,0 +1,14 @@ +base { + log_debug = off; + log_info = on; + log = "file:/var/log/redsocks.log"; + daemon = on; + user = root; + group = root; + redirector = iptables; +} +redsocks { + bind = "127.0.0.1:12345"; + relay= "vPROXY-SERVER:vPROXY-PORT"; + type = "http-connect"; +} diff --git a/compose.yml b/compose.yml index 7eeffcc..16c8395 100644 --- a/compose.yml +++ b/compose.yml @@ -1,69 +1,59 @@ services: - volume_init: - image: alpine:latest - container_name: volume_init - command: - - sh - - -c - - | - mkdir -p /data/i2psnark - mkdir -p /data/aniworld - mkdir -p /config/i2psnark - volumes: - - data:/data - - config:/config - restart: "no" - - deb_services: + aniworld: build: - context: . + context: aniworld dockerfile: Dockerfile target: base + args: + - "PROXY_SERVER=i2pendpoint.arpa" + - "PROXY_PORT=4444" pull_policy: build - image: katzenkralle/web_served:latest - depends_on: - volume_init: - condition: service_completed_successfully + image: katzenkralle/aniworld_served:latest networks: - proxy + + cap_add: + - NET_ADMIN + - NET_RAW - volumes: - - type: volume - source: config - target: /data/i2psnark_config - volume: - nocopy: false - subpath: i2psnark - - - type: volume - source: data - target: /services/i2psnark/i2psnark - volume: - nocopy: false - subpath: i2psnark - - - type: volume - source: data - target: /data/aniworld_downloads - volume: - nocopy: false - subpath: aniworld + + #volumes: + # - data_aniworld:/data/aniworld_downloads labels: traefik.enable: true - traefik.http.routers.i2psnark.service: i2psnark - traefik.http.routers.i2psnark.rule: Host(`i2psnark.arpa.urmel.de`) - traefik.http.routers.i2psnark.tls: "true" - traefik.http.routers.i2psnark.tls.certresolver: hetzner - traefik.http.services.i2psnark.loadbalancer.server.port: 8002 - traefik.http.routers.aniworld.service: aniworld traefik.http.routers.aniworld.rule: Host(`aniworld.arpa.urmel.de`) traefik.http.routers.aniworld.tls: "true" traefik.http.routers.aniworld.tls.certresolver: hetzner traefik.http.services.aniworld.loadbalancer.server.port: 3000 + i2psnark: + image: ypopovych/i2psnark:latest + volumes: + - config_i2psnark:/snark/config + - data_i2psnark:/snark/downloads + networks: + - proxy + environment: + HOSTNAMES: "i2psnark.arpa.urmel.de" + I2CP_HOST: "i2pendpoint.arpa" + restart: "on-failure" + + labels: + traefik.enable: true + traefik.http.routers.i2psnark.rule: Host(`i2psnark.arpa.urmel.de`) && PathPrefix(`/i2psnark/`) + traefik.http.routers.i2psnark.entrypoints: https + traefik.http.routers.i2psnark.tls: "true" + traefik.http.routers.i2psnark.tls.certresolver: hetzner + + traefik.http.routers.i2psnark.service: i2psnark + traefik.http.services.i2psnark.loadbalancer.server.port: "8002" + + traefik.http.middlewares.i2psnark-headers.headers.customRequestHeaders.Host: i2psnark.arpa.urmel.de + traefik.http.middlewares.i2psnark-headers.headers.customRequestHeaders.X-Forwarded-Proto: https + traefik.http.routers.i2psnark.middlewares: i2psnark-headers networks: proxy: @@ -71,5 +61,14 @@ networks: name: urmel_proxy_exposed volumes: - data: - config: + data_i2psnark: + driver_opts: + type: nfs4 + o: addr=217.100.0.2,rw,noatime,tcp + device: ":/mnt/Main/servicesData/i2psnark" + data_aniworld: + driver_opts: + type: nfs4 + o: addr=217.100.0.2,rw,noatime,tcp + device: ":/mnt/Main/servicesData/aniworld" + config_i2psnark: diff --git a/i2psnark/Dockerfile b/i2psnark/Dockerfile new file mode 100644 index 0000000..ab62132 --- /dev/null +++ b/i2psnark/Dockerfile @@ -0,0 +1,27 @@ +FROM alpine:3.20 AS base + +RUN apk add --no-cache \ + openjdk21-jre-headless \ + unzip \ + wget + +RUN mkdir /services +WORKDIR /services + + +# Install i2psnark +RUN wget https://i2pplus.github.io/installers/i2psnark-standalone.zip -O i2psnark-standalone.zip && \ + unzip i2psnark-standalone.zip && \ + rm i2psnark-standalone.zip +RUN mkdir -p /services/i2psnark_config/i2psnark.config.d && \ + mv i2psnark/jetty-i2psnark.xml /services/i2psnark_config/ && \ + mv i2psnark/i2psnark-appctx.config /services/i2psnark_config/ && \ + ln -s /services/i2psnark_config/jetty-i2psnark.xml i2psnark/jetty-i2psnark.xml && \ + ln -s /services/i2psnark_config/i2psnark-appctx.config i2psnark/i2psnark-appctx.config && \ + ln -s /services/i2psnark_config/i2psnark.config.d i2psnark/i2psnark.config.d + + + +WORKDIR / +COPY entrypoint.sh /entrypoint.sh +ENTRYPOINT ["sh", "/entrypoint.sh"] diff --git a/i2psnark/entrypoint.sh b/i2psnark/entrypoint.sh new file mode 100755 index 0000000..60e7a7d --- /dev/null +++ b/i2psnark/entrypoint.sh @@ -0,0 +1,5 @@ +#!/usr/share/env bash + +sh /services/i2psnark/launch-i2psnark & + +while true; do sleep 1000; done \ No newline at end of file