作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
巴勃罗·维拉斯达·普伊格伯的头像

巴勃罗·维拉斯拉达·普伊格伯

Pablo的BSCE意味着他在制作众多前端时拥有顶级编码标准. 他也是MongoDB认证开发人员和total Mentor.

Previously At

Backbase
Share

The Raspberry Pi 它是一种价格低至5美元的小型计算机,可以在上面运行许多不同类型的软件 构建许多不同的项目.

In this article, 我将指导您完成将其设置为家庭开发服务器并部署可以从网络外部访问的全栈JavaScript应用程序的过程. 这对于建立您自己的系统非常有用 远程数字工作区,或者只是为了控制用于开发的硬件.

这个树莓派家庭服务器需要什么?

虽然现在这是一个树莓派3教程,它 should 还在和模特一起工作,回到 第一代-如果你有一个旧的型号或树莓派零, 请在下面的评论中告诉我们你的经历.

除了树莓派板本身,您还需要:

  • Micro USB充电器
  • 一根以太网线
  • 一张microSD卡(最小8GB,最大32GB似乎也可以)

这些在初始设置期间也会派上用场:

  • A USB keyboard
  • HDMI线和显示器

树莓派操作系统:树莓派

在树莓派上安装操作系统很简单. 首先,使用计算机,将引导映像安装到microSD卡上. 然后只需将卡插入树莓派并从那里启动.

Raspbian Linux发行版是从哪里移植过来的 Debian 7.0 (Wheezy),是树莓派的官方操作系统,针对该设备的架构进行了优化. 虽然在Pi上运行你喜欢的操作系统还有其他选择, 我们将使用Raspbian,因为它很简单.

本教程已更新,适用于此版本(或更高版本)的Raspbian:

内核版本:#1 SMP Debian 4.9.110 - 3 + deb9u4 (2018-08-21)
内核版本:4.9.0-8-amd64

要安装Raspbian,请转到 官方下载页面 下载最新版本的zip文件.

然后,将microSD卡插入计算机的SD卡槽或适配器. 这取决于你的电脑操作系统, 请按照Raspberry网站上提供的说明进行操作 Linux, Mac OS, or Windows.

过程完成后, 从计算机中弹出SD卡并将其插入树莓派. 使用以太网电缆将树莓派连接到路由器, 插入Micro USB充电器, 启动树莓派.

对于初始配置,有两个选项:

  • 如果你有USB键盘和HDMI显示器,你可以把它们插到Raspberry上 Pi表示初始设置.
    • 一旦这些设备被插入,你的Pi应该能识别出来.
    • Pi第一次启动时,它会自动运行 raspi-config. 在第一次引导之后,您将需要运行 sudo raspi-config 以便配置设备.
  • 如果你没有,你可以使用SSH连接到你的树莓派:
    • 首先,您需要在本地网络中找到树莓派的IP地址. 这可以通过 连接到路由器的管理页面,或使用网络工具,如 nmap.
    • 一旦您获得了设备的IP地址,就可以从您的终端使用SSH连接到它 Putty 如果你用的是Windows的话). 默认用户为 pi,默认密码为 raspberry. 例如,如果IP地址是192.168.1.16, run ssh pi@192.168.1.16 并在提示时输入密码.
    • 连接上后,运行 sudo raspi-config.

raspi-config 我会告诉你最后的设置吗. 您可以配置所有选项,但最重要的是前两个:扩展文件系统, 确保操作系统有足够的SD卡存储空间, 并更改默认Pi用户的密码, 这样,您的服务器将被保护免受入侵者.

Raspi-config

在树莓派上安装一个Web服务器(Nginx)

接下来,您将安装web服务器. 我更喜欢Nginx,因为它有一个小的内存占用,因为它与Node配合得很好.Js(稍后将进行设置). 其他web服务器,如 Apache or lighttpd,也可以,但我们将使用Nginx进行演示.

在开始安装任何东西之前, 你需要通过在Pi上运行这些命令来确保一切都是最新的:

Sudo apt-get update
Sudo apt-get upgrade

然后你可以使用 apt-get:

安装nginx

