申请阿里云服务器并搭建公网可支持数据上传下载的HTTP服务器

news2024/11/25 18:33:59

1. 前言

        拥有一台自己的云服务器可以做很多事情。阿里云服务器毫无疑问是国内最好的。

        阿里云服务器可以用于各种互联网应用的搭建和运行,提供稳定、高性能的服务。

        阿里云服务器的用途,包括但不限于以下几个方面:

  1. 网站托管:可以将网站的文件、数据库等部署在阿里云服务器上,提供稳定的网络环境和高性能的服务器资源,确保网站的正常运行。

  2. 应用部署:可以将各种应用程序、服务部署在阿里云服务器上,如电商系统、ERP系统、CRM系统等,提供稳定可靠的运行环境。

  3. 数据存储:可以将数据存储在阿里云服务器上,通过云存储服务进行备份和管理,确保数据的安全性和可靠性。

  4. 数据库服务:可以使用阿里云提供的数据库服务,如RDS(关系型数据库服务)、MongoDB、Redis等,提供高性能、可扩展的数据库服务。

  5. 虚拟化:可以使用阿里云提供的虚拟机服务,将应用程序运行在虚拟机上,实现资源的隔离和灵活的部署。

  6. 云存储:可以使用阿里云提供的云存储服务,如OSS(对象存储服务),将文件存储在云端,提供高可用、高可靠的存储服务。

  7. 安全防护:可以使用阿里云提供的安全防护服务,如DDoS防护、Web应用防火墙(WAF)等,保护服务器和应用程序免受网络攻击。

2. 申请阿里云服务器

2.1 登录注册

打开阿里云官网,在右上方点击"登录/注册",使用支付宝扫码登录

首页选择云服务器EC2, 打开后看到有“产品试用服务”,在个人使用版点击立即使用。每个新人用支付宝可以享受3个月的免费试用。

在创建实例页面上,根据需求选择实例配置,包括实例规格、操作系统、网络类型、存储等。

 设置安全组。一般设置“入方向”。如果你想SSH登录,那么需要开放22端口。如果你想建立HTTP服务器,那么80 或者443端口需要开放。

点击远程连接。阿里云提供了三种远程连接的方式。

设置“通过Workbench远程登录的密码”,但是此时无法直接登录。

首次登录必须选择VNC远程控制。VNC远程控制适用于实例处于启动中,或者实例处于运行中但操作系统尚未运行起来的场景下登陆实例。

按照提示设置VNC远程控制的密码,并登录成功。登录后检查网络配置,看到了eth0网卡里有本台实例的私有IP地址。

