migrate
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
---
|
||||
tags:
|
||||
- GIT
|
||||
- CI/CD
|
||||
- CI-CD
|
||||
---
|
||||
In a homelab, your production server usually has unique storage mounts (like `/mnt/user/appdata/nginx` or `/mnt/SSD/data`), but your Gitea runner is isolated and lacks access to those specific paths. If you try to run a verification command like `docker compose config` inside the runner, it will often fail or generate unwanted folders.
|
||||
|
||||
Here are the two cleanest ways to solve this:
|
||||
|
||||
Solution 1: Use Environment Variables for Paths (Recommended)
|
||||
|
||||
Instead of hardcoding absolute paths into your `docker-compose.yml`, replace them with environment variables.
|
||||
|
||||
Update your `docker-compose.yml` to use a variable:
|
||||
services:
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
volumes:
|
||||
# Use a variable with a safe local fallback directory for testing
|
||||
- ${DATA_PATH_NGINX:-./nginx_test_data}:/etc/nginx
|
||||
|
||||
**Map the variables differently in your workflow steps:**
|
||||
When **validating** on the runner, let it fall back to the safe relative directory. When **deploying** to production, explicitly inject your real server paths.
|
||||
|
||||
# Step A: Validate (Uses the relative path fallback automatically)
|
||||
- name: Verify Compose File Validity
|
||||
run: docker compose config
|
||||
|
||||
# Step B: Deploy (Injects your actual live server paths)
|
||||
- name: Deploy Containers to Live Server
|
||||
env:
|
||||
DATA_PATH_NGINX: "/mnt/user/appdata/nginx" # Real production path
|
||||
run: |
|
||||
docker context use homelab-target
|
||||
docker compose --project-directory . up -d --remove-orphans
|
||||
|
||||
Solution 2: Store Production Paths in Gitea Secrets
|
||||
|
||||
If you want to keep your specific homelab storage architecture hidden from your Git repository code entirely, you can save the base storage directory directly as a Gitea Secret (e.g., `BASE_DATA_PATH = /mnt/user/appdata`).
|
||||
|
||||
1. **Reference the secret variable in your `docker-compose.yml`:**
|
||||
|
||||
services:
|
||||
plex:
|
||||
image: plexinc/pms
|
||||
volumes:
|
||||
- ${BASE_DATA_PATH}/plex:/config
|
||||
|
||||
Provide a dummy path during validation, and the real secret during deployment:
|
||||
|
||||
- name: Verify Compose File Validity
|
||||
env:
|
||||
BASE_DATA_PATH: "./test_env" # Dummy folder for the runner
|
||||
run: docker compose config
|
||||
|
||||
- name: Deploy Containers to Live Server
|
||||
env:
|
||||
BASE_DATA_PATH: ${{ secrets.BASE_DATA_PATH }} # Real server path
|
||||
run: |
|
||||
docker context use homelab-target
|
||||
docker compose --project-directory . up -d --remove-orphans
|
||||
💡 Putting It Together
|
||||
|
||||
By combining these two methods, your workflow will safely parse your configuration using fake/relative folders on the runner service, seamlessly deploy using your live production hard drive arrays over SSH, and instantly ping your phone via Discord or Telegram with the results.
|
||||
Reference in New Issue
Block a user