| 
									
										
										
										
											2023-07-23 17:26:46 +03:00
										 |  |  | # proxmox-utils (EXPERIMENTAL)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A set of scripts for automating setup and tasks in proxmox. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-04 01:47:12 +03:00
										 |  |  | ## TODO
 | 
					
						
							| 
									
										
										
										
											2024-01-04 02:52:44 +03:00
										 |  |  | - revise defaults | 
					
						
							| 
									
										
										
										
											2024-01-11 02:41:00 +03:00
										 |  |  | - separate templates/assets into distribution and user directories | 
					
						
							|  |  |  |   ...this is needed to allow the user to change the configs without the  | 
					
						
							|  |  |  |   fear of them being overwritten by git (similar to how config is handlerd) | 
					
						
							| 
									
										
										
										
											2024-02-22 23:35:33 +03:00
										 |  |  | - might be a good idea to export a specific ct script that can be used  | 
					
						
							|  |  |  |   for updates for that ct | 
					
						
							| 
									
										
										
										
											2024-03-28 12:46:24 +03:00
										 |  |  | - which is better? | 
					
						
							|  |  |  |   - Makefile (a-la wireguard) | 
					
						
							|  |  |  |   - shell (a-la shadow) | 
					
						
							| 
									
										
										
										
											2024-02-22 23:35:33 +03:00
										 |  |  | - ct updates | 
					
						
							| 
									
										
										
										
											2024-01-21 03:54:16 +03:00
										 |  |  | - backup/restore | 
					
						
							|  |  |  | - mail | 
					
						
							| 
									
										
										
										
											2023-07-23 17:26:46 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-19 22:33:14 +03:00
										 |  |  | ## Motivation
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-20 23:11:40 +03:00
										 |  |  | This was simply faster to implement than learning and writing the same  | 
					
						
							|  |  |  | functionality in Ansible. | 
					
						
							| 
									
										
										
										
											2024-02-19 22:33:14 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-20 23:11:40 +03:00
										 |  |  | _NOTE: for a fair assessment of viability of further development an  | 
					
						
							|  |  |  | Ansible version will be implemented next as a direct comparison._ | 
					
						
							| 
									
										
										
										
											2024-02-19 22:33:14 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-14 17:40:13 +03:00
										 |  |  | ## Architecture
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-24 18:21:53 +03:00
										 |  |  | Goals: | 
					
						
							|  |  |  | - Separate concerns   | 
					
						
							|  |  |  |   Preferably one service/role per CT | 
					
						
							|  |  |  | - Keep things as light as possible   | 
					
						
							|  |  |  |   This for the most part rules out Docker as a nested virtualization | 
					
						
							|  |  |  |   layer under Proxmox while preferring light distributions like Alpine | 
					
						
							|  |  |  |   Linux | 
					
						
							|  |  |  | - Pragmatic simplicity   | 
					
						
							|  |  |  |   This goal yields some compromises to previous goals, for example [TKL]() | 
					
						
							|  |  |  |   is used as a base for [Nextcloud]() effectively simplifying the setup  | 
					
						
							|  |  |  |   and administration of all the related components at the cost of a  | 
					
						
							|  |  |  |   heavier CT transparently integrating multiple related services | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:18:52 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | ### Network
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | ``` | 
					
						
							|  |  |  |     Internet                                              Admin  | 
					
						
							|  |  |  |        v                                                    v | 
					
						
							|  |  |  |   +----|----------------------------------------------------|-----+   | 
					
						
							|  |  |  |   |    |                                                    |     |   | 
					
						
							|  |  |  |   |  (wan)                                (lan)          (admin)  |   | 
					
						
							|  |  |  |   |    |                                    |               |     |   | 
					
						
							|  |  |  |   |    |                                    |         pve --+     |   | 
					
						
							|  |  |  |   |    |                                    |               |     |   | 
					
						
							|  |  |  |   |    |                   +--------------------------------+     |   | 
					
						
							|  |  |  |   |    |                  /                 |               |     |   | 
					
						
							|  |  |  |   |    +--($WAN_SSH_IP)- ssh ---------------+               |     |   | 
					
						
							|  |  |  |   |    |                  ^                 |               |     |   | 
					
						
							| 
									
										
										
										
											2024-10-19 23:20:14 +03:00
										 |  |  |   |    |              (ssh:23)              |               |     |   | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  |   |    |                  .                 |               |     |   | 
					
						
							|  |  |  |   |    |                  . +------------------------(nat)--+     |   | 
					
						
							|  |  |  |   |    |                  ./                |               |     |   | 
					
						
							|  |  |  |   |    +------($WAN_IP)- gate ------(nat)---+               |     |   | 
					
						
							|  |  |  |   |                       .                 |               |     |   | 
					
						
							|  |  |  |   |                       .                 +-- ns ---------+     |   | 
					
						
							|  |  |  |   |                       .                 |               |     |   | 
					
						
							|  |  |  |   |                       + - (udp:51820)-> +-- wireguard   |     |   | 
					
						
							|  |  |  |   |                       .                 |               |     |   | 
					
						
							|  |  |  |   |                       + - (ssh/https)-> +-- gitea       |     |   | 
					
						
							|  |  |  |   |                       .                 |               |     |   | 
					
						
							|  |  |  |   |                       + - - - (https)-> +-- nextcloud   |     |   | 
					
						
							|  |  |  |   |                                         |               |     |   | 
					
						
							|  |  |  |   |                                         +-- syncthing --+     |   | 
					
						
							|  |  |  |   |                                                               |   | 
					
						
							|  |  |  |   +---------------------------------------------------------------+   | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2024-01-14 17:40:13 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:18:52 +03:00
										 |  |  | XXX | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Services
 | 
					
						
							| 
									
										
										
										
											2024-01-14 17:40:13 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:18:52 +03:00
										 |  |  | XXX | 
					
						
							| 
									
										
										
										
											2024-01-14 17:40:13 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | ## Setup
 | 
					
						
							| 
									
										
										
										
											2024-01-14 17:40:13 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | ### Prerequisites
 | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | Install Proxmox and connect it to your network. | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | ### Semi-automated setup
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Download the [`bootstrap.sh`](./scripts/bootstrap.sh) script and execute it: | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | ```shell | 
					
						
							| 
									
										
										
										
											2024-10-19 20:27:39 +03:00
										 |  |  | curl 'https://raw.githubusercontent.com/flynx/proxmox-utils/refs/heads/master/scripts/bootstrap.sh' | sudo bash | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | This will: | 
					
						
							|  |  |  | - Install basic dependencies | 
					
						
							|  |  |  | - Clone this repo | 
					
						
							|  |  |  | - Run `make bootstrap` on the repo | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | After the basic setup is done connect the device to the network via the  | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | selcted WAN port and **disconnect** the ADMIN port. | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | The WAN interface exposes two IPs: | 
					
						
							| 
									
										
										
										
											2024-10-19 23:20:14 +03:00
										 |  |  | - Main server (config: `$DFL_WAN_IP` / `$WAN_IP`) | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  |   - ssh:23 | 
					
						
							|  |  |  |   - wireguard:51820 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:20:14 +03:00
										 |  |  | - Fail-safe ssh (config: `$DFL_WAN_SSH_IP` / `$WAN_SSH_IP`) | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  |   - ssh:22 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | The Proxmox administrative interface is available behind the Wireguard  | 
					
						
							|  |  |  | proxy or on the ADMIN port, both on https://10.0.0.254:8006. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 22:16:22 +03:00
										 |  |  | To finalize the setup run: | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make finalize | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This will | 
					
						
							|  |  |  | - detach the host from any external ports and make it accessible only  | 
					
						
							|  |  |  |   from the internal network.   | 
					
						
							|  |  |  |   See: [Architecture](#architecture) and [Bootstrapping](#bootstrapping) | 
					
						
							|  |  |  | - setup firewall rules.   | 
					
						
							|  |  |  |   Note that the firewall will not be enabled, this should be done manually | 
					
						
							|  |  |  |   after rule review. | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | *Note that the ADMIN port is configured for direct connections only (DHCP),  | 
					
						
							|  |  |  | connecting it to a configured network can lead to unexpected behavior.* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Accessing the host
 | 
					
						
							| 
									
										
										
										
											2024-10-19 22:16:22 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | XXX | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | #### Setup additional services
 | 
					
						
							| 
									
										
										
										
											2024-10-19 22:16:22 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | XXX | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make all | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make dev | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Or individually: | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make nextcloud | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make syncthing | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make gitea | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | #### Setup and configure custom services
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 22:16:22 +03:00
										 |  |  | XXX traefik rules | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | ### Manual setup
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | #### Bootstrapping
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | Since all the internal traffic is routed through the `gate` we need both  | 
					
						
							|  |  |  | the bridges and it setup for things to work, thus we first bootstrap the | 
					
						
							|  |  |  | bridges, create the basic infrastructure and then finalize the setup. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Bootsrapping is done in three stages: | 
					
						
							|  |  |  | 1. Bootstrap:  | 
					
						
							|  |  |  |   ```shell | 
					
						
							|  |  |  |   make bootstrap | 
					
						
							|  |  |  |   ``` | 
					
						
							|  |  |  |   - Create the needed bridges | 
					
						
							|  |  |  |   - Create the infrastructure CT's (`gate`, `ns`, `ssh`, ...) | 
					
						
							|  |  |  | 2. Cleanup:  | 
					
						
							|  |  |  |   ```shell | 
					
						
							|  |  |  |   make bootstrap-clean | 
					
						
							|  |  |  |   ``` | 
					
						
							|  |  |  |   - Route the `host` through the `gate` | 
					
						
							|  |  |  | 3. Finalize:  | 
					
						
							|  |  |  |   ```shell | 
					
						
							|  |  |  |   make finalise | 
					
						
							|  |  |  |   ``` | 
					
						
							|  |  |  |   - disconnect the `host` from the non-ADMIN networks | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | After the final stage two physical ports will be active, the ADMIN port  | 
					
						
							|  |  |  | and the WAN port, the former is by default the same port set by Proxmox  | 
					
						
							|  |  |  | setup, the WAN port is the port selected during the stup stage. All the  | 
					
						
							|  |  |  | services will be listening on the WAN port while the admin port is used  | 
					
						
							|  |  |  | only for administration and recovory cases. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | #### Network Bridges
 | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | `proxmox-utils` expects there to be at least three bridges: | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | - `WAN` (`vmbr_wan`) - connected to the port that faces the external  | 
					
						
							|  |  |  |   network (either directly of via a router) | 
					
						
							|  |  |  | - `LAN` (`vmbr_lan`) - a virtual bridge, not connected to any physical  | 
					
						
							|  |  |  |   interfaces | 
					
						
							|  |  |  | - `ADMIN` (`vmbr_admin`) - connected to a second physical interface used  | 
					
						
							|  |  |  |   for administrative purposes. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Created via: | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make host-bootstrap | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | Updated by: | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make host-bootstrap-clean | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | and: | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make finalize | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | If the device has more that two ports it is recommended to assign  | 
					
						
							| 
									
										
										
										
											2024-01-17 15:12:04 +03:00
										 |  |  | first/last ports to wan/admin respectively and clearly mark them as such. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | #### DNS
 | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | Add `10.1.1.1` to the DNS on the Proxmox host node after the `127.0.0.1` | 
					
						
							|  |  |  | but before whatever external DNS you are using. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | Donw via: | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make host | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | or: | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make host-bootstrap | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 23:17:24 +03:00
										 |  |  | #### Firewall
 | 
					
						
							| 
									
										
										
										
											2024-01-14 17:40:13 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | Make sure to allow at least `ssh` access to the host node from the `ADMIN`  | 
					
						
							|  |  |  | interface to allow admin CT's access to the host if needed, this is mostly | 
					
						
							|  |  |  | needed to allow VPN/ssh administration from outside. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | Donw via: | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make host | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | or: | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | make host-bootstrap | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-14 17:40:13 +03:00
										 |  |  | For Proxmox firewall configuration see: | 
					
						
							|  |  |  | https://pve.proxmox.com/wiki/Firewall | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-17 15:12:04 +03:00
										 |  |  | ### Recovery strategies
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-20 23:11:40 +03:00
										 |  |  | XXX ns/gate are separate nodes for redundancy | 
					
						
							| 
									
										
										
										
											2024-01-17 15:12:04 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-20 23:11:40 +03:00
										 |  |  | XXX ssh facing lan to avoid a single point of failure with gate | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-21 23:55:56 +03:00
										 |  |  | XXX emergency access points: ssh and wireguard | 
					
						
							| 
									
										
										
										
											2024-01-17 15:12:04 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-19 20:05:30 +03:00
										 |  |  | ## Misc
 | 
					
						
							| 
									
										
										
										
											2024-02-07 08:55:16 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | Install CT's: | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | ```shell | 
					
						
							|  |  |  | sudo make all | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-08 15:31:22 +03:00
										 |  |  | Install gitea (optional): | 
					
						
							|  |  |  | ```shell | 
					
						
							|  |  |  | sudo make dev | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-20 19:00:22 +03:00
										 |  |  | ## Post-setup
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | XXX test conections | 
					
						
							|  |  |  | XXX change proxmox ip/network | 
					
						
							| 
									
										
										
										
											2024-02-11 23:42:21 +03:00
										 |  |  | XXX firewall | 
					
						
							| 
									
										
										
										
											2024-01-20 19:00:22 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-13 00:04:09 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-15 22:43:34 +03:00
										 |  |  | ## Extending
 | 
					
						
							| 
									
										
										
										
											2023-07-23 17:26:46 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-15 22:43:34 +03:00
										 |  |  | ### Directory structure
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | / | 
					
						
							|  |  |  | +- <ct-type>/ | 
					
						
							|  |  |  | |   +- templates/ | 
					
						
							|  |  |  | |   +- assets/ | 
					
						
							|  |  |  | |   +- staging/ | 
					
						
							|  |  |  | |   +- make.sh | 
					
						
							|  |  |  | |   +- config | 
					
						
							|  |  |  | |   +- config.last-run | 
					
						
							|  |  |  | +- ... | 
					
						
							|  |  |  | +- Makefile | 
					
						
							|  |  |  | +- config.global | 
					
						
							|  |  |  | +- config.global.example | 
					
						
							|  |  |  | ``` |