282 lines
7.4 KiB
Makefile
282 lines
7.4 KiB
Makefile
#==============================================================#
|
|
# File : Makefile
|
|
# Desc : Pigsty Docker Image Build & Run
|
|
# Ctime : 2025-01-27
|
|
# Mtime : 2025-01-27
|
|
# License : Apache-2.0 @ https://pigsty.io/docs/about/license
|
|
# Copyright : 2018-2025 Ruohang Feng / Vonng (rh@vonng.com)
|
|
#==============================================================#
|
|
#
|
|
# Quick Start:
|
|
# make up # Start with docker compose
|
|
# make exec # Enter container, then run: ./deploy.yml
|
|
#
|
|
# Or use one-liner:
|
|
# make launch # up + deploy
|
|
#
|
|
#==============================================================#
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Platform Detection
|
|
#--------------------------------------------------------------#
|
|
UNAME_S := $(shell uname -s)
|
|
UNAME_M := $(shell uname -m)
|
|
|
|
ifeq ($(UNAME_S),Darwin)
|
|
OS := macos
|
|
else
|
|
OS := linux
|
|
endif
|
|
|
|
ifeq ($(UNAME_M),x86_64)
|
|
ARCH := amd64
|
|
else ifeq ($(UNAME_M),aarch64)
|
|
ARCH := arm64
|
|
else ifeq ($(UNAME_M),arm64)
|
|
ARCH := arm64
|
|
else
|
|
$(error Unsupported architecture: $(UNAME_M))
|
|
endif
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Configuration Variables
|
|
#--------------------------------------------------------------#
|
|
VERSION ?= v4.0.0
|
|
REGISTRY ?= pgsty
|
|
NAME ?= pigsty
|
|
DATA ?= $(PWD)/data
|
|
|
|
# Port mappings (host:container)
|
|
SSH_PORT ?= 2222
|
|
HTTP_PORT ?= 8080
|
|
HTTPS_PORT ?= 8443
|
|
PG_PORT ?= 5432
|
|
|
|
# Derived variables
|
|
TAG ?= $(VERSION)
|
|
IMAGE := $(REGISTRY)/pigsty:$(TAG)
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Default & Help
|
|
#--------------------------------------------------------------#
|
|
default: help
|
|
|
|
help:
|
|
@echo "============================================================"
|
|
@echo "Pigsty Docker Image"
|
|
@echo "============================================================"
|
|
@echo ""
|
|
@echo "Quick Start:"
|
|
@echo " make up # Start container with docker compose"
|
|
@echo " make exec # Enter container"
|
|
@echo " make deploy # Run ./deploy.yml inside container"
|
|
@echo " make launch # up + deploy (one-liner)"
|
|
@echo ""
|
|
@echo "Compose Commands:"
|
|
@echo " make up # Create and start container"
|
|
@echo " make down # Stop and remove container"
|
|
@echo " make start/stop # Start/stop container"
|
|
@echo " make restart # Restart container"
|
|
@echo " make pull # Pull latest image"
|
|
@echo ""
|
|
@echo "Build Commands:"
|
|
@echo " make build # Build image locally"
|
|
@echo " make buildnc # Build without cache"
|
|
@echo " make push # Build and push multi-arch image"
|
|
@echo ""
|
|
@echo "Alternative (docker run):"
|
|
@echo " make run # Run with docker run"
|
|
@echo " make clean # Stop and remove container"
|
|
@echo " make purge # Remove container + delete data"
|
|
@echo ""
|
|
@echo "Container Access:"
|
|
@echo " make exec # Bash into container"
|
|
@echo " make ssh # SSH into container"
|
|
@echo " make log/status/ps # View logs/status/processes"
|
|
@echo ""
|
|
@echo "Current: OS=$(OS) ARCH=$(ARCH) VERSION=$(VERSION)"
|
|
@echo " IMAGE=$(IMAGE)"
|
|
@echo " SSH=$(SSH_PORT) HTTP=$(HTTP_PORT) PG=$(PG_PORT)"
|
|
@echo ""
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Docker Compose (Recommended)
|
|
#--------------------------------------------------------------#
|
|
launch: up config deploy
|
|
|
|
up:
|
|
docker compose up -d
|
|
|
|
down:
|
|
docker compose down
|
|
|
|
start:
|
|
docker compose start
|
|
|
|
stop:
|
|
docker compose stop
|
|
|
|
restart:
|
|
docker compose restart
|
|
|
|
pull:
|
|
docker compose pull
|
|
|
|
c: config
|
|
config:
|
|
docker compose exec pigsty ./configure -c docker -g --ip 127.0.0.1
|
|
|
|
d: deploy
|
|
deploy:
|
|
docker compose exec pigsty ./deploy.yml
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Container Access
|
|
#--------------------------------------------------------------#
|
|
e: exec
|
|
exec:
|
|
docker exec -it $(NAME) /bin/bash -l
|
|
|
|
s: ssh
|
|
sshi:
|
|
sshpass -p pigsty ssh-copy-id -p $(SSH_PORT) root@localhost
|
|
|
|
ssh:
|
|
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
|
|
root@localhost -p $(SSH_PORT)
|
|
|
|
log:
|
|
docker logs -f $(NAME)
|
|
|
|
status:
|
|
docker exec -it $(NAME) systemctl status
|
|
|
|
ps:
|
|
docker exec -it $(NAME) ps aux
|
|
|
|
conf:
|
|
docker exec $(NAME) cat /root/pigsty/pigsty.yml
|
|
|
|
pass:
|
|
@docker exec $(NAME) grep password /root/pigsty/pigsty.yml 2>/dev/null || echo "No passwords found"
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Image Build
|
|
#--------------------------------------------------------------#
|
|
build:
|
|
@echo "Building $(IMAGE) for $(ARCH)..."
|
|
docker build --platform=linux/$(ARCH) -t $(IMAGE) .
|
|
|
|
buildnc:
|
|
@echo "Building $(IMAGE) without cache for $(ARCH)..."
|
|
docker build --no-cache --platform=linux/$(ARCH) -t $(IMAGE) .
|
|
|
|
push:
|
|
@echo "Building and pushing $(IMAGE) (multi-arch)..."
|
|
docker buildx build --platform linux/amd64,linux/arm64 \
|
|
-t $(IMAGE) --push .
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Container Run (docker run alternative)
|
|
#--------------------------------------------------------------#
|
|
run:
|
|
@mkdir -p $(DATA)
|
|
docker run -d --privileged \
|
|
--platform=linux/$(ARCH) \
|
|
--name=$(NAME) \
|
|
--hostname=$(NAME) \
|
|
-v $(DATA):/data \
|
|
-p $(SSH_PORT):22 \
|
|
-p $(HTTP_PORT):80 \
|
|
-p $(HTTPS_PORT):443 \
|
|
-p $(PG_PORT):5432 \
|
|
$(IMAGE)
|
|
@echo ""
|
|
@echo "Container '$(NAME)' started with $(IMAGE)"
|
|
@echo ""
|
|
@echo "Next steps:"
|
|
@echo " make exec # Enter container"
|
|
@echo " ./deploy.yml # Deploy Pigsty"
|
|
@echo ""
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Container Lifecycle
|
|
#--------------------------------------------------------------#
|
|
rm:
|
|
@docker rm $(NAME) 2>/dev/null || true
|
|
|
|
clean: stop rm
|
|
|
|
purge: clean
|
|
@echo ""
|
|
@echo "WARNING: This will DELETE all data in ./data"
|
|
@echo ""
|
|
@for i in 2 1; do \
|
|
echo " Deleting in $$i... (Ctrl+C to cancel)"; \
|
|
sleep 1; \
|
|
done
|
|
rm -rf $(DATA)
|
|
@echo "Data removed."
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Image Management
|
|
#--------------------------------------------------------------#
|
|
save:
|
|
@echo "Saving $(IMAGE) to pigsty-$(TAG)-$(ARCH).tgz..."
|
|
docker save $(IMAGE) | gzip -c > pigsty-$(TAG)-$(ARCH).tgz
|
|
|
|
load:
|
|
@echo "Loading from pigsty-$(TAG)-$(ARCH).tgz..."
|
|
gzip -d -c pigsty-$(TAG)-$(ARCH).tgz | docker load
|
|
|
|
rmi:
|
|
docker rmi $(IMAGE) 2>/dev/null || true
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Inspection
|
|
#--------------------------------------------------------------#
|
|
ip:
|
|
@docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(NAME)
|
|
|
|
inspect:
|
|
docker inspect $(NAME)
|
|
|
|
top:
|
|
docker top $(NAME)
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Utility
|
|
#--------------------------------------------------------------#
|
|
shell:
|
|
docker run -it --rm --privileged --platform=linux/$(ARCH) $(IMAGE) /bin/bash
|
|
|
|
test:
|
|
docker run -it --rm --platform=linux/$(ARCH) debian:trixie /bin/bash
|
|
|
|
all: build run
|
|
|
|
rebuild: clean build run
|
|
|
|
|
|
#--------------------------------------------------------------#
|
|
# Phony Targets
|
|
#--------------------------------------------------------------#
|
|
.PHONY: default help \
|
|
up down start stop restart pull deploy launch \
|
|
exec ssh log status ps conf pass \
|
|
build buildnc push \
|
|
run rm clean purge \
|
|
save load rmi \
|
|
ip inspect top shell test all rebuild
|