This commit is contained in:
2026-03-07 06:08:22 +00:00
parent f9b82cd594
commit edf6a88a60

View File

@@ -44,7 +44,7 @@ Add services from the dashboard (e.g. `https://example.com`, `google.com:443` fo
The pipeline: The pipeline:
1. **Builds** a Docker image 1. **Builds** a Docker image
2. **Pushes** the image to a container registry (Docker Hub, etc.) 2. **Pushes** the image to a container registry (Gitea, Docker Hub, etc.)
3. **SSHs** to a deployment machine 3. **SSHs** to a deployment machine
4. **Clones** (or pulls) this repo to get `docker-compose.yml` 4. **Clones** (or pulls) this repo to get `docker-compose.yml`
5. **Deploys** with `docker compose up -d` 5. **Deploys** with `docker compose up -d`
@@ -53,46 +53,65 @@ The pipeline:
**Jenkins** **Jenkins**
- Docker installed and Jenkins user in `docker` group - Docker installed and Jenkins agent in `docker` group
- Pipeline and SSH Agent plugins - **Pipeline** and **SSH Agent** plugins
- Git for cloning - Git for cloning
**Jenkins Credentials**
| ID | Type | Purpose |
|----|------|---------|
| `docker-registry-credentials` | Username/Password | Docker Hub or registry login |
| `deploy-ssh-key` | SSH Username with private key | SSH to deploy host |
**Deploy Host** **Deploy Host**
- Docker and Docker Compose installed - Docker and Docker Compose installed
- SSH access for the deploy user - SSH access for the deploy user
- If using a private registry: run `docker login` on the deploy host - If using a private registry: run `docker login` on the deploy host
### Configuration ### Adapting the Jenkinsfile for Your Own Repo
Edit the `environment` block in `Jenkinsfile`: Edit the `environment` block in `Jenkinsfile` for your setup:
```groovy | Variable | Description | Example |
environment { |----------|-------------|---------|
DOCKER_REGISTRY = 'docker.io' | `DOCKER_REGISTRY` | Registry hostname (no `https://`) | `git.wrigglyt.xyz` or `docker.io` |
DOCKER_IMAGE = 'myorg/myapp' | `DOCKER_IMAGE` | Image path (org/repo) | `ryanv/myapp` |
DEPLOY_HOST = 'deploy-server.example.com' | `DEPLOY_HOST` | Deploy server hostname or IP | `10.0.11.3` |
DEPLOY_USER = 'deploy' | `DEPLOY_USER` | SSH user on deploy host | `ryanv` |
DEPLOY_PATH = '/opt/myapp' | `DEPLOY_PATH` | Path on deploy host for this app | `/opt/myapp` |
GIT_REPO_URL = 'https://github.com/myorg/jenkins-docker-deploy-example.git' | `GIT_REPO_URL` | Git repo URL (for deploy host to clone) | `https://git.wrigglyt.xyz/ryanv/myapp.git` |
}
``` **Credential IDs** Update these in the Jenkinsfile if you use different IDs:
| Credential ID | Type | Who sets it up |
|---------------|------|----------------|
| `gitea_credentials` | Username/Password | **Each user** your Gitea login for pushing images |
| `deploy-ssh-key` | SSH Username with private key | **Shared** one key for the deploy host, can be reused |
> **Shared deploy host:** If you share a deploy host (e.g. a home server), you can reuse the same `deploy-ssh-key` credential—no need to create your own. Each person **must** add their own Gitea credentials in Jenkins for their pipeline job (Manage Jenkins → Credentials → Add → Username with password, ID `gitea_credentials`). Use your Gitea username and an access token with package read/write for the registry.
### Jenkins Credentials Setup
1. **`deploy-ssh-key`** (shared for the deploy host)
- Kind: SSH Username with private key
- ID: `deploy-ssh-key`
- Username: matches `DEPLOY_USER`
- Private key: RSA key in PEM format (`ssh-keygen -t rsa -b 4096 -m PEM`)
- Public key must be in `~/.ssh/authorized_keys` on the deploy host
2. **`gitea_credentials`** (per user, for registry push)
- Kind: Username with password
- ID: `gitea_credentials` (or change `credentialsId` in the Jenkinsfile)
- Username: your Gitea username
- Password: your Gitea password or access token (token recommended)
### First-Time Deploy Host Setup ### First-Time Deploy Host Setup
On the deploy host:
```bash ```bash
sudo mkdir -p /opt/myapp sudo mkdir -p /opt/myapp
sudo chown deploy:deploy /opt/myapp sudo chown ryanv:ryanv /opt/myapp
sudo usermod -aG docker deploy sudo usermod -aG docker ryanv
``` ```
If multiple users deploy to the same host, use separate paths (e.g. `/opt/myapp-alice`, `/opt/myapp-bob`) and update `docker-compose.yml` to use different ports for each app.
The `docker-compose.yml` mounts `./data:/app/data` for SQLite persistence. Ensure the deploy directory is writable. The `docker-compose.yml` mounts `./data:/app/data` for SQLite persistence. Ensure the deploy directory is writable.
### Branch Behavior ### Branch Behavior