import os import subprocess # 1. 安装 frpc def install_frpc(): print("正在安装 frpc...") # 本地解压路径 local_path = "/root/modelscope" frpc_tar_gz = os.path.join(local_path, "frp_0.61.0_linux_amd64.tar.gz") try: # 确保文件存在 if not os.path.exists(frpc_tar_gz): print(f"错误:文件 {frpc_tar_gz} 不存在。") exit(1) # 解压下载的 tar.gz 文件 subprocess.run(["tar", "-xvzf", frpc_tar_gz, "-C", local_path], check=True) print("frpc 解压完成。") # 移除 tar.gz 文件 os.remove(frpc_tar_gz) print("已删除 tar.gz 文件。") # 移动 frpc 到 /root 目录 frpc_extracted_dir = os.path.join(local_path, "frp_0.61.0_linux_amd64") subprocess.run(["mv", os.path.join(frpc_extracted_dir, "frpc"), "/root/"], check=True) print("frpc 已成功移动到 /root 目录。") except subprocess.CalledProcessError as e: print(f"安装 frpc 失败: {e}") exit(1) # 2. 创建 frpc.toml 配置文件 def create_frpc_toml(): toml_path = "/root/frpc.toml" toml_content = """ [common] server_addr = 182.43.67.222 server_port = 7000 [jl] type = tcp local_ip = 127.0.0.1 local_port = 8888 remote_port = 8888 [comfyui] type = tcp local_ip = 127.0.0.1 local_port = 8188 remote_port = 8188 """ # 写入 frpc.toml 文件 with open(toml_path, 'w') as file: file.write(toml_content) print(f"frpc.toml 配置文件已创建:{toml_path}") # 3. 创建启动脚本 def create_frp_service_script(): script_path = "/root/frp_service.sh" script_content = '''#!/bin/bash # 设置 frp 的路径和配置文件路径 FRP_PATH="/root/frpc" FRP_CONFIG="/root/frpc.toml" # 使用新的 TOML 配置文件 # 启动 frp 并保持运行 while true; do # 启动 frp $FRP_PATH -c $FRP_CONFIG # 如果 frp 崩溃或关闭,则重新启动 echo "frp 连接已断开,正在重新启动..." sleep 1 # 等待 1 秒再重启 done ''' # 写入脚本文件 with open(script_path, 'w') as file: file.write(script_content) # 确保脚本具有执行权限 os.chmod(script_path, 0o755) print(f"脚本已创建并设置为可执行:{script_path}") # 4. 创建 systemd 服务文件 def create_systemd_service(): service_path = "/etc/systemd/system/frp.service" service_content = '''[Unit] Description=frp connection service After=network.target [Service] ExecStart=/root/frp_service.sh Restart=always User=root WorkingDirectory=/root StandardOutput=journal StandardError=journal SyslogIdentifier=frp [Install] WantedBy=multi-user.target ''' # 写入服务文件 with open(service_path, 'w') as file: file.write(service_content) print(f"systemd 服务文件已创建:{service_path}") # 5. 启动并启用服务 def enable_and_start_service(): try: subprocess.run(["sudo", "systemctl", "daemon-reload"], check=True) subprocess.run(["sudo", "systemctl", "enable", "frp.service"], check=True) subprocess.run(["sudo", "systemctl", "start", "frp.service"], check=True) print("frp 服务已启用并启动。") except subprocess.CalledProcessError as e: print(f"服务启动失败: {e}") # 主函数 def main(): install_frpc() # 安装 frpc create_frpc_toml() # 创建 frpc.toml 配置文件 create_frp_service_script() # 创建启动脚本 create_systemd_service() # 创建 systemd 服务 enable_and_start_service() # 启动并启用服务 if __name__ == "__main__": main()