如何将本地python项目部署到阿里云服务器上(完整版)

news2024/11/16 9:55:59

一、准备阿里云服务器

  1. 首先在阿里云服务器免费试用网站中选择相应的服务器,本次搭建选择的服务器是适合入门级开发者的服务器。
  2. 在阿里云控制台上创建一个云服务器( ECS 实例)并获取访问凭证,包括主机 IP 地址、用户名和密码。
  3. 在服务器上安装 Docker ,具体步骤参考阿里云官方文档,来自阿里云服务器免费试用网站的试用教程。

二、在本地开发环境准备 Docker 镜像

1、在本地开发文件夹下创建一个 Dockerfile ,用于定义构建 Docker 镜像的配置。

  • 在 Dockerfile 中指定基础镜像,本项目指定的是 NiceGUI 的官方镜像。
  • 使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录)。
  • 将项目文件复制到镜像中,通过ADD命令将项目代码复制到镜像的指定路径。
  • 安装项目所需的依赖包,可以使用pip install命令在镜像中安装所需的 Python 包。
  • EXPOSE指令定义了提供服务的初始传入端口。这些端口可供容器内的进程使用。
  • 指定容器启动时要执行的命令,使用CMD命令指定要运行的 Python 脚本或启动命令。
# 基础镜像
FROM zauberzeug/nicegui
# 设置工作目录为/proj
WORKDIR /proj
# 复制依赖文件
ADD . .
# 安装requirments.txt中列举的包
RUN pip install -r requirements.txt
# 向容器外暴露一个端口
EXPOSE 80
# 在容器启动时运行main.py
CMD ["python", "main.py"]

本地开发文件夹目录如图所示:
请添加图片描述

2、 在本地构建 Docker 镜像。
(1)打开终端,进入包含 Dockerfile 的项目目录。使用docker build --platform linux/amd64 -t <your_image_name>:<tag> .构建 Docker 镜像。其中,your_image_name是你给镜像起的名称,tag是版本标签。注意命令最后的.表示使用当前目录作为上下文构建镜像。

请添加图片描述
(2)将本地镜像上传到 Docker 仓库。

  • 执行docker login --username=<镜像仓库登录名> registry.cn-<个人版实例所在的地域>.aliyuncs.com,登录到阿里云的 Docker 仓库。
  • 执行docker tag <image id> registry.cn-<个人版实例所在的地域>.aliyuncs.com/<your_repository>/<your_image_name>:<tag>,将本地构建的镜像标记
  • 执行docker push registry.cn-<个人版实例所在的地域>.aliyuncs.com/<your_repository>/<your_image_name>:<tag>,将本地构建的镜像上传到仓库

其中your_repository是您在阿里云上创建的 Docker 仓库的名称。

请添加图片描述

三、在阿里云服务器上部署 Docker

docker login --username=<镜像仓库登录名> registry.cn-<个人版实例所在的地域>.aliyuncs.com
从 Docker 仓库中拉取您上传的镜像
docker pull registry.cn-<个人版实例所在的地域>.aliyuncs.com/<your_repository>/<your_image_name>:<tag>
在阿里云服务器上运行容器
docker run --name <container name> -p 81:80 -p 8081:8080 -d registry.cn-<个人版实例所在的地域>.aliyuncs.com/<your_repository>/<your_image_name>:<tag>-p参数指定容器的端口映射,将容器的80端口映射到主机的81端口。

访问部署的 Python 项目,在浏览器中访问阿里云服务器的公网 IP 地址或域名,即可访问部署的 Python 项目。

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

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

相关文章

K Shortest Paths算法之Eppstein algorithm

Eppstein的算法是David Eppstein于1998年提出的一种高效且易于实现的k条最短路径寻找方法。它的时间复杂度为O(m n log n k)&#xff0c;其中m是边的数量&#xff0c;n是节点的数量&#xff0c;k是要寻找的路径数。相较于其他方法&#xff0c;它具有较好的性能和实用性。 Epp…

