여는 글
개발자는 컴퓨터가 필요하다.
프로그램을 구동할 컴퓨터.
사실 대중적인 클라우드 서비스를 사용하는 것이 가장 합리적이지만
직접 환경을 구축해 보는 것도 좋은 경험이 될 것 같아서 시작하게 되었다.
계획
목표
집에 있는 PC를 서버로 전환하여 원격 접속, 웹 서비스 배포, 데이터베이스 운영, 모니터링·백업 기능을 직접 구성
• 이점
• 클라우드 요금 절감 (장기 운영 시 유리)
• 서버 구성·운영 전반을 직접 경험하며 실무 감각 습득
• 네트워크, 보안, 자동화 등 다양한 분야 스킬 강화
⸻
2. 준비 단계
2.1 하드웨어 스펙
• CPU: Intel Core i5 이상 (6코어·12스레드 권장)
• RAM: 최소 16GB DDR4
• 스토리지: 500GB NVMe SSD (OS 및 서비스 컨테이너용)
• 네트워크: 유선 기가비트 이더넷
• 전원: 24시간 가동 고려한 안정형 PSU
2.2 운영체제 설치
• Ubuntu Server 22.04 LTS
• LTS 안정성
• 풍부한 커뮤니티·공식 문서
• Docker, cloud-init, Snap 등 지원
1. ISO 이미지를 USB에 굽고, 부팅 후 디스크 전체 사용으로 설치
2. 네트워크 설정: DHCP 또는 고정 IP 지정
3. 최소 설치 옵션 선택(SSH 서버만 포함)
⸻
3. 네트워크 및 보안 설정
3.1 고정 IP 또는 DDNS
고정 IP: ISP에서 제공 시
DDNS: No-IP, DuckDNS 등 무료 서비스 활용
도메인 발급
cron으로 주기 갱신 스크립트 등록
3.2 라우터 포트 포워딩
• SSH(22), HTTP(80), HTTPS(443) 포트만 열기
• 내부 IP(예: 192.168.0.10)로 포워딩
3.3 방화벽(ufw) 설정
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
⸻
4. 서버 환경 구성
4.1 SSH 접속 강화
• 비밀번호 로그인 비활성화 (/etc/ssh/sshd_config 수정)
• 공개키 인증 설정
• 기본 포트(22) 변경 및 Fail2Ban 설치·설정
4.2 Docker & Docker Compose
1. Docker 설치
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
2. Docker Compose 설치
sudo apt install -y docker-compose
3. 간단한 웹 서비스 예시
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html:ro
• html/index.html에 블로그나 To-Do 앱 정적 파일 배치
4.3 데이터베이스 설치
• MySQL 또는 PostgreSQL 컨테이너로 운영
services:
db:
image: postgres:14
environment:
POSTGRES_PASSWORD: yourpassword
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
• 백업 스크립트 (cron)
pg_dumpall -U postgres | gzip > /backup/$(date +%F).sql.gz
⸻
5. 모니터링 및 백업
5.1 Prometheus + Grafana
• Prometheus Node Exporter 설치 (Docker)
• Grafana 대시보드 설정
• CPU, 메모리, 디스크, 네트워크 사용량 시각화
5.2 자동 백업
• rsync 이용한 외부 NAS 동기화
• cron 예시 (/etc/crontab)
0 2 * * * root rsync -avz /backup/ user@nas:/backups/
'개발' 카테고리의 다른 글
| 캐시를 이용한 안정적인 결제 상태 서버 (0) | 2025.05.18 |
|---|---|
| 오늘도 QA가 안된다고 말했다 (0) | 2024.08.24 |
| 채팅 시스템에 사용할 메시지 브로커 선택하기 (0) | 2024.06.05 |
| 당신은 정말 객체를 지향하고 있나요 (0) | 2024.05.25 |