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

基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署

文章目录

    • 摘要
    • 项目结构
    • 项目开发
    • 项目上线
    • 参考文章

在这里插入图片描述

摘要

本文介绍了如何在Windows 10系统上使用PyCharm专业版2024.1,通过Docker容器在阿里云CentOS 7.9服务器上进行Python项目的开发和生产部署。文章详细阐述了项目结构的搭建、PyCharm的使用技巧、以及如何将开发项目部署为生产镜像,并利用Pycharm和容器卷挂载技术实现项目结构和内容在本地、远程服务器、Docker容器内部的一致性。文章有助于读者更好地理解和实践在Windows系统上使用PyCharm连接Docker容器进行Python项目开发与部署。

项目结构

假设你的项目名称为 flask_project,项目结构如下:

flask_project/
│
├── DockerfileBase       # 基础 Dockerfile,用于构建开发环境
├── DockerfileProd       # 生产环境 Dockerfile,基于基础镜像
├── app/
│   ├── __init__.py
│   ├── app.py            # Flask 应用的主文件
├── requirements.txt      # 项目依赖文件
└── README.md             # 项目说明文件
  1. DockerfileBase

    在项目的根目录下创建一个名为 DockerfileBase 的文件,并写入以下内容:

    # 使用官方 Python 3.8 镜像
    FROM python:3.8# 安装设置ssh服务
    RUN apt-get update && \apt-get install -y openssh-server openssh-client && \echo root:abcdef123456 | chpasswd && \echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
    # 创建并设置权限
    RUN mkdir -p /run/sshd && \chown root:root /run/sshd && \chmod 755 /run/sshd# 安装必要的软件包
    RUN apt-get install -y sudo vim# 设置系统时区为上海
    RUN rm -f /etc/localtime
    RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone# 暴露 SSH 端口
    EXPOSE 22# 启动 SSH 服务
    CMD ["/usr/sbin/sshd", "-D"]
    
  2. DockerfileProd

    在项目的根目录下创建一个名为 DockerfileProd 的文件,并写入以下内容:

    # 使用自己构建 Python 3.8 镜像作为基础镜像
    FROM python-3.8-base:1.0# 设置容器内的工作目录为 /opt/project/flask_project
    WORKDIR /opt/project/flask_project# 将当前目录下的所有文件复制到容器的工作目录
    COPY . /opt/project/flask_project# 安装 Flask 应用所需的依赖
    RUN pip install --no-cache-dir -r requirements.txt# 暴露 Flask 应用运行的端口 5000
    EXPOSE 5000# 定义容器启动时执行的命令来运行 Flask 应用
    CMD ["python", "./app.py"]
    
  3. app/app.py

    app 目录下创建一个名为 app.py 的文件,并写入以下 Flask 应用代码:

    from flask import Flaskapp = Flask(__name__)@app.route('/')
    def hello_world():return 'Hello, World!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
    
  4. app/requirements.txt

    app 目录下创建一个名为 requirements.txt 的文件,并写入以下内容:

    Flask==3.0.3
    
  5. README.md

    README.md 写入项目相关的说明:

    基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署
    