[root@iZbp1h36cszlkbxbf5gqeeZ ~]# ifconfig
bond0: flags=5123<UP,BROADCAST,MASTER,MULTICAST>  mtu 1500
        ether f2:ac:4a:db:46:4e  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:cc:74:16:f8  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.25.37.106  netmask 255.255.240.0  broadcast 172.25.47.255
        inet6 fe80::216:3eff:fe1e:ab8c  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:1e:ab:8c  txqueuelen 1000  (Ethernet)
        RX packets 3870  bytes 3300682 (3.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2692  bytes 411305 (401.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

修改/etc/ssh/sshd_config文件的配置

PermitRootLogin yes
PassworkAuthentication yes

重启SSH服务,使其生效

systemctl restart sshd

现在可以在本地计算机上通过SSH使用“公网IP + Workbench远程登录设置的密码”登录了。

3.用Flask搭建HTTP服务器

在centos上新建一个目录,使用python-Flask框架编写一个http服务器。实现最简单的上传下载功能。

3.1 目录结构

新建httpserver目录用于搭建本次的HTTP服务器。

在httpserver目录下创建templates目录,用于放置html文件。

新建app.py文件,用于编写HTTP服务器执行逻辑。

在httpserver目录下创建upload目录,用于放置上传下载的文件

[root@iZbp1h36cszlkbxbf5g**** httpserver]# ls -ltr
total 4
drwxr-xr-x 2 root root   24 Jul 17 22:14 templates
-rw-r--r-- 1 root root 1455 Jul 17 22:16 app.py
drwxr-xr-x 2 root root   24 Jul 17 22:17 upload
[root@iZbp1h36cszlkbxbf5g**** httpserver]# ls upload
upload.txt
[root@iZbp1h36cszlkbxbf5g**** httpserver]# ls templates
index.html

3.2 代码编写

编写 app.py(chatGPT给出来的代码稍微改了下)

from flask import Flask, render_template, request, send_from_directory
import os

app = Flask(__name__)
UPLOAD_FOLDER = 'upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER


@app.route('/', methods=['GET'])
def index():
    files = get_file_list()
    return render_template('index.html', files=files)


@app.route('/upload', methods=['POST'])
def upload_file():
    file = request.files['file']
    filename = file.filename
    save_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
    file.save(save_path)
    return 'File uploaded successfully.'


@app.route('/upload_data', defaults={'path': ''}, methods=['GET', 'POST'])
# @app.route('/<path:path>')
def upload_data(path):
    if request.method == 'POST':
       print('The upload data is: %s' % request.get_data())
    return 'Received!'


@app.route('/download/<path:filename>', methods=['GET'])
def download_file(filename):
    folder_path = app.config['UPLOAD_FOLDER']
    return send_from_directory(folder_path, filename, as_attachment=True)


def get_file_list():
    folder_path = app.config['UPLOAD_FOLDER']
    files = []
    for filename in os.listdir(folder_path):
        if os.path.isfile(os.path.join(folder_path, filename)):
            files.append(filename)
    return files


if __name__ == '__main__':
    if not os.path.exists(app.config['UPLOAD_FOLDER']):
        os.makedirs(app.config['UPLOAD_FOLDER'])
    app.run(host='0.0.0.0',port='80')

编写index.html

<!DOCTYPE html>
<html>
<head>
    <title>File Server</title>
    <style>
        table {
            border-collapse: collapse;
            width: 100%;
        }

        th, td {
            text-align: left;
            padding: 8px;
        }

        tr:nth-child(even) {
            background-color: #f2f2f2;
        }
    </style>
</head>
<body>
    <h1>File Server</h1>
    <h2>Upload File</h2>
    <form action="/upload" method="POST" enctype="multipart/form-data">
        <input type="file" name="file" required><br><br>
        <input type="submit" value="Upload">
    </form>
    <h2>Download Files</h2>
    <table>
        <tr>
            <th>Filename</th>
            <th>Actions</th>
        </tr>
        {% for file in files %}
        <tr>
            <td>{{ file }}</td>
            <td><a href="/download/{{ file }}">Download</a></td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

3.3 测试记录

运行命令

python3 app.py
或者
nohup python3 app.py > output.txt &

初次执行有报错,需要安装Flask库

 pip install Flask==2.0.3

3.3.1 测试本地向http服务器发送json格式的数据

在本地计算机用curl尝试上传json格式的data

C:\Users\lenovo>curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1","key2":"value2"}' http://121.43.231.**:80/upload_data
Received!

阿里云上的http服务器收到消息,返回

"Received!"。

[root@iZbp1h36cszlkbxbf5g**** httpserver]# python3 app.py
 * Serving Flask app 'app' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://172.25.37.106:80/ (Press CTRL+C to quit)



The upload data is: b"'{key1:value1,key2:value2}'"
117.62.169.192 - - [17/Jul/2023 22:28:57] "POST /upload_data HTTP/1.1" 200 -

3.3.2 测试本地向http服务器上传文件

在地址栏输入网址

http://121.43.231.**/

可以看到

 

 点击“选择文件”后,选择文件再点击Upload,文件便上传至http服务器的upload目录下。

3.3.3测试本地向http服务器下载文件

点击Actions下面的"Download",则可以下载文件。

4.最后

        这是我第一次使用阿里云服务器的记录,供参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/774365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

比较好用的洗地机品牌有哪些?家用洗地机推荐

近两年洗地机可谓是大热门清洁家电&#xff0c;源于它在清洁使用上面&#xff0c;不仅效率高过于传统清洁工具&#xff0c;同时在清洁地面的时候&#xff0c;干湿垃圾同步清洁&#xff0c;完全不需要手动清洁&#xff0c;使用体验非常棒&#xff01;那关于洗地机该如何挑选才能…

【Java】练手小项目|用Java实现一个简单的图书管理系统

博主简介&#xff1a;努力学习的预备程序媛一枚~博主主页&#xff1a; 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 文章目录 一、项目简介&#xff08;流程图&#xff09;二、设计思路&#xff08;UML图&#xff09;三、代码四、总结&反思&#xff1a; 一、项目…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(7 月 18 日论文合集)

文章目录 一、检测相关(19篇)1.1 Implementation of a perception system for autonomous vehicles using a detection-segmentation network in SoC FPGA1.2 Monocular 3D Object Detection with LiDAR Guided Semi Supervised Active Learning1.3 Active Learning for Object…

亚马逊在人工智能领域的投资机会

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 亚马逊股票的关键指标 猛兽财经认为亚马逊&#xff08;AMZN&#xff09;在拥抱生成式人工智能方面是非常认真的&#xff0c;以下指标就证明了这一点。 上周&#xff0c;亚马逊透露&#xff0c;它已经建立了“AWS生成人工智…

uniapp中axios封装和环境配置

axios版本 最好锁定版本&#xff0c;避免bug axios-miniprogram-adapter这个依赖主要是适配小程序网络请求的适配器&#xff0c;为了解决uniapp 适配axios请求&#xff0c;避免报adapter is not a function错误 cnpm i axios0.26.0 axios-miniprogram-adapter 配置adapter函…

leaflet 沿河流流向显示河流名字

1.效果图&#xff1a; 2.代码块 首先需要借助一个插件3mapslab-Leaflet.streetlabels&#xff08;这个插件也可用于显示街道名字用的&#xff09; 插件可在leaflet官网上下载及案例&#xff01; --- layout: default ---<div idmap style"width:100%;min-height:30…

2023年,做好数据分析项目,四分之三就靠它了

摘要 在2023年&#xff0c;数据分析成为了一个卓越的商业实践&#xff0c;为企业和组织带来了巨大的成功。本文将深入探讨一个重要数据分析项目&#xff0c;其成功的四分之三依赖于数据洞察力的重要性。通过合理的数据收集、清洗、分析和解释&#xff0c;企业能够获得实质性的见…

关于生物数据库定制研发-开发注意事项

目前需要定制开发一款核酸数据库、蛋白数据库、蛋白结构数据库或是通路数据库等生物医药数据库成本无疑是巨大的&#xff01;需要承受生物数据获取成本、开发成本、专业人才挖掘、行业壁垒攻克、研发及运维等碎片化难题&#xff0c;所以找到一家实力强劲专业公司是很有必要的。…

fastadmin采坑之关联id

在add.html中添加 尤其要注意 data-field属性这个是最重要的&#xff0c;不然搜索不出来 <div class"form-group"><label class"required control-label col-xs-12 col-sm-2">{:__(Meeting_id)}:</label><div class"col-xs-12…

nosql作业

nosql作业 文章目录 作业一&#xff1a;string list hash结构中&#xff0c;每个至少完成5个命令&#xff0c;包含插入 修改 删除 查询&#xff0c;list 和hash还需要增加遍历的操作命令1、 string类型数据的命令操作&#xff1a;2、 list类型数据的命令操作&#xff1a;3、 ha…

计算机专升本基础笔记二 进制转换及二进制运算规则

进制转换及二进制运算规则 什么是进制&#xff1f;     进制就是进位计数制&#xff0c;是人为定义的带进位的计数方法。我们的时间就是六十进制(满60秒进一分钟&#xff0c;满60分钟进1小时&#xff09;&#xff1b;对于任何一种进制—X进制&#xff0c;就表示每一位上的数…

网络子系统学习2:套接字缓冲区

套接字缓冲区 目录 套接字缓冲区 套接字缓冲区整体结构 使用套接字缓冲区管理数据 管理套接字缓冲区数据 套接字缓冲区整体结构 在内核分析&#xff08;收到的&#xff09;网络分组时&#xff0c;底层协议的数据将传递到更高的层。发送数据时顺序相反&#xff0c;各种协议…

usb转网口转换器经常自动断网

问题&#xff1a; 最近使用一个usb转网口的扩展坞&#xff0c;发现和其它机器通信时&#xff0c;经常会自动断网。 原因&#xff1a; 和设备的电源管理策略有关&#xff0c;USB设备的“允许计算机自动关闭此设备以节约电源”选项默认是选中的&#xff0c;而网络设备的此选项默…

Java正则表达式匹配字符类

1、匹配字符的示例 以下是在java中使用正则表达式匹配字符的各种示例。 2、匹配字符类 以下是在java中使用正则表达式匹配字符类的一些示例。 3、匹配预定义字符类 以下是使用java中的正则表达式匹配预定义字符类的各种示例。 4、匹配POSIX字符类 以下是使用java中的正则表…

【精简版--纯操作】zabbix企业级监控(简单操作、页面优化、监控主机自己、监控linux、监控Win10)

zabbix企业级监控&#xff08;简单操作、页面优化、监控主机自己、监控linux、监控Win10&#xff09; 目录 一、zabbix安装部署 二、图形化操作&#xff1a;web安装zabbix 三、Zabbix页面优化 四、Zabbix监控自己 五、监控linux主机&#xff1a; 六、监控Win10主机&…

工业RFID识别设备可以分为哪几种?

常见的工业RFID识别设备可以分为&#xff1a;读写器、读写模块、手持终端、工业通道等设备&#xff0c;不同的设备对应不同的应用场景&#xff0c;下面我们就一起来了解一下这些RFID识别设备都有哪些具体应用。 工业rfid识别设备可以分为哪几种? 1、 读写器 RFID读写器是用于读…

Spring框架的创建和使用

目录 Spring框架概述 什么是Spring框架 什么是容器 什么是IoC容器 Spring的核心功能 IoC容器和普通程序开发的区别 DI Spring项目的创建和使用 Spring项目创建 创建一个maven项目 添加Spring框架支持 添加一个启动类 Spring项目的使用 存储Bean对象 获取并使用B…

04规划模型练习题

(0-1 规划)某公司董事会正在考虑几个大型的投资项目&#xff0c;每个项目只能投资一次&#xff0c;且各个项目所需的投资金额与能够产生的预期收益是不同的&#xff0c;具体见表 1 所示.已知公司现有的投资额是 1亿美金&#xff0c;其中投资项目 1和项目 2 是斥的&#xff0c;项…

物理层——数据通信基础知识

1.典型的数据通信模型 2.数据通信的相关术语 2.1 三种通讯方式 2.2 数据传输方式 2.3 常用编码方式&#xff08;数字信号&#xff09; 曼彻斯特编码 将一个码元分成两个相等的间隔&#xff1b; 前一个间隔为 低电平 &#xff0c;后一个间隔为 高电平 表示码元1&#xff1b; 码…