update project configuration and build scripts
This commit is contained in:
parent
cb35ec5a1a
commit
787f579c1c
7 changed files with 53 additions and 51 deletions
7
Makefile
7
Makefile
|
|
@ -1,7 +1,10 @@
|
||||||
export APP_ENV ?= local
|
export APP_ENV ?= local
|
||||||
export HTTP_ADDR ?= :8080
|
export HTTP_ADDR ?= :8080
|
||||||
export DATABASE_URL ?= postgres://nomadcode:nomadcode@localhost:5432/nomadcode?sslmode=disable
|
export DATABASE_URL ?= postgres://nomadcode:nomadcode@code-server-postgres:5432/nomadcode-core-local?sslmode=disable
|
||||||
export REDIS_URL ?= redis://localhost:6379/0
|
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 AUTH_USERNAME ?= nomadcode
|
||||||
export GOOSE_DRIVER ?= postgres
|
export GOOSE_DRIVER ?= postgres
|
||||||
export GOOSE_DBSTRING ?= $(DATABASE_URL)
|
export GOOSE_DBSTRING ?= $(DATABASE_URL)
|
||||||
|
|
|
||||||
10
README.md
10
README.md
|
|
@ -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
|
```bash
|
||||||
psql postgres -c "CREATE USER nomadcode WITH PASSWORD 'nomadcode';"
|
docker exec code-server-postgres psql -U nomadcode -d postgres -c 'CREATE DATABASE "nomadcode-core-local" OWNER nomadcode;'
|
||||||
psql postgres -c "CREATE DATABASE nomadcode OWNER nomadcode;"
|
docker exec code-server-postgres psql -U nomadcode -d postgres -c 'CREATE DATABASE "nomad-core-dev" OWNER nomadcode;'
|
||||||
```
|
```
|
||||||
|
|
||||||
Migration 실행:
|
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`는 생성 파일이므로 직접 수정하지 않습니다.
|
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
|
```bash
|
||||||
AUTH_PASSWORD="change-me" ./bin/docker-up
|
AUTH_PASSWORD="change-me" ./bin/docker-up
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,18 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
cd "$ROOT_DIR"
|
cd "$ROOT_DIR"
|
||||||
|
|
||||||
GOOSE_DRIVER="${GOOSE_DRIVER:-postgres}"
|
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}"
|
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
|
if [[ -n "${GOOSE_BIN:-}" ]]; then
|
||||||
goose_cmd=("$GOOSE_BIN")
|
goose_cmd=("$GOOSE_BIN")
|
||||||
|
|
|
||||||
20
bin/run
20
bin/run
|
|
@ -6,8 +6,24 @@ cd "$ROOT_DIR"
|
||||||
|
|
||||||
export APP_ENV="${APP_ENV:-local}"
|
export APP_ENV="${APP_ENV:-local}"
|
||||||
export HTTP_ADDR="${HTTP_ADDR:-:8080}"
|
export HTTP_ADDR="${HTTP_ADDR:-:8080}"
|
||||||
export 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"
|
||||||
export REDIS_URL="${REDIS_URL:-redis://localhost:6379/0}"
|
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}"
|
export AUTH_USERNAME="${AUTH_USERNAME:-nomadcode}"
|
||||||
|
|
||||||
exec go run ./cmd/server "$@"
|
exec go run ./cmd/server "$@"
|
||||||
|
|
|
||||||
|
|
@ -1,54 +1,25 @@
|
||||||
|
name: nomadcode-core
|
||||||
|
|
||||||
services:
|
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:
|
nomadcode-core:
|
||||||
build: .
|
build: .
|
||||||
environment:
|
environment:
|
||||||
APP_ENV: local
|
APP_ENV: dev
|
||||||
HTTP_ADDR: :8080
|
HTTP_ADDR: :8080
|
||||||
DATABASE_URL: postgres://nomadcode:nomadcode@postgres:5432/nomadcode?sslmode=disable
|
DATABASE_URL: ${DATABASE_URL:-postgres://nomadcode:nomadcode@code-server-postgres:5432/nomad-core-dev?sslmode=disable}
|
||||||
REDIS_URL: redis://redis:6379/0
|
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_USERNAME: ${AUTH_USERNAME:-nomadcode}
|
||||||
AUTH_PASSWORD: ${AUTH_PASSWORD:-}
|
AUTH_PASSWORD: ${AUTH_PASSWORD:-}
|
||||||
MATTERMOST_BASE_URL: ""
|
MATTERMOST_BASE_URL: ""
|
||||||
MATTERMOST_TOKEN: ""
|
MATTERMOST_TOKEN: ""
|
||||||
PLANE_BASE_URL: ""
|
PLANE_BASE_URL: ""
|
||||||
PLANE_TOKEN: ""
|
PLANE_TOKEN: ""
|
||||||
depends_on:
|
|
||||||
postgres:
|
|
||||||
condition: service_healthy
|
|
||||||
redis:
|
|
||||||
condition: service_healthy
|
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
|
networks:
|
||||||
|
- net_nginx
|
||||||
|
|
||||||
volumes:
|
networks:
|
||||||
postgres-data:
|
net_nginx:
|
||||||
redis-data:
|
external: true
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
GOOSE_DRIVER=postgres
|
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
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ type Config struct {
|
||||||
HTTPAddr string
|
HTTPAddr string
|
||||||
DatabaseURL string
|
DatabaseURL string
|
||||||
RedisURL string
|
RedisURL string
|
||||||
|
RedisKeyPrefix string
|
||||||
AuthUsername string
|
AuthUsername string
|
||||||
AuthPassword string
|
AuthPassword string
|
||||||
MattermostBaseURL string
|
MattermostBaseURL string
|
||||||
|
|
@ -21,6 +22,7 @@ func Load() Config {
|
||||||
HTTPAddr: getEnv("HTTP_ADDR", ":8080"),
|
HTTPAddr: getEnv("HTTP_ADDR", ":8080"),
|
||||||
DatabaseURL: os.Getenv("DATABASE_URL"),
|
DatabaseURL: os.Getenv("DATABASE_URL"),
|
||||||
RedisURL: os.Getenv("REDIS_URL"),
|
RedisURL: os.Getenv("REDIS_URL"),
|
||||||
|
RedisKeyPrefix: os.Getenv("REDIS_KEY_PREFIX"),
|
||||||
AuthUsername: getEnv("AUTH_USERNAME", "nomadcode"),
|
AuthUsername: getEnv("AUTH_USERNAME", "nomadcode"),
|
||||||
AuthPassword: os.Getenv("AUTH_PASSWORD"),
|
AuthPassword: os.Getenv("AUTH_PASSWORD"),
|
||||||
MattermostBaseURL: os.Getenv("MATTERMOST_BASE_URL"),
|
MattermostBaseURL: os.Getenv("MATTERMOST_BASE_URL"),
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue