diff --git a/README.md b/README.md index 29f9f21c5cadf1b3fa752134e4d4e560768af47e..92294c1cb0eadfef54c8d24ecaa23bd5217d1cc4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -### pythonstock V3.0 项目简介,2025.01.09更新 +### pythonstock V3.0 项目简介,2025.02.28更新 **特别说明:股市有风险投资需谨慎,本项目只能用于Python代码学习,股票分析,投资失败亏钱不负责,不算BUG。** @@ -79,12 +79,12 @@ RSI: | 17, VR,MAVR指标 | http://wiki.mbalib.com/wiki/%E6%88%90%E4%BA%A4%E9%87%8F%E6%AF%94%E7%8E%87 成交量比率(Volumn Ratio,VR)(简称VR),是一项通过分析股价上升日成交额(或成交量,下同)与股价下降日成交额比值, 从而掌握市场买卖气势的中期技术指标。 | -### github项目2023-06-02 执行存档,gitee是最新的 +### github/gitee是项目地址 -这个项目地址已经存档,不维护了 +github地址: https://github.com/pythonstock/stock -迁移到了gitee地址: +gitee地址: https://gitee.com/pythonstock/stock ### 项目部署放到docker-compose @@ -183,6 +183,13 @@ http://docs.sqlalchemy.org/en/latest/core/reflection.html ## 更新日志 +### 17 版本进行镜像升级 2025-02-28 + +存储数据格式为 double 方便进行排序,decimal 类型转换出问题。 +拆分生产部署,切换成nginx,前端进行编译构建。提高前端加载速度。 +nginx的html影射到./data/html目录,前端编译完成需要拷贝文件到html,等待完成即可。 +解决定时任务问题,需要设置权限,才可以。 + ### 16 更新发布 2.1 版本进行镜像升级 2023-06-03 diff --git a/backend/jobs/cron.daily/run_daily b/backend/jobs/cron.daily/run_daily old mode 100644 new mode 100755 diff --git a/backend/jobs/cron.hourly/run_hourly b/backend/jobs/cron.hourly/run_hourly old mode 100644 new mode 100755 diff --git a/backend/jobs/cron.minutely/run_1minute b/backend/jobs/cron.minutely/run_1minute old mode 100644 new mode 100755 index 5ca98a6e55f8145298ba5566c93517bf6268155c..3485fdd2b66a3dc17c9770a5d90f8f093411b61f --- a/backend/jobs/cron.minutely/run_1minute +++ b/backend/jobs/cron.minutely/run_1minute @@ -3,6 +3,3 @@ mkdir -p /data/logs DATE=`date +%Y-%m-%d:%H:%M:%S` echo $DATE >> /data/logs/1min.log -echo MYSQL_HOST $MYSQL_HOST >> /data/logs/1min.log -echo MYSQL_USER $MYSQL_USER >> /data/logs/1min.log -echo MYSQL_DB $MYSQL_DB >> /data/logs/1min.log diff --git a/backend/jobs/cron.monthly/run_monthly b/backend/jobs/cron.monthly/run_monthly old mode 100644 new mode 100755 diff --git a/backend/jobs/crontab b/backend/jobs/crontab new file mode 100644 index 0000000000000000000000000000000000000000..c6b7efbc9842fc027726f71b656ae83aecc793d2 --- /dev/null +++ b/backend/jobs/crontab @@ -0,0 +1,6 @@ +SHELL=/bin/sh +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +*/1 * * * * /bin/run-parts /etc/cron.minutely +10 * * * * /bin/run-parts /etc/cron.hourly +30 16 * * * /bin/run-parts /etc/cron.daily +30 17 1,10,20 * * /bin/run-parts /etc/cron.monthly diff --git a/backend/jobs/run_cron.sh b/backend/jobs/run_cron.sh new file mode 100755 index 0000000000000000000000000000000000000000..534f4ec8a95c2aea9c3c3af7a87cc23bd8cb319f --- /dev/null +++ b/backend/jobs/run_cron.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +export PYTHONIOENCODING=utf-8 +export LANG=zh_CN.UTF-8 +export PYTHONPATH=/data/stock +export LC_CTYPE=zh_CN.UTF-8 + +mkdir -p /data/logs/tensorflow + + + +DATE=`date +%Y-%m-%d:%H:%M:%S` + +echo $DATE >> /data/logs/run_cron.log + +# 解决定时任务不启动问题,因为权限导致 +chmod 755 /etc/cron.minutely/* && chmod 755 /etc/cron.hourly/* +chmod 755 /etc/cron.daily/* && chmod 755 /etc/cron.monthly/* + +# 配置文件每次都设置权限 +chmod 600 /var/spool/cron/crontabs/root +chown root:root /var/spool/cron/crontabs/root + +#启动cron服务。在前台 +/usr/sbin/cron -f \ No newline at end of file diff --git a/backend/jobs/run_init.sh b/backend/jobs/run_init.sh index c9930883c50e5fdad18f5263a9b67a40e3dc8c3b..8dd5560efe5f8bc538ab4a7c3a06621aa5697721 100755 --- a/backend/jobs/run_init.sh +++ b/backend/jobs/run_init.sh @@ -25,5 +25,5 @@ printenv | grep -v "no_proxy" >> /etc/environment # 第一次后台执行日数据。 nohup bash /data/stock/jobs/cron.daily/run_daily & -#启动cron服务。在前台 -/usr/sbin/cron -f \ No newline at end of file +#防止 supervisor 重复执行 +sleep 999999d \ No newline at end of file diff --git a/backend/supervisor/supervisord.conf b/backend/supervisor/supervisord.conf index 7ff09c17bc9b73259d2553bc25131338b16c09af..fb49c713df83aaf4edc38d07739c69ca3a894ada 100644 --- a/backend/supervisor/supervisord.conf +++ b/backend/supervisor/supervisord.conf @@ -22,7 +22,7 @@ supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket -[program:init_and_cron] +[program:init] command=/data/stock/jobs/run_init.sh autostart=true autorestart=true @@ -31,6 +31,16 @@ priority=1 stopasgroup=true killasgroup=true +[program:cron] +command=/data/stock/jobs/run_cron.sh +autostart=true +autorestart=true +startsecs=20 +priority=1 +stopasgroup=true +killasgroup=true + + [program:stock-web] command=/data/stock/jobs/run_web.sh autostart=true diff --git a/backend/web/dataTableHandler.py b/backend/web/dataTableHandler.py index 2b4d47c719f741f3b72d3e563835d3d1402cb7c2..8b60e135c26baa7958b3738d354428e58da49a0f 100755 --- a/backend/web/dataTableHandler.py +++ b/backend/web/dataTableHandler.py @@ -77,8 +77,9 @@ class GetStockDataHandler(webBase.BaseHandler): name_param = self.get_argument("name", default="stock_zh_ah_name", strip=False) type_param = self.get_argument("type", default=None, strip=False) date_param = self.get_argument("date", default=None, strip=False) + code_param = self.get_argument("code", default=None, strip=False) - logging.info(f"page param: {page_param}, {limit_param}, {type_param}, {date_param}") + logging.info(f"page param: {page_param}, {limit_param}, {type_param}, {date_param}, {code_param}") if name_param == ":tableName": @@ -148,6 +149,13 @@ class GetStockDataHandler(webBase.BaseHandler): search_sql += f" WHERE `date` = '{date_param}' " else: search_sql += f" AND `date` = '{date_param}' " + + if code_param: + if "WHERE" not in search_sql: + search_sql += f" WHERE `code` = '{code_param}' " + else: + search_sql += f" AND `code` = '{code_param}' " + # print("tableInfo :", stock_web) order_by_sql = "" # 增加排序。 @@ -159,9 +167,9 @@ class GetStockDataHandler(webBase.BaseHandler): col_tmp = tableInfo.columns[key] dir_tmp = order_by_dir[idx] if idx != 0: - order_by_sql += " ,cast(`%s` as decimal) %s" % (col_tmp, dir_tmp) + order_by_sql += " , %s %s" % (col_tmp, dir_tmp) else: - order_by_sql += " cast(`%s` as decimal) %s" % (col_tmp, dir_tmp) + order_by_sql += " %s %s" % (col_tmp, dir_tmp) idx += 1 # 查询数据库。 limit_sql = "" diff --git a/docker-compose/dev-docker-compose.yml b/docker-compose/dev-docker-compose.yml index 7c415e3e72ded83b375004deb9953ac4ef054856..2a1dc1f9340ef64ca252d9223ba1f2ded9cf5f76 100644 --- a/docker-compose/dev-docker-compose.yml +++ b/docker-compose/dev-docker-compose.yml @@ -36,6 +36,11 @@ services: - "9090:9090" volumes: # 设置开发目录,方便开发调试 + - "../backend/jobs/crontab:/var/spool/cron/crontabs/root" + - "../backend/jobs/cron.minutely:/etc/cron.minutely" + - "../backend/jobs/cron.hourly:/etc/cron.hourly" + - "../backend/jobs/cron.daily:/etc/cron.daily" + - "../backend/jobs/cron.monthly:/etc/cron.monthly" - "../backend:/data/stock" - "../backend/supervisor:/data/supervisor" - "./data/notebooks:/data/notebooks" diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index f2f6b9a2b699a58e66db0a45833fb46ec9f653ce..b7a73eff6d2bf411e6a2819f376a2daa8259f230 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -1,41 +1,61 @@ networks: - stock-prod-network: + stock-dev-network: driver: bridge version: "3" services: - frontend: - image: pythonstock/frontend-prod:latest + +#### 使用node 镜像进行编译,构建成 js 文件给nginx 使用。 + frontend-build: + image: pythonstock/frontend-dev:latest build: context: . - dockerfile: docker/ProdFrontendDockerfile - container_name: frontend + dockerfile: docker/DevFrontendDockerfile + container_name: frontend-build + volumes: + # 设置开发目录,方便开发调试,生产环境拷贝到 /data/html + - "../frontend:/usr/src/app" + - "./data/html:/data/html" + environment: + LANG: zh_CN.UTF-8 + LC_CTYPE: zh_CN.UTF-8 + networks: + stock-dev-network: {} + # 入口写死,手动启动应用。每次构建时候使用,构建完成结束 + entrypoint: /usr/src/app/docker-build.sh + nginx: + image: docker.m.daocloud.io/library/nginx:stable-alpine + container_name: nginx ports: - "8080:8080" volumes: # 设置开发目录,方便开发调试 - - "../frontend:/usr/src/app" + - "./data/html:/usr/share/nginx/html" + - "./nginx/nginx.conf:/etc/nginx/conf.d/default.conf" environment: LANG: zh_CN.UTF-8 LC_CTYPE: zh_CN.UTF-8 restart: always networks: - stock-prod-network: {} - # 入口写死,手动启动应用。 - entrypoint: /usr/src/app/docker-entrypoint.sh + stock-dev-network: {} depends_on: - backend backend: - image: pythonstock/backend-prod:latest + image: pythonstock/backend-dev:latest build: context: . - dockerfile: docker/ProdBackendDockerfile + dockerfile: docker/DevBackendDockerfile container_name: backend ports: - "8888:8888" - "9090:9090" volumes: # 设置开发目录,方便开发调试 + - "../backend/jobs/crontab:/var/spool/cron/crontabs/root" + - "../backend/jobs/cron.minutely:/etc/cron.minutely" + - "../backend/jobs/cron.hourly:/etc/cron.hourly" + - "../backend/jobs/cron.daily:/etc/cron.daily" + - "../backend/jobs/cron.monthly:/etc/cron.monthly" - "../backend:/data/stock" - "../backend/supervisor:/data/supervisor" - "./data/notebooks:/data/notebooks" @@ -51,7 +71,7 @@ services: PYTHONIOENCODING: utf-8 restart: always networks: - stock-prod-network: {} + stock-dev-network: {} # 入口写死,手动启动应用。 #entrypoint: sleep 999999d depends_on: @@ -70,7 +90,7 @@ services: ports: - "3306:3306" networks: - stock-prod-network: {} + stock-dev-network: {} volumes: - "./mysql/my.cnf:/etc/mysql/my.cnf" - "./data/mysql-stock/data:/var/lib/mysql" diff --git a/docker-compose/docker/DevFrontendDockerfile b/docker-compose/docker/DevFrontendDockerfile index fa1335a0575353cf6e2794948eaa9285f5bd813a..02eaf3d96d81727b6c893f67732d17711619b20d 100644 --- a/docker-compose/docker/DevFrontendDockerfile +++ b/docker-compose/docker/DevFrontendDockerfile @@ -1,6 +1,10 @@ #使用 node:bullseye-slim 做基础镜像减少大小。 -FROM docker.m.daocloud.io/library/node:bullseye-slim +# FROM docker.m.daocloud.io/library/node:bullseye-slim +# fixbug 最新node 版本编译不过去, +# ERROR Error: Cannot find module './passes/web-incoming' + +FROM docker.m.daocloud.io/library/node:23.5.0-bullseye-slim # https://opsx.alibaba.com/mirror # 使用阿里云镜像地址。修改debian apt 更新地址,pip 地址,设置时区。 diff --git a/docker-compose/mysql/init.sql b/docker-compose/mysql/init.sql index 98c25247fc0fb5859979a11a93a7e644c9e1b421..c2d19ded871ba706c6f2d54e670d6ae702ebcd81 100644 --- a/docker-compose/mysql/init.sql +++ b/docker-compose/mysql/init.sql @@ -9,26 +9,26 @@ CREATE TABLE IF NOT EXISTS `stock_zh_a_spot_em` ( `date` varchar(255) NOT NULL, `code` varchar(255) NOT NULL, `name` varchar(255) DEFAULT NULL, - `last_price` varchar(255) DEFAULT NULL, - `change_percent` varchar(255) DEFAULT NULL, - `change_amount` varchar(255) DEFAULT NULL, - `volume` varchar(255) DEFAULT NULL, - `turnover` varchar(255) DEFAULT NULL, - `amplitude` varchar(255) DEFAULT NULL, - `high` varchar(255) DEFAULT NULL, - `low` varchar(255) DEFAULT NULL, - `open` varchar(255) DEFAULT NULL, - `closed` varchar(255) DEFAULT NULL, - `volume_ratio` varchar(255) DEFAULT NULL, - `turnover_rate` varchar(255) DEFAULT NULL, - `pe_ratio` varchar(255) DEFAULT NULL, - `pb_ratio` varchar(255) DEFAULT NULL, - `market_cap` varchar(255) DEFAULT NULL, - `circulating_market_cap` varchar(255) DEFAULT NULL, - `rise_speed` varchar(255) DEFAULT NULL, - `change_5min` varchar(255) DEFAULT NULL, - `change_ercent_60day` varchar(255) DEFAULT NULL, - `ytd_change_percent` varchar(255) DEFAULT NULL, + `last_price` double(20,2) DEFAULT NULL, + `change_percent` double(20,2) DEFAULT NULL, + `change_amount` double(20,2) DEFAULT NULL, + `volume` double(20,2) DEFAULT NULL, + `turnover` double(20,2) DEFAULT NULL, + `amplitude` double(20,2) DEFAULT NULL, + `high` double(20,2) DEFAULT NULL, + `low` double(20,2) DEFAULT NULL, + `open` double(20,2) DEFAULT NULL, + `closed` double(20,2) DEFAULT NULL, + `volume_ratio` double(20,2) DEFAULT NULL, + `turnover_rate` double(20,2) DEFAULT NULL, + `pe_ratio` double(20,2) DEFAULT NULL, + `pb_ratio` double(20,2) DEFAULT NULL, + `market_cap` double(20,2) DEFAULT NULL, + `circulating_market_cap` double(20,2) DEFAULT NULL, + `rise_speed` double(20,2) DEFAULT NULL, + `change_5min` double(20,2) DEFAULT NULL, + `change_ercent_60day` double(20,2) DEFAULT NULL, + `ytd_change_percent` double(20,2) DEFAULT NULL, PRIMARY KEY (`code`,`date`), KEY `idx_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; @@ -37,12 +37,12 @@ CREATE TABLE IF NOT EXISTS `stock_lhb_ggtj_sina` ( `date` varchar(255) NOT NULL, `code` varchar(255) NOT NULL, `name` varchar(255) DEFAULT NULL, - `ranking_times` varchar(255) DEFAULT NULL, - `sum_buy` varchar(255) DEFAULT NULL, - `sum_sell` varchar(255) DEFAULT NULL, - `net_amount` varchar(255) DEFAULT NULL, - `buy_seat` varchar(255) DEFAULT NULL, - `sell_seat` varchar(255) DEFAULT NULL, + `ranking_times` double(20,2) DEFAULT NULL, + `sum_buy` double(20,2) DEFAULT NULL, + `sum_sell` double(20,2) DEFAULT NULL, + `net_amount` double(20,2) DEFAULT NULL, + `buy_seat` double(20,2) DEFAULT NULL, + `sell_seat` double(20,2) DEFAULT NULL, PRIMARY KEY (`code`,`date`), KEY `idx_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; @@ -52,14 +52,14 @@ CREATE TABLE `stock_dzjy_mrtj` ( `date` varchar(255) NOT NULL, `code` varchar(255) NOT NULL, `name` varchar(255) DEFAULT NULL, - `quote_change` varchar(255) DEFAULT NULL, - `close_price` varchar(255) DEFAULT NULL, - `average_price` varchar(255) DEFAULT NULL, - `overflow_rate` varchar(255) DEFAULT NULL, - `trade_number` varchar(255) DEFAULT NULL, - `sum_volume` varchar(255) DEFAULT NULL, - `sum_turnover` varchar(255) DEFAULT NULL, - `turnover_market_rate` varchar(255) DEFAULT NULL, + `quote_change` double(20,2) DEFAULT NULL, + `close_price` double(20,2) DEFAULT NULL, + `average_price` double(20,2) DEFAULT NULL, + `overflow_rate` double(20,2) DEFAULT NULL, + `trade_number` double(20,2) DEFAULT NULL, + `sum_volume` double(20,2) DEFAULT NULL, + `sum_turnover` double(20,2) DEFAULT NULL, + `turnover_market_rate` double(20,2) DEFAULT NULL, PRIMARY KEY (`code`,`date`), KEY `idx_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; @@ -69,42 +69,42 @@ CREATE TABLE `guess_indicators_daily` ( `date` varchar(255) NOT NULL, `code` varchar(255) NOT NULL, `name` varchar(255) DEFAULT NULL, - `last_price` varchar(255) DEFAULT NULL, - `change_percent` varchar(255) DEFAULT NULL, - `change_amount` varchar(255) DEFAULT NULL, - `volume` varchar(255) DEFAULT NULL, - `turnover` varchar(255) DEFAULT NULL, - `amplitude` varchar(255) DEFAULT NULL, - `high` varchar(255) DEFAULT NULL, - `low` varchar(255) DEFAULT NULL, - `open` varchar(255) DEFAULT NULL, - `closed` varchar(255) DEFAULT NULL, - `volume_ratio` varchar(255) DEFAULT NULL, - `turnover_rate` varchar(255) DEFAULT NULL, - `pe_ratio` varchar(255) DEFAULT NULL, - `pb_ratio` varchar(255) DEFAULT NULL, - `market_cap` varchar(255) DEFAULT NULL, - `circulating_market_cap` varchar(255) DEFAULT NULL, - `rise_speed` varchar(255) DEFAULT NULL, - `change_5min` varchar(255) DEFAULT NULL, - `change_ercent_60day` varchar(255) DEFAULT NULL, - `ytd_change_percent` varchar(255) DEFAULT NULL, - `boll` varchar(255) DEFAULT NULL, - `boll_lb` varchar(255) DEFAULT NULL, - `boll_ub` varchar(255) DEFAULT NULL, - `kdjd` varchar(255) DEFAULT NULL, - `kdjj` varchar(255) DEFAULT NULL, - `kdjk` varchar(255) DEFAULT NULL, - `macd` varchar(255) DEFAULT NULL, - `macdh` varchar(255) DEFAULT NULL, - `macds` varchar(255) DEFAULT NULL, - `pdi` varchar(255) DEFAULT NULL, - `trix` varchar(255) DEFAULT NULL, - `trix_9_sma` varchar(255) DEFAULT NULL, - `vr` varchar(255) DEFAULT NULL, - `vr_6_sma` varchar(255) DEFAULT NULL, - `wr_10` varchar(255) DEFAULT NULL, - `wr_6` varchar(255) DEFAULT NULL, + `last_price` double(20,2) DEFAULT NULL, + `change_percent` double(20,2) DEFAULT NULL, + `change_amount` double(20,2) DEFAULT NULL, + `volume` double(20,2) DEFAULT NULL, + `turnover` double(20,2) DEFAULT NULL, + `amplitude` double(20,2) DEFAULT NULL, + `high` double(20,2) DEFAULT NULL, + `low` double(20,2) DEFAULT NULL, + `open` double(20,2) DEFAULT NULL, + `closed` double(20,2) DEFAULT NULL, + `volume_ratio` double(20,2) DEFAULT NULL, + `turnover_rate` double(20,2) DEFAULT NULL, + `pe_ratio` double(20,2) DEFAULT NULL, + `pb_ratio` double(20,2) DEFAULT NULL, + `market_cap` double(20,2) DEFAULT NULL, + `circulating_market_cap` double(20,2) DEFAULT NULL, + `rise_speed` double(20,2) DEFAULT NULL, + `change_5min` double(20,2) DEFAULT NULL, + `change_ercent_60day` double(20,2) DEFAULT NULL, + `ytd_change_percent` double(20,2) DEFAULT NULL, + `boll` double(20,2) DEFAULT NULL, + `boll_lb` double(20,2) DEFAULT NULL, + `boll_ub` double(20,2) DEFAULT NULL, + `kdjd` double(20,2) DEFAULT NULL, + `kdjj` double(20,2) DEFAULT NULL, + `kdjk` double(20,2) DEFAULT NULL, + `macd` double(20,2) DEFAULT NULL, + `macdh` double(20,2) DEFAULT NULL, + `macds` double(20,2) DEFAULT NULL, + `pdi` double(20,2) DEFAULT NULL, + `trix` double(20,2) DEFAULT NULL, + `trix_9_sma` double(20,2) DEFAULT NULL, + `vr` double(20,2) DEFAULT NULL, + `vr_6_sma` double(20,2) DEFAULT NULL, + `wr_10` double(20,2) DEFAULT NULL, + `wr_6` double(20,2) DEFAULT NULL, PRIMARY KEY (`code`,`date`), KEY `idx_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; @@ -114,42 +114,42 @@ CREATE TABLE `guess_indicators_lite_buy_daily` ( `date` varchar(255) NOT NULL, `code` varchar(255) NOT NULL, `name` varchar(255) DEFAULT NULL, - `last_price` varchar(255) DEFAULT NULL, - `change_percent` varchar(255) DEFAULT NULL, - `change_amount` varchar(255) DEFAULT NULL, - `volume` varchar(255) DEFAULT NULL, - `turnover` varchar(255) DEFAULT NULL, - `amplitude` varchar(255) DEFAULT NULL, - `high` varchar(255) DEFAULT NULL, - `low` varchar(255) DEFAULT NULL, - `open` varchar(255) DEFAULT NULL, - `closed` varchar(255) DEFAULT NULL, - `volume_ratio` varchar(255) DEFAULT NULL, - `turnover_rate` varchar(255) DEFAULT NULL, - `pe_ratio` varchar(255) DEFAULT NULL, - `pb_ratio` varchar(255) DEFAULT NULL, - `market_cap` varchar(255) DEFAULT NULL, - `circulating_market_cap` varchar(255) DEFAULT NULL, - `rise_speed` varchar(255) DEFAULT NULL, - `change_5min` varchar(255) DEFAULT NULL, - `change_ercent_60day` varchar(255) DEFAULT NULL, - `ytd_change_percent` varchar(255) DEFAULT NULL, - `boll` varchar(255) DEFAULT NULL, - `boll_lb` varchar(255) DEFAULT NULL, - `boll_ub` varchar(255) DEFAULT NULL, - `kdjd` varchar(255) DEFAULT NULL, - `kdjj` varchar(255) DEFAULT NULL, - `kdjk` varchar(255) DEFAULT NULL, - `macd` varchar(255) DEFAULT NULL, - `macdh` varchar(255) DEFAULT NULL, - `macds` varchar(255) DEFAULT NULL, - `pdi` varchar(255) DEFAULT NULL, - `trix` varchar(255) DEFAULT NULL, - `trix_9_sma` varchar(255) DEFAULT NULL, - `vr` varchar(255) DEFAULT NULL, - `vr_6_sma` varchar(255) DEFAULT NULL, - `wr_10` varchar(255) DEFAULT NULL, - `wr_6` varchar(255) DEFAULT NULL, + `last_price` double(20,2) DEFAULT NULL, + `change_percent` double(20,2) DEFAULT NULL, + `change_amount` double(20,2) DEFAULT NULL, + `volume` double(20,2) DEFAULT NULL, + `turnover` double(20,2) DEFAULT NULL, + `amplitude` double(20,2) DEFAULT NULL, + `high` double(20,2) DEFAULT NULL, + `low` double(20,2) DEFAULT NULL, + `open` double(20,2) DEFAULT NULL, + `closed` double(20,2) DEFAULT NULL, + `volume_ratio` double(20,2) DEFAULT NULL, + `turnover_rate` double(20,2) DEFAULT NULL, + `pe_ratio` double(20,2) DEFAULT NULL, + `pb_ratio` double(20,2) DEFAULT NULL, + `market_cap` double(20,2) DEFAULT NULL, + `circulating_market_cap` double(20,2) DEFAULT NULL, + `rise_speed` double(20,2) DEFAULT NULL, + `change_5min` double(20,2) DEFAULT NULL, + `change_ercent_60day` double(20,2) DEFAULT NULL, + `ytd_change_percent` double(20,2) DEFAULT NULL, + `boll` double(20,2) DEFAULT NULL, + `boll_lb` double(20,2) DEFAULT NULL, + `boll_ub` double(20,2) DEFAULT NULL, + `kdjd` double(20,2) DEFAULT NULL, + `kdjj` double(20,2) DEFAULT NULL, + `kdjk` double(20,2) DEFAULT NULL, + `macd` double(20,2) DEFAULT NULL, + `macdh` double(20,2) DEFAULT NULL, + `macds` double(20,2) DEFAULT NULL, + `pdi` double(20,2) DEFAULT NULL, + `trix` double(20,2) DEFAULT NULL, + `trix_9_sma` double(20,2) DEFAULT NULL, + `vr` double(20,2) DEFAULT NULL, + `vr_6_sma` double(20,2) DEFAULT NULL, + `wr_10` double(20,2) DEFAULT NULL, + `wr_6` double(20,2) DEFAULT NULL, PRIMARY KEY (`code`,`date`), KEY `idx_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; @@ -159,42 +159,42 @@ CREATE TABLE `guess_indicators_lite_sell_daily` ( `date` varchar(255) NOT NULL, `code` varchar(255) NOT NULL, `name` varchar(255) DEFAULT NULL, - `last_price` varchar(255) DEFAULT NULL, - `change_percent` varchar(255) DEFAULT NULL, - `change_amount` varchar(255) DEFAULT NULL, - `volume` varchar(255) DEFAULT NULL, - `turnover` varchar(255) DEFAULT NULL, - `amplitude` varchar(255) DEFAULT NULL, - `high` varchar(255) DEFAULT NULL, - `low` varchar(255) DEFAULT NULL, - `open` varchar(255) DEFAULT NULL, - `closed` varchar(255) DEFAULT NULL, - `volume_ratio` varchar(255) DEFAULT NULL, - `turnover_rate` varchar(255) DEFAULT NULL, - `pe_ratio` varchar(255) DEFAULT NULL, - `pb_ratio` varchar(255) DEFAULT NULL, - `market_cap` varchar(255) DEFAULT NULL, - `circulating_market_cap` varchar(255) DEFAULT NULL, - `rise_speed` varchar(255) DEFAULT NULL, - `change_5min` varchar(255) DEFAULT NULL, - `change_ercent_60day` varchar(255) DEFAULT NULL, - `ytd_change_percent` varchar(255) DEFAULT NULL, - `boll` varchar(255) DEFAULT NULL, - `boll_lb` varchar(255) DEFAULT NULL, - `boll_ub` varchar(255) DEFAULT NULL, - `kdjd` varchar(255) DEFAULT NULL, - `kdjj` varchar(255) DEFAULT NULL, - `kdjk` varchar(255) DEFAULT NULL, - `macd` varchar(255) DEFAULT NULL, - `macdh` varchar(255) DEFAULT NULL, - `macds` varchar(255) DEFAULT NULL, - `pdi` varchar(255) DEFAULT NULL, - `trix` varchar(255) DEFAULT NULL, - `trix_9_sma` varchar(255) DEFAULT NULL, - `vr` varchar(255) DEFAULT NULL, - `vr_6_sma` varchar(255) DEFAULT NULL, - `wr_10` varchar(255) DEFAULT NULL, - `wr_6` varchar(255) DEFAULT NULL, + `last_price` double(20,2) DEFAULT NULL, + `change_percent` double(20,2) DEFAULT NULL, + `change_amount` double(20,2) DEFAULT NULL, + `volume` double(20,2) DEFAULT NULL, + `turnover` double(20,2) DEFAULT NULL, + `amplitude` double(20,2) DEFAULT NULL, + `high` double(20,2) DEFAULT NULL, + `low` double(20,2) DEFAULT NULL, + `open` double(20,2) DEFAULT NULL, + `closed` double(20,2) DEFAULT NULL, + `volume_ratio` double(20,2) DEFAULT NULL, + `turnover_rate` double(20,2) DEFAULT NULL, + `pe_ratio` double(20,2) DEFAULT NULL, + `pb_ratio` double(20,2) DEFAULT NULL, + `market_cap` double(20,2) DEFAULT NULL, + `circulating_market_cap` double(20,2) DEFAULT NULL, + `rise_speed` double(20,2) DEFAULT NULL, + `change_5min` double(20,2) DEFAULT NULL, + `change_ercent_60day` double(20,2) DEFAULT NULL, + `ytd_change_percent` double(20,2) DEFAULT NULL, + `boll` double(20,2) DEFAULT NULL, + `boll_lb` double(20,2) DEFAULT NULL, + `boll_ub` double(20,2) DEFAULT NULL, + `kdjd` double(20,2) DEFAULT NULL, + `kdjj` double(20,2) DEFAULT NULL, + `kdjk` double(20,2) DEFAULT NULL, + `macd` double(20,2) DEFAULT NULL, + `macdh` double(20,2) DEFAULT NULL, + `macds` double(20,2) DEFAULT NULL, + `pdi` double(20,2) DEFAULT NULL, + `trix` double(20,2) DEFAULT NULL, + `trix_9_sma` double(20,2) DEFAULT NULL, + `vr` double(20,2) DEFAULT NULL, + `vr_6_sma` double(20,2) DEFAULT NULL, + `wr_10` double(20,2) DEFAULT NULL, + `wr_6` double(20,2) DEFAULT NULL, PRIMARY KEY (`code`,`date`), KEY `idx_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/docker-compose/nginx/nginx.conf b/docker-compose/nginx/nginx.conf new file mode 100644 index 0000000000000000000000000000000000000000..65b43050f164361680e0855f6e66d046a647b381 --- /dev/null +++ b/docker-compose/nginx/nginx.conf @@ -0,0 +1,22 @@ +server { + listen 8080; + server_name localhost; + #access_log /var/log/nginx/host.access.log main; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + } + + location /api/v1 { + proxy_pass http://backend:9090; + } + + + error_page 404 /404.html; + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + +} diff --git a/frontend/docker-build.sh b/frontend/docker-build.sh new file mode 100755 index 0000000000000000000000000000000000000000..ceae844a6fce45729ab232ffbdfad676b44f4f91 --- /dev/null +++ b/frontend/docker-build.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +sleep 1 +# 只依赖启动。 +cd /usr/src/app + +#!/bin/bash + +# 定义要检查的文件夹路径 +modules_path="/usr/src/app/node_modules" + +# 使用[ ]检查文件夹是否存在 +if [ -d "$modules_path" ]; then + echo "文件夹 $modules_path 存在" +else + echo "文件夹 $modules_path 不存在,执行 install 安装" + npm install --registry=https://registry.npmmirror.com +fi + +npm run build +# 编译完成之后拷贝 html 资源到 影射目录,等待即可。每次编译前都清空内容。 +rm -rf /data/html/* +cp -r ./dist/* /data/html/ +echo "######### build finish and cp all html #########" \ No newline at end of file diff --git a/frontend/docker-entrypoint.sh b/frontend/docker-entrypoint.sh index bdd5f03892de57f08e0010d2aa36ad1f3d7ef8fe..064898fceb27ca0c95802ba711840ee910eed5cb 100755 --- a/frontend/docker-entrypoint.sh +++ b/frontend/docker-entrypoint.sh @@ -1,8 +1,21 @@ #!/bin/sh -sleep 10 +sleep 1 # 只依赖启动。 cd /usr/src/app -npm install --registry=https://registry.npmmirror.com + +#!/bin/bash + +# 定义要检查的文件夹路径 +modules_path="/usr/src/app/node_modules" + +# 使用[ ]检查文件夹是否存在 +if [ -d "$modules_path" ]; then + echo "文件夹 $modules_path 存在" +else + echo "文件夹 $modules_path 不存在,执行 install 安装" + npm install --registry=https://registry.npmmirror.com +fi + npm run dev sleep 999999d diff --git a/frontend/package.json b/frontend/package.json index 42990ba8e0c268af134cab60d6fd7c0640580d83..343b35451713f5db93073b69eda202144f79870c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -5,7 +5,7 @@ "author": "Pan ", "scripts": { "dev": "./node_modules/.bin/vue-cli-service serve ", - "build:prod": "./node_modules/.bin/vue-cli-service build", + "build": "./node_modules/.bin/vue-cli-service build", "build:stage": "./node_modules/.bin/vue-cli-service build --mode staging", "preview": "node build/index.js --preview", "svgo": "./node_modules/.bin/svgo -f src/icons/svg --config=src/icons/svgo.yml", diff --git a/frontend/public/40x.html b/frontend/public/40x.html new file mode 100644 index 0000000000000000000000000000000000000000..bc433cbac736709d85d860d3ecd0779ff83bf3c0 --- /dev/null +++ b/frontend/public/40x.html @@ -0,0 +1,8 @@ + + +404 Not Found + +

404 Not Found

+
nginx/1.26.3
+ + \ No newline at end of file diff --git a/frontend/public/50x.html b/frontend/public/50x.html new file mode 100644 index 0000000000000000000000000000000000000000..a57c2f93d1d4ead3f1e537a6508bb0e5ce93e39c --- /dev/null +++ b/frontend/public/50x.html @@ -0,0 +1,19 @@ + + + +Error + + + +

An error occurred.

+

Sorry, the page you are looking for is currently unavailable.
+Please try again later.

+

If you are the system administrator of this resource then you should check +the error log for details.

+

Faithfully yours, nginx.

+ +