应用台导航页
  • 主页
  • 博客
  • 知识库
  • 工作台
  • 集萃
  • 友链
  • 关于

绮课运维文档

教务导入数据

  1. 如果课程不全,导入开课数据,还会全吗?

同步数据到数据库服务器

本地导出数据

注意:如果表名全小写了,先逐个改大写,再导出,但是可能改不了,一旦配置为忽略大小写。表太大全局替换也搞不了,只能用脚本

powershell
mysqldump -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

导入到云数据库

powershell
mysql -u avnadmin -h cheer-cheer.aivencloud.com -P 27873 -p --default-character-set=utf8 cheer2025_9 < dump919.sql
AVNS_MUaYnfZJIr892QFJYDq

一个简单的持续部署方式

  1. 配置环境变量

参考 .env.example 创建 .env 主要需配置 DATABASE_URL

# docker 部署配置
IMAGE_NAME=ghcr.nju.edu.cn/huayemao/cheer-next:latest
CONTAINER_NAME=cheer-next
PORT=3000
NODE_ENV=production
# 应用配置
DATABASE_URL=<YOUR_DATABASE_URL>
  1. 复制 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"
  1. 创建并执行部署脚本 /opt/deploy_scripts/deploy-cheer.sh

以下脚本将拉取镜像并判断有更新,有更新时停止并重新创建容器

shell
# 日志文件路径
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"
  1. crontab -e 编辑定时任务配置文件,定时执行脚本。

添加以下行,以每隔5分钟定时执行 /opt/deploy_scripts/deploy-cheer.sh ,保存并退出编辑器后,定时任务将自动生效。`

*/5 * * * * /opt/deploy_scripts/deploy-cheer.sh >> /var/log/cheer-deploy.log 2>&1
shell
#!/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"

问题

  1. 首字母大写的表,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

dors logoDors

Dors 是花野猫开发为知识工作者打造的数字花园应用,包含的博客、个人记事本、及其他实用功能。

花园

  • 花坛——博客
  • 果园——知识库

工坊——作者开发的实用工具

  • 小记
  • 秒切——一键按秒分割视频
  • 中国重点高校地理位置可视化网站
  • 中国行政区划数据查询平台
  • excel 重命名工具

misc

  • 生活章程
  • 画廊
  • just have fun!

© 2022 - present. All Rights Reserved.滇ICP备2025063395号-1

花野猫打造