Cómo Instalar Gitea en FreeBSD usando AppJail Director

Iniciado por DtxdF, Diciembre 23, 2023, 06:14:22 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Diciembre 23, 2023, 06:14:22 AM Ultima modificación: Diciembre 24, 2023, 05:16:34 AM por DtxdF

Fuente: No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Manejar nuestros proyectos de desarrollo es muy fácil actualmente, hay demasiados servicios para escoger, con menos o con más características, pero hay uno en particular, de código abierto, auto-hospedable, con muchísimas características, y la mejor parte, que se puede instalar en FreeBSD. Ese genial proyecto es Gitea, un software para hospedar nuestros proyectos usando git, que además cuenta con funciones colaborativas como rastreo de incidentes, revisión de código, integración continua, tickets y wikis.

En este artículo instalaremos No tienes permitido ver enlaces. Registrate o Entra a tu cuenta y No tienes permitido ver enlaces. Registrate o Entra a tu cuenta en FreeBSD usando No tienes permitido ver enlaces. Registrate o Entra a tu cuenta.


Pasos preliminares

En mi sistema tengo la siguiente configuración:

/etc/rc.conf (Solo lo relevante es mostrado):

Código: sh
# AppJail
appjail_enable="YES"
appjail_dns_enable="YES"
# Recomendable if tu dirección IP cambia, entonces podremos usar la siguiente dirección IP en nuestras jaulas.
ifconfig_tap0_name="ajdns"
ifconfig_ajdns="inet 172.0.0.1/32"
# DNSMasq
dnsmasq_enable="YES"
dnsmasq_conf="/usr/local/share/appjail/files/dnsmasq.conf"
# Habilitar net.inet.ip.forwarding.
gateway_enable="YES"

/usr/local/etc/appjail/appjail.conf:

Código: sh
EXT_IF=jext
ON_IF=jext
FREEBSD_VERSION=14.0-RELEASE
FREEBSD_ARCH=amd64
IMAGE_ARCH=amd64
ENABLE_DEBUG=0
ENABLE_ZFS=1
SHORTEN_DOMAIN_NAMES=1
DEFAULT_RESOLV_CONF=/usr/local/etc/appjail/resolv.conf

/usr/local/etc/appjail/resolv.conf:

Código: text
nameserver 172.0.0.1

/etc/pf.conf:

Código: text
nat-anchor 'appjail-nat/jail/*'
nat-anchor "appjail-nat/network/*"
rdr-anchor "appjail-rdr/*"

Console Output:

Código: console
# service appjail-dns status
appjail_dns is running as pid 97063.
# service dnsmasq status
dnsmasq is running as pid 98251.
# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 1
# freebsd-version
14.0-RELEASE-p4
# uname -r
14.0-RELEASE-p4
# appjail version
3.0.0.20231220+9468250a2fb7e6f6e6f63a89eb0892e325d1cf83
# appjail-director --version
appjail-director, version 0.7.0
# zfs list zroot
NAME    USED  AVAIL  REFER  MOUNTPOINT
zroot  72.1G   531G    24K  none
# ifconfig ajdns
ajdns: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        ether 58:9c:fc:10:8e:0c
        inet 172.0.0.1 netmask 0xffffffff broadcast 172.0.0.1
        groups: tap
        media: Ethernet 1000baseT <full-duplex>
        status: no carrier
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
# ifconfig jext
jext: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
        options=4e524bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6,HWSTATS,MEXTPG>
        ether 00:1b:24:e0:6d:a3
        inet 192.168.1.105 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

Estoy usando la versión de desarrollo de AppJail, por lo que estar atentos a la versión y al commit hash del que estén usando.

Nota: Mantener AppJail y Director actualizados y sincronizados.

La red virtual es la siguiente, pero en estos días no es necesario preocuparse por ella dado que AppJail la crea si no existe:


Código: console
# appjail network list
NAME   NETWORK   CIDR  BROADCAST      GATEWAY   MINADDR   MAXADDR        ADDRESSES  DESCRIPTION
ajnet  10.0.0.0  10    10.63.255.255  10.0.0.1  10.0.0.1  10.63.255.254  4194302    AppJail network

Si necesitas más información, he aquí los lugares relevantes para este artículo en la documentación de AppJail:

*.- No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
*.- No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
*.- No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
*.- No tienes permitido ver enlaces. Registrate o Entra a tu cuenta


Desplegando Gitea

Como se explica en No tienes permitido ver enlaces. Registrate o Entra a tu cuenta hay que pasar las variables de entorno de la siguiente forma:

1.- Las variables de entorno deben tener la siguiente forma: GITEA__SECTION_NAME__KEY_NAME.
2.- SECTION y KEY_NAME deben estar en mayúsculas. Pueden contener _ y números.
3.- _0X2E_ será remplazados por . y _0X2D_ por ..
4.- Para usar la sección global o predeterminada, usa DEFAULT como sección.

Por lo que nuestro archivo Director es el siguiente:


appjail-director.yml:

Código: yaml
options:
  - virtualnet: ":<random> default"
  - nat:

