Przeglądaj źródła

Merge branch 'main' of github.com:jamesread/OliveTin

jamesread 5 lat temu
rodzic
commit
8cc405eb8a

+ 1 - 1
OliveTin.proto

@@ -22,7 +22,7 @@ message StartActionResponse {
 	string stdout = 1;
 	string stdout = 1;
 	string stderr = 2;
 	string stderr = 2;
 	bool timedOut = 3;
 	bool timedOut = 3;
-	int64 exitCode = 4;
+	int32 exitCode = 4;
 }
 }
 
 
 service OliveTinApi {
 service OliveTinApi {

+ 9 - 0
OliveTin.service

@@ -0,0 +1,9 @@
+[Unit]
+Description=OliveTin
+
+[Service]
+ExecStart=/usr/sbin/OliveTin
+Restart=always
+
+[Install]
+WantedBy=multi-user.target

+ 60 - 9
README.md

@@ -5,26 +5,77 @@ OliveTin is a web based quick access control panel for running jobs.
 For example, it can be used to turn home automation lights on or off, or start
 For example, it can be used to turn home automation lights on or off, or start
 workflows in n8n.  
 workflows in n8n.  
 
 
-## `config.yaml`
+## Video demo
 
 
-```
-listenAddressRestActions: :1337 # Listen on all addresses available, port 1337
-listenAddressWebUi: :1339
+TODO
+
+## Screenshots
+
+Desktop web browser;
+
+![Desktop screenshot](media/screenshotDesktop.png)
+
+Mobile screen size (responsive layout); 
+
+![Mobile screenshot](media/screenshotMobile.png)
+
+## `config.yaml` example
+
+Put this `config.yaml` in `/etc/OliveTin/` if you're running a standard service, or mount it at `/config` if running in a container.
+
+```yaml
+listenAddressWebUI: 0.0.0.0:1337 # Listen on all addresses available, port 1337
 logLevel: "INFO"
 logLevel: "INFO"
+actions: 
+- title: Restart Plex
+  icon: smile
+  shell: docker restart plex
+  
+  # This will send 1 ping 
+- title: Ping Google.com
+  shell: ping google.com -c 1
+  
+  # Restart lightdm on host "overseer"
+- title: restart lightdm
+  icon: poop
+  shell: ssh root@overseer 'service lightdm restart'
 ```
 ```
 
 
-## Building the container 
+## Ports 
+
+By default OliveTin will use the following ports;
+
+* `1337` - for hosting the web interface
+* `1338` - for the REST API (the api the web interface uses to do stuff)
+* `1339` - a modern gRPC API (OliveTin uses protobuf under the hood) 
+
+Some people might not want the gRPC API public - simply set `listenAddressGrpcActions: 127.0.0.1:1339` in your config so it doesn't listen publicly. It cannot be disabled completely - it's required for the REST API to work though.
+
+## Installation - systemd service (recommended)
+
+Running OliveTin as a systemd service on a Linux machine is a bit more effort than running as a container - but it means it can use any program installed on your machine (you don't have to add programs to a container). 
+
+1. Copy the `OliveTin` binary to `/usr/sbin/OliveTin`
+2. Copy the `webui` directory contents to `/var/www/olivetin/` (eg, `/var/www/olivetin/index.html`)
+3. Copy the `OliveTin.service` file to `/etc/systemd/system/`
+4. Create a `config.yaml` using the example provided above to get you started.
+
+Run `systemctl restart OliveTin` and check `systemctl status OliveTin`.
+
+## Installation - as a container 
+
+Of course, running a container image is very straightforward - but you might need to add files and programs to the OliveTin container to make it useful for your use case. Generally running a systemd service is better for OliveTin. 
 
 
-### Podman/Docker
+### Running - `podman` (or `docker`)
 
 
 ```
 ```
-podman create --name olivetin -p 1337 -p 1338 -p 1339 -v /etc/olivetin/:/config:ro olivetin
+root@host: podman create --name olivetin -p 1337 -p 1338 -p 1339 -v /etc/olivetin/:/config:ro olivetin
 
 
 ```
 ```
 
 
-### Buildah/Docker
+### Building - `buildah` (or `docker build`)
 
 
 ```
 ```
-buildah bud -t olivetin
+root@host: buildah bud -t olivetin
 ```
 ```
 
 

+ 1 - 1
internal/executor/executor.go

@@ -37,7 +37,7 @@ func ExecAction(cfg *config.Config, action string) *pb.StartActionResponse {
 	cmd := exec.CommandContext(ctx, "sh", "-c", actualAction.Shell)
 	cmd := exec.CommandContext(ctx, "sh", "-c", actualAction.Shell)
 	stdout, stderr := cmd.Output()
 	stdout, stderr := cmd.Output()
 
 
-	res.ExitCode = int64(cmd.ProcessState.ExitCode())
+	res.ExitCode = int32(cmd.ProcessState.ExitCode())
 	res.Stdout = string(stdout)
 	res.Stdout = string(stdout)
 
 
 	if stderr == nil {
 	if stderr == nil {

BIN
media/screenshotDesktop.png


BIN
media/screenshotDesktopDark.png


BIN
media/screenshotMobile.png