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_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= - настроить свежий сервер и поставить 3x-ui, доступы в $(SERVERUS_ACCESS_DIR)//" @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) serverus_release: @test -n "$(ip)" || { echo "Укажите сервер: make serverus_release ip="; exit 1; } $(SERVERUS) release --out $(SERVERUS_ACCESS_DIR)/$(ip)