Ver código fonte

doc: document configuration

KernelDeimos 2 meses atrás
pai
commit
4486490039

+ 1 - 0
doc/README.md

@@ -15,6 +15,7 @@ to ask questions.
 ## Deployers
 ## Deployers
 
 
 - [Hosting Instructions](./self-hosters/instructions.md)
 - [Hosting Instructions](./self-hosters/instructions.md)
+- [Configuration](./self-hosters/config.md)
 - [Domain Setup](./self-hosters/domains.md)
 - [Domain Setup](./self-hosters/domains.md)
 - [Support Levels](./self-hosters/support.md)
 - [Support Levels](./self-hosters/support.md)
 
 

+ 84 - 0
doc/self-hosters/config-vals.json.js

@@ -0,0 +1,84 @@
+export default [
+    {
+        key: 'domain',
+        description: `
+            Domain name of the Puter instance. This may be used to generate URLs
+            in the UI. If "allow_all_host_values" is false or undefined, the domain
+            will be used to validate the host header of incoming requests.
+        `,
+        example_values: [
+            'example.com',
+            'subdomain.example.com'
+        ]
+    },
+    {
+        key: 'protocol',
+        description: `
+            The protocol to use for URLs. This should be either "http" or "https".
+        `,
+        example_values: [
+            'http',
+            'https'
+        ]
+    },
+    {
+        key: 'static_hosting_domain',
+        description: `
+            This domain name will be used for public site URLs. For example: when
+            you right-click a directory and choose "Publish as Website".
+            This domain should point to the same server. If you have a LAN configuration
+            you could set this to something like
+            \`site.192.168.555.12.nip.io\`, replacing
+            \`192.168.555.12\` with a valid IP address belonging to the server.
+        `
+    },
+    {
+        key: 'allow_all_host_values',
+        description: `
+            If true, Puter will accept any host header value in incoming requests.
+            This is useful for development, but should be disabled in production.
+        `,
+    },
+    {
+        key: 'allow_nipio_domains',
+        description: `
+            If true, Puter will allow requests with host headers that end in nip.io.
+            This is useful for development, LAN, and VPN configurations.
+        `
+    },
+    {
+        key: 'http_port',
+        description: `
+            The port to listen on for HTTP requests.
+        `,
+    },
+    {
+        key: 'enable_public_folders',
+        description: `
+            If true, any /username/Public directory will be available to all
+            users, including anonymous users.
+        `
+    },
+    {
+        key: 'disable_temp_users',
+        description: `
+            If true, new users will see the login/signup page instead of being
+            automatically logged in as a temporary user.
+        `
+    },
+    {
+        key: 'disable_user_signup',
+        description: `
+            If true, the signup page will be disabled and the backend will not
+            accept new user registrations.
+        `
+    },
+    {
+        key: 'disable_fallback_mechanisms',
+        description: `
+            A general setting to prevent any fallback behavior that might
+            "hide" errors. It is recommended to set this to true when
+            debugging, testing, or developing new features.
+        `
+    }
+]

+ 89 - 0
doc/self-hosters/config.md

