Moved repositories and databases to local directory
This commit is contained in:
@@ -17,3 +17,7 @@ REQUIRE_SIGNIN_VIEW=false
|
|||||||
# Linux host UID/GID for the rootless image. Keep the defaults on Windows/macOS.
|
# Linux host UID/GID for the rootless image. Keep the defaults on Windows/macOS.
|
||||||
USER_UID=1000
|
USER_UID=1000
|
||||||
USER_GID=1000
|
USER_GID=1000
|
||||||
|
|
||||||
|
# Only needed when migration cannot uniquely find the older named volumes.
|
||||||
|
# LEGACY_GITEA_VOLUME=git-docker-server_gitea_data
|
||||||
|
# LEGACY_POSTGRES_VOLUME=git-docker-server_postgres_data
|
||||||
|
|||||||
@@ -15,6 +15,26 @@ docker compose up -d
|
|||||||
4. Open [http://localhost:3000](http://localhost:3000).
|
4. Open [http://localhost:3000](http://localhost:3000).
|
||||||
5. Create the first account. The first account becomes an administrator.
|
5. Create the first account. The first account becomes an administrator.
|
||||||
|
|
||||||
|
The `init-permissions` service runs once at startup to prepare the `docker/` data directories for Gitea and PostgreSQL. It will also correct ownership after restoring data from a backup.
|
||||||
|
|
||||||
|
## Migrate Existing Data
|
||||||
|
|
||||||
|
If you updated from the previous setup that used Docker named volumes, migrate your existing repositories and database before starting the updated stack:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sh ./migrate-to-bind-mounts.sh
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
This works on Linux, TrueNAS, and macOS because it uses POSIX shell and Docker. The script discovers the old Gitea and PostgreSQL volumes from their Docker Compose labels, stops the stack, then copies them into `docker/gitea` and `docker/postgres`. It refuses to overwrite non-empty destination directories. On Windows, run it from WSL or Git Bash.
|
||||||
|
|
||||||
|
If multiple old stacks exist on the same Docker host, identify the correct volume names with `docker volume ls`, then set `LEGACY_GITEA_VOLUME` and `LEGACY_POSTGRES_VOLUME` before running the migration:
|
||||||
|
|
||||||
|
```dotenv
|
||||||
|
LEGACY_GITEA_VOLUME=your-project_gitea_data
|
||||||
|
LEGACY_POSTGRES_VOLUME=your-project_postgres_data
|
||||||
|
```
|
||||||
|
|
||||||
The Git SSH endpoint is available on port `2222`:
|
The Git SSH endpoint is available on port `2222`:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
|
|||||||
@@ -1,8 +1,28 @@
|
|||||||
services:
|
services:
|
||||||
|
init-permissions:
|
||||||
|
image: alpine:3.21
|
||||||
|
container_name: git-server-init-permissions
|
||||||
|
restart: "no"
|
||||||
|
environment:
|
||||||
|
USER_UID: ${USER_UID:-1000}
|
||||||
|
USER_GID: ${USER_GID:-1000}
|
||||||
|
volumes:
|
||||||
|
- ./docker/gitea:/gitea
|
||||||
|
- ./docker/postgres:/postgres
|
||||||
|
command:
|
||||||
|
- /bin/sh
|
||||||
|
- -ec
|
||||||
|
- |
|
||||||
|
chown -R "$${USER_UID}:$${USER_GID}" /gitea
|
||||||
|
chown -R 70:70 /postgres
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: postgres:16-alpine
|
image: postgres:16-alpine
|
||||||
container_name: git-server-db
|
container_name: git-server-db
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
init-permissions:
|
||||||
|
condition: service_completed_successfully
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: ${POSTGRES_USER:-gitea}
|
POSTGRES_USER: ${POSTGRES_USER:-gitea}
|
||||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-change-me-in-env}
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-change-me-in-env}
|
||||||
@@ -22,6 +42,8 @@ services:
|
|||||||
container_name: git-server
|
container_name: git-server
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
|
init-permissions:
|
||||||
|
condition: service_completed_successfully
|
||||||
db:
|
db:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
project_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||||
|
|
||||||
|
find_legacy_volume() {
|
||||||
|
volume_label=$1
|
||||||
|
paired_label=$2
|
||||||
|
volumes=$(docker volume ls -q --filter "label=com.docker.compose.volume=$volume_label")
|
||||||
|
|
||||||
|
if [ -z "$volumes" ]; then
|
||||||
|
echo "No legacy '$volume_label' Docker volume was found." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
matching_volumes=''
|
||||||
|
for volume in $volumes; do
|
||||||
|
project=$(docker volume inspect --format '{{ index .Labels "com.docker.compose.project" }}' "$volume")
|
||||||
|
paired_volume=$(docker volume ls -q \
|
||||||
|
--filter "label=com.docker.compose.project=$project" \
|
||||||
|
--filter "label=com.docker.compose.volume=$paired_label")
|
||||||
|
if [ -n "$paired_volume" ]; then
|
||||||
|
matching_volumes="$matching_volumes $volume"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
set -- $matching_volumes
|
||||||
|
if [ "$#" -ne 1 ]; then
|
||||||
|
echo "Could not identify one '$volume_label' volume paired with the legacy '$paired_label' volume." >&2
|
||||||
|
echo "Set LEGACY_GITEA_VOLUME and LEGACY_POSTGRES_VOLUME explicitly and rerun." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%s\n' "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
gitea_volume=${LEGACY_GITEA_VOLUME:-$(find_legacy_volume gitea_data postgres_data)}
|
||||||
|
postgres_volume=${LEGACY_POSTGRES_VOLUME:-$(find_legacy_volume postgres_data gitea_data)}
|
||||||
|
|
||||||
|
for destination in "$project_dir/docker/gitea" "$project_dir/docker/postgres"; do
|
||||||
|
mkdir -p "$destination"
|
||||||
|
if [ -n "$(find "$destination" -mindepth 1 -print -quit)" ]; then
|
||||||
|
echo "Migration destination '$destination' is not empty; refusing to overwrite data." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
docker run --rm \
|
||||||
|
--volume "$gitea_volume:/source/gitea:ro" \
|
||||||
|
--volume "$postgres_volume:/source/postgres:ro" \
|
||||||
|
--volume "$project_dir/docker:/destination" \
|
||||||
|
alpine:3.21 sh -ec '
|
||||||
|
cp -a /source/gitea/. /destination/gitea/
|
||||||
|
cp -a /source/postgres/. /destination/postgres/
|
||||||
|
'
|
||||||
|
|
||||||
|
echo "Migration complete. Start the server with: docker compose up -d"
|
||||||
Reference in New Issue
Block a user