Update README for first release.
This commit is contained in:
		
							parent
							
								
									61eaa42373
								
							
						
					
					
						commit
						93bfe14d4f
					
				
							
								
								
									
										135
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										135
									
								
								README.md
									
									
									
									
									
								
							| @ -1,30 +1,105 @@ | ||||
| # tkr | ||||
| 
 | ||||
| A bare-bones status feed for self-hosted personal websites. | ||||
| A lightweight, HTML-only status feed for self-hosted personal websites. Written in PHP. Heavily inspired by [status.cafe](https://status.cafe). | ||||
| 
 | ||||
| Currently very much a work in progress, but it's baically functional. | ||||
|  | ||||
| 
 | ||||
| ## How it works | ||||
| ## Features | ||||
| 
 | ||||
| Deploy the `/tkr` directory to a web server that supports php. It will work either as the root of a (sub)domain (e.g. tky.mydomain.com) or if served from a subdirectory (e.g. mydomain.com/tkr). | ||||
| * HTML and CSS implementation. No Javascript. | ||||
| * RSS `/feed/rss` and Atom `/feed/atom` feeds | ||||
| * CSS uploads for custom theming | ||||
| * Custom emoji to personalize moods (unicode only) | ||||
| 
 | ||||
| If you serve it from a subdirectory, set the value of `$basePath` in `config/init.php` to the subdirectory name, excluding the trailing slash (e.g. `/tkr`) | ||||
| ## Prerequisites | ||||
| 
 | ||||
| It provides an rss feed at `/rss` and an atom feed at `/atom` relative to where it's being served (e.g. `/tkr/rss` if served from `/tkr/`). Each rss entry links to an individual post (which I call "ticks"). | ||||
| * A web server with PHP support, such as: | ||||
|     * Apache with mod_php | ||||
|     * nginx and php-fpm | ||||
| * PHP 8.2+ with the PDO and PDO_SQLITE extensions | ||||
|     * The PDO and PDO_SQLITE extensions are usually included by default | ||||
|     * This might work with earlier PHP versions, but I've only tested 8.2 | ||||
|      | ||||
| ## Installation | ||||
| 
 | ||||
| ## Serving | ||||
| 1. Download the latest tkr archive from https://subcultureofone.org/files/tkr/tkr.0.6.0.zip | ||||
| 1. Copy the .zip file to your server and extract it | ||||
| 1. Copy the `tkr` directory to the location you want to serve it from | ||||
|     * on debian-based systems, `/var/www/tkr` is recommended | ||||
| 1. Make the `storage` directory writable by the web server account. | ||||
|     * For example, on nginx on debian-based distributions: | ||||
|     ```sh | ||||
|     chown www-data:www-data /path/to/tkr/storage | ||||
|     ``` | ||||
| 1. Add the necessary web server configuration | ||||
|     * Examples for common deployment scenarios, including documentation, are in the examples directory. | ||||
| 
 | ||||
| ## From git | ||||
| 
 | ||||
| If you'd prefer to install from git: | ||||
| 
 | ||||
| 1. Clone this directoryand copy the `/tkr` directory to your web server. | ||||
|     * Required subdirectories are: | ||||
|         1. `config` | ||||
|         1. `public` | ||||
|         1. `src` | ||||
|         1. `storage` | ||||
|         1. `templates` | ||||
|     * Exclude the other directories | ||||
| 2. Follow the main installation from step 2. | ||||
| 
 | ||||
| ## Initial configuration | ||||
| 
 | ||||
| 1. Edit `config/init.php` to set the domain and base path correctly for your configuration. | ||||
|     * subdirectory installation (e.g. https://my-domain.com/tkr) | ||||
|     ``` | ||||
|     'base_url' => 'https://my-domain.com', | ||||
|     'base_path' => '/tkr/', | ||||
|     ``` | ||||
|     * subdomain installation (e.g. https://tkr.my-domain.com) | ||||
|     ``` | ||||
|     'base_url' => 'https://tkr.my-domain.com', | ||||
|     'base_path' => '/', | ||||
|     ``` | ||||
| 1. Browse to your tkr URL. You'll be presented with the setup screen to complete initial configuration. | ||||
|  | ||||
| 
 | ||||
| ## Server configuration notes | ||||
| 
 | ||||
| The document root should be `/PATH/TO/tkr/public`. This will ensure that only the files that need to be accessible from the internet are served by your web server. | ||||
| 
 | ||||
| There is an `.htaccess` file in the `tkr/` root directory. It's designed for the following installation scenario: | ||||
| 
 | ||||
| * shared hosting | ||||
| * `tkr/` is deployed installed to `tkr/` under your web root. (e.g. `public_html/tkr`). | ||||
| * `tkr/public` is the document root | ||||
| * The other application directories are blocked both by `tkr/.htaccess` and by `.htaccess` files in the directories themselves. These are: | ||||
|     * `tkr/config` | ||||
|     * `tkr/examples` (not technically an application directory, but distributed with the .zip archive) | ||||
|     * `tkr/src` | ||||
|     * `tkr/storage` | ||||
|     * `tkr/templates` | ||||
| 
 | ||||
| There are example configurations for other common scenarios in the [examples](./examples) directory. | ||||
| 
 | ||||
| * Apache VPS, subdomain (e.g. `https://tkr.your-domain.com`): [examples/apache/vps/root](./examples/apache/vps/subdomain) | ||||
| * Apache VPS, subfolder (e.g. `https://your-domain.com/tkr`): [examples/apache/vps/subfolder](./examples/apache/vps/subfolder) | ||||
| * Nginx VPS, subdomain (e.g. `https://tkr.your-domain.com`): [examples/nginx/root](./examples/nginx/subfolder) | ||||
| * Nginx VPS, subfolder (e.g. `https://your-domain.com/tkr`): [examples/nginx/subfolder](./examples/nginx/subfolder) | ||||
| 
 | ||||
| ### Docker compose | ||||
| 
 | ||||
| The example directories contain docker-compose.yml files for the different configurations. To run tkr locally on your machine, copy the docker-compose file you're interested in to `tkr/` and run `docker compose up`. | ||||
| 
 | ||||
| ## Storage | ||||
| 
 | ||||
| Ticks are stored in files on the filesystem under `/tkr/ticks`. This directory must be writable by the web server user and so SHOULD NOT be served by the web server. If you set your document root to `/tkr/public/`, then you'll be fine. | ||||
| Ticks are stored in files on the filesystem under `/tkr/storage/ticks`. This directory must be writable by the web server user and so SHOULD NOT be served by the web server. If you set your document root to `/tkr/public/`, then you'll be fine. | ||||
| 
 | ||||
| The file structure is `YYYY/MM/DD.txt`. That is, each day's ticks are located in a file whose full path is `/tkr/ticks/YEAR/MONTH/DAY.txt`. This is to prevent any single file from getting too large. | ||||
| The file structure is `YYYY/MM/DD.txt`. That is, each day's ticks are located in a file whose full path is `/tkr/storage/ticks/YEAR/MONTH/DAY.txt`. This is to prevent any single file from getting too large. | ||||
| 
 | ||||
| Each entry takes the form `TIMESTAMP|TICK`, where `TIMESTAMP` is the time that the entry was made and `TICK` is the text of the entry. | ||||
| 
 | ||||
| For illustration, here's a sample from the file `/tkr/ticks/2025/05/25` on my test system. | ||||
| For illustration, here's a sample from the file `/tkr/storage/ticks/2025/05/25` on my test system. | ||||
| 
 | ||||
| ```sh | ||||
| # cat /tkr/ticks/2025/05/25.txt | ||||
| @ -32,39 +107,19 @@ For illustration, here's a sample from the file `/tkr/ticks/2025/05/25` on my te | ||||
| 23:27:45|some more, stuff | ||||
| ``` | ||||
| 
 | ||||
| ## Initial config | ||||
| ### SQLite Database | ||||
| 
 | ||||
| I'll write this up when I improve it. | ||||
| tkr stores profile information, custom emojis, and uploaded css metadata in a SQLite database located at `tkr/storage/db`. | ||||
| 
 | ||||
| ## Sample images | ||||
| 
 | ||||
| Logged out | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| Logged in | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| RSS | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| Single tick | ||||
| 
 | ||||
|  | ||||
| You don't have to do any database setup. The database is automatically created and initialized on first run. | ||||
| 
 | ||||
| ## TODO | ||||
| 
 | ||||
| * An actual setup script | ||||
| * Validate CSRF token on tick submission | ||||
| * Let people set the time zone for ticks | ||||
| * Support basic custom styling | ||||
| * Do that config improvement I implied in the previous section | ||||
| * See if I can get individual ticks to resolve as urls (e.g. /2025/05/26/00/12) rather than doing the query string thing | ||||
| * Clean up the nginx configs | ||||
| * Add an .htaccess example | ||||
| * Maybe h-feed or JSON feed? | ||||
| * Microformat support? | ||||
| * A little more profile info? | ||||
| * Validate HTML semantics on all pages | ||||
| * Validate accessibility on all pages | ||||
| * Add logging, including log viewer screen | ||||
| * Improve exception handling | ||||
| * Support microformats | ||||
| * Support h-feed and JSON | ||||
| * Allow customization of time zone and time display for ticks | ||||
| * Probably a bunch of other stuff I'm not thinking of | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user