【Web开发】Python实现Web服务器(Ubuntu下调试Flask)
创始人
2024-04-30 12:13:54

在这里插入图片描述

🍺基于Python的Web服务器系列相关文章编写如下🍺:

  1. 🎈【Web开发】Python实现Web服务器(Flask快速入门)🎈
  2. 🎈【Web开发】Python实现Web服务器(Flask案例测试)🎈
  3. 🎈【Web开发】Python实现Web服务器(Flask部署上线)🎈
  4. 🎈【Web开发】Python实现Web服务器(Flask+Tornado+nginx)🎈
  5. 🎈【Web开发】Python实现Web服务器(Ubuntu下安装Flask)🎈
  6. 🎈【Web开发】Python实现Web服务器(Ubuntu下打包Flask)🎈
  7. 🎈【Web开发】Python实现Web服务器(Ubuntu下调试Flask)🎈
  8. 🎈【Web开发】Python实现Web服务器(Ubuntu下Flask使用MySQL)🎈

文章目录

  • 1、简介
  • 2、ubuntu远程访问
  • 3、ubuntu进程管理
    • 3.1 查看端口是否被占用方法
    • 3.2 top命令查看进程pid
    • 3.3 ps命令查看进程
    • 3.4 kill命令关闭进程
    • 3.5 nohup命令
    • 3.6 设置开机自启动
  • 4、ubuntu防火墙设置
    • 4.1 查看防火墙状态
    • 4.2 开启和关闭防火墙
    • 4.3 打开或关闭某个端口
  • 5、flask测试
    • 5.1 配置python开发环境
    • 5.2 创建虚拟环境venv
    • 5.3 安装flask库
    • 5.4 测试flask入门例子
    • 5.5 测试flask图表例子(pyecharts)
  • 结语

1、简介

本文介绍在ubuntu系统中如何远程开发,防火墙设置,配置python开发环境,以及使用flask框架进行web服务器的开发。

2、ubuntu远程访问

在虚拟机VMware Workstation Pro中安装了一个Ubuntu系统。
有人反映新装的Ubuntu竟然没有默认安装ssh。

更新一下软件源:

sudo apt-get update

在这里插入图片描述
下载ssh并安装:
安装命令:sudo apt-get install openssh-server
卸载命令:sudo apt-get remove openssh-server

sudo apt-get install openssh-server

在这里插入图片描述
查看是否开启了ssh服务 (没有开始的话使用命令sudo service ssh start)

sudo service ssh start
sudo ps -e | grep ssh

在这里插入图片描述
看到sshd那说明ssh-server已经启动了。若没有则可以这样启动:sudo /etc/init.d/ssh start 或者 service ssh start。

进入Ubuntu,Ctrl+Alt+T打开终端,输入ifconfig命令查看IP情况,如下图:

ifconfig

在这里插入图片描述
首先要保证虚拟机和主机之间可以互相ping通,如果不能ping通则后续工作无法进行。
打开Putty客户端,出现以下界面,填入相关参数:
在这里插入图片描述
输入ubuntu系统的用户名和密码:
在这里插入图片描述
成功进入命令行界面:
在这里插入图片描述

putty连接Ubuntu虚拟机超时,Network error: Connection timed out?
网络能ping通,但是putty连接Ubuntu时却显示连接超时?

(1)如果仍然无法远程访问ubuntu系统,可能是ubuntu防火墙开了,关掉试试。
(2)也可以试试还原vmware的网络设置,当然ip等信息会自动变化。
在这里插入图片描述
在这里插入图片描述
点击还原默认设置即可,还原后,他的子网地址会改变,linux的ip地址也会改变。

3、ubuntu进程管理

3.1 查看端口是否被占用方法

netstat -anp |grep 40001

在这里插入图片描述

3.2 top命令查看进程pid

top

在这里插入图片描述

3.3 ps命令查看进程

相关参数整理如下:

-aux    以BSD风格显示进程 常用
-efH    以System V风格显示进程
-e , -A 显示所有进程
a         显示终端上所有用户的进程
x         显示无终端进程
u         显示详细信息
f          树状显示
w        完整显示信息
l          显示长列表
ps

在这里插入图片描述

ps aux

在这里插入图片描述

ps aux| grep pyheat

在这里插入图片描述

3.4 kill命令关闭进程

kill -9  pid    #用来强制终止指定pid进程(推荐使用此方法)
kill -9 -1      #终止你拥有的全部进程
kill -9 15494

在这里插入图片描述

pkill  firefox

在这里插入图片描述

3.5 nohup命令

nohup 命令是英语词组 no hangup 的缩写,意思是不挂断,也就是指程序不退出。这个命令会使程序忽略 HUP 信号,保证程序能够正常进行。

  • 1、nohup 是 no hang up 的缩写,就是不挂断的意思。
  • 2、nohup命令:在系统上运行一个进程的时候,不想让其在你退出账号时关闭,即可用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
  • 3、nohup在不规定的情况下,所以输出内容会到nohup.out中。
nohup python3 demo.py >/dev/null 2>&1 &

run.py为Flask项目的启动脚本,在python环境中不间断的运行run.py,并且将标准内容和错误内容输出到flask.log这个日志文件中,即请求api若出现报错信息即可通过日志定位到问题。

nohup python3 run.py >> /www/wwwroot/log/flask.log 2>&1 &
  • 2>&1的意思:
0 表示stdin标准输入,用户键盘输入的内容
1 表示stdout标准输出,输出到显示屏的内容
2 表示stderr标准错误,报错内容
2>&1是一个整体,>左右不能有空格,即将错误内容重定向输入到标准输出中去。
  • nohup和&的区别:
    1、&才是后台运行
    2、nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;
    在这里插入图片描述

3.6 设置开机自启动

在/usr/lib/systemd/system目录下包含了各种unit文件,有service后缀的服务unit,有target后缀的开机级别unit等,这里介绍关于service后缀的文件。因为systemd在开机要想执行自启动,都是通过这些*.service 的unit控制的,服务又分为系统服务(system)和用户服务(user)。
系统服务目录:/usr/lib/systemd/system/,开机不登录就能运行的程序(常用于开机自启)。
用户服务目录:/usr/lib/systemd/user/,需要登录以后才能运行的程序。

在/usr/lib/systemd/system目录下新建my1225.service文件:

[Unit]
#服务描述
#Description=test Service
#指定了在systemd在执行完那些target之后再启动该服务
After=network.target[Service]
#定义Service的运行类型,这种一般是开机自启动文件就是可执行文件
Type=simple#Type=forking,这种一般是开机自启动文件为shell脚本文件,脚本文件里面可能写了多个需要
#开机自启动的程序,forking代表子进程的方式,就是脚本里的程序以子进程后台运行。#定义systemctl start|stop|reload *.service 的执行方法(具体命令需要写绝对路径)
ExecStart=/home/tomcat/Desktop/test.sh -start#-start加不加都行
#创建私有的内存临时空间
PrivateTmp=True[Install]
#多用户
WantedBy=multi-user.target
重载系统服务:systemctl daemon-reload
设置开机启动:systemctl enable *.service
启动服务:systemctl start *.service
停止服务:systemctl stop *.service
重启服务:systemctl restart *.service

Ubuntu 20.04的服务管理是基于systemd的,因此设置服务自启动最推荐的方法是在/etc/systemd/user目录下创建一个systemd服务文件,配置好要执行的服务。
(1)创建我们需要开机自启动的脚本,例如test.sh

#!/bin/bash -e # source /home/tomcat/venv_demo/bin/activate flask_test
# source命令进行conda环境激活,需要使用绝对路径打开acvatie目录指定。cd /home/tomcat/flask_test
gunicorn -w 4 -b 127.0.0.1:8000 flask_test:app &exit 0

(2)在/etc/systemd/user目录下创建一个systemd服务文件, 命名为my1225.service

