Files
featherChat/apache
Siavash Sameni 8d6d50a2e4 v5: stable chat server with web UI, SSH tunnel, and nginx proxy
- chat.py: multi-user chat server (stdlib only, single port)
  - Web UI at /chat with SSE real-time messaging
  - Per-user colors (green for self, palette for others)
  - Curses TUI client with scroll support
  - WebSocket SSH tunnel at /tunnel -> 185.208.174.152:22
  - /version endpoint for deployment verification
  - /tunnel.py download endpoint
- tunnel.py: SSH-over-WebSocket client with custom DNS support
- nginx: Kubernetes manifests (Deployment + Service + Ingress)
  - Reverse proxy to chat.py at 188.213.68.133:9997
  - SSE buffering disabled, WebSocket upgrade for /tunnel
- nginx.txt: alternate nginx deployment with different ingress host
- apache: Bitnami Apache Helm values (initial attempt, replaced by nginx)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 14:38:36 +04:00

253 lines
5.2 KiB
Plaintext

affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/cloud-container-g2
operator: In
values:
- "true"
args: []
automountServiceAccountToken: false
autoscaling:
enabled: false
maxReplicas: 11
minReplicas: 1
targetCPU: 50
targetMemory: 50
cloneHtdocsFromGit:
branch: ""
enableAutoRefresh: true
enabled: false
extraVolumeMounts: []
interval: 60
repository: ""
resources: {}
resourcesPreset: medium
command: []
commonAnnotations: {}
commonLabels: {}
containerPorts:
http: 8080
https: 8443
containerSecurityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
enabled: true
privileged: false
readOnlyRootFilesystem: true
runAsGroup: 1001
runAsNonRoot: true
runAsUser: 1001
seLinuxOptions: {}
seccompProfile:
type: RuntimeDefault
customLivenessProbe: {}
customReadinessProbe: {}
customStartupProbe: {}
extraDeploy:
- apiVersion: v1
kind: ConfigMap
metadata:
name: apache-vhosts
data:
my-vhost.conf: |
<VirtualHost *:8080>
ProxyPreserveHost On
ProxyTimeout 600
SetEnv proxy-nokeepalive 1
SetEnv proxy-sendchunked 1
ProxyPass /chat/events http://188.213.68.133:9997/chat/events connectiontimeout=600 timeout=600 flushpackets=on
ProxyPassReverse /chat/events http://188.213.68.133:9997/chat/events
ProxyPass / http://188.213.68.133:9997/
ProxyPassReverse / http://188.213.68.133:9997/
</VirtualHost>
extraEnvVars: []
extraEnvVarsCM: ""
extraEnvVarsSecret: ""
extraPodSpec: {}
extraVolumeMounts: []
extraVolumes: []
fullnameOverride: ""
git:
digest: ""
pullPolicy: IfNotPresent
pullSecrets: []
registry: docker.io
repository: bitnami/git
tag: 2.50.1-debian-12-r30
global:
compatibility:
openshift:
adaptSecurityContext: auto
defaultStorageClass: ""
imagePullSecrets: []
imageRegistry: ""
security:
allowInsecureImages: false
storageClass: ""
hostAliases:
- hostnames:
- status.localhost
ip: 127.0.0.1
htdocsConfigMap: ""
htdocsPVC: ""
httpdConfConfigMap: ""
image:
debug: false
digest: ""
pullPolicy: IfNotPresent
pullSecrets: []
registry: docker.io
repository: bitnami/apache
tag: 2.4.65-debian-12-r2
ingress:
annotations: {}
apiVersion: ""
enabled: true
extraHosts: []
extraPaths: []
extraRules: []
extraTls: []
hostname: man-pache-0651fe8398-manpache.apps.ir-central1.arvancaas.ir
ingressClassName: ""
path: /
pathType: ImplementationSpecific
secrets: []
selfSigned: false
tls: false
initContainers: []
kubeVersion: ""
lifecycleHooks: {}
livenessProbe:
enabled: false
failureThreshold: 6
initialDelaySeconds: 180
periodSeconds: 20
port: http
successThreshold: 1
timeoutSeconds: 5
metrics:
containerPort: 9141
enabled: false
image:
debug: false
digest: ""
pullPolicy: IfNotPresent
pullSecrets: []
registry: docker.io
repository: bitnami/apache-exporter
tag: 1.0.10-debian-12-r54
podAnnotations:
prometheus.io/port: "9117"
prometheus.io/scrape: "true"
prometheusRule:
enabled: false
labels: {}
namespace: ""
rules: []
resources: {}
resourcesPreset: none
scrapeUri: ""
service:
annotations:
prometheus.io/port: "{{ .Values.metrics.service.port }}"
prometheus.io/scrape: "true"
port: 9117
serviceMonitor:
enabled: false
interval: ""
labels: {}
metricRelabelings: []
namespace: ""
relabelings: []
scrapeTimeout: ""
nameOverride: ""
networkPolicy:
allowExternal: true
allowExternalEgress: true
enabled: false
extraEgress: []
extraIngress: []
ingressNSMatchLabels: {}
ingressNSPodMatchLabels: {}
nodeAffinityPreset:
key: ""
type: ""
values: []
nodeSelector: {}
pdb:
create: false
maxUnavailable: ""
minAvailable: ""
podAffinityPreset: ""
podAnnotations: {}
podAntiAffinityPreset: soft
podLabels: {}
podSecurityContext:
enabled: true
fsGroup: 1001
fsGroupChangePolicy: Always
supplementalGroups: []
sysctls: []
priorityClassName: ""
readinessProbe:
enabled: false
failureThreshold: 6
initialDelaySeconds: 30
path: /
periodSeconds: 10
port: http
successThreshold: 1
timeoutSeconds: 5
replicaCount: 1
resources: {}
resourcesPreset: medium
revisionHistoryLimit: 10
schedulerName: ""
service:
annotations: {}
clusterIP: ""
externalTrafficPolicy: Cluster
extraPorts: []
loadBalancerIP: ""
loadBalancerSourceRanges: []
nodePorts:
http: ""
https: ""
ports:
http: 80
https: 443
sessionAffinity: None
sessionAffinityConfig: {}
type: LoadBalancer
serviceAccount:
annotations: {}
automountServiceAccountToken: false
create: true
name: ""
sidecars: []
startupProbe:
enabled: false
failureThreshold: 6
initialDelaySeconds: 180
path: /
periodSeconds: 20
port: http
successThreshold: 1
timeoutSeconds: 5
tolerations:
- effect: NoSchedule
key: role
operator: Equal
value: cloud-container-g2
topologySpreadConstraints: []
updateStrategy:
type: RollingUpdate
vhostsConfigMap: "apache-vhosts"