Makefile
Rama master · réplica de lectura del repositorio original.
.EXPORT_ALL_VARIABLES:
AWS_PROFILE = clearflask
help:
@echo "\tmake run-dev-frontend\n\tmake build-no-test && make run-dev\n\tmake build && make publish-jar && make prod-rolling-restart"
build:
mvn install
build-no-test:
mvn install -DskipTests
build-no-it:
mvn install -DskipITs
build-server-no-test:
cd clearflask-server && mvn install -DskipTests
frontend-start:
cd clearflask-frontend && node/node_modules/pnpm/bin/pnpm.cjs start
connect-start:
cd clearflask-frontend && node/node_modules/pnpm/bin/pnpm.cjs run start:connect
clearflask-release/target/run-docker-compose-local/docker-compose.yml: get-project-version
test -f clearflask-release/target/clearflask-release-$(PROJECT_VERSION)-docker-compose-local.tar.gz
rm -fr clearflask-release/target/run-docker-compose-local
mkdir clearflask-release/target/run-docker-compose-local
tar -xzf clearflask-release/target/clearflask-release-$(PROJECT_VERSION)-docker-compose-local.tar.gz -C clearflask-release/target/run-docker-compose-local
cp -n clearflask-release/target/run-docker-compose-local/server/config-local-template.cfg ./config-local.cfg \
&& echo IMPORTANT: Created config-local.cfg please adjust settings for local deployment || true
cp ./config-local.cfg clearflask-release/target/run-docker-compose-local/server/config-local.cfg
cp -n clearflask-release/target/run-docker-compose-local/connect/connect.config.local-template.json ./connect.config-local.json \
&& echo IMPORTANT: Created connect.config.json please adjust settings for local deployment || true
cp ./connect.config-local.json clearflask-release/target/run-docker-compose-local/connect/connect.config.json
local-up: clearflask-release/target/run-docker-compose-local/docker-compose.yml
docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch up -d
docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch logs -f
local-down: clearflask-release/target/run-docker-compose-local/docker-compose.yml
docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch down -t 0
docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch rm
local-full-up: clearflask-release/target/run-docker-compose-local/docker-compose.yml
docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch,with-kaui,with-kabana up -d
docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch,with-kaui,with-kabana logs -f
local-full-down: clearflask-release/target/run-docker-compose-local/docker-compose.yml
docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch,with-kaui,with-kabana down -t 0
docker-compose -f clearflask-release/target/run-docker-compose-local/docker-compose.yml --profile with-elasticsearch,with-kaui,with-kabana rm
clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml: get-project-version
test -f clearflask-release/target/clearflask-release-$(PROJECT_VERSION)-docker-compose-self-host.tar.gz
rm -fr clearflask-release/target/run-docker-compose-selfhost
mkdir clearflask-release/target/run-docker-compose-selfhost
tar -xzf clearflask-release/target/clearflask-release-$(PROJECT_VERSION)-docker-compose-self-host.tar.gz -C clearflask-release/target/run-docker-compose-selfhost
sed -i'.original' 's,ghcr.io/clearflask,clearflask,g' clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml
test -f clearflask-release/target/run-docker-compose-selfhost/.env || printf 'CLEARFLASK_CONNECT_TOKEN=%s\n' "$$(openssl rand -hex 16)" > clearflask-release/target/run-docker-compose-selfhost/.env
selfhost-up: clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml
docker-compose --env-file clearflask-release/target/run-docker-compose-selfhost/.env -f clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml --profile with-deps up -d
docker-compose --env-file clearflask-release/target/run-docker-compose-selfhost/.env -f clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml --profile with-deps logs -f
selfhost-down: clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml
docker-compose --env-file clearflask-release/target/run-docker-compose-selfhost/.env -f clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml --profile with-deps down -t 0
docker-compose --env-file clearflask-release/target/run-docker-compose-selfhost/.env -f clearflask-release/target/run-docker-compose-selfhost/docker-compose.yml --profile with-deps rm
killbill-sleep-%:
curl -v \
-u admin:password \
-H "X-Killbill-ApiKey: bob" \
-H 'X-Killbill-ApiSecret: lazar' \
-H "Content-Type: application/json" \
-H 'X-Killbill-CreatedBy: admin' \
-X PUT \
"http://127.0.0.1:8082/1.0/kb/test/clock?days=$*"
get-project-version:
$(eval PROJECT_VERSION := $(shell mvn -q -Dexec.executable=echo -Dexec.args='$${project.version}' --non-recursive exec:exec))
echo "Project version is $(PROJECT_VERSION)"
release-patch:
mvn build-helper:parse-version \
-DreleaseVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.nextIncrementalVersion} \
-DdevelopmentVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.nextIncrementalVersion}-SNAPSHOT \
--batch-mode -Dresume=false -DskipITs -Darguments=-DskipITs release:prepare
make release-perform
make release-github-release
release-minor:
mvn build-helper:parse-version \
-DreleaseVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.nextMinorVersion}.0 \
-DdevelopmentVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.nextMinorVersion}.0-SNAPSHOT \
--batch-mode -Dresume=false -DskipITs -Darguments=-DskipITs release:prepare
make release-perform
make release-github-release
release-major:
mvn build-helper:parse-version \
-DreleaseVersion=\$${parsedVersion.nextMajorVersion}.0.0 \
-DdevelopmentVersion=\$${parsedVersion.nextMajorVersion}.0.0-SNAPSHOT \
--batch-mode -Dresume=false -DskipITs -Darguments=-DskipITs release:prepare
make release-perform
make release-github-release
release-perform:
mvn -DskipTests -Darguments=-DskipTests --batch-mode release:perform
release-github-release:
mvn build-helper:parse-version \
-DgithubReleaseVersion=\$${parsedVersion.majorVersion}.\$${parsedVersion.minorVersion}.\$${parsedVersion.incrementalVersion} \
-Dgithub.draft=true --non-recursive github-release:release
# Hosts running the single-host stack, found by a dedicated tag rather than the
# display Name tag so renaming an instance cannot silently change the target set.
# Queried with --filters directly: handing an empty id list to --instance-ids
# makes describe-instances return every instance in the account, which turns a
# tag that matches nothing into a deploy against unrelated servers.
SINGLEHOST_TAG := cf-deploy
SINGLEHOST_TAG_VALUE := singlehost
SINGLEHOST_HOSTS = $(shell aws ec2 describe-instances --no-paginate --output text \
--filters 'Name=tag:$(SINGLEHOST_TAG),Values=$(SINGLEHOST_TAG_VALUE)' 'Name=instance-state-name,Values=running' \
--query "Reservations[].Instances[].PublicDnsName")
ASSERT_SINGLEHOST_HOSTS = test -n "$(strip $(SINGLEHOST_HOSTS))" \
|| { echo "ERROR: no running instance tagged $(SINGLEHOST_TAG)=$(SINGLEHOST_TAG_VALUE); refusing to deploy"; exit 1; }
deploy-singlehost:
@$(ASSERT_SINGLEHOST_HOSTS)
$(eval TIMESTAMP := $(shell date +%Y%m%d%H%M%S))
make $(foreach server, \
$(SINGLEHOST_HOSTS), \
deploy-singlehost-$(server) )
deploy-singlehost-%: get-project-version
echo "Deploying to $*"
scp ./clearflask-server/target/clearflask-server-$(PROJECT_VERSION).war $*:/home/ec2-user/clearflask-server-$(TIMESTAMP)-$(PROJECT_VERSION).war
ssh $* "sudo cp /home/ec2-user/clearflask-server-$(TIMESTAMP)-$(PROJECT_VERSION).war /var/lib/tomcat/webapps/150clearflask/ROOT##$(TIMESTAMP)-$(PROJECT_VERSION).war && \
ls -tp /home/ec2-user | grep '^clearflask-server-' | tail -n +6 | xargs -I {} rm -- {}"
scp ./clearflask-frontend/target/clearflask-frontend-$(PROJECT_VERSION)-connect.tar.gz $*:/home/ec2-user/clearflask-frontend-0.1-connect.tar.gz
ssh $* "sudo service connect stop && sudo rm -fr /srv/clearflask-connect/* && sudo tar -xzf /home/ec2-user/clearflask-frontend-0.1-connect.tar.gz -C /srv/clearflask-connect && sudo chmod go-rwx -R /srv/clearflask-connect && sudo chown connect:connect -R /srv/clearflask-connect && sudo service connect start"
deploy-connect-singlehost:
@$(ASSERT_SINGLEHOST_HOSTS)
make $(foreach server, \
$(SINGLEHOST_HOSTS), \
deploy-connect-singlehost-$(server) )
deploy-connect-singlehost-%: get-project-version
echo "Deploying to $*"
scp ./clearflask-frontend/target/clearflask-frontend-$(PROJECT_VERSION)-connect.tar.gz $*:/home/ec2-user/clearflask-frontend-0.1-connect.tar.gz
ssh $* "sudo service connect stop && sudo rm -fr /srv/clearflask-connect/* && sudo tar -xzf /home/ec2-user/clearflask-frontend-0.1-connect.tar.gz -C /srv/clearflask-connect && sudo chmod go-rwx -R /srv/clearflask-connect && sudo chown connect:connect -R /srv/clearflask-connect && sudo service connect start"
deploy-server-singlehost:
@$(ASSERT_SINGLEHOST_HOSTS)
make $(foreach server, \
$(SINGLEHOST_HOSTS), \
deploy-server-singlehost-$(server) )
deploy-server-singlehost-%: get-project-version
echo "Deploying to $*"
scp ./clearflask-server/target/clearflask-server-$(PROJECT_VERSION).war $*:/home/ec2-user/clearflask-server-0.1.war
ssh $* "sudo service tomcat stop && sudo rm -fr /var/lib/tomcat/webapps/150clearflask/ROOT.war /var/lib/tomcat/webapps/150clearflask/ROOT && sudo cp /home/ec2-user/clearflask-server-0.1.war /var/lib/tomcat/webapps/150clearflask/ROOT.war && sudo service tomcat start"
deploy-autoscale:
make deploy-server
make deploy-connect
make deploy-rotate-instances
make deploy-cloudfront-invalidate-all
deploy-server: get-project-version
aws s3 cp ./clearflask-server/target/clearflask-server-$(PROJECT_VERSION).war s3://clearflask-secret/clearflask-server-0.1.war
deploy-logging: get-project-version
aws s3 cp ./clearflask-logging/target/clearflask-logging-$(PROJECT_VERSION)-standalone.jar s3://killbill-secret/clearflask-logging-0.1-standalone.jar
deploy-connect: get-project-version
aws s3 cp ./clearflask-frontend/target/clearflask-frontend-$(PROJECT_VERSION)-connect.tar.gz s3://clearflask-secret/clearflask-frontend-0.1-connect.tar.gz
deploy-static: ./clearflask-server/target/war-include/ROOT deploy-manifest deploy-files
deploy-rotate-instances:
tools/instance-refresh-and-wait.sh clearflask-server
aws autoscaling describe-auto-scaling-instances --no-paginate --output table --query "AutoScalingInstances[?AutoScalingGroupName=='clearflask-server']"
deploy-running-configs:
make $(foreach server, \
$(shell aws ec2 describe-instances --no-paginate --output text \
--instance-ids $(shell aws autoscaling describe-auto-scaling-instances --output text --query "AutoScalingInstances[?AutoScalingGroupName=='clearflask-server'].InstanceId") \
--query "Reservations[].Instances[].{Host:PublicDnsName}"), \
deploy-running-config-$(server) )
deploy-running-config-%:
echo "Syncing config to $*"
ssh $* "sudo aws s3 cp s3://clearflask-secret/config-prod.cfg /opt/clearflask/config-prod.cfg && sudo aws s3 cp s3://clearflask-secret/connect.config.json /opt/clearflask/connect.config.json && sudo service connect restart"
deploy-running-servers:
make $(foreach server, \
$(shell aws ec2 describe-instances --no-paginate --output text \
--instance-ids $(shell aws autoscaling describe-auto-scaling-instances --output text --query "AutoScalingInstances[?AutoScalingGroupName=='clearflask-server'].InstanceId") \
--query "Reservations[].Instances[].{Host:PublicDnsName}"), \
deploy-running-server-$(server) )
deploy-running-server-%: get-project-version
echo "Deploying to $*"
scp ./clearflask-server/target/clearflask-server-$(PROJECT_VERSION).war $*:/home/ec2-user/clearflask-server-0.1.war
ssh $* "sudo service tomcat stop && sudo rm -fr /var/lib/tomcat/webapps/ROOT.war /var/lib/tomcat/webapps/ROOT && sudo cp /home/ec2-user/clearflask-server-0.1.war /var/lib/tomcat/webapps/ROOT.war && sudo service tomcat start"
deploy-running-connects:
make $(foreach server, \
$(shell aws ec2 describe-instances --no-paginate --output text \
--instance-ids $(shell aws autoscaling describe-auto-scaling-instances --output text --query "AutoScalingInstances[?AutoScalingGroupName=='clearflask-server'].InstanceId") \
--query "Reservations[].Instances[].{Host:PublicDnsName}"), \
deploy-running-connect-$(server) )
deploy-running-connect-%: get-project-version
echo "Deploying to $*"
scp ./clearflask-frontend/target/clearflask-frontend-$(PROJECT_VERSION)-connect.tar.gz $*:/home/ec2-user/clearflask-frontend-0.1-connect.tar.gz
ssh $* "sudo service connect stop && sudo rm -fr /srv/clearflask-connect/* && sudo tar -xzf /home/ec2-user/clearflask-frontend-0.1-connect.tar.gz -C /srv/clearflask-connect && sudo chmod go-rwx -R /srv/clearflask-connect && sudo chown connect:connect -R /srv/clearflask-connect && sudo service connect start"
deploy-cloudfront-invalidate:
aws cloudfront create-invalidation --distribution-id EQHBQLQZXVKCU --paths /index.html /service-worker.js /sw.js /asset-manifest.json
deploy-cloudfront-invalidate-all:
aws cloudfront create-invalidation --distribution-id EQHBQLQZXVKCU --paths "/*"
deploy-emergency:
make deploy-running-configs
make deploy-running-servers
make deploy-running-connects
make deploy-cloudfront-invalidate-all
make deploy-server
make deploy-connect
autoscale-server-suspend:
aws autoscaling suspend-processes --auto-scaling-group-name clearflask-server --scaling-processes Launch Terminate
autoscale-server-resume:
aws autoscaling resume-processes --auto-scaling-group-name clearflask-server --scaling-processes Launch Terminate
autoscale-killbill-suspend:
aws autoscaling suspend-processes --auto-scaling-group-name killbill-webserver --scaling-processes Launch Terminate
autoscale-killbill-resume:
aws autoscaling resume-processes --auto-scaling-group-name killbill-webserver --scaling-processes Launch Terminate
list-instances-singlehost:
aws ec2 describe-instances --no-paginate --output table \
--filters 'Name=tag:$(SINGLEHOST_TAG),Values=$(SINGLEHOST_TAG_VALUE)' \
--query "Reservations[].Instances[].{Host:PublicDnsName,Id:InstanceId,AZ:Placement.AvailabilityZone,Type:InstanceType,State:State.Name,Name:Tags[?Key=='Name']|[0].Value}"
list-instances-clearflask:
aws ec2 describe-instances --no-paginate --output table \
--instance-ids $(shell aws autoscaling describe-auto-scaling-instances --output text --query "AutoScalingInstances[?AutoScalingGroupName=='clearflask-server'].InstanceId") \
--query "Reservations[].Instances[].{Host:PublicDnsName,Id:InstanceId,AZ:Placement.AvailabilityZone,Type:InstanceType,State:State.Name,Name:Tags[?Key=='Name']|[0].Value}"
list-instances-killbill:
aws ec2 describe-instances --no-paginate --output table \
--instance-ids $(shell aws autoscaling describe-auto-scaling-instances --output text --query "AutoScalingInstances[?AutoScalingGroupName=='killbill-webserver'].InstanceId") \
--query "Reservations[].Instances[].{Host:PublicDnsName,Id:InstanceId,AZ:Placement.AvailabilityZone,Type:InstanceType,State:State.Name,Name:Tags[?Key=='Name']|[0].Value}"
.PHONY: \
build \
build-no-test \
killbill-sleep-% \
get-project-version
# Platform-hosting stack (single-tenant one-click appliance): server + connect + MariaDB,
# embedded file-backed DynamoDB, local-disk content. Works like local-up but for the
# PRODUCTION_PLATFORM deployment: build local images first (mvn install), then platform-up.
# The server runs under linux/amd64 emulation (embedded DynamoDB sqlite4java has no arm64
# linux build). Once up, open http://localhost and sign up as admin@localhost.
clearflask-release/target/run-docker-compose-platform/docker-compose.yml:
rm -fr clearflask-release/target/run-docker-compose-platform
mkdir -p clearflask-release/target/run-docker-compose-platform
cp clearflask-release/src/main/docker/compose/docker-compose.platform.yml clearflask-release/target/run-docker-compose-platform/docker-compose.yml
sed -i'.original' s,ghcr.io/clearflask,clearflask,g clearflask-release/target/run-docker-compose-platform/docker-compose.yml
test -f clearflask-release/target/run-docker-compose-platform/.env || printf 'CLEARFLASK_CONNECT_TOKEN=%s\nCLEARFLASK_FORCE_REDIRECT_HTTPS=0\nCLEARFLASK_DISABLE_AUTO_FETCH_CERTIFICATE=1\n' "$$(openssl rand -hex 16)" > clearflask-release/target/run-docker-compose-platform/.env
platform-up: clearflask-release/target/run-docker-compose-platform/docker-compose.yml
docker-compose --env-file clearflask-release/target/run-docker-compose-platform/.env -f clearflask-release/target/run-docker-compose-platform/docker-compose.yml up -d
docker-compose --env-file clearflask-release/target/run-docker-compose-platform/.env -f clearflask-release/target/run-docker-compose-platform/docker-compose.yml logs -f
platform-down: clearflask-release/target/run-docker-compose-platform/docker-compose.yml
docker-compose --env-file clearflask-release/target/run-docker-compose-platform/.env -f clearflask-release/target/run-docker-compose-platform/docker-compose.yml down -t 0