문서화를 하는 이유!
•
불의의 사고(해킹, 휴먼 에러 등..)로 ec2 서버 자체가 삭제되어 버리는 불상사 대비
모든 서버 새로 만들었을 때 추가로 할 일
•
•
ubuntu 계정에 도커 실행 권한 추가하기
sudo usermod -aG docker ubuntu
Bash
복사
•
AWS 설정 변경 (8→30)
•
스왑 메모리 설정
// 스왑 파일 설정
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
// 서버 재부팅 시 스왑 자동 설정
sudo vi /etc/fstab
// 파일이 열리면 최하단에 다음 문구를 추가한다.
/swapfile swap swap defaults 0 0
Markdown
복사
•
타임존 설정
// 타임존 확인
timedatectl
// 타임존 설정
sudo timedatectl set-timezone Asia/Seoul
Markdown
복사
•
ssh config 설정
❯ vim ~/.ssh/config
Host chongdae-dev
HostName 13.124.137.6
User ubuntu
IdentityFile /Users/masonkimseoul/woowacourse/key-chongdae-market-dev.pem
ForwardAgent yes
Host chongdae-prod
HostName 3.34.154.207
User ubuntu
IdentityFile /Users/masonkimseoul/woowacourse/key-chongdae-market-prod.pem
ForwardAgent yes
Host chongdae-dev-db
HostName 10.0.100.224
User ubuntu
IdentityFile /Users/masonkimseoul/woowacourse/key-chongdae-market-dev-db.pem
ProxyJump chongdae-dev
Host chongdae-prod-db
HostName 10.0.100.203
User ubuntu
IdentityFile /Users/masonkimseoul/woowacourse/key-chongdae-market-prod-db.pem
ProxyJump chongdae-prod
//...처럼 바꾸면 ssh chongdae-dev 만 입력해서 접속 가능
Java
복사
웹 서버 새로 만들었을 때 할 일
•
docker-compose 파일들과 nginx config 파일 아래 레포 참고해서 넣기
mkdir nginx-server/data
// 아래는 현재 스냅샷
```
ubuntu@ip-10-0-0-17:~/nginx-server$ ls
certbot.yml data docker-compose-no-ssl.yml docker-compose-ssl.yml
ubuntu@ip-10-0-0-17:~/nginx-server$ cd data
ubuntu@ip-10-0-0-17:~/nginx-server/data$ ls
certbot nginx-no-ssl nginx-ssl
```
Markdown
복사
•
docker 실행
docker network create nginx_network
docker compose -f docker-compose-no-ssl.yml up
docker compose -f certbot.yml up
docker compose -f docker-compose-ssl.yml up -d
Markdown
복사
웹 서버 다시 켰을 때 할 일
•
docker 실행
docker compose -f docker-compose-ssl.yml up -d
Markdown
복사
◦
혹시 애플리케이션 서버 수동 배포할 땐 (ci/cd 안 거칠 때)
docker run -d --name chongdae-backend —-network nginx_network chongdae/chongdae-backend-prod:726abc8
Markdown
복사
애플리케이션 서버 새로 만들었을 때 할 일
•
self hosted runner 생성(github 참고) 및 켜기
•
cloudwatch 다운로드 → 설정 파일 추가 → 실행
wget https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
Bash
복사
// 로그 메트릭 설정(config.json)은 현재 다음과 같다. 수정이 필요하면 값 수정
cd /opt/aws/amazon-cloudwatch-agent/bin
vim config.json
```
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "cwagent"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/logs/backend.log",
"log_group_class": "STANDARD",
"log_group_name": "2024-chongdae-market-dev-log", // 여기만 변경!
"log_stream_name": "{instance_id}",
"retention_in_days": 14
}
]
}
}
},
"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"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"swap": {
"measurement": [
"swap_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
```
Markdown
복사
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
Bash
복사
애플리케이션 서버 다시 켰을 때 할 일
현재 dev 애플리케이션 서버는 shell script로 아래 동작 전부 대체 중입니다
•
self hosted runner 켜기
nohup /user/home/ubuntu/actions-runner/run.sh &
Bash
복사
•
cloudwatch 실행(config.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
Bash
복사
DB 서버 새로 만들었을 때 할 일
•
mysql 컨테이너 설정
mkdir chongdae-db-config
cd chongdae-db-config
vim docker-compose.yml
```
version: "3.9"
services:
mysql:
image: mysql:8.0.28-oracle
container_name: chongdae-db
platform: linux/arm64/v8
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: chongdae
MYSQL_PASSWORD: password
TZ: Asia/Seoul
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/config:/etc/mysql/conf.d
- ./mysql/init:/docker-entrypoint-initdb.d
```
Markdown
복사
•
db 초기 설정 및 db 컨테이너 실행
◦
v1 || dev, prod
// db 관련 세팅
mkdir -p mysql/init
vim mysql/init/init.sql
```
CREATE DATABASE chongdaemarket;
SET time_zone = 'Asia/Seoul';
USE chongdaemarket;
create table member
(
id bigint auto_increment primary key,
nickname varchar(10) not null,
provider enum ('KAKAO') null,
login_id varchar(255) not null,
password varchar(255) not null,
created_at datetime(6) not null,
updated_at datetime(6) not null,
unique (login_id),
unique (nickname)
);
create table offering
(
id bigint auto_increment primary key,
member_id bigint not null,
title varchar(30) not null,
description text not null,
thumbnail_url text null,
product_url text null,
meeting_date datetime(6) not null,
meeting_address varchar(255) not null,
meeting_address_detail varchar(255) null,
meeting_address_dong varchar(255) null,
total_count int not null,
current_count int not null,
total_price int not null,
origin_price int null,
discount_rate double null,
offering_status enum ('AVAILABLE', 'CONFIRMED', 'FULL', 'IMMINENT') not null,
room_status enum ('BUYING', 'DONE', 'GROUPING', 'TRADING') not null,
created_at datetime(6) not null,
updated_at datetime(6) not null,
foreign key (member_id) references member (id)
);
create table offering_member
(
id bigint auto_increment primary key,
member_id bigint not null,
offering_id bigint not null,
role enum ('PARTICIPANT', 'PROPOSER') not null,
created_at datetime(6) not null,
updated_at datetime(6) not null,
foreign key (offering_id) references offering (id),
foreign key (member_id) references member (id)
);
create table comment
(
id bigint auto_increment primary key,
member_id bigint not null,
offering_id bigint not null,
content varchar(80) not null,
created_at datetime(6) not null,
updated_at datetime(6) not null,
foreign key (member_id) references member (id),
foreign key (offering_id) references offering (id)
);
```
docker compose up -d
// root 원격접속 제거
// chongdae 패스워드 변경 및 권한 부여
docker exec -it chongdae-db /bin/bash
mysql -u root -p
패스워드 입력 : root
DROP USER 'root'@'%';
ALTER USER 'root'@'localhost' IDENTIFIED BY '엄청나게 강력한 특수문자 대,소문자 숫자 포함된 패스워드로 설정';
ALTER USER 'chongdae'@'%' IDENTIFIED BY '엄청나게 강력한 특수문자 대,소문자 숫자 포함된 패스워드로 설정';
GRANT SELECT, INSERT, UPDATE, DELETE ON chongdaemarket.* TO 'chongdae'@'%';
FLUSH PRIVILEGES;
Markdown
복사
◦
v2 || 20240911_14:15 || dev, prod, rds-prod
ALTER TABLE offering ADD COLUMN is_deleted TINYINT(1) NOT NULL DEFAULT 0;
SQL
복사
◦
v3 || 20240924_16:18 || dev, prod
ALTER TABLE member MODIFY nickname VARCHAR(255);
SQL
복사
◦
v4 || 20240925_13:18 || dev
GRANT INDEX ON chongdae.* TO 'chongdae'@'%';
FLUSH PRIVILEGES;
SQL
복사
◦
v5 || 20241021_15:16 || dev
ALTER TABLE member ADD COLUMN fcm_token VARCHAR(255) NOT NULL;
SQL
복사
◦
v6 || 20241022_15:56 || dev
ALTER TABLE member ALTER COLUMN fcm_token SET DEFAULT 'invalid';
SQL
복사
◦
v7 || 20241023_17:11 || prod
ALTER TABLE member ADD COLUMN fcm_token VARCHAR(255) NOT NULL;
SQL
복사
◦
인덱스 설정 (20250331_01:02 dev prod 수정 완료)
create index idx_title_status on offering(title, offering_status);
create index idx_meetingAddress_status on offering(meeting_address, offering_status);
create index idx_discountRate on offering(discount_rate);
create index idx_meetingDate_idDesc on offering(meeting_date, id desc);
create index idx_isDeleted on offering(is_deleted);
SQL
복사
◦
v8 || 20250306_11:46 || dev, prod
create table auth (
id bigint auto_increment primary key,
member_id bigint,
session_id varchar(255),
refresh_token varchar(255) not null,
created_at timestamp(6) not null,
updated_at timestamp(6) not null,
foreign key (member_id) references member (id)
)
SQL
복사
◦
v9 || 20250401_03:36 || dev, prod
ALTER TABLE offering ADD COLUMN version BIGINT;
SQL
복사
◦
v10 || 20250410_16:01 || dev, prod
ALTER TABLE offering ALTER COLUMN version SET DEFAULT 0;
SQL
복사
DB 서버 다시 켰을 때 할 일
cd chongdae-db-config
docker compose up -d
Markdown
복사
로컬에서 DB 서버 접속할 때 할 일 (ForwardAgent)
•
dev db
vim ~/.ssh/config
```
Host chongdae-dev
HostName 13.124.137.6
User ubuntu
IdentityFile ~/key-chongdae-market-dev.pem
ForwardAgent yes
Host chongdae-dev-db
HostName 10.0.100.224
User ubuntu
IdentityFile ~/key-chongdae-market-db.pem
ProxyJump chongdae-dev
```
find 키파일위치 -type f -exec chmod 600 {} \;
ssh chongdae-dev-db
Markdown
복사
•
prod db
vim ~/.ssh/config
```
Host chongdae-prod
HostName chongdae.site
User ubuntu
IdentityFile ~/key-chongdae-market-prod.pem
ForwardAgent yes
Host chongdae-prod-db
HostName 10.0.100.203
User ubuntu
IdentityFile ~/key-chongdae-market-prod.pem
ProxyJump chongdae-prod
```
Markdown
복사



