Skip to content

Commit 0c33b46

Browse files
committed
Merge branch 'main' into refactor/e2e-test
2 parents ff21db6 + d424c84 commit 0c33b46

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+8981
-152
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
name: Email-Worker Deployment
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
paths: [ "email-worker/**" ]
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
packages: write
12+
13+
env:
14+
IMAGE_NAME: ghcr.io/boostcampwm-2024/web05-denamu/email-worker
15+
IMAGE_TAG: sha-${{ github.sha }}
16+
SERVICE: email-worker
17+
ENV_DIR: /var/prod_config/email-worker
18+
ENV_FILE: /var/prod_config/email-worker/.env.prod
19+
COMPOSE_FILE: docker-compose/docker-compose.prod.yml
20+
STOP_GRACE_PERIOD: 30
21+
22+
jobs:
23+
build-and-push:
24+
runs-on: ubuntu-latest
25+
steps:
26+
- uses: actions/checkout@v4
27+
28+
- name: QEMU 멀티 아키텍쳐 에뮬레이터
29+
uses: docker/setup-qemu-action@v3
30+
31+
- name: Buildx 멀티 아키텍쳐 빌더
32+
uses: docker/setup-buildx-action@v3
33+
34+
- name: GHCR 로그인
35+
uses: docker/login-action@v3
36+
with:
37+
registry: ghcr.io
38+
username: ${{ github.actor }}
39+
password: ${{ secrets.GHCR_GITHUB_TOKEN }}
40+
41+
- name: Docker 이미지 Build 및 Push
42+
uses: docker/build-push-action@v6
43+
with:
44+
context: ./email-worker
45+
file: ./email-worker/docker/Dockerfile.prod
46+
push: true
47+
platforms: linux/amd64,linux/arm64
48+
tags: |
49+
${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}
50+
${{ env.IMAGE_NAME }}:latest
51+
cache-from: type=gha
52+
cache-to: type=gha,mode=max
53+
54+
deploy:
55+
runs-on: [ self-hosted, prod ]
56+
needs: build-and-push # Build 및 Push가 끝나면 시작
57+
steps:
58+
- name: 코드 체크아웃
59+
uses: actions/checkout@v4
60+
61+
- name: GHCR 로그인 (prod)
62+
uses: docker/login-action@v3
63+
with:
64+
registry: ghcr.io
65+
username: ${{ github.actor }}
66+
password: ${{ secrets.GHCR_GITHUB_TOKEN }}
67+
68+
- name: 환경변수 최신화
69+
run: |
70+
sudo mkdir -p "$ENV_DIR"
71+
sudo install -m 600 /dev/null "$ENV_FILE"
72+
{
73+
echo "EMAIL_USER=${{ secrets.EMAIL_USER }}"
74+
echo "EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }}"
75+
echo "RABBITMQ_DEFAULT_USER=${{ secrets.PRODUCT_RABBITMQ_DEFAULT_USER }}"
76+
echo "RABBITMQ_DEFAULT_PASS=${{ secrets.PRODUCT_RABBITMQ_DEFAULT_PASS }}"
77+
echo "RABBITMQ_HOST=${{ secrets.PRODUCT_RABBITMQ_HOST }}"
78+
echo "RABBITMQ_PORT=${{ secrets.PRODUCT_RABBITMQ_PORT }}"
79+
} | sudo tee "$ENV_FILE" >/dev/null
80+
81+
# 인프라용 환경변수 파일 생성 (Redis, MySQL 등)
82+
sudo mkdir -p /var/prod_config/infra
83+
sudo install -m 600 /dev/null /var/prod_config/infra/.env.prod
84+
{
85+
echo "REDIS_USER=${{ secrets.REDIS_USERNAME }}"
86+
echo "REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}"
87+
echo "MYSQL_ROOT_PASSWORD=${{ secrets.PRODUCT_DB_PASSWORD }}"
88+
echo "MYSQL_DATABASE=${{ secrets.PRODUCT_DB_DATABASE }}"
89+
echo "MYSQL_USER=${{ secrets.PRODUCT_DB_USERNAME }}"
90+
echo "MYSQL_PASSWORD=${{ secrets.PRODUCT_DB_PASSWORD }}"
91+
echo "RABBITMQ_DEFAULT_USER=${{ secrets.PRODUCT_RABBITMQ_DEFAULT_USER }}"
92+
echo "RABBITMQ_DEFAULT_PASS=${{ secrets.PRODUCT_RABBITMQ_DEFAULT_PASS }}"
93+
echo "RABBITMQ_HOST=${{ secrets.PRODUCT_RABBITMQ_HOST }}"
94+
echo "RABBITMQ_PORT=${{ secrets.PRODUCT_RABBITMQ_PORT }}"
95+
echo "RABBITMQ_MANAGEMENT_PORT=${{ secrets.PRODUCT_RABBITMQ_MANAGEMENT_PORT }}"
96+
} | sudo tee /var/prod_config/infra/.env.prod >/dev/null
97+
98+
- name: Docker 이미지 Pull
99+
run: |
100+
docker pull "${IMAGE_NAME}:${IMAGE_TAG}" || true
101+
docker pull "${IMAGE_NAME}:latest" || true
102+
docker compose -f "$COMPOSE_FILE" pull "$SERVICE"
103+
104+
- name: Graceful Shutdown & 서비스 재시작
105+
run: |
106+
docker compose -f "$COMPOSE_FILE" stop -t $STOP_GRACE_PERIOD "$SERVICE" || true
107+
docker compose -f "$COMPOSE_FILE" up -d --no-deps --force-recreate "$SERVICE"
108+
docker image prune -f || true

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
</div>
1616

