diff --git a/.env b/.env index 8068ce8..44ac0ea 100644 --- a/.env +++ b/.env @@ -1,7 +1,7 @@ # 环境变量配置文件 # 数据库配置 -DATABASE_URL=postgresql://luna:123luna@localhost:6432/luna +DATABASE_URL=postgresql://luna:123luna@6.6.6.86:6432/luna # MQTT配置 MQTT_BROKER_HOST=luna-mqtt diff --git a/Dockerfile b/Dockerfile index c9828c6..e1f0d4a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -36,4 +36,4 @@ RUN mkdir -p static/uploads static/processed EXPOSE 9999 # 启动命令 -CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "3199"] \ No newline at end of file +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8199"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 2d4fa8a..c2de82e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,7 +6,7 @@ services: dockerfile: Dockerfile container_name: luna-app ports: - - "3199:8199" + - "8199:8199" volumes: - ./static:/app/static env_file: diff --git a/docker_deplay.sh b/docker_deplay.sh index d046a5f..b292daa 100755 --- a/docker_deplay.sh +++ b/docker_deplay.sh @@ -2,6 +2,14 @@ # ============================================================================= # Docker 镜像构建和部署自动化脚本 +# +# 用法: +# ./docker_deplay.sh # 完整构建和部署流程 (默认AMD64架构) +# ./docker_deplay.sh -amd # 构建和部署AMD64架构 +# ./docker_deplay.sh -arm # 构建和部署ARM64架构 +# ./docker_deplay.sh -upload # 仅上传已存在的tar文件并部署 +# ./docker_deplay.sh -upload -amd # 仅上传已存在的AMD64架构tar文件并部署 +# ./docker_deplay.sh -upload -arm # 仅上传已存在的ARM64架构tar文件并部署 # ============================================================================= # 配置变量 - 请根据实际情况修改 @@ -12,10 +20,14 @@ SERVER_PORT="22" # SSH端口,默认22 IMAGE_NAME="epage_server" # Docker镜像名称 IMAGE_TAG="latest" # Docker镜像标签 CONTAINER_NAME="epage_server-container" # 容器名称 -LOCAL_PORT="3199" # 本地端口 +LOCAL_PORT="8199" # 本地端口 CONTAINER_PORT="8199" # 容器端口 TAR_FILE="${IMAGE_NAME}-${IMAGE_TAG}.tar" # 压缩包文件名 +# 架构相关变量 +PLATFORM="linux/amd64" # 默认架构 +ARCH_SUFFIX="" # 架构后缀,用于区分不同架构的tar文件 + # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' @@ -59,6 +71,40 @@ check_dependencies() { log_success "依赖检查完成" } +# 解析命令行参数 +parse_arguments() { + while [[ $# -gt 0 ]]; do + case $1 in + -amd) + PLATFORM="linux/amd64" + ARCH_SUFFIX="-amd64" + log_info "设置目标架构为 AMD64" + shift + ;; + -arm) + PLATFORM="linux/arm64" + ARCH_SUFFIX="-arm64" + log_info "设置目标架构为 ARM64" + shift + ;; + -upload) + UPLOAD_ONLY=true + log_info "设置为仅上传模式" + shift + ;; + *) + log_error "未知参数: $1" + log_info "支持的参数: -amd, -arm, -upload" + exit 1 + ;; + esac + done + + # 更新TAR_FILE名,包含架构后缀 + TAR_FILE="${IMAGE_NAME}-${IMAGE_TAG}${ARCH_SUFFIX}.tar" + log_info "镜像文件名: ${TAR_FILE}" +} + # 构建Docker镜像 build_image() { log_info "开始构建 Docker 镜像..." @@ -70,7 +116,7 @@ build_image() { fi # 构建镜像并导出为tar文件 - docker buildx build --platform linux/amd64 -t "${IMAGE_NAME}:${IMAGE_TAG}" --output type=docker,dest="./${TAR_FILE}" . + docker buildx build --platform $PLATFORM -t "${IMAGE_NAME}:${IMAGE_TAG}" --output type=docker,dest="./${TAR_FILE}" . if [ $? -eq 0 ]; then log_success "Docker 镜像构建完成: ${TAR_FILE}" @@ -104,24 +150,24 @@ deploy_on_server() { echo "[INFO] 开始服务器端部署..." # 检查并停止现有容器 - if docker ps -a --format 'table {{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then + if sudo docker ps -a --format 'table {{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then echo "[INFO] 发现现有容器 ${CONTAINER_NAME},正在停止并删除..." - docker stop ${CONTAINER_NAME} || true - docker rm ${CONTAINER_NAME} || true + sudo docker stop ${CONTAINER_NAME} || true + sudo docker rm ${CONTAINER_NAME} || true fi # 检查并删除现有镜像 - if docker images --format 'table {{.Repository}}:{{.Tag}}' | grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$"; then + if sudo docker images --format 'table {{.Repository}}:{{.Tag}}' | grep -q "^${IMAGE_NAME}:${IMAGE_TAG}$"; then echo "[INFO] 发现现有镜像 ${IMAGE_NAME}:${IMAGE_TAG},正在删除..." - docker rmi ${IMAGE_NAME}:${IMAGE_TAG} || true + sudo docker rmi ${IMAGE_NAME}:${IMAGE_TAG} || true fi # 加载新镜像 echo "[INFO] 加载新镜像..." - docker load -i /tmp/${TAR_FILE} + sudo docker load -i /tmp/${TAR_FILE} # 验证镜像是否加载成功 - if docker images | grep -q "${IMAGE_NAME}"; then + if sudo docker images | grep -q "${IMAGE_NAME}"; then echo "[SUCCESS] 镜像加载成功" else echo "[ERROR] 镜像加载失败" @@ -130,17 +176,17 @@ deploy_on_server() { # 运行新容器 echo "[INFO] 启动新容器..." - docker run -d -p ${LOCAL_PORT}:${CONTAINER_PORT} --name ${CONTAINER_NAME} ${IMAGE_NAME}:${IMAGE_TAG} + sudo docker run -d -p ${LOCAL_PORT}:${CONTAINER_PORT} --name ${CONTAINER_NAME} ${IMAGE_NAME}:${IMAGE_TAG} # 验证容器是否启动成功 - if docker ps | grep -q "${CONTAINER_NAME}"; then + if sudo docker ps | grep -q "${CONTAINER_NAME}"; then echo "[SUCCESS] 容器启动成功" echo "[INFO] 容器状态:" - docker ps | grep "${CONTAINER_NAME}" + sudo docker ps | grep "${CONTAINER_NAME}" else echo "[ERROR] 容器启动失败" echo "[INFO] 查看容器日志:" - docker logs ${CONTAINER_NAME} + sudo docker logs ${CONTAINER_NAME} exit 1 fi @@ -182,10 +228,12 @@ show_deployment_info() { echo "访问地址: http://${SERVER_HOST}:${LOCAL_PORT}" echo "容器名称: ${CONTAINER_NAME}" echo "镜像名称: ${IMAGE_NAME}:${IMAGE_TAG}" + echo "目标架构: ${PLATFORM}" + echo "镜像文件: ${TAR_FILE}" echo "==========================================" echo "" - log_info "如需查看容器日志,请在服务器上运行: docker logs ${CONTAINER_NAME}" - log_info "如需停止容器,请在服务器上运行: docker stop ${CONTAINER_NAME}" + log_info "如需查看容器日志,请在服务器上运行: sudo docker logs ${CONTAINER_NAME}" + log_info "如需停止容器,请在服务器上运行: sudo docker stop ${CONTAINER_NAME}" } # 主函数 @@ -195,6 +243,10 @@ main() { echo "==========================================" echo "" + # 解析命令行参数 + UPLOAD_ONLY=false + parse_arguments "$@" + # 检查配置 if [ "$SERVER_HOST" = "your-server-ip" ] || [ "$SERVER_PASSWORD" = "your-password" ]; then log_error "请先配置脚本顶部的服务器信息" @@ -205,13 +257,33 @@ main() { exit 1 fi - # 执行部署流程 - check_dependencies - build_image - upload_to_server - deploy_on_server - cleanup_local - show_deployment_info + # 检查是否是上传模式 + if [ "$UPLOAD_ONLY" = true ]; then + log_info "检测到 -upload 参数,跳过构建步骤" + + # 检查tar文件是否存在 + if [ ! -f "$TAR_FILE" ]; then + log_error "未找到tar文件: $TAR_FILE" + log_info "请先运行脚本构建镜像,或确保tar文件存在" + exit 1 + fi + + log_success "找到tar文件: $TAR_FILE" + + # 执行上传和部署流程 + upload_to_server + deploy_on_server + cleanup_local + show_deployment_info + else + # 执行完整的部署流程 + check_dependencies + build_image + upload_to_server + deploy_on_server + cleanup_local + show_deployment_info + fi } # 脚本入口 diff --git a/epage_server-latest.tar b/epage_server-latest.tar deleted file mode 100644 index e69de29..0000000