내 블로그 // 디지털 아카이브

생각, 프로젝트 및 기술 노트

태그가 포함된 항목 표시: #nixos 모두 보기 ×

저는 이번에 NixOS 홈 서버의 백업 방식을 간단한 일일 스크립트에서 시간별 백업으로 변경했습니다. 제 친구가 관리하는 마스토돈(Mastodon) 인스턴스처럼 20분마다 ZFS 스냅샷을 찍는 방식만큼 우아하지는 않지만, 이 솔루션에도 만족하고 있습니다. 그리고 NixOS가 점점 더 마음에 든다는 점을 말씀드리고 싶네요. AI가 없었다면 제가 이해하기에는 너무 복잡했겠지만, 이제는 완성된 Nix 파일들을 어느 정도 읽을 수 있게 되었습니다. 서버를 일반적인 리눅스로 바꿀까 고민한 적도 있었지만, 이렇게 잘 작동하는 한 계속 사용할 것 같습니다.

  1. /etc/nixos: 전체 NixOS 설정 (모든 .nix 파일).

  2. /opt/minecraft: 마인크래프트 서버의 모든 월드와 데이터.

  3. /opt/satisfactory: 새티스팩토리(Satisfactory) 서버의 세이브 파일과 설정.

  4. /opt/Blog: 블로그의 소스 코드와 콘텐츠.

  5. /opt/ui: 마스토돈 UI 파일들.

  6. /opt/audiobookshelf: 오디오북과 관련 데이터베이스.

이 모든 데이터는 RClone을 통해 마운트된 S3 스토리지에 저장됩니다.

NixOS 설정


{ config, pkgs, ... }:

{
  # BorgBackup 설정
  services.borgbackup.jobs.hourly = {
    # S3 마운트 내의 저장소(Repository) 경로
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # 비밀번호 불필요
    encryption.mode = "none";

    # 더 많은 공간 절약을 위한 압축
    compression = "auto,zstd";

    # 백업할 경로
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # 매시간 실행
    startAt = "hourly";

    # 저장소가 없는 경우 자동 초기화
    doInit = true;

    # 보관 규칙 (Pruning)
    prune.keep = {
      within = "1d"; # 최근 24시간 내의 모든 스냅샷
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Borg가 시작되기 전 S3 마운트가 준비되었는지 확인
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

NixOS를 더 잘 알아가기 위해 나만의 블로그를 설치했습니다. 놀랍게도 모든 과정이 꽤 간단했습니다.

WriteFreely는 미니멀하고 설정이 빠르며 불필요한 요소가 없어 이 목적에 아주 잘 맞습니다. 가볍게 시작하면서 동시에 무언가를 배우기에 완벽하죠. 설정도 기분 좋을 만큼 깔끔합니다. 몇 가지 옵션을 설정하고, 디렉토리를 준비하고, 리버스 프록시를 앞에 두면 끝입니다.

현재 제 NixOS 설정은 다음과 같습니다:

{ config, pkgs, ... }:

{
  services.writefreely = {
    enable = true;
    host = "blog.burningboard.org"; 
    settings = {
      server = {
        port = 8080;
        min_log_level = "debug";
      };
      app = {
        host = "https://blog.burningboard.org";
        single_user = true;
        landing = "/read";
        wf_modesty = true;
        federation = true;
        public_stats = true;
        theme = "write";
      };
    };
    stateDir = "/opt/writefreely";
  };

  # ActivityPub 키 생성 수정: 페더레이션에는 openssl이 필요함
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # 올바른 권한으로 데이터 디렉토리 자동 생성
  systemd.tmpfiles.rules = [
    "d /opt/writefreely 0700 writefreely writefreely -"
  ];

  services.caddy.virtualHosts."blog.burningboard.org".extraConfig = ''
    reverse_proxy 127.0.0.1:8080 {
      header_up Host {host}
      header_up X-Real-IP {remote_host}
      header_up X-Forwarded-For {remote_host}
      header_up X-Forwarded-Proto {scheme}
    }
  '';
}

기본적으로 이게 전부입니다. NixOS는 이러한 서비스를 깔끔하게 설정하고 재현 가능하게 유지하는 것을 정말 쉽게 만들어 줍니다.