当前位置: 首页 > news >正文

openEuler 服务器Python自动化安装WEB服务器和文件上传服务(1)

一、系统准备

我们的服务器采用了 openEuler 22.03 (LTS-SP4) 的初始化服务器模式安装

二、安装步骤

(一)安装依赖库

  1. 在终端中运行以下命令确保系统安装了必要的依赖:
    sudo dnf install -y python3
    
    上述 Python 脚本中的依赖库会在运行 Python 脚本时自动安装(如果尚未安装的话)。其中 flask 库可以使用以下命令安装:
    pip3 install flask
    

(二)初始安装代码

以下代码用于执行系统的初始设置,包括更新系统、配置网络、安装 Nginx 和配置防火墙等操作。

vi   /var/www/html/initial_setup.py  

将以下代码,复制粘贴到文件中

import os
import subprocess
import redef run_command(command):"""执行命令并返回输出"""result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)if result.returncode!= 0:print(f"Error: {result.stderr}")exit(1)return result.stdoutdef update_system():"""更新系统到最新版本"""answer = input("Do you want to update the system? (yes/no): ")if answer.lower() == 'yes':print("Updating system...")run_command("dnf update -y")else:print("To update the system manually, run: dnf update -y")def configure_network():"""配置网络设置"""answer = input("Do you want to configure network settings? (yes/no): ")if answer.lower() == 'yes':# 获取所有网卡信息network_info = run_command("ip -o link show | awk -F': ' '{print $2}'")interfaces = [line.strip() for line in network_info.splitlines() if "lo" not in line]if len(interfaces) == 1:interface = interfaces[0]else:print("Multiple network interfaces detected. Please select one to set the IP address:")for i, iface in enumerate(interfaces, start=1):print(f"{i}. {iface}")choice = int(input("Enter the number of your choice: ")) - 1interface = interfaces[choice]# 设置 IP 地址print(f"Setting IP address for {interface} to 10.10.10.10/24...")run_command(f"nmcli con mod \"{interface}\" ipv4.addresses 10.10.10.10/24")run_command(f"nmcli con mod \"{interface}\" ipv4.gateway 10.10.10.2")run_command(f"nmcli con mod \"{interface}\" ipv4.dns 8.8.8.8")run_command(f"nmcli con up \"{interface}\"")else:print("To configure network settings manually:")print("1. Identify network interfaces using: ip -o link show | awk -F': ' '{print $2}'")print("2. Select an interface and set IP address, gateway and DNS using nmcli commands.")def install_nginx():"""安装 Nginx Web 服务器"""answer = input("Do you want to install Nginx? (yes/no): ")if answer.lower() == 'yes':print("Installing Nginx...")run_command("dnf install -y nginx")run_command("systemctl enable nginx")run_command("systemctl start nginx")else:print("To install Nginx manually:")print("1. Run: dnf install -y nginx")print("2. Enable and start Nginx using systemctl.")def configure_firewall():"""配置防火墙"""answer = input("Do you want to configure firewall? (yes/no): ")if answer.lower() == 'yes':print("Configuring firewall...")run_command("firewall-cmd --permanent --add-port=80/tcp")run_command("firewall-cmd --permanent --add-port=443/tcp")run_command("firewall-cmd --reload")else:print("To configure firewall manually:")print("1. Run: firewall-cmd --permanent --add-port=80/tcp")print("2. Run: firewall-cmd --permanent --add-port=443/tcp")print("3. Reload firewall using: firewall-cmd --reload")def setup_dns_and_hosts():"""设置 DNS 解析和修改 hosts 文件"""answer = input("Do you want to set up DNS and hosts file? (yes/no): ")if answer.lower() == 'yes':print("Setting up DNS and hosts file...")with open("/etc/hosts", "a") as f:f.write("\n10.10.10.10 www.cgqyw.com cgqyw.com\n")else:print("To set up DNS and hosts file manually:")print("Append the following line to /etc/hosts: 10.10.10.10 www.cgqyw.com cgqyw.com")def initial_setup():update_system()configure_network()install_nginx()configure_firewall()setup_dns_and_hosts()if __name__ == "__main__":initial_setup()

(三)安装文件上传服务

以下代码用于设置 Flask 文件上传服务,并创建默认的 Nginx 页面。

