안녕하세요. 이번 포스트에서는 Rocky Linux 서버에서 NTP 동기화 문제를 해결하고 JWT 토큰 오류를 해결한 과정을 공유하려고 합니다. 시간 동기화 문제는 JWT 토큰 생성 및 사용 시 중요한 요소이기 때문에, NTP 동기화 설정이 제대로 되어 있지 않으면 다양한 문제가 발생할 수 있습니다.

 

* NTP(Network Time Protocol) 서버는 네트워크 상에서 시간을 정확히 맞춰주는 서버입니다. 시스템 시간의 정확한 동기화는 보안, 로그 기록, 일정한 작업 수행을 위해 중요합니다. 정확한 시간 동기화가 없으면 인증 오류, 로그 불일치 등 문제가 발생할 수 있습니다.

문제 발생

서버 로그에서 JWT 토큰 생성 시 다음과 같은 오류가 발생했습니다:

Error: "invalid_grant", Description: "Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe"

timedatectl status 명령어를 통해 시간 동기화 상태를 확인한 결과, System clock synchronized: no로 표시되었고, NTP 서버와 동기화되지 않는 문제가 발견되었습니다.

문제 해결 과정

1. chrony 설치 및 설정

Rocky Linux에서는 chrony를 사용하여 NTP 동기화를 설정합니다.

chrony 설치

sudo yum install chrony

chrony.conf 파일 설정

/etc/chrony.conf 파일을 열어 NTP 서버 설정을 추가합니다.

sudo vi /etc/chrony.conf

 

다음과 같은 설정을 추가합니다:

# Use public servers from the pool.ntp.org project.
pool pool.ntp.org iburst
server time.google.com iburst
server time.cloudflare.com iburst
server ntp.ubuntu.com iburst

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Specify directory for log files.
logdir /var/log/chrony

2. chrony 서비스 재시작 및 동기화 강제 업데이트

chrony 서비스를 재시작하고 시간 동기화를 강제 업데이트합니다.

sudo systemctl restart chronyd
sudo chronyc -a makestep

3. timedatectl 상태 확인

시간 동기화 상태를 확인합니다.

 
timedatectl status

 

출력 예시:

Local time: Mon 2024-07-29 10:32:29 KST
Universal time: Mon 2024-07-29 01:32:29 UTC
RTC time: Mon 2024-07-29 01:32:29
Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

4. 방화벽 설정 확인

서버의 방화벽 설정을 확인하여 NTP 트래픽이 차단되지 않도록 설정합니다.

sudo iptables -A INPUT -p udp --dport 123 -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
sudo service iptables save

5. 수동 NTP 동기화

ntpdate를 사용하여 수동으로 NTP 서버와 동기화를 시도합니다.

sudo yum install ntpdate
sudo ntpdate pool.ntp.org

6. 시스템 재부팅

모든 설정을 완료한 후, 시스템을 재부팅하여 설정이 제대로 적용되도록 합니다.

sudo reboot

7. 최종 확인

시스템 재부팅 후, timedatectl status 명령어를 실행하여 시스템 시간 동기화 상태를 다시 확인합니다.

결론

이 단계를 통해 시스템 시간이 NTP 서버와 올바르게 동기화되었으며, JWT 토큰 생성 및 사용 시 발생하는 시간 관련 오류가 해결되었습니다. 시스템 시간이 정확하게 동기화됨으로써 시간에 민감한 작업이 정상적으로 수행될 수 있게 되었습니다.

이와 같은 문제를 해결할 때는 NTP 서버와의 시간 동기화 상태를 항상 확인하고, 필요한 경우 방화벽 설정 및 네트워크 설정을 점검하여 원활한 동기화가 이루어지도록 해야 합니다.

 

[Aws Ubuntu] MongoDB 설치 (tistory.com)


서버의 문제 혹은 접속이 불가능한 상황을 대응하기 위해 주 1회 mongodb 데이터를 S3로 백업할 수 있는 방법에 대해서 정리를 해보았습니다.

 

1. s3 인입 권한을 가진 계정 생성하여 Access Token 발급

1) AWS Console IAM 접속

