Compare commits

...

6 Commits

Author SHA1 Message Date
dd70ad3dbd Add n8n 2025-09-02 15:36:39 -07:00
c29775050c Add flatnotes 2025-09-02 15:26:28 -07:00
bc87de3f2a Update taiga: 2025-09-02 15:13:16 -07:00
7d44cc150e Update openprojet 2025-09-02 15:12:22 -07:00
64cc36b31f add taiga 2025-09-02 15:08:48 -07:00
c3b3737731 Add openproject project management software 2025-09-02 13:12:23 -07:00
16 changed files with 260 additions and 0 deletions

View File

@ -0,0 +1,6 @@
PUID=1000
PGID=1000
FLATNOTES_AUTH_TYPE="password"
FLATNOTES_USERNAME="user"
FLATNOTES_PASSWORD="password"
FLATNOTES_SECRET_KEY="aLongRandomSeriesOfCharacters"

1
productivity/flatnotes/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.env

View File

View File

@ -0,0 +1,21 @@
networks:
traefik:
external: true
services:
flatnotes:
container_name: flatnotes
image: dullage/flatnotes:latest
networks:
- traefik
env_file:
- .env
volumes:
- "/pwspool/software/flatnotes:/data"
- "/pwspool/software/flatnotes/index"
restart: unless-stopped
labels:
- traefik.http.routers.flatnotes.rule=Host(`flatnotes.whitney.rip`)
- traefik.http.routers.flatnotes.tls=true
- traefik.http.routers.flatnotes.tls.certresolver=lets-encrypt
- traefik.http.services.flatnotes.loadbalancer.server.port=8080

View File

@ -0,0 +1,4 @@
OPENPROJECT_SECRET_KEY_BASE=change-me-to-a-secure-random-value
OPENPROJECT_HOST__NAME=openproject.example.com
OPENPROJECT_HTTPS=true
OPENPROJECT_DEFAULT__LANGUAGE=en

1
productivity/openproject/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.env

View File

@ -0,0 +1,8 @@
# OpenProject
Open source project management software.
# Setup
1. Configure `.env`, see example.
- Note to specify `OPENPROJECT_HOST__NAME` without protocol.
2. Configure users.
- Default admin user is `admin:admin`.

View File

@ -0,0 +1,21 @@
networks:
traefik:
external: true
services:
openproject:
image: openproject/openproject:16
container_name: openproject
restart: always
networks:
- traefik
env_file:
- .env
volumes:
- /pwspool/software/openproject/data:/var/openproject/assets
labels:
- traefik.http.routers.openproject.rule=Host(`pm.whitney.rip`)
- traefik.http.routers.openproject.tls=true
- traefik.http.routers.openproject.tls.certresolver=lets-encrypt
- traefik.http.services.openproject.loadbalancer.server.port=8080

View File

@ -0,0 +1,21 @@
DOMAIN=taiga.example.com
TAIGA_SECRET_KEY=change-this-to-a-secure-random-string
TAIGA_ADMIN_USERNAME=admin
TAIGA_ADMIN_EMAIL=admin@example.com
TAIGA_ADMIN_PASSWORD=admin
# Postgres
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_USER=taiga_user
POSTGRES_PASSWORD=securepassword
POSTGRES_DB=taiga
# RabbitMQ
RABBITMQ_HOST=rabbitmq
RABBITMQ_USER=taiga_user
RABBITMQ_PASSWORD=securepassword
CELERY_ENABLED=False
CELERY_BROKER=amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:5672/
CELERY_ALWAYS_EAGER=False

1
productivity/taiga/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.env

View File

@ -0,0 +1,12 @@
# Taiga
Open source Agile project management tool.
## Setup
1. Fill out `.env` from the example. You are supposed to be able to set admin credentials here but I had issues with that. Use a util like `openssl` for key generation.
2. Setup credentials using python util:
```
docker exec -it taiga-back python3 manage.py createsuperuser --username admin --email admin@example.com
```
```
```
Note: I had issues doing this call while RabbitMQ was enabled via this Celery util. I set `CELERY_ENABLED=false` to get the call to work. This is supposed to have us use some slower utility as an alternative. AI assured me I could re-enable after the fact but I did not just to be safe.

View File

@ -0,0 +1,80 @@
networks:
traefik:
external: true
taiga:
driver: bridge
services:
taiga-front:
image: taigaio/taiga-front:latest
container_name: taiga-front
restart: always
environment:
- TAIGA_API_URL=https://${DOMAIN}/api/v1
- TAIGA_EVENTS_URL=wss://${DOMAIN}/events
networks:
- taiga
- traefik
depends_on:
- taiga-back
labels:
- traefik.http.routers.taiga.rule=Host(`${DOMAIN}`)
- traefik.http.routers.taiga.tls=true
- traefik.http.routers.taiga.tls.certresolver=lets-encrypt
- traefik.http.services.taiga.loadbalancer.server.port=80
taiga-back:
image: taigaio/taiga-back:latest
container_name: taiga-back
restart: always
env_file:
- .env
volumes:
- /pwspool/software/taiga/back/data:/taiga-back/data
- /pwspool/software/taiga/back/media:/taiga-back/media
networks:
- taiga
- traefik
depends_on:
- postgres
- rabbitmq
- taiga-events
labels:
- traefik.http.routers.taiga-back.rule=Host(`${DOMAIN}`) && PathPrefix(`/api`)
- traefik.http.routers.taiga-back.tls=true
- traefik.http.routers.taiga-back.tls.certresolver=lets-encrypt
- traefik.http.services.taiga-back.loadbalancer.server.port=8000
taiga-events:
image: taigaio/taiga-events:latest
container_name: taiga-events
restart: always
environment:
- TAIGA_SECRET=${TAIGA_SECRET_KEY}
- TAIGA_BACK_HOST=http://taiga-back:8000
networks:
- taiga
postgres:
image: postgres:13
container_name: taiga-db
restart: always
networks:
- taiga
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- /pwspool/software/taiga/db:/var/lib/postgresql/data
rabbitmq:
image: rabbitmq:3-management
container_name: taiga-rabbitmq
restart: always
networks:
- taiga
environment:
- RABBITMQ_DEFAULT_USER=${RABBITMQ_USER}
- RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD}

View File

@ -0,0 +1,23 @@
# n8n environment variables
N8N_HOST=n8n.example.com
N8N_PORT=5678
WEBHOOK_TUNNEL_URL=https://n8n.example.com # if you want public webhooks
# n8n encryption key
N8N_ENCRYPTION_KEY=1234567890abcdef1234567890abcdef
# n8n user authentication
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=supersecretpassword
# Database
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=db
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n
DB_POSTGRESDB_PASSWORD=n8npassword
# Other settings
GENERIC_TIMEZONE=America/Los_Angeles

1
software/workflow/n8n/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.env

View File

@ -0,0 +1,6 @@
# N8N
Workflow automation, selfhosted. See `https://github.com/n8n-io/n8n`.
## Setup
1. After folder structure is created, first time setup will fail because we don't have access to the file system.
- give ownership to user 1000, or set a specific user for n8n to run as.

View File

@ -0,0 +1,54 @@
networks:
traefik:
external: true
n8n:
driver: bridge
services:
n8n:
image: n8nio/n8n
container_name: n8n
restart: unless-stopped
networks:
- n8n
- traefik
environment:
- N8N_HOST=${N8N_HOST}
- N8N_PORT=${N8N_PORT}
- WEBHOOK_TUNNEL_URL=${WEBHOOK_TUNNEL_URL}
- N8N_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE}
- N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- DB_TYPE=${DB_TYPE}
- DB_POSTGRESDB_HOST=${DB_POSTGRESDB_HOST}
- DB_POSTGRESDB_PORT=${DB_POSTGRESDB_PORT}
- DB_POSTGRESDB_DATABASE=${DB_POSTGRESDB_DATABASE}
- DB_POSTGRESDB_USER=${DB_POSTGRESDB_USER}
- DB_POSTGRESDB_PASSWORD=${DB_POSTGRESDB_PASSWORD}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
volumes:
- /pwspool/software/n8n/.n8n:/home/node/.n8n
depends_on:
- db
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`n8n.whitney.rip`)"
- "traefik.http.routers.n8n.entrypoints=websecure"
- "traefik.http.routers.n8n.tls=true"
- "traefik.http.routers.n8n.tls.certresolver=lets-encrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
db:
image: postgres:15
container_name: n8n-db
restart: unless-stopped
networks:
- n8n
environment:
POSTGRES_USER: ${DB_POSTGRESDB_USER}
POSTGRES_PASSWORD: ${DB_POSTGRESDB_PASSWORD}
POSTGRES_DB: ${DB_POSTGRESDB_DATABASE}
volumes:
- /pwspool/software/n8n/data:/var/lib/postgresql/data