1717
<div align="center">
18-
<a href="https://denamu.site">
18+
<a href="https://denamu.dev">
1919
<img src="https://img.shields.io/badge/Denamu_바로가기-318B4C?style=for-the-badge&logoColor=white" alt="Denamu Service"/>
2020
</a>
2121
</div>

client/.env.prod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
VITE_DENAMU_URL=https://denamu.site
1+
VITE_DENAMU_URL=https://denamu.dev

client/src/components/about/HeroSection.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export const HeroSection = () => {
1717
<div className="text-center max-w-4xl">
1818
<div className="flex items-center justify-center space-x-2 mb-6">
1919
<img
20-
src="https://denamu.site/files/Denamu_Logo_ENG.svg"
20+
src="https://denamu.dev/files/Denamu_Logo_ENG.svg"
2121
alt="Denamu English Logo"
2222
className="w-32 md:w-52"
2323
/>
@@ -36,7 +36,7 @@ export const HeroSection = () => {
3636

3737
<div className="flex-grow flex items-start justify-center p-4 md:p-8">
3838
<img
39-
src="https://denamu.site/files/about-first.png"
39+
src="https://denamu.dev/files/about-first.png"
4040
alt="Service Preview"
4141
className="max-w-[90%] md:max-w-[80%] h-auto object-contain"
4242
/>

client/src/components/auth/AuthBanner.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export const AuthBanner = () => {
2626
animate={{ opacity: 1, y: 0 }}
2727
transition={{ duration: 0.5 }}
2828
>
29-
<img src={`https://denamu.site/files/denamu-icon.svg`} alt="Denamu" className="w-80 h-auto" />
29+
<img src={`https://denamu.dev/files/denamu-icon.svg`} alt="Denamu" className="w-80 h-auto" />
3030
</motion.div>
3131

3232
<motion.div

client/src/components/common/Card/PostAvatar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export default function PostAvatar({ author, className, blogPlatform }: AvatarTy
1616
return (
1717
<Avatar className="h-8 w-8 ring-2 ring-background cursor-pointer">
1818
{isValidPlatform(blogPlatform) ? (
19-
<img src={`https://denamu.site/files/${blogPlatform}-icon.svg`} alt={author} className={className} />
19+
<img src={`https://denamu.dev/files/${blogPlatform}-icon.svg`} alt={author} className={className} />
2020
) : (
2121
<AvatarFallback className="text-xs bg-slate-200">{authorInitial}</AvatarFallback>
2222
)}

client/src/components/common/Card/detail/PostContent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export const PostContent = React.memo(({ post }: PostContentProps) => {
2929
<span className="text-lg font-semibold">{post.title}</span>
3030
<span className="text-sm text-gray-400 hover:underline flex gap-2 truncate">
3131
<img
32-
src={`https://denamu.site/files/${post.blogPlatform}-icon.svg`}
32+
src={`https://denamu.dev/files/${post.blogPlatform}-icon.svg`}
3333
alt={post.author}
3434
className="h-5 w-5 rounded-none"
3535
/>

client/src/components/common/Card/detail/ShareButton.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ type ButtonType = {
2121
shareKakao: () => void;
2222
};
2323
export default function ShareButton({ post }: { post: Post }) {
24-
const postUrl = `https://denamu.site/${post.id}`;
24+
const postUrl = `https://denamu.dev/${post.id}`;
2525
const { toast } = useCustomToast();
2626
const isMobile = useMediaStore((state) => state.isMobile);
2727

2828
const handleCopy = async () => {
2929
try {
30-
await navigator.clipboard.writeText(`https://denamu.site/${post.id}`);
30+
await navigator.clipboard.writeText(`https://denamu.dev/${post.id}`);
3131
toast(TOAST_MESSAGES.COPY_COMPLETE);
3232
} catch (error) {
3333
console.error(error);

client/src/components/profile/sidebar/Sidebar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export const Sidebar = () => {
1515
<div className="flex flex-col h-full">
1616
<div className="p-6 border-b border-gray-200">
1717
<div className="flex items-center space-x-2">
18-
<img src="https://denamu.site/files/denamu-icon.svg" alt="Denamu" className="w-10 h-auto" />
18+
<img src="https://denamu.dev/files/denamu-icon.svg" alt="Denamu" className="w-10 h-auto" />
1919
<span className="text-xl font-semibold">Denamu</span>
2020
</div>
2121
</div>

docker-compose/check-rabbitmq-ready.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#!/bin/sh
2-
set -e
32

43
# RabbitMQ가 실행 중인지 확인
54
rabbitmq-diagnostics ping > /dev/null 2>&1 || exit 1

0 commit comments

Comments
 (0)