Add deployment infrastructure and development guide

- db/migrations/: V001 (schema) + V002 (seed data) SQL files
- deploy/: systemd service files (taxbaik.service, taxbaik-admin.service)
- deploy/: Nginx location block configuration
- .gitea/workflows/deploy.yml: CI/CD pipeline (build, test, deploy)
- CLAUDE.md: Comprehensive development guidelines (9 sections)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-06-26 14:59:51 +09:00
parent 6dff8e7777
commit 88409b8fea
7 changed files with 697 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
-- V001 - Initial Schema for TaxBaik
CREATE TABLE categories (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
slug VARCHAR(100) NOT NULL UNIQUE,
sort_order INT NOT NULL DEFAULT 0
);
CREATE TABLE admin_users (
id SERIAL PRIMARY KEY,
username VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(500) NOT NULL,
last_login_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE blog_posts (
id SERIAL PRIMARY KEY,
title VARCHAR(300) NOT NULL,
content TEXT NOT NULL,
slug VARCHAR(300) NOT NULL UNIQUE,
category_id INT REFERENCES categories(id) ON DELETE SET NULL,
tags TEXT,
author_id INT REFERENCES admin_users(id) ON DELETE SET NULL,
published_at TIMESTAMPTZ,
view_count INT NOT NULL DEFAULT 0,
seo_title VARCHAR(300),
seo_description VARCHAR(500),
thumbnail_url VARCHAR(500),
is_published BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_blog_slug ON blog_posts(slug);
CREATE INDEX idx_blog_published ON blog_posts(is_published, published_at DESC);
CREATE INDEX idx_blog_category ON blog_posts(category_id);
CREATE TABLE inquiries (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
phone VARCHAR(20) NOT NULL,
email VARCHAR(200),
service_type VARCHAR(100) NOT NULL,
message TEXT NOT NULL,
status VARCHAR(50) NOT NULL DEFAULT 'new',
ip_address VARCHAR(50),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_inquiry_status ON inquiries(status);
CREATE INDEX idx_inquiry_created ON inquiries(created_at DESC);
CREATE TABLE site_settings (
key VARCHAR(200) PRIMARY KEY,
value TEXT NOT NULL,
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
+15
View File
@@ -0,0 +1,15 @@
-- V002 - Seed Categories and Settings
INSERT INTO categories (name, slug, sort_order) VALUES
('사업자 세무', 'business-tax', 1),
('부동산 세금', 'real-estate-tax', 2),
('종합소득세', 'income-tax', 3),
('부가가치세', 'vat', 4),
('가족자산·증여', 'family-asset', 5);
INSERT INTO site_settings (key, value) VALUES
('site.title', '백원숙 세무회계 | 성북구 세무사'),
('site.description', '사업자 세무, 부동산 양도세·증여세, 종합소득세 상담. 성북구 백원숙 세무사.'),
('kakao.channel.url', ''),
('phone.main', ''),
('consultation.fee.text','상담료 7만~20만 원, 계약 체결 시 일부 차감');