基于树莓派的Web服务器
文章目录
- 前言
- 1. 树莓派基本设置
- 1.1 安装Linux
- 1.2 配置树莓派
- 2. 安装Python3
- 3. 配置虚拟环境
- 4. 安装MySQL
- 5. 升级Sqlite(可选)
- 6. 安装Django和uWSGI
- 7. 安装及配置Nginx
- 8. 连接校园网
- 9. 远程测试
- 结束语
前言
这个项目是大二时期我和我的组员一起做的一个项目,是我们《嵌入式系统原理及应用》这门课的一个结课作业。由于个人比较喜欢Python,当时正在使用Django框架搭建自己的网站(虽然到现在网站还没有正式完工,我大信控课就是多╮(╯_╰)╭),所以就想到了这个课题。可能下面的实习会用到相关知识,故在此记录。
整体方案为:Python+Django+Nginx+uWSGI+CentOS
1. 树莓派基本设置
树莓派我选用的是3B+(现在最新的应该是4B),当时在大创基地做项目时在亚博智能他们家买的,就是下面这款,感兴趣的话可以从这进入淘宝店铺。
在此之前,你可能还需要准备显示屏、HDMI数据线、稳定的电源(建议使用USB接口的)、网线(可选)、TF卡(可以稍微大一点,以备后需)、读卡器。
上述的硬件材料准备好之后,接下来就要开始配置了。
1.1 安装Linux
操作系统我用的是CentOS7.7,系统镜像文件选择,以及所需的SD卡格式化工具、镜像写入工具的下载及使用我就不一一说明了,可以参考网上的教程1,教程我会放到最下面,下载地址可以点击链接直接进入官网下载,也可去我的百度网盘下载(提取码:g9e6)。
我安装的镜像文件名字为CentOS−Userland−7−armv7hl−RaspberryPI−Minimal−1908−sda.raw.xzCentOS-Userland-7-armv7hl-RaspberryPI-Minimal-1908-sda.raw.xzCentOS−Userland−7−armv7hl−RaspberryPI−Minimal−1908−sda.raw.xz(不带桌面环境,如果想要带桌面环境的可以选择Gnome版本或KDE版本,现在官网最新的是2003),解压之后就是rawrawraw格式的文件。
注:一定要选择支持树莓派的镜像文件。
1.2 配置树莓派
- 将SD卡扩展至实际容量
# rootfs-expand
注:系统安装后,默认只有两个多G的内存,建议使用上述命令进行扩容,我参考过其他博客,使用其他扩容方法会出现扩容失败,当然也可能是因为系统不同。
- 配置WIFI,或者直接命令nmtuinmtuinmtui,选择Activate a connection(选择连接),再选择相应的wifi,输入密码,即可连接
# nmcli d
# nmcli d wifi # 查看周围的wifi
# nmcli d wifi connect yourSSID password 'yourpassword' # 连接wifi
# nmcli d show wlan0 # 查看wlan0的状态
- 启动SSH服务
# systemctl start sshd # 启动ssh
# systemctl status sshd # 查看ssh状态
# systemctl enable sshd # 设置开机自动启动
- 更新系统软件包、安装软件管理包、安装下载工具
# yum update –y
# yum -y groupinstall "Development tools"
# yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel
# yum -y install wget
- 同步时间
# yum install ntp
# ntpdate pool.ntp.org
注:建议用上述命令,我用其他命令同步时间时出现了时间同步无效。
2. 安装Python3
- 下载Pyhton3到/usr/local目录
# wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
- 解压之后安装到指定路径
# ./configure --prefix=/usr/local/python3
- 使用make命令安装后建立软链接方便在终端中直接使用python3
# ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
- 安装Python包管理工具pip
# ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3
3. 配置虚拟环境
- 安装virtualenv,方便不同版本项目管理
# pip3 install virtualenv
- 建立软链接
# ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
- 安装成功在根目录下建立两个文件夹,主要用于存放env和网站文件的
# mkdir -p /data/env
# mkdir -p /data/wwwroot
- 切换到/data/env/下,创建指定版本的虚拟环境
# cd /data/env/
# virtualenv --python=/usr/bin/python3 pyweb
- 启动虚拟环境
# cd /data/env/pyweb/bin
# source activate
- 退出虚拟环境
# deactivate
4. 安装MySQL
- 下载并安装MySQL官方的 Yum Repository
# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
- 使用上面的命令就直接下载了安装用的Yum Repository,直接yum安装
# yum -y install mysql57-community-release-el7-10.noarch.rpm
- 安装MySQL服务器
# yum -y install mysql-community-server
- 首先启动MySQL
# systemctl start mysqld.service
- 查看MySQL运行状态,若出现active (runing)则表示MySQL已启动
# systemctl status mysqld.service
- 在日志文件中找出root密码
# grep "password" /var/log/mysqld.log
- 进入数据库
# mysql -uroot –p
- 更改密码
# ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
5. 升级Sqlite(可选)
若MySQL安装失败,可选择使用CentOS内置的数据库Sqlite,由于Django2.2需要Sqlite的版本至少为3.8.3(CentOs默认版本是3.7.17),因此需要升级Sqlite。若Sqlite安装失败,可选择降低Django版本(2.1.8)。
- 升级sqlite3 软件的版本,升级到最新的版本3.2.9
# wgets https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz
- 解压之后进行配置
# ./configure --prefix=/usr/local/
- 编译安装
# make && make install
- 备份旧的sqlite3
# mv /usr/bin/sqlite3 /usr/bin/sqlite3.bak
- 把新版本的sqlite3链接到原来的位置
# ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3
- 更新环境变量
# export LD_LIBRARY_PATH="/usr/local/lib">> ~/.bashrc
# source ~/.bashrc
6. 安装Django和uWSGI
- 安装Django和uWSGI
# pip3 install django=2.2.1(2.1.8)
# pip3 install uwsgi
- 建立软链接
# ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
- 开启端口(添加8001端口并重新加载策略配置)
# firewall-cmd --zone=public --add-port=8001/tcp --permanent
- 查看开放的端口及进程
# netstat -tunlp
- 在网站项目的根目录下/data/wwwroot/Benxi创建一个名为test_uwsgi.py的文件,文件内容如下:
def application(env, start_response):start_response('200 OK', [('Content-Type','text/html')])return [b"Hello World"]
- 输入如下命令启动uWSGI,此时在电脑浏览器输入10.3.102.176:8001然后回车,即可看到浏览器显示Hello World字样,代表服务器可以接收来自浏览器的请求了
# uwsgi --http :8001 --wsgi-file /data/wwwroot/Benxi/test_uwsgi.py
注:这里的ip地址不一样是因为我在两个网络下测试的,实际的ip地址取决于当时所连接的网络,没记错的话一个是以太网,另一个是无线网。
- 在网站项目的根目录下创建名为benxi_uwsgi.ini的配置文件,内容如下:
[uwsgi]
chdir = /data/wwwroot/Benxi
home = /data/env/pythonweb
module = Benxi.wsgi:application
master = true
processes = 4
harakiri = 600
max-requests = 5000
socket = 127.0.0.1:8001
uid = 1000
gid = 2000
pidfile = uwsgi.pid
daemonize = uwsgi.log
vacuum = true
- 通过以下命令即可以启动uWSGI及端口
# uwsgi --ini /data/wwwroot/Benxi/benxi_uwsgi.ini
- 此时在浏览器输入10.3.102.176:8001,可以看到网站已经加载进来,只是缺少了静态文件
7. 安装及配置Nginx
- 安装epel库
# yum install epel-release –y
- 安装Nginx库
# yum -y install nginx
- 启动Nginx服务(确保80端口已经开启且没被占用,如果没开启,请参考上面的配置通过防火墙打开端口)
# systemctl start nginx.service
或
# service nginx start
- 配置Nginx,Nginx一般默认安装好的路径为/usr/local/nginx,更改nginx.conf文件如下:
#user nobody;
worker_processes 1;#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k;#gzip on;server {listen 80;server_name localhost;charset utf-8;client_max_body_size 75M;location /static {alias /data/wwwroot/Benxi/static;proxy_connect_timeout 18000; proxy_send_timeout 18000; proxy_read_timeout 18000; }location /media {alias /data/wwwroot/Benxi/media;}location / {uwsgi_pass 127.0.0.1:8001;include /usr/local/nginx/conf/uwsgi_params;}
}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}
- 启动uWSGI和Nginx,此时在浏览器输入IP地址即可访问到网站
# uwsgi --ini /data/wwwroot/Benxi/benxi_uwsgi.ini
# service nginx start
8. 连接校园网
当时需要答辩,所以就把服务器挂在了校园网下,但我们学校11点半校园网就断了,第二天还要手动去输入自己的学号及密码来登录校园网,所以就写了一个脚本让服务器一键登录校园网。这样学校内的师生只要连接上校园网或挂上VPN就可以访问到这个网站了。
最初的时候接触Python就是因为爬虫,所以习惯性的打开浏览器F12、F5来分析http请求,很简单一个请求,没有涉及到任何加密,切(ˉ▽ ̄~)。
脚本如下:
import requestsif __name__ == '__main__':url = 'http://10.2.5.251:801/eportal/?c=Portal&a=login&callback=dr1576830148028&login_' \'method=1&user_account=(学号)%40unicom(服务商, 这里是中国联通)&user_password=(密码)&wlan_user_ip=(树莓派的ip地址)' \'&wlan_user_mac=(树莓派的MAC信息)&wlan_ac_ip=&wlan_ac_name=&jsVersion=3.0&_=1576830011640'response = requests.get(url)print(response.status_code)
9. 远程测试
最终的效果就是下面这样:
结束语
“期盼已久”的实习终于来了,果不其然,由于疫情期间学校严防严控,安排校内统一集中实习,还是在教室(’∇’)シ┳━┳。然后下午开会看到实习内容里有Python和Django,就想到了以前做的这个项目,所以就跟着当时写的报告,写下了这篇博客,哈哈哈,算是简单回顾一下吧(ง •̀_•́)ง
记得当时遇到了好多问题,参考了好多篇博客,具体的参考链接也不记得了,在此感谢博主们的分享(✪ω✪)!
参考教程
树莓派3系统CentOS安装教程 ↩︎
基于树莓派的Web服务器相关推荐
- 基于树莓派的网络打印服务器
网络上关于"基于树莓派的网络打印服务器"的资料非常多了,感谢大神们的无私分享,才能让技术不停传递,造福所有人! 建这个服务器的起因和目的很简单: 1. 手边有树莓派 2. 家里有闲 ...
- LVS详解及基于LVS实现web服务器负载均衡
前言 LVS(Linux Virtual Server)Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.通过LVS提供的 ...
- linux对web后端重要吗,基于Linux的Web服务器性能测试
摘要:Linux作为一种免费的开源操作系统,正越来越受到人们的重视.随着稳定的Linux2.4内核发布日期的临近和IntelIA-64构架的推出,Linux在服务器操作系统市场所占的份额会继续扩大,那 ...
- 基于Linux的web的中期报告,基于Linux的Web服务器设计论文中期检查.doc
附件3: 长沙师范学院 届毕业论文(设计)课题任务书 课题题目基于Linux的Web服务器设计指导教师李列文职 称副教授学生姓名叶润凯系(部)/专业信工系/计应学 号2014541930121课题主要 ...
- 2022年,树莓派搭建web服务器,加各种bug的解决
2022年,树莓派搭建web服务器,加各种bug的解决 配置: 1.树莓派3B+ 2.树莓派系统:2022-1-28 桌面版 文章目录 2022年,树莓派搭建web服务器,加各种bug的解决 一.首先 ...
- 基于linuxunix高性能web服务器架构思路分析
随着21世纪互联网的快速发展以及web2.0的诞生,最初web服务器已经不能满足我们的需求.而现在我们要考虑的不再仅仅是web服务器以及数据库服务器这么简单,我们所需要考虑的就是设计出一套高性能web ...
- Executor详细介绍 打造基于Executor的Web服务器
继续并发,貌似并发的文章很少有人看啊~哈~ 今天准备详细介绍java并发包下的Executor,以及Java提供了很多灵活的且极其方便的线程池的创建. 嗯,那就慢慢说,大家肯定都学过Socket,Ja ...
- .NET5 开发手机提词应用,基于内嵌Web服务器及PowerPoint自动化
项目说明 我使用电脑录制视频教程的时候,会展示PPT给观众,同时也有一些提示性的文字给我自己看.这就类似于很多电视节目录制现场的"提词器". 节目录制现场的提词器 在PC环境下,P ...
- 怎么用树莓派制作web服务器,用树莓派做web服务器,靠谱吗?
有点想入门树莓派,然后做一个小web服务器,放在学校内网. 大家有做过类似的事情吗? 做过,自己用做测试的话是没什么问题的,而且非常小巧,携带方便.买的时候注意还要搭配这三个配件 1 可以用的无线网卡 ...
最新文章
- 汇编: 用int中断改变ip,实现loop循环
- 理解图像傅里叶变换的频谱图
- python生成json_python中如何进行json转化
- TensorFlow windows安装
- 读博的经验对我读学位期间指导最大的文章
- 视频流调试过程(海康威视+Kurento)
- Hard Link 与 Symbolic Link
- 2012 快速减肥 美女舒淇的懒人减肥法
- SocialBook帮你扫除网红营销乱象
- origin处理多组红外数据_【图文】用Origin作多组红外数据图
- SSAO By Computer Shader(三)
- 【UML】——活动图
- 计算机操作系统 直接地址 多级间接地址
- Java中给txt文本中写入数据
- 麦克风输入电路设计问题
- Origin绘图格式细节
- linux下的c语言实现象棋,用c语言+API制作象棋界面
- NUMECA FINE/Turbo16 安装教程
- HTML 动画、3D学习之制作魔方练习
- vue 将文件url 改成文件流下载