Install Forgejo using podman.
Operating system.
$ lsb_release --all
No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.1 LTS Release: 22.04 Codename: jammy
Install podman.
$ sudo apt install podman systemd-container
Determine podman version.
$ podman version
Version: 3.4.4 API Version: 3.4.4 Go Version: go1.17.3 Built: Thu Jan 1 01:00:00 1970 OS/Arch: linux/amd64
Create dedicated forgejo
user.
$ sudo useradd --home-dir /opt/forgejo --create-home --shell /bin/bash forgejo
Create user systemd directory.
$ sudo -u forgejo mkdir -p /opt/forgejo/.config/systemd/user
Enable user lingering.
$ sudo loginctl enable-linger forgejo
Create application network.
$ sudo -u forgejo -i podman network create forgejo-network
/opt/forgejo/.config/cni/net.d/forgejo-network.conflist
Create database container.
$ sudo -u forgejo mkdir /opt/forgejo/database
$ sudo -u forgejo -i \ podman container run \ --detach \ --env MARIADB_ROOT_PASSWORD=toor \ --env MARIADB_DATABASE=forgejo \ --env MARIADB_USER=forgejo \ --env MARIADB_PASSWORD=forgejo \ --volume /opt/forgejo/database:/var/lib/mysql/ \ --network forgejo-network \ --name forgejo-database \ docker.io/library/mariadb:latest
Trying to pull docker.io/library/mariadb:latest... Getting image source signatures Copying blob 94c8eab958ce done Copying blob 73cc9c81ae7f done Copying blob 20bcac65cb84 done Copying blob c4a9b64b12f6 done Copying blob 6e3729cf69e0 done Copying blob 0b2128efbd85 done Copying blob 890f8c45a000 done Copying blob 97533be58132 done Copying config a748acbacc done Writing manifest to image destination Storing signatures 2fd6882fa1d3be96d8f523909e6b01c56dddbeecb77f50062075c35d6fa25014
Create application container.
$ sudo -u forgejo mkdir /opt/forgejo/git
$ sudo -u forgejo -i \ podman container run \ --detach \ --env DB_TYPE=mysql \ --env DB_HOST=forgejo-database:3306 \ --env DB_NAME=forgejo \ --env DB_USER=forgejo \ --env DB_PASSWD=forgejo \ --volume /opt/forgejo/git:/data \ --network forgejo-network \ --publish 3000:3000 \ --label "io.containers.autoupdate=registry" \ --name forgejo-app \ codeberg.org/forgejo/forgejo:1.18.0-rc1-1
Trying to pull codeberg.org/forgejo/forgejo:1.18.0-rc1-1... Getting image source signatures Copying blob 03e8d6776079 done Copying blob 1bf71cc7b214 done Copying blob 79e1c7a8b118 done Copying blob 603f68ea1ac0 done Copying blob 1625488e60ae done Copying blob ca7dd9ec2225 done Copying blob 4f4fb700ef54 done Copying blob 41aae6095be7 done Copying config 7838f2d9e5 done Writing manifest to image destination Storing signatures a67af8553a03ee6cc376f578890001f591a312ec6d5be70bc36c0f3379e97cf4
Generate systemd services.
$ sudo -u forgejo -i podman generate systemd --files forgejo-database
/opt/forgejo/container-2fd6882fa1d3be96d8f523909e6b01c56dddbeecb77f50062075c35d6fa25014.service
$ sudo -u forgejo cat /opt/forgejo/container-2fd6882fa1d3be96d8f523909e6b01c56dddbeecb77f50062075c35d6fa25014.service
# container-2fd6882fa1d3be96d8f523909e6b01c56dddbeecb77f50062075c35d6fa25014.service # autogenerated by Podman 3.4.4 # Tue Dec 27 22:54:00 CET 2022 [Unit] Description=Podman container-2fd6882fa1d3be96d8f523909e6b01c56dddbeecb77f50062075c35d6fa25014.service Documentation=man:podman-generate-systemd(1) Wants=network-online.target After=network-online.target RequiresMountsFor=/run/user/1001/containers [Service] Environment=PODMAN_SYSTEMD_UNIT=%n Restart=on-failure TimeoutStopSec=70 ExecStart=/usr/bin/podman start 2fd6882fa1d3be96d8f523909e6b01c56dddbeecb77f50062075c35d6fa25014 ExecStop=/usr/bin/podman stop -t 10 2fd6882fa1d3be96d8f523909e6b01c56dddbeecb77f50062075c35d6fa25014 ExecStopPost=/usr/bin/podman stop -t 10 2fd6882fa1d3be96d8f523909e6b01c56dddbeecb77f50062075c35d6fa25014 PIDFile=/run/user/1001/containers/overlay-containers/2fd6882fa1d3be96d8f523909e6b01c56dddbeecb77f50062075c35d6fa25014/userdata/conmon.pid Type=forking [Install] WantedBy=default.target
$ sudo -u forgejo -i podman generate systemd --files forgejo-app
/opt/forgejo/container-a67af8553a03ee6cc376f578890001f591a312ec6d5be70bc36c0f3379e97cf4.service
$ sudo -u forgejo cat /opt/forgejo/container-a67af8553a03ee6cc376f578890001f591a312ec6d5be70bc36c0f3379e97cf4.service
# container-a67af8553a03ee6cc376f578890001f591a312ec6d5be70bc36c0f3379e97cf4.service # autogenerated by Podman 3.4.4 # Tue Dec 27 22:54:27 CET 2022 [Unit] Description=Podman container-a67af8553a03ee6cc376f578890001f591a312ec6d5be70bc36c0f3379e97cf4.service Documentation=man:podman-generate-systemd(1) Wants=network-online.target After=network-online.target RequiresMountsFor=/run/user/1001/containers [Service] Environment=PODMAN_SYSTEMD_UNIT=%n Restart=on-failure TimeoutStopSec=70 ExecStart=/usr/bin/podman start a67af8553a03ee6cc376f578890001f591a312ec6d5be70bc36c0f3379e97cf4 ExecStop=/usr/bin/podman stop -t 10 a67af8553a03ee6cc376f578890001f591a312ec6d5be70bc36c0f3379e97cf4 ExecStopPost=/usr/bin/podman stop -t 10 a67af8553a03ee6cc376f578890001f591a312ec6d5be70bc36c0f3379e97cf4 PIDFile=/run/user/1001/containers/overlay-containers/a67af8553a03ee6cc376f578890001f591a312ec6d5be70bc36c0f3379e97cf4/userdata/conmon.pid Type=forking [Install] WantedBy=default.target
Copy service files.
$ sudo -u forgejo cp /opt/forgejo/container-2fd6882fa1d3be96d8f523909e6b01c56dddbeecb77f50062075c35d6fa25014.service /opt/forgejo/.config/systemd/user/forgejo-database.service
$ sudo -u forgejo cp /opt/forgejo/container-a67af8553a03ee6cc376f578890001f591a312ec6d5be70bc36c0f3379e97cf4.service /opt/forgejo/.config/systemd/user/forgejo-app.service
Use machinectl
utility to control services using systemd.
$ sudo machinectl shell --uid forgejo Connected to the local host. Press ^] three times within 1s to exit session. forgejo@host$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2fd6882fa1d3 docker.io/library/mariadb:latest mariadbd 27 minutes ago Up 27 minutes ago forgejo-database a67af8553a03 codeberg.org/forgejo/forgejo:1.18.0-rc1-1 /bin/s6-svscan /e... 17 minutes ago Up 17 minutes ago 0.0.0.0:3000->3000/tcp forgejo-app forgejo@host$ podman stop forgejo-app forgejo@host$ podman stop forgejo-database forgejo@host$ systemctl --user daemon-reload forgejo@host$ systemctl --user enable --now forgejo-database Created symlink /opt/forgejo/.config/systemd/user/default.target.wants/forgejo-database.service → /opt/forgejo/.config/systemd/user/forgejo-database.service. forgejo@host$ systemctl --user enable --now forgejo-app Created symlink /opt/forgejo/.config/systemd/user/default.target.wants/forgejo-app.service → /opt/forgejo/.config/systemd/user/forgejo-app.service. forgejo@host$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2fd6882fa1d3 docker.io/library/mariadb:latest mariadbd 36 minutes ago Up 6 minutes ago forgejo-database a67af8553a03 codeberg.org/forgejo/forgejo:1.18.0-rc1-1 /bin/s6-svscan /e... 26 minutes ago Up 6 minutes ago 0.0.0.0:3000->3000/tcp forgejo-app forgejo@host$ exit Connection to the local host terminated.
Open web-browser on port 3000 to access application.
