diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f0dd15 --- /dev/null +++ b/.gitignore @@ -0,0 +1,187 @@ +# Compiled source files +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Compressed files +# It's better to unpack these files and commit the raw source. +# Git has its own built-in compression methods. +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# Logs and database files +*.log +*.sql +*.sqlite + +# OS-generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Python bytecode files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution and packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit tests and coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django-specific files +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask-specific files +instance/ +.webassets-cache + +# Scrapy-specific files +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# Pipenv +# Include Pipfile.lock in version control unless platform-specific dependencies exist. +#Pipfile.lock + +# Poetry +# Include poetry.lock in version control for binary packages. +#poetry.lock + +# PDM +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582 +__pypackages__/ + +# Celery +celerybeat-schedule +celerybeat.pid + +# SageMath +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder IDE +.spyderproject +.spyproject + +# Rope IDE +.ropeproject + +# MkDocs documentation +/site + +# MyPy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre +.pyre/ + +# pytype +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm IDE +# Add JetBrains-specific ignore rules in a separate JetBrains.gitignore. +#.idea/ + +# PyPI configuration +.pypirc + +# Redis Snapshots +dump.rdb + +# Data Directories +data/ \ No newline at end of file diff --git a/srcs/.env b/srcs/.env index 6ecac9e..ca43234 100644 --- a/srcs/.env +++ b/srcs/.env @@ -24,4 +24,58 @@ DATABASE_USER_URL=postgres://${DB_USER_USER}:${DB_USER_PASSWORD}@database_user:$ # Redis URLs REDIS_EVENTS_URL=redis://redis_events:6379 -REDIS_WEBSOCKETS_URL=redis://redis_websockets:6379 \ No newline at end of file +REDIS_WEBSOCKETS_URL=redis://redis_websockets:6379 + +SSL_CERT_CRT="-----BEGIN CERTIFICATE----- +MIID+zCCAuOgAwIBAgIUJRqgyug33T4liuLLgKUweKw0gNEwDQYJKoZIhvcNAQEL +BQAwgYwxCzAJBgNVBAYTAktSMQ4wDAYDVQQIDAVTZW91bDEOMAwGA1UEBwwFU2Vv +dWwxEDAOBgNVBAoMBzQyU2VvdWwxDjAMBgNVBAsMBUNhZGV0MRAwDgYDVQQDDAd5 +ZW9sZWUyMSkwJwYJKoZIhvcNAQkBFhp5ZW9sZWUyQHN0dWRlbnQuNDJzZW91bC5r +cjAeFw0yNDEyMjkwNjAyMDZaFw0yNTEyMjkwNjAyMDZaMIGMMQswCQYDVQQGEwJL +UjEOMAwGA1UECAwFU2VvdWwxDjAMBgNVBAcMBVNlb3VsMRAwDgYDVQQKDAc0MlNl +b3VsMQ4wDAYDVQQLDAVDYWRldDEQMA4GA1UEAwwHeWVvbGVlMjEpMCcGCSqGSIb3 +DQEJARYaeWVvbGVlMkBzdHVkZW50LjQyc2VvdWwua3IwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQCh2oGPSyfeSgkuYjeAcRtZxqt1gfjghv1NCbn5gBIR +Ka/6URXtwNLVC8CgLbD2S+80RfF5LzAPwK4Wbj0DW5AnkZGxO/zp94w/TNrcm7w/ +Cxq9WZQTMP53cl/b1UgvivcH8K40rEqZ++Y0Sm5uATMlABVJBgkBx1L+60YX/r1D +M4AYsQ3tD+Pf7bmsAaYs9LJjlCeJEbl7GBaUjWDWYRkKZAZf8gJVmEaklqYhHYdt +3/lwAaEj73TPmyAAM6jef2JFCGpVA617mh95J9/KYMx8QQi5/jfRG1aJ8IRhGAPR +BAuZCLDo8VeHY7l5aIAehusf9MEjp5209pQ3voztmn6rAgMBAAGjUzBRMB0GA1Ud +DgQWBBRlAOOlvJ/GhCifJAPK6BI64hIpmDAfBgNVHSMEGDAWgBRlAOOlvJ/GhCif +JAPK6BI64hIpmDAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAi +AXIwxuLWU2+XiW6W1l7r5YoOTrHz+XGG9XcwR6q6uBeT46TkykWjNVSVwSNoaegs +iq1oOs94tR+fHIxO4CD7AIBHLIzfJUFJhQA8h3JMjQ5VPMncLyOBhyYCxWRYs2yR +gzdSz91bbydTty1Hf7tqpaW4WZphZhIHGw154erbHFAxjIOFilb1mvT2czzNGviS +K5ZdtppVRXl2J7nafSJvJ2uLwKbfUa1dGLCaJ9y+ad8s5r2JhL2CjYXLj0qW9AIB +BW0SFOUL8tN4x8EGsELvjXc7nEsUeV5v2O9AqTSVtBsUfjLo+kOECiQqxFOzO+B0 +EN5W2dU42MhqiFlmoC+u +-----END CERTIFICATE-----" +SSL_CERT_KEY="-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCh2oGPSyfeSgku +YjeAcRtZxqt1gfjghv1NCbn5gBIRKa/6URXtwNLVC8CgLbD2S+80RfF5LzAPwK4W +bj0DW5AnkZGxO/zp94w/TNrcm7w/Cxq9WZQTMP53cl/b1UgvivcH8K40rEqZ++Y0 +Sm5uATMlABVJBgkBx1L+60YX/r1DM4AYsQ3tD+Pf7bmsAaYs9LJjlCeJEbl7GBaU +jWDWYRkKZAZf8gJVmEaklqYhHYdt3/lwAaEj73TPmyAAM6jef2JFCGpVA617mh95 +J9/KYMx8QQi5/jfRG1aJ8IRhGAPRBAuZCLDo8VeHY7l5aIAehusf9MEjp5209pQ3 +voztmn6rAgMBAAECggEAIyge51zIWrETQHeGHcizy7LrUHl8cWzw/Xhk5Kysf/zh +pEpTrJKrWSqV21VBcKZ63Yxp0MxusKVGS0oDx8RuUiH9FxX0MHAcjy1nBu9vGvST +CNk54FdOluyJpOs1pFoXoapmdLuN8te0H9yhExUAooNbnEKK10+QGB5L2e9z9fIT +ueflPbXIh8xrU69wJMYV5k6mmH6rM9OxK7Loi+DYcPmnVL9dp0oKD3u4Vr/9obbP +M4nE6vvUuND5jWlZNf7Ha6wBOHuc1CD7Sw3p/R0SaGPTxPuZiYh35K2hkxJRaSDF +6qzavlsk/3fJWWwYoRuNmggD/kfHPsUlpM6fSOo3uQKBgQDZuzzHGFzJ7CBgYR3U +O/wtcKE5hQHS5iyOAjfa+hU3ktzlt5T8mOEhSLuwW/1ZPCkQ/dMT5XeCP0bN9wbF +7RO2F1tSzoILrHMcNt7et9+V9Wj2DeixpKA94oKCsNoP2iAt6JgstbBJcnSDqCZQ +fDy9Ymq8sK/BD0TGNPvDBPtsyQKBgQC+TQ9xMokbM2H4Aq68mbQAC8hpAmlxzs0I +tDaIjYgp6BCoXFqRyaIEs22yftB9bvv99OlMlv7TrxhZS0racuQSWdXTZ713MZGl +RN77v66VkZWz+d0jLH1fXILfHv5YwJYkSIJ5Xts+5Sp322SffGC8HvYIeNW4ZrXV +ovEKNPyt0wKBgQCSxxpNzSqgJMIettl4/YceytKlB/kWx3w5r10gDX7IHAU2BvA0 +6Iq7+WAtn5XG1juI7NOikgpij22X43N5cjzbgBtcU0JvxC1FU+gilCnx2aKMXQwE +1UoA7fW1TKt0DEOtLyOG4GSa3sGVD4HkuBvqP7JcyW9x4m0mgQlHitBDoQKBgEgn +jdBc2fGPVPklgz2NhdtynEV8naCCSemf8wFpsJQ7In3Drq+SZTUlF1XTkZfNygwr +nX3lzq9St4e77aDQaTuwBkxHDGayS8f/ShDoR/j8H2gDOF7K0qqiuBiDdusN8p/F +QntkhPrfB3A0pn12OnN5xc3GizqE7zMWuhAlsRzzAoGBAIdt0cuOiJH7Eawee+sh +ta3ne6ayb60VYsPtLnDf53gjFjg/SI1tEFsriz83Rk0AdqSqQvVhDfn+17Lbs658 +KYTbgnHyHTw2t+t5JIypDhwYTG/FV5faz/BM6iVdfLwXDaWxmQNRNjrB84SPWnGu +cS/jZWnvmGRQPBPvyCB2fVTH +-----END PRIVATE KEY-----" +DATA_PATH=/Users/spark2/supershy/data diff --git a/srcs/Makefile b/srcs/Makefile new file mode 100644 index 0000000..165c3d5 --- /dev/null +++ b/srcs/Makefile @@ -0,0 +1,33 @@ +# Configuration +DOCKER_COMPOSE := $(shell if command -v docker-compose >/dev/null 2>&1; then echo "docker-compose"; else echo "docker compose"; fi) +ENV_FILE="$(shell pwd)/.env" + +# Docker Compose targets +all: dir + @$(DOCKER_COMPOSE) -f ./docker-compose.yml up -d + +build: dir + @$(DOCKER_COMPOSE) -f ./docker-compose.yml up -d --build + +down: + @$(DOCKER_COMPOSE) -f ./docker-compose.yml down -v + +re: clean + @$(DOCKER_COMPOSE) -f ./docker-compose.yml up -d + +# Directory and environment setup +dir: + @chmod +x init_project.sh + @bash ./init_project.sh + +clean: down + docker compose down --rmi all +# @docker system prune --all --force + +fclean: clean + @docker system prune --all --force --volumes + @docker network prune --force + @docker volume prune --force + @rm -rf $(ENV_FILE).bak + +.PHONY: all build down re clean fclean dir \ No newline at end of file diff --git a/srcs/api_gateway b/srcs/api_gateway index 1c015d9..12a1de0 160000 --- a/srcs/api_gateway +++ b/srcs/api_gateway @@ -1 +1 @@ -Subproject commit 1c015d9202168e2a5d7c45b823f32028a0fdf376 +Subproject commit 12a1de065c0a7f191c10fd75f804dc3976149f86 diff --git a/srcs/auth b/srcs/auth index 24b2a12..d8cf4f6 160000 --- a/srcs/auth +++ b/srcs/auth @@ -1 +1 @@ -Subproject commit 24b2a12484c98d19be94b47a8076b31af523aee8 +Subproject commit d8cf4f6a675c2538f62b84d0798b0044653026f6 diff --git a/srcs/chat b/srcs/chat index 6d30262..0085440 160000 --- a/srcs/chat +++ b/srcs/chat @@ -1 +1 @@ -Subproject commit 6d30262f4f9080218337bca0f5c02afb2131cb14 +Subproject commit 00854405f0654cebf619ed34642cad0c9e7f4cba diff --git a/srcs/docker-compose.yml b/srcs/docker-compose.yml index 4d9fc50..ae39b94 100644 --- a/srcs/docker-compose.yml +++ b/srcs/docker-compose.yml @@ -4,6 +4,9 @@ services: context: ./api_gateway ports: - "80:80" + - "443:443" + env_file: + - ./.env depends_on: # - auth - user @@ -11,7 +14,7 @@ services: # - chat networks: - backend - + auth: build: context: ./auth @@ -47,18 +50,19 @@ services: # networks: # - backend - # game: - # build: - # context: ./game - # expose: - # - "8003" - # env_file: - # - ./.env - # environment: - # DATABASE_URL: ${DATABASE_GAME_URL} - # networks: - # - backend - + game: + container_name: game + init: true + build: + context: ./game + env_file: + - ./.env + - ./game/.env + depends_on: + - database_game + networks: + - backend + frontend: build: context: ./frontend @@ -69,21 +73,42 @@ services: - ./.env networks: - backend - - # database_user: - # build: - # context: ./database_user - # container_name: db_user - # env_file: - # - ./.env - # environment: - # POSTGRES_USER: ${DB_USER_USER} - # POSTGRES_PASSWORD: ${DB_USER_PASSWORD} - # POSTGRES_DB: ${DB_USER_NAME} - # volumes: - # - db_user_data:/var/lib/postgresql/data - # networks: - # - backend + + database_chat: + container_name: database_chat + init: true + build: + context: ./database_chat + env_file: + - ./.env + - ./chat/.env + volumes: + - db_chat_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -h database_chat -p ${POSTGRES_PORT} -U ${DB_CHAT_USER}"] + interval: 5s + timeout: 5s + retries: 5 + networks: + - backend + + database_game: + container_name: database_game + init: true + build: + context: ./database_game + env_file: + - ./.env + - ./game/.env + volumes: + - db_game_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -h database_game -p ${POSTGRES_PORT} -U ${DB_GAME_USER}"] + interval: 5s + timeout: 5s + retries: 5 + networks: + - backend # database_chat: # build: @@ -100,20 +125,23 @@ services: # networks: # - backend - # database_game: - # build: - # context: ./database_game - # container_name: db_game - # env_file: - # - ./.env - # environment: - # POSTGRES_USER: ${DB_GAME_USER} - # POSTGRES_PASSWORD: ${DB_GAME_PASSWORD} - # POSTGRES_DB: ${DB_GAME_NAME} - # volumes: - # - db_game_data:/var/lib/postgresql/data - # networks: - # - backend + redis_websockets: + image: redis:latest + container_name: redis_websockets + init: true + networks: + - backend + + dozzle: + image: amir20/dozzle:latest + container_name: dozzle + ports: + - "8080:8080" # Expose Dozzle on port 8080 + volumes: + - /var/run/docker.sock:/var/run/docker.sock # Access Docker logs + restart: unless-stopped + networks: + - backend # redis_events: # image: redis:latest @@ -135,27 +163,27 @@ networks: backend: driver: bridge -# volumes: - # db_chat_data: - # driver: local - # driver_opts: - # type: none - # device: ./database_chat - # o: bind +volumes: + db_chat_data: + driver: local + driver_opts: + type: none + device: /Users/spark2/Desktop/puppeteer/srcs/data/chat + o: bind - # db_game_data: - # driver: local - # driver_opts: - # type: none - # device: ./database_game - # o: bind + db_game_data: + driver: local + driver_opts: + type: none + device: /Users/spark2/Desktop/puppeteer/srcs/data/game + o: bind - # db_user_data: - # driver: local - # driver_opts: - # type: none - # device: ./database_user - # o: bind + db_user_data: + driver: local + driver_opts: + type: none + device: /Users/spark2/Desktop/puppeteer/srcs/data/user + o: bind # redis_events_data: # driver: local diff --git a/srcs/frontend b/srcs/frontend index 6f222da..79c67ae 160000 --- a/srcs/frontend +++ b/srcs/frontend @@ -1 +1 @@ -Subproject commit 6f222da896dc12207c47db5b4e06700cd01054b7 +Subproject commit 79c67ae57ca1793dcefefafce6d8499d028a8501 diff --git a/srcs/game b/srcs/game index ce7f127..f6961f4 160000 --- a/srcs/game +++ b/srcs/game @@ -1 +1 @@ -Subproject commit ce7f127ce292ab2c11f256276d19472def46c986 +Subproject commit f6961f4e33e0b31dca20c2e41bc6744c3303786e diff --git a/srcs/init_project.sh b/srcs/init_project.sh new file mode 100755 index 0000000..a86ac89 --- /dev/null +++ b/srcs/init_project.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +ENV_FILE="./.env" + +# 현재 사용자와 +CURRENT_USER=$(id -u) +CURRENT_GROUP=$(id -gn) + +# 현재 프로젝트 디렉토리의 절대경로 가져오기 +PROJECT_ROOT=$(pwd) + +# OS에 따른 BASE_DIR 설정 +if [ "$(uname)" == "Darwin" ]; then + # macOS + BASE_DIR="/Users/$USER/supershy" +else + # Linux + BASE_DIR="/home/$USER/supershy" +fi + +# 기존 볼륨 삭제 처리 +# if [ -d "$BASE_DIR" ]; then +# echo "Deleting existing volumes..." +# rm -rf "$BASE_DIR" +# echo "Delete complete." + +# if [ -f "$ENV_FILE" ]; then +# if [ "$(uname)" == "Darwin" ]; then +# sed -i '' '/^DATA_PATH=/d' "$ENV_FILE" +# else +# sed -i '/^DATA_PATH=/d' "$ENV_FILE" +# fi +# else +# echo ".env file not found. Skipping DATA_PATH removal." +# fi +# fi + +# DATA_PATH="${BASE_DIR}/data" + +# # 볼륨 추가 처리 +# if [ ! -d "$BASE_DIR" ]; then +# echo "Adding volumes..." +# mkdir -p $DATA_PATH/chat/ +# mkdir -p $DATA_PATH/game/ +# mkdir -p $DATA_PATH/user/ + +# # BASE_DIR 디렉토리의 소유자를 현재 사용자로 변경 +# chown -R $CURRENT_USER:$CURRENT_GROUP $BASE_DIR +# echo "Add complete." +# fi + +# if [ -f "$ENV_FILE" ]; then +# if [ "$(uname)" == "Darwin" ]; then +# sed -i '' '/^DATA_PATH=/d' "$ENV_FILE" +# else +# sed -i '/^DATA_PATH=/d' "$ENV_FILE" +# fi +# else +# echo ".env file not found. Skipping DATA_PATH removal." +# fi + +# .env 파일에 DATA_PATH 추가 +# if ! grep -q "DATA_PATH=" "$ENV_FILE"; then +# if [ -s "$ENV_FILE" ] && [ "$(tail -c 1 "$ENV_FILE" | wc -l)" -eq 0 ]; then +# echo "" >> "$ENV_FILE" +# fi +# echo "DATA_PATH=$DATA_PATH" >> "$ENV_FILE" +# fi diff --git a/srcs/user b/srcs/user index aa87441..0dda2c9 160000 --- a/srcs/user +++ b/srcs/user @@ -1 +1 @@ -Subproject commit aa874416f27b97b516fe75a1d7ea152ac4d0e79a +Subproject commit 0dda2c9adefe71c3d860a359d9d11a93791d950d