# Nginx와 Supabase 설치 가이드 이 문서는 Debian 12 서버에 Nginx와 Supabase를 설치하고 설정하는 과정을 안내합니다. ## 1. 서버 접속 SSH 키를 사용하여 서버에 접속합니다: ```bash ssh a11 ``` 또는 전체 명령어를 사용할 수도 있습니다: ```bash ssh -i ~/.ssh/id_ed25519_ism ism-admin@a11.ism.kr ``` ## 2. 시스템 업데이트 ```bash sudo apt update sudo apt upgrade -y ``` ## 3. Nginx 설치 및 설정 ### 3.1 Nginx 설치 ```bash sudo apt install -y nginx ``` ### 3.2 방화벽 설정 ```bash sudo apt install -y ufw sudo ufw allow 'Nginx Full' # 80, 443 포트 허용 sudo ufw allow 'OpenSSH' # SSH 포트 허용 sudo ufw enable ``` ### 3.3 SSL 인증서 발급 (Let's Encrypt) ```bash sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d a11.ism.kr ``` ### 3.4 Nginx 설정 파일 생성 ```bash sudo nano /etc/nginx/sites-available/supabase ``` 다음 내용을 파일에 추가합니다: ```nginx server { listen 80; server_name a11.ism.kr; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name a11.ism.kr; ssl_certificate /etc/letsencrypt/live/a11.ism.kr/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/a11.ism.kr/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; # Kong API location /api { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # Kong Admin API location /kong { proxy_pass http://localhost:8001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # Studio location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # GoTrue location /auth { proxy_pass http://localhost:9999; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # PostgREST location /rest/v1 { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # Storage location /storage/v1 { proxy_pass http://localhost:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # WebSocket 지원 location /realtime/v1 { proxy_pass http://localhost:4000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; } } ``` 설정 파일을 활성화하고 Nginx를 재시작합니다: ```bash sudo ln -s /etc/nginx/sites-available/supabase /etc/nginx/sites-enabled/ sudo nginx -t # 설정 파일 문법 검사 sudo systemctl restart nginx ``` ## 4. Docker 및 Docker Compose 설치 ### 4.1 Docker 설치 ```bash sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io sudo usermod -aG docker $USER ``` ### 4.2 Docker Compose 설치 ```bash sudo apt install -y docker-compose-plugin ``` ## 5. Supabase 설치 ### 5.1 Supabase 프로젝트 클론 ```bash mkdir -p ~/supabase cd ~/supabase git clone --depth 1 https://github.com/supabase/supabase cd supabase/docker ``` ### 5.2 환경 변수 설정 ```bash cp .env.example .env nano .env ``` 다음과 같이 환경 변수를 설정합니다: ``` # Supabase 설정 POSTGRES_PASSWORD=zellyy_finance_secure_password_2025 JWT_SECRET=$(openssl rand -base64 32) ANON_KEY=$(openssl rand -base64 32) SERVICE_ROLE_KEY=$(openssl rand -base64 32) # API 및 사이트 URL SITE_URL=https://a11.ism.kr API_EXTERNAL_URL=https://a11.ism.kr STUDIO_PORT=3000 # 대시보드 인증 DASHBOARD_USERNAME=hansoo DASHBOARD_PASSWORD=zellyy_secure_dashboard_password_2025 # 이메일 설정 (선택 사항) SMTP_HOST= SMTP_PORT= SMTP_USER= SMTP_PASS= SMTP_SENDER_NAME= ``` ### 5.3 Supabase 실행 ```bash docker compose up -d ``` ### 5.4 상태 확인 ```bash docker compose ps ``` ## 6. 인증 정보 기록 설치 후 생성된 API 키와 JWT 시크릿을 기록합니다. 이 정보는 `.env` 파일에서 확인할 수 있습니다: ```bash cd ~/supabase/supabase/docker grep -E "JWT_SECRET|ANON_KEY|SERVICE_ROLE_KEY" .env ``` 이 정보를 `/Users/hansoo./Documents/my vault/1. Project/ZELLYY/적자 탈출 가계부/02_기술_문서/Supabase_인증_정보.md` 파일에 기록합니다. ## 7. 데이터베이스 초기 설정 ### 7.1 PostgreSQL 접속 ```bash docker exec -it supabase-db psql -U postgres ``` ### 7.2 기본 스키마 생성 ```sql -- 사용자 스키마 생성 CREATE SCHEMA app; -- Row Level Security 활성화 ALTER TABLE app.users ENABLE ROW LEVEL SECURITY; -- 기본 정책 설정 CREATE POLICY "사용자는 자신의 데이터만 볼 수 있음" ON app.users FOR ALL USING (auth.uid() = user_id); ``` ## 8. 백업 설정 ### 8.1 자동 백업 스크립트 생성 ```bash mkdir -p ~/backup-scripts nano ~/backup-scripts/backup-postgres.sh ``` 다음 내용을 파일에 추가합니다: ```bash #!/bin/bash BACKUP_DIR="/home/ism-admin/backups" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_FILE="$BACKUP_DIR/postgres_backup_$TIMESTAMP.sql.gz" # 백업 디렉토리 생성 mkdir -p $BACKUP_DIR # 데이터베이스 백업 docker exec supabase-db pg_dumpall -U postgres | gzip > $BACKUP_FILE # 30일 이상 된 백업 삭제 find $BACKUP_DIR -name "postgres_backup_*.sql.gz" -type f -mtime +30 -delete ``` 스크립트에 실행 권한 부여: ```bash chmod +x ~/backup-scripts/backup-postgres.sh ``` ### 8.2 Cron 작업 설정 ```bash crontab -e ``` 다음 내용을 추가하여 매일 새벽 3시에 백업을 실행합니다: ``` 0 3 * * * /home/ism-admin/backup-scripts/backup-postgres.sh ``` ## 9. 모니터링 설정 ### 9.1 기본 모니터링 ```bash sudo apt install -y htop ``` ### 9.2 로그 모니터링 ```bash # 모든 컨테이너 로그 확인 docker compose logs # 특정 서비스 로그 확인 (예: PostgreSQL) docker compose logs db ``` ## 10. 문제 해결 ### 10.1 Nginx 문제 ```bash # Nginx 상태 확인 sudo systemctl status nginx # Nginx 로그 확인 sudo tail -f /var/log/nginx/error.log ``` ### 10.2 Docker 문제 ```bash # Docker 상태 확인 docker ps # Docker 로그 확인 docker logs supabase-db ``` ### 10.3 인증서 갱신 ```bash sudo certbot renew --dry-run ``` ## 11. 유지 관리 ### 11.1 Supabase 업데이트 ```bash cd ~/supabase/supabase/docker git pull docker compose down docker compose up -d ``` ### 11.2 시스템 업데이트 ```bash sudo apt update sudo apt upgrade -y ``` ## 12. 보안 강화 ### 12.1 SSH 보안 강화 ```bash sudo nano /etc/ssh/sshd_config ``` 다음 설정을 추가/수정합니다: ``` PermitRootLogin no PasswordAuthentication no X11Forwarding no ``` SSH 서비스 재시작: ```bash sudo systemctl restart sshd ``` ### 12.2 방화벽 확인 ```bash sudo ufw status ``` ## 13. 완료 이제 Nginx와 Supabase가 설치되었습니다. 다음 URL로 접속하여 확인할 수 있습니다: - Supabase Studio: https://a11.ism.kr - API 엔드포인트: https://a11.ism.kr/api 설치 후 생성된 API 키와 JWT 시크릿을 `Supabase_인증_정보.md` 파일에 기록하는 것을 잊지 마세요.