安装完成后,通过运行以下命令启动服务器:

启动nginx服务

如果您不需要在前面的步骤中找出您的树莓派的本地IP, 是时候通过跑步来找到答案了 ifconfig. 以太网适配器的输出将在下面 eth0,并标记其本地IP地址 inet addr.

一旦你知道了IP地址, 你可以把电脑的浏览器指向它, 你应该在哪里看到默认的“欢迎使用Nginx”消息.

打开到Web:端口转发

如果您不打算从本地网络之外访问您的树莓派,则可以跳过此步骤. 但是对于那些想要从其他位置访问服务器的人来说,让我们确保这是可能的.

在典型的家庭网络中,连接到路由器的设备对外界是不可见的. 只有你的路由器可以从外部通过你的网络连接 external IP address. 您的路由器负责确定哪些传入流量被允许进入网络, 以及应该发送到哪个设备.

当本地网络中的设备发起连接时(例如, 当你在浏览器上打开一个网站时), 路由器将传入的响应流量识别为该连接的一部分, 让它通过. However, 如果路由器接收到不属于打开连接的传入流量(例如, 当外部设备试图启动与内部设备的连接时), 它将阻止传入的流量进入网络. 这是保护网络的重要安全特性!

那么如何从外部连接Pi呢? The answer is port forwarding. 路由器必须配置为允许特定端口上的传入连接通过, 然后被送到正确的设备上. By the default, HTTP协议使用80端口, SSH使用22端口, 这是你需要在路由器上打开的两个端口以便访问你的web应用程序, 并允许安全连接来管理您的服务器.

Port forwarding.

配置路由器打开和转发端口的步骤可能会根据您的互联网提供商和路由器的品牌而有所不同, but in any case, 您应该能够通过路由器管理页面的高级配置选项来完成它. 只需查找名称为“转发”的选项即可,端口转发,或“网络地址转换”.”

您需要为HTTP连接打开一个端口,为SSH打开另一个端口. 其基本思想包括将地址指向这两个外部端口的数据转发到您的树莓派, 网络流量到Nginx监听的80端口, 和SSH流量到端口22, SSH服务器接受来自外部计算机的连接. 下面是一个路由器配置页面的示例:

端口转发配置表.

端口转发配置如果您的树莓派的内部IP地址是 192.168.1.16. 所有进入端口80或22的流量都被转发到这个内部地址.

您可以通过简单的命令来确定路由器的外部IP地址 在谷歌上输入“我的ip地址是什么”. 如果你离开了路由器的网络, 您可以通过打开SSH连接来测试端口转发是否正常工作 ssh pi@{外部IP地址}. Likewise, HTTP端口转发可以通过在浏览器的地址栏中输入外部IP地址来测试. 只要记住,端口转发允许任何人从外部访问这些端口上的设备,如果他们知道你的路由器的外部IP.

如果您没有静态IP,那么您可以设置动态DNS. 这是一个非常简单的步骤. 您可以从路由器设置动态DNS,也可以为您的树莓派配置动态DNS. 我不打算在这里介绍如何配置DDNS,但是 BitPi.在这方面,公司有一个很好的教程 if needed.

安装框架:全栈JavaScript

你可以在Nginx上运行大多数web框架,但让我们看看如何使用JavaScript实现全栈. 为此,您需要安装 Node.js and MongoDB.

Nowadays, Node.js很容易安装到树莓派上:

安装nodejs

安装完成后,您可以通过运行来检查它是否正常工作 node -v.

现在你可以安装MongoDB,只需输入:

Sudo apt-get install mongodb

请注意,如果您需要关闭树莓派, 为了避免数据库损坏,你需要先关闭服务:

停止mongodb服务

Deploy Your App

您可以在本地机器上进行开发,然后将更改推送到BitBucket上的Git存储库. 因为Raspbian自带预安装的Git, 然后,您可以将最新的应用程序代码拉到设备上并运行它.

支撑项目

首先,让我们设置一些应用程序代码并将其推送到Git存储库. 启动应用程序的方法有很多,但我最喜欢的方法之一是 generator-angular-fullstack,它同时支撑服务器和客户端代码.