[Unit]
After=network.service
# After表示在哪个服务启动后启动我们的程序,After=network.service 表示网络连接完成后,启动我们的程序[Service]
ExecStart=/home/tomcat/test.sh # 此处只能绝对路径
# ExecStart表示我们的脚本(步骤1中的test.sh)的执行路径[Install]
WantedBy=default.target
# WantedBy默认填default.target,表示我们程序所在的服务组。
# vi /etc/systemd/system/flaskapp.service[Unit]
Description=A Gunicorn example to serve Flask App
After=network.target[Service]
WorkingDirectory=/home/tomcat
ExecStart=/home/tomcat/python/bin/gunicorn -w 3 -b 0.0.0.0:8888 wsgi:app --timeout 120[Install]
WantedBy=multi-user.target

(3)将systemd服务文件和我们的脚本更改权限,使其可执行。

sudo chmod 744 ~/test.sh
sudo chmod 664 /etc/systemd/user/my1225.service

(4)重新加载系统的systemd服务文件,并启用我们自己写的my1225.service文件。

sudo systemctl daemon-reload
systemctl --user enable my1225.service

(5)取消开机自启动

systemctl --user disable my1225.service
cd /etc/systemd/user
rm my1225.service

创建一个systemd单元文件将允许Ubuntu的init系统自动启动uWSGI并在服务器启动时为Flask应用程序提供服务。
在/etc/systemd/system目录创建一个以.service为结尾的单元文件开始:

sudo nano /etc/systemd/system/myproject.service
[Unit]
Description=uWSGI instance to serve myproject
After=network.target
​
[Service]
User=sammy
Group=www-data
WorkingDirectory=/home/sammy/myproject
Environment="PATH=/home/sammy/myproject/myprojectenv/bin"
ExecStart=/home/sammy/myproject/myprojectenv/bin/uwsgi --ini myproject.ini
​
[Install]
WantedBy=multi-user.target

这样,我们的systemd服务文件就完成了。立即保存并关闭它。
我们现在可以启动我们创建的uWSGI服务并启用它,以便它在启动时启动:

sudo systemctl start myproject
sudo systemctl enable myproject
sudo systemctl status myproject

4、ubuntu防火墙设置

4.1 查看防火墙状态

由于LInux原始的防火墙工具iptables过于繁琐,所以ubuntu默认提供了一个基于iptable之上的防火墙工具ufw。
ubuntu 9.10默认的便是UFW防火墙,它已经支持界面操作了。在命令行运行ufw命令就可以看到提示的一系列可进行的操作。
Ubuntu20.04一般都默认安装了UFW(Uncomplicated Firewall),它是一款轻量化的工具,主要用于对输入输出的流量进行监控。
如果没有安装,请用下面的命令安装:

sudo apt install ufw

正常情况安装以后应该是默认禁止状态的,输入如下命令查看状态:

sudo ufw status verbose

在这里插入图片描述
这表示防火墙没有开启,下面启用防火墙。

sudo ufw status

在这里插入图片描述

4.2 开启和关闭防火墙

只需设置如下三条命令:

sudo apt install ufw
sudo ufw enable
sudo ufw default deny

在这里插入图片描述
sudo ufw default allow/deny:外来访问默认允许/拒绝。
sudo ufw enable/disable:打开/关闭ufw。
sudo ufw status:查看已经定义的ufw规则。
sudo ufw delete allow/deny 20:删除以前定义的"允许/拒绝访问20端口"的规则。

sudo ufw disable

在这里插入图片描述

4.3 打开或关闭某个端口

sudo ufw allow 53 允许外部访问53端口(tcp/udp)
sudo ufw allow 3690 允许外部访问3690端口(svn)
sudo ufw allow from 192.168.1.111 允许此IP访问所有的本机端口
sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22  允许指定的IP段访问特定端口
sudo ufw delete allow smtp 删除上面建立的某条规则,比如删除svn端口就是 sudo ufw delete allow 3690 
sudo ufw allow 40001
sudo ufw delete allow 40001

