Google Cloud Compute Engine

How to Install LEMP stack on CentOS 7 – Google Cloud

Disclosure: This post may contain affiliate links, which means we may receive a commission if you click a link and purchase something that we recommended.

Pinterest LinkedIn Tumblr

How to install LEMP Stack on CentOS 7 with Google Compute Engine with Nginx, PHP7.3 and connect with Cloud SQL.

Not using CentOS 7? Choose a different OS:

The installation is mostly done via command line so I assume you are comfortable using command line interface.


1. Install Nginx

Go to Compute Engine >> VM Instances page, here you will have your instances listed. Click the SSH button to launch the terminal in a new browser window.

Nginx packages are available in the EPEL repositories. So you need to install EPEL repository before installing Nginx. If you have followed the steps to setup secure server with CentOS, you should have your EPEL repository installed. If you haven’t installed this follow this step to install.

sudo yum install epel-release

Once you have the EPEL installed you can proceed to install Nginx

sudo yum install nginx

Once complete, you can confirm that Nginx has been installed by issuing this command

nginx -v

Once the installation is complete you need to start the Nginx service.

sudo systemctl enable nginx
sudo systemctl start nginx

Now you can check the status of Nginx.

sudo systemctl status nginx

You should see the output similar to this which means Nginx has started successfully.

● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2019-02-19 04:42:46 UTC; 5s ago
Process: 4499 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 4497 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 4496 ExecStartPre=/usr/bin/rm -f /run/ (code=exited, status=0/SUCCESS)
Main PID: 4501 (nginx)
CGroup: /system.slice/nginx.service
├─4501 nginx: master process /usr/sbin/nginx
└─4502 nginx: worker process
Feb 19 04:42:46 lemp systemd[1]: Starting The nginx HTTP and reverse proxy server…
Feb 19 04:42:46 lemp nginx[4497]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Feb 19 04:42:46 lemp nginx[4497]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Feb 19 04:42:46 lemp systemd[1]: Failed to read PID from file /run/ Invalid argument
Feb 19 04:42:46 lemp systemd[1]: Started The nginx HTTP and reverse proxy server.

Visit your domain in your browser, you will see the Nginx welcome page.

2. Configure Firewall

If you have followed the server setup for CentOS 7 you must have installed UFW and enabled it. Now you need to allow connections to the VM Instance from the public. So, now you can add the ports,HTTP (80) HTTPS (443)for the public access.

If you haven’t enabled this go ahead and run the following command.

sudo ufw allow http
sudo ufw allow https

3. Configure Nginx

Next, open the Nginx configuration file, which can be found at /etc/nginx/nginx.conf

sudo nano /etc/nginx/nginx.conf

Start by setting the user to the username that you’re currently logged in with. This will make managing file permissions much easier in the future.

The worker_processes directive is the amount of CPU cores your instance. In my case, this is 1.

Uncomment the multi_accept directive and set it to on.

Lower the keepalive_timeout directive to 15.

For security reasons, you should uncomment the server_tokens directive and ensure it is set to off.

Add the new client_max_body_size directive below the server_tokens and set the value to 64m.

Uncomment the gzip_proxied directive and set it to any, uncomment the gzip_comp_level directive and set it to the value of 2 and finally uncomment the gzip_types directive.

In order for Nginx to correctly serve PHP you also need to ensure the fastcgi_param SCRIPT_FILENAME directive is set, otherwise, you will receive a blank white screen when accessing any PHP scripts. So open fastcgi_params file by issuing

sudo nano /etc/nginx/fastcgi_params

Add the following at the end of the file

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

That’s all, this is the basic Nginx configuration, hit CTRL+X followed by Y to save the changes. Ensure that the configuration file contains no errors and restart Nginx for the changes to take effect by issuing the following command

sudo nginx -t

If you get a successful message, then proceed with the following command

sudo service nginx restart

4. Install PHP 7.3

To install PHP 7.3 add the REMI repository with the following command.

sudo rpm -Uvh

Now you can install PHP 7.3 and some required packages.

sudo yum --enablerepo=remi-php73 install php-common php-mysql php-xml php-xmlrpc php-curl php-gd php-imagick php-cli php-dev php-imap php-mbstring php-opcache php-soap php-zip unzip

After the installation has completed, confirm that PHP 7.3 has installed correctly with this command.

php -v

You will receive an output similar to this.

PHP 7.3.2 (cli) (built: Feb 5 2019 13:10:03) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.2, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.2, Copyright (c) 1999-2018, by Zend Technologies

5. Configure PHP 7.3

Now that PHP 7.3.* has installed and you need to configure the user and group that the service will run under.

sudo nano /etc/php-fpm.d/www.conf

Change the following lines by replacing the apache or nobody with your username.

user = username 
group = username
listen.owner = username = username

Now we configure PHP for WordPress by changing some values in php.ini.

sudo nano /etc/php.ini

Hit F6 for search inside the editor and update the following values

upload_max_filesize = 32M 
post_max_size = 48M
memory_limit = 256M
max_execution_time = 600
max_input_vars = 3000
max_input_time = 1000

Hit CTRL+X and Y to save the configuration and check if the configuration is correct and start PHP and enable it.

sudo systemctl start php-fpm
sudo systemctl enable php-fpm

Now we have completed NGINX and PHP 7.3 on CentOS 7.

6. Set up Cloud SQL

Once everything is in place you can create a Cloud SQL Instance and connect with your VM Instance.

Learn How to connect your Google Compute Engine with Cloud SQL database.


  1. For cent os ufw is not command ..
    to enable http and https-
    $ sudo firewall-cmd –permanent –zone=public –add-service=http
    $ sudo firewall-cmd –permanent –zone=public –add-service=https
    $ sudo firewall-cmd –reload
    are the commands.

    • Cloudbooklet Reply

      You can install ufw on CentOS using this command.
      yum install -y ufw

      By the way thanks for your interest in Cloudbooklet

Write A Comment

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.