{"id":11361,"date":"2026-06-11T22:47:59","date_gmt":"2026-06-11T22:47:59","guid":{"rendered":"https:\/\/resizemyimg.com\/blog\/?p=11361"},"modified":"2026-06-11T22:55:46","modified_gmt":"2026-06-11T22:55:46","slug":"install-horilla-on-almalinux-step-by-step-guide","status":"publish","type":"post","link":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/","title":{"rendered":"Install Horilla on AlmaLinux: Step-by-Step Guide"},"content":{"rendered":"<p>Horilla is an open source human resource management system built with Python and Django, and AlmaLinux provides a stable enterprise Linux base for hosting it. A typical installation involves preparing the server, installing Python and PostgreSQL, cloning the Horilla source code, configuring environment settings, running database migrations, and serving the application through Gunicorn and Nginx.<\/p>\n<p><strong>TLDR:<\/strong> To install Horilla on AlmaLinux, the administrator prepares the system packages, installs PostgreSQL and Python dependencies, then downloads Horilla from its official repository. After configuring the database and application environment, migrations are applied and a superuser account is created. For production use, Horilla should run behind <strong>Nginx<\/strong> with <strong>Gunicorn<\/strong> managed by <strong>systemd<\/strong>.<\/p>\n<h2>Prerequisites<\/h2>\n<p>Before installation begins, the server should have a clean AlmaLinux installation, preferably <strong>AlmaLinux 9<\/strong>, with root or sudo access. The system should also have a valid domain name if Horilla will be exposed publicly. Although Horilla can be tested locally, a production deployment is more reliable when PostgreSQL, Nginx, and a dedicated application user are used.<\/p>\n<ul>\n<li><strong>Operating system:<\/strong> AlmaLinux 8 or 9<\/li>\n<li><strong>Access:<\/strong> Root or sudo-enabled user<\/li>\n<li><strong>Database:<\/strong> PostgreSQL<\/li>\n<li><strong>Web server:<\/strong> Nginx<\/li>\n<li><strong>Application server:<\/strong> Gunicorn<\/li>\n<li><strong>Runtime:<\/strong> Python 3 and virtual environment<\/li>\n<\/ul>\nImage not found in postmeta<br \/>\n<h2>Step 1: Update the AlmaLinux System<\/h2>\n<p>The administrator should first update all installed packages. This reduces the risk of dependency conflicts and ensures security patches are applied before Horilla is installed.<\/p>\n<pre><code>sudo dnf update -y<\/code><\/pre>\n<p>After the update completes, installing a few essential utilities is recommended. These tools are commonly required for Python packages, source compilation, and repository management.<\/p>\n<pre><code>sudo dnf install -y git curl wget vim gcc gcc-c++ make<\/code><\/pre>\n<h2>Step 2: Install Python and Development Packages<\/h2>\n<p>Horilla is a Django-based application, so Python and related build libraries are required. AlmaLinux usually ships with Python 3, but the required development headers should still be installed.<\/p>\n<pre><code>sudo dnf install -y python3 python3-pip python3-devel<\/code><\/pre>\n<p>The administrator can verify the installed versions with:<\/p>\n<pre><code>python3 --version\npip3 --version<\/code><\/pre>\n<p>If the server runs an older Python version that is not compatible with the current Horilla release, a newer Python version may need to be installed from approved repositories or built separately. For most current AlmaLinux 9 environments, the default Python version is suitable.<\/p>\n<h2>Step 3: Install and Configure PostgreSQL<\/h2>\n<p>PostgreSQL is a strong choice for production Django applications. It provides reliability, scalability, and better data integrity than lightweight databases used for testing.<\/p>\n<pre><code>sudo dnf install -y postgresql-server postgresql-contrib postgresql-devel<\/code><\/pre>\n<p>Once installed, the database cluster must be initialized:<\/p>\n<pre><code>sudo postgresql-setup --initdb<\/code><\/pre>\n<p>Then PostgreSQL should be enabled and started:<\/p>\n<pre><code>sudo systemctl enable --now postgresql<\/code><\/pre>\n<p>The administrator can confirm that PostgreSQL is running:<\/p>\n<pre><code>sudo systemctl status postgresql<\/code><\/pre>\n<h3>Create the Horilla Database and User<\/h3>\n<p>A separate PostgreSQL database and user should be created for Horilla. This keeps application data isolated and improves security.<\/p>\n<pre><code>sudo -u postgres psql<\/code><\/pre>\n<p>Inside the PostgreSQL shell, the following commands create the database and user. The password should be replaced with a strong secret.<\/p>\n<pre><code>CREATE DATABASE horilla_db;\nCREATE USER horilla_user WITH PASSWORD 'StrongPasswordHere';\nALTER ROLE horilla_user SET client_encoding TO 'utf8';\nALTER ROLE horilla_user SET default_transaction_isolation TO 'read committed';\nALTER ROLE horilla_user SET timezone TO 'UTC';\nGRANT ALL PRIVILEGES ON DATABASE horilla_db TO horilla_user;\n\\q<\/code><\/pre>\n<h2>Step 4: Create a Dedicated Horilla User<\/h2>\n<p>Running the application as root is not recommended. A dedicated system user limits risk and makes it easier to manage files, permissions, and services.<\/p>\n<pre><code>sudo useradd -m -r -s \/bin\/bash horilla<\/code><\/pre>\n<p>The application can be installed under the dedicated user\u2019s home directory:<\/p>\n<pre><code>sudo mkdir -p \/opt\/horilla\nsudo chown horilla:horilla \/opt\/horilla<\/code><\/pre>\n<h2>Step 5: Download Horilla<\/h2>\n<p>The administrator should switch to the Horilla user and clone the official Horilla repository. The repository URL may vary depending on the official project location, but the common open source repository is hosted on GitHub.<\/p>\n<pre><code>sudo -iu horilla\ncd \/opt\/horilla\ngit clone https:\/\/github.com\/horilla-opensource\/horilla.git app\ncd app<\/code><\/pre>\n<p>If a specific release is required, the administrator may check available tags and switch to a stable version instead of using the latest branch.<\/p>\n<pre><code>git tag\ngit checkout &lt;version-tag&gt;<\/code><\/pre>\nImage not found in postmeta<br \/>\n<h2>Step 6: Create a Python Virtual Environment<\/h2>\n<p>A Python virtual environment keeps Horilla dependencies separate from system packages. This is especially important on enterprise Linux systems where system Python packages may be managed by the operating system.<\/p>\n<pre><code>python3 -m venv venv\nsource venv\/bin\/activate<\/code><\/pre>\n<p>Next, the administrator should upgrade pip and install the required Python packages:<\/p>\n<pre><code>pip install --upgrade pip setuptools wheel\npip install -r requirements.txt<\/code><\/pre>\n<p>If the installation reports missing PostgreSQL build dependencies, the administrator should confirm that <strong>postgresql-devel<\/strong>, <strong>gcc<\/strong>, and <strong>python3-devel<\/strong> are installed.<\/p>\n<h2>Step 7: Configure Horilla Environment Settings<\/h2>\n<p>Horilla needs database settings, secret keys, allowed hosts, and other environment values. The project may include an example environment file. If present, it can be copied and edited:<\/p>\n<pre><code>cp .env.example .env\nvim .env<\/code><\/pre>\n<p>If no example file exists, the administrator should consult the project documentation and create the required variables manually. A typical production configuration may include values similar to the following:<\/p>\n<pre><code>DEBUG=False\nSECRET_KEY=ReplaceWithLongRandomSecretKey\nALLOWED_HOSTS=example.com,www.example.com,server_ip_address\n\nDB_ENGINE=django.db.backends.postgresql\nDB_NAME=horilla_db\nDB_USER=horilla_user\nDB_PASSWORD=StrongPasswordHere\nDB_HOST=127.0.0.1\nDB_PORT=5432<\/code><\/pre>\n<p>The <strong>SECRET_KEY<\/strong> must be unique and private. The <strong>ALLOWED_HOSTS<\/strong> value should include the domain name or IP address used to access Horilla. In production, <strong>DEBUG<\/strong> should remain disabled.<\/p>\n<h2>Step 8: Run Migrations and Create an Admin User<\/h2>\n<p>Database migrations create the tables Horilla needs. From inside the project directory, with the virtual environment activated, the administrator should run:<\/p>\n<pre><code>python manage.py makemigrations\npython manage.py migrate<\/code><\/pre>\n<p>Static files should then be collected so Nginx can serve them efficiently:<\/p>\n<pre><code>python manage.py collectstatic --noinput<\/code><\/pre>\n<p>Next, an administrator account should be created:<\/p>\n<pre><code>python manage.py createsuperuser<\/code><\/pre>\n<p>The command prompts for a username, email address, and password. This account will be used to sign in to the Horilla administration interface.<\/p>\n<h2>Step 9: Test Horilla Locally<\/h2>\n<p>Before configuring a production service, the application should be tested with Django\u2019s development server. This confirms that dependencies, database connections, and environment variables are working.<\/p>\n<pre><code>python manage.py runserver 127.0.0.1:8000<\/code><\/pre>\n<p>From another terminal session, the administrator can test the local response:<\/p>\n<pre><code>curl http:\/\/127.0.0.1:8000<\/code><\/pre>\n<p>If the page returns successfully, the installation is ready for a production service configuration. The development server should not be used as the public-facing service.<\/p>\n<h2>Step 10: Install and Configure Gunicorn<\/h2>\n<p>Gunicorn acts as the Python application server between Horilla and Nginx. It can be installed inside the virtual environment:<\/p>\n<pre><code>pip install gunicorn<\/code><\/pre>\n<p>The administrator should test Gunicorn manually first. The exact WSGI module name may depend on the Horilla project structure, but many Django projects use a module similar to <strong>horilla.wsgi<\/strong>.<\/p>\n<pre><code>gunicorn --bind 127.0.0.1:8000 horilla.wsgi:application<\/code><\/pre>\n<p>If the command starts without errors, it can be stopped with <strong>Ctrl+C<\/strong>. If an import error appears, the administrator should inspect the project directory and confirm the correct WSGI module path.<\/p>\n<h2>Step 11: Create a systemd Service<\/h2>\n<p>A systemd service allows AlmaLinux to start Horilla automatically on boot and restart it if the process fails.<\/p>\n<pre><code>sudo vim \/etc\/systemd\/system\/horilla.service<\/code><\/pre>\n<p>The service file can be created as follows:<\/p>\n<pre><code>[Unit]\nDescription=Horilla Gunicorn Service\nAfter=network.target postgresql.service\n\n[Service]\nUser=horilla\nGroup=horilla\nWorkingDirectory=\/opt\/horilla\/app\nEnvironment=\"PATH=\/opt\/horilla\/app\/venv\/bin\"\nExecStart=\/opt\/horilla\/app\/venv\/bin\/gunicorn --workers 3 --bind 127.0.0.1:8000 horilla.wsgi:application\nRestart=always\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre>\n<p>After saving the file, systemd should be reloaded and the service started:<\/p>\n<pre><code>sudo systemctl daemon-reload\nsudo systemctl enable --now horilla\nsudo systemctl status horilla<\/code><\/pre>\n<p>If the service fails, logs can be reviewed with:<\/p>\n<pre><code>journalctl -u horilla -xe<\/code><\/pre>\n<h2>Step 12: Install and Configure Nginx<\/h2>\n<p>Nginx will receive browser requests and proxy them to Gunicorn. It can also serve static files and later handle TLS certificates.<\/p>\n<pre><code>sudo dnf install -y nginx\nsudo systemctl enable --now nginx<\/code><\/pre>\n<p>A new Nginx server block can be created:<\/p>\n<pre><code>sudo vim \/etc\/nginx\/conf.d\/horilla.conf<\/code><\/pre>\n<pre><code>server {\n    listen 80;\n    server_name example.com www.example.com;\n\n    location \/static\/ {\n        alias \/opt\/horilla\/app\/staticfiles\/;\n    }\n\n    location \/media\/ {\n        alias \/opt\/horilla\/app\/media\/;\n    }\n\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:8000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}<\/code><\/pre>\n<p>The configuration should be tested before reloading Nginx:<\/p>\n<pre><code>sudo nginx -t\nsudo systemctl reload nginx<\/code><\/pre>\nImage not found in postmeta<br \/>\n<h2>Step 13: Configure Firewall and SELinux<\/h2>\n<p>If <strong>firewalld<\/strong> is enabled, HTTP and HTTPS traffic should be allowed:<\/p>\n<pre><code>sudo firewall-cmd --permanent --add-service=http\nsudo firewall-cmd --permanent --add-service=https\nsudo firewall-cmd --reload<\/code><\/pre>\n<p>On AlmaLinux, SELinux may prevent Nginx from proxying requests to Gunicorn. The following command allows network connections from the web server:<\/p>\n<pre><code>sudo setsebool -P httpd_can_network_connect 1<\/code><\/pre>\n<p>File permissions should also allow Nginx to read static and media files. If static files do not load, the administrator should check ownership, directory permissions, and SELinux contexts.<\/p>\n<h2>Step 14: Add HTTPS with Certbot<\/h2>\n<p>For public deployments, HTTPS is strongly recommended. Certbot can obtain and install a free Let\u2019s Encrypt certificate for Nginx.<\/p>\n<pre><code>sudo dnf install -y epel-release\nsudo dnf install -y certbot python3-certbot-nginx\nsudo certbot --nginx -d example.com -d www.example.com<\/code><\/pre>\n<p>Certbot usually configures certificate renewal automatically. The administrator can test renewal with:<\/p>\n<pre><code>sudo certbot renew --dry-run<\/code><\/pre>\n<h2>Step 15: Final Verification<\/h2>\n<p>After installation, the administrator should open the domain in a browser and confirm that the Horilla login page loads. The superuser account created earlier should allow access to administrative functions. It is also useful to verify that static assets, uploaded files, and employee management modules behave correctly.<\/p>\n<p>Basic operational checks include:<\/p>\n<ul>\n<li>Confirming <strong>horilla.service<\/strong> is active<\/li>\n<li>Checking that <strong>Nginx<\/strong> returns no configuration errors<\/li>\n<li>Testing login with the superuser account<\/li>\n<li>Confirming PostgreSQL is running after reboot<\/li>\n<li>Reviewing logs for permission or database errors<\/li>\n<\/ul>\n<h2>Maintenance Tips<\/h2>\n<p>Horilla should be maintained like any other production web application. The administrator should schedule regular database backups, apply operating system updates, and keep the application code current after reviewing release notes. Before upgrading Horilla, a full backup of the database and application directory should be created.<\/p>\n<pre><code>pg_dump -U horilla_user -h 127.0.0.1 horilla_db &gt; horilla_backup.sql<\/code><\/pre>\n<p>For application updates, the administrator usually pulls the latest code, updates dependencies, and re-runs migrations:<\/p>\n<pre><code>cd \/opt\/horilla\/app\nsource venv\/bin\/activate\ngit pull\npip install -r requirements.txt\npython manage.py migrate\npython manage.py collectstatic --noinput\nsudo systemctl restart horilla<\/code><\/pre>\n<h2>FAQ<\/h2>\n<h3>Can Horilla run on AlmaLinux 8?<\/h3>\n<p>Yes. Horilla can run on AlmaLinux 8 if the required Python version and dependencies are available. If the default Python version is too old, the administrator may need to install a newer supported Python release.<\/p>\n<h3>Is PostgreSQL required for Horilla?<\/h3>\n<p>PostgreSQL is strongly recommended for production installations. Some development setups may use SQLite, but PostgreSQL is more suitable for real HR data and multi-user environments.<\/p>\n<h3>Why does Nginx show a 502 Bad Gateway error?<\/h3>\n<p>A 502 error usually means Nginx cannot reach Gunicorn. The administrator should check whether <strong>horilla.service<\/strong> is running, confirm the Gunicorn bind address, and review logs with <strong>journalctl -u horilla -xe<\/strong>.<\/p>\n<h3>How can static files be fixed if they do not load?<\/h3>\n<p>The administrator should run <strong>python manage.py collectstatic &#8211;noinput<\/strong>, verify the Nginx <strong>alias<\/strong> path, check file permissions, and confirm SELinux is not blocking access.<\/p>\n<h3>Should DEBUG be enabled?<\/h3>\n<p>No. <strong>DEBUG=True<\/strong> should only be used for development or troubleshooting in a private environment. Production installations should use <strong>DEBUG=False<\/strong> to avoid exposing sensitive information.<\/p>\n<h3>How is Horilla restarted after configuration changes?<\/h3>\n<p>After changing environment values, code, or service settings, the administrator can restart Horilla with <strong>sudo systemctl restart horilla<\/strong>. If Nginx configuration changes are made, Nginx should also be tested and reloaded.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Horilla is an open source human resource management system built with Python and Django, and AlmaLinux provides a stable enterprise Linux base for hosting it. A typical installation involves preparing the server, installing Python and PostgreSQL, cloning the Horilla source code, configuring environment settings, running database migrations, and serving the application through Gunicorn and Nginx. <\/p>\n<p class=\"read-more-container\"><a href=\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/\" class=\"read-more button\">Read more<\/a><\/p>\n","protected":false},"author":91,"featured_media":8312,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-11361","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-50","no-featured-image-padding"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Install Horilla on AlmaLinux: Step-by-Step Guide<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Install Horilla on AlmaLinux: Step-by-Step Guide\" \/>\n<meta property=\"og:description\" content=\"Horilla is an open source human resource management system built with Python and Django, and AlmaLinux provides a stable enterprise Linux base for hosting it. A typical installation involves preparing the server, installing Python and PostgreSQL, cloning the Horilla source code, configuring environment settings, running database migrations, and serving the application through Gunicorn and Nginx. Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"Resize my Image Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webfactoryltd\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-11T22:47:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-11T22:55:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2019\/12\/resize-my-image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"338\" \/>\n\t<meta property=\"og:image:height\" content=\"378\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jame Miller\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webfactoryltd\" \/>\n<meta name=\"twitter:site\" content=\"@webfactoryltd\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jame Miller\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/\"},\"author\":{\"name\":\"Jame Miller\",\"@id\":\"https:\/\/resizemyimg.com\/blog\/#\/schema\/person\/4bece8cd1b5bcd61a4e5dab002eb7dca\"},\"headline\":\"Install Horilla on AlmaLinux: Step-by-Step Guide\",\"datePublished\":\"2026-06-11T22:47:59+00:00\",\"dateModified\":\"2026-06-11T22:55:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/\"},\"wordCount\":1498,\"publisher\":{\"@id\":\"https:\/\/resizemyimg.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2025\/10\/a-red-chair-with-eyes-on-it-sitting-next-to-a-white-chair-ready-rocker-portable-rocker-rocking-chair-substitute.jpg\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/\",\"url\":\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/\",\"name\":\"Install Horilla on AlmaLinux: Step-by-Step Guide\",\"isPartOf\":{\"@id\":\"https:\/\/resizemyimg.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2025\/10\/a-red-chair-with-eyes-on-it-sitting-next-to-a-white-chair-ready-rocker-portable-rocker-rocking-chair-substitute.jpg\",\"datePublished\":\"2026-06-11T22:47:59+00:00\",\"dateModified\":\"2026-06-11T22:55:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#primaryimage\",\"url\":\"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2025\/10\/a-red-chair-with-eyes-on-it-sitting-next-to-a-white-chair-ready-rocker-portable-rocker-rocking-chair-substitute.jpg\",\"contentUrl\":\"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2025\/10\/a-red-chair-with-eyes-on-it-sitting-next-to-a-white-chair-ready-rocker-portable-rocker-rocking-chair-substitute.jpg\",\"width\":1080,\"height\":1640},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/resizemyimg.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Install Horilla on AlmaLinux: Step-by-Step Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/resizemyimg.com\/blog\/#website\",\"url\":\"https:\/\/resizemyimg.com\/blog\/\",\"name\":\"Resize my Image Blog\",\"description\":\"News, insights, tips&amp;tricks on image related business &amp; SaaS\",\"publisher\":{\"@id\":\"https:\/\/resizemyimg.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/resizemyimg.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/resizemyimg.com\/blog\/#organization\",\"name\":\"WebFactory Ltd\",\"url\":\"https:\/\/resizemyimg.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/resizemyimg.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2019\/12\/webfactory_icon.png\",\"contentUrl\":\"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2019\/12\/webfactory_icon.png\",\"width\":300,\"height\":300,\"caption\":\"WebFactory Ltd\"},\"image\":{\"@id\":\"https:\/\/resizemyimg.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webfactoryltd\/\",\"https:\/\/x.com\/webfactoryltd\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/resizemyimg.com\/blog\/#\/schema\/person\/4bece8cd1b5bcd61a4e5dab002eb7dca\",\"name\":\"Jame Miller\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/resizemyimg.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f60a3114f608fcfdd6b15a13f37f24b2?s=96&d=monsterid&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f60a3114f608fcfdd6b15a13f37f24b2?s=96&d=monsterid&r=g\",\"caption\":\"Jame Miller\"},\"description\":\"I'm Jame Miller, a cybersecurity analyst and blogger. Sharing knowledge on online security, data protection, and privacy issues is what I do best.\",\"url\":\"https:\/\/resizemyimg.com\/blog\/author\/jamesm\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Install Horilla on AlmaLinux: Step-by-Step Guide","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/","og_locale":"en_US","og_type":"article","og_title":"Install Horilla on AlmaLinux: Step-by-Step Guide","og_description":"Horilla is an open source human resource management system built with Python and Django, and AlmaLinux provides a stable enterprise Linux base for hosting it. A typical installation involves preparing the server, installing Python and PostgreSQL, cloning the Horilla source code, configuring environment settings, running database migrations, and serving the application through Gunicorn and Nginx. Read more","og_url":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/","og_site_name":"Resize my Image Blog","article_publisher":"https:\/\/www.facebook.com\/webfactoryltd\/","article_published_time":"2026-06-11T22:47:59+00:00","article_modified_time":"2026-06-11T22:55:46+00:00","og_image":[{"width":338,"height":378,"url":"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2019\/12\/resize-my-image.png","type":"image\/png"}],"author":"Jame Miller","twitter_card":"summary_large_image","twitter_creator":"@webfactoryltd","twitter_site":"@webfactoryltd","twitter_misc":{"Written by":"Jame Miller","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#article","isPartOf":{"@id":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/"},"author":{"name":"Jame Miller","@id":"https:\/\/resizemyimg.com\/blog\/#\/schema\/person\/4bece8cd1b5bcd61a4e5dab002eb7dca"},"headline":"Install Horilla on AlmaLinux: Step-by-Step Guide","datePublished":"2026-06-11T22:47:59+00:00","dateModified":"2026-06-11T22:55:46+00:00","mainEntityOfPage":{"@id":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/"},"wordCount":1498,"publisher":{"@id":"https:\/\/resizemyimg.com\/blog\/#organization"},"image":{"@id":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2025\/10\/a-red-chair-with-eyes-on-it-sitting-next-to-a-white-chair-ready-rocker-portable-rocker-rocking-chair-substitute.jpg","articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/","url":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/","name":"Install Horilla on AlmaLinux: Step-by-Step Guide","isPartOf":{"@id":"https:\/\/resizemyimg.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#primaryimage"},"image":{"@id":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2025\/10\/a-red-chair-with-eyes-on-it-sitting-next-to-a-white-chair-ready-rocker-portable-rocker-rocking-chair-substitute.jpg","datePublished":"2026-06-11T22:47:59+00:00","dateModified":"2026-06-11T22:55:46+00:00","breadcrumb":{"@id":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#primaryimage","url":"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2025\/10\/a-red-chair-with-eyes-on-it-sitting-next-to-a-white-chair-ready-rocker-portable-rocker-rocking-chair-substitute.jpg","contentUrl":"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2025\/10\/a-red-chair-with-eyes-on-it-sitting-next-to-a-white-chair-ready-rocker-portable-rocker-rocking-chair-substitute.jpg","width":1080,"height":1640},{"@type":"BreadcrumbList","@id":"https:\/\/resizemyimg.com\/blog\/install-horilla-on-almalinux-step-by-step-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/resizemyimg.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Install Horilla on AlmaLinux: Step-by-Step Guide"}]},{"@type":"WebSite","@id":"https:\/\/resizemyimg.com\/blog\/#website","url":"https:\/\/resizemyimg.com\/blog\/","name":"Resize my Image Blog","description":"News, insights, tips&amp;tricks on image related business &amp; SaaS","publisher":{"@id":"https:\/\/resizemyimg.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/resizemyimg.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/resizemyimg.com\/blog\/#organization","name":"WebFactory Ltd","url":"https:\/\/resizemyimg.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/resizemyimg.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2019\/12\/webfactory_icon.png","contentUrl":"https:\/\/resizemyimg.com\/blog\/wp-content\/uploads\/2019\/12\/webfactory_icon.png","width":300,"height":300,"caption":"WebFactory Ltd"},"image":{"@id":"https:\/\/resizemyimg.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webfactoryltd\/","https:\/\/x.com\/webfactoryltd"]},{"@type":"Person","@id":"https:\/\/resizemyimg.com\/blog\/#\/schema\/person\/4bece8cd1b5bcd61a4e5dab002eb7dca","name":"Jame Miller","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/resizemyimg.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f60a3114f608fcfdd6b15a13f37f24b2?s=96&d=monsterid&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f60a3114f608fcfdd6b15a13f37f24b2?s=96&d=monsterid&r=g","caption":"Jame Miller"},"description":"I'm Jame Miller, a cybersecurity analyst and blogger. Sharing knowledge on online security, data protection, and privacy issues is what I do best.","url":"https:\/\/resizemyimg.com\/blog\/author\/jamesm\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/resizemyimg.com\/blog\/wp-json\/wp\/v2\/posts\/11361"}],"collection":[{"href":"https:\/\/resizemyimg.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/resizemyimg.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/resizemyimg.com\/blog\/wp-json\/wp\/v2\/users\/91"}],"replies":[{"embeddable":true,"href":"https:\/\/resizemyimg.com\/blog\/wp-json\/wp\/v2\/comments?post=11361"}],"version-history":[{"count":1,"href":"https:\/\/resizemyimg.com\/blog\/wp-json\/wp\/v2\/posts\/11361\/revisions"}],"predecessor-version":[{"id":11369,"href":"https:\/\/resizemyimg.com\/blog\/wp-json\/wp\/v2\/posts\/11361\/revisions\/11369"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/resizemyimg.com\/blog\/wp-json\/wp\/v2\/media\/8312"}],"wp:attachment":[{"href":"https:\/\/resizemyimg.com\/blog\/wp-json\/wp\/v2\/media?parent=11361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/resizemyimg.com\/blog\/wp-json\/wp\/v2\/categories?post=11361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/resizemyimg.com\/blog\/wp-json\/wp\/v2\/tags?post=11361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}