Compare commits
10 Commits
5593442534
...
4e32725279
| Author | SHA1 | Date | |
|---|---|---|---|
| 4e32725279 | |||
| 8649da0b62 | |||
| 454bb1e076 | |||
| 0be7207e07 | |||
| 6011df78d3 | |||
| edecb7bffb | |||
| f25e9ad5b0 | |||
| a7a677247d | |||
| a3f6d0ca1b | |||
| 83cd970765 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -183,4 +183,5 @@ backup_*.sql
|
|||||||
|
|
||||||
# Temporary files
|
# Temporary files
|
||||||
*.tmp
|
*.tmp
|
||||||
*.temp
|
*.temp
|
||||||
|
data/
|
||||||
19
Dockerfile
Normal file
19
Dockerfile
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
FROM bet-base:arm64
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends tzdata && \
|
||||||
|
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
|
||||||
|
dpkg-reconfigure -f noninteractive tzdata && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
ENV HTTP_PROXY=http://host.docker.internal:7890
|
||||||
|
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
CMD ["bash"]
|
||||||
64
Dockerfile-base
Normal file
64
Dockerfile-base
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# 指定目标平台
|
||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
# 设置工作目录
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# 安装系统依赖
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
wget \
|
||||||
|
gnupg \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# 安装Playwright的依赖
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
libnss3 \
|
||||||
|
libnspr4 \
|
||||||
|
libatk1.0-0 \
|
||||||
|
libatk-bridge2.0-0 \
|
||||||
|
libcups2 \
|
||||||
|
libdrm2 \
|
||||||
|
libdbus-1-3 \
|
||||||
|
libxkbcommon0 \
|
||||||
|
libxcomposite1 \
|
||||||
|
libxdamage1 \
|
||||||
|
libxfixes3 \
|
||||||
|
libxrandr2 \
|
||||||
|
libgbm1 \
|
||||||
|
libasound2 \
|
||||||
|
libpango-1.0-0 \
|
||||||
|
libpangocairo-1.0-0 \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# 配置pip源
|
||||||
|
RUN mkdir -p /root/.pip && \
|
||||||
|
echo "[global]" > /root/.pip/pip.conf && \
|
||||||
|
echo "index-url = https://pypi.tuna.tsinghua.edu.cn/simple" >> /root/.pip/pip.conf && \
|
||||||
|
echo "trusted-host = pypi.tuna.tsinghua.edu.cn" >> /root/.pip/pip.conf
|
||||||
|
|
||||||
|
# 更新pip
|
||||||
|
RUN python -m pip install --upgrade pip
|
||||||
|
|
||||||
|
COPY requirements.txt .
|
||||||
|
|
||||||
|
# 安装Python依赖
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# 预先安装 Playwright 的系统依赖
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
xvfb \
|
||||||
|
libopengl0 \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# 安装Playwright浏览器
|
||||||
|
RUN playwright install chromium
|
||||||
|
RUN playwright install-deps
|
||||||
|
|
||||||
|
# 暴露端口
|
||||||
|
EXPOSE 8000
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 启动命令
|
||||||
|
CMD ["bash"]
|
||||||
@@ -15,7 +15,7 @@ from dao.Database import Database
|
|||||||
from playwright.sync_api import sync_playwright, Page, BrowserContext, expect
|
from playwright.sync_api import sync_playwright, Page, BrowserContext, expect
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from data_model import MysqlConfig, OddsjamOrderStatus
|
from data_model import MysqlConfig, OddsjamOrderStatus
|
||||||
from dingtalk import DingTalkBot
|
from common.dingtalk import DingTalkBot
|
||||||
|
|
||||||
webhook = "https://oapi.dingtalk.com/robot/send?access_token=21de667159edadd33172c6ec414a2addf9c6359189350ffd36819d2a20e8a0f4"
|
webhook = "https://oapi.dingtalk.com/robot/send?access_token=21de667159edadd33172c6ec414a2addf9c6359189350ffd36819d2a20e8a0f4"
|
||||||
secret = "SEC43a0fa0b29717f98637a119b92a0bd5f7b2b6da671bdd2bd1279ed8323454d5e"
|
secret = "SEC43a0fa0b29717f98637a119b92a0bd5f7b2b6da671bdd2bd1279ed8323454d5e"
|
||||||
@@ -390,7 +390,7 @@ def get_oddsjam_bet_tracker(ds: str) -> SyncOddsjamBetTracker:
|
|||||||
oddsjam_bet_tracker = SyncOddsjamBetTracker(
|
oddsjam_bet_tracker = SyncOddsjamBetTracker(
|
||||||
login_state_path=login_state_save_path,
|
login_state_path=login_state_save_path,
|
||||||
intercept_response_res_save_path=intercept_response_res_save_path,
|
intercept_response_res_save_path=intercept_response_res_save_path,
|
||||||
# headless=True
|
headless=True
|
||||||
)
|
)
|
||||||
return oddsjam_bet_tracker
|
return oddsjam_bet_tracker
|
||||||
|
|
||||||
@@ -408,9 +408,14 @@ if __name__ == "__main__":
|
|||||||
import schedule
|
import schedule
|
||||||
|
|
||||||
# schedule.every().day.at("07:00").do(clear_order_from_oddsjam)
|
# schedule.every().day.at("07:00").do(clear_order_from_oddsjam)
|
||||||
|
UPLOAD_SCHEDULE = os.environ.get("UPLOAD_SCHEDULE", "10:00")
|
||||||
|
PULL_SCHEDULE = os.environ.get("PULL_SCHEDULE", "13:00")
|
||||||
|
logger.info(f"upload schedule: {UPLOAD_SCHEDULE}")
|
||||||
|
logger.info(f"pull schedule: {PULL_SCHEDULE}")
|
||||||
|
|
||||||
schedule.every().day.at("11:20").do(pull_data_from_oddsjam_update)
|
|
||||||
schedule.every().day.at("14:00").do(upload_new_bets_data2oddsjam)
|
schedule.every().day.at(PULL_SCHEDULE).do(pull_data_from_oddsjam_update)
|
||||||
|
schedule.every().day.at(UPLOAD_SCHEDULE).do(upload_new_bets_data2oddsjam)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
schedule.run_pending()
|
schedule.run_pending()
|
||||||
|
|||||||
71
build-and-push.sh
Executable file
71
build-and-push.sh
Executable file
@@ -0,0 +1,71 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Value Investing App - 构建和推送脚本
|
||||||
|
# 使用 docker 构建镜像并推送到私有仓库
|
||||||
|
|
||||||
|
set -e # 遇到错误立即退出
|
||||||
|
|
||||||
|
# 配置变量
|
||||||
|
IMAGE_NAME="bet"
|
||||||
|
REGISTRY="192.168.0.115:5000"
|
||||||
|
TAG="latest"
|
||||||
|
FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${TAG}"
|
||||||
|
|
||||||
|
echo "========================================="
|
||||||
|
echo "Value Investing App 构建和推送脚本"
|
||||||
|
echo "========================================="
|
||||||
|
|
||||||
|
|
||||||
|
# 构建镜像
|
||||||
|
echo "1. 构建 Docker 镜像..."
|
||||||
|
echo " 镜像名称: ${IMAGE_NAME}"
|
||||||
|
docker build --platform linux/arm64 -t ${IMAGE_NAME} .
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo " ✅ 镜像构建成功"
|
||||||
|
else
|
||||||
|
echo " ❌ 镜像构建失败"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 打标签
|
||||||
|
echo "2. 为镜像打标签..."
|
||||||
|
echo " 标签: ${FULL_IMAGE_NAME}"
|
||||||
|
docker tag ${IMAGE_NAME} ${FULL_IMAGE_NAME}
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo " ✅ 标签添加成功"
|
||||||
|
else
|
||||||
|
echo " ❌ 标签添加失败"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 推送到私有仓库
|
||||||
|
echo "3. 推送镜像到私有仓库..."
|
||||||
|
echo " 仓库地址: ${REGISTRY}"
|
||||||
|
docker push ${FULL_IMAGE_NAME}
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo " ✅ 镜像推送成功"
|
||||||
|
else
|
||||||
|
echo " ❌ 镜像推送失败"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 清理本地镜像(可选)
|
||||||
|
echo "4. 清理临时镜像..."
|
||||||
|
docker rmi ${IMAGE_NAME} || true
|
||||||
|
|
||||||
|
# 显示最终结果
|
||||||
|
echo ""
|
||||||
|
echo "========================================="
|
||||||
|
echo "🎉 构建和推送完成!"
|
||||||
|
echo "========================================="
|
||||||
|
echo "镜像地址: ${FULL_IMAGE_NAME}"
|
||||||
|
echo ""
|
||||||
|
echo "可以使用以下命令运行容器:"
|
||||||
|
echo "docker run -d -p 5000:5000 --name value-investing-container ${FULL_IMAGE_NAME}"
|
||||||
|
echo ""
|
||||||
|
echo "或者在其他机器上拉取镜像:"
|
||||||
|
echo "docker pull ${FULL_IMAGE_NAME}"
|
||||||
|
echo "========================================="
|
||||||
@@ -1,7 +1,12 @@
|
|||||||
pymysql==1.1.1
|
pymysql>=1.1.1
|
||||||
pydantic==2.8.2
|
pydantic>=2.8.2
|
||||||
playwright==1.45.1
|
playwright>=1.45.1
|
||||||
numpy
|
numpy
|
||||||
pandas
|
pandas
|
||||||
scipy
|
scipy
|
||||||
scikit-learn
|
scikit-learn
|
||||||
|
loguru>=0.7.3
|
||||||
|
retry>=0.9.2
|
||||||
|
schedule>=1.2.2
|
||||||
|
requests>=2.32.5
|
||||||
|
pyarrow
|
||||||
Reference in New Issue
Block a user