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 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)
|
||||
|
|
|
|||
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
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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
20
bin/run
|
|
@ -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 "$@"
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"),
|
||||
|
|
|
|||
Loading…
Reference in a new issue