在这里插入图片描述

5、flask测试

以 Flask 项目为例,Flask作为Web框架,它的作用主要是为了开发Web应用程序。
一个Web应用程序包含了三个部分,前端,服务端,数据库。

  • 数据库负责存储数据,作为数据存储和查询的引擎;
  • 前端网站作为用户直接查看的页面,负责展示数据。
  • Flask 负责对数据库进行操作,将数据库中的数据渲染至前端。

5.1 配置python开发环境

python

在这里插入图片描述

python3
# or
python3 -V

在这里插入图片描述
在这里插入图片描述

pip list

在这里插入图片描述

sudo apt install python3-pip

在这里插入图片描述

pip list

在这里插入图片描述

5.2 创建虚拟环境venv

# 新建测试文件夹
mkdir test
cd test# 注意:python3 内置了venv,所以不用再pip安装virtualenv了。
# venv_demo 就是虚拟环境的名字
python -m venv venv_demo  # 激活虚拟环境
venv_demo/Scripts/activate

在这里插入图片描述
创建虚拟环境失败,系统提示需要装工具。安装虚拟环境库venv工具。

sudo apt install python3.8-venv

在这里插入图片描述
安装成功,再继续创建虚拟环境如下:

python -m venv venv_demo  

在这里插入图片描述
激活虚拟环境如下:

source venv_demo/bin/activate

在这里插入图片描述

python
python -V
pip list

在这里插入图片描述

5.3 安装flask库

pip install flask

在这里插入图片描述
安装一步到位,安装成功如上。

5.4 测试flask入门例子

编写测试脚本demo.py如下:

  • demo.py:
from flask import Flask
app = Flask(__name__)@app.route('/')
def hello_world():return 'Hello World!小沐!'if __name__ == '__main__':app.run()

运行命令如下:

python demo.py

在这里插入图片描述
运行结果,跨电脑无法访问。即使防火墙允许了端口5000。
在这里插入图片描述
修改测试脚本demo.py如下:

  • demo.py:
from flask import Flask
app = Flask(__name__)@app.route('/')
def hello_world():return 'Hello World!小沐!'if __name__ == '__main__':app.run(host="0.0.0.0")

运行命令如下:

python demo.py

在这里插入图片描述
在这里插入图片描述
运行结果,跨电脑可以访问。

5.5 测试flask图表例子(pyecharts)

新建一个项目flask_pyecharts

  • (1)安装pyecharts库
pip install pyecharts

在这里插入图片描述

pip list

在这里插入图片描述

  • (2)拷贝 pyecharts 模板
    在这里插入图片描述

将链接中的以下模板
├── jupyter_lab.html
├── jupyter_notebook.html
├── macro
├── nteract.html
├── simple_chart.html
├── simple_page.html
└── table.html
全部拷贝到 tempaltes 文件夹中
https://github.com/pyecharts/pyecharts/tree/master/pyecharts/render/templates

  • (3)编写测试脚本demo_echart.py如下:
from flask import Flask
# from jinja2 import Markup
from markupsafe import Markupfrom pyecharts import options as opts
from pyecharts.charts import Barapp = Flask(__name__, static_folder="templates")def bar_base() -> Bar:c = (Bar().add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]).add_yaxis("商家A", [5, 20, 36, 10, 75, 90]).add_yaxis("商家B", [15, 25, 16, 55, 48, 8]).set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题")))return c@app.route("/")
def index():c = bar_base()return Markup(c.render_embed())if __name__ == "__main__":app.run(host="0.0.0.0")

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

在这里插入图片描述

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
如何吸引顾客 怎样吸引顾客加入... 如何激活群的顾客活跃度,是商家在运营过程中绕不开的事情。当新用户来到商家的私域流量群时,商家一般会采...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
地铁怎么买票 乘坐地铁如何买票 目前,上海轨道交通全网络运营里程已增至831公里,线路增至20条,与此同时,轨道交通的支付方式也日益...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...