Post

우당탕탕 GCP VM 개설기

gcp vm 인스턴스 생성

1. gcp 에 가입 후 카드 등록하기

https://cloud.google.com/?hl=ko

2. 프로젝트 만들기

3. vm 만들기

머신 구성

리전 : asia-northeast3 영역 : asia-northeast3-a (seoul)

시리즈 : E2 사전설정 : e2-small(vCPU 2개, 2GB 메모리) 부팅디스크 : 운영체제-CentOS, 버전-CentOS Stream 8, 크기(GB)-30

  • CentOS 따라서, GCP에서 CentOS를 사용하는 것은 서버 환경에서 안정성과 보안성을 제공하고, RHEL과의 호환성 및 기술 지원이 용이하기 때문입니다. 반면에 Ubuntu는 개발 환경에서 높은 인기를 얻고 있으며, 개발자에게 좀 더 친숙한 사용자 경험을 제공합니다. 선택은 사용자의 요구 사항과 선호에 따라 다를 수 있습니다.
  • dnf dnf는 Dandified Yum의 약자로, Fedora와 CentOS 8 이상의 리눅스 배포판에서 사용되는 패키지 관리자입니다. dnf는 이전 버전의 yum과 거의 동일한 기능을 제공하면서 더욱 빠르고 안정적인 패키지 설치 및 업그레이드를 지원합니다. dnf는 yum과 마찬가지로 터미널에서 사용할 수 있는 명령어 기반의 패키지 관리자입니다. 예를 들어, “dnf install [패키지명]” 명령어를 사용하여 패키지를 설치할 수 있습니다. dnf는 리눅스 배포판에서 기본적으로 설치되어 있으며, 다양한 패키지 관리 작업을 수행하는 데 사용됩니다. 네, dnf는 apt나 brew와 비슷한 목적을 가진 패키지 관리자입니다. apt는 Debian 계열의 리눅스 배포판에서 사용되는 패키지 관리자이며, brew는 macOS 운영 체제에서 사용되는 패키지 관리자입니다. 이들 패키지 관리자는 각각 해당 운영 체제에서 소프트웨어 패키지의 설치, 업그레이드, 삭제, 의존성 관리 등의 작업을 지원합니다. dnf 역시 RPM 패키지를 관리하는 패키지 관리자이며, 사용자가 필요로 하는 소프트웨어 패키지를 쉽게 설치하고 유지 관리할 수 있도록 지원합니다. dnf는 apt나 brew와 같이 명령어를 통해 패키지를 관리하며, 해당 패키지의 의존성을 자동으로 처리하므로 편리합니다. 따라서, 이러한 패키지 관리자들은 사용자가 운영 체제에서 필요로 하는 소프트웨어를 쉽게 설치하고 유지 관리할 수 있도록 지원합니다. 하지만 운영 체제별로 패키지 포맷이 다르기 때문에, apt는 Debian 계열의 리눅스 배포판에서, brew는 macOS에서, dnf는 Fedora와 CentOS 8 이상의 리눅스 배포판에서 사용됩니다.

방화벽

✅ HTTP 트래픽 허용

✅ HTTPS 트래픽 허용

  • 사진 gcp sql 230431

4. 방화벽 설정

https://sas-study.tistory.com/491

5. ssh 생성 및 vm 에 접속

https://velog.io/@hongseoda/내배캠TIL519-GCP-ssh-연결

  1. 내 컴퓨터에서 ssh 키 만들기

    1
    2
    3
    4
    
    ssh-keygen -t rsa -f ~/.ssh/[ KEY_FILENAME ] -C "GCP 인스턴스 생성 계정 아이디만"
    cat ~/.ssh/[ KEY_FILENAME ].pub
    
    ssh-keygen -t rsa -f ~/.ssh/[ KEY_FILENAME ] -C "GCP 인스턴스 생성 계정 아이디만"
    
  2. 대시보드에서 Compute Engine 클릭

    외부 IP 주소 확인하기!

  3. [ KEY_FILENAME ].pub 내용 전부 복사 후 여기 붙여넣기

  4. 내 터미널에서 vm 에 접속하기

    1
    2
    
    // ssh -i [ 기존에 만든 ssh 키 파일 위치(예: ~/.ssh/key ] USERNAME@EXTERNAL_IP
    ssh -i  ~/.ssh/elice_study shin.yubin18@34.22.92.138
    

6. vm 접속 후

nginx 설치하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
whoami
//사용자 계정 맞나 물어보기

cat/etc/redhat-release
//사용자 계정 맞나 물어보기

dnf list installed
//dnf가 갖고 있는 전체 패키지 리스트를 준다

dnf search nodejs
//dnf가 nodejs를 갖고 있는지 확인한다.

sudo dnf install dnf-utils -y
// dnf-utils 를 설치해준다. nginx 설치할때 좋다.

sudo vi /etc/yum.repos.d/nginx.repo

