우당탕탕 개발일지

[방치RPG 서버 제작기] 8. 서버배포 및 SSL 인증서발급하기 본문

Server/방치RPG 서버

[방치RPG 서버 제작기] 8. 서버배포 및 SSL 인증서발급하기

devchop 2025. 4. 26. 18:48

 

서버대여하기.IP 주소 얻었으면  ssh 를 이용해 접속하기 ssh root@~.~.~.~

sudo apt update -y
sudo apt install docker.io -y
sudo apt install docker-compose -y

docker --version 
docker-compose --version

sudo reboot

sudo systemctl enable docker
sudo systemctl start docker

프로젝트 바로 아래에 docker-compose.yml, Dockerfile 2개 생성하기

 

Dockerfile

FROM openjdk:21-jdk-slim

WORKDIR /danteRPG

COPY dante-server.jar app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

 

docker-compose.yml

version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: my-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: pw
      MYSQL_DATABASE: db
      MYSQL_USER: sa
      MYSQL_PASSWORD: pw
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  app:
    build: .
    container_name: danteRPG-app
    restart: always
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/danteRPG
      SPRING_DATASOURCE_USERNAME: sa
      SPRING_DATASOURCE_PASSWORD: pw
    depends_on:
      - mysql

volumes:
  mysql_data:

 

.jar, Dockerfile, docker-compose.yml 세개를 서버로 이동하기 위한 쉘스크립트 제작

#!/bin/bash

# =========================
# 서버 정보
SERVER_IP="ip address"
SERVER_USER="root"
SERVER_PATH="/root/danteRPG"

# =========================
# 파일 경로
JAR_FILE=$(ls build/libs/*.jar | sort | tail -n 1)
DOCKERFILE="Dockerfile"
COMPOSE_FILE="docker-compose.yml"
echo "🔵 찾은 JAR 파일 경로: $JAR_FILE"

echo "🛠️ 프로젝트 빌드 중..."
./gradlew build

# =========================
# 복사 시작
echo "📁 서버에 디렉토리 생성 중..."
ssh $SERVER_USER@$SERVER_IP "mkdir -p $SERVER_PATH"

echo "🔵 빌드된 JAR 파일 복사 중..."
scp $JAR_FILE $SERVER_USER@$SERVER_IP:$SERVER_PATH/

echo "🔵 Dockerfile 복사 중..."
scp $DOCKERFILE $SERVER_USER@$SERVER_IP:$SERVER_PATH/

echo "🔵 docker-compose.yml 복사 중..."
scp $COMPOSE_FILE $SERVER_USER@$SERVER_IP:$SERVER_PATH/

echo "✅ 파일 복사 완료!"

 

클라이언트에서 빌드 후 3개 파일 서버로 복사하기 (쉘스크립트 실행)

chmode +x deploy.sh
./deploy.sh

 

서버에 접속해서 해당폴더로 이동, 서버띄우기(도커)

cd /root/danteRPG
sudo docker-compose up --build -d
sudo docker ps 

 

 

 

[도커파일 에러] COPY failed

docker-compose 빌드 시 에러발생

COPY dante-server.jar app.jar
COPY failed: file not found in build context or excluded by .dockerignore: stat dante-server.jar: file does not exist
ERROR: Service 'app' failed to build : Build failed

 

원인 : jar 파일 이름은 dante-server-0.0.1-SNAPSHOT.jar 인데, 도커파일에서 아래처럼 잘못된 이름을 참조하고있음.

 COPY dante-server.jar app.jar //dante-server.jar파일은 없음.

 

이를 해결하기 위해, deploy.sh 에서 파일이름을 dante-server.jar로 수정해서 복사하도록 변경하였음.

echo "🔵 빌드된 JAR 파일 복사 중 (서버에서 dante-server.jar로 저장)..."
scp "$JAR_FILE" "$SERVER_USER@$SERVER_IP:$SERVER_PATH/dante-server.jar"

 

서버는 정상적으로 활성화 됨. 유니티에서 통신 시 이런 에러 발생. > HTTP 통신은 보안상 위험하기 때문에 막아놓았다는 의미. 우리는 Https 를 사용해야 할 거 같다.

Non-secure network connections disabled in Player Settings
UnityEngine.Networking.UnityWebRequest:SendWebRequest ()
BackendUserHandler/<SendGuestLogin>d__3:MoveNext () (at 

 

nginx + https 구현하기

우선 도메인이 있어야하므로.. 도메인을 사자.. 흑

나의 경우 namecheap 사이트에서 구매했다 (흑흑..내돈..)

그리고 Advanced DNS 탭에서 Host Records를 추가했다. 총 2개 넣어준다..! 이 두개 외에 다른것들은 모두 삭제한다.

설정 항목 값

Type A Record
Host @
Value (IP주소) 내 ip주소
TTL Automatic

설정 항목 값

Type A Record
Host www
Value (IP주소) 내 ip주소
TTL Automatic
sudo apt install nginx -y
sudo ufw allow 'Nginx Full' #방화벽 열기

sudo vim /etc/nginx/sites-available/danteRPG #nginx 설정파일 생성
#아래 내묭 입력하기

 

새로 만든 파일에 다음 내용을 넣는다

server {
    listen 80;
    server_name <ip address> <www.domain.org> <domain.org>;

    location / {
        proxy_pass <http://localhost:8080>;
        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;
    }
}
#심볼릭 링크걸기
sudo ln -s /etc/nginx/sites-available/danteRPG /etc/nginx/sites-enabled/
##nginx 설정 테스트 및 리로드
sudo nginx -t
sudo systemctl rload nginx

 

HTTPS 인증서 발급받기

#인증서 발급받기 https
sudo apt install certbot python3-certbot-nginx -y

#ssl 인증서 발급
sudo certbot --nginx -d <domain address>

 

++) 한시간동안 5번 실패하면 일정시간 락걸리니까 한번의 트라이를 소중히하자... 나 이것때매 20분기다림 ㅠ