FAQ 
how to backup and restore the database? 
QD uses sqlite3 as the framework database by default, and the database.db file is saved in config directory. When deploying with a Docker container, you can use the docker cp command to back up the database file, and then use the docker cp command to restore the database file in the new container.
# database backup
docker cp container_name:/usr/src/app/config/database.db .
# Database recovery
docker cp database.db container_name:/usr/src/app/config/how to configure the email server in Docker? 
docker run -d --name qd -p 8923:80 -v $(pwd)/qd/config:/usr/src/app/config --env MAIL_SMTP=$STMP_Server_ --env MAIL_PORT=$Mailbox_server_port --env MAIL_USER=$Username --env MAIL_PASSWORD=$Password --env DOMAIN=$Domain qdtoday/qdhow to use MySQL in Docker? 
docker run -d --name qd -p 8923:80 -v $(pwd)/qd/config:/usr/src/app/config --ENV DB_TYPE=mysql --ENV JAWSDB_MARIA_URL=mysql://$username:$password@$hostname:$port/$database_name?auth_plugin= qdtoday/qdhow to build a Docker image by myself? 
Please refer to the build file Dockerfile of this image.
How to view the API and Jinja2 template variables supported by the current framework? 
Please access the home page of the framework, and then click the Common API/Filter button in the upper left corner to view the API and Jinja2 template variables supported by the current framework.
how to submit a bug issue? 
Please enable Debug mode after encountering a problem, and then submit detailed error information to Issue.
Which requests are necessary for QD? 
Empirically, the following requests are necessary:
- login page
 - POST to login page
 - Issue a request for username, password
 - The page that caused the page to jump after sending
 - The first page before and after page turning
 
Will my username and password be revealed? 
In order to help users initiate requests, user names and passwords still need to be recorded. This can only rely on the self-discipline of server maintainers to ensure the security of back-end data. But in the framework design, each user is encrypted with a secure key when storing. Encrypting user data with a key can ensure that user data cannot be decrypted only by obtaining the database. (Encrypted user data includes templates uploaded by users, variables set by users for tasks, etc.)
If you are still worried, you can build the QD framework by yourself, download the template and run it on your own server.
Prompt PermissionError: [Errno 1] Operation not permitted 
If it is an ARM32 Debian system, please check whether the
Dockerversion is less than20.10.0, and whether thelibseccompversion is less than2.4.4. If so, please upgrade the above components.Update
libseccompreference operation:sh# Get signing keys to verify the new packages, otherwise they will not install sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC 648ACFD622F3D138 # Add the Buster backport repository to apt sources.list echo 'deb http://httpredir.debian.org/debian buster-backports main contrib non-free' | sudo tee -a /etc/apt/sources.list.d/debian-backports.list sudo apt update sudo apt install libseccomp2 -t buster-backportsSource:
Check if the
/usr/src/appdirectory inside the container is mapped to the outside of the container.Note that the framework only needs to map the
/usr/src/app/configdirectory.
Prompt warning message: Connect Redis falied: Error 10061 
QD uses redis as a flow limiting tool. If the redis service is not installed, the framework will prompt the following warning message.
[W xxxxxx xx:xx:xx QD.RedisDB redisdb:28] Connect Redis falied: Error 10061 connecting to localhost:6379. No connection could be made because the target machine actively refused it.However, redis is not required in this framework, if you don't need to use the flow-limiting feature, you can ignore the warning message.
It is recommended to use
Docker composeto deploy the QD framework, and the Docker compose configuration already installs the redis container by default.
Prompt warning message: Import PyCurl module falied 
QD uses the pycurl module to send HTTP proxy requests. If the pycurl module is not installed, the framework will prompt the following warning message:
[W xxxxxx xx:xx:xx QD.Http.Fetcher fetcher:34] Import PyCurl module falied: No module named 'pycurl'However, pycurl is not required in this framework, if you don't need to use the proxy function, you can ignore the warning message.
The
pycurlmodule is cumbersome to install on the Windows system, and thelibcurllibrary needs to be installed. For the specific installation method, please refer to pycurl official documentation.It is recommended to use a container or linux system to deploy the QD framework. The docker container has a pre-installed Curl environment, and the pycurl module is installed by default
How to Register Notification Tools 
You can register different notification tools to receive notifications when specific events (such as failed check-ins) occur.
Please refer to Pusher for details.
Subscribe updating page prompts undefined error 
The subscribe updating web page prompts an error code of undefined, or the console shows WebSocket connection failed but does not show the reason for the error
Please check if the "reverse proxy" configuration is correct, refer to Nginx reverse proxy WebSocket service connection error
Reference configuration is as follows:
Nginxserver { listen 80; # Modify server_name by yourself server_name qd.example.com; location / { proxy_pass http://ip:port; # Set WebSocket Configuration proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # Set other optional configuration proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
Error Code: 4006 
Error message: "Update failed, reason: Cannot connect to host xxx.xxx:443 ssl:False"
Cause: Unable to connect to Github or GitHub acceleration source.
Solution 1: Use a proxy
Solution 2: Change the GitHub acceleration source
Add/modify the environment variable in the container: SUBSCRIBE_ACCELERATE_URL=https://xxx.xxx/https://raw.githubusercontent.com/ Replace https://xxx.xxx/ with an available acceleration source. If you can't find an acceleration source, you can refer to https://ghproxy.link/ or https://gh-proxy.com for published acceleration sources.
QD