summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Dockerfile7
-rw-r--r--docs/configuration/index.md16
-rw-r--r--docs/getting_started/installation/container.md26
-rw-r--r--example/docker-compose/docker-compose.yaml16
-rw-r--r--example/gotosocial.service9
5 files changed, 71 insertions, 3 deletions
diff --git a/Dockerfile b/Dockerfile
index 9ca0b2a28..df4fc56da 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -39,9 +39,10 @@ USER 1000:1000
#
# See https://docs.docker.com/engine/reference/builder/#workdir
#
-# First make sure storage exists + is owned by 1000:1000, then go back
-# to just /gotosocial, where we'll run from
+# First make sure storage + cache exist and are owned by 1000:1000,
+# then go back to just /gotosocial, where we'll actually run from.
WORKDIR "/gotosocial/storage"
+WORKDIR "/gotosocial/.cache"
WORKDIR "/gotosocial"
# copy the dist binary created by goreleaser or build.sh
@@ -51,5 +52,5 @@ COPY --chown=1000:1000 gotosocial /gotosocial/gotosocial
COPY --chown=1000:1000 --from=bundler web /gotosocial/web
COPY --chown=1000:1000 --from=swagger /go/src/github.com/superseriousbusiness/gotosocial/swagger.yaml web/assets/swagger.yaml
-VOLUME [ "/gotosocial/storage" ]
+VOLUME [ "/gotosocial/storage", "/gotosocial/.cache" ]
ENTRYPOINT [ "/gotosocial/gotosocial", "server", "start" ]
diff --git a/docs/configuration/index.md b/docs/configuration/index.md
index e869f6471..211ccfaea 100644
--- a/docs/configuration/index.md
+++ b/docs/configuration/index.md
@@ -126,3 +126,19 @@ This means in cases where you want to just try changing one thing, but don't wan
Reasonable default values are provided for *most* of the configuration parameters, except in cases where a custom value is absolutely required.
See the [example config file](https://github.com/superseriousbusiness/gotosocial/blob/main/example/config.yaml) for the default values, or run `gotosocial --help`.
+
+## `GTS_WAZERO_COMPILATION_CACHE`
+
+On startup, GoToSocial compiles embedded WebAssembly `ffmpeg` and `ffprobe` binaries into [Wazero](https://wazero.io/)-compatible modules, which are used for media processing without requiring any external dependencies.
+
+To speed up startup time of GoToSocial, you can cache the compiled modules between restarts so that GoToSocial doesn't have to compile them on every startup from scratch.
+
+You can instruct GoToSocial on where to store the Wazero artifacts by setting the environment variable `GTS_WAZERO_COMPILATION_CACHE` to a directory, which will be used by GtS to store two smallish artifacts of ~50MiB or so each (~100MiB total).
+
+For an example of this in action, see the [docker-compose.yaml](https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/example/docker-compose/docker-compose.yaml), and the [gotosocial.service](https://raw.githubusercontent.com/superseriousbusiness/gotosocial/main/example/gotosocial.service) example files.
+
+If you want to provide this value to GtS outside of systemd or Docker, you can do so in the following manner when starting up your GtS server:
+
+```bash
+GTS_WAZERO_COMPILATION_CACHE=~/gotosocial/.cache ./gotosocial --config-path ./config.yaml server start
+```
diff --git a/docs/getting_started/installation/container.md b/docs/getting_started/installation/container.md
index ff98c4105..58b5a810a 100644
--- a/docs/getting_started/installation/container.md
+++ b/docs/getting_started/installation/container.md
@@ -91,6 +91,32 @@ If you want to use [LetsEncrypt](../../configuration/tls.md) for TLS certificate
For help translating variable names from the config.yaml file to environment variables, refer to the [configuration section](../../configuration/index.md#environment-variables).
+### Wazero Compilation Cache (optional)
+
+On startup, GoToSocial compiles embedded WebAssembly `ffmpeg` and `ffprobe` binaries into [Wazero](https://wazero.io/)-compatible modules, which are used for media processing without requiring any external dependencies.
+
+To speed up startup time of GoToSocial, you can cache the compiled modules between restarts so that GoToSocial doesn't have to compile them on every startup from scratch.
+
+If you'd like to do this in your Docker container, first create a `.cache` directory in your working folder to store the modules:
+
+```bash
+mkdir -p ~/gotosocial/.cache
+```
+
+Then, uncomment the second volume in the docker-compose.yaml file by removing the leading `#` symbol, so that instead of
+
+```yaml
+#- ~/gotosocial/.cache:/gotosocial/.cache
+```
+
+it reads
+
+```yaml
+- ~/gotosocial/.cache:/gotosocial/.cache
+```
+
+This will instruct Docker to mount the `~/gotosocial/.cache` directory at `/gotosocial/.cache` inside the Docker container.
+
## Start GoToSocial
With those small changes out of the way, you can now start GoToSocial with the following command:
diff --git a/example/docker-compose/docker-compose.yaml b/example/docker-compose/docker-compose.yaml
index fc80348b2..05896d724 100644
--- a/example/docker-compose/docker-compose.yaml
+++ b/example/docker-compose/docker-compose.yaml
@@ -8,11 +8,21 @@ services:
networks:
- gotosocial
environment:
+ # Change this to your actual host value.
GTS_HOST: example.org
GTS_DB_TYPE: sqlite
+ # Path in the GtS Docker container where
+ # the sqlite.db file will be stored.
GTS_DB_ADDRESS: /gotosocial/storage/sqlite.db
+ # Change this to true if you're not running
+ # GoToSocial behind a reverse proxy.
GTS_LETSENCRYPT_ENABLED: "false"
+ # Set your email address here if you
+ # want to receive letsencrypt notices.
GTS_LETSENCRYPT_EMAIL_ADDRESS: ""
+ # Path in the GtS Docker container where the
+ # Wazero compilation cache will be stored.
+ GTS_WAZERO_COMPILATION_CACHE: /gotosocial/.cache
## For reverse proxy setups:
# GTS_TRUSTED_PROXIES: "172.x.x.x"
## Set the timezone of your server:
@@ -24,7 +34,13 @@ services:
## For reverse proxy setups:
#- "127.0.0.1:8080:8080"
volumes:
+ # Your data volume, for your
+ # sqlite.db file and media files.
- ~/gotosocial/data:/gotosocial/storage
+ # OPTIONAL: To mount volume for the WAZERO
+ # compilation cache, for speedier restart
+ # times, uncomment the below line:
+ #- ~/gotosocial/.cache:/gotosocial/.cache
restart: "always"
networks:
diff --git a/example/gotosocial.service b/example/gotosocial.service
index 37a66c66e..b59f6b5a6 100644
--- a/example/gotosocial.service
+++ b/example/gotosocial.service
@@ -13,6 +13,15 @@ Group=gotosocial
Type=exec
Restart=on-failure
+# For speedier restart times, you can uncomment the following Environment line to have GoToSocial cache compiled
+# Wazero artifacts in the given directory between restarts, so that it doesn't need to compile on startup every time.
+#
+# You may need to change the exact path depending on where you've got GoToSocial installed, for example if you've
+# installed at "~/gotosocial" then change the value to "GTS_WAZERO_COMPILATION_CACHE=~/gotosocial/.cache".
+#
+# Whatever you do, make sure the dir exists and that the gotosocial user has permission to write + read from it.
+#Environment="GTS_WAZERO_COMPILATION_CACHE=/gotosocial/.cache"
+
# change if your path to the GoToSocial binary is different
ExecStart=/gotosocial/gotosocial --config-path config.yaml server start
WorkingDirectory=/gotosocial