update project configuration and build scripts

This commit is contained in:
toki 2026-05-19 22:12:50 +09:00
parent cb35ec5a1a
commit 787f579c1c
7 changed files with 53 additions and 51 deletions

View file

@ -1,7 +1,10 @@
export APP_ENV ?= local
export HTTP_ADDR ?= :8080
export DATABASE_URL ?= postgres://nomadcode:nomadcode@localhost:5432/nomadcode?sslmode=disable
export REDIS_URL ?= redis://localhost:6379/0
export DATABASE_URL ?= postgres://nomadcode:nomadcode@code-server-postgres:5432/nomadcode-core-local?sslmode=disable
export REDIS_URL ?= redis://code-server-redis:6379/3
export REDIS_KEY_PREFIX ?= nomadcode-core:local
export DEV_REDIS_URL ?= redis://code-server-redis:6379/4
export DEV_REDIS_KEY_PREFIX ?= nomadcode-core:dev
export AUTH_USERNAME ?= nomadcode
export GOOSE_DRIVER ?= postgres
export GOOSE_DBSTRING ?= $(DATABASE_URL)

View file

@ -60,13 +60,13 @@ NomadCode Core는 사용자 요청을 작업 단위로 받고, 작업 상태를
## 실행 방법
로컬 실행은 호스트에 Go와 PostgreSQL이 설치되어 있다는 전제로 진행합니다. 기본 `DATABASE_URL``postgres://nomadcode:nomadcode@localhost:5432/nomadcode?sslmode=disable` 입니다. Redis는 이후 event fan-out / realtime push 경로를 위한 선택 구성으로, Docker Compose에서는 `redis://redis:6379/0`로 노출합니다. `AUTH_PASSWORD`를 설정하면 `/readyz``/api/*`에 HTTP Basic Auth가 적용됩니다.
로컬 실행은 현재 개발 호스트의 Go와 `code-server` compose에 붙은 PostgreSQL/Redis가 있다는 전제로 진행합니다. local 기본 `DATABASE_URL``postgres://nomadcode:nomadcode@code-server-postgres:5432/nomadcode-core-local?sslmode=disable` 이고, local 기본 `REDIS_URL``redis://code-server-redis:6379/3`, `REDIS_KEY_PREFIX``nomadcode-core:local` 입니다. dev 배포는 Docker Compose로 실행하며, 같은 `code-server-postgres` Postgres와 `code-server-redis` Redis를 사용합니다. dev DB명은 `nomad-core-dev` 이고, dev 기본 `REDIS_URL``redis://code-server-redis:6379/4`, `REDIS_KEY_PREFIX``nomadcode-core:dev`니다. `AUTH_PASSWORD`를 설정하면 `/readyz``/api/*`에 HTTP Basic Auth가 적용됩니다.
PostgreSQL 사용자와 DB 생성 예시:
`code-server` PostgreSQL 컨테이너에 DB를 생성하는 예시:
```bash
psql postgres -c "CREATE USER nomadcode WITH PASSWORD 'nomadcode';"
psql postgres -c "CREATE DATABASE nomadcode OWNER nomadcode;"
docker exec code-server-postgres psql -U nomadcode -d postgres -c 'CREATE DATABASE "nomadcode-core-local" OWNER nomadcode;'
docker exec code-server-postgres psql -U nomadcode -d postgres -c 'CREATE DATABASE "nomad-core-dev" OWNER nomadcode;'
```
Migration 실행:
@ -109,7 +109,7 @@ sqlc 실행:
DB 접근 코드는 `migrations/`의 스키마와 `queries/`의 SQL을 기준으로 `internal/db/`에 생성합니다. `internal/db/db.go`, `internal/db/models.go`, `internal/db/tasks.sql.go`는 생성 파일이므로 직접 수정하지 않습니다.
Docker Compose 실행은 PostgreSQL과 Redis를 함께 띄워 통합 확인이 필요할 때 선택적으로 사용합니다. 외부 노출 테스트에서는 `AUTH_PASSWORD`를 함께 지정합니다.
Docker Compose 실행은 dev 배포용입니다. compose는 외부 Docker 네트워크 `net_nginx`에 붙고, 같은 네트워크의 `code-server-postgres``nomad-core-dev` DB로, `code-server-redis`의 Redis DB 4번과 `nomadcode-core:dev` key prefix로 접속합니다. dev Redis 주소나 prefix를 바꿀 때는 local 실행용 `REDIS_URL`, `REDIS_KEY_PREFIX`와 분리된 `DEV_REDIS_URL`, `DEV_REDIS_KEY_PREFIX` 사용합니다. 외부 노출 테스트에서는 `AUTH_PASSWORD`를 함께 지정합니다.
```bash
AUTH_PASSWORD="change-me" ./bin/docker-up

View file

@ -5,8 +5,18 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT_DIR"
GOOSE_DRIVER="${GOOSE_DRIVER:-postgres}"
DATABASE_URL="${DATABASE_URL:-postgres://nomadcode:nomadcode@localhost:5432/nomadcode?sslmode=disable}"
default_database_url="postgres://nomadcode:nomadcode@code-server-postgres:5432/nomadcode-core-local?sslmode=disable"
legacy_code_server_database_url="postgres://nomadcode:nomadcode@code-server-postgres:5432/nomadcode?sslmode=disable"
# code-server exports a shared DATABASE_URL; remap that default to this project's local DB.
if [[ "${DATABASE_URL:-}" == "$legacy_code_server_database_url" ]]; then
DATABASE_URL="$default_database_url"
else
DATABASE_URL="${DATABASE_URL:-$default_database_url}"
fi
GOOSE_DBSTRING="${GOOSE_DBSTRING:-$DATABASE_URL}"
if [[ "$GOOSE_DBSTRING" == "$legacy_code_server_database_url" ]]; then
GOOSE_DBSTRING="$DATABASE_URL"
fi
if [[ -n "${GOOSE_BIN:-}" ]]; then
goose_cmd=("$GOOSE_BIN")

20
bin/run
View file

@ -6,8 +6,24 @@ cd "$ROOT_DIR"
export APP_ENV="${APP_ENV:-local}"
export HTTP_ADDR="${HTTP_ADDR:-:8080}"
export DATABASE_URL="${DATABASE_URL:-postgres://nomadcode:nomadcode@localhost:5432/nomadcode?sslmode=disable}"
export REDIS_URL="${REDIS_URL:-redis://localhost:6379/0}"
default_database_url="postgres://nomadcode:nomadcode@code-server-postgres:5432/nomadcode-core-local?sslmode=disable"
legacy_code_server_database_url="postgres://nomadcode:nomadcode@code-server-postgres:5432/nomadcode?sslmode=disable"
default_redis_url="redis://code-server-redis:6379/3"
legacy_code_server_redis_url="redis://code-server-redis:6379/0"
default_redis_key_prefix="nomadcode-core:local"
# code-server exports a shared DATABASE_URL; remap that default to this project's local DB.
if [[ "${DATABASE_URL:-}" == "$legacy_code_server_database_url" ]]; then
export DATABASE_URL="$default_database_url"
else
export DATABASE_URL="${DATABASE_URL:-$default_database_url}"
fi
# code-server exports a shared REDIS_URL; remap that default to this project's local Redis DB.
if [[ "${REDIS_URL:-}" == "$legacy_code_server_redis_url" ]]; then
export REDIS_URL="$default_redis_url"
else
export REDIS_URL="${REDIS_URL:-$default_redis_url}"
fi
export REDIS_KEY_PREFIX="${REDIS_KEY_PREFIX:-$default_redis_key_prefix}"
export AUTH_USERNAME="${AUTH_USERNAME:-nomadcode}"
exec go run ./cmd/server "$@"

View file

@ -1,54 +1,25 @@
name: nomadcode-core
services:
postgres:
image: postgres:17-alpine
environment:
POSTGRES_DB: nomadcode
POSTGRES_USER: nomadcode
POSTGRES_PASSWORD: nomadcode
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U nomadcode -d nomadcode"]
interval: 5s
timeout: 5s
retries: 10
volumes:
- postgres-data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
command: ["redis-server", "--appendonly", "yes"]
ports:
- "6379:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 10
volumes:
- redis-data:/data
nomadcode-core:
build: .
environment:
APP_ENV: local
APP_ENV: dev
HTTP_ADDR: :8080
DATABASE_URL: postgres://nomadcode:nomadcode@postgres:5432/nomadcode?sslmode=disable
REDIS_URL: redis://redis:6379/0
DATABASE_URL: ${DATABASE_URL:-postgres://nomadcode:nomadcode@code-server-postgres:5432/nomad-core-dev?sslmode=disable}
REDIS_URL: ${DEV_REDIS_URL:-redis://code-server-redis:6379/4}
REDIS_KEY_PREFIX: ${DEV_REDIS_KEY_PREFIX:-nomadcode-core:dev}
AUTH_USERNAME: ${AUTH_USERNAME:-nomadcode}
AUTH_PASSWORD: ${AUTH_PASSWORD:-}
MATTERMOST_BASE_URL: ""
MATTERMOST_TOKEN: ""
PLANE_BASE_URL: ""
PLANE_TOKEN: ""
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
ports:
- "8080:8080"
networks:
- net_nginx
volumes:
postgres-data:
redis-data:
networks:
net_nginx:
external: true

View file

@ -1,2 +1,2 @@
GOOSE_DRIVER=postgres
GOOSE_DBSTRING=postgres://nomadcode:nomadcode@localhost:5432/nomadcode?sslmode=disable
GOOSE_DBSTRING=postgres://nomadcode:nomadcode@code-server-postgres:5432/nomadcode-core-local?sslmode=disable

View file

@ -7,6 +7,7 @@ type Config struct {
HTTPAddr string
DatabaseURL string
RedisURL string
RedisKeyPrefix string
AuthUsername string
AuthPassword string
MattermostBaseURL string
@ -21,6 +22,7 @@ func Load() Config {
HTTPAddr: getEnv("HTTP_ADDR", ":8080"),
DatabaseURL: os.Getenv("DATABASE_URL"),
RedisURL: os.Getenv("REDIS_URL"),
RedisKeyPrefix: os.Getenv("REDIS_KEY_PREFIX"),
AuthUsername: getEnv("AUTH_USERNAME", "nomadcode"),
AuthPassword: os.Getenv("AUTH_PASSWORD"),
MattermostBaseURL: os.Getenv("MATTERMOST_BASE_URL"),