aboutsummaryrefslogtreecommitdiff
path: root/README.txt
blob: 70a593150c6aa4227da6fdb3295ecba391bbdf3b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Copyright (C) 2026 Doan Luu Duc Tai <doan@luuduct.ai>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

STACK

    Personal web services, developed and managed through a root Cargo workspace.
    Copyright (C) 2026 Doan Luu Duc Tai <doan@luuduct.ai>
    GNU Affero General Public License, version 3 or later. See LICENSE.

GETTING STARTED

    Install Rust through rustup, Podman, Git, and GnuPG on a Linux development
    machine. The pinned toolchain includes rustfmt, Clippy, and the static
    x86_64 Linux target.

    From this directory:

        cargo stack dev
        cargo stack status
        cargo stack down

    Browse http://localhost:8080, /git/, and /search/.
    A fresh checkout generates a private .env automatically.
    Local mode binds only loopback and does not request public certificates.

DEVELOPMENT AND PRODUCTION

    src/ holds the Rust management command. Future Rust application backends
    belong in crates/. Add each crate to the root workspace explicitly and
    inherit its strict workspace lints.

    infra/ holds service definitions, proxy configuration, container sources,
    and the production user service. web/ holds the public website and WKD.
    docs/ contains plaintext operations and policy documentation.

    Only .env holds configured secrets. .env.example documents the keys.
    var/ contains private persistent data, container storage, temporary work,
    and exports. Generated TLS private keys are runtime data under var/.
    .env, var/, .tools/, target/, bin/, and dist/ are excluded from Git.

    The three existing services are Caddy, cgit, and SearXNG. The management
    command is Rust. SearXNG and the cgit container's upstream supervisor retain
    their third-party Python implementation. No first-party Python is needed.

    Build and test on the development machine. Deploy prebuilt release
    archives. The production host needs Podman, Git, and GnuPG, but no Rust
    toolchain, Cargo, Compose, or Docker daemon.

CHECKS AND LICENSES

        cargo install --locked --version 0.20.2 cargo-deny --root .tools
        cargo install --locked --version 0.9.3 --features cli cargo-about --root .tools
        cargo stack check
        cargo stack release

    Check runs formatting, Clippy, tests, rustdoc, cargo-deny, and cargo-about.
    THIRD-PARTY-LICENSES.html is generated from Cargo.lock and about.hbs.
    Human-readable license headings use GNU's names. SPDX identifiers and
    original third-party legal texts retain their exact spelling.

    Detailed manual backup, recovery, deployment, and host setup instructions
    are in docs/OPERATIONS.txt. Read docs/POLICY.txt before changing conventions.