a nice production stack on my laptop for my personal velociy system

This commit is contained in:
2024-12-07 13:05:12 -06:00
parent 22bc3286ff
commit f3b4b31b5a
14 changed files with 171 additions and 74 deletions

View File

@@ -0,0 +1,13 @@
version: '3.8'
services:
tsys-atomichabits:
image: ghcr.io/majorpeter/atomic-tracker:latest
container_name: reachableceo-atomichabits
ports:
- "2008:8080"
volumes:
- tsys-atomichabits:/config
restart: no
volumes:
tsys-atomichabits:

View File

@@ -0,0 +1,9 @@
services:
easy-gate:
image: r7wx/easy-gate:latest
container_name: reachableceo-easy-gate
restart: always
ports:
- 2005:8080
volumes:
- ./easy-gate.json:/etc/easy-gate/easy-gate.json

View File

@@ -0,0 +1,85 @@
{
"addr": "0.0.0.0:8080",
"use_tls": false,
"cert_file": "",
"key_file": "",
"behind_proxy": false,
"title": "ReachableCEO Laptop Dashboard",
"theme": {
"background": "#FFFFFF",
"foreground": "#000000"
},
"groups": [
{
"name": "internal",
"subnet": "192.168.1.1/24"
},
{
"name": "vpn",
"subnet": "10.8.1.1/24"
}
],
"services": [
{
"name": "WAKAAPI Dashboard",
"category": "",
"url": "http://tsys1:2001",
},
{
"name": "Metrics Dashboard",
"category": "",
"url": "http://tsys1:2002",
},
{
"name": "wger-Workout Tracking",
"category": "",
"url": "http://tsys1:2003",
},
{
"name": "Tube Archivist",
"category": "",
"url": "http://tsys1:2004",
},
{
"name": "VsCode Server",
"category": "",
"url": "http://tsys1:2006",
},
{
"name": "Reactive Resume",
"category": "",
"url": "http://tsys1:2007",
},
{
"name": "Atomic Habits",
"category": "",
"url": "http://tsys1:2008"
},
{
"name": "Cleanslate",
"category": "",
"url": "http://tsys1:2010"
},
{
"name": "Influxdb",
"category": "",
"url": "http://tsys1:4000",
},
],
"notes": [
{
"name": "Simple note",
"text": "This is a simple note for vpn users",
"groups": [
"vpn"
]
},
{
"name": "Another note",
"text": "Another note for internal users only",
"groups": [
"internal"
]
}
]
}

View File

@@ -0,0 +1,114 @@
# In this Docker Compose example, it assumes that you maintain a reverse proxy externally (or chose not to).
# The only two exposed ports here are from minio (:9000) and the app itself (:3000).
# If these ports are changed, ensure that the env vars passed to the app are also changed accordingly.
services:
# Database (Postgres)
reactiveresume-postgres:
image: postgres:16-alpine
container_name: tsys-reactiveresume-postgres
restart: unless-stopped
volumes:
- tsys-reactiveresume-postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"]
interval: 10s
timeout: 5s
retries: 5
# Storage (for image uploads)
reactiveresume-minio:
image: minio/minio
container_name: tsys-reactiveresume-minio
restart: unless-stopped
command: server /data
ports:
- "9000:9000"
volumes:
- tsys-reactiveresume-minio_data:/data
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
# Chrome Browser (for printing and previews)
reactiveresume-chrome:
image: ghcr.io/browserless/chromium:latest
container_name: tsys-reactiveresume-chrome
restart: unless-stopped
environment:
TIMEOUT: 10000
CONCURRENT: 10
TOKEN: chrome_token
EXIT_ON_HEALTH_FAILURE: true
PRE_REQUEST_HEALTH_CHECK: true
reactiveresume-app:
image: amruthpillai/reactive-resume:latest
container_name: tsys-reactiveresume-app
restart: unless-stopped
ports:
- "2007:3000"
depends_on:
- reactiveresume-postgres
- reactiveresume-minio
- reactiveresume-chrome
environment:
# -- Environment Variables --
PORT: 3000
NODE_ENV: production
# -- URLs --
PUBLIC_URL: http://localhost:2007
STORAGE_URL: http://localhost:9000/default
# -- Printer (Chrome) --
CHROME_TOKEN: chrome_token
CHROME_URL: ws://tsys-reactiveresume-chrome:3000
# -- Database (Postgres) --
DATABASE_URL: postgresql://postgres:postgres@tsys-reactiveresume-postgres:5432/postgres
# -- Auth --
ACCESS_TOKEN_SECRET: access_token_secret
REFRESH_TOKEN_SECRET: refresh_token_secret
# -- Emails --
MAIL_FROM: noreply@localhost
# SMTP_URL: smtp://user:pass@smtp:587 # Optional
# -- Storage (Minio) --
STORAGE_ENDPOINT: tsys-reactiveresume-minio
STORAGE_PORT: 9000
STORAGE_REGION: us-east-1 # Optional
STORAGE_BUCKET: default
STORAGE_ACCESS_KEY: minioadmin
STORAGE_SECRET_KEY: minioadmin
STORAGE_USE_SSL: false
STORAGE_SKIP_BUCKET_CHECK: false
# -- Crowdin (Optional) --
# CROWDIN_PROJECT_ID:
# CROWDIN_PERSONAL_TOKEN:
# -- Email (Optional) --
# DISABLE_SIGNUPS: false
# DISABLE_EMAIL_AUTH: false
# -- GitHub (Optional) --
# GITHUB_CLIENT_ID: github_client_id
# GITHUB_CLIENT_SECRET: github_client_secret
# GITHUB_CALLBACK_URL: http://localhost:3000/api/auth/github/callback
# -- Google (Optional) --
# GOOGLE_CLIENT_ID: google_client_id
# GOOGLE_CLIENT_SECRET: google_client_secret
# GOOGLE_CALLBACK_URL: http://localhost:3000/api/auth/google/callback
volumes:
tsys-reactiveresume-minio_data:
tsys-reactiveresume-postgres_data:

