Skip to content

Commit 6475fd1

Browse files
authored
Merge pull request #98 from pirogramming/dev
Dev
2 parents 663a5bc + ca220b7 commit 6475fd1

Some content is hidden

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

63 files changed

+1956
-985
lines changed

.github/workflows/deploy.yml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: CI/CD
2+
3+
on:
4+
push:
5+
branches: [ "main" ] # 운영은 main으로 전환 권장
6+
workflow_dispatch:
7+
8+
concurrency:
9+
group: deploy-${{ github.ref }}
10+
cancel-in-progress: true
11+
12+
jobs:
13+
build-and-push:
14+
runs-on: ubuntu-latest
15+
permissions:
16+
contents: read
17+
packages: write
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v4
21+
22+
- name: Login to GHCR
23+
uses: docker/login-action@v3
24+
with:
25+
registry: ghcr.io
26+
username: ${{ secrets.GHCR_USERNAME }}
27+
password: ${{ secrets.GHCR_TOKEN }}
28+
29+
# 🔧 outputs 없이 셸 변수로 처리 (여기가 핵심)
30+
- name: Build image (personal namespace)
31+
run: |
32+
set -e
33+
NS="ghcr.io/jinecastle03/triptailor"
34+
SHORT_SHA="$(echo "$GITHUB_SHA" | cut -c1-7)"
35+
echo "Building $NS:$SHORT_SHA and $NS:latest"
36+
docker build -t "$NS:$SHORT_SHA" -t "$NS:latest" .
37+
38+
- name: Push image
39+
run: |
40+
set -e
41+
NS="ghcr.io/jinecastle03/triptailor"
42+
SHORT_SHA="$(echo "$GITHUB_SHA" | cut -c1-7)"
43+
docker push "$NS:$SHORT_SHA"
44+
docker push "$NS:latest"
45+
46+
deploy:
47+
needs: build-and-push
48+
runs-on: ubuntu-latest
49+
steps:
50+
- name: Deploy over SSH
51+
uses: appleboy/[email protected]
52+
with:
53+
host: ${{ secrets.SSH_HOST }}
54+
username: ${{ secrets.SSH_USER }}
55+
key: ${{ secrets.SSH_KEY }}
56+
script_stop: true
57+
script: |
58+
set -e
59+
cd /srv/triptailor
60+
echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u "${{ secrets.GHCR_USERNAME }}" --password-stdin
61+
docker compose -f docker-compose.prod.yml pull
62+
docker compose -f docker-compose.prod.yml up -d db
63+
docker compose -f docker-compose.prod.yml exec db psql -U triptailor_user -d triptailor -c "CREATE EXTENSION IF NOT EXISTS vector;"
64+
docker compose -f docker-compose.prod.yml up -d
65+
docker compose -f docker-compose.prod.yml exec web python manage.py migrate --noinput
66+
docker compose -f docker-compose.prod.yml exec web python manage.py collectstatic --noinput
67+
docker image prune -f