项目开发

  1. 构建基础镜像
    首先,你需要创建一个基础的 Docker 镜像,这个镜像将包含你开发环境中所需的所有基本组件。

    • 登录远程服务器
    • 新建DockerfileBase文件
      mkdir /opt/project/flask_project
      touch DockerfileBase
      
    • 写入以下内容到 DockerfileBase
      # 使用官方 Python 3.8 镜像
      FROM python:3.8# 安装设置ssh服务
      RUN apt-get update && \apt-get install -y openssh-server openssh-client && \echo root:abcdef123456 | chpasswd && \echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
      # 创建并设置权限
      RUN mkdir -p /run/sshd && \chown root:root /run/sshd && \chmod 755 /run/sshd# 安装必要的软件包
      RUN apt-get install -y sudo vim# 设置系统时区为上海
      RUN rm -f /etc/localtime
      RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone# 暴露 SSH 端口
      EXPOSE 22# 启动 SSH 服务
      CMD ["/usr/sbin/sshd", "-D"]
      
    • 构建基础镜像
      docker build -f DockerfileBase -t python-3.8-base:1.0 .
      
  2. 运行开发环境容器
    使用基础镜像运行开发环境容器,并映射必要的端口。

    docker run -d \--name python-dev \-p 5000:5000  \-p 10022:22 \-v /opt/project/flask_project:/opt/project/flask_project \python-3.8-base:1.0
    
  3. Pycharm新建本地项目
    在 PyCharm 中创建一个新的项目:

    • 点击 “File”(文件)> “New Project”(新建项目)
    • 项目名称:flask_project
    • 项目位置:E:\opt\project
    • Python 虚拟环境位置:E:\opt\project\flask_project\.venv
      在这里插入图片描述
    • 注意:Python虚拟环境不重要,下面会修改Python解析器为远程服务器Docker容器解释器。
  4. Pycharm远程连接开发容器

    • 配置远程解释器
      • 填写配置信息如下

        配置项
        Host(主机地址)your-service-ip
        Port(端口)10022
        Username(用户名)root
        Password(密码)abcdef123456
        Sync Folder(文件同步目录)/opt/project/flask_project
      • 配置过程截图如下
        在这里插入图片描述 在这里插入图片描述

    • 修改项目同步配置
      移除E:\opt\project\flask_project\.venv 向服务器同步
      在这里插入图片描述
      在这里插入图片描述
  5. 安装项目依赖

    • 登录远程容器服务器
      Pycharm中点击Terminal, 出现终端后点击向下三角, 出现上面配置的远程解释器所在服务器信息, 选择进入服务器。
      在这里插入图片描述

    • 创建 requirements.txt

      cd /opt/project/flask_project
      touch  requirements.txt
      
    • 写入以下内容

      Flask==3.0.3
      
    • 安装项目依赖

      pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
      
  6. 创建应用
    在项目中创建Flask应用目录app/和文件app.py

    • 项目结构如下:

      flask_project/
      │
      ├── DockerfileBase       # 基础 Dockerfile,用于构建开发环境
      ├── app/
      │   ├── __init__.py
      │   ├── app.py            # Flask 应用的主文件
      └── requirements.txt      # 项目依赖文件
      
    • 文件内容
      写入以下内容到app/app.py

      from flask import Flaskapp = Flask(__name__)@app.route('/')
      def hello_world():return 'Hello, World!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
      

      如下图所示
      在这里插入图片描述

    • 运行应用
      在 PyCharm 中右键运行 app.py 文件。
      在这里插入图片描述

  7. 访问应用

    • 访问 http://<server-ip>:5000 来查看 Flask 应用的输出。
      在这里插入图片描述

项目上线

  1. 构建生产镜像
    首先,你需要创建一个生产的 Docker 镜像,这个镜像将包含你开发环境中所需的所有基本组件。

    • 登录远程服务器
    • 新建DockerfileProd文件
      mkdir /opt/project/flask_project
      touch DockerfileProd
      
    • 写入以下内容到 DockerfileProd
      # 使用自己构建 Python 3.8 镜像作为基础镜像
      FROM python-3.8-base:1.0# 设置容器内的工作目录为 /opt/project/flask_project
      WORKDIR /opt/project/flask_project# 将当前目录下的所有文件复制到容器的工作目录
      COPY . /opt/project/flask_project# 安装 Flask 应用所需的依赖
      RUN pip install --no-cache-dir -r requirements.txt# 暴露 Flask 应用运行的端口 5000
      EXPOSE 5000# 定义容器启动时执行的命令来运行 Flask 应用
      CMD ["python", "./app.py"]
      
    • 构建基础镜像
      docker build -f DockerfileProd -t flask-project-python-3.8:1.0 .
      
  2. 运行容器
    使用生产镜像运行生产环境容器,并映射必要的端口。

    docker run -d \--name flask-project-prod \-p 10000:5000  \flask-project-python-3.8:1.0
    
  3. 访问应用
    访问 http://<server-ip>:10000 来查看 Flask 应用的输出。

  4. 重启、停止和删除容器:

    当你希望重启停止并删除容器时,可以使用以下命令:

    # 重启容器
    docker restart flask-prod-prod
    # 停止容器
    docker stop flask-prod-prod
    # 删除容器
    docker rm flask-project-prod
    

