{"id":1037,"date":"2026-11-08T18:00:00","date_gmt":"2026-11-08T18:00:00","guid":{"rendered":"https:\/\/vpslake.com\/blog\/?p=1037"},"modified":"2026-11-08T18:00:00","modified_gmt":"2026-11-08T18:00:00","slug":"install-craft-cms-lemp-almalinux-8","status":"publish","type":"post","link":"https:\/\/vpslake.com\/blog\/2026\/11\/08\/install-craft-cms-lemp-almalinux-8\/","title":{"rendered":"How to Install Craft CMS with LEMP on AlmaLinux 8"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Install Craft CMS with LEMP Stack on AlmaLinux 8 by placing the current Craft starter project behind Nginx, PHP-FPM, MariaDB, and HTTPS. With DNS already pointed to the VPS, you can reach the Craft control panel in about 15\u201320 minutes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>AlmaLinux 8.10 or another fully updated AlmaLinux 8 system, with 2 vCPUs, at least 2 GB RAM, and 10 GB of free disk space.<\/li>\n\n\n<li>Root access or a sudo-enabled account over SSH. The commands below use <code>sudo<\/code>.<\/li>\n\n\n<li>A domain such as <code>YOUR_DOMAIN<\/code> with an A record pointing to the VPS. Ports 80 and 443 must be reachable for the certificate request.<\/li>\n\n\n<li>A unique database password, a separate Craft administrator password, and an email address for certificate notices.<\/li>\n\n\n<li>A <a href=\"https:\/\/vpslake.com\/buy-vps\">VPSLake Linux VPS<\/a> with a public IPv4 address is a suitable host for this stack.<\/li>\n\n\n<li>Do not run Apache on ports 80 or 443; this guide uses Nginx as the web server.<\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Craft 5 requires PHP 8.2 or newer, Composer 2, and MySQL 8.0.17+ or MariaDB 10.4.6+. This guide uses PHP 8.3 and MariaDB 10.11, which are available on AlmaLinux 8 through maintained upstream repositories. Review Craft\u2019s <a href=\"https:\/\/craftcms.com\/docs\/5.x\/requirements\" target=\"_blank\" rel=\"noopener\">official requirements<\/a> before deploying a high-traffic site.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Install PHP, Nginx, MariaDB, and Composer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">AlmaLinux 8\u2019s built-in PHP and MariaDB streams can be older than Craft\u2019s minimums, so enable the Remi PHP stream and MariaDB\u2019s 10.11 repository before installing the stack.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dnf update -y\nsudo dnf install -y epel-release firewalld nginx curl unzip tar policycoreutils-python-utils\nsudo curl -LsS https:\/\/r.mariadb.com\/downloads\/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version=\"mariadb-10.11\"\nsudo dnf install -y MariaDB-server MariaDB-client\nsudo dnf install -y https:\/\/rpms.remirepo.net\/enterprise\/remi-release-8.rpm\nsudo dnf module reset php -y\nsudo dnf module enable php:remi-8.3 -y\nsudo dnf install -y php php-bcmath php-cli php-common php-curl php-fpm php-gd php-intl php-mbstring php-mysqlnd php-opcache php-process php-xml php-zip\nsudo sed -ri 's\/^[; ]*user = .*\/user = nginx\/; s\/^[; ]*group = .*\/group = nginx\/; s\/^[; ]*listen.owner = .*\/listen.owner = nginx\/; s\/^[; ]*listen.group = .*\/listen.group = nginx\/' \/etc\/php-fpm.d\/www.conf\nsudo sed -ri 's\/^memory_limit = .*\/memory_limit = 512M\/; s\/^upload_max_filesize = .*\/upload_max_filesize = 64M\/; s\/^post_max_size = .*\/post_max_size = 64M\/; s\/^max_execution_time = .*\/max_execution_time = 120\/' \/etc\/php.ini\nsudo systemctl enable --now firewalld mariadb nginx php-fpm<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Install Composer 2 from its official installer, then check that the command-line PHP version and required extensions are visible. The installer checksum check prevents a damaged download from being executed.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo curl -fsSL https:\/\/getcomposer.org\/installer -o \/tmp\/composer-setup.php\nEXPECTED_CHECKSUM=\"$(curl -fsSL https:\/\/composer.github.io\/installer.sig)\"\nACTUAL_CHECKSUM=\"$(php -r \"echo hash_file('sha384', '\/tmp\/composer-setup.php');\")\"\ntest \"$EXPECTED_CHECKSUM\" = \"$ACTUAL_CHECKSUM\"\nsudo php \/tmp\/composer-setup.php --install-dir=\/usr\/local\/bin --filename=composer\nrm -f \/tmp\/composer-setup.php\nphp -v\ncomposer --version\nmariadb --version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You should see PHP 8.3.x, Composer 2.x, and MariaDB 10.11.x. Patch numbers change as the repositories publish updates.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Create the Craft database<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Craft stores content, users, and project configuration in MariaDB, so give this site a local-only account with privileges limited to its own database.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mariadb &lt;&lt;'SQL'\nCREATE DATABASE craftcms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'craft_user'@'localhost' IDENTIFIED BY 'YOUR_DB_PASSWORD';\nGRANT ALL PRIVILEGES ON craftcms.* TO 'craft_user'@'localhost';\nFLUSH PRIVILEGES;\nSQL\nsudo mariadb -e \"SHOW DATABASES LIKE 'craftcms';\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <code>YOUR_DB_PASSWORD<\/code> with a long, unique password before running the block. The final command should print a row named <code>craftcms<\/code>; MariaDB does not need a public firewall rule because PHP connects through localhost.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Create the Craft project and apply SELinux-safe permissions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Craft\u2019s Composer starter project provides the current application structure, while using <code>web\/<\/code> as the document root keeps <code>.env<\/code>, <code>config<\/code>, and <code>vendor<\/code> outside the public URL space.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create the project without running its interactive post-install setup. This lets you prepare the database and permissions first.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo composer create-project craftcms\/craft \/var\/www\/craft --no-scripts\nsudo install -d -o root -g nginx -m 0770 \/var\/www\/craft\/storage \/var\/www\/craft\/config\/project \/var\/www\/craft\/web\/cpresources\nsudo install -o root -g nginx -m 0660 \/dev\/null \/var\/www\/craft\/.env\nsudo tee \/var\/www\/craft\/.env &gt; \/dev\/null &lt;&lt;'ENV'\nPRIMARY_SITE_URL=\"https:\/\/YOUR_DOMAIN\/\"\nCRAFT_DB_DRIVER=mysql\nCRAFT_DB_SERVER=localhost\nCRAFT_DB_PORT=3306\nCRAFT_DB_DATABASE=craftcms\nCRAFT_DB_USER=craft_user\nCRAFT_DB_PASSWORD=\"YOUR_DB_PASSWORD\"\nCRAFT_DB_SCHEMA=\nCRAFT_DB_TABLE_PREFIX=\nENV\nsudo chown -R root:nginx \/var\/www\/craft\nsudo find \/var\/www\/craft -type d -exec chmod 0750 {} \\;\nsudo find \/var\/www\/craft -type f -exec chmod 0640 {} \\;\nsudo chmod 0660 \/var\/www\/craft\/.env\nsudo chmod 0770 \/var\/www\/craft\/config \/var\/www\/craft\/storage \/var\/www\/craft\/config\/project \/var\/www\/craft\/web\/cpresources\nsudo find \/var\/www\/craft\/storage \/var\/www\/craft\/config\/project \/var\/www\/craft\/web\/cpresources -type d -exec chmod 0770 {} \\;\nsudo find \/var\/www\/craft\/storage \/var\/www\/craft\/config\/project \/var\/www\/craft\/web\/cpresources -type f -exec chmod 0660 {} \\;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <code>YOUR_DOMAIN<\/code> and <code>YOUR_DB_PASSWORD<\/code> in the <code>.env<\/code> block with the same values used earlier. Craft needs PHP to write <code>storage<\/code>, <code>config\/license.key<\/code>, and <code>web\/cpresources<\/code> during installation; these group-writable directories provide that access without making the whole tree world-writable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Persist the SELinux labels so the permissions survive relabeling or a reboot. SELinux stays enforcing throughout this setup.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo semanage fcontext -a -t httpd_sys_content_t '\/var\/www\/craft(\/.*)?'\nsudo semanage fcontext -a -t httpd_sys_rw_content_t '\/var\/www\/craft\/(config|storage|web\/cpresources)(\/.*)?'\nsudo restorecon -Rv \/var\/www\/craft\nsudo -u nginx env HOME=\/var\/lib\/nginx php \/var\/www\/craft\/craft setup\/app-id\nsudo -u nginx env HOME=\/var\/lib\/nginx php \/var\/www\/craft\/craft setup\/security-key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The last two commands generate the application ID and security key in <code>.env<\/code>. Their output should end with a success message rather than a permission error.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Configure Nginx for Craft<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Craft routes requests through its front controller, so Nginx must serve the <code>web\/<\/code> directory and send unknown paths to <code>web\/index.php<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create <code>\/etc\/nginx\/conf.d\/craft.conf<\/code> with the following server block:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tee \/etc\/nginx\/conf.d\/craft.conf &gt; \/dev\/null &lt;&lt;'NGINX'\nserver {\n    listen 80;\n    listen [::]:80;\n    server_name YOUR_DOMAIN;\n\n    root \/var\/www\/craft\/web;\n    index index.php;\n    client_max_body_size 64m;\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php?$query_string;\n    }\n\n    location ~ \\.php$ {\n        try_files $uri =404;\n        include fastcgi_params;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        fastcgi_param HTTP_PROXY \"\";\n        fastcgi_pass unix:\/run\/php-fpm\/www.sock;\n    }\n\n    location ~ \/\\.(?!well-known) {\n        deny all;\n    }\n}\nNGINX\nsudo nginx -t\nsudo systemctl reload nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <code>YOUR_DOMAIN<\/code> before running the block. The test should return <code>syntax is ok<\/code> and <code>test is successful<\/code>; if it does not, Nginx will keep the previous working configuration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Open the firewall and enable HTTPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Allow only the services needed for administration and web traffic, then let Certbot add the TLS server block and HTTP-to-HTTPS redirect.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo firewall-cmd --permanent --zone=public --add-service=ssh\nsudo firewall-cmd --permanent --zone=public --add-service=http\nsudo firewall-cmd --permanent --zone=public --add-service=https\nsudo firewall-cmd --reload\nsudo firewall-cmd --list-services\nsudo dnf install -y certbot python3-certbot-nginx\nsudo certbot --nginx --redirect --agree-tos --no-eff-email -m YOUR_EMAIL -d YOUR_DOMAIN<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <code>YOUR_EMAIL<\/code> with an address you monitor. Certbot must resolve <code>YOUR_DOMAIN<\/code> to this VPS and reach port 80 from the internet. Its success output includes the certificate path and a message that HTTPS was enabled.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Finish the Craft installation in the browser<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The browser wizard creates the first administrator and runs Craft\u2019s database migrations after the server-side project is ready.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open <code>https:\/\/YOUR_DOMAIN\/admin\/install<\/code> and follow the setup screens. If the database form appears, use <code>craftcms<\/code> for the database, <code>craft_user<\/code> for the username, <code>localhost<\/code> for the server, port <code>3306<\/code>, and the password from Step 2. Create a long, unique administrator password and keep it in a password manager.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After the wizard reports a successful installation, check the application from SSH:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/var\/www\/craft\nsudo -u nginx env HOME=\/var\/lib\/nginx php craft install\/check\nsudo systemctl reload nginx<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The check should report that Craft is installed. Craft\u2019s <a href=\"https:\/\/craftcms.com\/knowledge-base\/setting-up-a-server-for-craft\" target=\"_blank\" rel=\"noopener\">server setup guidance<\/a> explains why the public root must remain the project\u2019s <code>web\/<\/code> directory.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verify the Craft installation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run these checks, then sign in to the control panel and load the site\u2019s front page. Together they confirm the services, PHP extensions, Nginx configuration, database connection, and public certificate.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl is-active nginx php-fpm mariadb firewalld\nsudo nginx -t\nphp -m | grep -E 'bcmath|curl|gd|intl|mbstring|mysqli|PDO|xml|zip'\ncd \/var\/www\/craft\nsudo -u nginx env HOME=\/var\/lib\/nginx php craft install\/check\ncurl -fsSI https:\/\/YOUR_DOMAIN\/<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>active\nactive\nactive\nactive\nsyntax is ok\ntest is successful\nHTTP\/2 200<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The PHP module order can differ, and the first page may return a redirect to the control panel. A successful login at <code>https:\/\/YOUR_DOMAIN\/admin<\/code> and a working front page are the final confirmation.<\/p>\n\n\n\n<aside class=\"vl-element vl-cta-banner\" aria-label=\"Host Craft CMS securely\">\n\t<div class=\"vl-cta-banner__content\">\n\t\t<p class=\"vl-cta-banner__eyebrow\">AlmaLinux VPS<\/p>\n\t\t<h3 class=\"vl-cta-banner__title\">Host Craft CMS securely<\/h3>\n\t\t<p class=\"vl-cta-banner__text\">Deploy a Craft CMS site with Nginx, PHP, MariaDB, and HTTPS.<\/p>\n\t<\/div>\n\t<a class=\"vl-cta-banner__button\" href=\"\/buy-vps\" aria-label=\"View Linux VPS plans\">View Linux VPS plans<\/a>\n<\/aside>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">502 Bad Gateway<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nginx cannot reach PHP-FPM, usually because the service is stopped or the pool socket is owned by the wrong account. Confirm the socket exists and restart the services after applying the pool changes from Step 1.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl status php-fpm --no-pager\nsudo ls -l \/run\/php-fpm\/www.sock\nsudo systemctl restart php-fpm nginx<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Composer reports a missing PHP extension<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Composer may be using a different PHP binary than PHP-FPM, or an extension was omitted from the Remi stream. Run <code>php -v<\/code> and <code>php --ini<\/code>, install the missing <code>php-*<\/code> package with DNF, then restart PHP-FPM and repeat the Composer command.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><code>SQLSTATE[HY000] [1045] Access denied<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The database password in <code>.env<\/code> does not match the MariaDB account, or the account was created for a different host. Re-run <code>sudo mariadb -e \"SELECT User,Host FROM mysql.user WHERE User='craft_user';\"<\/code>, make sure the row is <code>craft_user | localhost<\/code>, and update the password in <code>.env<\/code> if necessary.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The installer returns a permission denied or 403 error<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Check both Unix ownership and SELinux labels. Run <code>sudo restorecon -Rv \/var\/www\/craft<\/code>, verify that <code>storage<\/code>, <code>config<\/code>, and <code>web\/cpresources<\/code> are group-writable by <code>nginx<\/code>, and confirm that Nginx\u2019s <code>root<\/code> points to <code>\/var\/www\/craft\/web<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Certbot cannot validate <code>YOUR_DOMAIN<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">DNS may still point to another address, or an upstream VPS firewall may block port 80. Confirm <code>dig +short YOUR_DOMAIN<\/code> returns the server IP, allow HTTP in the VPS control panel, and run Certbot again after DNS has updated.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hardening and maintenance<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Keep the host updated with <code>sudo dnf update -y<\/code> and back up the MariaDB database plus Craft\u2019s <code>storage<\/code> and uploaded assets before upgrades.<\/li>\n\n\n<li>Do not expose MariaDB on the public interface. Keep port 3306 closed and use SSH tunneling for administrative database access.<\/li>\n\n\n<li>Test certificate renewal with <code>sudo certbot renew --dry-run<\/code> and keep the certificate renewal timer enabled.<\/li>\n\n\n<li>Run Craft and Composer updates during a maintenance window, keep <code>composer.lock<\/code> under version control, and use <code>php craft up<\/code> after deploying dependency changes.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Can I install Craft CMS without a domain?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can test the site over the VPS IP address, but a domain is the practical choice for a production installation. Let\u2019s Encrypt validation in this guide requires a DNS name, and Craft\u2019s generated site URL should match the hostname visitors use.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why does Nginx point to the <code>web<\/code> directory?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Craft keeps application code, Composer dependencies, and environment secrets above the public web root. Serving only <code>\/var\/www\/craft\/web<\/code> prevents visitors from requesting files such as <code>.env<\/code> or <code>composer.json<\/code> directly.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Is MariaDB supported by Craft CMS?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. Craft 5 lists MariaDB 10.4.6 or newer as a minimum, and this guide installs the maintained 10.11 series. Craft\u2019s documentation notes that MySQL is the better choice for sites with many users or a large content volume because MariaDB and MySQL no longer have complete feature parity.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How do I update Craft after this installation?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Back up the database and project first, then run Composer in <code>\/var\/www\/craft<\/code> to install the versions recorded in your project files. Finish with <code>php craft up<\/code> so Craft applies database migrations and project configuration changes.<\/p>\n\n\n\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Can I install Craft CMS without a domain?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"You can test the site over the VPS IP address, but a domain is the practical choice for a production installation. Let\u2019s Encrypt validation in this guide requires a DNS name, and Craft\u2019s generated site URL should match the hostname visitors use.\"}}, {\"@type\": \"Question\", \"name\": \"Why does Nginx point to the `web` directory?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Craft keeps application code, Composer dependencies, and environment secrets above the public web root. Serving only `\/var\/www\/craft\/web` prevents visitors from requesting files such as `.env` or `composer.json` directly.\"}}, {\"@type\": \"Question\", \"name\": \"Is MariaDB supported by Craft CMS?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Craft 5 lists MariaDB 10.4.6 or newer as a minimum, and this guide installs the maintained 10.11 series. Craft\u2019s documentation notes that MySQL is the better choice for sites with many users or a large content volume because MariaDB and MySQL no longer have complete feature parity.\"}}, {\"@type\": \"Question\", \"name\": \"How do I update Craft after this installation?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Back up the database and project first, then run Composer in `\/var\/www\/craft` to install the versions recorded in your project files. Finish with `php craft up` so Craft applies database migrations and project configuration changes.\"}}]}<\/script>\n\n","protected":false},"excerpt":{"rendered":"Install Craft CMS with LEMP Stack on AlmaLinux 8 using PHP 8.3, Nginx, MariaDB, Composer, SELinux-safe permissions, and HTTPS on a fresh VPS.","protected":false},"author":1,"featured_media":1038,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_singular_sidebar":"","csco_page_header_type":"","csco_page_load_nextpost":"","footnotes":""},"categories":[5,9],"tags":[94,136,124,125,72],"class_list":["post-1037","post","type-post","status-publish","format-standard","has-post-thumbnail","category-guides","category-vps-hosting","tag-almalinux-8","tag-craft-cms","tag-lemp","tag-nginx","tag-php","cs-entry"],"_links":{"self":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/1037","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/comments?post=1037"}],"version-history":[{"count":1,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/1037\/revisions"}],"predecessor-version":[{"id":3945,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/1037\/revisions\/3945"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media\/1038"}],"wp:attachment":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media?parent=1037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/categories?post=1037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/tags?post=1037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}