# Tạo project

Skill cha: [tdshift-paas](https://app.tdshift.info/skill) · Cần: đã đăng nhập ([tai-khoan](https://app.tdshift.info/skill/tai-khoan.md))

Tạo project gồm hai bước: tạo project (chỉ đặt tên) rồi chọn loại. Chưa có container nào chạy cho tới khi chọn loại (PostgreSQL) hoặc bấm deploy (Compose).

## Bước 1 - Tạo project

1. Ở trang chủ `https://app.tdshift.info/`, bấm **＋ Tạo project** (hoặc **Bắt đầu project đầu tiên**).
2. Nhập **Tên project** (1–60 ký tự, chỉ để hiển thị) → bấm **Tạo project**.
3. Hệ thống sinh mã project `project-xxxxxxxxxx` và mở trang "PROJECT SETUP" với thông báo "Đã tạo project. Hãy chọn loại project để tiếp tục.". Trạng thái: `unconfigured`.

Giới hạn: mỗi tài khoản tối đa 20 project (cấu hình `MAX_PROJECTS_PER_USER`), kể cả project đang xoá. Vượt giới hạn báo "Hệ thống hỗ trợ tối đa N project cho mỗi tài khoản.". Nút tạo bị khoá khi đủ số lượng.

## Bước 2 - Chọn loại project

Ở mục **Loại project**, chọn một trong bốn → bấm **Tiếp tục →**. Chỉ chọn được một lần.

| Lựa chọn trên UI | Kết quả | Bước tiếp theo |
|---|---|---|
| **▤ PostgreSQL 17** (Database riêng + pgAdmin) | Loại `postgres`; tự khởi tạo PostgreSQL 17 + pgAdmin 4 (trạng thái `creating`, tối đa khoảng 4 phút) | [postgres](https://app.tdshift.info/skill/postgres.md) |
| **◎ Odoo 18 Community** | Loại `compose`, trình soạn Compose điền sẵn preset `odoo:18` + `postgres:17` | [deploy-compose](https://app.tdshift.info/skill/deploy-compose.md), bấm deploy |
| **W WordPress** | Loại `compose`, preset `wordpress:php8.3-apache` + `mariadb:11` | [deploy-compose](https://app.tdshift.info/skill/deploy-compose.md), bấm deploy |
| **◈ Git Compose** | Loại `compose` trống | [deploy-compose](https://app.tdshift.info/skill/deploy-compose.md) |

Project `compose` có sẵn file `.env` với `WORDPRESS_DB_NAME`, `WORDPRESS_DB_USER`, `WORDPRESS_DB_PASSWORD`, `MYSQL_ROOT_PASSWORD`, `ODOO_DB_PASSWORD` (mật khẩu ngẫu nhiên), dùng được trong Compose bằng `${TEN_BIEN}`.

## Tạo bằng Agent API

Chỉ tạo được loại `compose`:

```bash
curl -fsS -X POST "https://app.tdshift.info/api/v1/agent/projects" \
  -H "Authorization: Bearer $PAAS_API_TOKEN" -H 'Content-Type: application/json' \
  --data '{"name":"my-app","type":"compose"}'
# 201 {"id":"<UUID>","name":"my-app","type":"compose","status":"ready"}
```

Lưu `id` (UUID) cho mọi bước sau. Project tạo qua API có trạng thái `ready` ngay. Gửi một lần; nếu không chắc đã tạo chưa thì `GET /api/v1/agent/projects` để kiểm tra thay vì tạo lại. Vượt giới hạn → 409 `Project limit reached`.

## Khi khởi tạo PostgreSQL lỗi

Trang hiện "Khởi tạo chưa hoàn tất" → bấm **Thử lại** (chỉ có khi trạng thái `error`). Dữ liệu và mật khẩu đã sinh được giữ nguyên.