```안에 내용 그대로 넣어주기
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

sudo yum-config-manager –enable nginx-stable //위 처럼 설정해주면 yum config manager가 nginx를 저장소를 우리가 설정한대로 설정해준다

sudo yum install nginx sudo nginx // nginx 야 켜져라~

ps -ef | grep nginx // nginx 일 잘하고 있는지 보자. process 확인

sudo nginx -s stop // nginx 멈추기 ƒ sudo nginx -s reload // nginx 재시작

cd /etc/nginx/conf.d // nginx 의 config 설정이 들어있는 파일은 여기다. sudo systemctl stop nginx sudo systemctl start nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
**volta, nodejs 설치하기**

```jsx

sudo dnf install curl

curl https://get.volta.sh | bash
// volta(nodejs 버전 자유자재로 nvm비슷한거)

source ~/.bashrc
//exit 한번 하고 재시작해야함

-----------------------------------------
volta
// volta가 뜹니다~

--------------------------------------- 안되면 아래 확인해보기
vi ~/.profile
// volta 설치하면 환경변수 설정되어있다.

echo $PATH
// PATH 한번 확인해보기~

// PATH에 등록되어있지 않으면 터미널 한번 껐다 켜기

------------------------------------------------
volta install node
// nodejs 설치하기~

pm2 설치하기

1
volta install pm2

git 설치하기

1
2
3
4
5
sudo dnf install git
git --version
git config --global user.name "yubin"
git config --global user.email "shin.yubin18@gmail.com"
git clone 저장소주소

7. vm 접속 비밀번호 생성

sudo dnf install openssh-server

sudo systemctl start sshd

sudo systemctl enable sshd

sudo firewall-cmd –permanent –add-service=ssh sudo firewall-cmd –reload

sudo adduser yubin.shin18 sudo passwd yubin.shin18

ssh yubin.shin18@외부아이피주소

8. 엘리스 자료 참고하기

VM 활용 매뉴얼

1
2
3
4
5
6
7
8
9
# (백엔드 실행-띄어쓰기 중요) yarn start 대신 pm2로 실행
pm2 --name express start npm -- run start

# (참고) pm2로 실행 중인 프로세스 보기
pm2 list

# (참고) pm2로 실행 중인 프로세스 종료
pm2 delete <번호>

설정파일에 문법 오류 없음을 테스트하고, nginx 재실행하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 문법 오류 없음을 테스트
sudo nginx -t

# nginx 재실행 (재실행해야, 수정된 설정파일이 반영됨)
sudo systemctl reload nginx

# (참고) 만약 위 명령어가 안 되는 경우
sudo service nginx restart

# 그래도 오류가 나는 경우
애초에 npm start가 잘 되는지 다시 한 번 확인합니다.
설정파일을 다시 한 번 확인합니다.

# 아무래도 다양한 오류가 발생할 수 있습니다.
코치님, 혹은 튜터님께 질문해 보세요.

주소창에 도메인 주소로 접속해보기

1
2
# 접속 링크 예시
http://<배포용 IP 주소>
  • nginx 설정파일

    1
    2
    3
    4
    5
    
    # nginx 설치 (시간이 조금 걸립니다)
    sudo dnf install nginx
    
    # 설정 파일 수정
    sudo nano /etc/nginx/sites-available/default
    
    • nginx 설정파일

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      
      # Default server configuration
      #
      server {
              listen 80 default_server;
              listen [::]:80 default_server;
      
              # SSL configuration
              #
              # listen 443 ssl default_server;
              # listen [::]:443 ssl default_server;
              #
              # Note: You should disable gzip for SSL traffic.
              # See: <https://bugs.debian.org/773332>
              #
              # Read up on ssl_ciphers to ensure a secure configuration.
              # See: <https://bugs.debian.org/765782>
              # Self signed certs generated by the ssl-cert package
              # Don't use them in a production server!
              #
              # include snippets/snakeoil.conf;
      
              root /var/www/html;
      
              # Add index.php to the list if you are using PHP
              index index.html index.htm index.nginx-debian.html;
      
              server_name _;
      
              location / {
                      # First attempt to serve request as file, then
                      # as directory, then fall back to displaying a 404.
                      proxy_pass <http://127.0.0.1:5000>;
              }
      
              # pass PHP scripts to FastCGI server
              #
              #location ~ \\.php$ {
              #       include snippets/fastcgi-php.conf;
              #
              #       # With php-fpm (or other unix sockets):
              #       fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
              #       # With php-cgi (or other tcp sockets):
              #       fastcgi_pass 127.0.0.1:9000;
              #}
      
              # deny access to .htaccess files, if Apache's document root
              # concurs with nginx's one
              #
              #location ~ /\\.ht {
              #       deny all;
              #}
      }
      # Virtual Host configuration for example.com
      #
      # You can move that to a different file under sites-available/ and symlink ># to sites-enabled/ to enable it.
      #
      #server {
      #       listen 80;
      #       listen [::]:80;
      #
      #       server_name example.com;
      #
      #       root /var/www/example.com;
      #       index index.html;
      #
      #       location / {
      #               proxy_pass <http://127.0.0.1:5000>;
      #       }
      #}
      
      

      오른쪽 코드를 찾으시고, -> try_files $uri $uri/ =404; 오른쪽처럼 수정하세요 -> proxy_pass http://127.0.0.1:5000;

      수정 후 저장

      컨트롤 x -> 컨트롤 y -> 엔터

[트러블슈팅]

This post is licensed under CC BY 4.0 by the author.