#!/bin/bash# ============================================================================# IDCU PANEL - 系统设置模块# 包含:目录创建、用户创建、配置部署、服务配置、密码生成# ============================================================================# 加载公共模块SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"source "${SCRIPT_DIR}/scripts/common.sh"# ============================================================================# 创建数据目录# ============================================================================create_directories() {log_info "正在创建面板数据目录..."# 主数据目录local subdirs=(data databases nginx ftp websites logs ssl apps backups scripts frontend)for dir in "${subdirs[@]}"; domkdir -p "${PANEL_DIR}/${dir}" 2>/dev/null || {log_warn "创建目录 ${PANEL_DIR}/${dir} 失败,尝试继续..."}log_info "已创建目录:${PANEL_DIR}/${dir}"done# 创建前端 dist 目录mkdir -p "${PANEL_DIR}/frontend/dist" 2>/dev/null || {log_warn "创建目录 ${PANEL_DIR}/frontend/dist 失败,尝试继续..."}log_info "已创建目录:${PANEL_DIR}/frontend/dist"# Nginx 配置子目录local nginx_subdirs=(conf.d html logs ssl)for dir in "${nginx_subdirs[@]}"; domkdir -p "${PANEL_DIR}/nginx/${dir}" 2>/dev/null || {log_warn "创建目录 ${PANEL_DIR}/nginx/${dir} 失败,尝试继续..."}log_info "已创建目录:${PANEL_DIR}/nginx/${dir}"done# FTP 数据子目录local ftp_subdirs=(users data)for dir in "${ftp_subdirs[@]}"; domkdir -p "${PANEL_DIR}/ftp/${dir}" 2>/dev/null || {log_warn "创建目录 ${PANEL_DIR}/ftp/${dir} 失败,尝试继续..."}log_info "已创建目录:${PANEL_DIR}/ftp/${dir}"done# 设置目录权限chown -R "${PANEL_USER}:${PANEL_USER}" "${PANEL_DIR}" 2>/dev/null || log_warn "设置目录权限失败,尝试继续..."chmod -R 755 "${PANEL_DIR}" 2>/dev/null || log_warn "设置目录权限失败,尝试继续..."chmod 700 "${PANEL_DIR}/data" "${PANEL_DIR}/ssl" "${PANEL_DIR}/databases" 2>/dev/null || log_warn "设置目录权限失败,尝试继续..."log_info "数据目录创建完成。"}# ============================================================================# 清理旧版本# ============================================================================cleanup_old_version() {# 检测是否已安装旧版本if [[ ! -f "${PANEL_BIN}" ]] && [[ ! -f "/etc/systemd/system/${SERVICE_NAME}.service" ]] && [[ ! -f "/etc/init.d/${SERVICE_NAME}" ]]; thenlog_info "未检测到已安装的版本,执行全新安装。"returnfilog_warn "=========================================="log_warn " 检测到已安装的 IDCU Panel,将执行清理后重新安装"log_warn " 数据目录 ${PANEL_DIR}/data/ 将被保留"log_warn "=========================================="# 1. 停止旧服务log_info "停止旧服务..."systemctl stop "${SERVICE_NAME}" 2>/dev/null || truesystemctl disable "${SERVICE_NAME}" 2>/dev/null || truerc-service "${SERVICE_NAME}" stop 2>/dev/null || true # Alpine# 2. 备份旧配置文件if [[ -f "${CONFIG_FILE}" ]]; thenlog_info "备份旧配置文件到 ${CONFIG_FILE}.bak"\cp -f "${CONFIG_FILE}" "${CONFIG_FILE}.bak"fi# 3. 清理旧文件(保留数据目录)log_info "清理旧版本文件..."rm -f "${PANEL_BIN}"rm -rf "${PANEL_DIR}/frontend/dist"rm -rf "${PANEL_DIR}/logs"rm -f "${PANEL_DIR}/idcu-panel.db" # 根目录下的旧数据库(如果存在)# 4. 清理旧 systemd 服务文件rm -f "/etc/systemd/system/${SERVICE_NAME}.service"systemctl daemon-reload 2>/dev/null || true# 5. 清理旧 OpenRC 服务文件(Alpine)rm -f "/etc/init.d/${SERVICE_NAME}"log_info "旧版本清理完成,数据已保留。"}# ============================================================================# 创建系统用户# ============================================================================create_user() {log_info "正在创建系统用户..."if id "${PANEL_USER}" &>/dev/null; thenlog_info "用户 ${PANEL_USER} 已存在。"elseuseradd -r -s /sbin/nologin -d "${PANEL_DIR}" "${PANEL_USER}" || {log_error "创建用户 ${PANEL_USER} 失败。"exit 1}log_info "用户 ${PANEL_USER} 创建成功。"fi}# ============================================================================# 部署配置文件# ============================================================================deploy_config() {log_info "正在部署配置文件..."# 检查源码目录中是否有 config.yamlif [[ -f "${SCRIPT_DIR}/config/config.yaml" ]]; thencp "${SCRIPT_DIR}/config/config.yaml" "${CONFIG_FILE}" 2>/dev/null || {log_error "复制配置文件失败!请确保 ${SCRIPT_DIR}/config/config.yaml 存在且可读取。"exit 1}log_info "从项目 config/ 目录复制配置文件成功。"elselog_error "错误:项目 config/ 目录 ${SCRIPT_DIR}/config/config.yaml 不存在!"log_error "请确保项目中有 config.yaml 配置文件后再继续安装。"exit 1fi# 生成随机 JWT 密钥if [[ -f "${CONFIG_FILE}" ]]; thenlocal jwt_secretjwt_secret=$(openssl rand -hex 32 2>/dev/null || head -c 32 /dev/urandom | xxd -p -c 32 2>/dev/null || echo "default-secret-key-change-me")sed -i "s/change-me-in-production/${jwt_secret}/" "${CONFIG_FILE}" 2>/dev/null || truechown "${PANEL_USER}:${PANEL_USER}" "${CONFIG_FILE}" 2>/dev/null || log_warn "设置配置文件权限失败,尝试继续..."filog_info "配置文件已部署到 ${CONFIG_FILE}"}# ============================================================================# 配置并启动服务# ============================================================================configure_service() {log_info "正在配置并启动面板服务..."# 根据系统类型配置服务if [[ "${PKG_MANAGER}" == "apk" ]]; then_configure_openrc_serviceelse_configure_systemd_servicefi}# ---------- Systemd 服务 (默认) ----------_configure_systemd_service() {log_info "正在配置 Systemd 服务..."local service_file="/etc/systemd/system/${SERVICE_NAME}.service"# 复制服务文件if [[ -f "${SCRIPT_DIR}/scripts/idcu-panel.service" ]]; thencp "${SCRIPT_DIR}/scripts/idcu-panel.service" "${service_file}"elselog_error "服务文件不存在:${SCRIPT_DIR}/scripts/idcu-panel.service"return 1fi# 确保工作目录存在chown -R "${PANEL_USER}:${PANEL_USER}" "${PANEL_DIR}" 2>/dev/null || truechmod -R 755 "${PANEL_DIR}" 2>/dev/null || true# 重新加载 systemdsystemctl daemon-reload# 启用并启动服务systemctl enable "${SERVICE_NAME}" 2>/dev/null || log_warn "启用服务失败,尝试仅启动服务..."if systemctl start "${SERVICE_NAME}"; thenlog_info "面板服务已启动!"log_info "等待服务启动完成..."sleep 5# 检查服务状态if systemctl is-active --quiet "${SERVICE_NAME}"; thenlog_info "面板服务运行正常!"elselog_warn "面板服务状态异常,请检查日志:journalctl -u ${SERVICE_NAME} -n 50"fielselog_error "启动面板服务失败,请检查日志:journalctl -u ${SERVICE_NAME} -n 50"return 1filog_info "面板服务已配置为开机自启(Systemd)。"}# ---------- Alpine Linux OpenRC 服务 ----------_configure_openrc_service() {log_info "正在配置 OpenRC 服务(Alpine Linux)..."local rc_file="/etc/init.d/idcu-panel"cat > "${rc_file}" << EOF#!/sbin/openrc-runname="idcu-panel"description="IDCU PANEL - Server Management Panel"command="${PANEL_BIN}"command_args="-c ${CONFIG_FILE}"command_user="${PANEL_USER}:${PANEL_USER}"pidfile="${PANEL_DIR}/idcu-panel.pid"output_log="${PANEL_DIR}/logs/panel.log"error_log="${PANEL_DIR}/logs/panel-error.log"depend() {need netafter firewall}EOFchmod +x "${rc_file}"rc-update add idcu-panel default 2>/dev/null || {log_warn "启用 OpenRC 服务失败。"}rc-service idcu-panel start 2>/dev/null || {log_error "启动面板服务失败。请检查日志:${PANEL_DIR}/logs/panel-error.log"exit 1}log_info "面板服务已启动并设置为开机自启(OpenRC)。"}# ============================================================================# 生成管理员密码# ============================================================================generate_admin_password() {log_info "正在设置管理员密码..."# 使用自定义密码(如果提供)if [[ -n "$CUSTOM_PASSWORD" ]]; thenADMIN_PASSWORD="$CUSTOM_PASSWORD"log_info "使用用户指定的密码。"else# 生成随机密码(16位)ADMIN_PASSWORD=$(openssl rand -base64 16 2>/dev/null | tr -d '=/+' | head -c 16)if [[ -z "$ADMIN_PASSWORD" ]]; thenADMIN_PASSWORD=$(head -c 16 /dev/urandom | base64 | tr -d '=/+' | head -c 16)filog_info "生成随机密码。"filog_info "管理员密码已设置。"}# ============================================================================# 打印安装结果# ============================================================================print_summary() {echo ""echo "============================================================"echo -e "${GREEN} IDCU PANEL 安装完成!${NC}"echo "============================================================"echo ""echo -e " 面板地址:${BLUE}http://$(hostname -I 2>/dev/null | awk '{print 1ドル}'):9000${NC}"echo -e " 管理端口:${BLUE}9000 (面板)${NC}"echo -e " 管理员用户:${BLUE}admin${NC}"echo -e " 管理员密码:${RED}${ADMIN_PASSWORD}${NC}"echo ""echo -e " ${YELLOW}重要提示:请登录后立即修改默认密码!${NC}"echo ""echo " 配置文件:${CONFIG_FILE}"echo " 数据目录:${PANEL_DIR}"echo " 系统用户:${PANEL_USER}"echo ""if [[ "${PKG_MANAGER}" == "apk" ]]; thenecho " 服务管理:rc-service idcu-panel {start|stop|restart|status}"echo " 日志查看:tail -f ${PANEL_DIR}/logs/panel.log"elseecho " 日志查看:journalctl -u idcu-panel -f"echo " 服务管理:systemctl {start|stop|restart|status} idcu-panel"fiecho ""echo " 架构说明:"echo " - 宿主机仅运行面板服务 + Podman"echo " - 防火墙:面板内置 nftables 引擎"echo " - Nginx、FTP、数据库等均通过容器化管理"echo " - 日志收集栈(Loki + Promtail + Grafana)可选部署"echo ""echo " 卸载面板:bash ${SCRIPT_DIR}/scripts/uninstall.sh"echo " 重置密码:bash ${SCRIPT_DIR}/scripts/reset_password.sh"echo "============================================================"echo ""}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。