import os
from flask import Flask, render_template, request, send_from_directoryapp = Flask(__name__)
UPLOAD_FOLDER = '/var/www/html/uploads/'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER# 确保上传文件夹存在
if not os.path.exists(UPLOAD_FOLDER):os.makedirs(UPLOAD_FOLDER)@app.route('/')
def index():# 显示所有已上传的文件列表files = os.listdir(app.config['UPLOAD_FOLDER'])return render_template('index.html', files=files)@app.route('/upload', methods=['POST'])
def upload_file():if 'file' not in request.files:return "No file part"file = request.files['file']if file.filename == '':return "No selected file"if file:filename = file.filenamefile.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))return "File uploaded successfully"@app.route('/download/<filename>')
def download_file(filename):return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)def setup_file_upload_service():default_html = """<!DOCTYPE html><html><head><title>Welcome to CGQYW</title></head><body><h1>Welcome to CGQYW Server!</h1><p>This is a simple web server.</p></body></html>"""with open("/var/www/html/index.html", "w") as f:f.write(default_html)app.run(debug=True)if __name__ == "__main__":setup_file_upload_service()

(四)运行程序

  1. 先运行初始安装代码:(注:安装运行需要一些时间,与网速、系统配置相关,耐心等待)
    python3 /var/www/html/initial_setup.py
    
     
  2. 再运行文件上传服务代码:
  3. python3 /var/www/html/file_upload_service.py
    

未完待续

相关文章:

openEuler 服务器Python自动化安装WEB服务器和文件上传服务(1)

一、系统准备 我们的服务器采用了 openEuler 22.03 (LTS-SP4) 的初始化服务器模式安装 二、安装步骤 &#xff08;一&#xff09;安装依赖库 在终端中运行以下命令确保系统安装了必要的依赖&#xff1a; sudo dnf install -y python3上述 Python 脚本中的依赖库会在运行 Py…...

【Python游戏开发】石头剪刀布游戏(附完整Python完整代码)

石头剪刀布游戏:Pygame实现 结果图前言核心函数思考步骤实现原理和公式代码实现结论结果图 前言 石头剪刀布是一种经典的猜拳游戏,简单易玩但却蕴含着一定的策略性。本文将介绍如何使用Python和Pygame库开发一个简单的石头剪刀布游戏,并探讨其中的核心功能实现和思考过程。 …...

ctfshow(94,95)--PHP特性--strpos函数

建议先学习intval函数相关内容 Web94 源代码&#xff1a; include("flag.php"); highlight_file(__FILE__); if(isset($_GET[num])){$num $_GET[num];if($num"4476"){die("no no no!");}if(preg_match("/[a-z]/i", $num)){die(&qu…...

C++ --- 多线程的使用

目录 一.什么是线程&#xff1f; 线程的特点&#xff1a; 线程的组成&#xff1a; 二.什么是进程&#xff1f; 进程的特点&#xff1a; 进程的组成&#xff1a; 三.线程与进程的关系&#xff1a; 四.C的Thread方法的使用&#xff1a; 1.创建线程&#xff1a; 2.join(…...

百度笔试(10.29)

判断s字符串是否可以通过添加某些字符变成t字符串&#xff0c;s是否是t的子序列 s input() n int(input()) st set() res [] for idx in range(n):t input()if t in st or len(t) < len(s):continuest.add(t)i,j 0,0while i < len(s) and j < len(t):if s[i] …...

数据库版本更新后,如何迁移数据?

数据库版本更新后迁移数据是一个需要谨慎处理的过程。以下是一般步骤和最佳实践&#xff1a; 1. **备份数据**&#xff1a; 在进行任何迁移之前&#xff0c;确保对现有数据库进行完整备份。这可以是物理备份&#xff08;如数据库文件的拷贝&#xff09;或逻辑备份&#xff…...

Chrome与火狐的安全功能全面评估

在当今数字化时代&#xff0c;网络安全已成为用户最为关注的问题之一。作为两款广受欢迎的浏览器&#xff0c;Chrome和火狐&#xff08;Firefox&#xff09;都提供了多种安全功能来保护用户的在线隐私和数据安全。本文将全面评估这两款浏览器的安全功能&#xff0c;帮助用户更好…...

微服务设计模式 - 重试模式(Retry Pattern)

微服务设计模式 - 重试模式&#xff08;Retry Pattern&#xff09; 定义 重试模式&#xff08;Retry Pattern&#xff09;是一种微服务中的设计模式&#xff0c;用于在临时性失败&#xff08;如网络故障或暂时不可用的服务&#xff09;发生时&#xff0c;自动重新尝试请求&…...

