文章目录

  • 前言
  • 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,就想到了以前做的这个项目,所以就跟着当时写的报告,写下了这篇博客,哈哈哈,算是简单回顾一下吧(ง •̀_•́)ง

记得当时遇到了好多问题,参考了好多篇博客,具体的参考链接也不记得了,在此感谢博主们的分享(✪ω✪)!

参考教程


  1. 树莓派3系统CentOS安装教程 ↩︎

基于树莓派的Web服务器相关推荐

  1. 基于树莓派的网络打印服务器

    网络上关于"基于树莓派的网络打印服务器"的资料非常多了,感谢大神们的无私分享,才能让技术不停传递,造福所有人! 建这个服务器的起因和目的很简单: 1. 手边有树莓派 2. 家里有闲 ...

  2. LVS详解及基于LVS实现web服务器负载均衡

    前言 LVS(Linux Virtual Server)Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.通过LVS提供的 ...

  3. linux对web后端重要吗,基于Linux的Web服务器性能测试

    摘要:Linux作为一种免费的开源操作系统,正越来越受到人们的重视.随着稳定的Linux2.4内核发布日期的临近和IntelIA-64构架的推出,Linux在服务器操作系统市场所占的份额会继续扩大,那 ...

  4. 基于Linux的web的中期报告,基于Linux的Web服务器设计论文中期检查.doc

    附件3: 长沙师范学院 届毕业论文(设计)课题任务书 课题题目基于Linux的Web服务器设计指导教师李列文职 称副教授学生姓名叶润凯系(部)/专业信工系/计应学 号2014541930121课题主要 ...

  5. 2022年,树莓派搭建web服务器,加各种bug的解决

    2022年,树莓派搭建web服务器,加各种bug的解决 配置: 1.树莓派3B+ 2.树莓派系统:2022-1-28 桌面版 文章目录 2022年,树莓派搭建web服务器,加各种bug的解决 一.首先 ...

  6. 基于linuxunix高性能web服务器架构思路分析

    随着21世纪互联网的快速发展以及web2.0的诞生,最初web服务器已经不能满足我们的需求.而现在我们要考虑的不再仅仅是web服务器以及数据库服务器这么简单,我们所需要考虑的就是设计出一套高性能web ...

  7. Executor详细介绍 打造基于Executor的Web服务器

    继续并发,貌似并发的文章很少有人看啊~哈~ 今天准备详细介绍java并发包下的Executor,以及Java提供了很多灵活的且极其方便的线程池的创建. 嗯,那就慢慢说,大家肯定都学过Socket,Ja ...

  8. .NET5 开发手机提词应用,基于内嵌Web服务器及PowerPoint自动化

    项目说明 我使用电脑录制视频教程的时候,会展示PPT给观众,同时也有一些提示性的文字给我自己看.这就类似于很多电视节目录制现场的"提词器". 节目录制现场的提词器 在PC环境下,P ...

  9. 怎么用树莓派制作web服务器,用树莓派做web服务器,靠谱吗?

    有点想入门树莓派,然后做一个小web服务器,放在学校内网. 大家有做过类似的事情吗? 做过,自己用做测试的话是没什么问题的,而且非常小巧,携带方便.买的时候注意还要搭配这三个配件 1 可以用的无线网卡 ...

最新文章

  1. 汇编: 用int中断改变ip,实现loop循环
  2. 理解图像傅里叶变换的频谱图
  3. python生成json_python中如何进行json转化
  4. TensorFlow windows安装
  5. 读博的经验对我读学位期间指导最大的文章
  6. 视频流调试过程(海康威视+Kurento)
  7. Hard Link 与 Symbolic Link
  8. 2012 快速减肥 美女舒淇的懒人减肥法
  9. SocialBook帮你扫除网红营销乱象
  10. origin处理多组红外数据_【图文】用Origin作多组红外数据图
  11. SSAO By Computer Shader(三)
  12. 【UML】——活动图
  13. 计算机操作系统 直接地址 多级间接地址
  14. Java中给txt文本中写入数据
  15. 麦克风输入电路设计问题
  16. Origin绘图格式细节
  17. linux下的c语言实现象棋,用c语言+API制作象棋界面
  18. NUMECA FINE/Turbo16 安装教程
  19. HTML 动画、3D学习之制作魔方练习
  20. vue 将文件url 改成文件流下载

热门文章

  1. matlab求逆矩阵(分数表示)
  2. 从CPU与GPU利用率,到GPU与CPU差别的思考
  3. 我的世界服务器指定等级指令,[教程]我的世界服务器指令大全介绍
  4. Tomcat调优(详细)
  5. 巧学宾语从句――宾语从句语法详解 [宾语从句歌诀]
  6. 用python实现放烟花
  7. 图片怎么转PDF文件?三种免费转换方法集合!
  8. 【Python绘图小课堂】词云韦恩图(上篇-分词)
  9. oracle 日期格式化
  10. 「Adobe国际认证」PHOTOSHOP选区是什么以及为什么要使用选区?