Install generator-angular-fullstack 在您的计算机上:

NPM install -g generator-angular-fullstack

为您的应用程序创建一个新目录:

mkdir my-app
cd my-app

然后构建应用程序:

你的angular-fullstack my-app

创建存储库并推送代码

现在在BitBucket中创建一个存储库, 如下所述. 然后设置本地目录:

git init
Git远程添加origin git@bitbucket.org:USER/REPO.git

所以你可以提交和推送代码:

git add .
git commit -m 'Initial commit'
Git push -u origin master

发电机是和 grunt-build-control 插件,它允许您将构建代码提交到存储库中的特定分支. 只需将BitBucket的配置添加到 Gruntfile.js 在应用程序的根目录中:

buildcontrol: {
   options: {
      dir: 'dist',
      commit: true,
      push: true,
      connectCommits:假的,
      消息:'从提交% sourccommit %在分支%sourceBranch%上构建% sourcname %'
   },
   bitbucket: {
      options: {
         远程:“git@bitbucket.org:USER/REPO.git',
         branch: 'build'
      }
   }
},
// ...

Now run:

grunt build

…来创建分发文件夹,然后输入:

繁重buildcontrol: bitbucket都

提交代码并将其推送到存储库中的构建分支.

生成SSH密钥

现在您已经托管了代码. 然后才能将其部署到树莓派上, 您需要为树莓派生成SSH密钥并将其添加到您的BitBucket帐户中. 我们将快速完成这一步,但如果您有任何问题,请按照 BitBucket guide. 因此,重新登录到您的树莓派终端,并生成公钥/私钥对:

ssh-keygen

然后,启动代理:

ssh-agent /bin/bash

并将密钥添加到代理中:

ssh-add /home/pi/.ssh/id_rsa

现在只需要输出公钥的内容:

cat /home/pi/.ssh/id_rsa.pub

所以你可以复制粘贴到BitBucket.

在BitBucket中,点击你的头像,然后转到 Manage account. Under SECURITY, find SSH keys,单击按钮 Add key.

克隆存储库

在哪里放置你的应用程序的代码没有一个惯例,但你可以创建一个 /var/www 目录,并把所有的项目.

cd /var
sudo mkdir www

避免使用:避免使用 sudo 当您想要在web浏览器中放置文件时, 您可以将所有者更改为您的Pi用户, and the group to www-data,它被Nginx使用:

sudo chown -R pi:www-data
cd www

现在,你可以克隆仓库的构建分支并安装依赖项:

Git克隆git@bitbucket.org:USER/REPO.Git——分支构建——单分支
cd REPO
NPM install——production

一旦完成,你就可以启动你的应用,将环境设置为生产环境:

export NODE_ENV=production; node server/app.js &

现在,将您的计算机浏览器指向设备的IP地址,以检查它是否有效.

真希望你有个自己的开发服务器? 你可以,用#RaspberryPi.

配置Nginx反向代理

要使您的应用程序从外部可访问,还剩下一个步骤. 虽然Nginx监听端口80, 它将在哪里接收你的Pi的HTTP请求, Node应用程序本身正在侦听不同的端口(例如, port 8080). 因此,您需要配置Nginx作为 reverse proxy识别针对应用程序的请求,并将其传递给Node.

Nginx将它所服务的每个应用程序的配置文件保存在 sites-available folder:

cd /etc/nginx/sites-available /

在这里,你可以复制 default 配置文件和编辑在您方便:

Sudo cp默认my-app
Sudo nano my-app

最终的配置文件应该是这样的,Nginx作为Node的代理.js server:

server {
   listen 80;
   root /var/www/my-app/;                  # identifies the location of the application you are configuring
   server_name我的程序.dev;                 # identifies the hostname used by this application's traffic
   location / {
      proxy_pass http://localhost:8080/;   # configures the back-end destination for this traffic
   }
}

控件中创建一个符号链接,以启用此配置 sites-enabled 文件夹,Nginx在运行时查找活动配置:

/etc/nginx/sites-enabled/my-app

然后重新加载服务来激活这些更改:

