Podman is very useful tool to rapidly deploy containers. In this post I just wanted to show you, how you can use Podman to deploy simple web uploader service, I used this for personal reasons in my local network so I can easily upload/download files on my local server through http without installing any http server.
First you need to pull the container, the container I used in this case is from docker.io:
podman pull docker.io/elementalnet/file-upload
Once it is downloaded you can run it as rootless container from non root user, I created a upload folder under user fred (/home/fred/Temp).
podman run –name “http_uploader” –privileged -d -t -p 8080:80/tcp -e SITE_NAME=”Local Upload Server” -e SITE_USERNAME=”saeed” -e SITE_PASSWORD=”saeed” -v /home/fred/Temp/:/var/www/upload/server/php/chroot/files/:Z docker.io/elementalnet/file-upload
Now the container is tagged as “http_uploader”; You need to provided ‘privileged’ parameter, this would give access from the guest container to host resource which is in this case is the folder that we want to upload our files to and make it persistence, so we won’t lose our files in case that the container is restarted or a system reboot.
Also if you are using SELinux protection you need to provide ‘:Z’ at the end of bind folders to apply appropriate container permissions on files. Otherwise SELinux would stop this.
Its good idea to create a service for the container, so it can be managed as a service, to do that you need to create a service file which can be done by podman and then added it as a service file to “/etc/systemd/system/<filename>.service”. Below is the sample service file for demonstration:
[fred@rocky-test system]$ podman generate systemd http_uploader # container-252e2fa68510e0cdfd1451253219f32192b26b02fb667b5aec248b8d870bebd9.service # autogenerated by Podman 3.3.1 # Fri Nov 26 15:04:16 EST 2021 [Unit] #this ensures the container runs with non root permissions User=fred Group=fred Description=Podman container-252e2fa68510e0cdfd1451253219f32192b26b02fb667b5aec248b8d870bebd9.service Documentation=man:podman-generate-systemd(1) Wants=network-online.target After=network-online.target RequiresMountsFor=/tmp/podman-run-1001/containers [Service] Environment=PODMAN_SYSTEMD_UNIT=%n Restart=on-failure TimeoutStopSec=70 ExecStart=/usr/bin/podman start 252e2fa68510e0cdfd1451253219f32192b26b02fb667b5aec248b8d870bebd9 ExecStop=/usr/bin/podman stop -t 10 252e2fa68510e0cdfd1451253219f32192b26b02fb667b5aec248b8d870bebd9 ExecStopPost=/usr/bin/podman stop -t 10 252e2fa68510e0cdfd1451253219f32192b26b02fb667b5aec248b8d870bebd9 PIDFile=/tmp/podman-run-1001/containers/overlay-containers/252e2fa68510e0cdfd1451253219f32192b26b02fb667b5aec248b8d870bebd9/userdata/conmon.pid Type=forking [Install] WantedBy=multi-user.target default.target
and here is running service:
Hope this helps and good luck 🙂
– Saeed
BTC: bc1qrxmjgsc5a2fwn7zplpcu7665uq39tp2ss7luwk