
decodeinvesting/decode-investing.rbDecode Investing Server 是一款用于索引 EDGAR SEC(美国证券交易委员会)公司数据的服务器镜像。其核心功能是通过自动化任务处理 SEC 公开 filings 数据,包括公司基本信息、财务文件(如XBRL文档)、财务事实(Facts)的提取与存储,支持数据分析与研究场景下的结构化数据获取需求。
Edgar::CompanyIndexerJob),支持异步执行数据索引、文档下载等耗时任务。enqueue_all、enqueue_set),可同时处理多家公司数据。ruby# 触发全量索引任务(异步执行) Edgar::CompanyIndexerJob.perform_later
ruby# 通过***代码(如AAPL)获取公司记录 company = Edgar::Company.find_by_ticker('AAPL')
ruby# 索引单家公司的 filings 数据、文档及表单类型 Edgar::CompanyDataIndexEnqueuerJob.perform_later(company) # 批量索引所有公司的 filings 数据 Edgar::CompanyDataIndexEnqueuerJob.enqueue_all # 单独索引公司的 filings 列表 Edgar::FilingIndexerJob.perform_later(company) # 回填公司所有 filings 的表单类型 Edgar::FilingsFormTypeBackfillJob.perform_later(company)
通过Docker Compose调用Arelle工具(需提前部署Arelle服务):
bash# 提取财务事实(Facts)到CSV docker-compose run arelle \ python3 /opt/arelle/arelleCmdLine.py -f /index/data/<CIK>/<accession-number>/<xbrl-file> \ --facts /index/data/<CIK>/<accession-number>/facts.csv \ --factListCols "Label Name contextRef unitRef Dec Prec Lang Value EntityScheme EntityIdentifier Period Dimensions" # 提取概念(Concepts)到CSV docker-compose run arelle \ python3 /opt/arelle/arelleCmdLine.py -f /index/data/<CIK>/<accession-number>/<xbrl-file> \ --concepts /index/data/<CIK>/<accession-number>/concepts.csv
说明:
<CIK>为公司SEC唯一标识(如可口可乐公司为21344),<accession-number>为 filings 编号(如000002134420000006),<xbrl-file>为XBRL文档路径。
ruby# 下载指定filing的XBRL文档至S3,标记为待提取状态 Edgar::XbrlDocumentDownloadJob.perform_later(filing)
ruby# 将提取的财务事实(facts.csv)导入数据库 Sec::FactsImporterJob.enqueue(company)
bash# 创建S3桶 aws s3api create-bucket \ --bucket decode-investing-com-state-store \ --region us-east-1 # 启用版本控制 aws s3api put-bucket-versioning \ --bucket decode-investing-com-state-store \ --versioning-configuration Status=Enabled
bashexport NAME=decodeinvestingcluster.k8s.local # 集群名称 export KOPS_STATE_STORE=s3://decode-investing-com-state-store # 状态存储路径 export VPC_ID=vpc-*** # 替换为实际VPC ID export NETWORK_CIDR=10.100.0.0/16 # 替换为VPC的CIDR网段
bash# 查看可用区(以us-west-2为例) aws ec2 describe-availability-zones --region us-west-2 # 初始化集群配置(指定可用区和VPC) kops create cluster \ --zones=us-west-2a \ decodeinvestingcluster.k8s.local --vpc=${VPC_ID} # 编辑集群配置(需按现有VPC子网调整CIDR,避免冲突) kops edit cluster decodeinvestingcluster.k8s.local
参考文档:Kops在现有VPC中部署、子网规划工具
bash# 应用集群配置 kops update cluster decodeinvestingcluster.k8s.local --yes # 验证集群状态 kops validate cluster # 配置kubectl访问 kops export kubecfg decodeinvestingcluster.k8s.local
bashkubectl apply -f kubernetes-manifests/decodeinvesting-namespace.yaml
bash# 数据库密钥(替换占位符) kubectl create secret generic database-secret \ --from-literal=db-username='<数据库用户名>' \ --from-literal=db-password='<数据库密码>' \ --from-literal=db-endpoint='<数据库地址>' \ --from-literal=db-name='<数据库名称>' \ --namespace='decodeinvesting' # AWS访问密钥 kubectl create secret generic aws-access-secret \ --from-literal=aws-access-key='<AWS访问密钥>' \ --from-literal=aws-secret-access_key='<AWS密钥>' \ --namespace='decodeinvesting' # Rails应用密钥 kubectl create secret generic rails-secret \ --from-literal=secret-key-base='<Rails密钥>' \ --namespace='decodeinvesting' # 应用配置(替换占位符) kubectl create configmap app-config \ --from-literal=host-path='<主机路径>' \ --from-literal=s3fs-bucket='<S3存储桶名称>' \ --namespace='decodeinvesting' # IEX Cloud API配置(***数据接口) kubectl create configmap iex-config \ --from-literal=iex_api_publishable_token='<IEX公开令牌>' \ --from-literal=iex_api_secret_token='<IEX密钥令牌>' \ --from-literal=iex_api_endpoint='[***] \ --namespace='decodeinvesting'
bash# 应用所有manifest文件 kubectl apply -f kubernetes-manifests/ # 部署Rails API服务 kubectl apply -f ./kubernetes-manifests/rails-server-service.yaml kubectl apply -f ./kubernetes-manifests/rails-server-deployment.yaml # 查看服务外部IP kubectl get svc -n decodeinvesting # 示例输出: # NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE # rails-server Load*** 100.67.111.51 <ELB标签>.us-west-2.elb.amazonaws.com 80:30520/TCP 11m
bash# 查看节点 kubectl get nodes # 查看命名空间内Pod kubectl get pods -n decodeinvesting
bash# 预览删除 kops delete cluster --name decodeinvestingcluster.k8s.local # 执行删除 kops delete cluster --name decodeinvestingcluster.k8s.local --yes
bash# 安装VSCode sudo snap install --classic code # 安装Docker(参考官方文档) # [***]
bash# 克隆代码仓库 git clone [***] cd decode-investing.rb # 创建.env文件(配置数据存储路径) echo "HOST_PATH=~/bin/edgar-data" > .env # 构建Docker镜像 docker-compose build clientapp-dev # 进入容器环境 docker-compose run clientapp-dev bash # 安装依赖 yarn install # 启动本地服务 docker-compose up clientapp-dev
bash# 克隆代码仓库(通过Git Bash执行) cd Desktop git clone [***] cd decode-investing.rb # 用VSCode打开项目 code . # 构建Docker镜像 docker compose build clientapp-dev # 进入容器环境 docker compose run clientapp-dev bash # 安装依赖 yarn install # 启动本地服务 docker compose up clientapp-dev
ruby# 获取前10家公司ID并批量索引 ids = Edgar::Company.first(10).pluck(:id) Edgar::CompanyDataIndexEnqueuerJob.enqueue_set(ids)
ruby# 创建用于测试的虚拟公司 Edgar::Company.create( cik: '0000000000', ticker: "FAKE_DECODEINVESTING_TICKER", name: "FAKE_DECODEINVESTING_NAME" )
ruby# 指定***代码(如AAPL) ticker = "AAPL" company = Edgar::Company.ticker(ticker) # 生成公司资料 DecodeInvesting::CompanyProfileManager.call(company) # 查看生成的资料 pp company.profile
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务