超级sh
This commit is contained in:
2
.env
2
.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
|
||||
|
||||
@@ -36,4 +36,4 @@ RUN mkdir -p static/uploads static/processed
|
||||
EXPOSE 9999
|
||||
|
||||
# 启动命令
|
||||
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "3199"]
|
||||
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8199"]
|
||||
@@ -6,7 +6,7 @@ services:
|
||||
dockerfile: Dockerfile
|
||||
container_name: luna-app
|
||||
ports:
|
||||
- "3199:8199"
|
||||
- "8199:8199"
|
||||
volumes:
|
||||
- ./static:/app/static
|
||||
env_file:
|
||||
|
||||
116
docker_deplay.sh
116
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
|
||||
}
|
||||
|
||||
# 脚本入口
|
||||
|
||||
Reference in New Issue
Block a user