树莓派搭建LAMP和FTP服务器

  • 前言
  • 搭建网站需要解决的问题
    • 如何使外网能够访问网站
    • 如何部署网站
    • 如何让动态IP绑定域名
    • 树莓派3B+能否搭建网站的同时搭建CS服务器
  • 开始搭建
    • 树莓派3B+系统安装
    • 安装LAMP套件
    • 安装vsftpd
    • 关闭防火墙和selinux
    • DDNS服务
    • nginx反向代理

前言

不久前,从网上购买了一个树莓派3B+,原计划刷入openwrt作路由器使用的,但遇到了问题,原因在于截至2019年2月16日,是没有支持树莓派3B+版本的openwrt固件的,树莓派3B(没有+)到是支持。做不了openwrt路由也不能浪费几百块大洋吧,所以就打算用来作LAMP服务器,搭建一个网站,功耗5W左右,自带WIFI,供电后就可以24小时运行。

搭建网站需要解决的问题

使用树莓派3B+搭建LAMP服务器和部署网站,首先要考虑需不需要让外网访问以及网站如何部署等问题,解决了这些问题才能进行更深入的开展部署工作。

如何使外网能够访问网站

因为我不像搭建的网站只有局域网浏览,还想更多的外网用户能够访问网站内容,所以我搭建的网站必须能够对外提供服务。对于家庭网络,FRP内网穿透是使用较多的方案,此外还有花生壳Nat123等,其中FRP内网穿透比较吃技术能力,而花生壳和Nat123虽然较傻瓜式部署,但价格昂贵。
经过再三考虑,以上方案我都没有采用。不进行内网穿透的话,对于家庭宽带用户,只能申请公网IP地址,经过网上搜索家庭宽带如何申请公网IP后,发现了只要拨打运营商客户电话申请开通就可以了。通过电话申请,2天后,运营商把我家庭宽带从局域网IP调整成了公网IP地址。
得到了公网IP地址,但公网的808080这两个百度、谷歌搜录的网站端口,均被运营商屏蔽了。为了使百度、谷歌能够搜录网站,对外暴露的端口只能是80端口和8080端口。然后我决定再购买一个便宜的VPS服务器(配置要求不用太高,但网络流量和转发能力必须稳定),通过nginx反向代理的方法,外网访问nginx代理服务器,nginx通过反向代理,将请求转向树莓派3B+,其中nginx代理服务器开放80端口,树莓派3B+开放非80端口,如1990端口。这样,既省钱又能发挥树莓派3B+最大使用率。当然,路由器应该配置好端口转发

如何部署网站

部署网站,可以采用SMB文件夹共享、FTP上传、宝塔BT文件管理等方法进行网站部署。其中宝塔BT文件管理最为简单易容,且安全性、稳定性较高,但遗憾的是,宝塔BT仅支持X64架构的CPU或系统,而树莓派3B+采用的ARM架构的CPU,且安装的raspbian操作系统不支持X86架构的程序,所以只能放弃采用宝塔BT管理文件。而SMB文件夹共享方法时,windows和linux之间的传输速度实在太慢,最后采用了FTP的方式上传部署网站。

如何让动态IP绑定域名

家庭网络环境下通常会有路由器作为网络的出口,一些较新的智能路由器都会有一项叫做DDNS(即动态DNS)的功能,但通常支持的DDNS服务商较少,常见支持的有花生壳、NoIP等,当然,价格不是太贵,就是使用不方便(如每个月要签到等)。所以,我这里不使用路由器提供的DDNS功能,但为了能够使树莓派3B+能够自动把动态IP自动更新绑定域名,所以我找了一个可以通过HTTP协议更新动态IP的DDNS服务商,www.pubyun.com,在这里推荐的原因是使用非常方便,不需要安装第三方软件,只需通过crontab定时执行curl命令访问pubyun提供的一个HTTP接口即可动态更新IP到指定的域名,pubyun的官方文档提供了详细的使用说明和参数配置,非常方便。

树莓派3B+能否搭建网站的同时搭建CS服务器

