Cómo Instalar Gitea en FreeBSD usando AppJail Director
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 Gitea y PostgreSQL en FreeBSD usando AppJail Director.
Pasos preliminares
En mi sistema tengo la siguiente configuración:
/etc/rc.conf (Solo lo relevante es mostrado):
# 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:
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
nameserver 172.0.0.1
nameserver 172.0.0nat-anchor 'appjail-nat/jail/*'
nat-anchor "appjail-nat/network/*"
rdr-anchor "appjail-rdr/*".1
Console Output:
# 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:
# 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
*.- Introducción
*.- Configuración
*.- Introducción a las Redes Virtuales
*.- DNS
Desplegando Gitea
Como se explica en AppJail-makejails/gitea#basic-usage 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:
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:
DIRECTOR_PROJECT=gitea
postgres/template.conf:
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:
sshd_enable="YES"
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:
# 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 http://192.168.1.105:3000 en el navegador de otro sistema, Gitea no muestra nada. No hay de qué precouparse, veamos si el proceso está corriendo:
# 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.
Desde la página de inicio de Director:
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…
# 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.
# 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):
# 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:
# 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: https://dtxdf.github.io/post/how-to-install-gitea-on-freebsd-using-appjail-director/
Powered by WPeMatico