docker
This commit is contained in:
parent
d6680d9966
commit
f3c6f1e70b
|
@ -1,3 +1,4 @@
|
||||||
.idea
|
.idea
|
||||||
node_modules
|
node_modules
|
||||||
__pycache__
|
__pycache__
|
||||||
|
public
|
|
@ -0,0 +1,3 @@
|
||||||
|
.idea
|
||||||
|
node_modules
|
||||||
|
__pycache__
|
|
@ -0,0 +1,14 @@
|
||||||
|
FROM node:22 AS builder
|
||||||
|
|
||||||
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
|
COPY package.json package-lock.json ./
|
||||||
|
|
||||||
|
RUN npm config set registry https://registry.npmmirror.com
|
||||||
|
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
COPY . ./
|
||||||
|
|
||||||
|
#RUN NODE_OPTIONS=--max_old_space_size=8192 yarn build
|
||||||
|
RUN npm run build
|
|
@ -44,7 +44,7 @@
|
||||||
"start": "react-scripts start",
|
"start": "react-scripts start",
|
||||||
"test": "react-scripts test",
|
"test": "react-scripts test",
|
||||||
"eject": "react-scripts eject",
|
"eject": "react-scripts eject",
|
||||||
"build": "postcss src/style.css -o dist/tailwind.css"
|
"build": "react-scripts build"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"extends": [
|
"extends": [
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
docker compose build
|
||||||
|
docker compose build build-dmpython
|
||||||
|
docker compose build build-frontend
|
|
@ -0,0 +1,47 @@
|
||||||
|
|
||||||
|
services:
|
||||||
|
base-dm:
|
||||||
|
build: ./docker/base-dm
|
||||||
|
image: base-dm
|
||||||
|
|
||||||
|
build-dmpython:
|
||||||
|
build: ./docker/build-dmpython
|
||||||
|
image: build-dmpython
|
||||||
|
depends_on:
|
||||||
|
- base-dm
|
||||||
|
|
||||||
|
build-frontend:
|
||||||
|
build: ./app-dm
|
||||||
|
image: build-frontend
|
||||||
|
|
||||||
|
flask-app:
|
||||||
|
build: ./python
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- base-dm
|
||||||
|
ports:
|
||||||
|
- '8000:8000'
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "curl --silent --fail localhost:8000/flask-health-check || exit 1"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
command: gunicorn -w 3 -t 60 -b 0.0.0.0:8000 app:app
|
||||||
|
|
||||||
|
nginx-proxy:
|
||||||
|
build: ./docker/nginx
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./docker/nginx/default.conf:/tmp/default.conf
|
||||||
|
environment:
|
||||||
|
- FLASK_SERVER_ADDR=flask-app:8000
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
depends_on:
|
||||||
|
- flask-app
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "curl --silent --fail localhost:80/health-check || exit 1"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
command: /app/start.sh
|
|
@ -0,0 +1,35 @@
|
||||||
|
FROM ubuntu
|
||||||
|
# apt安装时,防止卡死在交互界面
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
ENV LANG=zh_CN.UTF-8
|
||||||
|
ENV LC_ALL=zh_CN.UTF-8
|
||||||
|
# 基础软件安装
|
||||||
|
RUN sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list \
|
||||||
|
&& apt-get -y update && apt-get -y upgrade \
|
||||||
|
&& apt-get install -y python3.10-venv libssl-dev sudo vim python3-pip ssh wget unzip p7zip* language-pack-zh-hans language-selector-common locales locales-all \
|
||||||
|
# 设置中文环境
|
||||||
|
&& apt install -y $(check-language-support) \
|
||||||
|
&& echo "zh_CN.UTF-8 UTF-8" >> /etc/locale.gen \
|
||||||
|
&& sudo /usr/sbin/update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8 \
|
||||||
|
&& locale-gen \
|
||||||
|
# 添加用户
|
||||||
|
&& useradd -m -s /bin/bash dmdba \
|
||||||
|
# 修改用户密码
|
||||||
|
&& echo "dmdba:123456" | chpasswd \
|
||||||
|
&& pip config set global.index-url https://mirrors.bfsu.edu.cn/pypi/web/simple \
|
||||||
|
&& echo "**** clean up ****" && \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf \
|
||||||
|
/config/* \
|
||||||
|
/tmp/* \
|
||||||
|
/var/lib/apt/lists/* \
|
||||||
|
/var/tmp/*
|
||||||
|
# 传入安装包并解压
|
||||||
|
WORKDIR /home/dmdba
|
||||||
|
RUN wget https://download.dameng.com/eco/adapter/DM8/202405/dm8_20240408_x86_rh7_64_ent_8.1.3.140.zip
|
||||||
|
RUN unzip dm8_20240408_x86_rh7_64_ent_8.1.3.140.zip \
|
||||||
|
&& chown -R dmdba:dmdba /home/dmdba \
|
||||||
|
&& rm -f dm8_20240408_x86_rh7_64_ent_8.1.3.140.zip \
|
||||||
|
&& 7z x dm8_20240408_x86_rh7_64.iso \
|
||||||
|
&& rm -f dm8_20240408_x86_rh7_64.iso \
|
||||||
|
&& chmod +x DMInstall.bin
|
|
@ -0,0 +1,7 @@
|
||||||
|
FROM base-dm
|
||||||
|
WORKDIR /home/dmdba
|
||||||
|
COPY auto_install.xml .
|
||||||
|
RUN ./DMInstall.bin -q /home/dmdba/auto_install.xml
|
||||||
|
# 编译
|
||||||
|
WORKDIR /home/dmdba/dmdbms/drivers/python/dmPython
|
||||||
|
RUN DM_HOME=/home/dmdba/dmdbms python3 setup.py bdist_wheel && mkdir /home/dmdba/build_artifacts && cp dist/dmPython-2.5.5-cp310-cp310-linux_x86_64.whl /home/dmdba/build_artifacts/ && cp /home/dmdba/dmdbms/bin/libdmdpi.so /home/dmdba/build_artifacts/
|
|
@ -0,0 +1,122 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<DATABASE>
|
||||||
|
<!--安装数据库的语言配置,简体中文版: CHS,繁体中文版: CHT,英文版: EN,不区分大小写。不允许为空。 -->
|
||||||
|
<LANGUAGE>ZH</LANGUAGE>
|
||||||
|
|
||||||
|
<!--安装程序的时区配置,缺省为+08:00,取值范围:-12:59 ~ +14:00 -->
|
||||||
|
<TIME_ZONE>+08:00</TIME_ZONE>
|
||||||
|
|
||||||
|
<!-- key文件路径 -->
|
||||||
|
<KEY></KEY>
|
||||||
|
|
||||||
|
<!--安装程序组件类型,取值范围:0、1、2,0 表示安装全部,1 表示安装服务器,2 表示安装客户端。缺省为0。 -->
|
||||||
|
<INSTALL_TYPE>0</INSTALL_TYPE>
|
||||||
|
|
||||||
|
<!--安装路径,不允许为空。 -->
|
||||||
|
<INSTALL_PATH>/home/dmdba/dmdbms</INSTALL_PATH>
|
||||||
|
|
||||||
|
<!--是否初始化库,取值范围:Y/N、y/n,不允许为空。 -->
|
||||||
|
<INIT_DB>y</INIT_DB>
|
||||||
|
|
||||||
|
<!--数据库实例参数 -->
|
||||||
|
<DB_PARAMS>
|
||||||
|
<!--初始数据库存放的路径,不允许为空 -->
|
||||||
|
<PATH>/home/dmdba/dmdbms/data</PATH>
|
||||||
|
|
||||||
|
<!--初始化数据库名字,缺省为DAMENG,不超过128个字符 -->
|
||||||
|
<DB_NAME>DAMENG</DB_NAME>
|
||||||
|
|
||||||
|
<!--初始化数据库实例名字,缺省为DMSERVER,不超过128个字符 -->
|
||||||
|
<INSTANCE_NAME>DMSERVER</INSTANCE_NAME>
|
||||||
|
|
||||||
|
<!--初始化时设置dm.ini中的PORT_NUM,缺省为5236,取值范围:1024~65534 -->
|
||||||
|
<PORT_NUM>5236</PORT_NUM>
|
||||||
|
|
||||||
|
<!--初始数据库控制文件的路径,文件路径长度最大为256 -->
|
||||||
|
<CTL_PATH></CTL_PATH>
|
||||||
|
|
||||||
|
<!--初始化数据库日志文件的路径,文件路径长度最大为256,LOG_PATH值为空则使用缺省值,如果使用非默认值LOG_PATH节点数不能少于2个 -->
|
||||||
|
<LOG_PATHS>
|
||||||
|
<LOG_PATH>
|
||||||
|
</LOG_PATH>
|
||||||
|
</LOG_PATHS>
|
||||||
|
|
||||||
|
<!--数据文件使用的簇大小,取值范围:16页、32页,缺省为16页 -->
|
||||||
|
<EXTENT_SIZE>16</EXTENT_SIZE>
|
||||||
|
|
||||||
|
<!--数据文件使用的页大小,取值范围:4K、8K、16K、32K,缺省为8K -->
|
||||||
|
<PAGE_SIZE>8</PAGE_SIZE>
|
||||||
|
|
||||||
|
<!--日志文件使用的簇大小,缺省为256,取值范围为64~2048之间的整数 -->
|
||||||
|
<LOG_SIZE>256</LOG_SIZE>
|
||||||
|
|
||||||
|
<!--标识符大小写敏感。取值范围:Y/N y/n 1/0,缺省为Y -->
|
||||||
|
<CASE_SENSITIVE>Y</CASE_SENSITIVE>
|
||||||
|
|
||||||
|
<!--字符集选项,缺省为0。0代表GB18030,1代表UTF-8,2代表韩文字符集EUC-KR -->
|
||||||
|
<CHARSET>0</CHARSET>
|
||||||
|
|
||||||
|
<!--规定VARCHAR对象长度的单位。取值范围:0,1。1:所有VARCHAR类型对象的长度以字符为单位;0:有VARCHAR类型对象的长度以字节为单位。缺省为0。 -->
|
||||||
|
<LENGTH_IN_CHAR>0</LENGTH_IN_CHAR>
|
||||||
|
|
||||||
|
<!--字符类型在计算HASH值时所采用的HASH算法类别。取值范围0,1。0:原始HASH算法;1:改进的HASH算法。缺省为1。 -->
|
||||||
|
<USE_NEW_HASH>1</USE_NEW_HASH>
|
||||||
|
|
||||||
|
<!--初始化时设置SYSDBA的密码,缺省为SYSDBA,长度在9到48个字符之间 -->
|
||||||
|
<SYSDBA_PWD></SYSDBA_PWD>
|
||||||
|
|
||||||
|
<!--初始化时设置SYSAUDITOR的密码,缺省为SYSAUDITOR,长度在9到48个字符之间 -->
|
||||||
|
<SYSAUDITOR_PWD></SYSAUDITOR_PWD>
|
||||||
|
|
||||||
|
<!--初始化时设置SYSSSO的密码,缺省为SYSSSO,长度在9到48个字符之间,仅在安全版本下可见和可设置 -->
|
||||||
|
<SYSSSO_PWD></SYSSSO_PWD>
|
||||||
|
|
||||||
|
<!--初始化时设置SYSDBO的密码,缺省为SYSDBO,长度在9到48个字符之间,仅在安全版本下可见和可设置 -->
|
||||||
|
<SYSDBO_PWD></SYSDBO_PWD>
|
||||||
|
|
||||||
|
<!--初始化时区,默认是东八区。格式为:正负号小时:分钟,取值范围:-12:59 ~ +14:00 -->
|
||||||
|
<TIME_ZONE>+08:00</TIME_ZONE>
|
||||||
|
|
||||||
|
<!--是否启用页面内容校验,取值范围:0,1,2。0:不启用;1:简单校验;2:严格校验(使用CRC16算法生成校验码)。缺省为0 -->
|
||||||
|
<PAGE_CHECK>0</PAGE_CHECK>
|
||||||
|
|
||||||
|
<!--设置默认加密算法,不超过128个字符 -->
|
||||||
|
<EXTERNAL_CIPHER_NAME></EXTERNAL_CIPHER_NAME>
|
||||||
|
|
||||||
|
<!--设置默认HASH算法,不超过128个字符 -->
|
||||||
|
<EXTERNAL_HASH_NAME></EXTERNAL_HASH_NAME>
|
||||||
|
|
||||||
|
<!--设置根密钥加密引擎,不超过128个字符 -->
|
||||||
|
<EXTERNAL_CRYPTO_NAME></EXTERNAL_CRYPTO_NAME>
|
||||||
|
|
||||||
|
<!--全库加密密钥使用的算法名。算法可以是DM内部支持的加密算法,或者是第三方的加密算法。默认使用"AES256_ECB"算法加密,最长为128个字节 -->
|
||||||
|
<ENCRYPT_NAME></ENCRYPT_NAME>
|
||||||
|
|
||||||
|
<!--用于加密服务器根密钥,最长为48个字节 -->
|
||||||
|
<USBKEY_PIN></USBKEY_PIN>
|
||||||
|
|
||||||
|
<!--设置空格填充模式,取值范围:0,1,缺省为0 -->
|
||||||
|
<BLANK_PAD_MODE>0</BLANK_PAD_MODE>
|
||||||
|
|
||||||
|
<!--指定system.dbf文件的镜像路径,缺省值为空 -->
|
||||||
|
<SYSTEM_MIRROR_PATH></SYSTEM_MIRROR_PATH>
|
||||||
|
|
||||||
|
<!--指定main.dbf文件的镜像路径,缺省值为空 -->
|
||||||
|
<MAIN_MIRROR_PATH></MAIN_MIRROR_PATH>
|
||||||
|
|
||||||
|
<!--指定roll.dbf文件的镜像路径,缺省值为空 -->
|
||||||
|
<ROLL_MIRROR_PATH></ROLL_MIRROR_PATH>
|
||||||
|
|
||||||
|
<!--是否是四权分立,取值范围:0,1。0:不使用;1:使用。缺省为0。仅在安全版本下可见和可设置。-->
|
||||||
|
<PRIV_FLAG>0</PRIV_FLAG>
|
||||||
|
|
||||||
|
<!--指定初始化过程中生成的日志文件所在路径。合法的路径,文件路径长度最大为257(含结束符),不包括文件名-->
|
||||||
|
<ELOG_PATH></ELOG_PATH>
|
||||||
|
</DB_PARAMS>
|
||||||
|
|
||||||
|
<!--是否创建数据库实例的服务,取值范围: Y/N y/n,不允许为空,不初始化数据库将忽略此节点。非root用户不能创建数据库服务。 -->
|
||||||
|
<CREATE_DB_SERVICE>Y</CREATE_DB_SERVICE>
|
||||||
|
|
||||||
|
<!--是否启动数据库,取值范围: Y/N y/n,不允许为空,不创建数据库服务将忽略此节点。 -->
|
||||||
|
<STARTUP_DB_SERVICE>N</STARTUP_DB_SERVICE>
|
||||||
|
</DATABASE>
|
|
@ -0,0 +1,32 @@
|
||||||
|
FROM nginx:1.19.7-alpine
|
||||||
|
|
||||||
|
# Add bash for boot cmd
|
||||||
|
RUN apk add bash
|
||||||
|
|
||||||
|
# Add nginx.conf to container
|
||||||
|
COPY --chown=nginx:nginx nginx.conf /etc/nginx/nginx.conf
|
||||||
|
COPY --chown=nginx:nginx start.sh /app/start.sh
|
||||||
|
|
||||||
|
# set workdir
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# permissions and nginx user for tightened security
|
||||||
|
RUN chown -R nginx:nginx /app && chmod -R 755 /app && \
|
||||||
|
chown -R nginx:nginx /var/cache/nginx && \
|
||||||
|
chown -R nginx:nginx /var/log/nginx && \
|
||||||
|
chmod -R 755 /var/log/nginx; \
|
||||||
|
chown -R nginx:nginx /etc/nginx/conf.d
|
||||||
|
RUN touch /var/run/nginx.pid && chown -R nginx:nginx /var/run/nginx.pid
|
||||||
|
|
||||||
|
# # Uncomment to keep the nginx logs inside the container - Leave commented for logging to stdout and stderr
|
||||||
|
# RUN mkdir -p /var/log/nginx
|
||||||
|
# RUN unlink /var/log/nginx/access.log \
|
||||||
|
# && unlink /var/log/nginx/error.log \
|
||||||
|
# && touch /var/log/nginx/access.log \
|
||||||
|
# && touch /var/log/nginx/error.log \
|
||||||
|
# && chown nginx /var/log/nginx/*log \
|
||||||
|
# && chmod 644 /var/log/nginx/*log
|
||||||
|
|
||||||
|
USER nginx
|
||||||
|
|
||||||
|
CMD ["nginx", "-g", "'daemon off;'"]
|
|
@ -0,0 +1,29 @@
|
||||||
|
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache:10m max_size=500m inactive=60m use_temp_path=off;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://$FLASK_SERVER_ADDR;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /cache-me {
|
||||||
|
proxy_pass http://$FLASK_SERVER_ADDR;
|
||||||
|
proxy_cache cache;
|
||||||
|
proxy_cache_lock on;
|
||||||
|
proxy_cache_valid 200 30s;
|
||||||
|
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
|
||||||
|
proxy_cache_revalidate on;
|
||||||
|
proxy_cache_background_update on;
|
||||||
|
expires 20s;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /health-check {
|
||||||
|
add_header Content-Type text/plain;
|
||||||
|
return 200 "success";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
worker_processes auto;
|
||||||
|
pid /var/run/nginx.pid;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
# Define the format of log messages.
|
||||||
|
log_format main_ext '$remote_addr - $remote_user [$time_local] "$request" '
|
||||||
|
'$status $body_bytes_sent "$http_referer" '
|
||||||
|
'"$http_user_agent" "$http_x_forwarded_for" '
|
||||||
|
'"$host" sn="$server_name" '
|
||||||
|
'rt=$request_time '
|
||||||
|
'ua="$upstream_addr" us="$upstream_status" '
|
||||||
|
'ut="$upstream_response_time" ul="$upstream_response_length" '
|
||||||
|
'cs=$upstream_cache_status' ;
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log main_ext;
|
||||||
|
error_log /var/log/nginx/error.log warn;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
|
||||||
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
# Enable Compression
|
||||||
|
gzip on;
|
||||||
|
|
||||||
|
# Disable Display of NGINX Version
|
||||||
|
server_tokens off;
|
||||||
|
|
||||||
|
# Size Limits
|
||||||
|
client_body_buffer_size 10K;
|
||||||
|
client_header_buffer_size 1k;
|
||||||
|
client_max_body_size 8m;
|
||||||
|
large_client_header_buffers 2 1k;
|
||||||
|
|
||||||
|
# # SSL / TLS Settings - Suggested for Security
|
||||||
|
# ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
# ssl_session_timeout 15m;
|
||||||
|
# ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
|
||||||
|
# ssl_prefer_server_ciphers on;
|
||||||
|
# ssl_session_tickets off;
|
||||||
|
|
||||||
|
include /etc/nginx/conf.d/*.conf;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
#!/bin/bash
|
||||||
|
envsubst '$FLASK_SERVER_ADDR' < /tmp/default.conf > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'
|
|
@ -16,11 +16,11 @@ RUN sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.l
|
||||||
# 修改用户密码
|
# 修改用户密码
|
||||||
&& echo "dmdba:123456" | chpasswd
|
&& echo "dmdba:123456" | chpasswd
|
||||||
# 传入安装包并解压
|
# 传入安装包并解压
|
||||||
COPY ./data/dm8.zip /home/dmdba
|
WORKDIR /home/dmdba
|
||||||
RUN cd /home/dmdba \
|
RUN wget https://download.dameng.com/eco/adapter/DM8/202405/dm8_20240408_x86_rh7_64_ent_8.1.3.140.zip
|
||||||
&& unzip dm8.zip \
|
RUN unzip dm8_20240408_x86_rh7_64_ent_8.1.3.140.zip \
|
||||||
&& chown -R dmdba:dmdba /home/dmdba \
|
&& chown -R dmdba:dmdba /home/dmdba \
|
||||||
&& rm -f dm8.zip \
|
&& rm -f dm8_20240408_x86_rh7_64_ent_8.1.3.140.zip \
|
||||||
&& 7z x dm8_20240408_x86_rh7_64.iso \
|
&& 7z x dm8_20240408_x86_rh7_64.iso \
|
||||||
&& rm -f dm8_20240408_x86_rh7_64.iso \
|
&& rm -f dm8_20240408_x86_rh7_64.iso \
|
||||||
&& chmod +x DMInstall.bin
|
&& chmod +x DMInstall.bin
|
|
@ -0,0 +1,33 @@
|
||||||
|
FROM base-dm
|
||||||
|
|
||||||
|
# 升级pip
|
||||||
|
RUN pip install --upgrade pip
|
||||||
|
|
||||||
|
# 创建一个用户运行flask
|
||||||
|
RUN adduser flask
|
||||||
|
RUN chown -R flask:flask /home/flask
|
||||||
|
RUN mkdir -p /var/log/flask-app && touch /var/log/flask-app/flask-app.err.log && touch /var/log/flask-app/flask-app.out.log
|
||||||
|
RUN chown -R flask:flask /var/log/flask-app
|
||||||
|
WORKDIR /home/flask
|
||||||
|
USER flask
|
||||||
|
|
||||||
|
# 复制
|
||||||
|
COPY --chown=flask:flask . .
|
||||||
|
|
||||||
|
# venv
|
||||||
|
ENV VIRTUAL_ENV=/home/flask/venv
|
||||||
|
|
||||||
|
# 安装包
|
||||||
|
RUN python3 -m venv "$VIRTUAL_ENV"
|
||||||
|
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||||
|
RUN export FLASK_APP=main.py
|
||||||
|
COPY --from=build-dmpython --chown=flask:flask /home/dmdba/build_artifacts/dmPython-2.5.5-cp310-cp310-linux_x86_64.whl .
|
||||||
|
COPY --from=build-dmpython /home/dmdba/build_artifacts/libdmdpi.so /usr/lib/
|
||||||
|
COPY --from=build-frontend /usr/src/app/build/ /home/flask/public/
|
||||||
|
RUN pip3 install dmPython-2.5.5-cp310-cp310-linux_x86_64.whl && rm dmPython-2.5.5-cp310-cp310-linux_x86_64.whl
|
||||||
|
RUN MAKEFLAGS="-j$(nproc)" pip install -r requirements.txt
|
||||||
|
USER root
|
||||||
|
# 暴露端口
|
||||||
|
EXPOSE 5000
|
||||||
|
|
||||||
|
CMD ["python", "main.py"]
|
|
@ -1,9 +1,9 @@
|
||||||
from teacher_func import *
|
from teacher_func import *
|
||||||
from student_func import *
|
from student_func import *
|
||||||
from flask import Flask, request, jsonify, session, redirect
|
from flask import Flask, render_template, request, jsonify, send_from_directory, session
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__, static_folder="public")
|
||||||
CORS(app, resources={r"/*": {"origins": "*"}})
|
CORS(app, resources={r"/*": {"origins": "*"}})
|
||||||
app.config['SECRET_KEY'] = '350625'
|
app.config['SECRET_KEY'] = '350625'
|
||||||
|
|
||||||
|
@ -209,6 +209,13 @@ def SendTrainTest():
|
||||||
SendTrainTestFunc(TrainChoice, TrainCompletion, TrainJudge, Hour, Min, StopTime,Class,Train,teacher_id)
|
SendTrainTestFunc(TrainChoice, TrainCompletion, TrainJudge, Hour, Min, StopTime,Class,Train,teacher_id)
|
||||||
return '发布成功'
|
return '发布成功'
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
@app.route('/<path:path>')
|
||||||
|
def catch_all(path = "index.html"):
|
||||||
|
return send_from_directory("public", path)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(host='127.0.0.1', port=5000, debug=True)
|
app.run(host='0.0.0.0', port=5000, debug=True)
|
|
@ -0,0 +1,4 @@
|
||||||
|
Flask==2.3.0
|
||||||
|
Flask_Cors==4.0.0
|
||||||
|
pycryptodome==3.19.0
|
||||||
|
gunicorn
|
|
@ -4,7 +4,7 @@ from Crypto.Cipher import AES
|
||||||
from Crypto.Random import get_random_bytes
|
from Crypto.Random import get_random_bytes
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
db = dmPython.connect(user='SYSDBA', password='SYSDBA')
|
db = dmPython.connect(user='SYSDBA', password='dameng!!', host="36.138.114.105", port="32522")
|
||||||
|
|
||||||
|
|
||||||
def pad(data):
|
def pad(data):
|
||||||
|
|
|
@ -6,7 +6,7 @@ import base64
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
|
||||||
db = dmPython.connect(user='SYSDBA', password='SYSDBA')
|
db = dmPython.connect(user='SYSDBA', password='dameng!!', host="36.138.114.105", port="32522")
|
||||||
|
|
||||||
#获取题目
|
#获取题目
|
||||||
def choice_question_func(ID):
|
def choice_question_func(ID):
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
my_dict = {'name': 'Tom', 'age': 18, 'gender': 'ale'}
|
|
||||||
|
|
||||||
# 在原来的键上添加新的值
|
|
||||||
my_dict['name'] = 'Jerry'
|
|
||||||
|
|
||||||
print(my_dict)
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
from app import app
|
||||||
|
import os
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app.run(host='0.0.0.0', port=os.environ.get("FLASK_SERVER_PORT"), debug=True)
|
Loading…
Reference in New Issue