路漫漫其修远兮

其实不仅是专业&#xff0c;AI冲击波才刚刚开启&#xff0c;包括博客、自媒体作用也在大幅度下降呢。 很多人看过如下这幅图&#xff1a; 提示工程师确实是在当前大型语言模型不够完善的情况下&#xff0c;通过微调输入的方式来提高模型的性能。随着模型的迭代&#xff0c;这些…

算法模板(8):网络流(1):最大流

算法模板&#xff08;8&#xff09;&#xff1a;网络流&#xff08;1&#xff09;&#xff1a;最大流 网络流基本概念 基本概念 流网络&#xff0c;不考虑反向边可行流&#xff0c;不考虑反向边 两个条件&#xff08;根据《算法导论》&#xff0c;这两个条件可以看作可行流的充…

mapbox实现线要素的文字标注功能

效果图 操作步骤 首先查看mapbox自己的api里面有没有&#xff0c;好像里面并没有类似于line-text的属性 然后打开mapbox studio&#xff0c;发现里面确实是有这种样式的&#xff0c;他的图层名字叫 然后我们下载下来这个样式 打开style.json文件之后&#xff0c;找到这个图…

【数据可视化】Plotly Express绘图库使用

Plotly Express是一个基于Plotly库的高级Python可视化库。它旨在使绘图变得简单且直观&#xff0c;无需繁琐的设置和配置。通过使用Plotly Express&#xff0c;您可以使用少量的代码创建具有丰富交互性和专业外观的各种图表。以下是Plotly Express的一些主要特点和优势&#xf…

Maven教学--上

Maven教程–上 先看一个问题&#xff0c;引出Maven 需求说明/图解 编写一个类, 有一个方法sum&#xff0c;可以返回两个数的和编写测试类TestSum, 可以测试sum 是否正确. 使用传统方式完成 创建传统的java 项目java-hello 创建Hello.java public class Hello {public S…

【30天熟悉Go语言】5 Go 基本数据类型

文章目录 一、前言二、数据类型总览1、基本数据类型1&#xff09;数值型-整数类型1> 有符号整数类型&#xff1a;2> 无符号整数类型&#xff1a;3> 其他整数类型&#xff1a;4> PS:Go的整数类型&#xff0c;默认声明为int类型&#xff1a;5> 变量占用的字节数 2…

PowerShell系列(六):PowerShell脚本执行策略梳理

目录 1、执行策略等级 2、执行策略范围 3、执行策略命令语法格式 4、执行策略常用命令 PowerShell 是一种用于操作 系统的命令行界面&#xff0c;支持跨平台&#xff0c;它提供了许多功能来自动化和优化各种任务。PowerShell 是由微软官方开发的&#xff0c;并作为 Windows Ser…

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

从横空出世到掀起高潮&#xff0c;当下&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;模式下的ChatGPT它正以惊人的速度席卷各个领域&#xff0c;在线教培行业也不例外。那么&#xff0c;正式进入落地期的ChatGPT&#xff0c;在在线教培行业有那些应用前景呢&#…

QT中信号和槽的概念

信号就是发生什么事件&#xff0c;槽就是触发什么函数&#xff0c;所以信号与槽就是发生什么事件(比如点击某个按钮)然后就会触发某个函数 connect(信号的发送者&#xff0c;发送的具体信号&#xff0c;信号的接受者&#xff0c;信号的处理&#xff09; connect(myButton , &a…

Android 内存泄漏

名词解释 内存泄漏:即memory leak。是指内存空间使用完毕后无法被释放的现象&#xff0c;虽然Java有垃圾回收机制&#xff08;GC&#xff09;&#xff0c;但是对于还保持着引用&#xff0c; 该内存不能再被分配使用&#xff0c;逻辑上却已经不会再用到的对象&#xff0c;垃圾回…