参考文章

Dockerfile 简介与 镜像构建指南
pycharm 远程连接docker容器调试程序
pycharm如何连接远程服务器的docker容器进行运行和调试代码(一)
PyCahrm部署Docker镜像解释器
Flask+Gunicorn+Docker最佳实践
Docker+Flask+Gunicorn上线项目

相关文章:

基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署

文章目录 摘要项目结构项目开发项目上线参考文章 摘要 本文介绍了如何在Windows 10系统上使用PyCharm专业版2024.1&#xff0c;通过Docker容器在阿里云CentOS 7.9服务器上进行Python项目的开发和生产部署。文章详细阐述了项目结构的搭建、PyCharm的使用技巧、以及如何将开发项…...

TypeScript学习篇-类型介绍使用、ts相关面试题

文章目录 基础知识基础类型: number, string, boolean, object, array, undefined, void(代表该函数没有返回值)enum(枚举): 定义一个可枚举的对象typeinterface联合类型: |交叉类型: &any 类型null 和 undefinednullundefined never类型 面试题及实战1. 你觉得使用ts的好处…...

超详细!Jmeter性能测试

前言 性能测试是一个全栈工程师/架构师必会的技能之一&#xff0c;只有学会性能测试&#xff0c;才能根据得到的测试报告进行分析&#xff0c;找到系统性能的瓶颈所在&#xff0c;而这也是优化架构设计中重要的依据。 测试流程&#xff1a; 需求分析→环境搭建→测试计划→脚…...

C语言经典习题24

文件操作习题 一 编程删除从C盘home文件夹下data.txt文本文件中所读取字符串中指定的字符&#xff0c;该指定字符由键盘输入&#xff0c;并将修改后的字符串以追加方式写入到文本文件C:\home\data.txt中。 #include<stdio.h> main() { char s[100],ch; int i;…...

SQL labs-SQL注入(三,sqlmap使用)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 引言&#xff1a; 盲注简述&#xff1a;是在没有回显得情况下采用的注入方式&#xff0c;分为布尔盲注和时间盲注。 布尔盲注&#xff1a;布尔仅有两种形式&#xff0c;ture&#…...

统一认证与单点登录:简明概述与应用

1. 统一认证概述 统一认证是一种身份验证机制&#xff0c;允许用户使用一个账户来访问多个系统和应用程序。它的主要目标是简化用户的登录过程&#xff0c;提高安全性&#xff0c;并减少管理开销。统一认证通过集中管理用户信息&#xff0c;使得用户只需一次认证即可访问不同的…...

MSPM0G3507学习笔记1:开发环境_引脚认识与点灯

今日速通一款Ti的单片机用于电赛&#xff1a;MSPM0G3507 这里默认已经安装好了Keil5_MDK 首先声明一下: 因为是速成&#xff0c;所以需要一定单片机学习基础&#xff0c;然后我写的也不会详细&#xff0c;这个专栏的笔记也就是自己能看懂就行的目标~~~ 文章提供测试代码解…...

使用法国云手机进行面向法国的社媒营销

在当今数字化和全球化的时代&#xff0c;社交媒体已经成为企业营销和拓展市场的重要工具。对于想进入法国市场的企业来说&#xff0c;如何在海外社媒营销中脱颖而出、抓住更多的市场份额&#xff0c;成为了一个关键问题。法国云手机正为企业提供全新的营销工具&#xff0c;助力…...

C++学习笔记——模板

学习视频 文章目录 模板的概念函数模板函数模板语法函数模板注意事项函数模板案例普通函数与函数模板的区别普通函数与函数模板的调用规则模板的局限性 类模板类模板与函数模板区别类模板中成员函数创建时机类模板对象做函数参数类模板与继承类模板成员函数类外实现类模板分文件…...

财务分析,奥威BI行计算助力财务解放报表工作

【财务分析&#xff0c;奥威BI行计算助力财务解放报表工作】 在企业的财务管理体系中&#xff0c;财务报表的编制与分析是至关重要的一环。然而&#xff0c;传统的手工编制报表方式不仅耗时耗力&#xff0c;还难以应对日益复杂多变的财务数据需求。奥威BI&#xff08;Business…...