DNS配置

1.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 2.配置从DNS服务器&#xff0c;对主dns服务器进行数据备份。 正反向解析 [rootlocalhost ~]# vim /etc/named.conf options {listen-on port 53 { 192.168.111.130; };directory "/var/named&quo…...

【Linux指令】---获取进程的PID

获取进程的PID getpid()函数...

在centos中安装cmake

安装依赖工具: sudo yum install -y epel-release sudo yum groupinstall -y "Development Tools" sudo yum install -y wget wget 下载 CMake 3.24 的压缩包: wget https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0-linux-x86_64.tar.gz …...

【补补漏洞吧 | 02】等保测评ZooKeeperElasticsearch未授权访问漏洞补漏方法

一、项目背景 客户新系统上线&#xff0c;因为行业网络安全要求&#xff0c;需要做等保测评&#xff0c; 通过第三方漏扫工具扫描系统&#xff0c;漏扫报告显示ZooKeeper和 Elasticsearch 服务各拥有一个漏洞&#xff0c;具体结果如下&#xff1a; 1、ZooKeeper 未授权访问【…...

Docker Compose一键部署Spring Boot + Vue项目

目录 前提条件 概述 Compose简介 Compose文件 Compose环境 Compose命令 帮助命令 关键命令 Compose部署项目 初始化环境 查看代码文件 sql数据准备 nginx配置文件准备 创建 compose.yaml 一键启动compose多个容器 浏览器访问虚拟机ip:80(可省略默认的80端口) …...

【maven】idea执行了maven的install命令给本地安装项目依赖包 安装后删除

目录 事件起因环境和工具操作过程解决办法1、找到对应的目录下的文件&#xff0c;手动去删除&#xff0c;比如我的依赖库的路径是D:\qc_code\apache-maven-3.8.2\repository 我只需要找到这个目录下对应的依赖包进行手动删除即可&#xff08;不推荐&#xff0c;强行删除文件夹文…...

Android中的Handle底层原理

先上结论: 一个小小的Handle,就能看出你对Android底层源码理解的深浅。 老规矩,如果你能看懂我上面画的这张草图,这篇文章你可以直接跳过! 开干! 1、先对Handle在Android系统中是如何发挥作用的做一个小结: 1)每一个线程,包括UI主线程,有一个ThreadLocalMap变量:…...

最简单方式SSH连接局域网中另一台电脑的WSL2

1、首先确认一下WSL2中的SSH服务是否开启&#xff1a; 先安装更新一下&#xff0c;再安装一下ssh服务模块&#xff0c;这里很多人都每安装过。 sudo apt update sudo apt upgrade sudo apt install openssh-server 2、配置SSH服务器&#xff1a; 打开配置文件&#xff0c;这…...

热点聚焦:AI在医疗保健领域的深度渗透与变革

内容概要 随着人工智能技术的不断进步&#xff0c;我们正在见证一个充满奇迹的转变&#xff0c;尤其是在医疗保健领域。这种转变不仅仅涉及到提高效率&#xff0c;更在于重新定义我们对疾病诊断和治疗方案的理解。通过智能算法&#xff0c;AI能够在早期识别潜在的健康问题&…...

模板方法模式:定义算法框架的设计模式

1. 引言 在软件开发中&#xff0c;算法的实现通常是可变的&#xff0c;但其基本步骤往往是相对固定的。模板方法模式&#xff08;Template Method Pattern&#xff09;正是为了解决这一问题而设计的&#xff0c;它通过定义一个操作中的算法框架&#xff0c;将一些步骤的实现延…...

[Redis] Redis事务

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

编译原理第一次实验报告

源代码及附件&#xff1a;编译原理实验一源程序及附件资源-CSDN文库实验题目 实验要求 实验设计 前两部分指出了实验的宏观把控&#xff0c;为了具体实施实验&#xff0c;我们需要预先为实验做出如下设计&#xff1a; 本次实验我选取了C语言的一个子集进行设计词法分析器&…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

6.计算机网络核心知识点精要手册

计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法&#xff1a;数据与控制信息的结构或格式&#xff0c;如同语言中的语法规则语义&#xff1a;控制信息的具体含义和响应方式&#xff0c;规定通信双方"说什么"同步&#xff1a;事件执行的顺序与时序…...