astron-rpa

GitHub

Agent-ready RPA suite with out-of-the-box automation tools. Built for individuals and enterprises.

RAW Compose
1. Pull Image docker pull ghcr.io/iflytek/astron-rpa/ai-service
2. 1-Click Launch Command docker run -d -p 32742:32742 --name astron-rpa ghcr.io/iflytek/astron-rpa/ai-service:latest
3. Compose Deployment docker compose up -d
docker/docker-compose.yml
Download .yml
#name: rpa-opensource-studio
x-env-file: &env_file
  - .env

volumes:
  mysql_data:

services:
  mysql:
    image: mysql:8.4.6
    container_name: rpa-opensource-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD}
      MYSQL_DATABASE: ${DATABASE_NAME}
    env_file: *env_file
    # ports:
    #  - "${DATABASE_PORT}:3306"
    volumes:
      - mysql_data:/var/lib/mysql
      - ./volumes/mysql/my.cnf:/etc/mysql/conf.d/my.cnf:ro
      - ./volumes/mysql/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql
      - ./volumes/mysql/init_app_market_dict_data.sql:/docker-entrypoint-initdb.d/02-init_data.sql
      - ./volumes/mysql/init_his_data_enum_data.sql:/docker-entrypoint-initdb.d/04-init_data.sql
      - ./volumes/mysql/init_sample_template_data.sql:/docker-entrypoint-initdb.d/05-init_data.sql
      - ./volumes/mysql/init_c_atom_meta_new_data.sql:/docker-entrypoint-initdb.d/06-init_data.sql
    command: |
      bash -c "
      cp /etc/mysql/conf.d/my.cnf /etc/mysql/conf.d/my1.cnf &&
      
      (
        echo 'Wait for MySQL to start...';
        until mysqladmin ping -h localhost -u root -p'${DATABASE_PASSWORD}' --silent; do
          sleep 5;
        done;
        
        echo 'MySQL is up! Running incremental scripts...';
        
        for f in /docker-entrypoint-initdb.d/*.sql; do
          if [[ \"\$$f\" != *\"01-schema.sql\" ]]; then
            echo \"Running \$$f ...\";
            mysql -u root -p'${DATABASE_PASSWORD}' ${DATABASE_NAME} < \"\$$f\";
          fi
        done;
        
        echo 'All scripts finished.';
      ) &
      
      docker-entrypoint.sh mysqld
      "
    healthcheck:
      test:
        [
          'CMD',
          'mysqladmin',
          'ping',
          '-h',
          'localhost',
          '-u${DATABASE_USERNAME}',
          '-p${DATABASE_PASSWORD}',
        ]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s
    networks:
      - rpa-opensource-network

  atlas:
    image: arigaio/atlas:latest
    container_name: rpa-opensource-atlas
    volumes:
      - ./volumes/atlas:/data/atlas
    networks:
      - rpa-opensource-network
    depends_on:
      mysql:
        condition: service_healthy
    command: schema apply --url "${ATLAS_URL}" --to "file:///data/atlas/schema.hcl" --auto-approve
    env_file: *env_file

  redis:
    image: bitnami/redis:latest
    container_name: rpa-opensource-redis
    restart: always
    user: root
    privileged: true
    env_file: *env_file
    environment:
      - REDIS_AOF_ENABLED=no
      - REDIS_PORT_NUMBER=${REDIS_PORT}
      - REDIS_IO_THREADS=4
      - ALLOW_EMPTY_PASSWORD=yes
    # ports:
    #  - "${REDIS_PORT}:6379"
    volumes:
      - ./data/bitnami/redis:/bitnami/redis/data:rw,Z
    command: >
      bash -c "
        /opt/bitnami/scripts/redis/setup.sh
        # Set proper permissions for data directories
        chown -R redis:redis /bitnami/redis/data
        chmod g+s /bitnami/redis/data

        exec /opt/bitnami/scripts/redis/entrypoint.sh /opt/bitnami/scripts/redis/run.sh
      "
    healthcheck:
      test: ['CMD', 'redis-cli', 'ping']
      interval: 5s
      timeout: 10s
      retries: 10
      start_period: 10s
    networks:
      - rpa-opensource-network
  
  minio:
    image: minio/minio:RELEASE.2025-06-13T11-33-47Z-cpuv1
    container_name: rpa-opensource-minio
    user: root
    privileged: true
    restart: always
    env_file: *env_file
    # ports:
    #   - "9000:9000"
    #   - "9001:9001"
    volumes:
      - ./data/minio:/data
    environment:
      MINIO_ROOT_USER: ${MINIO_AK}
      MINIO_ROOT_PASSWORD: ${MINIO_SK}
      MINIO_DEFAULT_BUCKETS: ${MINIO_BUCKET}
    entrypoint:
      - /bin/sh
      - -c
      - |
        # Run initialization in background
        (
          # Wait for MinIO to be ready
          until (/usr/bin/mc alias set localminio http://localhost:9000 ${MINIO_AK} ${MINIO_SK}) do
            echo "Waiting for MinIO to be ready..."
            sleep 1
          done

          # Create bucket
          /usr/bin/mc mb --ignore-existing localminio/${MINIO_BUCKET}

          echo "MinIO initialization complete."
        ) &

        # Start minio server in foreground
        exec minio server /data --console-address ":9001"
    healthcheck:
      test:
        [
          'CMD-SHELL',
          '/usr/bin/mc alias set health_check http://localhost:9000 ${MINIO_AK} ${MINIO_SK} && /usr/bin/mc ready health_check',
        ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 30s
    networks:
      - rpa-opensource-network

  openresty-nginx:
    image: openresty/openresty:1.27.1.1-alpine
    container_name: rpa-opensource-openresty-nginx
    restart: always
    ports:
      - "32742:80"
    volumes:
      - ./volumes/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
      - ./volumes/nginx/lua:/usr/local/openresty/nginx/lua:ro
      - ./logs/nginx:/usr/local/openresty/nginx/logs
    depends_on:
      - resource-service
      - robot-service
      - ai-service
      - openapi-service
      - rpa-auth
    healthcheck:
      test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    networks:
      - rpa-opensource-network

  casdoor:
    image: casbin/casdoor:v2.67.0
    container_name: rpa-opensource-casdoor
    restart: always
    env_file: *env_file
    environment:
      - driverName=mysql
      - dataSourceName=${DATABASE_USERNAME}:${DATABASE_PASSWORD}@tcp(${DATABASE_HOST}:${DATABASE_PORT})/
      - CASDOOR_ENABLE_HTTP_WEBHOOK=true
    ports:
      - "8000:8000"
    volumes:
      - ./volumes/casdoor/init_data_dump.json:/init_data.json
    depends_on:
      mysql:
        condition: service_healthy
    networks:
      - rpa-opensource-network

  ai-service:
    image: ghcr.io/iflytek/astron-rpa/ai-service:latest
    # build:
    #  context: ..
    #  dockerfile: backend/ai-service/Dockerfile
    container_name: rpa-opensource-ai-service
    restart: always
    env_file: *env_file
    environment:
      - DATABASE_URL=mysql+aiomysql://${DATABASE_USERNAME}:${DATABASE_PASSWORD}@mysql:3306/${DATABASE_NAME}
      - REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
      - AICHAT_BASE_URL=${AICHAT_BASE_URL}
      - AICHAT_API_KEY=${AICHAT_API_KEY}
    # ports:
    #   - "8010:8010"
    volumes:
      - ../backend/ai-service/app:/app/app
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy
      casdoor:
        condition: service_started
    networks:
      - rpa-opensource-network

  openapi-service:
    image: ghcr.io/iflytek/astron-rpa/openapi-service:latest
    # build:
    #  context: ..
    #  dockerfile: backend/openapi-service/Dockerfile
    container_name: rpa-opensource-openapi-service
    restart: always
    env_file: *env_file
    environment:
      - DATABASE_URL=mysql+aiomysql://${DATABASE_USERNAME}:${DATABASE_PASSWORD}@mysql:3306/${DATABASE_NAME}
      - REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
      - AICHAT_BASE_URL=${AICHAT_BASE_URL}
      - AICHAT_API_KEY=${AICHAT_API_KEY}
    # ports:
    #   - "8020:8020"
    volumes:
      - ../backend/openapi-service/app:/app/app
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy
      casdoor:
        condition: service_started
    networks:
      - rpa-opensource-network

  resource-service:
    image: ghcr.io/iflytek/astron-rpa/resource-service:latest
    # build:
    #  context: ..
    #  dockerfile: backend/resource-service/Dockerfile
    container_name: rpa-opensource-resource-service
    restart: always
    env_file: *env_file
    # ports:
    #   - "8030:8030"
    volumes:
      - ./logs/resource-service:/app/logs
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy
      minio:
        condition: service_healthy
      casdoor:
        condition: service_started
    networks:
      - rpa-opensource-network

  robot-service:
    image: ghcr.io/iflytek/astron-rpa/robot-service:latest
    # build:
    #  context: ..
    #  dockerfile: backend/robot-service/Dockerfile
    container_name: rpa-opensource-robot-service
    restart: always
    env_file: *env_file
    # ports:
    #   - "8040:8040"
    volumes:
      - ./logs/robot-service:/app/logs
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy
      casdoor:
        condition: service_started
    networks:
      - rpa-opensource-network

  rpa-auth:
    image: ghcr.io/iflytek/astron-rpa/rpa-auth:latest
    # build:
    #  context: ..
    #  dockerfile: backend/rpa-auth/Dockerfile
    container_name: rpa-opensource-rpa-auth
    restart: always
    env_file: *env_file
    # ports:
    #   - "10251:10251"
    volumes:
      - ./logs/rpa-auth:/app/logs
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy
      casdoor:
        condition: service_started
    networks:
      - rpa-opensource-network

networks:
  rpa-opensource-network:
    driver: bridge