绮课运维文档
教务导入数据
- 如果课程不全,导入开课数据,还会全吗?
同步数据到数据库服务器
本地导出数据
注意:如果表名全小写了,先逐个改大写,再导出,但是可能改不了,一旦配置为忽略大小写。表太大全局替换也搞不了,只能用脚本
powershellmysqldump -uroot -p --default-character-set=utf8 --skip-triggers --ignore-table=c2.blogpost --ignore-table=c2.file --ignore-table=c2.admin --ignore-table=c2.captcha --ignore-table=c2.configuration c2 --result-file dump917.sql
导入到云数据库
powershellmysql -u avnadmin -h cheer-cheer.aivencloud.com -P 27873 -p --default-character-set=utf8 cheer2025_9 < dump919.sql
AVNS_MUaYnfZJIr892QFJYDq
一个简单的持续部署方式
- 配置环境变量
参考 .env.example 创建 .env 主要需配置 DATABASE_URL
# docker 部署配置IMAGE_NAME=ghcr.nju.edu.cn/huayemao/cheer-next:latestCONTAINER_NAME=cheer-nextPORT=3000NODE_ENV=production# 应用配置DATABASE_URL=<YOUR_DATABASE_URL>
- 复制 docker-compose.yml
services: cheer-next: image: ${IMAGE_NAME} container_name: ${CONTAINER_NAME} restart: always environment: - DATABASE_URL=${DATABASE_URL} - NODE_ENV=${NODE_ENV} ports: - "${PORT}:3000" logging: driver: "json-file" options: max-size: "10m" max-file: "3"
- 创建并执行部署脚本
/opt/deploy_scripts/deploy-cheer.sh
以下脚本将拉取镜像并判断有更新,有更新时停止并重新创建容器
# 日志文件路径 LOG_FILE=/var/log/cheer-deploy.log [root@iZ2vc2khcigksds4daxk1xZ deploy_scripts]# cat ./deploy.sh #!/bin/bash set -euo pipefail # 加载环境变量 if [ -f ".env" ]; then export $(grep -v '^#' .env | xargs) else echo "Error: .env file not found!" exit 1 fi # 确保日志目录存在 if [ ! -d "$(dirname "$LOG_FILE")" ]; then mkdir -p "$(dirname "$LOG_FILE")" fi # 定义日志函数 log() { local TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S") echo "[$TIMESTAMP] $1" | tee -a "$LOG_FILE" } log "Starting deployment process for ${CONTAINER_NAME}" # 拉取最新镜像 log "Pulling latest image: ${IMAGE_NAME}" if docker pull "${IMAGE_NAME}" >> "$LOG_FILE" 2>&1; then log "Image pulled successfully" # 获取当前运行容器使用的镜像ID(如果容器存在) CURRENT_IMAGE_ID=$(docker inspect --format '{{.Image}}' "${CONTAINER_NAME}" 2>/dev/null || true) # 获取新拉取镜像的ID NEW_IMAGE_ID=$(docker inspect --format '{{.Id}}' "${IMAGE_NAME}" 2>/dev/null) log "Current image ID: ${CURRENT_IMAGE_ID:-(none)}" log "New image ID: ${NEW_IMAGE_ID:-(none)}" # 检查是否需要更新 if [ -z "${CURRENT_IMAGE_ID}" ] || [ "${CURRENT_IMAGE_ID}" != "${NEW_IMAGE_ID}" ]; then log "New image detected, updating container..." # 停止并重新创建容器 if docker compose down >> "$LOG_FILE" 2>&1; then log "Old container stopped and removed" if docker compose up -d >> "$LOG_FILE" 2>&1; then log "New container started successfully" else log "Failed to start new container" exit 1 fi else log "Failed to stop old container" exit 1 fi else log "No changes in image, no update needed" fi else log "Failed to pull latest image" exit 1 fi log "Deployment process completed"
services: cheer-next: image: ${IMAGE_NAME} container_name: ${CONTAINER_NAME} restart: always environment: - DATABASE_URL=${DATABASE_URL} - NODE_ENV=${NODE_ENV} ports: - "${PORT}:3000" logging: driver: "json-file" options: max-size: "10m" max-file: "3"
crontab -e编辑定时任务配置文件,定时执行脚本。
添加以下行,以每隔5分钟定时执行 /opt/deploy_scripts/deploy-cheer.sh ,保存并退出编辑器后,定时任务将自动生效。`
*/5 * * * * /opt/deploy_scripts/deploy-cheer.sh >> /var/log/cheer-deploy.log 2>&1
#!/bin/bash set -euo pipefail # 加载环境变量 if [ -f ".env" ]; then export $(grep -v '^#' .env | xargs) else echo "Error: .env file not found!" exit 1 fi # 确保日志目录存在 if [ ! -d "$(dirname "$LOG_FILE")" ]; then mkdir -p "$(dirname "$LOG_FILE")" fi # 定义日志函数 log() { local TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S") echo "[$TIMESTAMP] $1" | tee -a "$LOG_FILE" } log "Starting deployment process for ${CONTAINER_NAME}" # 拉取最新镜像 log "Pulling latest image: ${IMAGE_NAME}" if docker pull "${IMAGE_NAME}"; then log "Image pulled successfully" # 检查是否需要更新 if [ "$(docker compose images -q ${CONTAINER_NAME})" != "$(docker images -q ${IMAGE_NAME})" ]; then log "New image detected, updating container..." # 停止并重新创建容器 if docker compose down; then log "Old container stopped and removed" if docker compose up -d; then log "New container started successfully" else log "Failed to start new container" exit 1 fi else log "Failed to stop old container" exit 1 fi else log "No changes in image, no update needed" fi else log "Failed to pull latest image" exit 1 fi log "Deployment process completed"
问题
- 首字母大写的表,mysql 导出再导入后变成小写
MySQL 数据导出谨慎使用 --compact | Dors. 花野猫的数字花园
SteamFinder: 09-19 19:08:49 huayemao cZErZzRSARdCAGcf
SteamFinder: 09-19 19:08:58 huayemao_dev cZErZzRSARdCAGcf
https://8.210.252.207:887/phpmyadmin_452aeed7e1c9537f/index.php?lang=zh_cn
test002
22023130
999888
150114