家庭服务器 NAS 部署教程:从零到一完整指南
0. 准备工作
硬件:
- 一台旧电脑(4核CPU + 8G内存 + 256G SSD + 4T HDD)
- 网线(必须,WiFi 不稳定)
软件:
- Ubuntu Server 24.04 LTS(推荐)
- Docker + Docker Compose
- Cloudflare 账号(免费域名 + DNS)
- 一个域名(如
hsh-chao.top)
1. 安装 Ubuntu Server
- 下载 Ubuntu Server 24.04 LTS 镜像
- 制作 USB 启动盘(用 Rufus)
- 插入旧电脑,开机按 F12 选择 USB 启动
- 按向导安装:
- 语言:English(推荐,避免路径中文问题)
- 网络:有线连接(DHCP 自动获取 IP)
- 用户名:
nas(密码设置强一点) - 磁盘:使用整个磁盘
- 安装完成后重启,拔掉 USB
验证:
# 在本机终端测试 SSH 连接
ssh nas@<你的IP>
2. 安装 Docker
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装 Docker
curl -fsSL https://get.docker.com | sudo sh
# 将用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER
# 重新登录生效
exit
验证:
docker --version
docker run hello-world
3. 创建目录结构
# 创建数据目录
mkdir -p ~/docker/{immich,vaultwarden,alist,syncthing,ghost,qbittorrent,clamav,portainer,kuma}
# 创建 Docker Compose 文件
nano ~/docker/docker-compose.yml
4. Docker Compose 配置
复制以下内容到 docker-compose.yml:
version: "3.8"
services:
# 照片管理
immich-server:
image: ghcr.io/immich-app/immich-server:release
container_name: immich-server
ports:
- "2283:2283"
volumes:
- ./immich/upload:/usr/src/app/upload
environment:
- DB_PASSWORD=你的数据库密码
- DB_DATABASE_NAME=immich
- DB_HOSTNAME=immich-postgres
- REDIS_HOSTNAME=immich-redis
- UPLOAD_LOCATION=./immich/upload
depends_on:
- immich-postgres
- immich-redis
restart: unless-stopped
immich-postgres:
image: postgres:14-vectorchord0.4.3-pgvectors0.2.0
container_name: immich-postgres
environment:
- POSTGRES_PASSWORD=你的数据库密码
- POSTGRES_DB=immich
volumes:
- ./immich/postgres:/var/lib/postgresql/data
restart: unless-stopped
immich-redis:
image: valkey/valkey:9
container_name: immich-redis
restart: unless-stopped
# 密码管理
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
ports:
- "8080:80"
environment:
- SIGNUPS_ALLOWED=false
- DOMAIN=https://vault.你的域名.com
volumes:
- ./vaultwarden/data:/data
restart: unless-stopped
# 文件管理
alist:
image: xhofe/alist:latest
container_name: alist
ports:
- "8082:5244"
environment:
- PUID=1000
- PGID=1000
volumes:
- ./alist:/opt/alist/data
restart: unless-stopped
# 文件同步
syncthing:
image: linuxserver/syncthing:latest
container_name: syncthing
ports:
- "8384:8384"
- "22000:22000/tcp"
- "22000:22000/udp"
environment:
- PUID=1000
- PGID=1000
volumes:
- ./syncthing/config:/config
- ./syncthing/data:/data
restart: unless-stopped
# 博客
ghost:
image: ghost:5
container_name: ghost
ports:
- "2368:2368"
environment:
- url=https://blog.你的域名.com
volumes:
- ./ghost/content:/var/lib/ghost/content
restart: unless-stopped
# 下载工具
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
ports:
- "8085:8080"
- "6881:6881/tcp"
- "6881:6881/udp"
environment:
- PUID=1000
- PGID=1000
volumes:
- ./qbittorrent/config:/config
- ./qbittorrent/downloads:/downloads
restart: unless-stopped
# 反向代理
caddy:
image: caddy:2
container_name: caddy
ports:
- "80:80"
- "443:443"
volumes:
- ./caddy/Caddyfile:/etc/caddy/Caddyfile
- ./caddy/data:/data
restart: unless-stopped
# 监控
uptime-kuma:
image: louislam/uptime-kuma:2
container_name: kuma
ports:
- "3001:3001"
volumes:
- ./kuma:/app/data
restart: unless-stopped
# 容器管理
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./portainer:/data
restart: unless-stopped
5. 启动服务
cd ~/docker
docker compose up -d
# 查看状态
docker ps
6. 配置域名(Cloudflare)
- 登录 Cloudflare → 添加 A 记录
- 记录类型:A
- 名称:
vault(对应 Vaultwarden) - 内容:你的服务器 IP
- 代理状态:关闭(灰色云朵)
- 重复以上步骤,添加其他子域名:
immich(相册)files(Alist)sync(Syncthing)blog(Ghost)kuma(监控)portainer(容器管理)
7. 配置 HTTPS(Caddy)
nano ~/docker/caddy/Caddyfile
复制以下内容:
vault.你的域名.com {
reverse_proxy 127.0.0.1:8080
}
immich.你的域名.com {
reverse_proxy 127.0.0.1:2283
}
files.你的域名.com {
reverse_proxy 127.0.0.1:8082
}
sync.你的域名.com {
reverse_proxy 127.0.0.1:8384
}
blog.你的域名.com {
reverse_proxy 127.0.0.1:2368
}
kuma.你的域名.com {
reverse_proxy 127.0.0.1:3001
}
portainer.你的域名.com {
reverse_proxy 127.0.0.1:9000
}
重启 Caddy:
docker restart caddy
8. 访问测试
| 服务 | 地址 |
|---|---|
| Vaultwarden | https://vault.你的域名.com |
| Immich | https://immich.你的域名.com |
| Alist | https://files.你的域名.com |
| Syncthing | https://sync.你的域名.com |
| Ghost | https://blog.你的域名.com |
| Kuma | https://kuma.你的域名.com |
| Portainer | https://portainer.你的域名.com |
9. 自动化运维(可选)
自动更新
# 创建更新脚本
nano ~/update.sh
#!/bin/bash
cd ~/docker
docker compose pull
docker compose up -d
echo "更新完成: $(date)" >> ~/update.log
chmod +x ~/update.sh
# 添加定时任务(每天凌晨 4 点)
crontab -e
# 添加:0 4 * * * /home/nas/update.sh
自动 DDNS(如果家宽 IPv6 变化)
# 安装 ddns-go
docker run -d --name ddns-go --restart=always --net=host jeessy/ddns-go
访问 http://你的IP:9876 配置 DDNS。
10. 安全加固
# 安装 Fail2Ban
sudo apt install fail2ban -y
# 配置 SSH 限制
sudo nano /etc/ssh/sshd_config
# 添加:MaxAuthTries 3
# 添加:AllowUsers nas
# 重启 SSH
sudo systemctl restart sshd
完成!
恭喜!你已经有了一个完整的家庭服务器:
- 照片管理:Immich(AI 识别 + 地图)
- 密码管理:Vaultwarden(跨平台同步)
- 文件管理:Alist(多存储聚合)
- 文件同步:Syncthing(P2P 同步)
- 博客:Ghost(Markdown 写作)
- 下载:qBittorrent(BT 下载)
- 监控:Uptime Kuma(服务状态)
- 容器管理:Portainer(可视化界面)
所有服务都有 HTTPS 加密,支持外网访问!
遇到问题? 评论区留言,我会一一解答。