View File

@@ -0,0 +1,63 @@
services:
tubearchivist:
container_name: tubearchivist
restart: unless-stopped
image: bbilly1/tubearchivist
ports:
- 2004:8000
volumes:
- tubearchivist-media:/youtube
- tubearchivist-cache:/cache
environment:
- ES_URL=http://tubearchivist-es:9200 # needs protocol e.g. http and port
- REDIS_HOST=tubearchivist-redis # don't add protocol
- HOST_UID=1000
- HOST_GID=1000
- TA_HOST=tsys1 # set your host name
- TA_USERNAME=tubearchivist # your initial TA credentials
- TA_PASSWORD=verysecret # your initial TA credentials
- ELASTIC_PASSWORD=verysecret # set password for Elasticsearch
- TZ=America/Chicago # set your time zone
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:2004/health"]
interval: 2m
timeout: 10s
retries: 3
start_period: 30s
depends_on:
- tubearchivist-es
- tubearchivist-redis
tubearchivist-redis:
image: redis/redis-stack-server
container_name: tubearchivist-redis
restart: unless-stopped
expose:
- "6379"
volumes:
- tubearchivist-redis:/data
depends_on:
- tubearchivist-es
tubearchivist-es:
image: bbilly1/tubearchivist-es # only for amd64, or use official es 8.14.3
container_name: tubearchivist-es
restart: unless-stopped
environment:
- "ELASTIC_PASSWORD=verysecret" # matching Elasticsearch password
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- "xpack.security.enabled=true"
- "discovery.type=single-node"
- "path.repo=/usr/share/elasticsearch/data/snapshot"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- tubearchivist-es:/usr/share/elasticsearch/data # check for permission error when using bind mount, see readme
expose:
- "9200"
volumes:
tubearchivist-media:
tubearchivist-cache:
tubearchivist-redis:
tubearchivist-es:

View File

@@ -0,0 +1,12 @@
services:
tsys-vscode-server:
image: gitpod/openvscode-server
container_name: reachableceo-vscode-server
restart: always
ports:
- 2006:3000
volumes:
- tsys-vscode-server:/home/workspace:cached
volumes:
tsys-vscode-server:

View File

@@ -0,0 +1,15 @@
version: '3.8'
services:
wakaapi-tsys:
image: ghcr.io/muety/wakapi:latest
container_name: reachableceo-wakaapi
environment:
- WAKAPI_PASSWORD_SALT=1234
volumes:
- reachableceo-wakapi-data:/data
ports:
- "2001:3000"
restart: always
volumes:
reachableceo-wakapi-data: