Amazon Linux2 on EC2 환경에서 Jekyll사용하여 블로그 만들기
이 가이드는 Amazon Linux2 EC2 인스턴스에서 Jekyll을 설정하고 글을 개인 서버에 게시하는 과정을 안내합니다.
Jekyll 설정
먼저, 필요한 패키지를 설치하고 Jekyll을 설정해야 합니다. 다음은 그 과정입니다:
# Jekyll이 실행될 포트를 정의합니다.
PORT=4000
# Ruby 3.0을 설치합니다.
sudo amazon-linux-extras install -y ruby3.0
# Ruby 개발 도구를 설치합니다.
sudo yum install -y ruby-devel
# 개발 도구를 설치합니다.
sudo yum groupinstall "Development Tools" -y
# Bundler와 Jekyll을 설치합니다.
sudo gem install bundler
sudo gem update --system
sudo gem install jekyll
# 새로운 Jekyll 사이트를 생성합니다.
jekyll new my-site
cd my-site
# 사이트에 필요한 gem을 설치합니다.
sudo bundle install
Jekyll 사이트를 테스트하려면 다음 명령어를 실행할 수 있습니다:
bundle exec jekyll serve --host=0.0.0.0 --port=$PORT
그런 다음 {your-address}:4000
에서 사이트에 접속할 수 있습니다. 보안 그룹에서 포트를 열어두는 것을 잊지 마세요.
Jekyll을 서비스로 실행하기
재부팅 시 Jekyll이 시작되도록 설정하려면, 서비스로 설정할 수 있습니다:
# Jekyll 사이트의 경로를 정의합니다.
JEKYLL_PATH="/home/ec2-user/my-site"
PORT=4000
# 서비스 파일을 생성합니다.
echo "[Unit]
Description=Jekyll
After=network.target
[Service]
ExecStart=/usr/local/bin/bundle exec jekyll serve --host=0.0.0.0 --port=$PORT
WorkingDirectory=$JEKYLL_PATH
Restart=always
User=ec2-user
Group=ec2-user
Environment='PATH=/usr/local/bin:$PATH'
[Install]
WantedBy=multi-user.target" | sudo tee /etc/systemd/system/jekyll.service
# 서비스 파일에 대한 권한을 설정합니다.
sudo chmod 644 /etc/systemd/system/jekyll.service
# systemd 데몬을 재시작합니다.
sudo systemctl daemon-reload
# Jekyll 서비스를 활성화합니다.
sudo systemctl enable jekyll.service
# Jekyll 서비스를 시작합니다.
sudo systemctl start jekyll.service
글을 Jekyll에 맞게 형식 변경하기
글을 Jekyll과 호환되도록 하려면, 각 글에 다음 헤더를 추가해야 합니다:
---
layout: post
title: "{your post title}"
date: 2023-12-03 10:24:45 +0000
categories: obsidian
---
또한, 파일 이름 형식을 {date format of yyyy-MM-dd}-{title}.md
로 변경해야 합니다.
아래 스크립트는 파일 이름으로 제목을 추가하고, 디렉토리 이름으로 카테고리를 설정하며, 파일 수정 날짜를 설정합니다. 스크립트를 실행하기 전에, 파일을 백업하는 것을 잊지 마세요. 파일 이름에 “가 포함되어 있거나 알 수 없는 경우에는 제대로 작동하지 않을 수 있습니다.
PUBLISH_DIRECTORY={your-note-directory-to-publish}
find $PUBLISH_DIRECTORY -type f -name "*.md" | while read file; do
# 파일 이름에서 확장자를 제거합니다.
title=$(basename "$file" .md)
# 파일이 위치한 디렉토리 이름을 가져옵니다.
directory=$(basename $(dirname "$file"))
# 현재 날짜와 시간을 가져옵니다.
modified_date=$(date -r "$file" +"%Y-%m-%d %T %z")
temp="$file-temp"
# 각 파일에 헤더를 추가합니다.
echo "---" > "$temp"
echo "layout: post" >> "$temp"
echo "title: "'"'"$title"'"' >> "$temp"
echo "date: $modified_date" >> "$temp"
echo "categories: $directory" >> "$temp"
echo "---" >> "$temp"
cat "$file" >> "$temp"
# 원본 파일을 임시 파일로 대체합니다.
mv "$temp" "$file"
# 파일 이름에 현재 날짜를 접두사로 추가합니다.
mv "$file" "$(dirname "$file")/$(date -r "$file" +"%Y-%m-%d")-$title.md"
done
EC2 서버에 파일 업로드하기
마지막으로, 파일을 EC2 서버에 업로드할 수 있습니다:
#!/bin/bash
PUBLISH_DIRECTORY={your-note-directory-to-publish}
JEKYLL_PATH="/home/ec2-user/my-site"
KEY_PATH={your-key.pem}
EC2_IP={your-ec2-ip}
rsync -av --delete -e "ssh -i $KEY_PATH" "$PUBLISH_DIRECTORY" ec2-user@"$EC2_IP":"$JEKYLL_PATH/_posts"
--delete
옵션은 로컬에서 파일이 삭제되면 서버에서도 해당 파일을 삭제하도록 하는 기능입니다. 만약 파일을 삭제하면 안 된다면, --delete
옵션을 제외하고 명령어를 실행해 주세요.
그럼 이제 다 됐습니다! Amazon Linux2 on EC2에서 Jekyll을 사용하여 글을 개인 서버에 성공적으로 게시했습니다. 블로그 쓰는 즐거움을 느껴보세요!