Oracle Linux 단일 서버용 운영 구성입니다.
thing.qook.io,thingcoding.qook.io→main:8080thing-admin.qook.io→admin:10000- HTTP(80) → HTTPS(443) 리다이렉트
- Let's Encrypt 인증서 발급 및 자동 갱신
세 저장소를 같은 디렉터리에 둡니다.
/home/opc/work/
├── thingcoding_infra/
├── thingcoding_main/
├── thingcoding_manage/
├── wallet/
└── static_resource/
├── compileTmp/
├── libraries/
├── thingProjectImg/
├── errorReportImg/
└── profileImg/
DNS의 세 도메인 A 레코드가 서버 공인 IP를 가리키는지 확인하고 Oracle Cloud 보안 목록/NSG와 서버 방화벽에서 TCP 80, 443을 허용합니다.
cd /home/opc/work/thingcoding_infra
cp .env.example .env
vi .env
chmod +x scripts/*.sh
./scripts/init-ssl.sh.env에는 실제 이메일과 DB 접속 정보를 입력해야 합니다. Oracle Wallet을 사용한다면 기본 경로는 /home/opc/work/wallet이며 WALLET_PATH로 변경할 수 있습니다.
컴파일 임시 파일과 업로드 이미지는 기본적으로 /home/opc/work/static_resource에 저장되며 STATIC_RESOURCE_PATH로 변경할 수 있습니다. 배포 전에 다음 디렉터리를 생성합니다.
mkdir -p /home/opc/work/static_resource/{compileTmp,thingProjectImg,errorReportImg,profileImg}Arduino CLI는 서버 호스트에 설치하고 main 컨테이너에 읽기 전용으로 마운트합니다.
mkdir -p /home/opc/work/arduino-cli /home/opc/work/arduino-cli-data
curl -fsSL https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_64bit.tar.gz \
| tar -xz -C /home/opc/work/arduino-cli
chmod +x /home/opc/work/arduino-cli/arduino-cli
/home/opc/work/arduino-cli/arduino-cli \
--config-dir /home/opc/work/arduino-cli-data config init
/home/opc/work/arduino-cli/arduino-cli \
--config-dir /home/opc/work/arduino-cli-data \
config set directories.data /home/opc/work/arduino-cli-data/data
/home/opc/work/arduino-cli/arduino-cli \
--config-dir /home/opc/work/arduino-cli-data core update-index
/home/opc/work/arduino-cli/arduino-cli \
--config-dir /home/opc/work/arduino-cli-data core install arduino:avrARM64 서버는 Linux_ARM64 패키지를 사용해야 합니다. 설치 후 docker compose build main && docker compose up -d main으로 반영합니다.
상세 문서:
Git 소스 업데이트부터 앱별 재배포까지의 전체 절차는 Git 소스 업데이트 후 재배포를 확인하세요.
두 앱 전체 배포:
cd /home/opc/work/thingcoding_infra
./scripts/deploy.sh한 앱만 배포:
./scripts/deploy-service.sh main
./scripts/deploy-service.sh admin컨테이너 하나만 재시작하려면 docker compose restart main 또는 docker compose restart admin을 사용합니다. 환경변수 변경 반영과 주의사항은 단일 컨테이너 재시작 가이드를 확인하세요.
상태와 로그 확인:
docker compose ps
docker compose logs -f --tail=200 main admin nginx인증서 갱신은 certbot 컨테이너가 12시간마다 확인하고, nginx 컨테이너가 6시간마다 설정을 다시 읽습니다.
애플리케이션 빌드는 Java/Maven 설치 없이 Maven 컨테이너에서 순차 실행됩니다. 1GB RAM 서버에서 주 서비스인 main은 최대 힙 320MB/컨테이너 500MB, 사용 빈도가 낮은 admin은 최대 힙 128MB/컨테이너 256MB로 제한했습니다. 빌드 중 메모리가 부족하면 임시 swap을 추가하거나, CI에서 이미지를 빌드해 서버에서는 pull만 하는 방식을 권장합니다.