0%

家庭服务器搭建并提供公网Http服务

前阵子组装了一个主机,然后在主机上搭建了一个Linux的服务器,这里主要记录其流程和碰到的问题。

1. 安装Ubuntu Server 20.04

制作U盘启动盘并安装

注意Ubuntu Server版本并没有图形界面,因此后续的安装都需要键盘配合完成。

无线上网

Ubuntu Server默认没有无线客户端,需要安装一个客户端之后才能配置无线,这段时间需要先连网线上网。

完成上述两个步骤之后就可以愉快无线上网了,配置无线网的时候,注意网卡名,一般比较长,输入的时候多检查一下。

SSH上网

如果在安装的时候没有勾选ssh服务,这一步可能需要手动安装ssh后才能使用ssh,参考https://blog.csdn.net/qq_34814495/article/details/108739713

配置ssh key等内容可以参考之前的博客https://lfeng.tech/2019/09/20/Linux-VPS-configure/

其他问题

安装软件包遇到锁的问题

https://askubuntu.com/questions/1109982/e-could-not-get-lock-var-lib-dpkg-lock-frontend-open-11-resource-temporari

ubuntu未使用全部磁盘

手动扩展磁盘:https://askubuntu.com/questions/1269493/ubuntu-server-20-04-1-lts-not-all-disk-space-was-allocated-during-installation

开机等待网络连接

开机时间长,显示A start job is running for wait for network to be configured,可以设置网络连接为optional。

https://askubuntu.com/questions/972215/a-start-job-is-running-for-wait-for-network-to-be-configured-ubuntu-server-17-1

使用python3为默认的python

sudo apt install python-is-python3 这样当升级python后依然有效,比alias方便。

2. 外网访问家庭Ubuntu服务器

外网访问ubuntu家庭服务器的核心,就是如何找到家庭内网环境中的Ubuntu,具体来讲根据能否获取公网ip,可以分为如下两种方案:

  • 有公网ip,对于家庭环境,可以采用路由器拨号上网,获取ip,然后设置端口转发即可。如果是非固定公网ip,可以采用ddns绑定免费域名进行访问,也可以利用dnspod等提供的api动态刷新ip来绑定顶级自定义域名。

  • 无公网ip,需要内部ubuntu和公网的server之间建立内网穿透,实现在公网访问内部ubuntu的目的。

-商业服务:花生壳、ngrok等,主要缺点免费版本速度慢、安全性问题。

-自建服务:在一台有公网ip的机器上配置frp,和本地局域网中的ubuntu建立连接,实现内网穿透。

由于家中宽带无公网ip,以及出于安全考虑,我在利用腾讯vps配置了frp,来和本地局域网ubuntu连接,实现内网穿透。这样内网的端口就可以暴露到外网,并且可以绑定域名进行访问。

第一次登录腾讯ubuntu:先使用网页版设置root以及个人用户,账号和密码

设置root用户密码:sudo passwd root

以后切换root用户只需:su root。

如何配置frp可以参考官方git的readme,后续也会讲到。

3. 映射Http服务

这节主要介绍如何将家庭ubuntu上的http服务暴露到公网,以下是整个原理结构。浏览器在访问域名时,nginx把80和443的请求都转发到本机的5000端口;frp运行通过8000端口与本地的ubuntu server进行通信,然后将本地的5000端口也映射到服务器的5000端口,这样通过外网就可以访问到家里的http服务了。

image-20220129165252881

准备工作:

VPS端配置

配置Nginx转发

主要两个功能,一是将80同时转发到443,强制https验证。二是将443的流量转发到本地5000端口。可以新建abc.lfeng.tech.conf,填入下面内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
server {
listen 80;
listen [::]:80;
server_name abc.lfeng.tech;
rewrite ^(.*)$ https://$host$1 permanent;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name abc.lfeng.tech;

location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host:443;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

ssl_certificate "/etc/nginx/ssl/abc.lfeng.tech/fullchain.cer";
ssl_certificate_key "/etc/nginx/ssl/abc.lfeng.tech/abc.lfeng.tech.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

frp配置

编辑frps.ini并填入以下内容:

1
2
3
[common]
bind_port = 8000
vhost_http_port = 5000

这样将ubuntu server上的5000在vps上暴露出来。

Ubuntu Server配置

ubuntu这边比较简单,不需要配置ssl证书用于https验证, 也不需要nginx,只需要配置好frpc.ini就好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
[common]
server_addr = 8.8.123.123
server_port = 8000

[web]
type = http
local_port = 5000
custom_domains = abc.lfeng.tech

[webs]
type = https
local_port = 5000
custom_domains = abc.lfeng.tech

注意需要把https和http全部配置上去,这样直接就可以通过abc.lfeng.tech来加密访问本地的5000端口上的http服务了。

Monitor

Netdata

可以使用Netdata来监控Ubuntu的性能。

安装参考:https://blog.csdn.net/oMcLin/article/details/109351611 官方文档:https://learn.netdata.cloud/docs/agent/packaging/installer/

检查 CPU 温度

Glances

设置时区: timedatectl set-timezone "Asia/Shanghai"


参考: