36 Commits

Author SHA1 Message Date
happybell80
985b997199 fix: sudo -n 옵션으로 non-interactive 모드 사용 2025-07-09 19:14:55 +09:00
happybell80
9aa89081ed fix: SSH TTY 옵션 추가로 sudo 문제 해결 2025-07-09 19:13:03 +09:00
happybell80
d82e8419af fix: sudo 명령어 절대 경로로 수정 2025-07-09 18:21:23 +09:00
happybell80
7102f9b15d feat: 서버 nginx 직접 설정 배포로 변경
- Docker nginx 대신 서버 nginx 설정 직접 적용
- sudo NOPASSWD 특정 명령어만 허용하여 보안 유지
- nginx -t 및 systemctl reload 자동화
- README.md 배포 플로우 업데이트

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 18:19:19 +09:00
happybell80
9386939191 fix: ssl 폴더 삭제 후 단순화
- ssl 폴더가 없으므로 ~/robeing-nginx/* 로 내부 파일만 삭제
- README.md에서 ssl 폴더 보존 설명 제거
- 더 간단하고 안전한 배포 방식

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 16:29:33 +09:00
happybell80
2d681632c1 fix: ssl 폴더 보존하면서 배포
- ssl 폴더를 제외하고 나머지 파일만 삭제
- 권한 문제 해결 위해 find 명령어 사용
- README.md 배포 플로우 설명 업데이트

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 16:28:23 +09:00
happybell80
272c483e09 refactor: 서버 자체 SSL 활용하도록 단순화
- README.md 먼저 업데이트 (룰 준수)
- Docker 컨테이너는 8080 포트에서 HTTP만 처리
- SSL/HTTPS는 서버 자체에서 처리
- certbot 관련 복잡한 설정 모두 제거
- 권한 문제 해결

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 16:24:38 +09:00
happybell80
725d53364d fix: .git 폴더 권한 문제 해결
- scp 대신 tar+ssh 파이프라인 사용
- .git 폴더 제외하여 권한 충돌 방지
- 기존 디렉토리 삭제 후 재생성으로 깨끗한 배포

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 15:09:57 +09:00
happybell80
6fff59e3e2 docs: README.md 현재 상황에 맞게 깔끔하게 재작성
- Ubuntu 서버 배포 방식으로 업데이트
- GitHub Actions SCP 방식 설명
- 불필요한 설정 제거
- 실제 사용 중인 프록시 라우팅 명시
- SSL 설정 및 테스트 방법 추가

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 15:07:39 +09:00
happybell80
4c2b20cfc6 fix: 원격 디렉토리 생성 및 SCP 경로 수정
- 원격에 ~/robeing-nginx 디렉토리 생성 후 파일 전송
- scp -r . 로 전체 워크스페이스 전송
- git clone 인증 문제 해결

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 14:34:15 +09:00
happybell80
49daac7291 fix: sudo 제거하고 홈 디렉터리 배포로 변경
sudo 권한 문제 해결을 위해 ~/robeing-nginx에 배포

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 14:29:21 +09:00
happybell80
7dfe04afe7 fix: sudo -n 옵션 추가로 패스워드 프롬프트 방지
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 14:26:52 +09:00
happybell80
abb578cfb7 trigger: sudo 권한 추가 후 재배포 트리거
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 14:24:10 +09:00
happybell80
c09ba6a017 feat: Ubuntu 서버용 심플 nginx 배포 시스템 구축
- GitHub Actions를 심플하게 재구성 (불필요한 테스트 로그 제거)
- SSL 자동 설정 (Let's Encrypt)
- 프록시 라우팅 업데이트: /api/ → 18000, /rb8001/ → 8001
- 배포 경로: /opt/robeing-nginx

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-09 14:20:26 +09:00
happybell80
cf666af1ee Handle NAS system service using port 80
- Detect if system service (DSM/Web Station) uses port 80
- Automatically switch nginx to port 8080 if port 80 is occupied
- Avoid touching system services, only manage Docker containers
- Prevents conflicts with Synology NAS built-in services

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:52:20 +09:00
happybell80
9b8712237c Fix port 80 already in use error
- Add port 80 usage detection with netstat and docker ps
- Stop and remove containers using port 80 before deployment
- Ensures clean port 80 for nginx service
- Prevents 'bind: address already in use' errors

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:50:53 +09:00
happybell80
3e3f0ae0ef Fix scp SFTP subsystem error with -O flag
- Add -O flag to force legacy SCP protocol instead of SFTP
- Bypasses 'subsystem request failed on channel 0' error
- Works with Synology NAS without SFTP subsystem configuration
- Prevents Exit code 255 from connection failures

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:15:05 +09:00
happybell80
83d6303477 Fix tar 'file changed as we read it' error
- Create archive in /tmp/deploy-build to avoid path conflicts
- Add --exclude='*.tar.gz' to prevent self-archiving
- Add --warning=no-file-changed to ignore harmless warnings
- Prevents Exit code 1 from tar file change detection

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:12:23 +09:00
happybell80
3fb4618c6b Fix SIGPIPE issue with 3-step deployment
- Separate tar → scp → unpack to avoid pipe failures
- Add SSH stability options (ConnectTimeout, ServerAliveInterval)
- Clean up temporary files after deployment
- Prevents Exit code 141 (SIGPIPE) errors
- Maintains atomic swap and backup functionality

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:08:38 +09:00
happybell80
f5ec562748 Implement atomic deployment with backup and rollback
- Use atomic swap strategy: tmp → backup → deploy
- Automatic backup with timestamp for rollback
- Clean up old backups (keep 5 latest)
- Safer file deployment preventing partial updates
- Based on 2024 GitOps best practices

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-08 00:01:38 +09:00
happybell80
2d90d40b3a Simplify to minimal nginx proxy setup
- Use standard nginx:alpine image instead of custom build
- Simple default.conf for 80 → 5137 proxy
- Remove unnecessary nginx/ directory and complex configurations
- Clean, minimal setup for basic reverse proxy

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:54:00 +09:00
happybell80
c44bc1b4b4 Fix Docker Compose cache issue with proper cleanup
- Use docker-compose down to clear old service definitions
- Use docker system prune -f to remove cached metadata
- Verify new compose file is deployed correctly
- Force rebuild with --build flag
- This ensures new nginx-only config is used instead of cached old stack

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:50:39 +09:00
happybell80
f5253ac3e5 Add container cleanup step before deployment
- Stop and remove old containers with docker-compose down
- Prevents conflicts with cached old configurations
- Ensures clean deployment of new nginx-only setup

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:47:39 +09:00
happybell80
f95115b275 Simplify deployment: nginx only with proxy to port 5137
- Remove unnecessary services (api-base, test_api, frontend containers)
- Configure nginx to proxy to host.docker.internal:5137
- Simplified docker-compose.yml for initial deployment test

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:46:18 +09:00
happybell80
cb2de53935 Fix Docker permissions check: replace 'groups' with 'id' command
- Synology NAS doesn't have 'groups' command
- Use 'id' command instead which is available on all Unix systems
- This fixes the deployment pipeline error

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:42:48 +09:00
happybell80
0de5312b6d Remove sudo dependency from deployment
- Replace sudo rsync with cp command
- Add error suppression for permission denied files
- Continue deployment even if some files can't be overwritten
- Avoid password prompt issues with sudo

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:39:47 +09:00
happybell80
9b0c1ee117 Use temporary directory for safe deployment
- Extract files to /tmp first to avoid permission issues
- Use sudo rsync --delete for clean deployment
- Remove temporary files after deployment
- Handles root-owned files in target directory

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:31:04 +09:00
happybell80
ac006e88b3 Fix file overwrite permission issues in deployment
- Exclude .git directory from tar archive
- Clean target directory before extraction
- Prevent file exists and permission denied errors
- Ensure clean deployment without conflicts

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:23:59 +09:00
happybell80
7413e9d6d2 Fix Docker permission issues for admin user
- Add Docker socket permission check
- Implement fallback to sudo for docker commands
- Handle admin user Docker access limitations
- Add conditional logic for docker vs sudo docker-compose

Resolves: Docker socket permission denied errors

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:20:03 +09:00
happybell80
1c2cc6e956 Replace rsync with tar+SSH due to server permission issues
- Test rsync availability on remote host
- Use tar + SSH pipe as alternative deployment method
- Avoids rsync server permission denied errors
- More reliable for Synology NAS deployment

Resolves: Permission denied on rsync server command execution

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:17:31 +09:00
happybell80
8efdd2a590 Add detailed debugging steps for rsync permission issue
- Test directory access and permissions
- Check user identity and current directory
- Create target directory if not exists
- Add verbose SSH logging (-vvv) to rsync
- Troubleshoot permission denied error step by step

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:14:44 +09:00
happybell80
343300cbdc Trigger workflow with latest rsync configuration
- Force re-run with updated rsync command including admin@host:path
- Ensure GitHub Actions uses latest workflow file version

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:11:33 +09:00
happybell80
f90cbe3e86 Fix rsync permission denied by specifying admin user
- Explicitly specify admin@HOST in rsync command
- Ensure proper user authentication for file transfer
- Fixes Permission denied error during rsync step

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 23:08:23 +09:00
happybell80
f553408cc4 Fix SSH authentication issues in GitHub Actions
- Add SSH key verification step with ssh-add -l
- Properly configure known_hosts with ssh-keyscan
- Add SSH connection test before rsync
- Remove StrictHostKeyChecking=no from rsync and remote commands
- Follow webfactory/ssh-agent best practices

Resolves SSH key authentication failures during deployment

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 22:51:18 +09:00
happybell80
7d4d77ce1b Update deployment to rsync-based NAS deployment
- Replace Docker Hub CI/CD with direct NAS deployment
- Use rsync for reliable file synchronization
- Add SSH-based remote docker-compose execution
- Configure for Synology NAS volume path structure

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 22:34:25 +09:00
happybell80
56eaf8c9b5 Initial nginx-infra setup with GitOps deployment
- Add GitHub Actions CI/CD pipeline
- Configure Nginx reverse proxy for robeing services
- Setup docker-compose for full stack deployment
- Include health checks for all services
- Support for PostgreSQL and Redis data persistence

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 21:52:52 +09:00