services:
  gitea:
    name: gitea
    makejail: gh+AppJail-makejails/gitea
    options:
      - expose: 3000
      - expose: '2022:22'
      - copydir: !ENV '${PWD}/gitea/files'
      - file: /etc/rc.conf.local
    arguments:
      - gitea_tag: '14.0'
    environment:
      - GITEA__DATABASE__DB_TYPE: 'postgres'
      - GITEA__DATABASE__HOST: 'gitea-postgres:5432'
      - GITEA__DATABASE__NAME: 'gitea'
      - GITEA__DATABASE__USER: 'gitea'
      - GITEA__DATABASE__PASSWD: 'gitea'
      - GITEA__SERVER__SSH_PORT: 2022
      - GITEA__SERVER__DOMAIN: '192.168.1.105'
      - GITEA__DEFAULT__APP_NAME: 'Welcome to my git server!'
    volumes:
      - gitea-db: gitea-db
      - gitea-git: gitea-git

  db:
    name: gitea-postgres
    makejail: gh+AppJail-makejails/postgres
    options:
      - template: !ENV '${PWD}/postgres/template.conf'
    arguments:
      - postgres_tag: '14.0-16'
    environment:
      - POSTGRES_PASSWORD: 'gitea'
      - POSTGRES_USER: 'gitea'
      - POSTGRES_DB: 'gitea'
    volumes:
      - pg-done: pg-done
      - pg-data: pg-data

default_volume_type: '<volumefs>'

volumes:
  gitea-git:
    device: .volumes/gitea/git
  gitea-db:
    device: .volumes/gitea/db
  pg-data:
    device: .volumes/postgres/data
  pg-done:
    device: .volumes/postgres/done

.env:

Código: text
DIRECTOR_PROJECT=gitea

postgres/template.conf:

Código: text
exec.start: "/bin/sh /etc/rc"
exec.stop: "/bin/sh /etc/rc.shutdown jail"
sysvmsg: new
sysvsem: new
sysvshm: new
mount.devfs

gitea/files/etc/rc.conf.local:

Código: sh
sshd_enable="YES"

Hay muchas cosas que AppJail y Director realizan por nosotros en un solo archivo pero lo explicaré en breve. Por el momento solo ejecutemos el proyecto y veamos el resultado:

Código: console
# appjail-director up
appjail-director up
Starting Director (project:gitea) ...
Creating db (gitea-postgres) ... Done.
Creating gitea (gitea) ... Done.
Finished: gitea
# appjail-director info
gitea:
 state: DONE
 last log: /root/.director/logs/2023-12-22_21h33m25s
 locked: false
 services:
  + db (gitea-postgres)
  + gitea (gitea)

Como se puede apreciar, solo un comando es lo que se usó para desplegar Gitea y PostgreSQL, pero si ingresamos a No tienes permitido ver enlaces. Registrate o Entra a tu cuenta en el navegador de otro sistema, Gitea no muestra nada. No hay de qué precouparse, veamos si el proceso está corriendo:

Código: console
# appjail service jail gitea gitea status
gitea is running as pid 91657.

Después de que Gitea se inicialice correctamente, podemos registrarnos, crear un repositorio, o, por ejemplo, agregar nuestra clave SSH en Profile & Settings > Settings > SSH / GPG Keys.

Profile and Settings...

SSH / GPG Keys

Concepto de efímero

Desde la No tienes permitido ver enlaces. Registrate o Entra a tu cuenta:

Director trata cada jaula como efímera. Esto no quiere decir que sus jaulas no persistirán después de que las detengas o que su sistema se reinicie, lo que quiere decir es que Director asume que es seguro destruir sus jaulas ya que se ha separado los datos que deben persistir de los que no.

Incluso si nuestras jaulas son un tipo de "Jaulas con estado", esto no significa que no podamos usarlas como "Jaulas efímeras". La idea de tener jaulas efímeras es muy simple, pero tiene demasiadas ventajas que probablemente quedarían mejor descritas en otro artículo: los datos son separados en dos tipos, los que deben persistir de los que no. Ya hemos hecho esto, por lo que si realizamos lo siguiente...


Código: console
# appjail-director down -d
Starting Director (project:gitea) ...
Stopping gitea (gitea) ... Done.
Destroying gitea (gitea) ... Done.
Stopping db (gitea-postgres) ... Done.
Destroying db (gitea-postgres) ... Done.
Destroying gitea ... Done.
# appjail-director info
gitea: Project not found.

¡Nuestro proyecto se ha ido!

No te preocupes, esto es lo que solucionan los volumenes:

Código: console
# tree -L 2 .volumes
.volumes
├── gitea
│   ├── db
│   └── git
└── postgres
    ├── data
    └── done

7 directories, 0 files

Por lo que podremos crear nuestro proyecto otra vez (y los datos persistirán):

Código: console
# appjail-director up
Starting Director (project:gitea) ...
Creating db (gitea-postgres) ... Done.
Creating gitea (gitea) ... Done.
Finished: gitea
# appjail-director info
gitea:
 state: DONE
 last log: /root/.director/logs/2023-12-22_21h51m23s
 locked: false
 services:
  + db (gitea-postgres)
  + gitea (gitea)

Y nuestras claves SSH estarán intactas:

Código: console
# cat .volumes/gitea/git/.ssh/authorized_keys
# gitea public key
command="/usr/local/sbin/gitea --config=/usr/local/etc/gitea/conf/app.ini serv key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG8B02AxX4CBRHNQHAwQIZUE454ZixeqSkAG7b9OOMxa dtxdf@dtxdf-laptop

Fuente: No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

De mano del propio desarrollador.

Privilegio y regalo de lujo para finalizar el año con metal precioso.

Bello post.

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Gracias No tienes permitido ver enlaces. Registrate o Entra a tu cuenta. Hace rato no escribía uno, más que nada por falta de tiempo, pero la motivación sigue intacta. ¡Feliz navidad por cierto!


~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF

Tremendo aporte! esta muy muy bueno y completo!


Gracias No tienes permitido ver enlaces. Registrate o Entra a tu cuenta, un placer. ¡Feliz navidad!

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta

Agarrelo decuidado, ¡el foro es nuestro!


~ DtxdF
PGP :: <D82F366940155CB043147178C4E075FC4403BDDC>

~ DtxdF