文件写入、读出-linux

基于linux操作系统&#xff0c;编写存储功能&#xff0c;在网上搜了几个例子&#xff0c;一直报创建错误&#xff0c; fopen(SAVE_PATH_OWN_INF_FILE, "w") fopen(SAVE_PATH_OWN_INF_FILE, "a"), 使用这两个创建均失败&#xff0c;最后发现创建可以用以…...

环境搭建-Windows系统搭建Docker

Windows系统搭建Docker 一、系统虚拟化1.1 启用虚拟化2.2 启用Hyper-v并开启虚拟任务 三、安装WSL3.1 检验安装3.2 安装WSL 四、Docker安装4.1 Docker安装包下载4.2 Docker安装4.3 运行docker Desktop 五、Docker配置5.1 打开Docker配置中心5.2 配置Docker国内镜像 六、使用 一…...

k8s零零散散问题

安装教程 https://blog.csdn.net/weixin_43933728/article/details/137977799 加入集群错误问题 https://blog.csdn.net/Linbling/article/details/139122862...

The Llama 3 Herd of Models.Llama 3 模型论文全文

现代人工智能(AI)系统是由基础模型驱动的。本文提出了一套新的基础模型,称为Llama 3。它是一组语言模型,支持多语言、编码、推理和工具使用。我们最大的模型是一个密集的Transformer,具有405B个参数和多达128K个tokens的上下文窗口。本文对Llama 3进行了广泛的实证评价。我们…...

ChatGPT的原理和成本

ChatGPT就是人机交互的一个底层系统&#xff0c;某种程度上可以类比于操作系统。在这个操作系统上&#xff0c;人与AI之间的交互用的是人的语言&#xff0c;不再是冷冰冰的机器语言&#xff0c;或者高级机器语言&#xff0c;当然&#xff0c;在未来的十来年内&#xff0c;机器语…...

无刷电机的ESC电子速度控制模块夹紧铁芯或更换镇流器

△u/s中后一项经过二极管半波整流、电容C1滤波后,使原有的脉动电压曲线Us上再0.45ys的波形如叠加一个直流电压,其大小为-Lu,即为△U当压差△U太大,使0.45△U≥Ucz时,电容C1两端电压uc不可能降至下信号。所以该电路同样可以检测出压差压差较小时才能发出合闸脉冲。 压差△U的检…...

OpenAI发布AI搜索惨遭翻车?新老搜索的较量愈演愈烈!

引言 在信息爆炸的时代&#xff0c;每一次技术的飞跃都如同海平面上跃起的鲸鱼&#xff0c;既震撼人心&#xff0c;也搅动着深海的宁静。近日&#xff0c;科技巨头OpenAI发布的AI搜索功能&#xff0c;本欲以智能之名重塑搜索领域的版图&#xff0c;却不料遭遇了市场的“暗礁”…...

SpringBoot整合阿里云短信业务

详细介绍SpringBoot整合阿里云短信服务的每一步过程&#xff0c;同时会将验证码存放到Redis中并设置过期时间&#xff0c;尽量保证实战的同时也让没做过的好兄弟也能实现发短信的功能~ 1. 注册阿里云账号和创建Access Key 首先&#xff0c;你需要注册一个阿里云账号&#xff0…...

Kubernetes安全--securityContext介绍

作者&#xff1a;雅泽 securityContext是用来控制容器内的用户权限&#xff0c;你想用什么用户去执行程序或者执行操作等等。 1. securityContext介绍 安全上下文&#xff08;Security Context&#xff09;定义 Pod 或 Container 的特权与访问控制设置。 安全上下文包括但不…...

【React】通过实际示例详解评论列表渲染和删除

文章目录 一、引言二、初始状态与状态更新1. 使用useState钩子管理状态2. 评论列表的初始数据 三、列表渲染的实现1. list.map(item > { ... })2. return 语句3. JSX 语法4. 为什么这样设计5. 完整解读 四、列表项的唯一标识1. key 的作用2. key 的用法3. 可以没有 key 吗&a…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...