Skip to content
Snippets Groups Projects
Commit 24d9d9dc authored by YuJin's avatar YuJin
Browse files

refactor: Enhance Docker-related configuration and scripts

parent fb25b421
Branches
No related tags found
1 merge request!8Completed API development for crew, event, and region; user authentication...
......@@ -6,6 +6,7 @@ down: down-frontend down-apiserver
.PHONY: run-frontend
run-frontend:
docker-compose build frontend
docker-compose up -d frontend
.PHONY: logs-frontend
......@@ -18,6 +19,7 @@ down-frontend:
.PHONY: run-apiserver
run-apiserver:
docker-compose build apiserver
docker-compose up -d apiserver mysql
.PHONY: logs-apiserver
......
......@@ -7,7 +7,7 @@ services:
MYSQL_USER: admin
MYSQL_PASSWORD: localadmin
ports:
- "3306:3306"
- "3307:3306"
volumes:
- ./webapp/backend/ddl:/docker-entrypoint-initdb.d/
- ./mysql:/var/lib/mysql:delegated
......@@ -18,7 +18,7 @@ services:
context: ./webapp/frontend
dockerfile: Dockerfile
ports:
- "3000:3000"
- "3001:3000"
volumes:
- ./webapp/frontend/src:/app/src
......@@ -34,6 +34,6 @@ services:
MYSQL_PASSWORD: localadmin
ports:
- "8180:8080"
# TODO(minjae): hot reload.
# TODO(minjae): add Redis, Object Storage, etc.
depends_on:
- mysql
command: sh -c "until nc -z mysql 3306; do echo Waiting for MySQL; sleep 2; done && node apiserver/app.js"
\ No newline at end of file
......@@ -4,16 +4,22 @@ FROM node:22-alpine
# Set the working directory
WORKDIR /app
# package.json 복사 및 의존성 설치
COPY ./apiserver/package.json .
COPY ./apiserver ./apiserver
# Install dependencies
RUN npm install
# Copy entire codebase
COPY ./apiserver .
COPY ./apiserver ./
# config 디렉토리 복사
COPY ./config ./config
# Expose the port on which the app will run
EXPOSE 8080
# Start the app
CMD ["node", "app.js"]
CMD ["node", "apiserver/app.js"]
......@@ -2,6 +2,9 @@ const express = require('express');
const cors = require('cors');
const cookieParser = require('cookie-parser');
const sequelize = require('../config/database'); // backend/config/database.js 파일 경로
const Crew = require('./models/Crew'); // Crew 모델 추가
const Region = require('./models/Region'); // Region 모델 추가
const SportType = require('./models/SportType'); // SportType 모델 추가
const port = process.env.PORT || 8080; // Docker Compose에서 PORT 주입
......@@ -18,6 +21,17 @@ app.use(express.json()); // JSON 형식의 요청 본문 파싱
app.use(cookieParser()); // 쿠키 파싱
app.use(cors()); // CORS 허용
// **테이블 동기화**
(async () => {
try {
await sequelize.sync({ alter: true }); // alter를 사용하면 기존 테이블 구조를 업데이트
console.log('✅ Database synchronized successfully.');
} catch (err) {
console.error('❌ Error synchronizing database:', err);
process.exit(1); // 동기화 실패 시 프로세스 종료
}
})();
// **데이터베이스 연결 확인**
sequelize
.authenticate()
......
......@@ -22,11 +22,11 @@ router.get('/', crewController.getCrews);
// 특정 크루의 이벤트 조회 API
router.get('/:crewID/events', crewController.getEventsByCrew);
// 크루 가입 API
router.post('/:crewID/join', crewController.joinCrew);
// 크루 멤버 추가 (가입) API
router.post('/:crewID/members', crewController.joinCrew);
// 크루 탈퇴 API
router.delete('/:crewID/leave', crewController.leaveCrew);
// 크루 멤버 삭제 (탈퇴) API
router.delete('/:crewID/members', crewController.leaveCrew);
// 크루 단일 조회 API
router.get('/:crewID', crewController.getCrew);
......
......@@ -7,7 +7,7 @@ const sequelize = new Sequelize(
process.env.MYSQL_PASSWORD || 'localadmin', // 기본값: localadmin
{
host: process.env.MYSQL_HOST || 'mysql', // 기본값: mysql
port: process.env.MYSQL_PORT || 3306, // 기본값: 3306
port: process.env.MYSQL_PORT || 3306, // 기본값: 3306 (컨테이너 내부 포트)
dialect: 'mysql', // MySQL 설정
logging: false, // SQL 로그 비활성화
dialectOptions: {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment