diff --git a/.gitignore b/.gitignore index 021eef4..838f5e1 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ cache letsencrypt website-pro config/gitea/conf +config/affine/private.key diff --git a/compose-apps.yml b/apps.yml similarity index 60% rename from compose-apps.yml rename to apps.yml index da0f628..7afb8ba 100644 --- a/compose-apps.yml +++ b/apps.yml @@ -1,16 +1,16 @@ services: - memos: - image: neosmemo/memos:stable - container_name: memos - restart: unless-stopped - volumes: - - "./hdd0/memos:/var/opt/memos" - labels: - - "traefik.enable=true" - - "traefik.http.routers.memos.rule=Host(`notes.bouvais.lu`)" - - "traefik.http.routers.memos.entrypoints=websecure" - - "traefik.http.routers.memos.tls.certresolver=myresolver" - - "traefik.http.services.memos.loadbalancer.server.port=5230" + #memos: + # image: neosmemo/memos:stable + # container_name: memos + # restart: unless-stopped + # volumes: + # - "./hdd0/memos:/var/opt/memos" + # labels: + # - "traefik.enable=true" + # - "traefik.http.routers.memos.rule=Host(`notes.bouvais.lu`)" + # - "traefik.http.routers.memos.entrypoints=websecure" + # - "traefik.http.routers.memos.tls.certresolver=myresolver" + # - "traefik.http.services.memos.loadbalancer.server.port=5230" jellyfin: image: jellyfin/jellyfin @@ -87,3 +87,47 @@ services: - "traefik.http.routers.vaultwarden-admin.tls.certresolver=myresolver" - "traefik.http.routers.vaultwarden-admin.middlewares=auth@docker" - "traefik.http.routers.vaultwarden-admin.service=my-vaultwarden-service@docker" + + affine: + image: ghcr.io/toeverything/affine-graphql:stable + container_name: affine + restart: unless-stopped + depends_on: + redis: + condition: service_healthy + postgres: + condition: service_healthy + affine_migration: + condition: service_completed_successfully + volumes: + - /home/adrien/Web-stack/hdd0/affine/storage:/root/.affine/storage + - /home/adrien/Web-stack/config/affine:/root/.affine/config + environment: + - REDIS_SERVER_HOST=redis + - DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@postgres:5432/affine + - AFFINE_INDEXER_ENABLED=false + - AFFINE_SERVER_EXTERNAL_URL=https://affine.bouvais.lu + labels: + - "traefik.enable=true" + - "traefik.http.routers.affine.rule=Host(`affine.bouvais.lu`)" + - "traefik.http.routers.affine.entrypoints=websecure" + - "traefik.http.routers.affine.tls.certresolver=myresolver" + - "traefik.http.services.affine.loadbalancer.server.port=3010" + + affine_migration: + image: ghcr.io/toeverything/affine-graphql:stable + container_name: affine_migration + volumes: + # custom configurations + - /home/adrien/Web-stack/hdd0/affine/storage:/root/.affine/storage + - /home/adrien/Web-stack/config/affine:/root/.affine/config + command: ['sh', '-c', 'node ./scripts/self-host-predeploy.js'] + environment: + - REDIS_SERVER_HOST=redis + - DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@postgres:5432/affine + - AFFINE_INDEXER_ENABLED=false + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_healthy diff --git a/config/prometheus/prometheus.yml b/config/prometheus/prometheus.yml index 65b2f67..d852f2c 100644 --- a/config/prometheus/prometheus.yml +++ b/config/prometheus/prometheus.yml @@ -24,3 +24,7 @@ scrape_configs: - job_name: 'gitea' # For host system metrics static_configs: - targets: ['gitea:3000'] + + - job_name: 'affine' + static_configs: + - targets: ['affine:3010'] diff --git a/databases.yml b/databases.yml new file mode 100644 index 0000000..a55e287 --- /dev/null +++ b/databases.yml @@ -0,0 +1,29 @@ +services: + redis: + image: redis + container_name: redis + healthcheck: + test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping'] + interval: 10s + timeout: 5s + retries: 5 + restart: unless-stopped + + postgres: + image: pgvector/pgvector:pg16 + container_name: postgres + volumes: + - /home/adrien/Web-stack/hdd0/postgres:/var/lib/postgresql/data + environment: + POSTGRES_USER: ${DB_USERNAME} + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_DB: affine + POSTGRES_INITDB_ARGS: '--data-checksums' + POSTGRES_HOST_AUTH_METHOD: trust + healthcheck: + test: + ['CMD', 'pg_isready', '-U', "${DB_USERNAME}", '-d', "affine"] + interval: 10s + timeout: 5s + retries: 5 + restart: unless-stopped diff --git a/docker-compose.yml b/docker-compose.yml index 9966f0c..e059614 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,8 @@ include: - - compose-apps.yml - - compose-gitea.yml - - compose-monitoring.yml + - databases.yml + - apps.yml + - gitea.yml + - monitoring.yml services: traefik: diff --git a/compose-gitea.yml b/gitea.yml similarity index 93% rename from compose-gitea.yml rename to gitea.yml index b4fdbef..3c78cca 100644 --- a/compose-gitea.yml +++ b/gitea.yml @@ -24,11 +24,12 @@ services: gitea-runner: image: docker.io/gitea/act_runner:latest + container_name: gitea-runner restart: unless-stopped environment: CONFIG_FILE: /config.yaml GITEA_INSTANCE_URL: https://git.bouvais.lu/ - GITEA_RUNNER_REGISTRATION_TOKEN: m03Cj8wJjujfRXenMoN0pVy1J34GmuwbZZ9Bghs1 + GITEA_RUNNER_REGISTRATION_TOKEN: jBEK4cLzDp2wqv1Ru3SHyzC0xzl1FV94IcsGe5kd volumes: - ./config/gitea-runner/config.yaml:/config.yaml - ./hdd0/gitea-runner:/data diff --git a/compose-monitoring.yml b/monitoring.yml similarity index 90% rename from compose-monitoring.yml rename to monitoring.yml index 6abb90f..4b45975 100644 --- a/compose-monitoring.yml +++ b/monitoring.yml @@ -7,13 +7,13 @@ services: restart: unless-stopped volumes: - ./config/prometheus:/etc/prometheus - - ./hdd0/prometheus:/prometheus # For Prometheus data persistence + - ./hdd0/prometheus:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/usr/share/prometheus/console_libraries' - '--web.console.templates=/usr/share/prometheus/consoles' - - '--web.enable-lifecycle' # Allows hot-reloading of config via API + - '--web.enable-lifecycle' labels: - "traefik.enable=true" - "traefik.http.routers.prometheus.rule=Host(`prometheus.bouvais.lu`)" @@ -37,14 +37,14 @@ services: environment: - GF_SECURITY_ADMIN_USER=adrien - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_MY_PASSWORD} - - GF_SERVER_ROOT_URL=https://grafana.bouvais.lu # Set this for correct links if behind a subpath + - GF_SERVER_ROOT_URL=https://grafana.bouvais.lu labels: - "traefik.enable=true" - "traefik.http.routers.grafana.rule=Host(`grafana.bouvais.lu`)" - "traefik.http.routers.grafana.entrypoints=websecure" - "traefik.http.routers.grafana.tls.certresolver=myresolver" - "traefik.http.routers.grafana.service=grafana" - - "traefik.http.services.grafana.loadbalancer.server.port=3000" # Grafana's default port + - "traefik.http.services.grafana.loadbalancer.server.port=3000" - "traefik.http.routers.grafana.middlewares=auth@docker" depends_on: - prometheus diff --git a/compose-website.yml b/website.yml similarity index 100% rename from compose-website.yml rename to website.yml