VPC, Subnet 생성, 설정 후 각 Subnet에 인스턴스(서버)를 생성해줬다.
스펙
네이버 클라우드 서버 접속 방법은 AWS와 차이가 있다.
ssh -l root -p [포트번호 (ex: 22)] [서버 IP주소]
쉘 프롬프트 포맷 변경
$ sudo vi ~/.bashrc
USERNAME=BASTION (서버 별명)
PS1='[\e[1;31m$USERNAME\e[0m][\e[1;32m\t\e[0m][\e[1;33m\u\e[0m@\e[1;36m\h\e[0m \w] \n\$ \[\033[00m\]'
$ source ~/.bashrc
## Bastion Server에서 공개키를 생성합니다.
bastion $ ssh-keygen -t rsa
bastion $ cat ~/.ssh/id_rsa.pub
server $ mkdir ~/.ssh
server $ vi authorized_keys
## 파일 내에 Bastion Server 공개키 저장
server $ vi /etc/ssh/sshd_config
## 설정파일 내에 아래 설정들을 추가
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
$ systemctl restart sshd.service
bastion $ vi /etc/hosts
[서비스용IP] [별칭]
## 다른 서버 접속시
bastion $ ssh [별칭]
💡 git clone시 https 주소로 연결이 안된다면 was의 아웃바운드 설정을 확인하자 80, 443 포트 오픈
자바 설치
wget https://download.oracle.com/java/19/latest/jdk-19_linux-x64_bin.tar.gz
tar zxvf jdk-19_linux-x64_bin_tar.gz
sudo mv jdk-19 /usr/share/
export JAVA_HOME=/usr/share/jdk-19.0.2
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
javac -version #확인
도메인 네임
Nginx Server
$ sudo apt-get update && \
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \
sudo apt-key fingerprint 0EBFCD88 && \
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
sudo apt-get install -y docker-ce && \
sudo usermod -aG docker root && \
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose && \
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
추가적으로 docker-compose가 설치가 되지 않아서 아래 3개의 명령어를 다시 실행했음
8번 줄 usermod docker 뒤에 호스트네임이 ubuntu로 되어있었다. 네이버 클라우드에선 default가 root.
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose && \
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker run -it --rm --name certbot \
-v '/etc/letsencrypt:/etc/letsencrypt' \
-v '/var/lib/letsencrypt:/var/lib/letsencrypt' \
certbot/certbot certonly -d '[내 도메인]' --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
이메일 입력 후
$ cp /etc/letsencrypt/live/[도메인주소]/fullchain.pem ./
$ cp /etc/letsencrypt/live/[도메인주소]/privkey.pem ./
events {}
http {
upstream app {
server [was ip]:8080;
}
# Redirect all traffic to HTTPS
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/[도메인주소]/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/[도메인주소]/privkey.pem;
# Disable SSL
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 통신과정에서 사용할 암호화 알고리즘
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
# Enable HSTS
# client의 browser에게 http로 어떠한 것도 load 하지 말라고 규제합니다.
# 이를 통해 http에서 https로 redirect 되는 request를 minimize 할 수 있습니다.
add_header Strict-Transport-Security "max-age=31536000" always;
# SSL sessions
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
location / {
proxy_pass http://app;
}
}
}
version: '3.1'
services:
nginx:
image: nginx:latest
ports:
- 80:80
- 443:443
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/fullchain.pem:/etc/letsencrypt/live/ujtimedeal-api.n-e.kr/fullchain.pem
- ./nginx/privkey.pem:/etc/letsencrypt/live/ujtimedeal-api.n-e.kr/privkey.pem
container_name: reverse-proxy
docker-compose up -d
💡 DNS 연결 IP를 nginx IP로 변경해주어야함
[Naver Cloud Platform] SSH 키 기반 접속 설정
2-1. [NCLOUD] 네이버 클라우드에서의 보안 – Server (ACG)