答案是可以,但只有一种可能,就是花钱买一款叫做exagear desktop的虚拟机,能够使树莓派3B+(arm架构)运行x86软件(steamcmd和cs服务器程序都是x86架构的程序),当然还有qeum、wine等其他方法,但性能只有exagear desktop能达到搭建服务器的要求。exagear desktop价格昂贵,能顶的上我重新购买一台x86架构的主机,实在不划算,所以在树莓派3B+上搭建CS服务器,在没有exagear desktop较好的替代方案前,实际意义不大或者说不必要浪费钱。

开始搭建

解决了以上的问题后,就开始搭建按照此前的思路进行搭建吧。

树莓派3B+系统安装

要安装LAMP环境,当然要先装L(Linux)系统了,在树莓派3B+官方网站中,官方推荐的是raspbian系统,我这里也是用了这个系统,能够减少其他系统不兼容导致的一些后果。将下载好的raspbian系统镜像文件通过Win32 Disk Imager写入到SD卡,插入树莓派3B+,插入网线接入路由,开机。等几分钟系统启动完成,登录路由器管理界面,找到树莓派3B+的IP地址,通过Putty软件登录(默认账号为pi,默认密码为raspberry),登录后,就可以通过linux命令进行管理了。
当然,为了能够较好的使用,推荐还是为树莓派3B+接入显示器、键盘和鼠标。推荐将默认的账号pi删除,配置root账号的密码,和允许root账号登录。另外,推荐关闭图形界面,因为作为LAMP服务器,通过putty工具进行远程管理即可,无需使用vnc等工具进行图形化管理。

# 设置root密码
sudo passwd root# 解锁root账号
sudo passwd --unlook root# 切换到root账号
su root# 允许root远程登录
# 方法是修改SSH配置文件。
# 文件位置:/etc/ssh/sshd_config
# 找到#PermitRootLogin prohibit-password
# 将#去掉,将prohibit-password全部删掉,改为yes。保存!保存!保存!# 删除pi默认账号
userdel pi# 重启后使用root登录,进行一些初始化配置
# 首先将更新源切换到清华大学镜像
echo -e "deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi \n deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi" > /etc/apt/sources.list
echo -e "deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/ stretch main ui" > /etc/apt/sources.list.d/raspi.list# 更新系统(输入该条命令后,选择update)
raspi-config

安装LAMP套件

安装方法和常规的方法一样,只是要注意,新版的raspbian只支持php7,没有php5

# 安装apache2
apt install apache2# 安装mysql
apt install mysql-server# 安装php
apt install php
apt install php-mysql

另外,为了方便使用mysql,推荐装上phpmyadmin

apt install phpmyadmin
ln -s /usr/share/phpmyadmin/ /var/www/html/

如果打开不了的话,查看下php-gettextphp-mbstring这些插件是否也安装上了

安装vsftpd

vsftpd是一个ftp服务器,可以搭配filezilla使用,将本地网站部署到树莓派3B+,实现网站的部署。

apt install vsftpd

然后就是配置root账号登录vsftpd服务器,我使用root权限登录主要是途方便,因为有路由器屏蔽外网访问ftp服务器的21端口,使用起来比较放心安全性问题。

nano /etc/vsftpd.conf

修改vsftpd.conf配置文件,将相应的配置项改为下边的值,其他保持默认

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=000

然后解锁root账号登录权限

nano /etc/ftpusers

将root从禁止列表中删除

service vsftpd restart

重启ftp服务器后,使用filezilla客户端工具登录进行文件管理,另外,如果不小心删除了默认的配置文件找不回来的话,可以通过彻底删除再重装的办法找回(不彻底删除的话,重装时,不自带配置文件)

apt purge vsftpd
apt install vsftpd

关闭防火墙和selinux

如果以上安装成功访问不了,很有可能是防火墙和selinux的问题,我为了途方便,不对这两项进行配置,仅关闭禁用。

systemctl stop firewalld
systemctl disable firewalldsetenforce 0
nano /etc/selinux/config
# 将SELINUX设置为disabled,重启!

DDNS服务

首先,www.pubyun.com,在该DDNS服务商注册一个免费的动态域名,然后在树莓派3B+配置定时任务,定时更新外网IP到需要绑定的动态域名。

