# Vargo Myaló Config files and other READMEs for my server, Vargo. Instructions and other stuff are also included to document my experience.

**Trivia:** [Myaló](https://en.wiktionary.org/wiki/%CE%BC%CF%85%CE%B1%CE%BB%CF%8C) is a common way of saying "Brain" in Greek. Due to my fascination towards Greek mythology, everything related to the server has a Greek essence to it. # Contents → [The Story](https://github.com/AalbatrossGuy/VargoDotfiles/blob/main/README.md#the-story)
→ [Pi Pictures](https://github.com/AalbatrossGuy/VargoDotfiles/blob/main/README.md#some-pictures-of-the-pi)
→ [The Configuration](https://github.com/AalbatrossGuy/VargoDotfiles/blob/main/README.md#the-configuration)
→ [Services](https://github.com/AalbatrossGuy/VargoDotfiles/blob/main/README.md#services)
→ [Item Links](https://github.com/AalbatrossGuy/VargoDotfiles/blob/main/README.md#item-links)
# The Story I always wanted to tinker with Raspberry Pis and other Single Board Computers (SBCs). Got an idea to make a server out of it cause why not. After going through various Pi models, I decided to get the Raspberry Pi 5 16GB version. Alibaba gave the cheapest option however the delivery date was too late, around 2-3 months 🥲 I couldn't wait that long, hence, bought it off a third-party website. Other components for the Pi were available in Amazon and were delivered within 2-3 days. I'll attach links at the end if someone wants to have a look at them. P.S. - The Blog site for Vargo is up and can be viewed at [Vargo Blog](https://vargo.vargoseus.com).
Some Pictures Of The Pi
The Configuration ## The Configuration After getting the Pi, I decided on what services to self-host. I didn't want to host any mediaserver because I have lots of subscriptions for watching movies, tv, anime, etc. (don't judge). Eventually, zeroed down to: - NextCloud (for files, images, etc.) - LinkWarden (bookmark manager) - VaultWarden (password manager) - Glance Dashboard (for viewing certain server & self-hosted services metrics) - Stirling PDF (pdf utils) - Mazanoke (image utils) - Portainer (for easier docker container management) - Speedtest Tracker (internet speed test) Note - I'm exposing all my services to the internet via cloudflare tunnel. That enables me to access these services from anywhere in the world.
# Services
NextCloud 2025-10-25_18-48 I would say, setting up nextcloud was the most challenging considering it was my first time doing something like that. Eventually after slogging through the docs, reddit posts and some ChatGPT help, I was able to configure it to my taste. The `docker-compose.yml` file that I'm using for the service: ```yaml services: nextcloud: image: linuxserver/nextcloud:latest container_name: nextcloud environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TIMEZONE} volumes: - /portainer/Files/AppData/Config/Nextcloud/Config:/config - /portainer/Files/AppData/Config/Nextcloud/Data:/data ports: - 5443:443 - 8080:80 restart: unless-stopped depends_on: - nextcloud_db nextcloud_db: image: linuxserver/mariadb:latest container_name: nextcloud_db environment: - PUID=${PUID} - PGID=${PGID} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - TZ=${TZ} - MYSQL_DATABASE=nextcloud_db - MYSQL_USER=nextcloud - MYSQL_PASSWORD=${DATABASE_PASSWORD} volumes: - /portainer/Files/AppData/Config/Nextcloud/DB:/config restart: unless-stopped ``` Rest of the configurations were done from the interface itself so I cannot include them here. The process is quite straightforward, so setting it up according to one’s preferences should not be a problem.
LinkWarden image After combing through the internet for a clean, simple yet elegant looking bookmark/article manager, I eventually found LinkWarden. I didn't configure LinkWarden much, just used the `compose.yml` from their [docs](https://docs.linkwarden.app/self-hosting/installation). That seemed to work right out of the box. I just had to setup `AUTH` by myself. The `docker-compose.yml` file that I"m using for the service: ```yaml services: linkwarden: container_name: linkwarden image: ghcr.io/linkwarden/linkwarden:latest restart: unless-stopped volumes: - /app/linkwarden/data:/data/data environment: - DATABASE_URL= - NEXTAUTH_SECRET= - NEXTAUTH_URL=http://localhost/api/v1/auth ports: - "port" networks: - linkwarden_net linkwarden-db: container_name: linkwarden-db image: postgres:17-alpine restart: unless-stopped environment: - POSTGRES_USER= - POSTGRES_PASSWORD= - POSTGRES_DB= volumes: - /app/linkwarden/pgdata:/var/lib/postgresql/data networks: - linkwarden_net networks: linkwarden_net: driver: bridge ```
VaultWarden 2025-10-25_19-11 Well, I always knew I wanted to host my own password manager because I am super forgetful. While searching the internet for a decent self-hosted password manager, I immediately stumbled upon VaultWarden and BitWarden. After searching around for other options, I figured vaultwarden was the best option. I just used the unmodified `compose.yml` from their github page which was by far the easiest to setup. The `docker-compose.yml` file that I'm using for the service: ```yaml services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: unless-stopped ports: - "8280:80" environment: DOMAIN: "https://your.domain.com" SIGNUPS_ALLOWED: "true" # Change it to "false" after first sign up. WEBSOCKET_ENABLED: "true" ADMIN_TOKEN: "token" volumes: - ./data:/data ```
Glance Dashboard 2025-10-25_19-18 One thing I noticed maximum server owners had was a really beautiful looking dashboard that contained various info for the services they are hosting. I wanted one too but couldn't find anything nice off the internet. After searching for a long time, I found this [YouTube video](https://www.youtube.com/watch?v=9QCdPP9rujc&t=701s) and was instantly hooked on Glance. After spending a whole day in customizing the widgets and other stuff to my liking, I was finally satisfied with the setup shown in the image. I am not going to include the `docker-compose.yml` file for this service in this `README.md` but will give a link to it: [`docker-compose.yml`](https://github.com/AalbatrossGuy/VargoDotfiles/blob/main/glance-docker-compose.yml)
Stirling PDF 2025-10-25_19-28 I have to deal with PDFs more or less everyday due to university and my own work. Decided to self-host a PDF utility service that was feature-rich. Their 50+ PDF tools are more than enough for what I need daily. I used their [docs](https://docs.stirlingpdf.com/Installation/Docker%20Install/) to modify the compose file as needed and added `AUTH` to it so only verified users could use the service. The `docker-compose.yml` file for the service: ```yaml services: stirling-pdf: image: frooodle/s-pdf:latest container_name: stirling-pdf restart: unless-stopped ports: - "8088:8080" environment: - DISABLE_ADDITIONAL_FEATURES=false - SECURITY_ENABLELOGIN=true - SECURITY_LOGINMETHOD=normal - SECURITY_INITIALLOGIN_USERNAME= - SECURITY_INITIALLOGIN_PASSWORD= # Do change this afterwards! - LANGS=en_GB volumes: - ./data:/usr/share/stirling-pdf/config - ./pdfs:/usr/share/stirling-pdf/pdfs ```
Mazanoke 2025-10-25_19-40 I wanted a simple yet useful self-hosted image compression service. Found Mazanoke from a reddit post and was instantly impressed by it's simplicity and beautiful interface. Used the basic `compose.yml` file from their github page and added `AUTH` to it so only verified users could use the service. The `docker-compose.yml` file for the service: ```yaml services: mazanoke: container_name: mazanoke image: ghcr.io/civilblur/mazanoke:latest ports: - "3474:80" ```
Speedtest Tracker 2025-10-25_19-51 I didn't really need to host an internet speedtest tracker but I found this interesting hence I did. It is pretty lightweight too. The tracker seems to work properly and it has a few features that I found really nice. The customization process was tedious but it worked out well in the end. The `docker-compose.yml` file for this service: ```yaml version: "3.8" services: db: image: postgres:17 container_name: speedtest-tracker-db restart: unless-stopped environment: POSTGRES_DB: POSTGRES_USER: POSTGRES_PASSWORD: volumes: - speedtest-db:/var/lib/postgresql/data # healthcheck: # test: ["CMD-SHELL", "pg_isready -U speedtest_tracker -d speedtest_tracker || exit 1"] # interval: 5s # timeout: 5s # retries: 10 speedtest-tracker: image: lscr.io/linuxserver/speedtest-tracker:latest container_name: speedtest-tracker restart: unless-stopped depends_on: db: condition: service_healthy ports: - "8080:80" # Change - "8280:80" # Them environment: PUID: 1000 PGID: 1000 TZ: ${TIMEZONE} APP_KEY: ${SUPER SECRET APP KEY} DB_CONNECTION: pgsql DB_HOST: db DB_PORT: 5432 DB_DATABASE: DB_USERNAME: DB_PASSWORD: SPEEDTEST_SCHEDULE: "0 */2 * * *" # (Cron job) Run a speedtest every 2 hours. SPEEDTEST_ON_START: "true" # Run a test when the container is started. APP_URL: ASSET_URL: DISPLAY_TIMEZONE: ${TIMEZONE} volumes: - /srv/speedtest/config:/config volumes: speedtest-db: ```
Portainer 2025-10-25_19-55 Managing docker containers via the command line is honestly a pain, hence, portainer. Installed portainer by following the instructions in their docs - [Portainer Installation Instructions](https://docs.portainer.io/start/install/server/docker/linux)
Paperless 2025-11-03_19-34 Amongst document management system, paperless ngx shines bright. It was a no-brainer to self-host this too! With it's OCR capabilities and it's search on steroids, it is one of the most feature-rich service in my self-hosted services drawer. The `docker-compose.yml` for paperless is: ```yaml services: paperless: image: ghcr.io/paperless-ngx/paperless-ngx:latest container_name: paperless restart: unless-stopped depends_on: - db - redis ports: - "8080:80" environment: - PUID=1000 - PGID=1000 - TZ=TIMEZONE - PAPERLESS_TIME_ZONE=TIMEZONE - PAPERLESS_DBHOST=DB_HOST - PAPERLESS_DBPORT=DB_PORT - PAPERLESS_DBNAME=DB - PAPERLESS_DBUSER=USER - PAPERLESS_DBPASS=PASSWORD - PAPERLESS_REDIS=redis://redis:5330/0 - PAPERLESS_CONSUMPTION_DIR=PATH # Give the path of the directory you want paperless to watch for files - PAPERLESS_CONSUMPTION_DIR_MONITOR=0 # Paperless polls instead of inotify monitoring - PAPERLESS_CONSUMPTION_DIR_RECURSIVE=1 # Read through nested folders - PAPERLESS_CONSUMER_RECURSIVE=true - PAPERLESS_OCR_MODE=skip # Skip if unable to OCR any document - PAPERLESS_OCR_SKIP_IF_OCR_FAILS=false - PAPERLESS_OCR_RETRY_ON_FAIL=false - PAPERLESS_CONSUMER_ENABLE_IMAGE_CONVERSION=true # Enables image pre-processing - PAPERLESS_CONSUMER_GS_OPTIONS=--continue-on-soft-render-error - PAPERLESS_CONSUME_COPY=true # If set to true, it copies files in the watch dir instead of moving them. - PAPERLESS_ALLOWED_HOSTS=PAPERLESS_URL - PAPERLESS_CSRF_TRUSTED_ORIGINS=PAPERLESS_URL_WITH_HTTPS - PAPERLESS_URL=PAPERLESS_URL - PAPERLESS_CONSUMER_POLLING=1 - PAPERLESS_CONSUMER_POLLING_SECONDS=15 # Check every 15 seconds for new file addition in watch dir - PAPERLESS_WORKER_TIMEOUT=3600 # 1 hour - PAPERLESS_WORKER_SOFT_TIME_LIMIT=3500 # 58 minutes 20 seconds volumes: - /opt/paperless/data:/usr/src/paperless/data - /opt/paperless/media:/usr/src/paperless/media db: image: postgres:16-alpine container_name: paperless-db restart: unless-stopped environment: - POSTGRES_DB=DB - POSTGRES_USER=USER - POSTGRES_PASSWORD=PASSWORD - TZ=TIMEZONE healthcheck: test: ["CMD-SHELL", "pg_isready -U paperless -d paperless || exit 1"] interval: 5s timeout: 5s retries: 20 volumes: - paperless-pg:/var/lib/postgresql/data redis: image: redis:7-alpine container_name: paperless-redis restart: unless-stopped command: ["redis-server","--appendonly","yes"] healthcheck: test: ["CMD","redis-cli","ping"] interval: 5s timeout: 3s retries: 20 volumes: - paperless-redis:/data volumes: paperless-pg: paperless-redis: ``` One thing to be noted is, I've set paperless to watch a specific folder in nextcloud for consumption. Hence, whenever I upload a document in that particular folder, paperless consumes the file and archives it.
ConvertX image With the frequent need for a secure, easy to use file conversion service, I wanted to host mine. With over 1000+ file type conversion support, ConvertX was my choice. It is light-weight, simple and secure. The `docker-compose.yml` for this service: ```yaml # docker-compose.yml services: convertx: image: ghcr.io/c4illin/convertx container_name: convertx restart: unless-stopped ports: - "53400:3000" environment: - TZ=TIMEZONE - ALLOW_UNAUTHENTICATED=false - ACCOUNT_REGISTRATION=false - AUTO_DELETE_EVERY_N_HOURS=24 - HIDE_HISTORY=false - JWT_SECRET=generate_your_own_token # will use randomUUID() if unset # - HTTP_ALLOWED=true # uncomment this if accessing it over a non-https connection volumes: - ./data:/app/data - ./bin/soffice:/usr/local/bin/soffice:ro - ./bin/libreoffice:/usr/local/bin/libreoffice:ro - ./bin/loffice:/usr/local/bin/loffice:ro ```
## Item Links → Rasberry Pi 5 (16GB) - [Amazon](https://www.amazon.com/Raspberry-Pi-SC1113-5-16GB/dp/B0DSPYPKRG)
→ Rasberry Pi M.2 Hat - [Amazon](https://a.co/d/24XtJFv)
→ Rasberry Pi 27W Power Supply - [raspberrypi.com](https://www.raspberrypi.com/products/27w-power-supply/)
→ Rasberry Pi 5 Active Cooler - [Amazon](https://a.co/d/f49ZXOp)
→ Crucial P310 1TB M.2 2230 SSD - [Amazon](https://a.co/d/31NJVJh)