操作前请一定要记得备份数据库
请勿同时运行新旧版 Qiandao 框架, 或将不同运行中容器的数据库映射为同一文件, 更新后请重启容器或清空浏览器缓存
-
Docker地址 : https://hub.docker.com/r/a76yyyy/qiandao
-
Docker Compose部署方式
# 创建并切换至 qiandao 目录 mkdir -p $(pwd)/qiandao/config && cd $(pwd)/qiandao # 下载 docker-compose.yml wget https://fastly.jsdelivr.net/gh/qiandao-today/qiandao@master/docker-compose.yml # 根据需求和配置描述修改配置环境变量 vi ./docker-compose.yml # 执行 Docker Compose 命令 docker-compose up -d
配置描述见下文配置环境变量
如不需要
OCR功能
或者硬盘空间不大于600M
, 请使用a76yyyy/qiandao:lite-latest
镜像, 该镜像仅去除了OCR相关功能, 其他与主线版本保持一致。 -
Docker部署方式
docker run -d --name qiandao -p 8923:80 -v $(pwd)/qiandao/config:/usr/src/app/config a76yyyy/qiandao
-
容器内部无法连通外网时尝试该命令:
docker run -d --name qiandao --env PORT=8923 --net=host -v $(pwd)/qiandao/config:/usr/src/app/config a76yyyy/qiandao
请注意使用该命令创建容器后, 请将模板里
http://localhost/
形式的api请求, 手动改成api://
或http://localhost:8923/
后, 才能正常完成相关API请求。
-
数据库备份指令 :
docker cp 容器名:/usr/src/app/config/database.db .
-
数据库恢复指令 :
docker cp database.db 容器名:/usr/src/app/config/
-
Docker 配置邮箱(强制使用SSL)
docker run -d --name qiandao -p 8923:80 -v $(pwd)/qiandao/config:/usr/src/app/config --env MAIL_SMTP=STMP服务器 --env MAIL_PORT=邮箱服务器端口 --env MAIL_USER=用户名 --env MAIL_PASSWORD=密码 --env DOMAIN=域名 a76yyyy/qiandao
-
Docker 使用MySQL
docker run -d --name qiandao -p 8923:80 -v $(pwd)/qiandao/config:/usr/src/app/config --ENV DB_TYPE=mysql --ENV JAWSDB_MARIA_URL=mysql://用户名:密码@hostname:port/数据库名 a76yyyy/qiandao
-
其余可参考 Wiki : Docker部署 Qiandao 站教程
-
DockerHub : 介绍
-
Docker已预装Curl环境, 默认安装pycurl模组
-
Version : python3.8
# 请先cd到框架源码根目录 pip3 install -r requirements.txt
-
可选 redis, Mysql
mysql < qiandao.sql
-
修改相关设置
# 请先在框架根目录下新建local_config.py, 在linux环境下可执行以下命令 cp config.py local_config.py # 修改local_config.py文件的内容不受通过git更新源码的影响
-
启动
python ./run.py
数据不随项目分发, 去 https://github.com/qiandao-today/templates 查看你需要的模板, 点击下载。
在你自己的主页中 「我的模板 +」 点击 + 上传模板。
模板需要发布才会在「公开模板」中展示, 你需要管理员权限在「我的发布请求」中审批通过。
-
设置管理员
python ./chrole.py your@email.address admin
-
qiandao.py-CMD操作
python ./qiandao.py tpl.har [--key=value]* [env.json]
变量名 | 是否必须 | 默认值 | 说明 |
---|---|---|---|
BIND | 否 | 0.0.0.0 | 监听地址 |
PORT | 否 | 8923 | 监听端口 |
QIANDAO_DEBUG | 否 | False | 是否启用Debug模式 |
WORKER_METHOD | 否 | Queue | 任务定时执行方式, 默认为 Queue, 可选 Queue 或 Batch, Batch 模式为旧版定时任务执行方式, 性能较弱, 建议仅当 Queue 定时执行模式失效时使用 |
MULTI_PROCESS | 否 | False | 是否启用多进程模式, Windows平台无效 |
AUTO_RELOAD | 否 | False | 是否启用自动热加载, MULTI_PROCESS=True时无效 |
ENABLE_HTTPS | 否 | False | 发送的邮件链接启用HTTPS, 非程序使用HTTPS, 需要HTTPS需要使用反向代理 |
DOMAIN | 否 | qiandao.today | 指定访问域名, <建议修改>, 否则邮件重置密码等功能无效 |
AES_KEY | 否 | binux | AES加密密钥, <强烈建议修改> |
COOKIE_SECRET | 否 | binux | cookie加密密钥, <强烈建议修改> |
COOKIE_DAY | 否 | 5 | Cookie在客户端保留天数 |
DB_TYPE | 否 | sqlite3 | 需要使用MySQL时设置为'mysql' |
JAWSDB_MARIA_URL | 否 | '' | 需要使用MySQL时, 设置为 mysql://用户名:密码@hostname:port/数据库名?auth_plugin= |
QIANDAO_SQL_ECHO | 否 | False | 是否启用 SQLAlchmey 的日志输出, 默认为 False, 设置为 True 时, 会在控制台输出 SQL 语句, 允许设置为 debug 以启用 debug 模式 |
QIANDAO_SQL_LOGGING_NAME | 否 | qiandao.sql_engine | SQLAlchmey 日志名称, 默认为 'qiandao.sql_engine' |
QIANDAO_SQL_LOGGING_LEVEL | 否 | Warning | SQLAlchmey 日志级别, 默认为 'Warning' |
QIANDAO_SQL_ECHO_POOL | 否 | True | 是否启用 SQLAlchmey 的连接池日志输出, 默认为 True, 允许设置为 debug 以启用 debug 模式 |
QIANDAO_SQL_LOGGING_POOL_NAME | 否 | qiandao.sql_pool | SQLAlchmey 连接池日志名称, 默认为 'qiandao.sql_pool' |
QIANDAO_SQL_LOGGING_POOL_LEVEL | 否 | Warning | SQLAlchmey 连接池日志级别, 默认为 'Warning' |
QIANDAO_SQL_POOL_SIZE | 否 | 10 | SQLAlchmey 连接池大小, 默认为 10 |
QIANDAO_SQL_MAX_OVERFLOW | 否 | 50 | SQLAlchmey 连接池最大溢出, 默认为 50 |
QIANDAO_SQL_POOL_PRE_PING | 否 | True | 是否在连接池获取连接前, 先ping一下, 默认为 True |
QIANDAO_SQL_POOL_RECYCLE | 否 | 3600 | SQLAlchmey 连接池回收时间, 默认为 3600 |
QIANDAO_SQL_POOL_TIMEOUT | 否 | 60 | SQLAlchmey 连接池超时时间, 默认为 60 |
QIANDAO_SQL_POOL_USE_LIFO | 否 | True | SQLAlchmey 是否使用 LIFO 算法, 默认为 True |
REDISCLOUD_URL | 否 | '' | 需要使用Redis或RedisCloud时, 设置为 http://rediscloud:密码@hostname:port |
REDIS_DB_INDEX | 否 | 1 | 默认为1 |
QIANDAO_EVIL | 否 | 500 | (限Redis连接已开启)登录用户或IP在1小时内 操作失败(如登录, 验证, 测试等操作)次数*相应惩罚分值 达到evil上限后自动封禁直至下一小时周期 |
EVIL_PASS_LAN_IP | 否 | True | 是否关闭本机私有IP地址用户及Localhost_API请求的evil限制 |
TRACEBACK_PRINT | 否 | False | 是否启用在控制台日志中打印Exception的TraceBack信息 |
PUSH_PIC_URL | 否 | push_pic.png | 默认为push_pic.png |
PUSH_BATCH_SW | 否 | True | 是否允许开启定期推送 Qiandao 任务日志, 默认为True |
MAIL_SMTP | 否 | "" | 邮箱SMTP服务器 |
MAIL_PORT | 否 | "" | 邮箱SMTP服务器端口 |
MAIL_USER | 否 | "" | 邮箱用户名 |
MAIL_PASSWORD | 否 | "" | 邮箱密码 |
MAIL_FROM | 否 | MAIL_USER | 发送时使用的邮箱,默认与MAIL_USER相同 |
MAIL_DOMAIN | 否 | mail.qiandao.today | 邮箱域名,没啥用, 使用的DOMAIN |
PROXIES | 否 | "" | 全局代理域名列表,用" |
PROXY_DIRECT_MODE | 否 | "" | 全局代理黑名单模式,默认不启用 "url"为网址匹配模式;"regexp"为正则表达式匹配模式 |
PROXY_DIRECT | 否 | "" | 全局代理黑名单匹配规则 |
USE_PYCURL | 否 | True | 是否启用Pycurl模组 |
ALLOW_RETRY | 否 | True | 在Pycurl环境下部分请求可能导致Request错误时, 自动修改冲突设置并重发请求 |
DNS_SERVER | 否 | "" | 通过Curl使用指定DNS进行解析(仅支持Pycurl环境), 如 8.8.8.8 |
CURL_ENCODING | 否 | True | 是否允许使用Curl进行Encoding操作 |
CURL_CONTENT_LENGTH | 否 | True | 是否允许Curl使用Headers中自定义Content-Length请求 |
NOT_RETRY_CODE | 否 | 详见配置... | 详见配置... |
EMPTY_RETRY | 否 | True | 详见配置... |
USER0ISADMIN | 否 | True | 第一个注册用户为管理员,False关闭 |
EXTRA_ONNX_NAME | 否 | "" | config目录下自定义ONNX文件名 (不填 ".onnx" 后缀) 多个onnx文件名用"|"分隔 |
EXTRA_CHARSETS_NAME | 否 | "" | config目录下自定义ONNX对应自定义charsets.json文件名 (不填 ".json" 后缀) 多个json文件名用"|"分隔 |
详细信息请查阅config.py
Line | Delete | Modify |
---|---|---|
10 | import urlparse |
from urllib.parse import urlparse |
18 | mysql_url = urlparse.urlparse(os.getenv('JAWSDB_MARIA_URL', '')) |
mysql_url = urlparse(os.getenv('JAWSDB_MARIA_URL', '')) |
19 | redis_url = urlparse.urlparse(os.getenv('REDISCLOUD_URL', '')) |
redis_url = urlparse(os.getenv('REDISCLOUD_URL', '')) |
43 | aes_key = hashlib.sha256(os.getenv('AES_KEY', 'binux').encode('utf-8')).digest() |
aes_key = hashlib.sha256(os.getenv('AES_KEY', 'binux')).digest() |
44 | cookie_secret = hashlib.sha256(os.getenv('COOKIE_SECRET', 'binux').encode('utf-8')).digest() |
cookie_secret = hashlib.sha256(os.getenv('COOKIE_SECRET', 'binux')).digest() |
-
源码部署更新
# 先cd到源码所在目录, 执行命令后重启进程 wget https://gitee.com/a76yyyy/qiandao/raw/master/update.sh -O ./update.sh && \ sh ./update.sh
-
Docker容器部署更新
# 先进入容器后台, 执行命令后重启容器 wget https://gitee.com/a76yyyy/qiandao/raw/master/update.sh -O /usr/src/app/update.sh && \ sh /usr/src/app/update.sh
-
强制同步最新源码
# 先cd到仓库代码根目录, 执行命令后重启进程 wget https://gitee.com/a76yyyy/qiandao/raw/master/update.sh -O ./update.sh && \ sh ./update.sh -f
详见 CHANGELOG.md
维护项目精力有限, 仅保证对 Chrome 浏览器的支持。如果测试了其他浏览器可以 Pull Request。
MIT 许可协议
Thanks goes to these wonderful people (emoji key):
a76yyyyy 🎨 💻 🚧 |
Roy Binux 🎨 💻 🚧 |
AragonSnow 💻 🎨 🚧 |
Mark 🎨 📝 💡 📖 |
pidan 🎨 |
buzhibujue 💻 |
billypon 💻 |
acooler15 💻 🚧 |
shxyke 💻 |
xiaoxiao 💻 |
hiCasper 💻 |
旋子 💻 |
chen8945 💻 |
seiuneko 💻 |
powersee 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!