Dandy Now!
  • [Linux] 서버 이전을 위한 리눅스 명령어
    2024년 03월 08일 16시 59분 39초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    1. ubuntu root 활성화

    1-1. 현재 접속 계정 확인

    • 계정명만 출력 : whoami
    • 계정명 + 추가 정보 출력 : who am i 

     

    1-2. root 비밀번호 생성

    • sudo passwd root (명령 실행 후 사용할 비밀번호 입력하면 됨)

     

    1-3. root 계정으로 전환

    • su - root

    ✔ super user 참조

    더보기

    1. 프롬프트 root@(생략):~#와 같이 오른쪽에 #이 붙어있으면 super user를 의미한다. 반면 $이면 일반 유저이다.
    2. super user인 root 계정은 lock이 걸려있다.
    3. sudo passwd -u root 명령으로 unlock할 수 있다.
    4. sudo passwd -l root 명령으로 lock할 수 있다.

     

    1-4. /etc/ssh/sshd_config 파일의 내용 수정하여 root 로그인 가능하도록 설정

    • vi /etc/ssh/sshd_config

    ✔ vi 사용을 위한-최소한의-명령어 더보기 참조

    더보기
    • i : 수정
    • 콜론(:) 누른 후 wq : 저장 및 종료
    • 콜론(:) 누른 후 q! : 저장하지 않고 강제 종료

     

    ✔ vi 사용시 방향키가 ABCD로 표시되는 현상 발생 시 더보기 참조

    더보기

    1. 경로 이동 : cd ~

    2. .exrc 생성 : vi .exrc

    set bs=2
    set noc

     3. .exrc 적용 : source .exrc

     

    • PermitRootLogin yes 추가
    # (생략)
    
    #LoginGraceTime 2m
    #PermitRootLogin prohibit-password
    PermitRootLogin yes # 이 코드 추가
    #StrictModes yes
    #MaxAuthTries 6
    #MaxSessions 10
    
    # (생략)

     

    2. nginx

    2-1. 설치 전 패키지 목록 업데이트(공통 사항)

    • sudo apt update && sudo apt upgrade

     

    2-2. nginx 설치

    • sudo apt install nginx (설치 중간에 "Do you want to continue?" 물어보면 "y" 입력 후 엔터!)

     

    2-3. nginx 실행

    • 중지 : sudo service nginx stop
    • 시작 : sudo service nginx start
    • (재)부팅 시 자동 시작 : sudo systemctl enable nginx
    • 변경 사항 적용 : sudo service nginx restart
    • 테스트 : nginx -t
    • 상태 보기 1 : sudo service nginx status
    • 상태 보기 2 : ps -ef | grep nginx

     

    2-4. 방화벽 설정

    • 방화벽 상태 확인 : sudo ufw status
    • ssh 허용 : sudo ufw allow ssh
      • SSH 서비스 상태 확인 : sudo systemctl status ssh
      • SSH 서비스가 설치되지 않은 경우 설치 : sudo apt install openssh-server
      • SSH 서비스 시작 : sudo systemctl start ssh 
    • 방화벽 활성화 : sudo ufw enable
    • nginx 허용 설정 : sudo ufw allow 'Nginx Full' (80 & 443 포트 모두 허용)
    • 방화벽 활성화 삭제 : sudo ufw delete allow 포트번호

    🤔 방화벽을 활성화하면 외부에서 22번 포트로 서버에 접속할 수 없게 된다. 따라서 ssh를 허용해야 한다. sudo ufw allow ssh

     

    2-5. nginx 삭제

    • 관련 폴더 포함 삭제 : apt-get remove --purge nginx nginx-full nginx-common 

     

    3. 노드 버전 관리자(NVM)

    3-1. NVM 설치

    • 설치 명령 : curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
    • 환경 변수 설정 : export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
      [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

    😉 공식 문서 참조 : https://github.com/nvm-sh/nvm?tab=readme-ov-file#installing-and-updating

     

    3-2. 명령어

    • 설치 가능 버전 리스트 조회 : nvm ls-remote (안정적인 LTS 버전 추천함)
    • 설치예 : nvm install v18.19.1 (v18.19.1 버전을 설치, v를 붙여야 한다)
    • 현재 사용 중인 버전 확인 : nvm current
    • 설치된 버전 리스트 조회 : nvm ls
    • 사용할 버전 변경예 : nvm use v20.11.1 (v20.11.1 버전을 사용)
    • 기본 버전 설정예: nvm alias default v18 (v18.19.1 버전을 기본 버전으로 설정)

     

    4. PM2

    • NVM 설치 이후 진행해야 한다.
    • pm2 설치 : npm i pm2 -g

     

    5. MySQL

    5-1. MySQL 설치

    • 설치 명령 : sudo apt install mysql-server
    • 버전 확인 : mysql --version
    • 보안 설정 : sudo mysql_secure_installation
    더보기

    1. 패스워드 난이도를 설정할 것인가? y
    ※ y 를 하면 mysql 사용자의 비밀번호를 설정할 때, 비밀번호의 난이도를 강제할 수 있다.

    2. 비밀번호 난이도? 2
    ※ 여기에서는 STRONG로 설정함

    3. 익명 사용자를 제거할 것인가? y

    4. 원격으로 root의 mysql접속을 허용하지 않을 것인가? n

    5. Test 데이터베이스를 삭제할 것인가? y
    ※ 여기에서는 Test 데이터베이스를 사용하지 않기로 함.

    6. 권한 테이블을 reload할 것인가? y

     

    5-2. 방화벽 설정

    • mysql 3306 포트 허용 : sudo ufw allow mysql

     

    5-3. MySQL 실행

    • (백그라운드) 실행 : sudo service mysql start
    • 서버 재시작 시 자동 실행 : sudo systemctl enable mysql
    • 실행 중지 : sudo service mysql stop 
    • 재시작 : sudo service mysql restart

    😉 참조 : https://zetawiki.com/wiki/MySQL

     

    5-4. root 계정 PW 설정

    • mysql 접속 : sudo mysql
    • PW 설정
    mysql> USE mysql;
    
    # plugin을 mysql_native_password로 한다. 이렇게 하지 않으면 서버 애플리케이션에서 DB에 접근할 수 없었다(MySQL 8.0 보다 오래된 클라이언트 버전 사용했기 때문).
    # MySQL 8.0 이상에서는 기본적으로 caching_sha2_password를 사용, mysql_native_password보다 더 강력한 보안 지원함
    # 따라서 caching_sha2_password 사용 권장(사용 방법은 아래 명령어에서 mysql_native_password 생략하면 됨)
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<여기에 사용할 비밀번호 작성. 작은 따옴표 반드시 표시해야 함. 화살 괄호는 무시>';
    
    # 새로 고침
    mysql> FLUSH PRIVILEGES;
    
    # 나가기
    mysql> EXIT;
    • root로 mysql 접속 : mysql -u root -p
      • 적용한 비번 입력해야 함.

     

    5-5. 외부 접속 허용

    MySQL은 기본적으로 로컬에서만 접속된다. 외부 접속을 허용하기 위해서는 mysql에 접속하여 다음과 같이 설정한다.

    1) mysql 설정

    mysql> USE mysql;
    
    # 사용자를 확인한다. root 사용자가 localhost이면 외부에서 접근할 수 없다.
    mysql> SELECT Host,User,plugin,authentication_string FROM mysql.user;
    +-----------+------------------+-
    | Host      | User             |
    +-----------+------------------+-
    | ...       | ...              |
    | localhost | root             |
    +-----------+------------------+-
    
    # 외부에서 접속할 root 사용자를 생성한다.
    mysql> CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '<사용할 비밀번호 작성>';
    
    # 생성한 유저에게 외부에서 접속할 수 있도록 권한을 할당한다.
    mysql> GRANT ALL PRIVILEGES ON *.* to 'root'@'%';
    
    # 새로고침 한다.
    mysql> flush privileges;
    
    # 정상적으로 생성되었는지 확인한다. host가 %인 root 사용자가 생성되었다.
    mysql> SELECT Host,User,plugin,authentication_string FROM mysql.user;
    +-----------+------------------+-
    | Host      | User             |
    +-----------+------------------+-
    | %         | root             | 
    | ...       | ...              |
    | localhost | root             | 
    +-----------+------------------+-
    
    # 계정 삭제가 필요한 경우
    DROP user 계정명;

     

    2) MySQL 설정 파일(mysqld.cnf)을 nano 편집기로 열기

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

     

    3) mysqld.cnf 코드 중 bind-address 수정

    mysqld.cnf에 작성된 코드 중 bind-address 설정이 bind-address = 127.0.0.1인 경우 0.0.0.0으로 변경한다.

    bind-address = 0.0.0.0

    ※ nano 편집기 사용법 더보기 참조

    더보기
    파일 처리
    - Ctrl + S : 현재 파일 저장
    - Ctrl + O : 다른 이름으로 저장
    - Ctrl + R : 다른 파일 삽입
    - Ctrl + X : 종료

    편집
    - Ctrl + K : 현재 줄 삭제
    - Alt + 6 : 현재 줄 복사
    - Ctrl + U : 붙여넣기
    - Alt + T : 버퍼 끝까지 잘라내기
    - Alt + 3 : 주석
    - Alt + U : 실행 취소
    - Alt + E : 다시 실행

    검색 및 교체
    - Ctrl + Q : 뒤로 검색
    - Ctrl + W : 앞으로 검색
    - Alt + Q : 이전 검색
    - Alt + W : 다음 검색
    - Alt + R : 바꾸기

    삭제
    - Ctrl + H : 커서 앞 문자 삭제
    - Ctrl + D : 커서 뒤 문자 삭제
    - Ctrl + Del : 단어 삭제
    - Alt + Del : 줄 삭제

    이동
    - Ctrl + ← : 한 단어 뒤로 이동
    - Ctrl + → : 한 단어 앞으로 이동
    - Ctrl + A : 줄 시작으로 이동
    - Ctrl + E : 줄 끝으로 이동
    - Ctrl + P : 이전 줄 이동
    - Ctrl + N : 다음 줄 이동
    - Ctrl + ↑ : 이전 블록 이동
    - Ctrl + ↓ : 다음 블록 이동
    - Ctrl + Y : 이전 페이지 이동
    - Ctrl + V : 다음 페이지 이동
    - Alt + \ : 버퍼 시작으로 이동
    - Alt + / : 버퍼 끝으로 이동
    - Alt + G : 지정된 줄로 이동

    정보
    - Ctrl + C : 커서 위치 표시
    - Alt + D : 현재 파일 단어/줄/문자 수 표시
    - Ctrl + G : 도움말 표시

    그 외
    - Tab : 들여쓰기
    - Alt + N : 줄 번호 표시
    - Alt + P : 공백 표시
    - Ctrl + L : 화면 새로 고침
    - Ctrl + Z : nano 일시 중지

     

    4) mysqld.cnf 변경 후 MySQL 리스타트

    sudo service mysql restart

     

    🤔 백엔드 소스 코드가 변경된 것이 없는데 API 요청시 에러가 발생한다면...? sql_mode=only_full_group_by 에러가 의심된다. 해결 방법은 링크 참조(https://dodo1054.tistory.com/230). 더보기를 참조해도 좋음.

    더보기

    1. vi 실행 : vi /etc/mysql/mysql.conf.d/mysqld.cnf

    2. 설정 추가 : sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

     

    6. Java

    6-1. Java설치

    • open jdk 11 설치(원하는 버전 설치)
    sudo apt install openjdk-11-jdk

    ※ open jre만 필요한 경우 더보기 참조

    더보기
    sudo apt install openjdk-11-jre

     

    6-2. 환경 변수 설정

    • 전체 환경 변수 확인 : export
    • 환경 변수 추가 : vi ~/.bashrc
    # ~/.bashrc에 아래 코드 추가
    export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
    export PATH=$PATH:$JAVA_HOME/bin
    • 변경 내용 현재 실행된 쉘에 적용 : source ~/.bashrc
    • 적용한 환경 변수 확인 : echo $JAVA_HOME

     

    7. Let's Encrypt

    7-1. Let's Encrypt 설치

    • apt 업데이트를 하지 않았다면... : sudo apt update && sudo apt upgrade
    • letsencrypt 설치 : sudo apt install letsencrypt

    7-2. 무료 TLS 인증서 발급

     

    8. Git

    8-1. Git 설치

    • apt 업데이트를 하지 않았다면... : sudo apt update && sudo apt upgrade
    • git 설치 : sudo apt install git
    • git 버전 확인 : git --version

    8-2. Git 인증

     

    728x90
    반응형
    댓글