{"id":533,"date":"2022-07-11T16:31:53","date_gmt":"2023-01-06T05:34:20","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/uncategorized\/how-to-install-and-configure-strapi-for-production-on-ubuntu-22-04\/"},"modified":"2024-03-04T15:44:22","modified_gmt":"2024-03-04T15:44:22","slug":"strapi-installation-configuration-on-ubuntu","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/","title":{"rendered":"Strapi installation and configuration for Production on Ubuntu 22.04"},"content":{"rendered":"<h3>In the beginning<\/h3>\n<p>Strapi is a JavaScript-based, open-source <a href=\"https:\/\/en.wikipedia.org\/wiki\/Content_management_system\">Content Management System (CMS)<\/a> that doesn&#8217;t have a default frontend. It provides an API for designing your content structure and supports various frameworks such as React and Next.js for website development. Furthermore, you have the flexibility to select between a REST API or GraphQL to consume the API.<\/p>\n<p>In this guide, you will learn how to install Strapi and prepare a production environment to start generating content. Despite Strapi using SQLite during development, you will customize it to utilize PostgreSQL. Additionally, you will deploy your Strapi application behind an Nginx reverse proxy and employ the PM2 process manager for reliable uptime. Lastly, you will enhance the security of your Nginx connection by implementing Let&#8217;s Encrypt.<\/p>\n<h2>Requirements<\/h2>\n<p>In order to proceed with this tutorial, there are certain things that you will require.<\/p>\n<ul class=\"post-ul\">\n<li>An Ubuntu 22.04 server set up by following our Initial Server Setup GuideStrapi recommends a server with at least 2 CPU cores and 4GB of RAM. This tutorial will assume your server meets the recommended hardware specifications.<\/li>\n<li>Node.js version 16.xx installed on your server. Follow Option 2 in our How To Install Node.js on Ubuntu 22.04 tutorial.Make sure to replace version 18.xx with 16.xx via the PPA option. Strapi may not work properly with Node versions beyond 16 at the time of this writing. Specifically, Node v16.18.1 is used in this tutorial.<\/li>\n<li>PostgreSQL installed by following Step 1 of our How To Install and Use PostgreSQL on Ubuntu 22.04 tutorial.<\/li>\n<li>Nginx installed and configured as a reverse proxy. Follow Steps 1 and 2 of our How To Configure Nginx as a Reverse Proxy tutorial.When configuring the address of the application server to proxy, use http:\/\/localhost:1337 as the app_server_address.<\/li>\n<li>A domain name pointed at your server\u2019s public IP. This will be configured with Nginx to proxy your application server.<\/li>\n<\/ul>\n<p>Once you have Node.js version 16, Nginx, and Postgres installed on your server, you can proceed with the tutorial.<\/p>\n<h2>First, set up your Postgres database.<\/h2>\n<p>A database is essential for every Strapi project. Presently, Strapi is compatible with MySQL, MariaDB, SQlite, and PostgreSQL. The official documentation provides information about the minimum version requirements. Additionally, Strapi necessitates a new database, hence you cannot utilize an already existing database for your Strapi instance.<\/p>\n<p>To start with, establish a database.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">sudo<\/span> <span class=\"token parameter variable\">-i<\/span> <span class=\"token parameter variable\">-u<\/span> postgres createdb <mark>strapi-db<\/mark><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Next, establish a user account specifically for your database.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">sudo<\/span> <span class=\"token parameter variable\">-i<\/span> <span class=\"token parameter variable\">-u<\/span> postgres createuser <span class=\"token parameter variable\">&#8211;interactive<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Enter name of role to add: <mark>sammy<\/mark> Shall the new role be a superuser? (y\/n) <mark>y<\/mark><\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>By default, when using PostgreSQL, you verify your identity as a database user through the Identification Protocol or ident authentication method. This process involves PostgreSQL using your Ubuntu username as the database username. While this adds an extra layer of security in most situations, it can create problems when you want to establish a connection between an external program like Strapi and one of your databases. To overcome this, you need to assign a password to the PostgreSQL role in order to enable Strapi to connect to your database.<\/p>\n<p>You can access the PostgreSQL prompt by opening it from your terminal.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">sudo<\/span> <span class=\"token parameter variable\">-u<\/span> <mark>postgres<\/mark> psql<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>From the PostgreSQL prompt, modify the user profile by assigning a robust password of your preference.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"postgres=#\">ALTER <span class=\"token environment constant\">USER<\/span> <mark>sammy<\/mark> PASSWORD <span class=\"token string\">&#8216;<mark>postgres_password<\/mark>&#8216;<\/span><span class=\"token punctuation\">;<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>To exit your PostgreSQL user, simply enter &#8220;\\q&#8221; in your terminal.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"postgres=#\"><span class=\"token punctuation\">\\<\/span>q<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Once you have created your database and user credentials, you can proceed with the installation of Strapi.<\/p>\n<h2>Second step &#8211; Setting up Strapi on Your Server.<\/h2>\n<p>To successfully install Strapi on your server, simply input the given command:<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\">npx create-strapi-app@latest <mark>my-project<\/mark><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>To proceed with the installation, please confirm with a &#8220;yes&#8221;.<\/p>\n<p>Once you confirm your selection, you will be able to interact with an installation. Ensure that you modify the Database name, Username, and Password correctly as you choose the following options.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>? Choose your installation type <mark>Custom (manual settings)<\/mark> ? Choose your preferred language <mark>JavaScript<\/mark> ? Choose your default database client <mark>postgres<\/mark> ? Database name: <mark>strapi-db<\/mark> ? Host: <mark>127.0.0.1<\/mark> ? Port: <mark>5432<\/mark> ? Username: <mark>sammy<\/mark> ? Password: <mark>postgres_password<\/mark> ? Enable SSL connection: <mark>No<\/mark><\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>The SSL connection will not be activated at this time. It will be set up and acquired using a Let\u2019s Encrypt certificate in the later part of the tutorial. Strapi installation will commence once you have made your choices.<\/p>\n<p>After the installation is finished, you can proceed with developing your Strapi project.<\/p>\n<p>Firstly, ensure that you are in the my-project folder.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token builtin class-name\">cd<\/span> <mark>my-project<\/mark><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Afterward, execute the subsequent instruction:<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token assign-left variable\">NODE_ENV<\/span><span class=\"token operator\">=<\/span>production <span class=\"token function\">npm<\/span> run build<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&gt; my-project@0.1.0 build &gt; strapi build Building your admin UI with production configuration&#8230; \u2714 Webpack Compiled successfully in 35.44s Admin UI built successfully<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Running this command will construct your Strapi project, which includes the Strapi admin user interface.<\/p>\n<p>To test your Strapi server, you can now execute the following command to directly launch it:<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">node<\/span> \/home\/<mark>sammy<\/mark>\/my-project\/node_modules\/.bin\/strapi start<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>[2022-11-21 13:54:24.671] info: The Users &amp; Permissions plugin automatically generated a jwt secret and stored it in .env under the name JWT_SECRET. Project information \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 Time \u2502 Mon Nov 21 2022 13:54:24 GMT+0000 (Coordinated \u2026 \u2502 \u2502 Launched in \u2502 1603 ms \u2502 \u2502 Environment \u2502 development \u2502 \u2502 Process PID \u2502 4743 \u2502 \u2502 Version \u2502 4.5.4 (node v16.18.1) \u2502 \u2502 Edition \u2502 Community \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 Actions available One more thing&#8230; Create your first administrator \ud83d\udcbb by going to the administration panel at: \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 http:\/\/localhost:1337\/admin \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Provided that you have followed the necessary requirements, Nginx has been configured as a reverse proxy for accessing Strapi&#8217;s default address at http:\/\/localhost:1337. To see the default Strapi landing page, simply type http:\/\/your_domain on your browser.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655c73d0c40ba52feef1efbe\/40-0.png\" alt=\"Strapi landing page after initial 'build' and \u2018start\u2019 command.\" \/><\/div>\n<p>The current setting of this command is using Strapi\u2019s development mode. It also depends on a terminal command, which is not appropriate for production. In the next phase, you will include production configurations into a process manager known as PM2.<\/p>\n<p>To leave your server, simply hit the CTRL+c key combination.<\/p>\n<p>Once you have Strapi installed, you can proceed to configure PM2 to run your server as a background service.<\/p>\n<h2>Step 3 involves the installation and setup of PM2.<\/h2>\n<p>Instead of manually starting the server, you can depend on PM2 for handling this task. To learn more about PM2 and configuring a Node.js application ready for production, refer to our comprehensive guide. PM2 ensures that your server remains operational without the need for manual startup, guaranteeing uninterrupted service.<\/p>\n<p>To begin with, ensure that you are in the highest-level directory.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token builtin class-name\">cd<\/span> ~<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Afterwards, use the following command to install PM2:<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">sudo<\/span> <span class=\"token function\">npm<\/span> <span class=\"token function\">install<\/span> pm2@latest <span class=\"token parameter variable\">-g<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Next, use your preferred text editor to create a configuration file for PM2. In this example, nano is utilized.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">sudo<\/span> <span class=\"token function\">nano<\/span> ecosystem.config.js<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Please include the provided information in the file by making the necessary modifications to the project directory name, path, database name, user, and password.<\/p>\n<div>One possible paraphrase of &#8220;ecosystem.config.js&#8221; could be &#8220;configuration file for the ecosystem&#8221;<\/div>\n<pre class=\"post-pre\"><code>module<span class=\"token punctuation\">.<\/span>exports <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\r\n  <span class=\"token literal-property property\">apps<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span>\r\n    <span class=\"token punctuation\">{<\/span>\r\n      <span class=\"token literal-property property\">name<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'<mark>strapi<\/mark>'<\/span><span class=\"token punctuation\">,<\/span>\r\n      <span class=\"token literal-property property\">cwd<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'\/home\/<mark>sammy\/my-project<\/mark>'<\/span><span class=\"token punctuation\">,<\/span>\r\n      <span class=\"token literal-property property\">script<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'npm'<\/span><span class=\"token punctuation\">,<\/span>\r\n      <span class=\"token literal-property property\">args<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'start'<\/span><span class=\"token punctuation\">,<\/span>\r\n      <span class=\"token literal-property property\">env<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token constant\">NODE_ENV<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'production'<\/span><span class=\"token punctuation\">,<\/span>\r\n        <span class=\"token constant\">DATABASE_HOST<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'localhost'<\/span><span class=\"token punctuation\">,<\/span>\r\n        <span class=\"token constant\">DATABASE_PORT<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'5432'<\/span><span class=\"token punctuation\">,<\/span>\r\n        <span class=\"token constant\">DATABASE_NAME<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'<mark>strapi-db<\/mark>'<\/span><span class=\"token punctuation\">,<\/span>\r\n        <span class=\"token constant\">DATABASE_USERNAME<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'<mark>sammy<\/mark>'<\/span><span class=\"token punctuation\">,<\/span>\r\n        <span class=\"token constant\">DATABASE_PASSWORD<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">'<mark>postgres_password<\/mark>'<\/span><span class=\"token punctuation\">,<\/span>\r\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\r\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\r\n  <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p>Once you have made changes to the PM2 configuration, close the file. In case you are using nano, simply press CTRL+x, followed by y, and then press ENTER.<\/p>\n<p>To execute your Strapi instance in the background, use the given command.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\">pm2 start ecosystem.config.js<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>[PM2][WARN] Applications strapi not running, starting&#8230; [PM2] App [strapi] launched (1 instances) \u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 id \u2502 name \u2502 namespace \u2502 version \u2502 mode \u2502 pid \u2502 uptime \u2502 \u21ba \u2502 status \u2502 cpu \u2502 mem \u2502 user \u2502 watching \u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502 0 \u2502 strapi \u2502 default \u2502 N\/A \u2502 fork \u2502 22608 \u2502 0s \u2502 0 \u2502 online \u2502 0% \u2502 30.3mb \u2502 sammy \u2502 disabled \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>If an application crashes or is terminated, applications running under PM2 will automatically restart. To initiate your Strapi instance at startup, execute the subsequent subcommand.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\">pm2 startup<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>[PM2] Init System found: systemd [PM2] To setup the Startup Script, copy\/paste the following command: sudo env PATH=$PATH:\/usr\/bin \/usr\/lib\/node_modules\/pm2\/bin\/pm2 startup systemd -u <mark>sammy<\/mark> &#8211;hp \/home\/<mark>sammy<\/mark><\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>A startup script is created and customized to automatically initiate PM2 and its managed processes on server startup.<\/p>\n<p>Afterwards, replicate and run the command provided in the result using your own username instead of &#8220;sammy&#8221;.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">sudo<\/span> <span class=\"token function\">env<\/span> <span class=\"token assign-left variable\"><span class=\"token environment constant\">PATH<\/span><\/span><span class=\"token operator\">=<\/span><span class=\"token environment constant\">$PATH<\/span>:\/usr\/bin \/usr\/lib\/node_modules\/pm2\/bin\/pm2 startup systemd <span class=\"token parameter variable\">-u<\/span> <mark>sammy<\/mark> <span class=\"token parameter variable\">&#8211;hp<\/span> \/home\/<mark>sammy<\/mark><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Next, preserve the list of PM2 processes.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\">pm2 save<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Strapi is currently running in production mode on your server with the PM2 service in operation. After returning to http:\/\/your_domain, you can observe this.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655c73d0c40ba52feef1efbe\/68-0.png\" alt=\"Strapi production landing page indicator\" \/><\/div>\n<p>Once PM2 is actively operating your server behind the scenes, you can proceed to complete the process of securing your Strapi instance.<\/p>\n<h2>Step 4 &#8211; Implementing Strapi security through Let&#8217;s Encrypt<\/h2>\n<p>When you accessed your domain to see the Strapi landing page, you might have observed that the URL uses http:\/\/ instead of https:\/\/, indicating an insecure connection.<\/p>\n<p>To ensure the security of your Strapi instance, use the following command to enable Let&#8217;s Encrypt.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">sudo<\/span> snap <span class=\"token function\">install<\/span> <span class=\"token parameter variable\">&#8211;classic<\/span> certbot<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Create a connection between the certbot command in the snap installation directory and your path, enabling you to execute it by simply typing certbot.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">sudo<\/span> <span class=\"token function\">ln<\/span> <span class=\"token parameter variable\">-s<\/span> \/snap\/bin\/certbot \/usr\/bin\/certbot<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Next, enable the Nginx Full profile and permit traffic over HTTPS.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">sudo<\/span> ufw allow <span class=\"token string\">&#8216;Nginx Full&#8217;<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Remove the unnecessary Nginx HTTP profile permission.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">sudo<\/span> ufw delete allow <span class=\"token string\">&#8216;Nginx HTTP&#8217;<\/span><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Next, utilize the Nginx plugin to acquire the certificate by entering your domain address.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<ol>\n<li data-prefix=\"$\"><span class=\"token function\">sudo<\/span> certbot <span class=\"token parameter variable\">&#8211;nginx<\/span> <span class=\"token parameter variable\">-d<\/span> <mark>your_domain<\/mark> <span class=\"token parameter variable\">-d<\/span> www.<mark>your_domain<\/mark><\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>When executing the command, you will be asked to provide an email address and give consent to the terms of service. You can choose whether or not to join an email list. Once you complete this step, you will receive a confirmation message indicating the successful completion of the process and informing you about the location where your certificates are saved.<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<div class=\"secondary-code-label\" title=\"Output\">Output<\/div>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>. . . Successfully received certificate. Certificate is saved at: \/etc\/letsencrypt\/live\/<mark>your_domain<\/mark>\/fullchain.pem Key is saved at: \/etc\/letsencrypt\/live\/<mark>your_domain<\/mark>\/privkey.pem This certificate expires on 2023-02-05. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for <mark>your_domain<\/mark> to \/etc\/nginx\/sites-enabled\/<mark>your_domain<\/mark> Successfully deployed certificate for www.<mark>your_domain<\/mark> \/etc\/nginx\/sites-enabled\/<mark>your_domain<\/mark> Congratulations! You have successfully enabled HTTPS on https:\/\/<mark>your_domain<\/mark> and https:\/\/www.<mark>your_domain<\/mark> . . .<\/p>\n<pre class=\"post-pre\"><code><\/code><\/pre>\n<p>Go to http:\/\/your_domain. You will be redirected to the HTTPS version of your website. Additionally, you can observe that Strapi is operating in production mode.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655c73d0c40ba52feef1efbe\/85-0.png\" alt=\"Strapi production landing page indicator\" \/><\/div>\n<p>To create your Strapi administrator account, you can proceed to https:\/\/your_domain\/admin for navigation.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655c73d0c40ba52feef1efbe\/87-0.png\" alt=\"Strapi sign up landing page\" \/><\/div>\n<p>Once you have entered your new login details, you will be able to access the administrative dashboard.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655c73d0c40ba52feef1efbe\/89-0.png\" alt=\"Strapi's dashboard\" \/><\/div>\n<p>You can begin crafting content on Strapi directly from the dashboard.<\/p>\n<h2>In summary, to conclude<\/h2>\n<p>You will learn in this tutorial how to configure a Strapi production environment utilizing a PostgreSQL database. Additionally, you will deploy your Strapi application with the assistance of an Nginx reverse proxy and maintain server stability with the PM2 process manager.<\/p>\n<p>Once you have successfully established your Strapi server, you may begin generating content through the Strapi administrative dashboard. For further guidance on setting up and customizing your Strapi application, refer to the official documentation provided by Strapi.<\/p>\n<p>&nbsp;<\/p>\n<p>More tutorials<\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/installation-of-arch-linux\/\" target=\"_blank\" rel=\"noopener\">Installation of Arch Linux<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the beginning Strapi is a JavaScript-based, open-source Content Management System (CMS) that doesn&#8217;t have a default frontend. It provides an API for designing your content structure and supports various frameworks such as React and Next.js for website development. Furthermore, you have the flexibility to select between a REST API or GraphQL to consume the [&hellip;]<\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-533","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Strapi installation and configuration for Production on Ubuntu 22.04 - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Strapi is a JavaScript-based, open-source Content Management System (CMS) that doesn&#039;t have a default frontend.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Strapi installation and configuration for Production on Ubuntu 22.04\" \/>\n<meta property=\"og:description\" content=\"Strapi is a JavaScript-based, open-source Content Management System (CMS) that doesn&#039;t have a default frontend.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-06T05:34:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-04T15:44:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655c73d0c40ba52feef1efbe\/40-0.png\" \/>\n<meta name=\"author\" content=\"Isabella Edwards\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Isabella Edwards\" \/>\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:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/\"},\"author\":{\"name\":\"Isabella Edwards\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd\"},\"headline\":\"Strapi installation and configuration for Production on Ubuntu 22.04\",\"datePublished\":\"2023-01-06T05:34:20+00:00\",\"dateModified\":\"2024-03-04T15:44:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/\"},\"wordCount\":1891,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/\",\"name\":\"Strapi installation and configuration for Production on Ubuntu 22.04 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2023-01-06T05:34:20+00:00\",\"dateModified\":\"2024-03-04T15:44:22+00:00\",\"description\":\"Strapi is a JavaScript-based, open-source Content Management System (CMS) that doesn't have a default frontend.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Strapi installation and configuration for Production on Ubuntu 22.04\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd\",\"name\":\"Isabella Edwards\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g\",\"caption\":\"Isabella Edwards\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/isabellaedwards\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Strapi installation and configuration for Production on Ubuntu 22.04 - Blog - Silicon Cloud","description":"Strapi is a JavaScript-based, open-source Content Management System (CMS) that doesn't have a default frontend.","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:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/","og_locale":"en_US","og_type":"article","og_title":"Strapi installation and configuration for Production on Ubuntu 22.04","og_description":"Strapi is a JavaScript-based, open-source Content Management System (CMS) that doesn't have a default frontend.","og_url":"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2023-01-06T05:34:20+00:00","article_modified_time":"2024-03-04T15:44:22+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655c73d0c40ba52feef1efbe\/40-0.png"}],"author":"Isabella Edwards","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Isabella Edwards","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/"},"author":{"name":"Isabella Edwards","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd"},"headline":"Strapi installation and configuration for Production on Ubuntu 22.04","datePublished":"2023-01-06T05:34:20+00:00","dateModified":"2024-03-04T15:44:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/"},"wordCount":1891,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/","url":"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/","name":"Strapi installation and configuration for Production on Ubuntu 22.04 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2023-01-06T05:34:20+00:00","dateModified":"2024-03-04T15:44:22+00:00","description":"Strapi is a JavaScript-based, open-source Content Management System (CMS) that doesn't have a default frontend.","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/strapi-installation-configuration-on-ubuntu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Strapi installation and configuration for Production on Ubuntu 22.04"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/5579144e23c225c8188167f3e3f888dd","name":"Isabella Edwards","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d4d4dec47f553ac7961d9fa4cc9bdcdcf5b7ce5106594330b6d25c5694fdbaec?s=96&d=mm&r=g","caption":"Isabella Edwards"},"url":"https:\/\/www.silicloud.com\/blog\/author\/isabellaedwards\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/533","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=533"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/533\/revisions"}],"predecessor-version":[{"id":1656,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/533\/revisions\/1656"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}