GN⁺: 내가 서버를 운영하는 방법 (2022)
(blog.wesleyac.com)- 서버 및 인터넷 인프라 운영을 위한 작성자의 설정 설명
- 클라우드 솔루션 대신 가상 머신 또는 물리적인 서버에서 서버 소프트웨어 실행 선호
- 작성자는 서비스에 DigitalOcean VM(가상 머신)을 사용하며 Debian 10을 실행
- 서버 소프트웨어는 Rust로 작성되어 하나의 이진 파일로 컴파일됨
- 서버 시작 시 이진 파일이 시작되도록 systemd 사용
- 데이터베이스를 필요로 하는 프로그램은 중복 백업 솔루션을 갖춘 SQLite 사용
- 모든 서버는 TLS 종료 및 정적 파일 제공을 위해 nginx 뒷단에 실행
- 설정은 간단하고 견고하며 최소한의 유지보수가 필요함
- 유닉스 사용자 계정을 통한 격리를 통해 동일한 VM에서 여러 서비스 실행 가능
- 새 프로젝트 설정은 새 사용자 생성, nginx 가상 호스트 추가, systemd 유닛 추가 및 배포 스크립트 실행으로 이루어짐
- 인프라 변경은 천천히 이루어져 안정성과 예측 가능성을 제공함
- 작성자는 Julia Evans에게 이 기사를 쓰도록 격려해준 것에 감사를 표함
Hacker News 의견
- HTTP 트리거된 클라우드 함수는 서버 관리를 간소화하고 복잡성을 줄이는 인기 있는 선택입니다.
- 각 서비스를 고유한 Unix 사용자 계정으로 실행하는 것은 격리와 보안을 제공합니다.
- systemd의 DynamicUser 기능을 사용하면 설정 프로세스를 단순화하고 시간을 절약할 수 있습니다.
- 많은 개발자들은 개인 및 프로젝트 웹사이트에 Linode VMs와 Debian GNU/Linux를 사용합니다.
- Common Lisp는 이러한 설정에서 소프트웨어를 작성하는 인기 있는 언어 선택입니다.
- Nginx는 리버스 프록시 및 정적 파일 서비스로 흔히 사용됩니다.
- Docker 컨테이너와 docker-compose는 서비스 실행을 위한 대체 옵션입니다.
- 장애 조치 및 가동 시간은 제품 환경에서 중요한 고려 사항입니다.
- 백업 및 방화벽 규칙, 키 기반 SSH 인증과 같은 보안 조치가 일반적으로 구현됩니다.
- 배포 스크립트와 버전 관리는 앱 업데이트와 롤백을 관리하는 데 유용합니다.
- 환경 변수, 파일 오픈 제한 및 로깅 구성은 서비스 설정에 중요한 고려 사항입니다.
- PostgreSQL, NGINX, Redis 및 Node.js는 흔히 사용되는 소프트웨어 구성 요소입니다.
- Dokku는 배포 관리와 플러그인 추가를 위한 인기 있는 도구입니다.
- 일부 개발자들은 단일 서버와 표준 Linux 사용자 계정을 사용하는 더 간단한 설정을 선호합니다.
- 복잡성은 불안정성과 다운타임으로 이어질 수 있으므로, 특정한 복잡성이 필요하지 않은 한 간소함이 종종 선호됩니다.