自托管指南

June 24, 2026 · View on GitHub

简介

自托管是在您自己控制的硬件上运行服务的实践。本指南涵盖了设置和维护自托管应用的基础知识。

什么是自托管?

自托管意味着在自己的服务器上运行应用,而不是使用第三方云服务。

方面自托管
控制有限完全
隐私第三方您的数据
费用持续前期
维护提供商您自己
定制有限无限

自托管的好处

好处描述
隐私控制您的数据
独立无供应商锁定
学习技术技能
定制根据需求定制
费用长期节省

硬件要求

服务器选项

选项费用功率噪音
Raspberry Pi无声
Mini PC安静
旧电脑免费不定不定
专用服务器
VPS月付不定无声

最低规格

服务类型CPU内存存储
基本 Web1 核1 GB20 GB
媒体服务器2 核4 GB1 TB
数据库2 核4 GB100 GB
全能4 核8 GB2 TB

推荐硬件

组件推荐
CPUIntel i5 或 AMD Ryzen 5
内存16-32 GB
存储SSD 用于系统,HDD 用于数据
网络千兆以太网
UPS电池备份

操作系统

Linux 发行版

发行版最佳用途支持
Ubuntu Server初学者5 年
Debian稳定性3 年
CentOS Stream企业5 年
Arch Linux高级用户滚动更新
Proxmox VE虚拟化3 年

安装步骤

# 下载 ISO
# 创建可启动 USB
# 安装操作系统
# 配置网络
# 更新系统
sudo apt update && sudo apt upgrade -y

Docker

为什么选择 Docker?

好处描述
隔离独立环境
可移植任何地方运行
可重现一致的设置
效率共享资源
版本控制轻松更新

Docker 安装

# 安装 Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 将用户添加到 docker 组
sudo usermod -aG docker $USER

# 安装 Docker Compose
sudo apt install docker-compose

Docker Compose 示例

version: '3'
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html

  database:
    image: postgres:13
    environment:
      - POSTGRES_PASSWORD=secret
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

网络

域名配置

步骤描述
1. 注册域名选择注册商
2. DNS 设置指向服务器
3. SSL 证书启用 HTTPS
4. 反向代理路由流量

DNS 记录

类型用途示例
AIPv4 地址server.example.com → 1.2.3.4
AAAAIPv6 地址server.example.com → ::1
CNAME别名www → server.example.com
MX邮件mail.example.com

反向代理

Nginx 配置

server {
    listen 80;
    server_name app.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name app.example.com;

    ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

使用 Let's Encrypt 配置 SSL

# 安装 Certbot
sudo apt install certbot python3-certbot-nginx

# 获取证书
sudo certbot --nginx -d app.example.com

# 自动续期
sudo certbot renew --dry-run

必备服务

Web 服务器

服务器用例
Nginx反向代理、静态文件
Apache传统 Web 服务器
Caddy自动 HTTPS

数据库

数据库类型用例
PostgreSQL关系型通用
MySQL关系型Web 应用
MongoDB文档型灵活 Schema
Redis键值型缓存

监控

工具用途
Uptime Kuma服务监控
Grafana指标可视化
Prometheus指标收集
Netdata实时监控

常见自托管应用

媒体和娱乐

应用用途
Jellyfin媒体服务器
Navidrome音乐服务器
Immich照片管理
Calibre-web电子书管理

生产力

应用用途
Nextcloud文件同步、日历
Bitwarden密码管理器
Joplin笔记
Vikunja任务管理

通讯

应用用途
Matrix/Element聊天
Mattermost团队消息
Mailcow邮件服务器
Discourse论坛

开发

应用用途
GiteaGit 托管
Drone CI持续集成
Harbor容器镜像仓库
PortainerDocker 管理

家庭自动化

应用用途
Home Assistant智能家居
Node-RED自动化
ESPHomeIoT 设备
Zigbee2MQTTZigbee 网关

安全

安全清单

实践描述
强密码使用密码管理器
2FA启用双因素认证
防火墙配置 UFW/iptables
更新定期系统更新
备份定期备份

防火墙配置

# 启用防火墙
sudo ufw enable

# 允许 SSH
sudo ufw allow 22/tcp

# 允许 HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 检查状态
sudo ufw status

SSH 安全

# 禁用 root 登录
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

# 禁用密码认证
sudo sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

# 重启 SSH
sudo systemctl restart sshd

备份策略

备份方式

方式描述
rsync文件同步
Borgbackup去重备份
Restic加密备份
Duplicati云备份

3-2-1 备份规则

规则描述
3 份备份总数
2 种介质不同存储类型
1 份异地远程备份位置

备份脚本

#!/bin/bash
# 数据库备份
pg_dump -U postgres dbname > /backup/db_$(date +%Y%m%d).sql

# 文件备份
rsync -av --delete /data/ /backup/data/

# 清理旧备份
find /backup -mtime +30 -delete

性能优化

系统调优

设置描述
Swap配置交换空间
Limits设置文件描述符限制
Kernel调优内核参数
Scheduler优化 I/O 调度器

Docker 优化

技巧描述
资源限制设置 CPU/内存限制
健康检查监控容器健康
重启策略失败时自动重启
日志轮转限制日志大小

监控和维护

监控栈

组件用途
Prometheus指标收集
Grafana可视化
Alertmanager告警
Node Exporter系统指标

定期维护

任务频率
系统更新每周
安全补丁可用时
备份验证每月
日志审查每周
性能审查每月

故障排除

常见问题

问题可能原因解决方案
服务无法启动配置错误检查日志
CPU 使用率高进程循环识别进程
磁盘满日志文件清理日志
网络问题DNS/防火墙检查配置

日志位置

服务日志位置
系统/var/log/syslog
Nginx/var/log/nginx/
Dockerdocker logs container
应用应用特定

费用估算

每月费用

项目费用范围
电费$5-20
网络$50-100
域名$1-2
VPS(可选)$5-50
合计$60-170

一次性费用

项目费用范围
服务器硬件$100-500
UPS$50-150
网络设备$50-200
合计$200-850

入门指南

分步指南

步骤操作
1选择硬件
2安装操作系统
3配置网络
4安装 Docker
5部署服务
6设置备份
7配置监控

首先部署的服务

优先级服务原因
1反向代理所有服务都需要
2监控了解何时出问题
3备份保护数据
4密码管理器安全
5文件同步生产力

总结

组件用途
硬件物理服务器
操作系统运行系统
Docker容器运行时
网络域名、SSL、代理
服务应用
安全保护
备份数据安全
监控可见性