//
Search

서버 다시 켰을 때 할 일, 서버 새로 만들었을 때 할 일

블로그로 정리해 올린 글입니다
작성자
문서화를 하는 이유!
불의의 사고(해킹, 휴먼 에러 등..)로 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 파일 아래 레포 참고해서 넣기
infra-docker-nginx-certbot
fromitive
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
복사

레퍼런스