使用docker+frp+npm,让旧电脑成为新服务器
每个人在外都或多或少有访问自己家里设备的需求,但是给家里的网络配上ipv6或者公网ipv4都是费时费力的事情。这里我推荐使用 frp 进行内网穿透,使家庭内的网络可以在外部访问。而这仅仅需要一台具有公网的设备, 最简单的方法是买一台服务器。
这里我推荐vultr, 在全球多个城市都有节点可以选择。云计算最低只需6美刀一个月。我使用了相当长的一段时间,直到我毕业没有经济来源。
如果你像我一样贫困,那么更推荐你使用 cloudcone, 它经常会有活动。即使在没有活动的情况下最低配置也只需21.6美刀一年。
在根据自己的偏好(建议大家使用linux, 本文将以ubuntu系统为背景介绍) deploy好自己的vps后接下来就需要安装docker了
安装Docker
为什么要安装docker?docker是一种广泛使用的容器化技术,它提供了一种轻量级、便携和高效的方式来构建、运行和共享应用程序. 对于环境配置苦手来说简直就是神器,只需要pull image然后run container就可以轻松运行服务,再也不用担心运行一大堆script结果还有很多报错,然后查了很久最后放弃的这种情况了。
安装最好参考docker 官网, 一般情况下参考 Install using the apt repository下的3个步骤即可成功安装。
如果实在偷懒不想看官网介绍,那么就复制下面的命令到命令行中
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
PS: 一般情况下如果你是root登录到vps中,可以省去sudo
安装npm
此npm非彼npm,这里的npm指的是nginx proxy manager, 愿意自己看文档的建议看文档以加深对npm的理解. 如果不需要配置域名直接连接到对应web service,申请ssl等服务的话可以跳过这步。
注意npm只需要在cloud server中安装. 安装npm只需要创建一个空目录, 然后进这个目录里
# to home directory
cd ~
# create a directory named npm
mkdir npm
# go to directory
cd ./npm
# create docker compose configuration file
touch docker-compose.yml
# create docker network
sudo docker network create npmcontrol
创建一个docker network是为了使所有的docker container都在同一个网络下,这将方便npm后续的管理。
复制下面的配置文件到docker-compose.yml
中:
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
default:
external: true
name: npmcontrol
保存并在命令行中使用
sudo docker compose up -d
等看到类似container npm-app-1 running
之类的文字的时候表示你已经安装好了npm。
现在赶紧打开浏览器输入http://公网ip:81
(一般情况下vps的公网ip会显示在运营商页面上,会直接告诉你). 如果不知道自己的ip,也可以使用下面命令:
ifconfig
在出来结果后,找到eth0
,下面的inet
一般来说就是你的公网ip.
在浏览器访问以后,会看到npm让你登录的界面,默认的账号密码为
Email: [email protected]
Password: changeme
登录后会让你修改邮箱密码。
如果你打算使用npm发挥出它的功能,那么你需要有一个或数个域名,并绑定到你的云服务器上。
老样子,在浏览器输入http://ip:81
并进行登录,分别执行下面几步操作
- 选择hosts -> proxy hosts
- 点击add proxy host
- 在domain names填入你刚刚绑定的域名例如
npm.domain.com
- 在forward hostname/IP一栏填入
npm
(如果你给你的npm取了其他的container name就填那个), - forward port填写
81
- 下面三个可以去了解一下作用在决定开不开。
- 此外如果你想通过https访问那么点击ssl, 选择request a new ssl certificate。
- 点击save
- 稍等片刻你就可以通过
npm.domain.com
进入你的npm了。
安装frp
frp 指代的是fast reverse proxy, 具体分为frps和frpc. s表示server, c表示client.
首先来让我们安装client