crontab -e
# 输入 crontab -e 命令后,在crontab编辑器中,添加下边这条命令,保存!
0 0/10 * * * ? * curl --user laura:woaihuangligui "http://members.3322.net/dyndns/update?hostname=laura.pubyun.org"
# 保存成功后,就会每个10分钟更新一次动态IP,保持域名指向的动态IP的有效性

其中需要修改的项有:
laura是pubyun注册的账号
woaihuangligui是pubyun的账号密码
laura.pubyun.org是pubyun免费注册的动态域名

nginx反向代理

为解决80端口和8080端口被运营商屏蔽问题,使外网能够访问树莓派3B+部署的网站,且能够被百度、谷歌等各大搜索引擎收录,我用了nginx反向代理的方法来实现这个目标。
首先,需要买一个vps服务器,vps服务器应该具备公网IP地址、支持nginx运行、访问速度快、流量大或者不限。当然,在满足以上条件时,肯定是越便宜约好了,截至2019年2月16日,我找到满足条件的vps,每年需要88元人民币。
我选的vps是centos服务器,以下nginx安装和配置过程以centos进行演示:

yun update
wget http://nginx.org/download/nginx-1.13.6.tar.gz
tar -zvxf nginx-1.13.6.tar.gz
cd nginx-1.13.6
./configure --with-http_ssl_module --with-http_gzip_static_module
yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
make
make install

nginx安装好时,执行程序位为/usr/local/nginx/sbin/nginx,配置文件位为/usr/local/nginx/conf/nginx.conf,安装好先测试运行。

cd /usr/local/nginx/sbin/
./nginx

如果运行的时候不带-c参数,那默认的配置文件为/usr/local/nginx/conf/nginx.conf,运行成功了,打开浏览器输入IP地址,显示nginx欢迎画面表示成功安装了。
测试运行成功之后,为nginx配置systemctl脚本,实现开机自动启动。
首先,创建/usr/lib/systemd/system/nginx.service文件,内容如下:

