gitea Git Server
docker run -d –name gitea -p 3000:3000 -p 222:22 -v C:Usersshilvain_hsiehDesktopshilvainDockergiteadata:/data -e GITEA__security__SECRET_KEY=ShilvainSecretKey123! gitea/gitea:latest
設定資料庫的時候順便設定管理員帳戶
查看目前repos docker exec -u git -it gitea gitea repo list –config /data/gitea/conf/app.ini
列出某user docker exec -u git -it gitea gitea repo list –user admin –config /data/gitea/conf/app.ini
NuGet Server
docker run -d –name baget -p 5555:80 -e ApiKey=MySecretKey loicsharma/baget
———-docker-compose.yml(只啟 BaGet)Start!———- version: ‘3.8’
services: baget: image: loicsharma/baget:latest container_name: baget ports: - ‘5555:80’ environment: # ===== API Key(NuGet push 用)===== ApiKey: MySecretKey
# ===== 套件儲存 =====
Storage__Type: FileSystem
Storage__Path: /var/baget/packages
# ===== 使用既有 MSSQL =====
Database__Type: SqlServer
Database__ConnectionString: >
Server=192.168.1.10,1433;
Database=BaGet;
User Id=baget_user;
Password=StrongPassword!;
TrustServerCertificate=True;
volumes:
- ./baget-data:/var/baget
restart: always
———-End!———-
1️⃣ 註冊 NuGet Source(只做一次) dotnet nuget add source http://localhost:5555/v3/index.json –name BaGetMSSQL –username any –password MySecretKey –store-password-in-clear-text
2️⃣ 建立 NuGet 套件 dotnet pack -c Release
產生: bin/Release/Your.Package.1.0.0.nupkg
3️⃣ Push 套件(關鍵) dotnet nuget push bin/Release/*.nupkg –source BaGetMSSQL –api-key MySecretKey
成功訊息: Your.Package.1.0.0.nupkg was pushed successfully.
🎉 套件已經存在你的 MSSQL + 檔案系統中
驗證下載 dotnet add package Your.Package –source BaGetMSSQL 或 NuGet.config:
Jenkins
docker run -d –name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
8080 → Web UI 50000 → Agent 通訊 jenkins_home → 所有設定、Job、Plugin 都在這 lts → 長期支援版(穩定)
OpenTelemetry
———-Docker Compose Content(docker-compose.yml) Start!———-
version: ‘3.9’
services: # ====================== # Grafana UI # ====================== grafana: image: grafana/grafana:10.3.1 container_name: grafana ports: - ‘3000:3000’ environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - grafana-data:/var/lib/grafana depends_on: - prometheus - tempo - loki
# ====================== # Prometheus (Metrics) # ====================== prometheus: image: prom/prometheus:v2.49.1 container_name: prometheus ports: - ‘9090:9090’ volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - ‘–config.file=/etc/prometheus/prometheus.yml’
# ====================== # Tempo (Traces) # ====================== tempo: image: grafana/tempo:2.4.1 user: ‘0:0’ container_name: tempo ports: - ‘3200:3200’ # Tempo UI / Query #- ‘4317:4317’ # OTLP gRPC #- ‘4318:4318’ # OTLP HTTP volumes: - ./tempo.yml:/etc/tempo.yml - tempo-data:/tmp/tempo command: [‘-config.file=/etc/tempo.yml’]
# ====================== # Loki (Logs) # ====================== loki: image: grafana/loki:2.9.4 container_name: loki ports: - ‘3100:3100’ volumes: - ./loki.yml:/etc/loki/loki.yml command: [‘-config.file=/etc/loki/loki.yml’]
# ====================== # OpenTelemetry Collector # ====================== otel-collector: image: otel/opentelemetry-collector-contrib:0.95.0 container_name: otel-collector ports: - ‘4317:4317’ # OTLP gRPC - ‘4318:4318’ # OTLP HTTP - ‘8889:8889’ volumes: - ./otel-collector-config.yml:/etc/otelcol/config.yml command: [’–config=/etc/otelcol/config.yml’] depends_on: - prometheus - tempo - loki
volumes: grafana-data: tempo-data:
———-Docker Compose Content End!———- ———-OpenTelemetry Collector Content(otel-collector-config.yml) Start!———-
receivers: otlp: protocols: grpc: http:
processors: batch: memory_limiter: # « 加在這裡 limit_mib: 512 # 最大使用 512 MB spike_limit_mib: 256 # 突發量允許再增加 256 MB check_interval: 5s # 每 5 秒檢查一次記憶體
exporters: # Metrics → Prometheus prometheus: endpoint: ‘0.0.0.0:8889’
# Traces → Tempo otlp/tempo: endpoint: tempo:4317 tls: insecure: true
# Logs → Loki loki: endpoint: http://loki:3100/loki/api/v1/push
service: pipelines: metrics: receivers: [otlp] processors: [memory_limiter, batch] exporters: [prometheus]
traces:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [otlp/tempo]
logs:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [loki]
———-OpenTelemetry Collector Content End!———- ———-Prometheus Content(prometheus.yml) Start!———-
global: scrape_interval: 15s
scrape_configs:
- job_name: ‘otel-collector’
static_configs:
- targets: [‘otel-collector:8889’]
———-Prometheus Content End!———- ———-Tempo Content(tempo.yml) Start!———-
server: http_listen_port: 3200
distributor: receivers: otlp: protocols: grpc: http:
ingester: lifecycler: ring: kvstore: store: inmemory replication_factor: 1
compactor: compaction: block_retention: 24h
storage: trace: backend: local local: path: /tmp/tempo wal: path: /tmp/tempo/wal
———-Tempo Content End!———- ———-Loki Content(loki.yml) Start!———-
auth_enabled: false
server: http_listen_port: 3100
common: path_prefix: /tmp/loki replication_factor: 1 storage: filesystem: chunks_directory: /tmp/loki/chunks rules_directory: /tmp/loki/rules ring: kvstore: store: inmemory
schema_config: configs: - from: 2024-01-01 store: boltdb-shipper object_store: filesystem schema: v13 index: prefix: index_ period: 24h
———-Loki Content End!———-