Dockerfile

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
FROM python:3.12-slim
2+
3+
# 시스템 패키지
4+
RUN apt-get update && apt-get install -y --no-install-recommends \
5+
build-essential libpq-dev curl wget && \
6+
rm -rf /var/lib/apt/lists/*
7+
8+
WORKDIR /app
9+
10+
# 파이썬 의존성
11+
COPY requirements.txt .
12+
RUN pip install --no-cache-dir -r requirements.txt
13+
14+
# 소스 복사
15+
COPY . .
16+
17+
ENV PYTHONDONTWRITEBYTECODE=1 \
18+
PYTHONUNBUFFERED=1
19+
20+
EXPOSE 8000
21+
22+
# 마이그/정적/서버 기동
23+
CMD ["sh","-lc", "\
24+
python manage.py migrate && \
25+
python manage.py collectstatic --noinput && \
26+
gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 3 --timeout 60 \
27+
"]

README.md

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,51 +6,71 @@
66
2025 Pirogramming : **Triptailor**
77
<br/><br/>
88

9-
## Triptailor
9+
## 🚀 Triptailor
1010

11-
> (여기에 서비스 소개 작성)
12-
> "여행지를 ~~ "
11+
> “여행지를 어떻게 선택하시나요?”
1312
> 여러분은 지금 **이색적인 여행**을 하고 계신가요?
1413
15-
(본문 설명 작성)
14+
Triptailor는 단순한 여행 정보 제공을 넘어, **AI 기반 개인 맞춤 여행 큐레이션 서비스**입니다.
15+
사용자의 취향, 관심 태그, 그리고 실제 여행자들의 생생한 후기를 바탕으로 새로운 여행지를 발견할 수 있도록 도와줍니다.
1616

17-
- (포인트 1)
18-
- 👉 **(강조)**
1917

20-
Triptailor 는 (설명 작성)
18+
AI와 데이터 기반으로 여행을 **쉽고 즐겁게 계획**할 수 있는 플랫폼
19+
- 추천 → 루트 생성 → 리뷰 → 재추천까지 **선순환 구조**를 가진 여행 생태계
20+
- 여행 준비 과정의 피로도를 줄이고, **여행의 즐거움**에 집중할 수 있도록 설계
21+
22+
---
23+
24+
### 📌 주요 포인트
25+
- 🧭 **개인 맞춤 여행 추천**
26+
벡터 검색 + AI 기반 추천으로 나에게 꼭 맞는 장소를 제안
27+
- 🗺️ **루트 생성 & 공유**
28+
여행지를 모아 나만의 루트를 만들고, 다른 사람과 공유
29+
- 📝 **실제 후기와 평가**
30+
텍스트 + 사진 리뷰로 신뢰성 있는 여행 정보 제공
31+
- 👉 **커뮤니티 중심 확장성**
32+
사용자 참여가 쌓일수록 추천이 더 똑똑해지는 구조
2133

2234
---
2335

2436
## 👥 Contributors
2537

38+
2639
| 진혜성<br/>[@Jinecastle03](https://github.com/Jinecastle03) | 김동하<br/>[@eastha10](https://github.com/eastha10) | 박주은<br/>[@jueun036](https://github.com/jueun036) | 양보윤<br/>[@yxngbxyxn1003](https://github.com/yxngbxyxn1003) | 허지원<br/>[@jwheo22](https://github.com/jwheo22) |
2740
| --- | --- | --- | --- | --- |
28-
| <img src="https://i.ibb.co/5xg0mG2D/image.jpg" width="200" height="200" style="object-fit:cover;" alt="Jinecastle03"> | <img src="https://i.ibb.co/PbxhzYf/image.jpg" width="200" height="200" style="object-fit:cover;" alt="eastha10"> | <img src="https://i.ibb.co/GyNnrdY/image.jpg" width="200" height="200" style="object-fit:cover;" alt="jueun036"> | <img src="https://i.ibb.co/CstFyMHB/201116314.jpg" width="200" height="200" style="object-fit:cover;" alt="yxngbxyxn1003"> | <img src="https://i.ibb.co/DP3TwZpH/image.jpg" width="200" height="200" style="object-fit:cover;" alt="jwheo22"> |
29-
| PM , BE | FE | FE | BE | BE |
30-
41+
| <img src="https://i.ibb.co/pBBw3jw9/jpg.jpg" alt="진혜성"> | <img src="https://i.ibb.co/wZSLj0Bp/image.jpg" alt="김동하"> | <img src="https://i.ibb.co/HLB3XRgS/image.jpg" alt="박주은"> | <img src="https://i.ibb.co/PZ1QFqrS/image.jpg" alt="양보윤"> | <img src="https://i.ibb.co/PvqY3sQq/image.jpg" alt="허지원"> |
42+
| PM , BE , AI , Infra | FE , AI | BE , AI | BE , AI | FE , AI |
3143

3244

3345

3446
---
3547

3648
## 🛠️ Tech Stack
3749

38-
📌 **기획 / 디자인**
39-
![Figma](https://img.shields.io/badge/figma-E0474C?style=for-the-badge&logo=figma&logoColor=white)
40-
![Github](https://img.shields.io/badge/github-181717?style=for-the-badge&logo=github&logoColor=white)
50+
📌 **Stack**
51+
![HTML5](https://img.shields.io/badge/HTML5-E34F26?style=for-the-badge&logo=html5&logoColor=white)
52+
![CSS3](https://img.shields.io/badge/CSS3-1572B6?style=for-the-badge&logo=css3&logoColor=white)
53+
![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)
54+
![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white)
4155

42-
📌 **프론트엔드**
43-
![HTML5](https://img.shields.io/badge/HTML5-E34F26?style=for-the-badge&logo=html5&logoColor=white)
44-
![CSS3](https://img.shields.io/badge/CSS3-1572B6?style=for-the-badge&logo=css3&logoColor=white)
45-
![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=JavaScript&logoColor=white)
56+
📌 **Tools**
57+
![Visual Studio Code](https://img.shields.io/badge/Visual%20Studio%20Code-007ACC?style=for-the-badge&logo=visualstudiocode&logoColor=white)
58+
![Figma](https://img.shields.io/badge/Figma-F24E1E?style=for-the-badge&logo=figma&logoColor=white)
59+
![Git](https://img.shields.io/badge/Git-F05032?style=for-the-badge&logo=git&logoColor=white)
4660

47-
📌 **백엔드**
48-
![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white)
49-
![Django](https://img.shields.io/badge/Django-092E20?style=for-the-badge&logo=django&logoColor=white)
50-
![SQLite](https://img.shields.io/badge/SQLite-07405E?style=for-the-badge&logo=sqlite&logoColor=white)
61+
📌 **Collaboration**
62+
![GitHub](https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white)
63+
![Notion](https://img.shields.io/badge/Notion-000000?style=for-the-badge&logo=notion&logoColor=white)
64+
![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)
5165

5266
---
5367

68+
## ⚙️ Features
69+
70+
71+
72+
---
73+
5474
## 📂 폴더 구조
5575

5676
```
@@ -88,4 +108,6 @@ TripTailor/
88108
├─ triptailor_cosine_v2.index
89109
└─ triptailor_full_metadata.csv
90110
91-
```
111+
```
112+
113+

0 commit comments

Comments
 (0)