修改了下载站点配置的按钮,修改了增加静态文件配置的按钮
This commit is contained in:
Binary file not shown.
42
app.log
42
app.log
@@ -4861,3 +4861,45 @@ sudo systemctl restart nginx
|
||||
2025-09-07 10:08:06.510 | INFO | __main__:<module>:189 - 启动应用程序
|
||||
2025-09-07 10:08:06.575 | INFO | __main__:__init__:17 - 初始化主窗口
|
||||
2025-09-07 10:08:06.630 | INFO | __main__:__init__:32 - 设置状态栏显示当前目录: C:\Users\xiaji\Documents\个人文件夹\夏骥\桌面部署
|
||||
2025-09-07 10:08:06.631 | INFO | server_connection_tab:__init__:14 - 初始化服务器连接标签页
|
||||
2025-09-07 10:08:06.648 | INFO | server_connection_tab:init_ui:93 - 服务器连接标签页UI初始化完成
|
||||
2025-09-07 10:08:06.648 | INFO | server_connection_tab:load_config:96 - 加载配置文件
|
||||
2025-09-07 10:08:06.648 | INFO | server_connection_tab:load_config:103 - 成功加载配置文件: c:\Users\xiaji\Documents\个人文件夹\夏骥\桌面部署\config.json
|
||||
2025-09-07 10:08:06.653 | INFO | server_connection_tab:on_alias_changed:122 - 选择别名: 测试机
|
||||
2025-09-07 10:08:06.658 | INFO | remote_commands_tab:__init__:151 - 初始化远程命令标签页
|
||||
2025-09-07 10:08:06.664 | INFO | remote_commands_tab:init_ui:290 - 远程命令标签页UI初始化完成
|
||||
2025-09-07 10:08:06.667 | INFO | __main__:__init__:57 - 主窗口初始化完成
|
||||
2025-09-07 10:08:09.700 | INFO | server_connection_tab:connect_to_server:188 - 尝试连接服务器
|
||||
2025-09-07 10:08:30.743 | ERROR | server_connection_tab:connect_to_server:227 - 连接服务器失败: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
|
||||
2025-09-07 10:10:05.096 | INFO | server_connection_tab:connect_to_server:188 - 尝试连接服务器
|
||||
2025-09-07 10:10:05.735 | INFO | server_connection_tab:connect_to_server:207 - 成功连接到服务器: 192.168.3.157
|
||||
2025-09-07 10:10:07.953 | INFO | __main__:on_tab_changed:60 - 标签页切换到: 2
|
||||
2025-09-07 10:10:07.954 | INFO | django_tab:set_ssh_client:142 - Django标签页已设置SSH客户端
|
||||
2025-09-07 10:10:07.954 | INFO | django_tab:set_username:147 - Django标签页已设置用户名: xiaji
|
||||
2025-09-07 10:10:07.954 | INFO | __main__:on_tab_changed:123 - 状态栏更新为Django项目: statuspage, 目录: /home/xiaji
|
||||
2025-09-07 10:10:13.399 | INFO | django_threads:run:86 - 执行Django命令: find /home/xiaji -name "manage.py" 2>/dev/null | head -5
|
||||
2025-09-07 10:10:13.414 | INFO | django_threads:run:198 - 命令输出: /home/xiaji/webstatus/manage.py
|
||||
2025-09-07 10:10:13.414 | INFO | django_tab:process_manage_py_result:288 - 找到manage.py文件: /home/xiaji/webstatus/manage.py
|
||||
2025-09-07 10:10:13.414 | INFO | django_threads:run:211 - 命令执行成功: find /home/xiaji -name "manage.py" 2>/dev/null | head -5
|
||||
2025-09-07 10:10:13.418 | INFO | django_threads:run:86 - 执行Django命令: find /home/xiaji -name "settings.py" 2>/dev/null | head -5
|
||||
2025-09-07 10:10:13.467 | INFO | django_threads:run:198 - 命令输出: /home/xiaji/webstatus/statuspage/settings.py
|
||||
2025-09-07 10:10:13.467 | INFO | django_tab:process_settings_py_result:315 - 找到settings.py文件: /home/xiaji/webstatus/statuspage/settings.py
|
||||
2025-09-07 10:10:13.467 | INFO | django_threads:run:211 - 命令执行成功: find /home/xiaji -name "settings.py" 2>/dev/null | head -5
|
||||
2025-09-07 10:10:13.468 | INFO | django_tab:on_command_finished:155 - Django命令执行完成
|
||||
2025-09-07 10:10:14.808 | INFO | django_tab:download_settings:340 - settings.py已加载到编辑器: /home/xiaji/webstatus/statuspage/settings.py
|
||||
2025-09-07 10:10:27.380 | INFO | django_threads:run:86 - 执行Django命令: cd /home/xiaji/webstatus && python3 manage.py collectstatic --noinput
|
||||
2025-09-07 10:10:27.678 | INFO | django_threads:run:198 - 命令输出:
|
||||
2025-09-07 10:10:27.679 | INFO | django_threads:run:198 - 命令输出: 119 static files copied to '/home/xiaji/webstatus/static'.
|
||||
2025-09-07 10:10:27.730 | INFO | django_threads:run:211 - 命令执行成功: cd /home/xiaji/webstatus && python3 manage.py collectstatic --noinput
|
||||
2025-09-07 10:10:27.732 | INFO | django_tab:on_command_finished:155 - Django命令执行完成
|
||||
2025-09-07 12:18:46.163 | INFO | __main__:<module>:189 - 启动应用程序
|
||||
2025-09-07 12:18:46.183 | INFO | __main__:__init__:17 - 初始化主窗口
|
||||
2025-09-07 12:18:46.187 | INFO | __main__:__init__:32 - 设置状态栏显示当前目录: C:\Users\xiaji\Documents\个人文件夹\夏骥\桌面部署
|
||||
2025-09-07 12:18:46.188 | INFO | server_connection_tab:__init__:14 - 初始化服务器连接标签页
|
||||
2025-09-07 12:18:46.189 | INFO | server_connection_tab:init_ui:93 - 服务器连接标签页UI初始化完成
|
||||
2025-09-07 12:18:46.189 | INFO | server_connection_tab:load_config:96 - 加载配置文件
|
||||
2025-09-07 12:18:46.190 | INFO | server_connection_tab:load_config:103 - 成功加载配置文件: c:\Users\xiaji\Documents\个人文件夹\夏骥\桌面部署\config.json
|
||||
2025-09-07 12:18:46.190 | INFO | server_connection_tab:on_alias_changed:122 - 选择别名: 测试机
|
||||
2025-09-07 12:18:46.191 | INFO | remote_commands_tab:__init__:151 - 初始化远程命令标签页
|
||||
2025-09-07 12:18:46.192 | INFO | remote_commands_tab:init_ui:290 - 远程命令标签页UI初始化完成
|
||||
2025-09-07 12:18:46.196 | INFO | __main__:__init__:57 - 主窗口初始化完成
|
||||
|
||||
116
nginx_tab.py
116
nginx_tab.py
@@ -258,7 +258,7 @@ class NginxSiteThread(QThread):
|
||||
self.site_config = site_config
|
||||
self.site_name = site_name
|
||||
self.password = password
|
||||
self.operation = operation # "create" 或 "enable"
|
||||
self.operation = operation # "create" 或 "enable" 或 "download"
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
@@ -326,6 +326,22 @@ class NginxSiteThread(QThread):
|
||||
self.result_ready.emit(False, f"站点配置启用失败: {error}")
|
||||
logger.error(f"站点配置启用失败: {error}")
|
||||
|
||||
elif self.operation == "download":
|
||||
# 下载站点配置文件
|
||||
site_path = f"/etc/nginx/sites-enabled/{self.site_name}"
|
||||
download_cmd = f"bash -c 'echo \"{self.password}\" | sudo -S cat {site_path}'"
|
||||
stdin, stdout, stderr = self.ssh_client.exec_command(download_cmd)
|
||||
exit_status = stdout.channel.recv_exit_status()
|
||||
|
||||
if exit_status == 0:
|
||||
config_content = stdout.read().decode()
|
||||
self.result_ready.emit(True, config_content)
|
||||
logger.info(f"站点配置文件下载成功: {site_path}")
|
||||
else:
|
||||
error = stderr.read().decode()
|
||||
self.result_ready.emit(False, f"站点配置文件下载失败: {error}")
|
||||
logger.error(f"站点配置文件下载失败: {error}")
|
||||
|
||||
except Exception as e:
|
||||
error_msg = str(e)
|
||||
self.result_ready.emit(False, error_msg)
|
||||
@@ -400,6 +416,11 @@ class NginxTab(QWidget):
|
||||
self.enable_site_config_btn.clicked.connect(self.enable_site_config)
|
||||
site_config_btn_layout.addWidget(self.enable_site_config_btn)
|
||||
|
||||
# 下载站点配置按钮
|
||||
self.download_site_config_btn = QPushButton("下载站点配置")
|
||||
self.download_site_config_btn.clicked.connect(self.download_site_config)
|
||||
site_config_btn_layout.addWidget(self.download_site_config_btn)
|
||||
|
||||
site_config_layout.addLayout(site_config_btn_layout)
|
||||
layout.addLayout(site_config_layout)
|
||||
|
||||
@@ -783,6 +804,99 @@ http {
|
||||
logger.error(f"Nginx站点配置启用后语法检查失败: {message}")
|
||||
QMessageBox.warning(self, "错误", f"Nginx配置文件语法检查失败: {message}")
|
||||
|
||||
def download_site_config(self):
|
||||
"""下载站点配置文件"""
|
||||
if not self.ssh_client:
|
||||
self.append_output("错误: 未连接到服务器")
|
||||
return
|
||||
|
||||
if not self.project_name:
|
||||
self.append_output("错误: 未设置项目名")
|
||||
return
|
||||
|
||||
# 请求用户输入sudo密码
|
||||
dialog = PasswordDialog(self)
|
||||
if dialog.exec_() == QDialog.Accepted:
|
||||
password = dialog.get_password()
|
||||
self.append_output(f"正在下载站点配置文件: {self.project_name}...")
|
||||
|
||||
# 创建并启动站点配置下载线程
|
||||
self.site_thread = NginxSiteThread(self.ssh_client, "", self.project_name, password, "download")
|
||||
self.site_thread.result_ready.connect(self.on_download_site_config_result)
|
||||
self.site_thread.start()
|
||||
else:
|
||||
self.append_output("用户取消了密码输入")
|
||||
|
||||
def on_download_site_config_result(self, success, message):
|
||||
"""处理下载站点配置结果"""
|
||||
if success:
|
||||
# 将下载的配置内容显示在站点配置编辑器中
|
||||
self.site_config_editor.setPlainText(message)
|
||||
self.append_output("站点配置文件下载成功")
|
||||
logger.info("Nginx站点配置文件下载成功")
|
||||
|
||||
# 尝试添加静态文件映射配置
|
||||
self.add_static_mappings()
|
||||
else:
|
||||
self.append_output(f"下载失败: {message}")
|
||||
logger.error(f"Nginx站点配置文件下载失败: {message}")
|
||||
QMessageBox.warning(self, "错误", f"Nginx站点配置文件下载失败: {message}")
|
||||
|
||||
def add_static_mappings(self):
|
||||
"""添加静态文件映射配置"""
|
||||
# 读取config.json文件获取项目信息
|
||||
try:
|
||||
with open('config.json', 'r', encoding='utf-8') as f:
|
||||
config = json.load(f)
|
||||
|
||||
# 获取第一个服务器配置(假设只有一个服务器配置)
|
||||
server_config = next(iter(config.values()))
|
||||
username = server_config.get('username', '')
|
||||
project_name = server_config.get('project', '')
|
||||
remote_dir = server_config.get('remote_dir', '')
|
||||
|
||||
# 构建静态文件路径
|
||||
static_path = f"{remote_dir}/{project_name}/static"
|
||||
media_path = f"{remote_dir}/{project_name}/media"
|
||||
|
||||
# 获取当前配置内容
|
||||
current_config = self.site_config_editor.toPlainText()
|
||||
|
||||
# 检查是否已经包含静态文件映射
|
||||
if "location /static/" not in current_config:
|
||||
# 添加静态文件映射配置
|
||||
static_mapping = f"\n # 静态文件映射\n"
|
||||
static_mapping += f" location /static/ {{\n"
|
||||
static_mapping += f" alias {static_path}/;\n"
|
||||
static_mapping += f" expires 30d;\n"
|
||||
static_mapping += f" }}\n"
|
||||
|
||||
# 添加媒体文件映射配置
|
||||
static_mapping += f"\n # 媒体文件映射\n"
|
||||
static_mapping += f" location /media/ {{\n"
|
||||
static_mapping += f" alias {media_path}/;\n"
|
||||
static_mapping += f" expires 30d;\n"
|
||||
static_mapping += f" }}\n"
|
||||
|
||||
# 在server块的末尾添加静态文件映射(在最后一个}之前)
|
||||
last_brace_pos = current_config.rfind('}')
|
||||
if last_brace_pos != -1:
|
||||
new_config = current_config[:last_brace_pos] + static_mapping + current_config[last_brace_pos:]
|
||||
self.site_config_editor.setPlainText(new_config)
|
||||
self.append_output("已添加静态文件映射配置")
|
||||
logger.info("已添加静态文件映射配置")
|
||||
else:
|
||||
self.append_output("无法添加静态文件映射配置:未找到server块的结束位置")
|
||||
logger.warning("无法添加静态文件映射配置:未找到server块的结束位置")
|
||||
else:
|
||||
self.append_output("配置文件已包含静态文件映射")
|
||||
logger.info("配置文件已包含静态文件映射")
|
||||
|
||||
except Exception as e:
|
||||
error_msg = str(e)
|
||||
self.append_output(f"添加静态文件映射失败: {error_msg}")
|
||||
logger.error(f"添加静态文件映射失败: {error_msg}")
|
||||
|
||||
def restart_nginx(self):
|
||||
"""重启Nginx"""
|
||||
if not self.ssh_client:
|
||||
|
||||
Reference in New Issue
Block a user