Working nassella running on nassella!!

This commit is contained in:
2026-02-23 09:09:58 -08:00
parent 35b2635b62
commit 265a682b52
10 changed files with 95 additions and 11 deletions

View File

@@ -10,6 +10,7 @@ $(wildcard all-apps/lb/*) \
$(wildcard all-apps/nextcloud/*) \ $(wildcard all-apps/nextcloud/*) \
$(wildcard all-apps/wg-easy/*) \ $(wildcard all-apps/wg-easy/*) \
$(wildcard all-apps/ghost/*) \ $(wildcard all-apps/ghost/*) \
$(wildcard all-apps/nassella/*) \
$(wildcard all-apps/dozzle/*) $(wildcard all-apps/dozzle/*)
rm -Rf app/ rm -Rf app/
@@ -64,6 +65,10 @@ all-apps/nextcloud/postgres_user \
all-apps/nextcloud/postgres_password \ all-apps/nextcloud/postgres_password \
all-apps/nextcloud/redis_password \ all-apps/nextcloud/redis_password \
all-apps/nextcloud/nextcloud.env \ all-apps/nextcloud/nextcloud.env \
all-apps/nassella/postgres_db \
all-apps/nassella/postgres_user \
all-apps/nassella/postgres_password \
all-apps/nassella/nassella.env \
all-apps/ghost/.compose-env \ all-apps/ghost/.compose-env \
restic-env \ restic-env \
restic-password \ restic-password \

View File

@@ -0,0 +1,51 @@
version: '3'
secrets:
nassella_postgres_db:
file: ./nassella/postgres_db
nassella_postgres_password:
file: ./nassella/postgres_password
nassella_postgres_user:
file: ./nassella/postgres_user
services:
nassella_db:
image: postgres:17.6-trixie
env_file:
- ./nassella/nassella.env
shm_size: 128mb
restart: always
volumes:
- /nassella/nassella/var-lib-postgresql-data:/var/lib/postgresql/data
networks:
- nassella_internal
healthcheck:
test: ["CMD-SHELL", "pg_isready -d `cat $$POSTGRES_DB_FILE` -U `cat $$POSTGRES_USER_FILE`"]
start_period: 15s
interval: 30s
retries: 3
timeout: 5s
secrets:
- nassella_postgres_db
- nassella_postgres_password
- nassella_postgres_user
nassella:
image: nassella/b0.0.1
depends_on:
nassella_db:
condition: service_healthy
env_file:
- ./nassella/nassella.env
secrets:
- nassella_postgres_db
- nassella_postgres_password
- nassella_postgres_user
networks:
- lb
- nassella_internal
restart: unless-stopped
networks:
lb:
nassella_internal:
driver: bridge
internal: true

View File

@@ -0,0 +1,4 @@
POSTGRES_HOST=nassella_db
POSTGRES_DB_FILE=/run/secrets/nassella_postgres_db
POSTGRES_USER_FILE=/run/secrets/nassella_postgres_user
POSTGRES_PASSWORD_FILE=/run/secrets/nassella_postgres_password

View File

@@ -0,0 +1 @@
nassella

View File

@@ -0,0 +1 @@
password

View File

@@ -0,0 +1 @@
nassella

View File

@@ -26,6 +26,7 @@ declare -A bodys
bodys["nextcloud"]=" reverse_proxy http://nextcloud:80" bodys["nextcloud"]=" reverse_proxy http://nextcloud:80"
bodys["wg-easy"]=" reverse_proxy http://wg-easy:80" bodys["wg-easy"]=" reverse_proxy http://wg-easy:80"
bodys["ghost"]=" reverse_proxy http://ghost:2368" bodys["ghost"]=" reverse_proxy http://ghost:2368"
bodys["nassella"]=" reverse_proxy http://nassella:8080"
bodys["dozzle"]=$(cat <<EOF bodys["dozzle"]=$(cat <<EOF
basic_auth { basic_auth {
$HOST_ADMIN_USER $host_admin_password_encoded $HOST_ADMIN_USER $host_admin_password_encoded

View File

@@ -39,6 +39,7 @@ create table user_selected_apps(
instance_id integer not null references instances on delete cascade, instance_id integer not null references instances on delete cascade,
wg_easy_version varchar(100), wg_easy_version varchar(100),
nextcloud_version varchar(100), nextcloud_version varchar(100),
nassella_version varchar(100),
log_viewer_version varchar(100), log_viewer_version varchar(100),
ghost_version varchar(100) ghost_version varchar(100)
); );

View File

@@ -41,7 +41,10 @@
crypto-tools crypto-tools
spiffy) spiffy)
(define connection-spec (make-parameter '((dbname . "nassella") (user . "nassella") (password . "password") (host . "127.0.0.1")))) (define connection-spec (make-parameter '((dbname . "nassella") (user . "nassella") (password . "password")
;; (host . "127.0.0.1")
(host . "nassella_db")
)))
(define db-connection (make-parameter #f)) (define db-connection (make-parameter #f))
(define (with-db proc) (define (with-db proc)
@@ -274,6 +277,7 @@ returning users.user_id;"
'((wg-easy . "wg_easy_version") '((wg-easy . "wg_easy_version")
(nextcloud . "nextcloud_version") (nextcloud . "nextcloud_version")
(ghost . "ghost_version") (ghost . "ghost_version")
(nassella . "nassella_version")
(log-viewer . "log_viewer_version"))) (log-viewer . "log_viewer_version")))
(define *user-selected-apps-reverse-column-map* (define *user-selected-apps-reverse-column-map*
@@ -469,7 +473,7 @@ returning users.user_id;"
(map-in-order (lambda (d) (string-append "d." (cdr d))) *deployments-column-map*) (map-in-order (lambda (d) (string-append "d." (cdr d))) *deployments-column-map*)
", ") ", ")
", uac.root_domain, uac.config_enc, uac.instance_id, " ", uac.root_domain, uac.config_enc, uac.instance_id, "
"usa.wg_easy_version, usa.nextcloud_version, usa.log_viewer_version, usa.ghost_version " "usa.wg_easy_version, usa.nextcloud_version, usa.log_viewer_version, usa.ghost_version, usa.nassella_version "
"from instances as i " "from instances as i "
"join (select instance_id, max(id) as id from deployments group by instance_id) d2 " "join (select instance_id, max(id) as id from deployments group by instance_id) d2 "
"on d2.instance_id = i.instance_id " "on d2.instance_id = i.instance_id "
@@ -489,6 +493,7 @@ returning users.user_id;"
(wg_easy_version . wg-easy) (wg_easy_version . wg-easy)
(nextcloud_version . nextcloud) (nextcloud_version . nextcloud)
(ghost_version . ghost) (ghost_version . ghost)
(nassella_version . nassella)
(log_viewer_version . log-viewer) (log_viewer_version . log-viewer)
,@*deployments-reverse-column-map*)))) ,@*deployments-reverse-column-map*))))
`(,config . ,(if (sql-null? value) `(,config . ,(if (sql-null? value)

View File

@@ -30,7 +30,8 @@
intarweb intarweb
nassella-db nassella-db
sql-null sql-null
openssl) openssl
spiffy)
(define app (schematra/make-app)) (define app (schematra/make-app))
@@ -716,12 +717,15 @@ chmod -R 777 /opt/keys"))
(receive (wait-pid exit-normal status) (process-wait pid #t) (receive (wait-pid exit-normal status) (process-wait pid #t)
(if (= wait-pid 0) ;; wait-pid is 0 until the process has finished (if (= wait-pid 0) ;; wait-pid is 0 until the process has finished
(loop) (loop)
(let ((priv-key (with-input-from-file (conc key-path "/key") read-string)) (if exit-normal
(pub-key (with-input-from-file (conc key-path "/key.pub") read-string))) (begin
(with-input-from-port in-port read-string) ;; left here for debugging and to clear ports (with-input-from-port in-port read-string) ;; left here for debugging and to clear ports
(with-input-from-port err-port read-string) ;; left here for debugging and to clear ports (with-input-from-port err-port read-string) ;; left here for debugging and to clear ports
(let ((priv-key (with-input-from-file (conc key-path "/key") read-string))
(pub-key (with-input-from-file (conc key-path "/key.pub") read-string)))
(delete-directory key-path #t) (delete-directory key-path #t)
(list priv-key pub-key))))))))) (list priv-key pub-key)))
(error "Generating ssh key docker command had abnormal exit")))))))))
(thread-join! thread))))) (thread-join! thread)))))
(define (generate-restic-password) (define (generate-restic-password)
@@ -885,6 +889,7 @@ chmod -R 777 /opt/keys"))
(Field (@ (name "wg-easy") (type "checkbox") (label ("WG Easy")) (checked ,(member 'wg-easy (alist-ref 'selected-apps results))))) (Field (@ (name "wg-easy") (type "checkbox") (label ("WG Easy")) (checked ,(member 'wg-easy (alist-ref 'selected-apps results)))))
(Field (@ (name "nextcloud") (type "checkbox") (label ("NextCloud")) (checked ,(member 'nextcloud (alist-ref 'selected-apps results))))) (Field (@ (name "nextcloud") (type "checkbox") (label ("NextCloud")) (checked ,(member 'nextcloud (alist-ref 'selected-apps results)))))
(Field (@ (name "ghost") (type "checkbox") (label ("Ghost")) (checked ,(member 'ghost (alist-ref 'selected-apps results))))) (Field (@ (name "ghost") (type "checkbox") (label ("Ghost")) (checked ,(member 'ghost (alist-ref 'selected-apps results)))))
(Field (@ (name "nassella") (type "checkbox") (label ("Nassella")) (checked ,(member 'nassella (alist-ref 'selected-apps results)))))
(Field (@ (name "log-viewer") (type "checkbox") (label ("Log Viewer")) (checked #t) (disabled "disabled")))) (Field (@ (name "log-viewer") (type "checkbox") (label ("Log Viewer")) (checked #t) (disabled "disabled"))))
;; TODO add config for when automatic upgrades are scheduled for? ;; TODO add config for when automatic upgrades are scheduled for?
;; TODO add config for server timezone? ;; TODO add config for server timezone?
@@ -900,7 +905,8 @@ chmod -R 777 /opt/keys"))
instance-id instance-id
`((wg-easy . ,(or (and (alist-ref 'wg-easy (current-params)) "15.1.0") (sql-null))) `((wg-easy . ,(or (and (alist-ref 'wg-easy (current-params)) "15.1.0") (sql-null)))
(nextcloud . ,(or (and (alist-ref 'nextcloud (current-params)) "31.0.8") (sql-null))) (nextcloud . ,(or (and (alist-ref 'nextcloud (current-params)) "31.0.8") (sql-null)))
(ghost . ,(or (and (alist-ref 'ghost (current-params)) "6.10.0") (sql-null))))) (ghost . ,(or (and (alist-ref 'ghost (current-params)) "6.10.0") (sql-null)))
(nassella . ,(or (and (alist-ref 'nassella (current-params)) "b0.0.1") (sql-null)))))
(update-root-domain db (update-root-domain db
(session-user-id) (session-user-id)
instance-id instance-id
@@ -948,6 +954,11 @@ chmod -R 777 /opt/keys"))
(Field (@ (name "nextcloud-admin-password") (label ("Admin Password")) (type "password") (Field (@ (name "nextcloud-admin-password") (label ("Admin Password")) (type "password")
(value ,(alist-ref 'admin-password (alist-ref 'nextcloud app-config eq? '()) eq? "")))))) (value ,(alist-ref 'admin-password (alist-ref 'nextcloud app-config eq? '()) eq? ""))))))
'()) '())
,@(if (member 'nassella selected-apps)
`((Fieldset
(@ (title "Nassella"))
(Field (@ (name "nassella-subdomain") (label ("Subdomain")) (value ,(alist-ref 'subdomain (alist-ref 'nassella app-config eq? '()) eq? "nassella"))))))
'())
(Fieldset (Fieldset
(@ (title "Log Viewer")) (@ (title "Log Viewer"))
(Field (@ (name "log-viewer-subdomain") (label ("Subdomain")) (Field (@ (name "log-viewer-subdomain") (label ("Subdomain"))
@@ -998,6 +1009,7 @@ chmod -R 777 /opt/keys"))
(redis-password . ,(or (alist-ref 'redis-password (redis-password . ,(or (alist-ref 'redis-password
(alist-ref 'nextcloud config eq? '())) (alist-ref 'nextcloud config eq? '()))
(generate-redis-password))))) (generate-redis-password)))))
(nassella . ((subdomain . ,(alist-ref 'nassella-subdomain (current-params)))))
(log-viewer . ((subdomain . ,(alist-ref 'log-viewer-subdomain (current-params))) (log-viewer . ((subdomain . ,(alist-ref 'log-viewer-subdomain (current-params)))
(user . ,(alist-ref 'log-viewer-user (current-params))) (user . ,(alist-ref 'log-viewer-user (current-params)))
(password . ,(alist-ref 'log-viewer-password (current-params))))) (password . ,(alist-ref 'log-viewer-password (current-params)))))
@@ -1190,7 +1202,8 @@ chmod -R 777 /opt/keys"))
("cloudflare_account_id" . ,(alist-ref 'cloudflare-account-id service-config)) ("cloudflare_account_id" . ,(alist-ref 'cloudflare-account-id service-config))
("cluster_name" . "mycluster") ("cluster_name" . "mycluster")
("datacenter" . ,(alist-ref 'digitalocean-region service-config)) ("datacenter" . ,(alist-ref 'digitalocean-region service-config))
("flatcar_stable_version" . "4459.2.1"))) ;; (source <(curl -sSfL https://stable.release.flatcar-linux.net/amd64-usr/current/version.txt); echo "${FLATCAR_VERSION_ID}")
("flatcar_stable_version" . "4459.2.3")))
;; remove the newline that generating the ssh key adds ;; remove the newline that generating the ssh key adds
(display "ssh_keys=[\"") (display (string-drop-right ssh-pub-key 1)) (print "\"]")))) (display "ssh_keys=[\"") (display (string-drop-right ssh-pub-key 1)) (print "\"]"))))
(let* ((instance-id (alist-ref "id" (current-params) equal?)) (let* ((instance-id (alist-ref "id" (current-params) equal?))
@@ -1324,6 +1337,7 @@ chmod -R 777 /opt/keys"))
'((wg-easy . "https://wg-easy.github.io/wg-easy/Pre-release/") '((wg-easy . "https://wg-easy.github.io/wg-easy/Pre-release/")
(nextcloud . "https://nextcloud.com/support/") (nextcloud . "https://nextcloud.com/support/")
(ghost . "https://nextcloud.com/support/") (ghost . "https://nextcloud.com/support/")
(nassella . "https://nextcloud.com/support/")
(log-viewer . "https://nextcloud.com/support/"))))) (log-viewer . "https://nextcloud.com/support/")))))
(h3 "Actions") (h3 "Actions")
(ul (li (a (@ (href "/config/wizard/services/" (ul (li (a (@ (href "/config/wizard/services/"