@@ -0,0 +1,89 @@
+# Configuring Puter
+
+## Terminology
+
+- **root** - the "top level" of configuration; if a key-value pair is in/at "the root"
+  that means it is **not in a nested object**
+  (ex: values under "services" are **not** at the root).
+
+## Config Locations
+
+Running the server will generate a configuration file in one of these locations:
+- `config/config.json` when [Using Docker](#using-docker)
+- `volatile/config/config.json` in [Local Development](#local-development)
+- `/etc/puter/config.json` on a server (or within a Docker container)
+
+## Editing Configuration
+
+For a list of all possible config values, see [config_values.md](./config_values.md)
+
+Instead of editing the generated `config.json`, you can make a config file
+that references it. This makes it easier to maintain if you frequently update
+Puter, since you can then just delete `config.json` to get new defaults.
+
+For example, a `local.json` might look like this:
+
+```json
+{
+    // Always include this header
+    "$version": "v1.1.0",
+    "$requires": [
+        "config.json"
+    ],
+    "config_name": "local",
+    
+    // Your custom configuration
+    "domain": "my-puter.example.com"
+}
+```
+
+To use `local.json` instead of `config.json` you will need to set the
+environment variable `PUTER_CONFIG_PROFILE=local` in the context where
+you are running Puter.
+
+## Sample Configuration
+
+The default configuration generated by Puter will look
+something like the following (updated 2025-02-26):
+
+```json
+{
+    "config_name": "generated default config",
+    "mod_directories": [
+        "{source}/../extensions"
+    ],
+    "env": "dev",
+    "nginx_mode": true,
+    "server_id": "localhost",
+    "http_port": "auto",
+    "domain": "puter.localhost",
+    "protocol": "http",
+    "contact_email": "hey@example.com",
+    "services": {
+        "database": {
+            "engine": "sqlite",
+            "path": "puter-database.sqlite"
+        },
+        "thumbnails": {
+            "engine": "http"
+        },
+        "file-cache": {
+            "disk_limit": 5368709120,
+            "disk_max_size": 204800,
+            "precache_size": 209715200,
+            "path": "./file-cache"
+        }
+    },
+    "cookie_name": "...",
+    "jwt_secret": "...",
+    "url_signature_secret": "...",
+    "private_uid_secret": "...",
+    "private_uid_namespace": "...",
+    "": null
+}
+```
+
+## Root-Level Parameters
+
+- **domain** - origin for Puter. Do **not** include URL schema (the 'http(s)://' portion)
+- 

+ 72 - 0
doc/self-hosters/config_values.md

@@ -0,0 +1,72 @@
+### `domain`
+
+Domain name of the Puter instance. This may be used to generate URLs
+in the UI. If "allow_all_host_values" is false or undefined, the domain
+will be used to validate the host header of incoming requests.
+
+#### Examples
+
+- `"domain": "example.com"`
+- `"domain": "subdomain.example.com"`
+
+### `protocol`
+
+The protocol to use for URLs. This should be either "http" or "https".
+
+#### Examples
+
+- `"protocol": "http"`
+- `"protocol": "https"`
+
+### `static_hosting_domain`
+
+This domain name will be used for public site URLs. For example: when
+you right-click a directory and choose "Publish as Website".
+This domain should point to the same server. If you have a LAN configuration
+you could set this to something like
+`site.192.168.555.12.nip.io`, replacing
+`192.168.555.12` with a valid IP address belonging to the server.
+
+
+### `allow_all_host_values`
+
+If true, Puter will accept any host header value in incoming requests.
+This is useful for development, but should be disabled in production.
+
+
+### `allow_nipio_domains`
+
+If true, Puter will allow requests with host headers that end in nip.io.
+This is useful for development, LAN, and VPN configurations.
+
+
+### `http_port`
+
+The port to listen on for HTTP requests.
+
+
+### `enable_public_folders`
+
+If true, any /username/Public directory will be available to all
+users, including anonymous users.
+
+
+### `disable_temp_users`
+
+If true, new users will see the login/signup page instead of being
+automatically logged in as a temporary user.
+
+
+### `disable_user_signup`
+
+If true, the signup page will be disabled and the backend will not
+accept new user registrations.
+
+
+### `disable_fallback_mechanisms`
+
+A general setting to prevent any fallback behavior that might
+"hide" errors. It is recommended to set this to true when
+debugging, testing, or developing new features.
+
+

+ 25 - 0
doc/self-hosters/gen.js

@@ -0,0 +1,25 @@
+import dedent from 'dedent';
+import configVals from './config-vals.json.js';
+
+const mdlib = {};
+mdlib.h = (out, n, str) => {
+    out(`${'#'.repeat(n)} ${str}\n\n`);
+}
+
+const N_START = 3;
+
+const out = str => process.stdout.write(str);
+for ( const configVal of configVals ) {
+    mdlib.h(out, N_START, `\`${configVal.key}\``);
+    out(dedent(configVal.description) + '\n\n');
+    
+    if ( configVal.example_values ) {
+        mdlib.h(out, N_START + 1, `Examples`);
+        for ( const example of configVal.example_values ) {
+            out(`- \`"${configVal.key}": ${JSON.stringify(example)}\`\n`);
+        }
+    }
+
+    out('\n');
+
+}

+ 6 - 1
doc/self-hosters/instructions.md

@@ -16,7 +16,7 @@ Until then, it is still possible to add apps using the **Dev Center** app.
 
 
 ## Configuration
 ## Configuration
 
 
-Running the server will generate a configuration file in one of these locations:
+Running the server will generate a [configuration file](./config.md) in one of these locations:
 - `config/config.json` when [Using Docker](#using-docker)
 - `config/config.json` when [Using Docker](#using-docker)
 - `volatile/config/config.json` in [Local Development](#local-development)
 - `volatile/config/config.json` in [Local Development](#local-development)
 - `/etc/puter/config.json` on a server (or within a Docker container)
 - `/etc/puter/config.json` on a server (or within a Docker container)
@@ -26,6 +26,11 @@ Running the server will generate a configuration file in one of these locations:
 To access Puter on your device, you can simply go to the address printed in
 To access Puter on your device, you can simply go to the address printed in
 the server console (usually `puter.localhost:4100`).
 the server console (usually `puter.localhost:4100`).
 
 
+To access Puter from another device on LAN, enable the following configuration:
+```json
+"allow_nipio_domains": true
+```
+
 To access Puter from another device, a domain name must be configured, as well as
 To access Puter from another device, a domain name must be configured, as well as
 an `api` subdomain. For example, `example.local` might be the domain name pointing
 an `api` subdomain. For example, `example.local` might be the domain name pointing
 to the IP address of the server running puter, and `api.example.com` must point to
 to the IP address of the server running puter, and `api.example.com` must point to