我的Home Server迁移记录

本篇文章记录了我的Home server从原先的 Debian + Yunohost 迁移到 Ubuntu + Dockge的过程
迁移理由:

  1. 为了装更多应用压榨VPS的8G内存
  2. 使用docker方便调试和开发
  3. Yunohost很多应用的更新没法及时跟上
  4. Caddy在Debian下有很多小问题,Ubuntu就能一键启用,很奇怪

备份已有应用的数据

好在所有的应用都提供了导出数据功能,所以很快就完成了备份

初始化系统

  1. 将系统重装为Ubuntu 22.04后,升级重启。
  2. 安装必需软件:apt install vim sudo curl uidmap fail2ban -y
  3. 启用fail2ban:systemctl enable fail2ban
  4. 创建非root用户:adduser versun
  5. 将versun用户加入sudo:visudo
  6. 配置sshd:vim /etc/ssh/sshd_config 禁止root登陆和密码登陆
PasswordAuthentication no
PermitRootLogin no
  1. 重启sshd服务:sudo systemctl restart sshd
  2. 给versun用户添加ssh public key
su versun
mkdir ~/.ssh
echo "Your ssh public key" > ~/.ssh/authorized_keys

sudo chmod 600 ~/.ssh/authorized_keys
  1. 新建一个终端使用versun账户和密钥确保能登陆成功。

安装Docker

根据官方文档安装即可
将versun账户添加到 docker 组,以便以非root用户身份运行 Docker 命令:sudo usermod -aG docker versun
重启或者重新登陆versun账户

安装Caddy

同样,根据官方文档安装即可

安装Dockge

官方安装步骤如下:

#Create directories that store your stacks and stores Dockge's stack
mkdir -p /opt/stacks /opt/dockge
cd /opt/dockge

#Download the compose.yaml
curl https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml --output compose.yaml

在下载完compose.yaml后,我们需要修改端口,将- 5001:5001改为- 127.0.0.1:5001:5001
因为我使用caddy来代理服务,所以就限制它只能通过本地访问,而不是暴露到外网。
然后启动服务:docker compose up -d

配置Caddyfile

修改/etc/caddy/Caddyfile,内容参考如下

{
        log {
                output file /var/log/caddy/versun.log
        }
}
dockge.example.com {
        reverse_proxy localhost:5001
}
blog.example.com {
        reverse_proxy localhost:8001
}

个人比较喜欢使用subdomain的形式,但每个subdomain都要在域名服务商那添加,你也可以使用子路径形式,更方便:

versun.me {
        reverse_proxy /dockge/* localhost:5001
        reverse_proxy /blog/* localhost:8001
}

修改完后,格式化下文件:sudo caddy fmt /etc/caddy/Caddyfile --overwrite
然后重载配置:sudo systemctl reload caddy

配置Cloudflare的DNS记录

强烈建议使用Cloudflare来管理DNS记录,不仅有免费CDN,还有免费的代理防止服务器IP泄漏,还有防基础的DDOS。
添加A记录到你的服务器IP,并开启Proxy
然后在左侧面板,选择SSL/TLS,将加密模式设置为完全(Full)
过1分钟左右,通过域名应该就能访问到你的服务了。

安装应用

之后就是在Dockage上安装Docker应用,基本步骤如下:

  1. 修改应用的docker compose内容中的port为只监听本地
  2. 修改caddyfile配置文件,添加服务端口
  3. 重启caddy
  4. 配置DNS记录

注意:如果有需要映射文件夹的,需要确保映射到当前路径:./,这样才能确保所有数据都在/opt/stacks里面。

定时备份docker数据

我使用backblaze的b2服务。

  1. 下载官方的b2程序

  2. 执行命令:

    chmod a+x b2-linux
    sudo mv b2-linux /usr/bin/b2
    
  3. 在backblaze上创建私有存储桶和新的[应用密钥] (https://secure.backblaze.com/app_keys.htm)

  4. 使用root完成认证: sudo b2 authorize-account

  5. 首次上传:sudo b2 sync /opt/stacks/ b2://Your-Bucket-Name/

  6. 创建cron定时任务:sudo crontab -e

    # 每周一的3点上传一次,以本地版本为准,旧版本保留30天,
    0 3 * * 1 /usr/bin/b2 sync --keepDays 30 --replaceNewer --delete /opt/stacks/ b2://Your-Bucket-Name/  >> /var/log/b2sync.log 2>&1
    

完成

其它

你也可以安装一个Homepage,方便汇总所有的服务,挑一个吧:Homepage, Dashy, Homer, Homarr
如果没有自带认证的,可以使用caddy来做认证