2) 사용자 추가
3) 직접 정책 연결
4) 정책 생성 클릭
5) JSON 인입

- 삭제 권한은 제거하고 인입 권한만 부여

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        },
        {
            "Effect": "Deny",
            "Action": "s3:DeleteObject",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
        }
    ]
}

6) 권한 정책 창에서 정책 세로고침 후 연결

7) 보안 자격 증명 창에서 엑세스 키 발급

 

2. aws cli 설치 및 연동

# AWS CLI 설치
sudo apt update
sudo apt install awscli

# AWS CLI 구성
aws configure

3. mongodb_backup_to_s3.sh 생성

sudo vi mongodb_backup_to_s3.sh
#!/bin/bash

# MongoDB 설정
DB_NAME="chat"  # 백업할 MongoDB 데이터베이스 이름
# 백업 파일을 저장할 실제 존재하는 경로로 변경하세요
OUTPUT_DIR="/path/to/backup/folder"
MONGO_URI="mongodb://user:password@주소:port/chat?authSource=admin"

# S3 설정
S3_BUCKET="db-backup-s3"
TODAY_DATE=$(date '+%Y-%m-%d')
S3_PATH="s3://${S3_BUCKET}/app-chat-db/${TODAY_DATE}"

# 백업 디렉토리 확인 및 생성
if [ ! -d "$OUTPUT_DIR" ]; then
    mkdir -p "$OUTPUT_DIR"
fi

# MongoDB 데이터베이스의 모든 컬렉션 이름 가져오기
COLLECTIONS=$(mongosh "$MONGO_URI" --quiet --eval "db.getCollectionNames().join(' ')")

# 각 컬렉션에 대해 백업 수행
for COLLECTION_NAME in $COLLECTIONS
do
    # MongoDB에서 지정된 컬렉션 백업
    mongodump --uri="$MONGO_URI" --collection=${COLLECTION_NAME} --archive=${OUTPUT_DIR}/${COLLECTION_NAME}.gz

    # 백업된 tarball을 S3로 업로드
    aws s3 cp ${OUTPUT_DIR}/${COLLECTION_NAME}.gz ${S3_PATH}/

    # JSON 형식으로 백업 데이터를 변환
    mongoexport --uri="$MONGO_URI" --collection=${COLLECTION_NAME} --out=${OUTPUT_DIR}/${COLLECTION_NAME}.json

    # 백업된 JSON 데이터를 S3로 업로드
    aws s3 cp ${OUTPUT_DIR}/${COLLECTION_NAME}.json ${S3_PATH}/

    # (선택적) 로컬에 저장된 백업 파일 삭제
    rm ${OUTPUT_DIR}/${COLLECTION_NAME}.gz
    rm ${OUTPUT_DIR}/${COLLECTION_NAME}.json

    echo "Backup for ${COLLECTION_NAME} completed!"
done

4. 백업 테스트

./mongodb_backup_to_s3.sh

 

5. 자동 스케줄러(cron)

crontab -e
# 월요일 새벽 2시에 실행
0 2 * * 1 /path/to/script/mongodb_backup_to_s3.sh

 

서버나 DB 이슈로 인해 데이터 롤백이 필요하거나 복구가 필요한 경우를 위해 mariadb를 백업하는 방법을 알아보겠습니다. 

백업은 Mariabackup을 사용해보려고 합니다.

 

Mariabackup이란?

- MySQL과 MariaDB 에서 사용하던 무료 백업 라이브러리인 Percona XtraBackup을 바탕으로 작성된 포크입니다.

- DB 데이터를 통째로 복사하는 물리적 백업입니다.

- 복사 작업 중에 데이터에 업데이트가 발생할 수 있으므로 일관된 백업을 수행하기 위해 특별한 주의를 기울여야 합니다.

- MariaDB 10.3 버전 이상부터는 Percona XtraBackup이 지원되지 않기 때문에, Mariabackup을 사용해야 합니다.

 

전체 백업(Full backup)이란?

- 증분 백업이 참조할 기본 백업 데이터 입니다.

- 증분 백업을 실행하기 이전에 반드시 전체 백업을 먼저 실행해야 합니다.

