更新 docker 构建
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
# 构建的相关文件
|
||||
dockerdata
|
||||
docker-compose.yml
|
||||
Dockerfile.server
|
||||
README.md
|
||||
|
||||
# Python 相关文件
|
||||
|
||||
@@ -15,6 +15,9 @@ RUN echo "${TIME_ZONE}" > /etc/timezone \
|
||||
# 安装必备库
|
||||
RUN python3 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
|
||||
|
||||
# 安装
|
||||
RUN python3 -m pip install gunicorn -i https://pypi.tuna.tsinghua.edu.cn/simple/
|
||||
|
||||
# 初始化数据库
|
||||
RUN flask db init
|
||||
RUN flask db migrate
|
||||
@@ -1,26 +0,0 @@
|
||||
FROM python:3.7-alpine
|
||||
|
||||
COPY . /app/
|
||||
COPY dockerdata/config.py /app/applications/
|
||||
COPY dockerdata/start.sh /app/
|
||||
|
||||
WORKDIR /app/
|
||||
|
||||
ENV TIME_ZONE Asia/Shanghai
|
||||
ENV PIPURL "https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.douban.com"
|
||||
|
||||
RUN apk update \
|
||||
&& apk add --virtual mysqlclient-build gcc python3-dev musl-dev \
|
||||
&& apk add --no-cache mariadb-dev \
|
||||
&& apk add --virtual system-build linux-headers libffi-dev \
|
||||
&& apk add --no-cache jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \
|
||||
&& apk add --no-cache bash bash-doc bash-completion \
|
||||
&& apk add --no-cache libxslt-dev tzdata g++
|
||||
RUN echo "${TIME_ZONE}" > /etc/timezone \
|
||||
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime
|
||||
RUN pip --no-cache-dir install -i ${PIPURL} --upgrade pip \
|
||||
&& pip --no-cache-dir install -i ${PIPURL} -r requirements.txt \
|
||||
&& pip --no-cache-dir install -i ${PIPURL} gunicorn \
|
||||
&& chmod +x /app/start.sh
|
||||
|
||||
CMD ./start.sh
|
||||
@@ -1,14 +0,0 @@
|
||||
FROM python:3.7-alpine
|
||||
|
||||
ENV PIPURL "https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.douban.com"
|
||||
RUN apk update \
|
||||
&& apk add --virtual mysqlclient-build gcc python3-dev musl-dev \
|
||||
&& apk add --no-cache mariadb-dev \
|
||||
&& apk add --virtual system-build linux-headers libffi-dev \
|
||||
&& apk add --no-cache jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \
|
||||
&& apk add --no-cache bash bash-doc bash-completion \
|
||||
&& apk add --no-cache libxslt-dev tzdata g++
|
||||
COPY requirements.txt /requirements.txt
|
||||
RUN pip --no-cache-dir install -i ${PIPURL} --upgrade pip \
|
||||
&& pip --no-cache-dir install -i ${PIPURL} -r /requirements.txt \
|
||||
&& pip --no-cache-dir install -i ${PIPURL} gunicorn
|
||||
@@ -1,15 +0,0 @@
|
||||
FROM pearadminflask/python3.7-flask:pillow
|
||||
|
||||
COPY . /app/
|
||||
COPY dockerdata/config.py /app/applications/
|
||||
COPY dockerdata/start.sh /app
|
||||
|
||||
WORKDIR /app/
|
||||
|
||||
ENV TIME_ZONE Asia/Shanghai
|
||||
|
||||
RUN echo "${TIME_ZONE}" > /etc/timezone \
|
||||
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
|
||||
&& chmod +x /app/start.sh
|
||||
|
||||
CMD ./start.sh
|
||||
@@ -1,92 +0,0 @@
|
||||
import logging
|
||||
from datetime import timedelta
|
||||
from urllib.parse import quote_plus as urlquote
|
||||
|
||||
|
||||
class BaseConfig:
|
||||
# 超级管理员账号
|
||||
SUPERADMIN = 'admin'
|
||||
|
||||
# 系统名称
|
||||
SYSTEM_NAME = 'Pear Admin'
|
||||
|
||||
# 主题面板的链接列表配置
|
||||
SYSTEM_PANEL_LINKS = [
|
||||
{
|
||||
"icon": "layui-icon layui-icon-auz",
|
||||
"title": "官方网站",
|
||||
"href": "http://www.pearadmin.com"
|
||||
},
|
||||
{
|
||||
"icon": "layui-icon layui-icon-auz",
|
||||
"title": "开发文档",
|
||||
"href": "http://www.pearadmin.com"
|
||||
},
|
||||
{
|
||||
"icon": "layui-icon layui-icon-auz",
|
||||
"title": "开源地址",
|
||||
"href": "https://gitee.com/Jmysy/Pear-Admin-Layui"
|
||||
}
|
||||
]
|
||||
|
||||
# 上传图片目标文件夹
|
||||
UPLOADED_PHOTOS_DEST = 'static/upload'
|
||||
UPLOADED_FILES_ALLOW = ['gif', 'jpg', 'jpeg', 'png', 'webp']
|
||||
UPLOADS_AUTOSERVE = True
|
||||
|
||||
# JSON 配置
|
||||
JSON_AS_ASCII = False
|
||||
|
||||
# 配置多个数据库连接的连接串写法示例
|
||||
# HOSTNAME: 指数据库的IP地址、USERNAME:指数据库登录的用户名、PASSWORD:指数据库登录密码、PORT:指数据库开放的端口、DATABASE:指需要连接的数据库名称
|
||||
# MSSQL: f"mssql+pymssql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=cp936"
|
||||
# MySQL: f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
|
||||
# Oracle: f"oracle+cx_oracle://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}"
|
||||
# SQLite "sqlite:/// database.db"
|
||||
# Postgres f"postgresql+psycopg2://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}"
|
||||
# Oracle的第二种连接方式
|
||||
# dsnStr = cx_Oracle.makedsn({HOSTNAME}, 1521, service_name='orcl')
|
||||
# connect_str = "oracle://%s:%s@%s" % ('{USERNAME}', ' {PASSWORD}', dsnStr)
|
||||
|
||||
# 在SQLALCHEMY_BINDS 中设置:'{数据库连接别名}': '{连接串}'
|
||||
# 最后在models的数据模型class中,在__tablename__前设置 __bind_key__ = '{数据库连接别名}' 即可,表示该数据模型不使用默认的数据库连接,改用“SQLALCHEMY_BINDS”中设置的其他数据库连接
|
||||
# SQLALCHEMY_BINDS = {
|
||||
# 'testMySQL': 'mysql+pymysql://test:123456@192.168.1.1:3306/test?charset=utf8',
|
||||
# 'testMsSQL': 'mssql+pymssql://test:123456@192.168.1.1:1433/test?charset=cp936',
|
||||
# 'testOracle': 'oracle+cx_oracle://test:123456@192.168.1.1:1521/test',
|
||||
# 'testSQLite': 'sqlite:///database.db
|
||||
# }
|
||||
|
||||
# 数据库的配置信息
|
||||
MYSQL_USERNAME = "root"
|
||||
MYSQL_PASSWORD = "123456"
|
||||
MYSQL_HOST = "172.10.1.31"
|
||||
MYSQL_PORT = 3306
|
||||
MYSQL_DATABASE = "PearAdminFlask"
|
||||
|
||||
# mysql 数据库的配置信息
|
||||
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{urlquote(MYSQL_PASSWORD)}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}?charset=utf8mb4"
|
||||
|
||||
# 默认日志等级
|
||||
LOG_LEVEL = logging.WARN
|
||||
|
||||
# 发信设置
|
||||
MAIL_SERVER = 'smtp.qq.com'
|
||||
MAIL_USE_TLS = False
|
||||
MAIL_USE_SSL = True
|
||||
MAIL_PORT = 465
|
||||
MAIL_USERNAME = '123@qq.com'
|
||||
MAIL_PASSWORD = 'XXXXX' # 生成的授权码
|
||||
MAIL_DEFAULT_SENDER = MAIL_USERNAME
|
||||
|
||||
# 插件配置,填写插件的文件名名称,默认不启用插件。
|
||||
PLUGIN_ENABLE_FOLDERS = []
|
||||
|
||||
# Session 设置
|
||||
PERMANENT_SESSION_LIFETIME = timedelta(days=7)
|
||||
|
||||
SESSION_TYPE = "filesystem" # 默认使用文件系统来保存会话
|
||||
SESSION_PERMANENT = False # 会话是否持久化
|
||||
SESSION_USE_SIGNER = True # 是否对发送到浏览器上 session 的 cookie 值进行加密
|
||||
|
||||
SECRET_KEY = "pear-system-flask"
|
||||
@@ -2,16 +2,16 @@ version: '3'
|
||||
services:
|
||||
flask:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
context: ..
|
||||
dockerfile: dockerdata/Dockerfile
|
||||
container_name: flask
|
||||
ports:
|
||||
- "5000:5000"
|
||||
restart: always
|
||||
command: sh -c "/app/start.sh"
|
||||
networks:
|
||||
- my_bridge_network
|
||||
- bridge_network
|
||||
|
||||
networks:
|
||||
my_bridge_network:
|
||||
bridge_network:
|
||||
driver: bridge
|
||||
@@ -1,40 +0,0 @@
|
||||
version: '3'
|
||||
services:
|
||||
mysql:
|
||||
image: "mysql:5.7"
|
||||
container_name: mysql
|
||||
restart: always
|
||||
ports:
|
||||
- "3306:3306"
|
||||
volumes:
|
||||
- "./dockerdata/mysql/data:/var/lib/mysql"
|
||||
- "./dockerdata/mysql/initdb:/docker-entrypoint-initdb.d"
|
||||
environment:
|
||||
LANG: C.UTF-8
|
||||
TZ: Asia/Shanghai
|
||||
MYSQL_ROOT_PASSWORD: 123456
|
||||
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||||
networks:
|
||||
flask-network:
|
||||
ipv4_address: 172.10.1.31
|
||||
|
||||
flask:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.server
|
||||
container_name: flask
|
||||
restart: always
|
||||
ports:
|
||||
- "8000:8000"
|
||||
depends_on:
|
||||
- mysql
|
||||
networks:
|
||||
flask-network:
|
||||
ipv4_address: 172.10.1.11
|
||||
|
||||
networks:
|
||||
flask-network:
|
||||
driver: bridge
|
||||
ipam:
|
||||
config:
|
||||
- subnet: 172.10.0.0/16
|
||||
@@ -1,19 +0,0 @@
|
||||
import os
|
||||
import multiprocessing
|
||||
|
||||
bind = '0.0.0.0:8000'
|
||||
backlog = 512
|
||||
chdir = os.path.dirname(os.path.abspath(__file__))
|
||||
timeout = 30
|
||||
worker_class = 'sync'
|
||||
|
||||
workers = multiprocessing.cpu_count() * 2 + 1
|
||||
threads = 2
|
||||
loglevel = 'info'
|
||||
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'
|
||||
|
||||
if not os.path.exists('logs'):
|
||||
os.mkdir('logs')
|
||||
|
||||
accesslog = os.path.join(chdir, "logs/gunicorn_access.log")
|
||||
errorlog = os.path.join(chdir, "logs/gunicorn_error.log")
|
||||
@@ -1 +0,0 @@
|
||||
CREATE DATABASE PearAdminFlask DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;;
|
||||
@@ -1,31 +0,0 @@
|
||||
[mysql]
|
||||
|
||||
default-character-set=utf8
|
||||
|
||||
[client]
|
||||
|
||||
default-character-set = utf8
|
||||
|
||||
[mysqld]
|
||||
server_id = 1
|
||||
# 开启二进制日志
|
||||
log-bin = mysql-bin
|
||||
# 只保留7天的二进制日志,以防磁盘被日志占满
|
||||
expire-logs-days = 7
|
||||
# 二进制日志自动删除的天数,默认值为0,表示“没有自动删除”,启动时和二进制日志循环时可能删除
|
||||
expire_logs_days = 7
|
||||
# 设置编码与字符集
|
||||
init_connect='SET collation_connection = utf8_unicode_ci'
|
||||
init_connect='SET NAMES utf8'
|
||||
character-set-server=utf8
|
||||
collation-server=utf8_unicode_ci
|
||||
# 设置错误日志路径
|
||||
log-error = /usr/local/mysql/log/error.log
|
||||
# 设置查询日志路径
|
||||
general_log = on
|
||||
general_log_file = /usr/local/mysql/log/mysql.log
|
||||
#开启慢查询日志路径
|
||||
slow_query_log = on
|
||||
long_query_time = 3
|
||||
log-queries-not-using-indexes = on
|
||||
slow-query-log-file = /usr/local/mysql/log/slowquery.log
|
||||
@@ -1,14 +0,0 @@
|
||||
Flask
|
||||
Flask-APScheduler
|
||||
Flask-Migrate
|
||||
Flask-Login
|
||||
Flask_Reuploaded
|
||||
Flask-SQLAlchemy
|
||||
flask-marshmallow
|
||||
marshmallow-sqlalchemy
|
||||
PyMySQL
|
||||
psutil
|
||||
Flask-Mail
|
||||
Pillow
|
||||
validators
|
||||
cryptography
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/bin/bash
|
||||
rm -rf /root/pear-admin-flask/dockerdata/mysql/data/
|
||||
docker exec mysql /bin/bash -c "mysql -uroot -p123456 -e 'drop database IF EXISTS PearAdminFlask;CREATE DATABASE PearAdminFlask DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;'"
|
||||
docker exec flask /bin/sh -c "rm -rf migrations ; sh /app/start.sh"
|
||||
+5
-1
@@ -1,5 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 这里可以设置同步时间等操作
|
||||
|
||||
# 运行程序
|
||||
echo "Starting application..."
|
||||
python3 app.py
|
||||
|
||||
# 这里可以修改运行命令
|
||||
gunicorn -b 0.0.0.0:5000 app:app
|
||||
@@ -1 +0,0 @@
|
||||
flask db migrate && flask db upgrade
|
||||
Reference in New Issue
Block a user