Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a70c5b397a | |||
| 5ca4ceb1cf | |||
| 249d3c64ba | |||
| 9ea190538a |
58
Dockerfile
58
Dockerfile
@@ -1,36 +1,52 @@
|
|||||||
FROM node:23-alpine
|
FROM node:24-alpine3.22
|
||||||
|
|
||||||
# Аргументы для настройки
|
|
||||||
ARG N8N_VERSION=latest
|
ARG N8N_VERSION=latest
|
||||||
ARG SOCKS_IP=192.168.31.240
|
ARG SOCKS_IP=192.168.31.240
|
||||||
|
|
||||||
# Установка зависимостей и n8n в одном слое
|
ENV NODE_OPTIONS=--no-node-snapshot
|
||||||
|
|
||||||
RUN apk add --no-cache \
|
RUN apk add --no-cache \
|
||||||
ffmpeg \
|
ffmpeg \
|
||||||
curl \
|
curl \
|
||||||
wget \
|
wget \
|
||||||
iptables \
|
iptables \
|
||||||
redsocks \
|
redsocks \
|
||||||
gnupg \
|
gnupg \
|
||||||
netcat-openbsd \
|
netcat-openbsd \
|
||||||
npm \
|
su-exec \
|
||||||
su-exec \
|
&& apk add --no-cache --virtual .build-deps \
|
||||||
&& npm install -g n8n@${N8N_VERSION} \
|
python3 \
|
||||||
&& rm -rf /var/cache/apk/*
|
make \
|
||||||
|
g++ \
|
||||||
|
&& npm install --global "n8n@${N8N_VERSION}" \
|
||||||
|
&& apk del .build-deps \
|
||||||
|
&& npm cache clean --force
|
||||||
|
|
||||||
# Создание пользователя и домашней директории
|
RUN mkdir -p /home/node/.n8n \
|
||||||
#RUN adduser -D -s /bin/sh node && mkdir -p /home/node/.n8n
|
&& chown -R node:node /home/node
|
||||||
RUN mkdir -p /home/node/.n8n && chown -R node:node /home/node
|
|
||||||
|
|
||||||
# Копирование скрипта и установка прав
|
|
||||||
COPY start-n8n.sh /start.sh
|
COPY start-n8n.sh /start.sh
|
||||||
RUN chmod +x /start.sh
|
RUN chmod +x /start.sh
|
||||||
|
|
||||||
# Настройка redsocks.conf с использованием аргумента
|
RUN printf '%s\n' \
|
||||||
RUN echo "base { log_debug = off; log_info = on; log = stderr; daemon = off; redirector = iptables; } redsocks { local_ip = 127.0.0.1; local_port = 12345; ip = ${SOCKS_IP}; port = 1080; type = socks5; }" > /etc/redsocks.conf
|
"base {" \
|
||||||
|
" log_debug = off;" \
|
||||||
|
" log_info = on;" \
|
||||||
|
" log = stderr;" \
|
||||||
|
" daemon = off;" \
|
||||||
|
" redirector = iptables;" \
|
||||||
|
"}" \
|
||||||
|
"redsocks {" \
|
||||||
|
" local_ip = 127.0.0.1;" \
|
||||||
|
" local_port = 12345;" \
|
||||||
|
" ip = ${SOCKS_IP};" \
|
||||||
|
" port = 4067;" \
|
||||||
|
" type = socks5;" \
|
||||||
|
"}" \
|
||||||
|
> /etc/redsocks.conf
|
||||||
|
|
||||||
# USER node
|
|
||||||
WORKDIR /home/node
|
WORKDIR /home/node
|
||||||
|
|
||||||
EXPOSE 5678
|
EXPOSE 5678
|
||||||
|
|
||||||
ENTRYPOINT ["/start.sh"]
|
ENTRYPOINT ["/start.sh"]
|
||||||
@@ -12,6 +12,7 @@ services:
|
|||||||
- SOCKS_IP=192.168.31.240
|
- SOCKS_IP=192.168.31.240
|
||||||
- N8N_PORT=5678
|
- N8N_PORT=5678
|
||||||
- NODE_FUNCTION_ALLOW_EXTERNAL=*
|
- NODE_FUNCTION_ALLOW_EXTERNAL=*
|
||||||
|
- NODE_OPTIONS=--dns-result-order=ipv4first
|
||||||
ports:
|
ports:
|
||||||
- 7778:5678
|
- 7778:5678
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
26
start-n8n.sh
26
start-n8n.sh
@@ -4,7 +4,7 @@ SOCKS_HOST=${SOCKS_IP:-192.168.31.240}
|
|||||||
|
|
||||||
# Wait for SOCKS proxy to be ready
|
# Wait for SOCKS proxy to be ready
|
||||||
echo "Waiting for SOCKS proxy..."
|
echo "Waiting for SOCKS proxy..."
|
||||||
until nc -z "$SOCKS_HOST" 1080; do
|
until nc -z "$SOCKS_HOST" 4067; do
|
||||||
echo "SOCKS proxy not ready yet, waiting..."
|
echo "SOCKS proxy not ready yet, waiting..."
|
||||||
sleep 5
|
sleep 5
|
||||||
done
|
done
|
||||||
@@ -14,12 +14,24 @@ echo "SOCKS proxy is ready!"
|
|||||||
redsocks -c /etc/redsocks.conf &
|
redsocks -c /etc/redsocks.conf &
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|
||||||
# Set up iptables rules (run as root)
|
# создать/очистить цепочку
|
||||||
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 -j RETURN 2>/dev/null || true
|
iptables -t nat -N REDSOCKS 2>/dev/null || true
|
||||||
iptables -t nat -A OUTPUT -p tcp -d 192.168.0.0/16 -j RETURN 2>/dev/null || true
|
iptables -t nat -F REDSOCKS
|
||||||
iptables -t nat -A OUTPUT -p tcp -d 10.0.0.0/8 -j RETURN 2>/dev/null || true
|
|
||||||
iptables -t nat -A OUTPUT -p tcp -d 172.16.0.0/12 -j RETURN 2>/dev/null || true
|
# гарантированно первой в OUTPUT
|
||||||
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports 12345 2>/dev/null || true
|
iptables -t nat -D OUTPUT -p tcp -j REDSOCKS 2>/dev/null || true
|
||||||
|
iptables -t nat -I OUTPUT 1 -p tcp -j REDSOCKS
|
||||||
|
|
||||||
|
# исключения
|
||||||
|
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
|
||||||
|
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
|
||||||
|
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
|
||||||
|
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
|
||||||
|
# (по желанию) исключить сам socks-хост точечно:
|
||||||
|
iptables -t nat -A REDSOCKS -d "$SOCKS_HOST" -p tcp --dport 4067 -j RETURN
|
||||||
|
|
||||||
|
# редирект всего остального tcp
|
||||||
|
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
|
||||||
|
|
||||||
N8N_BIN="/usr/local/bin/n8n"
|
N8N_BIN="/usr/local/bin/n8n"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user