[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop[Install]
WantedBy=multi-user.target

然后,通过systemctl enable nginx.service命令使nginx开机自动启动,另外其他的systemctl命令如下:

# 使文件生效
systemctl daemon-reload# 启动nginx
systemctl start nginx# 关闭nginx
systemctl stop nginx# 重启nginx
systemctl restart nginx# 开机启动
systemctl enable nginx

然后就是配置nginx反向代理了,下边是我的配置,根据实际情况进行修改即可。

#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;#gzip  on;upstream raspberry {server laura.pubyun.org:18800;}server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass http://raspberry;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;proxy_redirect default;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

其中里边的upstream就是配置反向代理的,server指向树莓派3B+搭建的网站,laura.pubyun.org是通过DDNS技术自动更新绑定的,18800是apache2的监听端口(路由器端口转发也需要配置)

upstream raspberry {server laura.pubyun.org:18800;
}

然后再注册另一个顶级域名,将A记录指向nginx反向代理服务器之后,访问这个顶级域名,就会访问到树莓派3B+部署的网站了。另外,为了网站能够正确获取到客户端(浏览器)的IP地址(默认情况下,树莓派3B+网站获取到的是nginx反向代理服务器的IP地址),应该如上述配置中,在location /中加上下边的配置项:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
proxy_redirect default;

通过以上操作基本完成了开始的目标,感谢您的观看,欢迎留下评论,相互学习。

树莓派搭建LAMP和FTP服务器相关推荐

  1. 利用Filezilla在局域网内搭建自己的FTP服务器

    利用Filezilla在局域网内搭建自己的FTP服务器 一.软件 Filezilla server Filezilla client 二. Filezilla client安装 三. Filezill ...

  2. win10中搭建并配置ftp服务器的方法(实现多用户登录整合版

    源地址 win10中搭建并配置ftp服务器的方法(实现多用户登录整合版) 一.ftp的搭建 二.ftp的配置 三.用户配置(实现多用户登录) 一.ftp的搭建 1.首先我们需要启动IIS服务 第一步: ...

  3. PC上搭建简单的FTP服务器(仅用于局域网)

    PC上搭建简单的FTP服务器(仅用于局域网) 转载请附原文链接:http://blog.fandong.me/2017/07/16/PC-FTP/ 第一步:打开控制面板选择卸载程序(查看方式为类别) ...

  4. 树莓派搭建自动追番服务器详细教程|树莓派|Jellyfin|AutoBangumi|qBittorrent

    树莓派搭建自动追番服务器教程|树莓派|Jellyfin|AutoBangumi|qBittorrent 流程简介 准备工作 硬盘挂载 Jellyfin搭建 AutoBangumi部署 流程简介 本文主 ...

  5. win7系统ftp服务器搭建,win7系统 ftp服务器搭建

    win7系统 ftp服务器搭建 内容精选 换一换 为了保证使用私有镜像创建的新云服务器可以通过"用户数据注入"功能注入初始化自定义信息(例如为云服务器设置登录密码),请在创建私有镜 ...

  6. 用树莓派搭建全功能NAS服务器(01):树莓派基础操作OMV搭建

    写在前面 对于文件互传来说,局域网和云盘的操作总是独立的,而且很难将两者的优势合为一体.如果想要集多种优势为一体,那么NAS应该就是较为完美的解决方案了. 在这个系列中我们尽量跳过一些枯燥的理论知识, ...

  7. win10中搭建并配置ftp服务器的方法(实现多用户登录整合版)

    目录 一.ftp的搭建 二.ftp的配置 三.用户配置(实现多用户登录) 一.ftp的搭建 1.首先我们需要启动IIS服务 第一步:打开控制面板 第二步:点击"程序" 第三步:点击 ...

  8. suse ftp文件服务器搭建,SUSE下FTP服务器搭建

    FTP(File Transfer Protocol),是TCP/IP网络上两台计算机传送文件的协议,是在TCP/IP网络和Internet上最早使用的协议之一,属于网络协议组的应 用层.FTP客户机 ...

  9. 在本机搭建自己的ftp服务器--最简单的方法(详细教程)

    目录 前言 具体步骤 总结 加油各位( •̀ ω •́ )y 期待与君再相逢 前言 FTP服务器可以在局域网中快速传输文件,是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. F ...

  10. 在linux服务器搭建函数,linux ftp服务器搭建

    ftp服务器安装设置 文章篇幅较长内容主要有可以对以下的内容进行搜索 ***************************************************************** ...

最新文章

  1. java readunsignedint,int readUnsignedShort()
  2. 最简单的Docker镜像教程:从头基于空镜像scratch创建一个新的Docker镜像
  3. [机器学习] Boosting算法4 --- LightGBM介绍与分布式
  4. c mvc ajax 返回下拉框,SpringMVC之ajax+select下拉框交互常用方式
  5. 为同一个元素绑定多个不同的事件,并指向相同的事件处理函数方法
  6. 如何在CentOS上创建Kubernetes集群
  7. 转ubuntu下中文乱码解决方案(全)
  8. Ubuntu 批量修改图片大小
  9. 游程编码解密(C语言详解)
  10. 503 Service Temporarily Unavailable
  11. ❤ ❤html canvas面向对象的彩色小球❤ ❤
  12. 信息安全系统所需要遵循的基本原则有哪些?
  13. STM32U5,意法半导体新打造的超低功耗MCU旗舰版
  14. 【黄啊码】解决微信小程序showToast不显示
  15. 如何提高电商广告投放的转化率?
  16. 后端线上服务监控与报警方案
  17. vue2打包兼容ie11白屏报错问题汇总
  18. 大白话教你认识 Kafka 背后优秀的架构设计
  19. luci与页面的数据交互
  20. Android上传文件

热门文章

  1. MaNGOS开源魔兽世界服务端
  2. Qt字符串生成二维码功能
  3. Touchbar Pet 0.8.2 最新版 (Touch Bar触控栏养宠物)
  4. linux 字幕制作工具,Aegisub下载、安装和使用:Ubuntu字幕编辑软件
  5. 计算机网络网络适配器的作用是什么原因,Win10网络适配器在哪里对网络有什么影响 网络适配器出现各种故障的解决方法...
  6. NOIP 2018 兔纸旅游记
  7. oracle收款凭证做错月份,​上个月的银行凭证做错了怎么办
  8. 脸谱网下载_脸谱网对AR眼镜大胆愿景的最大障碍是信任
  9. 安卓开发日记APP史上最详细(SharedPreferences+Room)
  10. 今天是个好日子 12月17日