diff --git a/Makefile b/Makefile index 1b0fe96..cd4d12e 100644 --- a/Makefile +++ b/Makefile @@ -75,6 +75,7 @@ generated.tfvars: $(apps_config) make-generated.sh ./make-generated.sh $(apps_config) > generated.tfvars plan: ignition.json $(config_dir)$(TERRAFORM_ENV).tfvars generated.tfvars + terraform init bash -c "terraform plan -var-file=<(cat $(config_dir)$(TERRAFORM_ENV).tfvars generated.tfvars)" .PHONY: announce-start @@ -83,9 +84,11 @@ announce-start: apply: announce-start ignition.json $(config_dir)$(TERRAFORM_ENV).tfvars generated.tfvars echo "NASSELLA_CONFIG: end" + terraform init bash -c "terraform apply -auto-approve -input=false -var-file=<(cat $(config_dir)$(TERRAFORM_ENV).tfvars generated.tfvars)" destroy: ignition.json $(config_dir)$(TERRAFORM_ENV).tfvars generated.tfvars + terraform init bash -c "terraform destroy -auto-approve -input=false -var-file=<(cat $(config_dir)$(TERRAFORM_ENV).tfvars generated.tfvars)" .PHONY: restic-init @@ -101,7 +104,7 @@ restic-snapshots: $(apps_config) restic-password archive: tar -cf nassella-latest.tar all-apps cl.yaml init-restic.sh main.tf make-caddyfile.sh Makefile \ make-generated.sh make-nextcloud-env.sh make-ghost-env.sh make-restic-generated.sh make-restic-password.sh restic-snapshots.sh copy-apps.sh \ - .terraform .terraform.lock.hcl + .terraform.lock.hcl cp nassella-latest.tar src/ ## to help me remember the command to run to test the config locally diff --git a/src/Dockerfile b/src/Dockerfile index 6a19691..fbbda73 100644 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -12,7 +12,7 @@ WORKDIR /build/chicken RUN make RUN make install -FROM debian:trixie-slim +FROM debian:trixie-slim AS buildeggs RUN apt-get update && apt-get -y --no-install-recommends install \ gcc libc-dev libpq-dev \ && rm -rf /var/lib/apt/lists/* @@ -43,12 +43,30 @@ COPY mocks.scm mocks.scm COPY db.scm db.scm COPY nassella.scm nassella.scm COPY run.scm run.scm -COPY docker-ssh-keygen.sh docker-ssh-keygen.sh + +RUN csc -O3 mocks.scm -J +RUN csc -O3 db.scm -J +RUN csc -O3 nassella.scm -J +RUN csc -O3 -o nassella-run run.scm +RUN chmod +x nassella-run + +FROM debian:trixie-slim +RUN apt-get update && apt-get -y --no-install-recommends install \ + libpq-dev \ + && rm -rf /var/lib/apt/lists/* +COPY --from=buildeggs /usr/local/ /usr/local/ + +WORKDIR /var +COPY --from=buildeggs /var/nassella/mocks /var +COPY --from=buildeggs /var/nassella/db /var +COPY --from=buildeggs /var/nassella/nassella /var +COPY --from=buildeggs /var/nassella/nassella-run /var + COPY nassella-latest.tar nassella-latest.tar COPY root-key root-key +COPY db-init.sql db-init.sql -RUN csc -O3 run.scm -RUN chmod +x run - -ENTRYPOINT ["./run"] +# ENTRYPOINT ["ls"] +# CMD ["/usr/local/lib/chicken/11"] +ENTRYPOINT ["./nassella-run"] CMD ["-:a50"] diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..77e924c --- /dev/null +++ b/src/Makefile @@ -0,0 +1,11 @@ +dockerall: + docker buildx build --platform linux/amd64,linux/arm64 -t nassella/b0.0.1 . + +dockerlocal: + docker buildx build -t nassella/b0.0.1 . + +dockerpush: + docker push nassella/b0.0.1 + +local: + docker run -p 8080:8080 --net=host --rm nassella/b0.0.1 diff --git a/src/compose.yaml b/src/compose.yaml index 5e15033..2fc3ad0 100644 --- a/src/compose.yaml +++ b/src/compose.yaml @@ -6,6 +6,8 @@ services: POSTGRES_USER: nassella POSTGRES_PASSWORD: password POSTGRES_DB: nassella + volumes: + - /home/tjhintz/nassella-db:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready", "-U", "nassella"] interval: 1s diff --git a/src/db.scm b/src/db.scm index 5cda4b5..4a35324 100644 --- a/src/db.scm +++ b/src/db.scm @@ -3,7 +3,7 @@ connection-spec ;;functions - with-db with-db/transaction + with-db with-db/transaction db-init create-user delete-user create-instance get-user-instances @@ -30,13 +30,15 @@ (chicken file) (chicken string) (chicken port) + (chicken io) postgresql sql-null srfi-1 srfi-13 (openssl cipher) (openssl random) - crypto-tools) + crypto-tools + spiffy) (define connection-spec (make-parameter '((dbname . "nassella") (user . "nassella") (password . "password") (host . "127.0.0.1")))) (define db-connection (make-parameter #f)) @@ -525,6 +527,19 @@ returning users.user_id;" "" (user-decrypt-from-db (alist-ref 'state_backup_enc res) user-key user-iv user-id))))))) +(define (db-init) + (with-db/transaction + (lambda (db) + (if (value-at (query db "SELECT EXISTS (SELECT FROM pg_tables WHERE schemaname = 'public' AND tablename = 'users');")) + #t + (begin + (log-to (debug-log) "tables not found in db. Creating...") + (for-each + (lambda (statement) + (query db (conc statement ";"))) + (string-split (with-input-from-file "db-init.sql" read-string) ";")) + (log-to (debug-log) "table completion complete")))))) + ;; (with-db/transaction (lambda (db) (get-user-deployments db 1))) ;; (with-db/transaction (lambda (db) (get-most-recent-deployment-progress db 7))) ;; (with-db/transaction (lambda (db) (get-deployment-progress db 14))) diff --git a/src/nassella.scm b/src/nassella.scm index bef22b8..a5294e6 100644 --- a/src/nassella.scm +++ b/src/nassella.scm @@ -1,5 +1,7 @@ -(load "db.scm") -(load "mocks.scm") +;; (load "db") +;; (load "mocks") +(include "db") +(include "mocks") (import (chicken string) (chicken port) diff --git a/src/run.scm b/src/run.scm index 19343ac..ee1db0c 100644 --- a/src/run.scm +++ b/src/run.scm @@ -1,4 +1,13 @@ -(load "nassella.scm") +(include "nassella") (import spiffy schematra) -(with-schematra-app app (lambda () (start-server))) +(debug-log (current-error-port)) + +(with-schematra-app + app + (lambda () + (log-to (debug-log) "starting server") + (log-to (debug-log) "initializing db") + (db-init) + (log-to (debug-log) "db initialization complete") + (start-server)))