服务镜像构建文件
rename 增加docker-compose部署方式 提交docker-compose.yml 完整镜像构建文件 环境镜像构建文件 服务镜像构建文件 docker-compose方式使用的config.py MySQL初始化数据 MySQL配置文件 rename 服务镜像启动脚本
This commit is contained in:
-25
@@ -1,25 +0,0 @@
|
|||||||
FROM python:3.7-alpine
|
|
||||||
|
|
||||||
|
|
||||||
RUN apk update \
|
|
||||||
&& apk --update add --no-cache gcc \
|
|
||||||
&& apk --update add --no-cache g++ \
|
|
||||||
&& apk --update add --no-cache tzdata \
|
|
||||||
&& apk --update add --no-cache libffi-dev \
|
|
||||||
&& apk --update add --no-cache libxslt-dev \
|
|
||||||
&& apk --update add --no-cache jpeg-dev
|
|
||||||
|
|
||||||
ENV TIME_ZONE Asia/Shanghai
|
|
||||||
ENV PIPURL "https://pypi.tuna.tsinghua.edu.cn/simple"
|
|
||||||
|
|
||||||
RUN echo "${TIME_ZONE}" > /etc/timezone \
|
|
||||||
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime
|
|
||||||
|
|
||||||
COPY . /app
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
RUN pip --no-cache-dir install -i ${PIPURL} --upgrade pip \
|
|
||||||
&& pip --no-cache-dir install -i ${PIPURL} -r requirement/dev.txt \
|
|
||||||
&& pip --no-cache-dir install -i ${PIPURL} gunicorn \
|
|
||||||
&& chmod +x start.sh
|
|
||||||
CMD ./start.sh
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
FROM 1004947301/python3.7-flask:pillow
|
||||||
|
|
||||||
|
LABEL "author"="liuyiyangwang"
|
||||||
|
LABEL "blog"="https://gitee.com/liuyiyangwang"
|
||||||
|
|
||||||
|
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
|
||||||
@@ -57,10 +57,7 @@ Pear Admin Flask 基于 Flask 的后台管理系统,拥抱应用广泛的pytho
|
|||||||
git clone https://gitee.com/pear-admin/pear-admin-flask
|
git clone https://gitee.com/pear-admin/pear-admin-flask
|
||||||
|
|
||||||
# 安 装
|
# 安 装
|
||||||
pip install -r requirement\dev.txt
|
pip install -r requirements.txt
|
||||||
|
|
||||||
# 配 置
|
|
||||||
.env
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -115,6 +112,24 @@ flask new --type view --name test/a
|
|||||||
# 自动注册蓝图
|
# 自动注册蓝图
|
||||||
# 访问http://127.0.0.1:5000/test/a/
|
# 访问http://127.0.0.1:5000/test/a/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 使用docker-compose运行项目
|
||||||
|
```bash
|
||||||
|
#安装docker-compose
|
||||||
|
curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
|
||||||
|
chmod +x /usr/local/bin/docker-compose
|
||||||
|
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
|
||||||
|
|
||||||
|
docker-compose --version
|
||||||
|
docker-compose up -d # -d后台运行
|
||||||
|
docker-compose stop # 停止启动
|
||||||
|
docker-compose down # 清除容器
|
||||||
|
|
||||||
|
dockerdata/config.py # 配置文件
|
||||||
|
dockerdata/mysql/initdb/ # MySQL初始化数据在
|
||||||
|
rm -rf dockerdata/mysql/{log,data}/* # down掉容器后启动需要清除删除log,dat
|
||||||
|
```
|
||||||
|
|
||||||
Pear Admin Flask 还有以下几个版本:
|
Pear Admin Flask 还有以下几个版本:
|
||||||
|
|
||||||
**[mini 分支版本](https://gitee.com/pear-admin/pear-admin-flask/tree/mini/)**
|
**[mini 分支版本](https://gitee.com/pear-admin/pear-admin-flask/tree/mini/)**
|
||||||
@@ -136,4 +151,4 @@ main 分支是对 mini 分支的后续,目前还在开发中。
|
|||||||
|---------------------|---------------------|
|
|---------------------|---------------------|
|
||||||
|  |  |
|
|  |  |
|
||||||
| |  |
|
| |  |
|
||||||
|  |  |
|
|  |  |
|
||||||
|
|||||||
+36
-9
@@ -1,14 +1,41 @@
|
|||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
flask:
|
|
||||||
build: .
|
|
||||||
ports:
|
|
||||||
- "8000:8000"
|
|
||||||
restart: always
|
|
||||||
links:
|
|
||||||
- mysql:dbserver
|
|
||||||
mysql:
|
mysql:
|
||||||
image: "mysql:5.7"
|
image: "mysql:5.7"
|
||||||
environment:
|
container_name: mysql
|
||||||
- MYSQL_ROOT_PASSWORD=root
|
|
||||||
restart: always
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "3306:3306"
|
||||||
|
volumes:
|
||||||
|
- "./dockerdata/mysql/log:/usr/local/mysql/log"
|
||||||
|
- "./dockerdata/mysql/data:/var/lib/mysql"
|
||||||
|
- "./dockerdata/mysql/my.cnf:/etc/my.cnf"
|
||||||
|
- "./dockerdata/mysql/initdb:/docker-entrypoint-initdb.d"
|
||||||
|
environment:
|
||||||
|
LANG: C.UTF-8
|
||||||
|
TZ: Asia/Shanghai
|
||||||
|
MYSQL_ROOT_PASSWORD: 123456
|
||||||
|
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
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
FROM python:3.7-alpine
|
||||||
|
|
||||||
|
LABEL "author"="liuyiyangwang"
|
||||||
|
LABEL "blog"="https://gitee.com/liuyiyangwang"
|
||||||
|
|
||||||
|
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
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
FROM python:3.7-alpine
|
||||||
|
|
||||||
|
LABEL "author"="liuyiyangwang"
|
||||||
|
LABEL "blog"="https://gitee.com/liuyiyangwang"
|
||||||
|
|
||||||
|
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
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
FROM 1004947301/python3.7-flask:pillow
|
||||||
|
|
||||||
|
LABEL "author"="liuyiyangwang"
|
||||||
|
LABEL "blog"="https://gitee.com/liuyiyangwang"
|
||||||
|
|
||||||
|
COPY . /app/
|
||||||
|
COPY dockerdata/config.py /app/applications/
|
||||||
|
COPY dockerdata/start.sh /app
|
||||||
|
|
||||||
|
WORKDIR /app/
|
||||||
|
|
||||||
|
ENV TIME_ZONE Asia/Shanghai
|
||||||
|
|
||||||
|
RUN chmod +x /app/start.sh
|
||||||
|
|
||||||
|
CMD ./start.sh
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
import logging
|
||||||
|
from urllib.parse import quote_plus as urlquote
|
||||||
|
|
||||||
|
from apscheduler.executors.pool import ThreadPoolExecutor
|
||||||
|
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
|
||||||
|
|
||||||
|
|
||||||
|
class BaseConfig:
|
||||||
|
DEBUG = True
|
||||||
|
HOST = '127.0.0.1'
|
||||||
|
PORT = 5000
|
||||||
|
|
||||||
|
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']
|
||||||
|
UPLOADS_AUTOSERVE = True
|
||||||
|
|
||||||
|
# JSON配置
|
||||||
|
JSON_AS_ASCII = False
|
||||||
|
|
||||||
|
SECRET_KEY = "pear-admin-flask"
|
||||||
|
|
||||||
|
# redis配置
|
||||||
|
REDIS_HOST = "127.0.0.1"
|
||||||
|
REDIS_PORT = 6379
|
||||||
|
|
||||||
|
# mysql 配置
|
||||||
|
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
|
||||||
|
|
||||||
|
# 設置 APSCHEDULER 參數
|
||||||
|
SCHEDULER_API_ENABLED = False
|
||||||
|
SCHEDULER_JOBSTORES: dict = {
|
||||||
|
'default': SQLAlchemyJobStore(
|
||||||
|
url=f'mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}')
|
||||||
|
}
|
||||||
|
SCHEDULER_EXECUTORS: dict = {
|
||||||
|
'default': ThreadPoolExecutor(20)
|
||||||
|
}
|
||||||
|
SCHEDULER_JOB_DEFAULTS: dict = {
|
||||||
|
'coalesce': False,
|
||||||
|
'max_instances': 3
|
||||||
|
}
|
||||||
|
|
||||||
|
# 插件配置
|
||||||
|
PLUGIN_ENABLE_FOLDERS = ["helloworld"]
|
||||||
|
|
||||||
|
# 配置多个数据库连接的连接串写法示例
|
||||||
|
# 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=utf8"
|
||||||
|
# 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
|
||||||
|
# }
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
CREATE DATABASE PearAdminFlask;
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
[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
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
Flask
|
||||||
|
Flask-APScheduler
|
||||||
|
Flask-Migrate
|
||||||
|
Flask-Login
|
||||||
|
Flask_Reuploaded
|
||||||
|
Flask-SQLAlchemy
|
||||||
|
flask-marshmallow
|
||||||
|
marshmallow-sqlalchemy
|
||||||
|
PyMySQL
|
||||||
|
psutil
|
||||||
|
Flask-Mail
|
||||||
|
Pillow
|
||||||
|
validators
|
||||||
|
cryptography
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
sleep 5 #等MySQL启动
|
||||||
|
flask db init && flask db migrate && flask db upgrade && flask admin init
|
||||||
|
exec gunicorn -c gunicorn.conf.py "applications:create_app()"
|
||||||
|
while true; do
|
||||||
|
echo '发生错误'
|
||||||
|
sleep 100
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user