Skip to content

Instantly share code, notes, and snippets.

@ramingar
Created August 28, 2025 21:25
Show Gist options
  • Select an option

  • Save ramingar/b5f0e175b693ad48a3afb27f1123141b to your computer and use it in GitHub Desktop.

Select an option

Save ramingar/b5f0e175b693ad48a3afb27f1123141b to your computer and use it in GitHub Desktop.
Crear servicio systemd en modo usuario - para podman y para clickhouse
  1. Crear el directorio de servicios de usuario (si no existe)
mkdir -p ~/.config/systemd/user/
  1. Crear el archivo del servicio
cat > ~/.config/systemd/user/portainer.service << 'EOF'
[Unit]
Description=Portainer Container
After=network.target
Wants=network.target

[Service]
Type=simple
ExecStartPre=/usr/bin/podman rm -f portainer
ExecStart=/usr/bin/podman run --name portainer \
  -p 9443:9443 \
  -v /run/user/%U/podman/podman.sock:/var/run/docker.sock:Z \
  -v portainer_data:/data:Z \
  docker.io/portainer/portainer-ce

ExecStop=/usr/bin/podman stop portainer
ExecStopPost=/usr/bin/podman rm portainer
Restart=always
RestartSec=30
TimeoutStopSec=30

[Install]
WantedBy=default.target
EOF
  1. Habilitar el servicio para que inicie automáticamente
# Recargar daemon de systemd
systemctl --user daemon-reload

# Habilitar el servicio para que inicie al arrancar
loginctl enable-linger $(whoami)
systemctl --user enable portainer.service

# Iniciar el servicio ahora
systemctl --user start portainer.service
  1. Verificar que el servicio está funcionando
# Ver estado del servicio
systemctl --user status portainer.service

# Ver logs del servicio
journalctl --user -u portainer.service -f

# Ver contenedores en ejecución
podman ps
  1. Comandos útiles para gestionar el servicio
# Detener el servicio
systemctl --user stop portainer.service

# Reiniciar el servicio
systemctl --user restart portainer.service

# Ver logs en tiempo real
journalctl --user -u portainer.service -f

# Deshabilitar el servicio
systemctl --user disable portainer.service

Puntos importantes:

  • loginctl enable-linger es crucial - permite que los servicios de usuario sigan ejecutándose después de cerrar sesión.
  • %U en el path del socket se expande automáticamente a tu UID.
  • El servicio se reiniciará automáticamente si falla (Restart=always).
  • Los logs se pueden ver con journalctl --user -u portainer.service

Para el caso de clickhouse es igual, pero el archivo de servicio será:

cat > ~/.config/systemd/user/clickhouse-container.service << 'EOF'
[Unit]
Description=ClickHouse Container
After=network.target
Wants=network.target

[Service]
Type=simple
ExecStartPre=-/usr/bin/podman rm -f clickhouse-container
ExecStart=/usr/bin/podman run --name clickhouse-container \
  -p 28443:8443 \
  -p 29440:9440 \
  -e CLICKHOUSE_PASSWORD=XXXXXX \
  --ulimit nofile=262144:262144 \
  -v "/home/<user>/clickhouse-container-data/clickhouse-data:/var/lib/clickhouse/:Z" \
  -v "/home/<user>/clickhouse-container-data/clickhouse-logs:/var/log/clickhouse-server/:Z" \
  -v "/home/<user>/clickhouse-container-data/clickhouse-server-config:/etc/clickhouse-server/config.d/:Z" \
  -v "/home/<user>/clickhouse-container-data/clickhouse-users-config:/etc/clickhouse-server/users.d/:Z" \
  -v "/home/<user>/clickhouse-container-data/certs:/etc/clickhouse-server/certs/:Z" \
  -v "/home/<user>/clickhouse-container-data/clickhouse-init:/docker-entrypoint-initdb.d/:Z" \
  clickhouse

ExecStop=/usr/bin/podman stop clickhouse-container
ExecStopPost=-/usr/bin/podman rm clickhouse-container
Restart=always
RestartSec=30
TimeoutStopSec=30

# Configuración importante para contenedores con volúmenes
Environment=PODMAN_SYSTEMD_UNIT=%n
TimeoutStartSec=300

[Install]
WantedBy=default.target

Puntos importantes:

  • ExecStartPre=- - El guión significa que si falla el comando (porque el contenedor no existe), no se considera error.
  • TimeoutStartSec=300 - ClickHouse puede tardar en iniciar, así que aumentamos el timeout.
  • Asegúrate de que todos los directorios de volúmenes existan.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment