Skip to main content

podman-deployment

Podman Compose deployment patterns for crypto-scout-collector containerization with TimescaleDB and automated backups Use when this capability is needed.

Ir a la instalación

Datos de origen

Repositorio
tomevault-io/skills-registry
Última actividad en el origen
28 de abril de 2026 a las 22:53
Idioma detectado de SKILL.md
inglés
Estrellas
0
Forks
0

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Explorador de archivos
2 archivos

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
podman-deployment
description
Podman Compose deployment patterns for crypto-scout-collector containerization with TimescaleDB and automated backups Use when this capability is needed.
metadata
{"author":"akarazhev"}
## What I Do Guide containerized deployment of crypto-scout-collector with Podman, including TimescaleDB with automated backups and RabbitMQ Streams integration. ## Container Services ### crypto-scout-collector Container - **Image**: `crypto-scout-collector:0.0.1` - **Base**: `eclipse-temurin:25-jre-alpine` - **User**: UID/GID `10001` (non-root) - **Port**: `8081` (health endpoint) - **Network**: `crypto-scout-bridge` - **Dependencies**: TimescaleDB, RabbitMQ ### TimescaleDB Container - **Image**: `timescale/timescaledb:latest-pg17` - **Service**: `crypto-scout-collector-db` - **Port**: `5432` - **Data**: `./data/postgresql` - **Init Scripts**: Mounted from `./script/` to `/docker-entrypoint-initdb.d/` - `00-init.sql` - extensions, schema, stream_offsets table - `01_bybit_spot_tables.sql` - spot market tables - `02_bybit_linear_tables.sql` - linear market tables - `03_crypto_scout_tables.sql` - CMC and risk tables - `04_btc_usd_daily_inserts.sql` - historical daily data - `05_btc_usd_weekly_inserts.sql` - historical weekly data - `06_cmc_fgi_inserts.sql` - CMC FGI historical data - `07_alternative_fgi_inserts.sql` - Alternative FGI data ### Backup Sidecar Container - **Image**: `prodrigestivill/postgres-backup-local:latest` - **Service**: `crypto-scout-collector-backup` - **Output**: `./backups` - **Schedule**: Configurable via env file ### RabbitMQ (external dependency) - **Streams Port**: `5552` - **AMQP Port**: `5672` - **Management**: `15672` - **Streams**: `bybit-stream`, `crypto-scout-stream` - **Queues**: `collector-queue`, `chatbot-queue` ## Container Build & Run ```bash # Build shaded JAR (required before building image) mvn -q -DskipTests package # Create network (once) ./script/network.sh # Prepare secrets cp secret/timescaledb.env.example secret/timescaledb.env cp secret/postgres-backup.env.example secret/postgres-backup.env cp secret/collector.env.example secret/collector.env chmod 600 secret/*.env # Edit secrets with your values $EDITOR secret/timescaledb.env $EDITOR secret/collector.env # Build and start all services podman-compose -f podman-compose.yml up -d # Check health curl -s http://localhost:8081/health # View logs podman logs -f crypto-scout-collector ``` ## Environment Configuration ### Required Secrets **secret/timescaledb.env**: ```env POSTGRES_DB=crypto_scout POSTGRES_USER=crypto_scout_db POSTGRES_PASSWORD=your_secure_password ``` **secret/collector.env**: ```env SERVER_PORT=8081 AMQP_RABBITMQ_HOST=host.containers.internal AMQP_RABBITMQ_PORT=5672 AMQP_STREAM_PORT=5552 AMQP_RABBITMQ_USERNAME=crypto_scout_mq AMQP_RABBITMQ_PASSWORD=your_mq_password JDBC_DATASOURCE_URL=jdbc:postgresql://crypto-scout-collector-db:5432/crypto_scout JDBC_DATASOURCE_USERNAME=crypto_scout_db JDBC_DATASOURCE_PASSWORD=your_db_password ``` ## Compose Hardening The `podman-compose.yml` includes production hardening: - `init: true` - proper signal handling - `pids_limit: 256` - process limit - `read_only` rootfs with `tmpfs: /tmp` - `cap_drop: ALL` - drop all capabilities - `security_opt: no-new-privileges=true` - `cpus: 0.5`, `mem_limit: 256m` - `restart: unless-stopped` - healthcheck with `start_period: 30s` ## Database Initialization ### Fresh Installation 1. Ensure `./data/postgresql` is empty 2. Start containers - init scripts run automatically 3. Verify: `podman exec crypto-scout-collector-db psql -U crypto_scout_db -c "\dt crypto_scout.*"` ### Existing Database For already-initialized databases, apply scripts manually: ```bash podman exec -i crypto-scout-collector-db psql -U crypto_scout_db -d crypto_scout < script/bybit_spot_tables.sql podman exec -i crypto-scout-collector-db psql -U crypto_scout_db -d crypto_scout < script/bybit_linear_tables.sql podman exec -i crypto-scout-collector-db psql -U crypto_scout_db -d crypto_scout < script/crypto_scout_tables.sql ``` ## Backup and Restore ### Automated Backups Backups run on schedule defined in `secret/postgres-backup.env`: ```env POSTGRES_BACKUP_SCHEDULE=@daily POSTGRES_BACKUP_KEEP_DAYS=7 POSTGRES_BACKUP_KEEP_WEEKS=4 POSTGRES_BACKUP_KEEP_MONTHS=6 ``` ### Manual Restore ```bash # From custom format dump pg_restore -h localhost -p 5432 -U crypto_scout_db -d crypto_scout < backups/crypto_scout-YYYYMMDD.dump # From SQL file psql -h localhost -p 5432 -U crypto_scout_db -d crypto_scout < backups/crypto_scout-YYYYMMDD.sql ``` ## Running the Service Locally ```bash # Prerequisites: RabbitMQ and TimescaleDB running # Set environment variables export AMQP_RABBITMQ_PASSWORD=your_mq_password export JDBC_DATASOURCE_PASSWORD=your_db_password # Run the app java -jar target/crypto-scout-collector-0.0.1.jar # Health check curl -s http://localhost:8081/health ``` ## Troubleshooting ### Container not starting - Verify Podman: `podman --version` - Check logs: `podman logs crypto-scout-collector` - Verify network: `podman network inspect crypto-scout-bridge` ### Database connection errors - Check TimescaleDB health: `podman exec crypto-scout-collector-db pg_isready` - Verify credentials in `secret/collector.env` - Check network connectivity between containers ### RabbitMQ Streams not reachable - Confirm port 5552 is accessible - For host RabbitMQ: `AMQP_RABBITMQ_HOST=host.containers.internal` - Verify Streams plugin is enabled ### Health check failing - Check database connectivity - Verify RabbitMQ credentials - Review application logs: `podman logs crypto-scout-collector` ### Init scripts not applied - Data directory must be empty on first run - Re-initialize: `rm -rf ./data/postgresql` and restart ## When to Use Me Use this skill when: - Building and deploying the container image - Configuring Podman Compose for production - Setting up TimescaleDB with automated backups - Troubleshooting container or connectivity issues - Managing database initialization and migrations - Setting up CI/CD pipelines - Managing secrets and environment configuration - Performing backup and restore operations --- > Converted and distributed by [TomeVault](https://tomevault.io/claim/akarazhev) — claim your Tome and manage your conversions. <!-- tomevault:4.0:skill_md:2026-04-15 -->
Ver en GitHub