mirror of
https://github.com/seriyps/mtproto_proxy.git
synced 2026-05-13 08:46:46 +00:00
README:
- New 'Split-mode setup' section: motivation, firewall rules, step-by-step
instructions for both VPN tunnel and TLS distribution options
- Split-mode bullet added to Features list
- Notes on DPI-resistant tunnels (Shadowsocks, VLESS/XRay, Hysteria2) for
Russian deployment; standard VPN protocols (WireGuard, OpenVPN) may be blocked
- Install instructions updated to use `make init-config` (copies templates,
auto-detects public IP) instead of manual cp; ROLE= documented throughout
- Split-mode Step 4 uses `make ROLE=back/front` so template-change detection
works correctly after `git pull`
Makefile:
- ROLE ?= both variable selects config templates (both/front/back)
- Config prereq rules use $(SYS_CONFIG_SRC) / $(VM_ARGS_SRC) based on ROLE
- New `init-config` target: force-copies templates, auto-detects public IP,
prints edit reminder; replaces manual cp in install workflow
scripts/gen_dist_certs.sh:
- Two-step workflow: `init <dir>` on back server (CA + back cert),
`add-node <dir> <name>` per front server (cert signed by existing CA)
- Generates per-node ssl_dist.<name>.conf with paths substituted (no
NODE_NAME placeholder to edit manually)
- ssl_dist.<name>.conf is now used directly (no rename to ssl_dist.conf);
vm.args examples and README updated to match
config/vm.args.{front,back}.example:
- -ssl_dist_optfile points to role-specific filename (ssl_dist.front.conf /
ssl_dist.back.conf) so cert files can be copied as-is without renaming
AGENTS.md:
- Role-overview Mermaid flowchart showing front/back/both process split
- Data-plane section replaced with links to doc/ (no duplication)
- Supervision tree, key interactions, split-mode config keys updated
doc/handler-downstream-flow.md, doc/migration-flow.md:
- Mermaid box grouping to visually separate FRONT and BACK node participants
- erpc:call reference corrected (was rpc:call)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
87 lines
2.7 KiB
Makefile
87 lines
2.7 KiB
Makefile
DESTDIR:=
|
|
prefix:=$(DESTDIR)/opt
|
|
REBAR3:=./rebar3
|
|
SERVICE:=$(DESTDIR)/etc/systemd/system/mtproto-proxy.service
|
|
EPMD_SERVICE:=$(DESTDIR)/etc/systemd/system/epmd.service
|
|
LOGDIR:=$(DESTDIR)/var/log/mtproto-proxy
|
|
USER:=mtproto-proxy
|
|
|
|
# ROLE selects which config templates are used.
|
|
# Values: both (default, single server), front (domestic), back (foreign).
|
|
# For split mode: run `make init-config ROLE=front` / `make init-config ROLE=back`
|
|
# on each server, edit the resulting config files, then run `make ROLE=front` etc.
|
|
ROLE ?= both
|
|
|
|
ifeq ($(ROLE),front)
|
|
SYS_CONFIG_SRC := config/sys.config.front.example
|
|
VM_ARGS_SRC := config/vm.args.front.example
|
|
else ifeq ($(ROLE),back)
|
|
SYS_CONFIG_SRC := config/sys.config.back.example
|
|
VM_ARGS_SRC := config/vm.args.back.example
|
|
else
|
|
SYS_CONFIG_SRC := config/sys.config.example
|
|
VM_ARGS_SRC := config/vm.args.example
|
|
endif
|
|
|
|
|
|
all: config/prod-sys.config config/prod-vm.args
|
|
$(REBAR3) as prod release
|
|
|
|
.PHONY: test
|
|
test:
|
|
$(REBAR3) xref
|
|
$(REBAR3) eunit -c
|
|
$(REBAR3) ct -c
|
|
$(REBAR3) proper -c -n 50
|
|
$(REBAR3) dialyzer
|
|
$(REBAR3) cover -v
|
|
|
|
config/prod-sys.config: $(SYS_CONFIG_SRC)
|
|
[ -f $@ ] && diff -u $@ $^ || true
|
|
cp -i -b $^ $@
|
|
config/prod-vm.args: $(VM_ARGS_SRC)
|
|
[ -f $@ ] && diff -u $@ $^ || true
|
|
cp -i -b $^ $@
|
|
@IP=$(shell curl -s -4 -m 10 http://ip.seriyps.com || curl -s -4 -m 10 https://digitalresistance.dog/myIp) \
|
|
&& sed -i s/@0\.0\.0\.0/@$${IP}/ $@
|
|
|
|
.PHONY: init-config
|
|
init-config:
|
|
cp $(SYS_CONFIG_SRC) config/prod-sys.config
|
|
cp $(VM_ARGS_SRC) config/prod-vm.args
|
|
@IP=$$(curl -s -4 -m 10 http://ip.seriyps.com || curl -s -4 -m 10 https://digitalresistance.dog/myIp) \
|
|
&& sed -i s/@0\.0\.0\.0/@$${IP}/ config/prod-vm.args; true
|
|
@echo ""
|
|
@echo "Config created from ROLE=$(ROLE) templates."
|
|
@echo "Edit config/prod-sys.config and config/prod-vm.args, then run: make [ROLE=$(ROLE)]"
|
|
|
|
user:
|
|
sudo useradd -r $(USER) || true
|
|
|
|
$(LOGDIR):
|
|
mkdir -p $(LOGDIR)/
|
|
chown $(USER) $(LOGDIR)/
|
|
|
|
|
|
install: user $(LOGDIR)
|
|
mkdir -p $(prefix)
|
|
cp -r _build/prod/rel/mtp_proxy $(prefix)/
|
|
mkdir -p $(prefix)/mtp_proxy/log/
|
|
chmod 777 $(prefix)/mtp_proxy/log/
|
|
install -D config/mtproto-proxy.service $(SERVICE)
|
|
# If there is no "epmd" service, install one
|
|
if [ -z "`systemctl show -p FragmentPath epmd | cut -d = -f 2`" ]; then \
|
|
install -D config/epmd.service $(EPMD_SERVICE); \
|
|
fi
|
|
systemctl daemon-reload
|
|
|
|
.PHONY: update-sysconfig
|
|
update-sysconfig: config/prod-sys.config $(prefix)/mtp_proxy
|
|
REL_VSN=$(shell cut -d " " -f 2 $(prefix)/mtp_proxy/releases/start_erl.data) && \
|
|
install -m 644 config/prod-sys.config "$(prefix)/mtp_proxy/releases/$${REL_VSN}/sys.config"
|
|
|
|
uninstall:
|
|
# TODO: ensure service is stopped
|
|
rm $(SERVICE)
|
|
rm -r $(prefix)/mtp_proxy/
|
|
systemctl daemon-reload
|