VENV := .venv PYTHON := $(VENV)/bin/python PIP := $(VENV)/bin/pip WHEELS_DIR := wheels REQUIREMENTS := requirements.txt MANAGE := cd src/ && ../$(PYTHON) manage.py SERVERUS := cd src/ && ../$(PYTHON) -m serverus # доступы к серверам, настроенным вручную через serverus (папка в .gitignore) SERVERUS_ACCESS_DIR := $(abspath extra/serverus) MAKECMDGOALS_TARGETS := install freeze wheels sync sync-offline clean help PKG := $(filter-out $(MAKECMDGOALS_TARGETS),$(MAKECMDGOALS)) .PHONY: install freeze wheels sync sync-offline clean help venv dj_makemigrations dj_migrate dj_superuser dj_run dj_test dj_startapp dj_worker tg_run serverus_xui serverus_key serverus_cert serverus_outbound serverus_release help: @echo "make install [ ...] - установить пакет(ы) в $(VENV), обновить $(REQUIREMENTS), собрать wheel в $(WHEELS_DIR)/" @echo "make sync - установить все пакеты из $(REQUIREMENTS) (из индекса)" @echo "make sync-offline - установить все пакеты из $(REQUIREMENTS) только из $(WHEELS_DIR)/, без обращения к индексу" @echo "make freeze - перезаписать $(REQUIREMENTS) текущим состоянием окружения" @echo "make wheels - собрать wheel для всех пакетов из $(REQUIREMENTS)" @echo "make clean - удалить $(WHEELS_DIR)/" @echo "make serverus_xui ip= password= [domain=] [ssl=no] - настроить свежий сервер и поставить 3x-ui, доступы в $(SERVERUS_ACCESS_DIR)//" @echo "make serverus_key ip= action=add|del|stats name= - ключ на панели, настроенной через serverus_xui" @echo "make serverus_cert ip= [domain=] - сертификат панели на домен или на ip" @echo "make serverus_outbound ip= [proxy=socks5://...|cf_warp] - исходящий прокси, без proxy - напрямую" @echo "make serverus_release ip= - вернуть сервер, настроенный через serverus_xui: вход по паролю на 22 порт" venv: @test -d $(VENV) || python3 -m venv $(VENV) install: venv ifeq ($(strip $(PKG)),) $(error Укажите пакет: make install , например make install redis) endif echo $(PKG) $(PIP) install --upgrade $(PKG) $(PIP) freeze > $(REQUIREMENTS) @mkdir -p $(WHEELS_DIR) $(PIP) wheel $(PKG) -w $(WHEELS_DIR) @echo "Готово: $(PKG) установлен, $(REQUIREMENTS) обновлён, wheel-пакеты в $(WHEELS_DIR)/" sync: venv $(PIP) install -r $(REQUIREMENTS) sync-offline: venv $(PIP) install --no-index --find-links=$(WHEELS_DIR) -r $(REQUIREMENTS) freeze: venv $(PIP) freeze > $(REQUIREMENTS) wheels: venv @mkdir -p $(WHEELS_DIR) $(PIP) wheel -r $(REQUIREMENTS) -w $(WHEELS_DIR) clean: rm -rf $(WHEELS_DIR) # позволяет передавать имя пакета как аргумент: make install redis %: @: dj_makemigrations: $(MANAGE) makemigrations dj_migrate: $(MANAGE) migrate dj_superuser: $(MANAGE) createsuperuser dj_run: $(MANAGE) runserver dj_test: $(MANAGE) test --settings=MyPointVPN.settings.test dj_worker: $(MANAGE) rundramatiq dj_startapp: $(MANAGE) startapp $(app) tg_run: $(MANAGE) telegram_run serverus_xui: @test -n "$(ip)" -a -n "$(password)" || { echo "Укажите сервер: make serverus_xui ip= password="; exit 1; } $(SERVERUS) xui $(ip) '$(password)' --out $(SERVERUS_ACCESS_DIR)/$(ip) $(if $(domain),--domain $(domain)) $(if $(filter no,$(ssl)),--no-ssl) serverus_key: @test -n "$(ip)" -a -n "$(action)" -a -n "$(name)" || { echo "Укажите ключ: make serverus_key ip= action=add|del|stats name="; exit 1; } $(SERVERUS) key $(action) '$(name)' --out $(SERVERUS_ACCESS_DIR)/$(ip) serverus_cert: @test -n "$(ip)" || { echo "Укажите сервер: make serverus_cert ip= [domain=]"; exit 1; } $(SERVERUS) cert $(domain) --out $(SERVERUS_ACCESS_DIR)/$(ip) serverus_outbound: @test -n "$(ip)" || { echo "Укажите сервер: make serverus_outbound ip= [proxy=socks5://...|cf_warp]"; exit 1; } $(SERVERUS) outbound '$(proxy)' --out $(SERVERUS_ACCESS_DIR)/$(ip) serverus_release: @test -n "$(ip)" || { echo "Укажите сервер: make serverus_release ip="; exit 1; } $(SERVERUS) release --out $(SERVERUS_ACCESS_DIR)/$(ip)