{"id":792,"date":"2017-09-24T11:22:02","date_gmt":"2017-09-24T03:22:02","guid":{"rendered":"https:\/\/www.techcoil.com\/blog\/?p=792"},"modified":"2019-03-24T13:46:57","modified_gmt":"2019-03-24T05:46:57","slug":"setting-up-wordpress-on-raspberry-pi-3-with-raspbian-stretch-lite-nginx-mariadb-and-php-7-as-the-lemp-stack","status":"publish","type":"post","link":"https:\/\/www.techcoil.com\/blog\/setting-up-wordpress-on-raspberry-pi-3-with-raspbian-stretch-lite-nginx-mariadb-and-php-7-as-the-lemp-stack\/","title":{"rendered":"Setting up WordPress on Raspberry Pi 3 with Raspbian Stretch Lite, Nginx, MariaDB and PHP 7 as the LEMP stack"},"content":{"rendered":"<p>Raspbian Stretch was <a href=\"https:\/\/www.raspberrypi.org\/blog\/raspbian-stretch\/\" target=\"_blank\" rel=\"noopener noreferrer\">released on 17th August 2017<\/a> and this will mean that we will be able to get a variant of Debian 9 on our Raspberry Pi. With Raspbian Stretch, we will be able to run WordPress or any PHP framework with PHP 7.0 which <a href=\"https:\/\/www.zend.com\/en\/resources\/php7_infographic\" target=\"_blank\" rel=\"noopener noreferrer\">Zend had indicated a performance boost of up to two folds as compared to PHP 5.6<\/a>.<\/p>\n<p>Just like the <a href=\"https:\/\/www.techcoil.com\/blog\/why-should-programmers-blog\/\" rel=\"noopener noreferrer\" target=\"_blank\">benefits that blogging brings to a programmer<\/a>, the performance boost that PHP 7 brings about is a good reason for me to port my blog over to PHP 7. <\/p>\n<p>Before porting my blog over to PHP 7, it will make sense for me to perform a little proof of concept on my Raspberry Pi 3 first. With Raspbian Stretch Lite, I can see for myself that my blog runs well with PHP 7.0 before <a href=\"https:\/\/m.do.co\/c\/68b7d9b94341\" target=\"_blank\" rel=\"noopener noreferrer\">spawning a new Digital Ocean instance<\/a> for <a href=\"\/\" target=\"_blank\" rel=\"noopener noreferrer\">Techcoil<\/a>. <\/p>\n<p>This post documents how I setup an instance of WordPress on Raspberry Pi 3 with Raspbian Stretch Lite, Nginx, MariaDB and PHP 7 as the <a href=\"https:\/\/www.techcoil.com\/lemp\/\" rel=\"noopener noreferrer\" target=\"_blank\">LEMP stack<\/a>.<\/p>\n<h2>Hardware List to build my Raspberry Pi 3 LEMP server<\/h2>\n<p>I used the following hardware for my Raspberry Pi 3 LEMP server:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.amazon.com\/gp\/product\/B01CCPKCSK\/ref=as_li_tl?ie=UTF8&tag=clivsperswebs-20&camp=1789&creative=9325&linkCode=as2&creativeASIN=B01CCPKCSK&linkId=64594d3221ff586b89a75314339caa52\" target=\"_blank\" rel=\"noopener noreferrer\">Official Raspberry Pi 3 Case - Red\/White<\/a><\/li>\n<li><a href=\"https:\/\/www.amazon.com\/Raspberry-Pi-MS-004-00000024-Model-Board\/dp\/B01LPLPBS8\/ref=as_li_ss_tl?ie=UTF8&linkCode=ll1&tag=clivsperswebs-20&linkId=1a3db9b11f2e893a47ab20b227f64484&language=en_US\" target=\"_blank\" rel=\"noopener noreferrer\">Raspberry PI 3 Model B A1.2GHz 64-bit quad-core ARMv8 CPU, 1GB RAM<\/a><\/li>\n<li><a href=\"https:\/\/www.amazon.com\/gp\/product\/B0166RR85U\/ref=as_li_tl?ie=UTF8&tag=clivsperswebs-20&camp=1789&creative=9325&linkCode=as2&creativeASIN=B0166RR85U&linkId=d9bafc959cf145db92885a2a5d247739\" target=\"_blank\" rel=\"noopener noreferrer\">Kingston Digital 32GB microSDHC Class 10 UHS-I 45R Flash Card (SDC10G2\/32GBSP)<\/a><\/li>\n<li>My old Samsung Note charger<\/li>\n<li><a href=\"https:\/\/www.amazon.com\/gp\/product\/B00N2VISLW\/ref=as_li_tl?ie=UTF8&tag=clivsperswebs-20&camp=1789&creative=9325&linkCode=as2&creativeASIN=B00N2VISLW&linkId=7f361c63b9853431b86543a604edefea\" target=\"_blank\" rel=\"noopener noreferrer\">AmazonBasics RJ45 Cat-6 Ethernet Patch Cable - 3 Feet (0.9 Meters)<\/a><\/li>\n<\/ul>\n<h2>Setting up Raspbian Stretch Lite with SSH server enabled on my microSD card<\/h2>\n<p>Once I had gathered all the necessary hardware, proceed to <a href=\"https:\/\/www.techcoil.com\/blog\/how-to-setup-raspbian-stretch-lite-with-ssh-server-enabled-on-your-microsd-card\/\" rel=\"noopener noreferrer\" target=\"_blank\">setup Raspbian Stretch Lite with SSH server enabled on my microSD card<\/a>. Doing so allowed me to SSH into my Raspbian Stretch Lite to perform further configurations. <\/p>\n<h2>Assembling the hardware for the Raspberry Pi LEMP Server<\/h2>\n<p>Next, I removed my microSD card from my SD card reader and inserted it to the microSD card slot on the Raspberry Pi 3 board. After that, I went ahead to <a href=\"\/blog\/how-to-assemble-the-raspberry-pi-3-board-with-the-raspberry-pi-official-case\/\" target=\"_blank\" rel=\"noopener noreferrer\">assemble the Raspberry Pi 3 board to the Official Raspberry Pi case<\/a>.<\/p>\n<h2>Starting the Raspbian Stretch Lite operating system<\/h2>\n<p>With the assembly of my Raspberry Pi 3 board and Official Raspberry Pi case, I connected one end of the RJ45 cable to the RJ45 port on my Raspberry Pi 3 board and the other end of the cable to one of the switch port of <a href=\"https:\/\/www.amazon.com\/Linksys-AC1900-Wireless-Router-EA7500\/dp\/B019WAQMVY\/ref=as_li_ss_tl?ie=UTF8&qid=1503756300&sr=8-2&keywords=linksys+ac1900+max+stream&linkCode=ll1&tag=clivsperswebs-20&linkId=d4ff7c0f2b2478e935b444a7bd6a2511\" target=\"_blank\" rel=\"noopener noreferrer\">my home router<\/a>. After that, I connected my micro USB cable and supply power to my Raspberry Pi 3 board.<\/p>\n<h2>Changing default password, Locale and Timezone of my Raspbian Stretch Lite<\/h2>\n<p>There are a few configurations that we should perform on the first run of our Raspbian Stretch Lite. Therefore I proceeded on to <a href=\"https:\/\/www.techcoil.com\/blog\/set-of-configurations-to-perform-on-the-first-run-of-your-raspbian-stretch-lite\/\" rel=\"noopener noreferrer\" target=\"_blank\">change the default password, Locale and Timezone of Raspbian Stretch Lite<\/a>.  <\/p>\n<h2>Installing Nginx on Raspbian Stretch Lite<\/h2>\n<p>After configuring the locale settings, I proceeded to install <a href=\"http:\/\/nginx.org\/\" rel=\"noopener noreferrer\" target=\"_blank\"> Nginx <\/a> on my Raspbian Stretch Lite. To do so, I entered the following command:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo apt-get update\r\nsudo apt-get install nginx -y\r\n<\/pre>\n<p>After the installation had completed, I ran the following command to verify that the installation was successful:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsystemctl status nginx.service\r\n<\/pre>\n<p>The command returned me with the following output to tell me that Nginx was installed successfully on my Raspbian Stretch Lite:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\u25cf nginx.service - A high performance web server and a reverse proxy server\r\n   Loaded: loaded (\/lib\/systemd\/system\/nginx.service; enabled; vendor preset: enabled)\r\n   Active: active (running) since Sat 2017-09-23 07:25:05 UTC; 7min ago\r\n     Docs: man:nginx(8)\r\n  Process: 15356 ExecStart=\/usr\/sbin\/nginx -g daemon on; master_process on; (code=exited, status=0\/SUCCESS)\r\n  Process: 15353 ExecStartPre=\/usr\/sbin\/nginx -t -q -g daemon on; master_process on; (code=exited, status=0\/SUCCESS\r\n Main PID: 15357 (nginx)\r\n   CGroup: \/system.slice\/nginx.service\r\n           \u251c\u250015357 nginx: master process \/usr\/sbin\/nginx -g daemon on; master_process on;\r\n           \u251c\u250015358 nginx: worker process\r\n           \u251c\u250015359 nginx: worker process\r\n           \u251c\u250015360 nginx: worker process\r\n           \u2514\u250015361 nginx: worker process\r\n\r\nSep 23 07:25:05 raspberrypi systemd&#x5B;1]: Starting A high performance web server and a reverse proxy server...\r\nSep 23 07:25:05 raspberrypi systemd&#x5B;1]: Started A high performance web server and a reverse proxy server.\r\n<\/pre>\n<h2>Installing MariaDB database server and command line client on my Raspbian Stretch Lite<\/h2>\n<p>After I had gotten Nginx on my Raspbian Stretch Lite, I then proceeded on to install the <a href=\"https:\/\/mariadb.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">MariaDB<\/a> database server and the command line client on my Raspbian Stretch Lite. To do so, I ran the following command:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo apt-get install mariadb-server mariadb-client -y\r\n<\/pre>\n<p>Unlike my previous experience with installing mysql servers, this installation of <code>mariadb-server<\/code> did not prompt me for a root password. This was because the root user was by default set to use the <code>unix_socket<\/code> plugin, which allows the user to use operating system credentials when connecting to MariaDB via Unix socket.<\/p>\n<p>Since the pi user of my Raspbian Stretch installation was configured to use sudo without password prompt, I could get into my <code>mariadb-server<\/code> through the following command without supplying any password:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo mariadb \r\n<\/pre>\n<h2>Installing PHP 7 on my Raspbian Stretch Lite<\/h2>\n<p>Next item on the list was to install the components needed to run WordPress. For that, I needed PHP7, PHP7 Fast CGI Process Manager and PHP7 MySQL bridge to be installed. To install these three items, I ran the following command:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo apt-get install php7.0 php7.0-fpm php7.0-mysql -y\r\n<\/pre>\n<p>After the installation had completed, I entered the following command to check the status:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsystemctl status php7.0-fpm.service\r\n<\/pre>\n<p>Seeing the following output assured me that my PHP Fast CGI Manager had started successfully:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n\u25cf php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager\r\n   Loaded: loaded (\/lib\/systemd\/system\/php7.0-fpm.service; enabled; vendor prese\r\n   Active: active (running) since Sat 2017-09-23 07:59:21 UTC; 1min 54s ago\r\n     Docs: man:php-fpm7.0(8)\r\n Main PID: 12314 (php-fpm7.0)\r\n   Status: &quot;Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req\/se\r\n   CGroup: \/system.slice\/php7.0-fpm.service\r\n           \u251c\u250012314 php-fpm: master process (\/etc\/php\/7.0\/fpm\/php-fpm.conf)\r\n           \u251c\u250012315 php-fpm: pool www\r\n           \u2514\u250012316 php-fpm: pool www\r\n<\/pre>\n<h2>Getting a copy of WordPress<\/h2>\n<p>Once I had completed installation of the required components to run <a href=\"https:\/\/wordpress.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">WordPress<\/a> on Raspbian Stretch Lite, I proceeded to <a href=\"https:\/\/wordpress.org\/latest.zip\" rel=\"noopener noreferrer\" target=\"_blank\">get a copy of WordPress<\/a>.<\/p>\n<p>To do so, I ran the following commands:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\ncd \/var\/www\r\nsudo wget https:\/\/wordpress.org\/latest.tar.gz\r\nsudo tar xvfz latest.tar.gz\r\nsudo rm latest.tar.gz\r\nsudo mv wordpress my_new_wordpress_site\r\n<\/pre>\n<p>Doing so would leave a <code>my_new_wordpress_site<\/code> folder inside the <code>\/var\/www<\/code> folder. The <code>my_new_wordpress_site<\/code> folder will contain the codes necessary to run WordPress.<\/p>\n<h2>Changing the owner of my_new_wordpress_site folder to www-data<\/h2>\n<p>In order for media upload to work, the <code>www-data<\/code> user needs to owned the <code>my_new_wordpress_site<\/code> folder. Hence, the next step was to change the ownership of the <code>my_new_wordpress_site<\/code> folder to the same user that runs PHP Fast CGI Manager:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo chown -R www-data:www-data \/var\/www\/my_new_wordpress_site\r\n<\/pre>\n<h2>Configuring Nginx to proxy HTTP requests to the PHP 7 Fast CGI Manager<\/h2>\n<p>Next, I went on to configure Nginx to serve as a <a href=\"https:\/\/www.techcoil.com\/blog\/the-reverse-proxy-server\/\" target=\"_blank\" rel=\"noopener noreferrer\">reverse proxy server<\/a> for my WordPress site. Referencing the <a href=\"https:\/\/codex.wordpress.org\/Nginx\" target=\"_blank\" rel=\"noopener noreferrer\">informative guide<\/a> on <a href=\"https:\/\/www.techcoil.com\/blog\/configuring-nginx-for-php-web-applications\/\" rel=\"noopener noreferrer\" target=\"_blank\">configuring nginx for a PHP web application<\/a> like WordPress, I created <code><strong>\/etc\/nginx\/sites-enabled\/anewwebsite.com.conf<\/strong><\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n# WordPress single site rules.\r\n# Designed to be included in any server {} block.\r\n# Upstream to abstract backend connection(s) for php\r\nupstream php {\r\n        server unix:\/run\/php\/php7.0-fpm.sock;\r\n}\r\n\r\nserver {\r\n        listen   80;\r\n        ## Your website name goes here.\r\n        server_name anewwebsite.com www.anewwebsite.com;\r\n        ## Your only path reference.\r\n        root \/var\/www\/my_new_wordpress_site;\r\n        ## This should be in your http block and if it is, it's not needed here.\r\n        index index.php;\r\n\r\n        location = \/favicon.ico {\r\n                log_not_found off;\r\n                access_log off;\r\n        }\r\n\r\n        location = \/robots.txt {\r\n                allow all;\r\n                log_not_found off;\r\n                access_log off;\r\n        }\r\n\r\n        location \/ {\r\n                # This is cool because no php is touched for static content.\r\n                # include the &quot;?$args&quot; part so non-default permalinks doesn't break when using query string\r\n                try_files $uri $uri\/ \/index.php?$args;\r\n        }\r\n\r\n        location ~ \\.php$ {\r\n                #NOTE: You should have &quot;cgi.fix_pathinfo = 0;&quot; in php.ini\r\n                include fastcgi.conf;\r\n                fastcgi_intercept_errors on;\r\n                fastcgi_pass php;\r\n                fastcgi_buffers 16 16k;\r\n                fastcgi_buffer_size 32k;\r\n        }\r\n\r\n        location ~* \\.(js|css|png|jpg|jpeg|gif|ico)$ {\r\n                expires max;\r\n                log_not_found off;\r\n        }\r\n}\r\n<\/pre>\n<p>Once I had created the configuration file, I got Nginx to take in the configurations by restarting it with the following command:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo systemctl restart nginx.service\r\n<\/pre>\n<h2>Creating a MariaDB user and a database instance for the WordPress site<\/h2>\n<p>Next up was to create the necessary items for WordPress to use the MariaDB database. It is good practice to create a separate database user for the WordPress site to interact with the database. As such, the next step that I did was to create a Maria DB user that only have the privileges to interact with a particular database instance.<\/p>\n<p>To do so, I first got into the <code>mariadb-server<\/code> using <code>mariadb<\/code> with the root user:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo mariadb \r\n<\/pre>\n<p>After keying in my password for that root user, I first ran the following command to create a new database instance:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nCREATE DATABASE newWordPressDb;\r\n<\/pre>\n<p>With that database instance created successfully, I then created the MariaDB user with the relevant privileges for accessing that database instance:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nCREATE USER 'anewuser'@'localhost' IDENTIFIED BY 'password';\r\nGRANT ALL ON newWordPressDb.* TO 'anewuser'@'localhost';\r\n<\/pre>\n<p>With that, I would have a MariaDB user for my WordPress site to use a MariaDB database instance.<\/p>\n<h2>Setting cgi.fix_pathinfo = 0 in php.ini of PHP 7 Fast CGI Manager<\/h2>\n<p>Since WordPress suggested that we should have \"cgi.fix_pathinfo = 0;\" in php.ini, the next step that I did was to do that. <\/p>\n<p>The <code>php.ini<\/code> file for PHP 7 Fast CGI Manager is found in the <code>\/etc\/php\/7.0\/fpm<\/code> folder. With that, I used nano to open up <code>\/etc\/php\/7.0\/fpm\/php.ini<\/code> and replaced:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n;cgi.fix_pathinfo = 1;\r\n<\/pre>\n<p>with:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\ncgi.fix_pathinfo = 0;\r\n<\/pre>\n<p>I then restarted the PHP 7 Fast CGI Manager with the following command:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo systemctl restart php7.0-fpm.service\r\n<\/pre>\n<h2>Creating the WordPress configurations to use the database instance<\/h2>\n<p>With the MariaDB user and database instance in place, the next thing that I did was to create the WordPress configurations for WordPress to use the database instance. <\/p>\n<p>To do so, I first renamed <code>\/var\/www\/my_new_wordpress_site\/wp-config-sample.php<\/code> to <code>\/var\/www\/my_new_wordpress_site\/wp-config.php<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo mv \/var\/www\/my_new_wordpress_site\/wp-config-sample.php \/var\/www\/my_new_wordpress_site\/wp-config.php\r\n<\/pre>\n<p>I then used my browser to access <a href=\"https:\/\/api.wordpress.org\/secret-key\/1.1\/salt\/\">https:\/\/api.wordpress.org\/secret-key\/1.1\/salt\/<\/a> to generate some key and salt values for my <code>\/var\/www\/my_new_wordpress_site\/wp-config.php<\/code>.<\/p>\n<p>With that, I opened up <code>\/var\/www\/my_new_wordpress_site\/wp-config.php<\/code> with nano and updated some sections of the file to look like the following:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n\/\/ ** MySQL settings - You can get this info from your web host ** \/\/\r\n\/** The name of the database for WordPress *\/\r\ndefine('DB_NAME', 'newWordPressDb');\r\n\r\n\/** MySQL database username *\/\r\ndefine('DB_USER', 'anewuser');\r\n\r\n\/** MySQL database password *\/\r\ndefine('DB_PASSWORD', 'password');\r\n\r\n\/** MySQL hostname *\/\r\ndefine('DB_HOST', 'localhost');\r\n\r\n\/** Database Charset to use in creating database tables. *\/\r\ndefine('DB_CHARSET', 'utf8');\r\n\r\n\/** The Database Collate type. Don't change this if in doubt. *\/\r\ndefine('DB_COLLATE', '');\r\n\r\n\/**#@+\r\n * Authentication Unique Keys and Salts.\r\n *\r\n * Change these to different unique phrases!\r\n * You can generate these using the {@link https:\/\/api.wordpress.org\/secret-key\/1.1\/salt\/ WordPress.org secret-key service}\r\n * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.\r\n *\r\n * @since 2.6.0\r\n *\/\r\ndefine('AUTH_KEY',         '3nGgSDEQkxEnCPDi,l\/v?=bx@9KN`OmB?\/g=:Adj+Nn&lt;sR+6iH_Q2Ch&amp;-=An.tU!');\r\ndefine('SECURE_AUTH_KEY',  'l]iOF-zG.%p+A|C3}?2-f&lt;vCu*ar|dA:_&#x5B;\/h&amp;&lt;X~1os=}S:&#x5B;$.]z&#x5B;2m#Yto&gt;g:T=');\r\ndefine('LOGGED_IN_KEY',    'du-Xi](g:HvJ;yl$I-nj+)B)$lCWI@,&#x5B;vorWnj,7^g_N|6CCeE=_js%m&#x5B;.80:+O@');\r\ndefine('NONCE_KEY',        'T&lt;:&lt;9+%}L1^|1O+hoP{!vRgy-7Z90XJoO(|s =HMYxf;D+@Q|En-3.8c.&#x5B;fEt%*d');\r\ndefine('AUTH_SALT',        'OxlI\/I4eq_9dQ{C|fm&lt;sN~E=~-2iX}4%A3+1EF$2kV2N6v8V%zU^|31$8@-G^gNf');\r\ndefine('SECURE_AUTH_SALT', '=+Oo8d*Y(@wqleOK&#x5B;9sq3Yg*7x}i&amp;0J!k;J#i&gt;8d|YUioee~($Cb2_CL*aeEJLzm');\r\ndefine('LOGGED_IN_SALT',   '$lr:;X8HG3$o&lt;4s%&gt;gM:0SfZ+1cME _VcQv&#x5B;%.{UK!:E`7EI&#x5B;:-^aT:sjYZ5h&gt;&amp;x');\r\ndefine('NONCE_SALT',       'oVm~a@&#x5B;$7kb?xxv`_tx?MbOlv:~NV7;{FX\/NfvCnb}V|u+9ozG&amp;iJ&lt;=rW+{#qY,{');\r\n\/**#@-*\/\r\n<\/pre>\n<h2>Editing the hosts file to access my WordPress site from my work computer<\/h2>\n<p>After putting in the configurations that are necessary for WordPress to function, the next thing that I did was to get my computer to resolve the domains <strong>anewwebsite.com<\/strong> and <strong>www.anewwebsite.com<\/strong> with the IP Address of my Raspberry Pi 3: <strong>192.168.1.109<\/strong>. To do so, I opened up <code>\/etc\/hosts<\/code> on my Mac and add in the following entries:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n192.168.1.109 anewwebsite.com\r\n192.168.1.109 www.anewwebsite.com\r\n<\/pre>\n<h2>Running the WordPress installation script<\/h2>\n<p>Once I had added the necessary hosts entries, I then accessed <strong>www.anewwebsite.com<\/strong> with my browser.<\/p>\n<p>Once the installation page appeared, I then keyed in the necessary input:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/wordpress-installation-page-1-running-from-Raspbian-Stretch-Lite.gif\" alt=\"WordPress installation page 1 running from Raspbian Stretch Lite\"\/><\/p>\n<p>And clicked the <strong>Install WordPress<\/strong> button:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/wordpress-installation-successful-message-from-Raspbian-Stretch-Lite.gif\" alt=\"WordPress installation successful message from Raspbian Stretch Lite\" \/><\/p>\n<p>With that, I had WordPress running on Raspberry Pi 3 with Raspbian Stretch Lite, Nginx, MariaDB and PHP 7 as the LEMP stack.<\/p>\n<p>Until I am ready to expose my Raspberry Pi 3 WordPress to the Internet, this setup is sufficient for now. <\/p>\n<h2>Further enhancements that I will want to make to my Raspberry Pi 3 WordPress site<\/h2>\n<p>When I have clocked enough Raspberry Pi 3 WordPress site in the future, there are some enhancements that will want to make. <\/p>\n<h3>Increasing file upload limit<\/h3>\n<p>Since the default file upload size limit is slightly less than <strong>1 Megabyte for Nginx<\/strong> and <strong>2 Megabytes for PHP FPM 7<\/strong>, I can only upload slightly less than 1 Megabyte of content to my Raspberry Pi 3 WordPress site.<\/p>\n<p>When I wish to tweak the file upload limit, I can look at how to <a href=\"https:\/\/www.techcoil.com\/blog\/configuring-nginx-and-php-7-stack-in-linux-to-increase-or-decrease-file-upload-size-limit\/\" rel=\"noopener noreferrer\" target=\"_blank\">configure Nginx and PHP 7 stack in Linux to increase or decrease file upload size limit<\/a>.<\/p>\n<h3>Installing a SMTP server for my Raspberry Pi 3 WordPress site to send out emails<\/h3>\n<p>When I want to receive emails from my Raspberry Pi 3 WordPress, I will need to install a SMTP server on my Raspberry Pi 3. For this purpose, I can <a href=\"https:\/\/www.techcoil.com\/blog\/how-to-install-postfix-as-the-smtp-server-for-applications-in-raspbian-stretch-lite-to-send-email\/\" rel=\"noopener noreferrer\" target=\"_blank\">install Postfix as the SMTP server for applications in Raspbian Stretch Lite to send email<\/a>.<\/p>\n<h3>Let's Encrypt my Raspberry Pi 3 WordPress site with a browser-trusted SSL\/TLS certificates <\/h3>\n<p>Since <a href=\"https:\/\/support.google.com\/webmasters\/answer\/6073543?hl=en\" rel=\"noopener noreferrer\" target=\"_blank\">Google encourages securing our site with HTTPS for better user experience<\/a>, I should make my Raspberry Pi 3 WordPress communicate in HTTPS when I put it onto the Internet.<\/p>\n<p>When I make my Raspberry Pi 3 WordPress communicate in HTTPS, I can be pretty sure that the communication channel between browsers and my WordPress site is safely encrypted. <\/p>\n<p>Fortunately, <a href=\"https:\/\/letsencrypt.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">Let's Encrypt<\/a> makes it easy for web masters to deploy secure web applications that serve HTTPS.  <\/p>\n<h4>Prequisites to serving my Raspberry Pi 3 WordPress site via HTTPS<\/h4>\n<p>In a separate post, I had discussed the topic on <a href=\"https:\/\/www.techcoil.com\/blog\/how-to-host-multiple-websites-from-home\/\" rel=\"noopener noreferrer\" target=\"_blank\">how to host multiple websites from home<\/a>. Following those pointers, I will need the following pieces for my Raspberry Pi 3 WordPress site to be accessed from outside my home network with Let's Encrypt browser-trusted certificate:<\/p>\n<ul>\n<li>A domain or subdomain name that is mapped to the public IP address that my home router had gotten from the Internet Service Provider. If my public IP address changes frequently or you do not have a domain name, you will need to use the service of a Dynamic DNS service. For example, I can <a href=\"https:\/\/namecheap.pxf.io\/c\/1303251\/386170\/5618?u=https%3A%2F%2Fwww.namecheap.com%2Fdomains%2Fdomain-name-search.aspx\" rel=\"noopener noreferrer\" target=\"_blank\">buy a Namecheap domain<\/a> and <a href=\"https:\/\/www.techcoil.com\/blog\/how-to-get-your-raspberry-pi-3-to-use-namecheap-dynamic-dns-to-update-your-domain-when-your-homes-public-ip-address-changes\/\" rel=\"noopener noreferrer\" target=\"_blank\">get my Raspberry Pi 3 to use Namecheap dynamic DNS to update my domain when my home\u2019s public IP address changes<\/a>.<\/li>\n<li><a href=\"https:\/\/www.techcoil.com\/blog\/host-web-server-behind-linksys-ea7500-max-stream-ac1900-router\/\" rel=\"noopener noreferrer\" target=\"_blank\">Forwarding of network traffic made to port 80 and 443 of my home router<\/a> public IP address to the IP address of the Raspberry Pi 3 that contains my WordPress site. <\/li>\n<\/ul>\n<h4>Installing Certbot on Raspbian Stretch Lite for obtaining Let\u2019s Encrypt\u2019s browser-trusted certificates<\/h4>\n<p>In order to use Let's Encrypt facilities, we will need a ACME client to help us get the SSL artefacts from Let's Encrypt. Therefore, I will need to <a href=\"https:\/\/www.techcoil.com\/blog\/installing-certbot-on-raspbian-stretch-lite-for-obtaining-lets-encrypts-browser-trusted-certificates\/\" rel=\"noopener noreferrer\" target=\"_blank\">install Certbot on Raspbian Stretch Lite for obtaining Let\u2019s Encrypt\u2019s browser-trusted certificates<\/a>.<\/p>\n<h4>Configuring Nginx to facilitate Certbot in acquiring the SSL certificate for my domain or subdomain<\/h4>\n<p>After installing Certbot, I will need to configure Nginx to facilitate Certbot in acquiring the SSL certificate for my domain. For the purpose of this guide, let's assume that I designate <strong>mynewblog.techcoil.com<\/strong> as the domain to reach my WordPress site on my Raspberry Pi 3.<\/p>\n<p>Given these points, I will use <code>nano<\/code> to create the Nginx configurations file at <code>\/etc\/nginx\/sites-enabled\/mynewblog.techcoil.com.conf<\/code>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo nano \/etc\/nginx\/sites-enabled\/mynewblog.techcoil.com.conf\r\n<\/pre>\n<p>After the editor loads the file, I will include the following content in the file:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nserver {\r\n    listen   80;\r\n    root \/var\/www\/my_new_wordpress_site;\r\n    index index.php;\r\n   \r\n    server_name mynewblog.techcoil.com;\r\n \r\n    location ~ \/.well-known {\r\n        allow all;\r\n    }  \r\n}\r\n<\/pre>\n<p>Once I had included the content, I will type <strong>Ctrl-X<\/strong> followed by <strong>Y<\/strong> to save the file.<\/p>\n<p>Afterwards, I will restart Nginx with the following command:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo systemctl restart nginx.service\r\n<\/pre>\n<h4>Using Certbot to get Let's Encrypt to issue browser-trusted SSL certificate for my domain<\/h4>\n<p>After Nginx is ready to facilitate Certbot in acquiring the SSL certificate artefacts, I will then run the following command to acquire them:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo certbot certonly -a webroot --webroot-path=\/var\/www\/my_new_wordpress_site -d mynewblog.techcoil.com\r\n<\/pre>\n<h4>Generating a strong Diffie-Hellman group<\/h4>\n<p>Once Certbot had fetched the SSL certificate artefacts for my domain, I will then generate a Diffie-Hellman group for Nginx to use for exchanging cryptographic keys with its clients:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo openssl dhparam -out \/etc\/ssl\/certs\/dhparam.pem 2048\r\n<\/pre>\n<h4>Updating the Nginx configurations for serving HTTPS for my Raspberry Pi 3 WordPress site<\/h4>\n<p>Till this point, I will have the necessary artefacts for Nginx to serve HTTPS. Therefore, I can update the Nginx configurations to use those artefacts in serving HTTPS.<\/p>\n<p>Therefore, I will first use <code>nano<\/code> to load <code>\/etc\/nginx\/sites-enabled\/mynewblog.techcoil.com.conf<\/code> again:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo nano \/etc\/nginx\/sites-enabled\/mynewblog.techcoil.com.conf\r\n<\/pre>\n<p>Once the editor loads the file, I will replace its content with the following:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n# WordPress single site rules.\r\n# Designed to be included in any server {} block.\r\n# Upstream to abstract backend connection(s) for php\r\nupstream php {\r\n        server unix:\/run\/php\/php7.0-fpm.sock;\r\n}\r\n\r\nserver {\r\n    listen 80;\r\n    server_name  mynewblog.techcoil.com;\r\n    return 301 https:\/\/$host$request_uri;\r\n}\r\n     \r\n# For ssl\r\nserver {\r\n    ssl on;\r\n    ssl_certificate \/etc\/letsencrypt\/live\/mynewblog.techcoil.com\/fullchain.pem;\r\n    ssl_certificate_key \/etc\/letsencrypt\/live\/mynewblog.techcoil.com\/privkey.pem;\r\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;\r\n    ssl_prefer_server_ciphers on;\r\n    ssl_dhparam \/etc\/ssl\/certs\/dhparam.pem;\r\n    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';\r\n    ssl_session_timeout 1d;\r\n    ssl_session_cache shared:SSL:50m;\r\n    ssl_stapling on;\r\n    ssl_stapling_verify on;\r\n    add_header Strict-Transport-Security max-age=15768000;\r\n         \r\n    default_type  application\/octet-stream;\r\n         \r\n    listen 443;\r\n    server_name  mynewblog.techcoil.com;\r\n  \r\n    root \/var\/www\/my_new_wordpress_site;\r\n    index index.php;\r\n  \r\n    location ~ \/.well-known {\r\n        allow all;\r\n    }  \r\n \r\n    location = \/favicon.ico {\r\n                log_not_found off;\r\n                access_log off;\r\n    }\r\n \r\n    location = \/robots.txt {\r\n            allow all;\r\n            log_not_found off;\r\n            access_log off;\r\n    }\r\n \r\n    location \/ {\r\n            # This is cool because no php is touched for static content.\r\n            # include the &quot;?$args&quot; part so non-default permalinks doesn't break when using query string\r\n            try_files $uri $uri\/ \/index.php?$args;\r\n    }\r\n \r\n    location ~ \\.php$ {\r\n            #NOTE: You should have &quot;cgi.fix_pathinfo = 0;&quot; in php.ini\r\n            include fastcgi.conf;\r\n            fastcgi_intercept_errors on;\r\n            fastcgi_pass php;\r\n            fastcgi_buffers 16 16k;\r\n            fastcgi_buffer_size 32k;\r\n    }\r\n \r\n    location ~* \\.(js|css|png|jpg|jpeg|gif|ico)$ {\r\n            expires max;\r\n            log_not_found off;\r\n    }\r\n  \r\n}\r\n<\/pre>\n<p>After that, I will type <strong>Ctrl-X<\/strong> followed by <strong>Y<\/strong> to save the configuration file.<\/p>\n<p>Once I had saved the configuration file, I will run the following command to restart Nginx:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo systemctl restart nginx.service\r\n<\/pre>\n<h4>Updating WordPress on the new URL<\/h4>\n<p>Once my Nginx server can serve my Raspberry Pi WordPress site with HTTPS, I will then get into MariaDB shell with the following command:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo mariadb\r\n<\/pre>\n<p>When MariaDB shell gets loaded, I will then run the following SQL statements to update WordPress with my new domain name:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nUPDATE wp_options SET option_value = replace(option_value, 'http:\/\/anewwebsite.com', 'https:\/\/mynewblog.techcoil.com') WHERE option_name = 'home' OR option_name = 'siteurl';\r\n\r\nUPDATE wp_posts SET guid = replace(guid, 'http:\/\/anewwebsite.com','https:\/\/mynewblog.techcoil.com');\r\n\r\nUPDATE wp_posts SET post_content = replace(post_content, 'http:\/\/anewwebsite.com', 'https:\/\/mynewblog.techcoil.com');\r\n\r\nUPDATE wp_postmeta SET meta_value = replace(meta_value,'http:\/\/anewwebsite.com','https:\/\/mynewblog.techcoil.com');\r\n\r\nUPDATE wp_options SET option_value = replace(option_value, 'http:\/\/www.anewwebsite.com', 'https:\/\/mynewblog.techcoil.com') WHERE option_name = 'home' OR option_name = 'siteurl';\r\n\r\nUPDATE wp_posts SET guid = replace(guid, 'http:\/\/www.anewwebsite.com','https:\/\/mynewblog.techcoil.com');\r\n\r\nUPDATE wp_posts SET post_content = replace(post_content, 'http:\/\/www.anewwebsite.com', 'https:\/\/mynewblog.techcoil.com');\r\n\r\nUPDATE wp_postmeta SET meta_value = replace(meta_value,'http:\/\/www.anewwebsite.com','https:\/\/mynewblog.techcoil.com');\r\n<\/pre>\n<h4>Cleaning up unnecessary configurations<\/h4>\n<p>Since I will be able to access my Raspberry Pi 3 WordPress site with the new URL, <strong>https:\/\/mynewblog.techcoil.com<\/strong>, I will not be some of the configurations that I had created earlier. <\/p>\n<p>Therefore, I will run the following command to remove the unnecessary Nginx configuration file at <strong>\/etc\/nginx\/sites-enabled\/anewwebsite.com.conf<\/strong>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo rm \/etc\/nginx\/sites-enabled\/anewwebsite.com.conf\r\n<\/pre>\n<p>Once I had removed the Nginx configurations, I will then restart Nginx with the following command:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nsudo systemctl restart nginx.service\r\n<\/pre>\n<p>After that, I will go to my laptop and remove the following content from <strong>\/etc\/hosts<\/strong>:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n192.168.1.109 anewwebsite.com\r\n192.168.1.109 www.anewwebsite.com\r\n<\/pre>\n<h2>Buying the Raspberry Pi 3 hardware to build your own LEMP server to run WordPress<\/h2>\n<p>If you do not have the Raspberry Pi 3 hardware mentioned in this post yet, you may want to purchase them from Amazon. Simply click on the button below to add the Raspberry Pi 3 hardware to your cart. You may remove anything that you already have or replace some of the hardware with other hardware.<\/p>\n<p><center><\/p>\n<form action=\"https:\/\/www.amazon.com\/gp\/aws\/cart\/add.html\" method=\"GET\" target=\"_blank\"><input name=\"AssociateTag\" type=\"hidden\" value=\"clivsperswebs-20\"><input name=\"SubscriptionId\" type=\"hidden\" value=\"[AKIAIMND5UBCQU2HRSUA]\"><input name=\"ASIN.1\" type=\"hidden\" value=\"B01CCPKCSK\"><input name=\"Quantity.1\" type=\"hidden\" value=\"1\"><input name=\"ASIN.2\" type=\"hidden\" value=\"B01LPLPBS8\"><input name=\"Quantity.2\" type=\"hidden\" value=\"1\"><input name=\"ASIN.3\" type=\"hidden\" value=\"B0166RR85U\"><input name=\"Quantity.3\" type=\"hidden\" value=\"1\"><input name=\"ASIN.4\" type=\"hidden\" value=\"B00N2VISLW\"><input name=\"Quantity.4\" type=\"hidden\" value=\"1\"><br \/>\n<input alt=\"Buy from Amazon.com\" name=\"add\" type=\"image\" src=\"https:\/\/images-na.ssl-images-amazon.com\/images\/G\/01\/associates\/remote-buy-box\/buy4.gif\" value=\"Buy from Amazon.com\"><\/form>\n<p><\/center><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/Setting-up-WordPress-on-Raspberry-Pi-3-with-Raspbian-Stretch-Lite-Nginx-MariaDB-and-PHP-7-as-the-LEMP-stack.jpg\" alt=\"Setting up WordPress on Raspberry Pi 3 with Raspbian Stretch Lite, Nginx, MariaDB and PHP 7 as the LEMP stack\" \/><\/p>\n\n      <ul id=\"social-sharing-buttons-list\">\n        <li class=\"facebook\">\n          <a href=\"https:\/\/www.facebook.com\/sharer\/sharer.php?u=https%3A%2F%2Fwp.me%2Fp245TQ-cM\" target=\"_blank\" role=\"button\" rel=\"nofollow\">\n            <img decoding=\"async\" src=\"\/ph\/img\/3rd-party\/social-icons\/Facebook.png\" alt=\"Facebook icon\"> Share\n          <\/a>\n        <\/li>\n        <li class=\"twitter\">\n          <a href=\"https:\/\/twitter.com\/intent\/tweet?text=&url=https%3A%2F%2Fwp.me%2Fp245TQ-cM&via=Techcoil_com\" target=\"_blank\" role=\"button\" rel=\"nofollow\">\n          <img decoding=\"async\" src=\"\/ph\/img\/3rd-party\/social-icons\/Twitter.png\" alt=\"Twitter icon\"> Tweet\n          <\/a>\n        <\/li>\n        <li class=\"linkedin\">\n          <a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=1&title=&url=https%3A%2F%2Fwp.me%2Fp245TQ-cM&source=https:\/\/www.techcoil.com\" target=\"_blank\" role=\"button\" rel=\"nofollow\">\n          <img decoding=\"async\" src=\"\/ph\/img\/3rd-party\/social-icons\/linkedin.png\" alt=\"Linkedin icon\"> Share\n          <\/a>\n        <\/li>\n        <li class=\"pinterest\">\n          <a href=\"https:\/\/pinterest.com\/pin\/create\/button\/?url=https%3A%2F%2Fwww.techcoil.com%2Fblog%2Fwp-json%2Fwp%2Fv2%2Fposts%2F792&description=\" class=\"pin-it-button\" target=\"_blank\" role=\"button\" rel=\"nofollow\" count-layout=\"horizontal\">\n          <img decoding=\"async\" src=\"\/ph\/img\/3rd-party\/social-icons\/Pinterest.png\" alt=\"Pinterest icon\"> Save\n          <\/a>\n        <\/li>\n      <\/ul>\n    ","protected":false},"excerpt":{"rendered":"<p>Raspbian Stretch was <a href=\"https:\/\/www.raspberrypi.org\/blog\/raspbian-stretch\/\" target=\"_blank\" rel=\"noopener noreferrer\">released on 17th August 2017<\/a> and this will mean that we will be able to get a variant of Debian 9 on our Raspberry Pi. With Raspbian Stretch, we will be able to run WordPress or any PHP framework with PHP 7.0 which <a href=\"https:\/\/www.zend.com\/en\/resources\/php7_infographic\" target=\"_blank\" rel=\"noopener noreferrer\">Zend had indicated a performance boost of up to two folds as compared to PHP 5.6<\/a>.<\/p>\n<p>Just like the <a href=\"https:\/\/www.techcoil.com\/blog\/why-should-programmers-blog\/\" rel=\"noopener noreferrer\" target=\"_blank\">benefits that blogging brings to a programmer<\/a>, the performance boost that PHP 7 brings about is a good reason for me to port my blog over to PHP 7. <\/p>\n<p>Before porting my blog over to PHP 7, it will make sense for me to perform a little proof of concept on my Raspberry Pi 3 first. With Raspbian Stretch Lite, I can see for myself that my blog runs well with PHP 7.0 before <a href=\"https:\/\/m.do.co\/c\/68b7d9b94341\" target=\"_blank\" rel=\"noopener noreferrer\">spawning a new Digital Ocean instance<\/a> for <a href=\"\/\" target=\"_blank\" rel=\"noopener noreferrer\">Techcoil<\/a>. <\/p>\n<p>This post documents how I setup an instance of WordPress on Raspberry Pi 3 with Raspbian Stretch Lite, nginx, MariaDB and PHP 7 as the <a href=\"https:\/\/www.techcoil.com\/lemp\/\" rel=\"noopener noreferrer\" target=\"_blank\">LEMP stack<\/a>.<\/p>\n","protected":false},"author":1,"featured_media":829,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"footnotes":""},"categories":[4],"tags":[242,446,225,13,444,240,308,445,195,438,5],"jetpack_featured_media_url":"https:\/\/www.techcoil.com\/blog\/wp-content\/uploads\/wordpress-installation-successful-message-from-Raspbian-Stretch-Lite.gif","jetpack_shortlink":"https:\/\/wp.me\/p245TQ-cM","jetpack-related-posts":[],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/posts\/792"}],"collection":[{"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/comments?post=792"}],"version-history":[{"count":0,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/posts\/792\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/media\/829"}],"wp:attachment":[{"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/media?parent=792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/categories?post=792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.techcoil.com\/blog\/wp-json\/wp\/v2\/tags?post=792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}