# set docker-compliant container management CLI binary
CONMAN=docker
# set fun names for the containers
HUTTESE_NETWORK=holonet
HUTTESE_SRHT=huttsr
HUTTESE_REDIS=huttredis
HUTTESE_POSTGRES=huttpg
# configure redis
REDIS_TARGET=redis:alpine3.15
REDIS_LOCALNAME=my-redis
REDIS_DATADIR=/var/deploy/data/redis
# configure postgres
POSTGRES_TARGET=postgres:alpine3.15
POSTGRES_LOCALNAME=my-postgres
POSTGRES_DATADIR=/var/deploy/data/postgres
POSTGRES_CONF=/var/deploy/conf/postgres/postgresql.conf
# configure git
GIT_DATADIR=/var/deploy/data/git
# set image tag data
SRHT_LOCALNAME=srht
SRHT_LOCALVERSION=1
CERTDIR=/var/deploy/certs
cleanup:
$(CONMAN) network disconnect --force $(HUTTESE_NETWORK) $(HUTTESE_REDIS) >/dev/null 2>&1 || true
$(CONMAN) network disconnect --force $(HUTTESE_NETWORK) $(HUTTESE_POSTGRES) >/dev/null 2>&1 || true
$(CONMAN) rm --force $(HUTTESE_REDIS) >/dev/null 2>&1 || true
$(CONMAN) image rm --force $(REDIS_LOCALNAME):latest >/dev/null 2>&1 || true
$(CONMAN) rm --force $(HUTTESE_POSTGRES) >/dev/null 2>&1 || true
$(CONMAN) image rm --force $(POSTGRES_LOCALNAME):latest >/dev/null 2>&1 || true
setup:
$(CONMAN) inspect $(HUTTESE_NETWORK) >/dev/null 2>&1 \
|| $(CONMAN) network create $(HUTTESE_NETWORK)
$(CONMAN) inspect $(REDIS_LOCALNAME) >/dev/null 2>&1 \
|| $(CONMAN) pull $(REDIS_TARGET) \
&& $(CONMAN) tag $(REDIS_TARGET) $(REDIS_LOCALNAME)
$(CONMAN) run --detach --name $(HUTTESE_REDIS) --restart always \
$(REDIS_LOCALNAME)
#if I need persistence later:
# --mount type=bind,src=$(REDIS_DATADIR),dst=/data \
# $(REDIS_LOCALNAME) redis-server --save 60 1 --loglevel warning
$(CONMAN) network connect --alias $(HUTTESE_REDIS) \
$(HUTTESE_NETWORK) $(HUTTESE_REDIS)
# redis is now available at redis://huttredis:6379
$(CONMAN) inspect $(POSTGRES_LOCALNAME) >/dev/null 2>&1 \
|| $(CONMAN) pull $(POSTGRES_TARGET) \
&& $(CONMAN) tag $(POSTGRES_TARGET) $(POSTGRES_LOCALNAME)
$(CONMAN) run --detach --name $(HUTTESE_POSTGRES) --restart always \
--env POSTGRES_HOST_AUTH_METHOD=trust \
--mount type=bind,src=$(POSTGRES_DATADIR),dst=/var/lib/postgresql/data \
--mount type=bind,src=$(POSTGRES_CONF),dst=/etc/postgresql/postgresql.conf \
$(POSTGRES_LOCALNAME) -c 'config_file=/etc/postgresql/postgresql.conf'
$(CONMAN) network connect --alias $(HUTTESE_POSTGRES) \
$(HUTTESE_NETWORK) $(HUTTESE_POSTGRES)
# postgres is now available at postgresql://postgres@huttpg:5432
image:
$(CONMAN) inspect $(SRHT_LOCALNAME) >/dev/null 2>&1 \
|| $(CONMAN) build \
--tag $(SRHT_LOCALNAME):latest \
--tag $(SRHT_LOCALNAME):$(SRHT_LOCALVERSION) \
sr/
dbinit: image
$(CONMAN) inspect $(HUTTESE_NETWORK) >/dev/null 2>&1
$(CONMAN) inspect -f '{{.State.Running}}' $(HUTTESE_POSTGRES) >/dev/null 2>&1
$(CONMAN) exec $(HUTTESE_POSTGRES) \
createdb -U postgres meta.sr.ht
$(CONMAN) exec $(HUTTESE_POSTGRES) \
createdb -U postgres git.sr.ht
$(CONMAN) exec $(HUTTESE_POSTGRES) \
createdb -U postgres todo.sr.ht
$(CONMAN) run --name $(HUTTESE_SRHT)_dbinit \
--network $(HUTTESE_NETWORK) \
$(SRHT_LOCALNAME) metasrht-initdb
$(CONMAN) rm $(HUTTESE_SRHT)_dbinit
$(CONMAN) run --name $(HUTTESE_SRHT)_dbinit \
--network $(HUTTESE_NETWORK) \
$(SRHT_LOCALNAME) gitsrht-initdb
$(CONMAN) rm $(HUTTESE_SRHT)_dbinit
$(CONMAN) run --name $(HUTTESE_SRHT)_dbinit \
--network $(HUTTESE_NETWORK) \
$(SRHT_LOCALNAME) todosrht-initdb
$(CONMAN) rm $(HUTTESE_SRHT)_dbinit
dbmigrate: image
$(CONMAN) inspect $(HUTTESE_NETWORK) >/dev/null 2>&1
$(CONMAN) inspect -f '{{.State.Running}}' $(HUTTESE_POSTGRES) >/dev/null 2>&1
$(CONMAN) run --name $(HUTTESE_SRHT)_dbmigrate \
--network $(HUTTESE_NETWORK) \
$(SRHT_LOCALNAME) srht-migrate meta.sr.ht -a upgrade head
$(CONMAN) rm $(HUTTESE_SRHT)_dbmigrate
$(CONMAN) run --name $(HUTTESE_SRHT)_dbmigrate \
--network $(HUTTESE_NETWORK) \
$(SRHT_LOCALNAME) metasrht-migrate -a upgrade head
$(CONMAN) rm $(HUTTESE_SRHT)_dbmigrate
$(CONMAN) run --name $(HUTTESE_SRHT)_dbmigrate \
--network $(HUTTESE_NETWORK) \
$(SRHT_LOCALNAME) srht-migrate git.sr.ht -a upgrade head
$(CONMAN) rm $(HUTTESE_SRHT)_dbmigrate
$(CONMAN) run --name $(HUTTESE_SRHT)_dbmigrate \
--network $(HUTTESE_NETWORK) \
$(SRHT_LOCALNAME) gitsrht-migrate -a upgrade head
$(CONMAN) rm $(HUTTESE_SRHT)_dbmigrate
$(CONMAN) run --name $(HUTTESE_SRHT)_dbmigrate \
--network $(HUTTESE_NETWORK) \
$(SRHT_LOCALNAME) srht-migrate todo.sr.ht -a upgrade head
$(CONMAN) rm $(HUTTESE_SRHT)_dbmigrate
$(CONMAN) run --name $(HUTTESE_SRHT)_dbmigrate \
--network $(HUTTESE_NETWORK) \
$(SRHT_LOCALNAME) todosrht-migrate -a upgrade head
$(CONMAN) rm $(HUTTESE_SRHT)_dbmigrate
start: image
$(CONMAN) inspect $(HUTTESE_NETWORK) >/dev/null 2>&1
$(CONMAN) inspect -f '{{.State.Running}}' $(HUTTESE_POSTGRES) >/dev/null 2>&1
$(CONMAN) inspect -f '{{.State.Running}}' $(HUTTESE_REDIS) >/dev/null 2>&1
$(CONMAN) run --detach --name $(HUTTESE_SRHT) --restart always \
--hostname tatooine --hostname dominic-ricottone.com \
--publish 0.0.0.0:80:80 --publish 0.0.0.0:443:443\
--mount type=bind,src=$(GIT_DATADIR),dst=/var/lib/git \
--mount type=bind,src=$(CERTDIR),dst=/var/lets-encrypt \
$(SRHT_LOCALNAME)
$(CONMAN) network connect --alias $(HUTTESE_SRHT) \
$(HUTTESE_NETWORK) $(HUTTESE_SRHT)
USER_EMAIL?=
USER_NAME?=
adduser:
$(CONMAN) inspect -f '{{.State.Running}}' $(HUTTESE_POSTGRES) >/dev/null 2>&1
$(CONMAN) inspect -f '{{.State.Running}}' $(HUTTESE_REDIS) >/dev/null 2>&1
@echo "USAGE: USER_EMAIL=me@example.com USER_NAME=me make adduser"
$(CONMAN) exec -it $(HUTTESE_SRHT) metasrht-manageuser -e $(USER_EMAIL) -t admin $(USER_NAME)
shell: image
$(CONMAN) inspect $(HUTTESE_NETWORK) >/dev/null 2>&1
$(CONMAN) inspect -f '{{.State.Running}}' $(HUTTESE_POSTGRES) >/dev/null 2>&1
$(CONMAN) inspect -f '{{.State.Running}}' $(HUTTESE_REDIS) >/dev/null 2>&1
$(CONMAN) exec -it $(HUTTESE_SRHT) sh
stop:
$(CONMAN) stop $(SRHT_LOCALNAME)
restart:
$(CONMAN) inspect $(HUTTESE_NETWORK) >/dev/null 2>&1
$(CONMAN) inspect -f '{{.State.Running}}' $(HUTTESE_POSTGRES) >/dev/null 2>&1
$(CONMAN) inspect -f '{{.State.Running}}' $(HUTTESE_REDIS) >/dev/null 2>&1
$(CONMAN) restart $(SRHT_LOCALNAME)
clean:
$(CONMAN) rm --force $(HUTTESE_SRHT) >/dev/null 2>&1 || true
$(CONMAN) image rm --force $(SRHT_LOCALNAME):latest >/dev/null 2>&1 || true