backup_type = full-backuped
from_lsn = 0 (시작 지점)
to_lsn = 22886365542 (종료 지점)
last_lsn = 22886365551

 

 

증분 백업(Incremental Backup)이란?

- 전체 백업 데이터의 LSN(로그 시퀀스 번호)을 참조하여 마지막으로 변경된 지점부터 백업을 시작합니다.

- LSN은 백업 데이터 디렉토리의 'xtrabackup_checkpoints' 파일에 표기됩니다.

- 첫 증분 백업은 전체 백업 데이터를 참조하지만, 이후에 추가로 진행되는 증분 백업은 가장 최근에 진행된 증분 백업 데이터를 참조합니다.

backup_type = incremental
from_lsn = 22886365542 (기본 백업 데이터의 'to_lsn'을 기준으로 백업을 실행)
to_lsn = 22886370181
last_lsn = 22886370190

 

0. AWS CLI 설치

aws s3에 백업을 하기 위해 aws cli를 설치하고,

AmazonS3FullAccess 권한을 가지고 있는 Access Key ID, Secret Access Key로 세팅을 해보겠습니다.

# 1. Python 및 pip 설치
sudo apt update
sudo apt install python3 python3-pip

# 2. AWS CLI 설치
pip3 install awscli --upgrade --user

# 3. 설치 확인
aws --version

# 4. aws cli 세팅 (Access Key ID, Secret Access Key 입력)
aws configure

 

 

1. 전체 백업 (Full backup) 하는 방법

원하는 위치에 fullbackup.sh를 만들어 주시고,

하단의 내용을 넣어주시면 됩니다.

YEAR=$(date '+%Y')     #ex) 2024
MONTH=$(date '+%m')    #ex) 01
DATE=$(date '+%Y%m%d') #ex) 20240116

# 해당 연월의 경로 생성
sudo mkdir -p /db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}