阿里P8整理的《亿级并发系统设计》实战教程,面面俱到,实在太全了

候&#xff0c;那系统架构一定不是那么简单的&#xff0c;用个 redis&#xff0c;用 mq 就能搞定&#xff1f;当然不是&#xff0c;真实的系统架构搭配上业务之后&#xff0c;会比这种简单的所谓“高并发架构”要复杂很多倍。 如果有面试官问你个问题说&#xff0c;如何设计一…

亚马逊、eBay新品期没有出单怎么办?自养买家号的重要性和技巧

一&#xff1a;新品期没有出单怎么办&#xff1f; 1.刚开始,低bid 调整&#xff0c;20元预算&#xff0c;让位置可以靠后点&#xff0c;因为前期跟前面比&#xff0c;比不赢&#xff0c;不如去后面比。 2.价格不是由卖家单一决定&#xff0c;而是由市场决定的。 3.切记自嗨型…

Kotlin Lambda表达式和匿名函数的组合简直太强了

Kotlin Lambda表达式和匿名函数的组合简直太强了 简介 首先&#xff0c;在 Kotlin 中&#xff0c;函数是“第一公民”&#xff08;First Class Citizen&#xff09;。因此&#xff0c;它们可以被分配为变量的值&#xff0c;作为其他函数的参数传递或者函数的返回值。同样&…

去中心化公链生态是否还有未来

2020年流动性挖矿带来的高收益让 DeFi Summer 点燃了2021年的大牛市。质押借贷、AMM作市、DEX、GameFi以及元宇宙等赛道的相继爆火&#xff0c;让整个行业看到了区块链的未来潜力&#xff0c;公链生态的繁荣也给项目带来了更多的可能性。而当市场进入熊市时&#xff0c;不少公链…

【netty基础】Java NIO三件套

文章目录 一. 缓冲区1&#xff0e;Buffer操作基本API2&#xff0e;Buffer的基本原理2.1. put操作2.2. get操作2.3. clear()回到初始化buffer的值 3&#xff0e;缓冲区的分配4&#xff0e;缓冲区分片5&#xff0e;只读缓冲区6. 直接(direct)缓冲区7. 内存映射 二. 选择器三. 通道…

直接插入排序--C语言(附详细代码)(附图详解)

目录 插入排序法的介绍 什么是插入排序法&#xff1f; 稳定性分析 插入排序基本思想 例子分析 实现代码 运行结果 插入排序法的介绍 什么是插入排序法&#xff1f; 插入排序&#xff0c;一般也被称为直接插入排序。对于少量元素的排序&#xff0c;它是一个有效的算法 。…

Django-3.2-LTS兼容哪些Python版本?支不支持Python3.9.10?

问&#xff1a;请问Python的3.9.10版本兼不兼容Django的3.2版&#xff1f; 答&#xff1a;Python 3.9.10 和 Django 3.2 之间是兼容的。Django 3.2 是一个长期支持&#xff08;LTS&#xff09;版本&#xff0c;它支持 Python 3.6、3.7、3.8 和 3.9。因此&#xff0c;Python 3.9…

母线差动保护(二)

3、大差和小差 接入大差元件的电流为I母、II母所有支路&#xff08;母联除外&#xff09;的电流&#xff0c;目的是为了判断故障是否为母线区内故障&#xff1b;接入小差元件的电流为接入该段母线的所有支路的电流&#xff0c;目的是为了判断故障具体发生在哪一条母线上。 以双…

ifconfig: RX packets 一直为 0

本博客的很多内容都是经验之谈&#xff0c;目的是给遇到类似问题的小伙伴提供一个解决问题的思路&#xff0c;如果试了不行&#xff0c;可以快速跳过&#xff0c;再寻找其他的解决方案。 如题目所言&#xff0c;今天遇到的问题是和网络连通性相关的&#xff0c;就是网络不通&a…