Files
deploy_home/ansible/roles/git/tasks/podman.yml
Bastian de Byl c96aeafb3f feat: add git.skudak.com Gitea instance and skudak domain migrations
Gitea Skudak (git.skudak.com):
- New Gitea instance with PostgreSQL in podman pod under git user
- SSH access via Gitea's built-in SSH server on port 2222
- Registration restricted to @skudak.com emails with email confirmation
- SMTP configured for email delivery

Domain migrations:
- wiki.skudakrennsport.com → wiki.skudak.com (302 redirect)
- cloud.skudakrennsport.com + cloud.skudak.com (dual-domain serving)
- BookStack APP_URL updated to wiki.skudak.com
- Nextcloud trusted_domains updated for cloud.skudak.com

Infrastructure:
- SELinux context for git user container storage (container_file_t)
- Firewall rule for port 2222/tcp (Gitea Skudak SSH)
- Caddy reverse proxy for git.skudak.com

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-15 22:27:02 -05:00

96 lines
2.8 KiB
YAML

---
# Rootless Podman setup for git user
# Enables running Gitea containers under the git user
# Enable lingering for systemd user services
- name: check if git user lingering enabled
become: true
ansible.builtin.stat:
path: "/var/lib/systemd/linger/{{ git_user }}"
register: git_user_lingering
tags: git, gitea
- name: enable git user lingering
become: true
ansible.builtin.command: |
loginctl enable-linger {{ git_user }}
when: not git_user_lingering.stat.exists
tags: git, gitea
# Set ulimits for container operations
- name: set ulimits for git user
become: true
community.general.pam_limits:
domain: "{{ git_user }}"
limit_type: "{{ item.type }}"
limit_item: "{{ item.name }}"
value: "{{ item.value }}"
loop:
- { name: memlock, type: soft, value: "unlimited" }
- { name: memlock, type: hard, value: "unlimited" }
- { name: nofile, type: soft, value: 39693561 }
- { name: nofile, type: hard, value: 39693561 }
tags: git, gitea
# Create container directories
- name: create git podman directories
become: true
become_user: "{{ git_user }}"
ansible.builtin.file:
path: "{{ item }}"
state: directory
mode: 0755
loop:
- "{{ git_home }}/.config/systemd/user"
- "{{ git_home }}/volumes"
- "{{ git_home }}/volumes/gitea"
- "{{ git_home }}/volumes/gitea/data"
- "{{ git_home }}/volumes/gitea/psql"
- "{{ git_home }}/volumes/gitea-skudak"
- "{{ git_home }}/volumes/gitea-skudak/data"
- "{{ git_home }}/volumes/gitea-skudak/psql"
# NOTE: psql directories may already exist with postgres ownership - ignore errors
failed_when: false
notify: restorecon git
tags: git, gitea, gitea-skudak
# SELinux context for container volumes
- name: selinux context for git container volumes
become: true
community.general.sefcontext:
target: "{{ git_home }}/volumes(/.*)?"
setype: container_file_t
state: present
notify: restorecon git
tags: git, gitea, gitea-skudak, selinux
# SELinux context for container storage (images, overlays, etc.)
- name: selinux context for git container storage
become: true
community.general.sefcontext:
target: "{{ git_home }}/.local/share/containers(/.*)?"
setype: container_file_t
state: present
notify: restorecon git
tags: git, gitea, gitea-skudak, selinux
# Enable podman socket for SSH key lookup via AuthorizedKeysCommand
- name: enable podman socket for git user
become: true
become_user: "{{ git_user }}"
ansible.builtin.systemd:
name: podman.socket
enabled: true
state: started
scope: user
tags: git, gitea
# Fetch subuid for volume permissions
- name: fetch subuid of {{ git_user }}
become: true
changed_when: false
ansible.builtin.shell: |
set -o pipefail && cat /etc/subuid | awk -F':' '/{{ git_user }}/{ print $2 }' | head -n 1
register: git_subuid
tags: always