# 해당 경로에 fullbackup 실행
sudo rm -rf /db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}/*
sudo mariabackup --backup --binlog-info=OFF --target-dir=/db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}/ --user=user --password=password

# 백업 파일 READ 권한 부여
sudo chmod +r -R /db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}

# last-checkpoint로 최신 파일 복사
sudo rm -rf /db-backup/last-checkpoint/*
sudo cp -r /db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}/* /db-backup/last-checkpoint/

# AWS S3 저장소 백업파일 업로드 : db-backup-s3
sudo aws s3 cp /db-backup/fullbackup/${YEAR}/${MONTH}/${DATE}/ s3://db-backup-s3/fullbackup/${YEAR}/${MONTH}/${DATE}/ --recursive

 

2. 증분 백업 (Incremental  backup) 하는 방법

원하는 위치에 increbackup.sh를 만들어 주시고,

하단의 내용을 넣어주시면 됩니다.

YEAR=$(date '+%Y')
MONTH=$(date '+%m')
DATE=$(date '+%Y%m%d')

# 해당 연월의 경로 생성
sudo mkdir -p /db-backup/increbackup/${YEAR}/${MONTH}/${DATE}

# 해당 경로에 incremental backup 실행
sudo rm -rf /db-backup/increbackup/${YEAR}/${MONTH}/${DATE}/*
sudo mariabackup --backup --target-dir=/db-backup/increbackup/${YEAR}/${MONTH}/${DATE}/ --incremental-basedir=/ddrive/db-backup/last-checkpoint --user=user --password=password

# 백업 파일 READ 권한 부여
sudo chmod +r -R /db-backup/increbackup/${YEAR}/${MONTH}/${DATE}

# last-checkpoint로 최신 파일 복사
sudo rm -rf /db-backup/last-checkpoint/*
sudo cp -r /db-backup/increbackup/${YEAR}/${MONTH}/${DATE}/* /db-backup/last-checkpoint/

# AWS S3 저장소 백업파일 업로드
sudo aws s3 cp /db-backup/increbackup/${YEAR}/${MONTH}/${DATE}/ s3://db-backup-s3/test-db/increbackup/${YEAR}/${MONTH}/${DATE}/ --recursive

 

3. 스케줄러 돌리는 방법

crontab -e를 실행시켜주시고

아래의 명령어를 입력 후 저장해주시면 됩니다 : >

# MariaDB Full Backup Upload 매주 월요일 새벽 3시 30분
30 3 * * 1 /home/ec2-user/backup-sh/fullbackup.sh >> /ddrive/db-backup/log/fullbackup/`date "+\%Y\%m\%d"`.txt 2>&1

# MariaDB Incremental Backup Upload 매주 화~일 새벽 3시 30분
30 3 * * 2-7 /home/ec2-user/backup-sh/increbackup.sh >> /ddrive/db-backup/log/increbackup/`date "+\%Y\%m\%d"`.txt 2>&1

#7일 지난 백업파일 삭제 (매주 월요일 새벽 3시 20분)
20 3 * * 1 sudo find /ddrive/db-backup/fullbackup/* -mtime +7 -exec rm -rf {} \;
20 3 * * 1 sudo find /ddrive/db-backup/increbackup/* -mtime +7 -exec rm -rf {} \;

# 로그파일 저장소와 동기화 (매일 3시 35분)
35 3 * * * sudo aws s3 sync /ddrive/db-backup/log/ s3://db-backup-s3/test-db/log/

Mongo DB에 유저를 생성하고 권한을 부여해보겠습니다.

먼저MongoDB 쉘에 접속을 해야합니다.

 

1. Mongo Shell 설치

sudo apt-get update
sudo apt-get install -y mongodb-org-shell

 

2. Mongo Shell 실행

mongosh

 

3. 관리자 유저 생성하는 법

# admin database 진입
use admin

# admin user 생성 및 권한 부여
db.createUser({
  user: "yourUsername",
  pwd: "yourPassword",
  roles: [{ role: "userAdminAnyDatabase", db: "admin" }]
});

 

4. 개발용 유저 생성하는 법

# 관리자로 접속
mongosh -u adminUser -p adminPassword --authenticationDatabase admin

# admin database 진입
use admin

# dev user 생성
db.createUser({
  user: "myuser",
  pwd: "mypwd",
  roles: []
});

# dev user 권한 부여
db.grantRolesToUser("myuser", [
  "readWriteAnyDatabase",
  "dbAdminAnyDatabase",
  "userAdminAnyDatabase"
])

# 접속 확인
mongodb://myuser:mypwd@{mongodb설치된url:port}

AWS CloudWatch는 애플리케이션을 모니터링할 수 있도록 해주는 서비스 입니다.

 

하지만 기본적으로 CPU 사용률, 디스크 I/O, 네트워크 부하 등 기본 지표는 제공을 하나

인스턴스 메모리 및 운영체제 디스크 사용률과 같은 운영체제의 지표는 가져오지 못합니다.

이를 위해서 CloudWatch Agent를 설치하여 메모리와 디스크 사용률을 가져올 수 있는 방법을 정리해보려고 합니다.

 

Linux(Ubuntu) 운영체제에서 진행해보겠습니다.

 

1. Aws IAM 역할 만들기

 

1) IAM 접속 > 역할 > 역할 생성 > AWS 서비스 > EC2 > CloudWatchAgentServerPolicy 

역할 생성
CloudWatchAgentServerPolicy 추가

2) 원하는 EC2 인스턴스에 IAM 역할을 수정해줍니다.


2. Ubuntu CloudWatchAgent 설치

 

1) CloudWatchAgent(amazon-cloudwatch-agent) 설치 합니다.

wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

 

2) 마법사 파일을 실행합니다.

 sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

3) Log는 모니터링하지 않고 CPU, 메모리만 나오도록 진행합니다.

$ /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
================================================================
= Welcome to the Amazon CloudWatch Agent Configuration Manager =
=                                                              =
= CloudWatch Agent allows you to collect metrics and logs from =
= your host and send them to CloudWatch. Additional CloudWatch =
= charges may apply.                                           =
================================================================
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [1]:
1
Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
1
Which user are you planning to run the agent?
1. root
2. cwagent
3. others
default choice: [1]:
2
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2
Do you want to monitor metrics from CollectD? WARNING: CollectD must be installed or the Agent will fail to start
1. yes
2. no
default choice: [1]:
2
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
1
Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:
1
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:
1
Do you want to aggregate ec2 dimensions (InstanceId)?
1. yes
2. no
default choice: [1]:
1
Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:
4
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
3
Current config as follows:
{
	"agent": {
		"metrics_collection_interval": 60,
		"run_as_user": "root"
	},
	"metrics": {
		"aggregation_dimensions": [
			[
				"InstanceId"
			]
		],
		"append_dimensions": {
			"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
			"ImageId": "${aws:ImageId}",
			"InstanceId": "${aws:InstanceId}",
			"InstanceType": "${aws:InstanceType}"
		},
		"metrics_collected": {
			"cpu": {
				"measurement": [
					"cpu_usage_idle",
					"cpu_usage_iowait",
					"cpu_usage_user",
					"cpu_usage_system"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				],
				"totalcpu": false
			},
			"disk": {
				"measurement": [
					"used_percent",
					"inodes_free"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"diskio": {
				"measurement": [
					"io_time",
					"write_bytes",
					"read_bytes",
					"writes",
					"reads"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"netstat": {
				"measurement": [
					"tcp_established",
					"tcp_time_wait"
				],
				"metrics_collection_interval": 60
			},
			"swap": {
				"measurement": [
					"swap_used_percent"
				],
				"metrics_collection_interval": 60
			}
		}
	}
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:
1
Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
1. yes
2. no
default choice: [2]:
2
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
2

Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
	"agent": {
		"metrics_collection_interval": 60,
		"run_as_user": "root"
	},
	"logs": {
		"logs_collected": {
			"files": {
				"collect_list": [
					{
						"file_path": "/var/log/nginx/access.log",
						"log_group_name": "access.log",
						"log_stream_name": "{instance_id}",
						"retention_in_days": -1
					}
				]
			}
		}
	},
	"metrics": {
		"aggregation_dimensions": [
			[
				"InstanceId"
			]
		],
		"append_dimensions": {
			"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
			"ImageId": "${aws:ImageId}",
			"InstanceId": "${aws:InstanceId}",
			"InstanceType": "${aws:InstanceType}"
		},
		"metrics_collected": {
			"cpu": {
				"measurement": [
					"cpu_usage_idle",
					"cpu_usage_iowait",
					"cpu_usage_user",
					"cpu_usage_system"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				],
				"totalcpu": false
			},
			"disk": {
				"measurement": [
					"used_percent",
					"inodes_free"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"diskio": {
				"measurement": [
					"io_time",
					"write_bytes",
					"read_bytes",
					"writes",
					"reads"
				],
				"metrics_collection_interval": 60,
				"resources": [
					"*"
				]
			},
			"mem": {
				"measurement": [
					"mem_used_percent"
				],
				"metrics_collection_interval": 60
			},
			"netstat": {
				"measurement": [
					"tcp_established",
					"tcp_time_wait"
				],
				"metrics_collection_interval": 60
			},
			"swap": {
				"measurement": [
					"swap_used_percent"
				],
				"metrics_collection_interval": 60
			}
		}
	}
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2
Program exits now.

 

4) 마법사로 만들어진 json 파일 호출합니다.

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json

5) Agent를 실행시켜주세요.

# 서비스 실행
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start

# 서비스 실행 확인
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
more /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log

 

6) CloudWatch > 모든 지표 정상동작 확인

정상 동작 확인

감사합니다.😊

기본으로 설정 되어 있는 AWS Linux 시간을 서울 시간으로 변경하는 법을 진행해보겠습니다.

1. 서울 시간이 있는지 확인하기

timedatectl list-timezones | grep Seoul

2. 시간 변경하기

sudo timedatectl set-timezone Asia/Seoul

3. 변경 확인하기

date

mariadb를 실행하려고 명령어를 쳤는데

sudo systemctl start mariadb

 

 mariadb.service: Main process exited, code=exited, status=1/FAILURE
 mariadb.service: Failed with result 'exit-code'.
 Failed to start MariaDB 10.6.12 database server.

오류가 발생했습니다. 

이를 해결할 수 있는 방법을 알아봤는데 생각보다 간단한 방법이 있었습니다.

 

# 패키지를 재구성하고 패키지 자체의 설정을 변경
sudo dpkg-reconfigure mariadb-server-10.6

# 재시작
sudo systemctl restart mariadb

성공 : >

 

docker로 배포 한 웹 서비스를 외부에서 확인할 수 있도록 linux Firewalld를 활용하여 방화벽 설정을 하는 법을 알아보겠습니다.

 

1. Aws EC2 보안그룹 설정

 

 

2. Aws EC2 배포용 Ubuntu Server Firewalld 설치 및 설정

# apt 명령어로 firewalld 설치
sudo apt update && sudo apt install firewalld -y

# firewalld 설치 확인
sudo firewall-cmd --version

# 8080 port 추가
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp

# 재로딩
sudo firewall-cmd --reload

# 방화벽 리스트 확인
sudo firewall-cmd --list-all

Aws Container를 사용하기 위해 Aws Linux Ubuntu 서버에서 aws cli 설치하는 법을 알아보겠습니다.

# Aws cli가 시스템에 설치되어 있는지 확인 후 설치
sudo apt update
sudo apt install awscli

# Aws cli 버전 확인
aws --version

# Aws Configure 설정
aws configure
secret Access Key = {}
access key = {}
Default region name = {}

 

Aws Ubuntu Server에 Mariadb DB 세팅을 시작하려고 합니다.

1) Server Mariadb 설치

2) 계정/비번 설정 하는 방법

3) 별도의 스토리지 공간에 데이터 쌓이도록 세팅 값 변경

4) 외부에서 접속 가능하도록 세팅

시작해보겠습니다 : )

 

데이터 저장만을 위한 스토리지 AWS EBS Volumn은 미리 세팅해두었으니 참고 부탁드립니다.
[Ubuntu] AWS EBS Volume 추가하기 (tistory.com)

 

1) Server Mariadb 설치

# 체크와 업데이트
sudo apt update && sudo apt-get -y upgrade

# mariadb 설치
sudo apt-get install -y mariadb-server

2) 계정/비번 설정 하는 방법

# 입력 없이 접속
sudo mysql

# 비번 설정 및 권한 부여
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '비밀번호' WITH GRANT OPTION;

# 적용
FLUSH PRIVILEGES;

3) Mariadb 설정 파일 편집

1. port 설정

2. 외부 접속 허용

3. 새로 추가된 ebs 볼륨 연결

# 데이터를 저장하고 싶은 위치에 폴더 생성
sudo mkdir -p /ddrive/mariadb-data

# mariadb stop 후
sudo service mysql stop

# 데이터 copy
sudo cp -R /var/lib/mysql/* /ddrive/mariadb-data/

# 해당 폴더에 권한 부여
sudo chown -R mysql:mysql /ddrive/mariadb-data

# 환경 설정 파일 편집
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

# 편집 후
sudo systemctl restart mariadb

 

4) 방화벽 허용

1. aws ec2 보안그룹 설정

2. db 서버 방화벽 설정

[Ubuntu] 외부 방화벽 설정하는 법 Firewalld (tistory.com)

 

오류 대응 및 추가 내용

[Ubuntu] Failed to start MariaDB 10.6.12 database server 오류 해결 (tistory.com)

 

[Ubuntu] Failed to start MariaDB 10.6.12 database server 오류 해결

mariadb를 실행하려고 명령어를 쳤는데 sudo systemctl start mariadb mariadb.service: Main process exited, code=exited, status=1/FAILURE mariadb.service: Failed with result 'exit-code'. Failed to start MariaDB 10.6.12 database server. 오류가

nitpick92.tistory.com

[Ubuntu] 외부 방화벽 설정하는 법 Firewalld (tistory.com)

 

[Ubuntu] 외부 방화벽 설정하는 법 Firewalld

docker로 배포 한 웹 서비스를 외부에서 확인할 수 있도록 linux Firewalld를 활용하여 방화벽 설정을 하는 법을 알아보겠습니다. 1. Aws EC2 보안그룹 설정 2. Aws EC2 배포용 Ubuntu Server Firewalld 설치 및 설

nitpick92.tistory.com

 

+ Recent posts