lightsail에 quasar 웹 배포하기

SongWoo Yu·2025년 5월 12일

quasar build를 통해서 dist/spa에 배포할 파일을 생성한다.
scp -r dist/spa/* root@3.35.51.40:/opt/nginx/html를 통해서 dist/spa 디렉토리에 있는 모든 것을 3.35.51.40의 opt/nginx/html 디렉토리에 배포한다.

저번 시간에 nginx 디렉토리를 만들고 여기에 yml 파일을 만들었다. 그리고 이전에는 ubuntu를 통한 로그인을 하였는데, 이번에는 루트를 통한 로그인을 해볼 것이다.

ssh ubuntu@(IP adress)에서 ssh root@(IP address)를 해봤다. 전자는 잘 접속되지만, 후자는 우분투로 접속하라는 이야기가 나온다..

찾아보니 우분투에서 기본적으로 루트 로그인은 SSH를 통해 비활성화되어 있다고 한다.보안상 루트 로그인을 활성화하는 것은 권장되지 않으며, 가능하면 sudo를 사용하는 것이 더 안전하다.

루트 로그인을 활성화하려면 먼저 sudo passwd root를 통해서 패스워드 설정을 해야 한다. 그리고 ssh 서버 설정을 수정하여 루트 로그인을 허용해야 한다. sudo vi /etc/ssh/sshd_config 명령을 통해 편집기를 열어준 다음, #PermitRootLogin prohibit-password 이 부분을 변경한다. PermitRootLogin yes로 변경한다. 그리고 루트 로그인의 보안을 설정하기 위해 PasswordAuthentication yes이 부분이 yes로 되어 있는지를 확인한다. #이 앞에 붙어 주석처리가 되어 있다면, 이것도 지운다.

설정 적용을 위해 ssh를 재시작한다. sudo systemctl restart ssh 재설정해도 접속이 되지 않는다. 그 이유는 AWS Lightsail에서 기본적으로 /root/.ssh/authorized_keys 파일에 포함된 제한된 명령어 때문이다. 사용자가 /etc/ssh/sshd_config에서 PermitRootLogin yes로 설정하고 SSH 서비스를 재시작했음에도 불구하고, /root/.ssh/authorized_keys 파일에 포함된 제한된 명령어(command="echo 'Please login as the user \"ubuntu\" rather than the user \"root\".';echo;sleep 10;exit 142")가 루트 로그인을 차단하고 있는 것이다. 해당 부분을 삭제하고 ssh-ed로 시작하는 부분부터만 남기면 된다.

그런 후에 권한을 설정해준다.

chmod 600 authorized_keys
chown root:root authorized_keys

chmod 600: 파일 권한을 600으로 설정
chown root:root: 파일의 소유자와 그룹을 root로 설정
입력 후 아무 출력이 없는 것은 정상이다. 리눅스 명령어는 성공적으로 실행될 때 기본적으로 출력이 없으며, 오류가 있을 때만 메시지를 표시하기 때문이다.

그리고 로그인 해보면 바로 접속이 된다. 비밀번호 설정을 했는데, 바로 접속이 되는 이유는 ligth sale에 처음 가입할 때, 내 컴퓨터의 ssh key를 등록했기 때문이다.

이제 quasar.dev, scp -r dist/spa/* root@(address):/opt/nginx/html을 통해서 배포해보자. 그러면 또 안 될 것이다. 그 이유는 default.conf 파일이 생성되어있지 않았기 때문이다. Quasar의 SPA를 Nginx로 배포할 때, Vue Router의 history 모드를 사용한다면 무조건 해당 파일을 생성해야 한다.

default.conf 파일

이는 Nginx 서버의 설정 파일로, 요청을 어떻게 처리할지 정의하는 파일이다. Quasar SPA는 모든 경로에서 index.html을 제공하므로 해당 파일에서 try_files $uri $uri/ /index.html; 설정이 필요하다.

server {
    listen 80;
    server_name 3.35.51.40;

    root /usr/share/nginx/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

0개의 댓글