# 리눅스 서버에서 한 번에 띄우기. # # cp .env.example .env # 값 채우고 # docker compose up -d --build # # 다시 배포할 때: # git pull && docker compose up -d --build # # 업로드 폴더는 호스트의 ./uploads 로 빼 두었다. # 컨테이너를 지우고 다시 만들어도 올려 둔 사진은 그대로 남는다. services: gameserver: build: context: . dockerfile: Dockerfile image: genesis-gameserver:latest container_name: genesis restart: unless-stopped ports: # 호스트 5281 → 컨테이너 8080 # 앞에 nginx 같은 리버스 프록시를 둔다면 "127.0.0.1:5281:8080" 으로 묶어 # 외부에서 직접 접근하지 못하게 하는 편이 낫다. - "5281:8080" environment: ASPNETCORE_ENVIRONMENT: Production # 환경변수가 appsettings.json 보다 우선한다. 비밀값은 여기(.env)로만 넣는다. ConnectionStrings__DefaultConnection: ${DB_CONNECTION} Portfolio__AdminPassword: ${ADMIN_PASSWORD} Portfolio__MaxUploadBytes: ${MAX_UPLOAD_BYTES:-104857600} volumes: # 업로드된 사진. 이게 없으면 재배포 때 전부 사라진다. # 호스트 폴더 소유자를 컨테이너의 app 사용자(UID 1654)로 맞춰야 쓰기가 된다: # mkdir -p uploads && sudo chown -R 1654:1654 uploads - ./uploads:/app/wwwroot/uploads healthcheck: # 포트폴리오 공개 API 가 응답하면 정상으로 본다. test: ["CMD-SHELL", "wget -qO- http://localhost:8080/api/portfolio/categories >/dev/null 2>&1 || exit 1"] interval: 30s timeout: 5s retries: 3 start_period: 40s logging: driver: json-file options: max-size: "10m" max-file: "3"