重新加载nginx服务

此时,您的应用程序已经准备好接收用于 my-app.dev 域(感谢 server_name我的程序.dev 您在上面配置的指令). 您需要解决的最后一个问题是如何使您从外部发送的流量匹配此域名. 虽然你可以买一个域名,并把它指向你的IP,但是 hosts 文件来拯救它,使它变得不必要.

在您将访问站点的工作站上, 只需添加路由器的外部IP地址, 并将其与主机名匹配 my-app.dev. 生成的任何HTTP流量 my-app.dev 然后将其直接发送到您的路由器,并在 Host HTTP header.

在Windows上,具有管理员权限,您可以编辑位于 c: \ windows \ system32系统\司机等\ \主机 用记事本. 在Linux和Mac上,您可以使用终端 Sudo nano /etc/hosts and Sudo nano /private/etc/hosts respectively.

##
# Host Database
#
# localhost用于配置loopback接口
#当系统启动时. 不更改此条目.
##
127.0.0.1本地主机
255.255.255.255年broadcasthost
:: 1              本地主机

212.124.126.242 my-app.添加您的主机名到列表中

What’s Next?

现在一切都准备好了, 您可以在Raspberry Pi上部署任意数量的应用程序, and install forever or pm2 保持你的节点.js servers alive.

记住,如果出了什么差错, 你可以擦除SD卡,然后重新开始!

树莓派开发服务器在行动.

了解基本知识

  • 从树莓派开始我需要什么?

    A monitor with the correct cable and adapter; a micro USB power supply; a wired keyboard and mouse—or a wireless keyboard and mouse with a Bluetooth adapter; a micro SD card; and, of course, a Raspberry Pi.

  • 你能在树莓派上运行Windows吗?

    树莓派没有直接的Windows桌面操作系统. Windows推出了针对物联网(IoT)设备的瘦身版. 它主要是为想要原型物联网设备的开发人员和硬件黑客设计的.

  • 为什么要用树莓派?

    我们可以用树莓派做很多事情. 我们可以建立家庭自动化服务器, 遥控机器人, NAS (network attached storage)设备, 迷你web服务器, media centers, music boxes, 复古游戏机, 树莓集群服务器, VPN servers, and much more.

  • 什么是物联网(IoT)树莓派?

    No such thing. 物联网由专门的原位互联网连接设备组成, 而不是像手机和笔记本电脑这样的通用设备. 树莓派是物联网的关键平台之一. 它是一个受欢迎的平台,因为它以非常低的成本在一个很小的嵌入式包中提供了一个完整的Linux服务器.

  • 什么是树莓派?它是做什么的?

    这是一台单板计算机,也有人称之为微型计算机. 您可以用它做任何事情——几乎是您在台式机或服务器上能想到的任何事情.

  • Arduino和树莓派有什么区别?

    Arduino是一个微控制器和一个自托管芯片,它不是一个完整的计算机, 所以你需要一台单独的计算机来编写代码. 树莓派是一台真正的计算机:它有一个CPU, GPU, 和HDMI接口, sound, display, and LAN. 它需要操作系统(OS).g.(Linux)和一个硬盘驱动器(或SD卡)来存储它.

  • 家庭服务器的用途是什么?

    您可以将树莓派用作家庭服务器,用于多种用途, 比如多媒体存储, 或者作为备份工作站, email server, 监控摄像头, test site, Jenkins host, subversion服务器, wiki host, 还有更多的东西.

  • 你能在树莓派上运行服务器吗?

    是的,您可以在Raspberry Pi上运行几乎任何类型的服务器.

聘请Toptal这方面的专家.
Hire Now
巴勃罗·维拉斯达·普伊格伯的头像
巴勃罗·维拉斯拉达·普伊格伯

Located in Logroño, Spain

Member since 2014年12月6日

About the author

Pablo的BSCE意味着他在制作众多前端时拥有顶级编码标准. 他也是MongoDB认证开发人员和total Mentor.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

Previously At

Backbase

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

世界级的文章,每周发一次.

订阅意味着同意我们的 privacy policy

Toptal开发者

Join the Toptal® community.