Skip to main content

Ubuntu

Connecting to a network with static IP in Ubuntu server

When you install Ubuntu server, its network setting defaults to dynamic IP addressing, that is, the network management daemon in Ubuntu searches for a DHCP server on the connected network and configures the network with the IP address assigned by DHCP. Even when you start an instance in the cloud, the network is configured with dynamic addressing using the DHCP server setup by the cloud service provider. In this article, you will learn how to configure the network interface with static IP assignment.

Getting ready

You will need an Ubuntu server with access to the root account or an account with sudo privileges. If network configuration is a new thing for you, then it is recommended to try this on a local or virtual machine.

How to do it…

Follow these steps to connect to the network with a static IP:

Get a list of available Ethernet interfaces using the following command:

$ ifconfig -a | grep eth

Open /etc/network/interfaces and find the following lines:

auto eth0

iface eth0 inet dhcp

Change the preceding lines to add an IP address, net mask, and default gateway (replace samples with the respective values):

auto eth0

iface eth0 inet static

address 192.168.1.100

netmask 255.255.255.0

gateway 192.168.1.1

dns-nameservers 192.168.1.45 192.168.1.46

Restart the network service for the changes to take effect:

$ sudo /etc/init.d/networking restart

Try to ping a remote host to test the network connection:

$ ping www.google.com

How it works…

In this recipe, we have modified the network configuration from dynamic IP assignment to static assignment.

First, we got a list of all the available network interfaces with ifconfig -a. The -a option of ifconfig returns all the available network interfaces, even if they are disabled. With the help of the pipe (|) symbol, we have directed the output of ifconfig to the grep command. For now, we are interested with Ethernet ports only. The grep command will filter the received data and return only the lines that contain the eth character sequence:

ubuntu@ubuntu:~$ ifconfig -a | grep eth

eth0 Link encap:Ethernet HWaddr 08:00:27:bb:a6:03

Here, eth0 means first Ethernet interface available on the server. After getting the name of the interface to configure, we will change the network settings for eth0 in interfaces file at /etc/network/interfaces. By default, eth0 is configured to query the DHCP server for an IP assignment. The eth0 line auto is used to automatically configure the eth0 interface at server startup. Without this line, you will need to enable the network interface after each reboot. You can enable the eth0 interface with the following command:

$ sudo ifup eth0

Similarly, to disable a network interface, use the following command:

$ sudo ifdown eth0

The second iface eth0 inet static line sets the network configuration to static assignment. After this line, we will add network settings, such as IP address, netmask, default gateway, and DNS servers.

After saving the changes, we need to restart the networking service for the changes to take effect. Alternatively, you can simply disable the network interface and enable it with ifdown and ifup commands.

There's more…

The steps in this recipe are used to configure the network changes permanently. If you need to change your network parameters temporarily, you can use the ifconfig and route commands as follows:

Change the IP address and netmask, as follows:

$ sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0

Introduction for Streaming with Ampache in Ubuntu

This article covers the installation and configuration of the open source audio and video streaming service, Ampache. It is a web-based streaming application that allows you to upload your own audio/video contents and access them across multiple Internet-enabled devices. You can easily set up your home media server using Ampache and your old personal computer running Ubuntu. We will focus on installing Ampache on the Ubuntu server, but you can install Ampache on any Linux distribution of your choice.

Ubuntu advanced installation

Much of the Ubuntu Server installation process fulfils a majority of user needs, and it is used in the same manner by most of the users (newbie or advanced), but the part that requires much more attention and which is customized by many advanced system administrators depending on their needs is the partitioning step. In this section, we will have a look at how to perform an advanced partitioning for

a specific hard disk schema.

Using RAID

The RAID technology (an acronym for Redundant Array of Inexpensive Disks) refers to the techniques used to distribute data across multiple hard drives (creating a storage unit from several hard disks). The unit thus created has an improved fault tolerance (high availability) or a greater performance (the capacity/write speed). The distribution of data on several hard drives allows you to increase the safety and reliability of the associated services.

For more information about this technology, you can take a tour at http://www.tldp.org/HOWTO/Software-RAID-HOWTO.html . In this section, we will see how to install Ubuntu Server using two RAID1 partitions on two different hard disks, one for the root and the other for Swap:

  1. In the Partition disk step, select manual. Then, select one by one all the disks that you want and which should be a part of the RAID partitions (in our case, only two disks). For each disk, create a new empty partition table on it.
  2. Select the free space on the first drive. Then, choose Create a new partition. Set the size that you want for Swap; it should be twice the RAM size and up to 2 GB. Then, choose Primary and select Beginning. The physical volume for RAID option should be chosen in the Use as: line. Finally, select Done setting up partition.
  3. With the remaining free space, perform the same steps for the root partition. The only exception is that after setting the size, choose Continue and then select Primary. Also, select the Bootable flag: line to change the value to on.
  4. Return to the Partition Disks step and select Configure Software RAID at the beginning of the page. Then, choose yes to write the modifications to disk.
  5. In the Create MD device setup and for this example, choose RAID1, but if

you are applying another architecture, choose the one that fits your needs.

  1. Now, enter the number of hard drives that you have chosen for the array (in our case, we have two active devices). Then, select Continue.
  2. Next, enter the number of spare devices (choose the default setting for RAID1, which is 0) and then select Continue.
  3. At this step, choose the partitions that you wish to use. For the Swap partition, choose sda1 and sdb1. Select Continue to go to the next step.
  4. Repeat steps 3 to 7 to prepare the root partition, and at the end, choose sda2 and sdb2. Finally, select Finish.

We should now have a list of RAID devices and hard drives. The next remaining steps are required to format and set the mount point for the RAID devices. Deal with the RAID devices as a local hard disk; format and mount accordingly:

  1. Getting back to the initial partitioning page again, we will see our newly created RAID devices #0 and #1 partitions.
  2. Under the RAID1 device #0 partition, select #1 and press the Enter key.
  3. In the Use as: file, select swap area and then apply this partition by using the Done setting up partition entry.
  4. Under the RAID1 device #1 partition, select #1 and press the Enter key.
  5. In the Use as: file, select Ext4 journaling file system.
  6. In the Mount point field, choose / (the root file system). You can change the other options as you wish. Then, apply that partition by using the Done setting up partition entry.
  7. Finally, select Finish partitioning and write changes to disk.

The installation process will then continue normally.

Using LVM

LVM (Logical Volume Manager) allows the creation and the management of logical volume on Linux. The use of logical volumes somehow replaces the disks'

partitioning. This is a much more flexible system as it allows you, for instance, to reduce the size of a file system to expand another one regardless of their location

on disks.

For more information about this technology, you can take a tour at http://tldp.org/HOWTO/LVM-HOWTO/ . In this section, we will have a look at the partitioning step of Ubuntu Server installation process with the /srv partition mounted on a LVM volume. This section

will be divided into two parts—the first part is during the Ubuntu installation within

only one PV (physical volume), which will be a part of the VG (volume group), and the second part will be after the Ubuntu installation. While performing this process, we will demonstrate how to add a second PV to the VG:

  1. In the Partition disks screen, choose Manual.
    1. Select the hard disk. Then, choose Yes to confirm the Create a new empty partition table on this device order.
    2. [ 14 ]
  2. Next, create standard swap and / partitions with the file system that

you want.

  1. For our /srv LVM partition, create a new logical partition and change the Use as field to physical volume for LVM. Then, select Done setting up the partition.
  2. Now, choose Configure the Logical Volume Manager and select Yes.
  3. On the next screen and for LVM configuration action, select Create volume group. Name the VG (for example, vg01). Then, select the partition prepared for LVM and choose Continue.
  4. Return to the LVM configuration action page and select Create logical volume. Choose the newly created VG and name the new LV. Then, choose a size and at the end, select Finish. You will be taken to the main Partition Disks page again.
  5. Now, let's add a file system to our new LVM. To do this, select the partition under the LVM that you created and set up the file system that you want and

choose /srv as the mount point. Next, select Done setting up the partition.

9. Finally, apply the Finish partitioning and write changes to disk order.

Then, confirm the changes and continue your installation.

Now, we will continue with the second part that started after the Ubuntu Server installation and which covers adding a second hard disk, creating a PV, adding it to

the existing VG, extending LV with the srv command, and finally extending the file

system. In this part, we will use a second hard disk named /dev/sdb, and we will

use it entirely as a PV. You can configure and use as much of PV as you want:

1. First of all, create the PV using the following command:

sudo pvcreate /dev/sdb

2. Next, extend the VG (called vg01 in our example), as follows:

sudo vgextend vg01 /dev/sdb

  1. Use the vgdisplay command to find out the size that you can allocate (for free physical extents, see the Free PE / size line). We will assume in our example a free size of 511 PE (which is equivalent to 2 GB with a size of 4 MB PE), and we will use the entire available free space.
  2. We can now use the PE to extend the LV via the following command (there are other methods, but they are beyond the scope of this book):

sudo lvextend /dev/vg01/srv -l +511

  1. We used the -l option here to extend the LV using PE. If you want to extend using MB, GB, and TB, you can use the -l option.
  2. Before expanding an ext3 or ext4 file system, it is recommended that you unmount it before hand (as best practice). In case you want to reduce an LV, it will be mandatory to unmount it. The following commands unmount the partition and then check it:

sudo umount /srv sudo e2fsck -f /dev/vg01/srv

7. Finally, you can resize the file system by using the following command:

sudo resize2fs /dev/vg01/srv

8. Now, you can mount the partition and check its new size using the following command:

mount /dev/vg01/srv /srv && df -h /srv

Managing services with Juju on Ubuntu

In the previous recipe, we learned how to install the Juju service orchestration framework. Now, we will look at how to use Juju to deploy and manage a service.

Getting ready

Make sure you have installed and bootstrapped Juju.

How to do it…

We will deploy a sample WordPress installation with a load balancer. The MySQL service will be used as the database for WordPress. Both services are available in the Juju Charm store.

Follow these steps to manage services with Juju:

Let's start by deploying the WordPress service with juju deploy. This should give you the following output:

$ juju deploy wordpress

Added charm "cs:trusty/wordpress-4" to the model.

Deploying charm "cs:trusty/wordpress-4" with the charm series "trusty".

Now, deploy a MySQL service to store WordPress contents:

$ juju deploy mysql

Added charm "cs:trusty/mysql-38" to the model.

Deploying charm "cs:trusty/mysql-38" with the charm series "trusty".

Now, you can use juju status to confirm your deployed services. It should show you the deployed services, their relations, and respective machine statuses, as follows:

$ juju status

Now that both services have been deployed, we need to connect them together so that wordpress can use the database service. Juju calls this a relation, and it can be created as follows:

$ juju add-relation mysql wordpress

Finally, we need to expose our wordpress service so that it can be accessed outside our local network. By default, all charms start as unexposed and are accessible only on a local network:

$ juju expose wordpress

You can get the IP address or DNS name of the wordpress instance with the juju status command from the Machines section. Note that in a local LXD environment, you may need a forwarded port to access WordPress.

How it works…

In this example, we deployed two separate services using Juju. Juju will create two separate machines for each of them and deploy the service as per the instructions in the respective charms. These two services need to be connected with each other so that wordpress knows the existence of the MySQL database. Juju calls these connections relations. Each charm contains a set of hooks that are triggered on given events. When we create a relation between WordPress and MySQL, both services are informed about it with the database-relation-changed hook. At this point, both services can exchange the necessary details, such as MySQL ports and login credentials. The WordPress charm will set up a MySQL connection and initialize a database.

Once both services are ready, we can expose them to be accessed on a public network. Here, we do not need MySQL to be accessible by WordPress users, so we have only exposed the wordpress service. WordPress can access MySQL internally, with the help of a relation.

You can use the Juju GUI to visualize your model and add or remove charms and their relations. At this point, if you open a GUI, you should see your charms plotted on the graph and connected with each other through a small line, indicating a relation. The GUI also provides an option to set constraints on a charm and configure charm settings, if any.

Note that both charms internally contain scaling options. WordPress is installed behind an Nginx reverse proxy and can be scaled with extra units as and when required. You can add new units to the service with a single command, as follows:

$ juju add-unit mysql -n 1

There's more…

When you no longer need these services, the entire model can be destroyed with the juju destroy-model command. You can also selectively destroy particular services with the remove-service command and remove relations with remove-relations. Check out the Juju manual page for tons of commands that are not listed in the Juju help menu.

See also

How to create your own charm: https://jujucharms.com/docs/stable/authors-charm-writing

More about hooks: https://jujucharms.com/docs/stable/authors- hook-environment

Introduction of Network Storage in Ubuntu

Often we need to store a lot of data and local systems don't have enough space. Sometimes, we need to quickly share this data across multiple systems and users. Also, when you have a big network, chances are you have Linux systems as well as Windows or Mac. Centralized networked storage can help to solve these storage and sharing problems. Linux provides various options, such as Samba and NFS, to host a centralized storage server and share data across multiple computers.

In this article, we will learn how to set up a centralized storage system. We will set up the Samba server and NFS server. We will learn how to enable synchronization with Rsync and set Windows clients to access storage servers.

Installing the Zimbra mail server on Ubuntu

Until now, we have installed Postfix, Dovecot, spam-assassin, and other tools separately. In this recipe, we will learn how to install the Zimbra collaboration server, which covers all tools in a single package. The Zimbra server contains Postfix, MySQL, OpenLDAP, ClamAV, and Spam-Assassin, Calendar, and various other features. Zimbra provides a paid option as well as an open source version. We will be installing an open source version of the Zimbra server in single server mode.

Getting ready

As always, you will need access to a root account or an account with sudo privileges.

For Zimbra to work properly, you will need the following minimum configuration for your server:

At least 1.5 GHz of CPU 2 GHz recommended

Minimum 8 GB of memory

Minimum 10 GB of storage 20 GB recommended

You will need to set proper DNS and MX records for your domain.

You will also need various ports, as follows:

Postfix/LMTP 25, 7025

HTTP 80, 443

POP3 110, 995

IMAP 143, 993

LDAP 389

How to do it…

Follow these steps to install Zimbra collaboration server:

Install the dependency packages before starting with the Zimbra installation:

$ sudo apt-get update

$ sudo apt-get install libperl5.18 libaio1 unzip pax sysstat sqlite3 libgmp10

Download and extract the Zimbra open source package using the following command:

$ wget https://files.zimbra.com/downloads/8.6.0_GA/zcs- 8.6.0_GA_1153.UBUNTU14_64.20141215151116.tgz

$ tar -zxvf zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116.tgz

$ cd zcs-8.6.0_GA_1153.UBUNTU14_64.20141215151116

Make sure you have set the proper hostname and hosts entries in respective files:

$ cat /etc/hosts

127.0.0.1 localhost

119.9.107.28 mail.server.local mail

$ cat /etc/hostname

mail.server.local

Start the Zimbra installation by executing the installer:

$ sudo ./install.sh

The installation process will ask you to agree with License Agreement. Type y and press Enter to continue:

On acceptance of agreement, Zimbra will check for dependencies and then ask for the component selection. I have chosen to skip a few components. Type y when asked for confirmation:

Type y when asked for package selection confirmation.

The installation process will take some time. As installation completes, the Zimbra configuration menu will be displayed. Here, you need to set an admin account password:

On the main menu, select 6 to choose zimbra-store and then type 4 for the admin password. The new prompt will ask for the admin account password:

Then, type r to come back to the main menu and then type a to apply settings, and again press Enter to save settings:

Finally, apply all configurations when asked. Zimbra will ask you to send installation notification to Zimbra. Choose Yes by typing y to notify Zimbra:

Now you can access your Zimbra server with the domain name of your server or IP address. Your browser may prompt for a non-trusted server certificate, as shown in the following screenshot:

You can access the Inbox panel on port 7071, https://yourserver.tld:7071.

How it works…

Zimbra combines various commonly used packages in a single package and provides a web interface to work with them. It reduces the efforts required in installing and configuring all tools separately. For any additional features, you can always switch to the Zimbra collaboration server, Network Edition.

There's more…

If you are planning to use Zimbra on your local network, you will need a DNS server set up. Alternatively, you can use the tool dnsmasq. It is a small package that sets up a quick DNS environment on your local network.

See also

Zimbra open source features at https://www.zimbra.com/open-source/features

Introduction for Performance Monitoring in Ubuntu

When starting a new server, we tend to use stock images of the Ubuntu server and default installation process. The focus is on developing and improving the application code. The base operating system is not given much attention until we hit some performance issues. Once you reach the tip of application level optimizations and have collected all low-hanging fruit, the next obvious target is system monitoring and resource optimization. In this article, we will focus on various performance monitoring tools. We will learn to use various tools to track down the bottlenecks and then briefly look at possible solutions.

The article is separated in various recipes, and each covers the monitoring of a single system resource, such as the CPU and memory. At the end of the article, we will learn how to set up a performance baseline and use it to compare different configurations of system parameters.

How to Host multiple websites with virtual domain in Ubuntu server

Setting multiple domains on a single server is a very commonly asked question. In fact, it is very easy to do this with virtual host. In this recipe, we will set up two domains on a single server and set up a sub-domain as well. We will also look at IP-based virtual hosts.

Getting ready

You will need access to a root account or an account with sudo privileges.

You will need the Apache server installed and working. This recipe describes configuration for Apache version 2.4

You may need a DNS set up if you want to access configured domains over the Internet.

We will set up two domains, namely example1.dom and example2.com, and a sub-domain, dev.example1.com.

How to do it…

Follow these steps to host multiple websites with a virtual domain:

Change the directory to /var/www and create a directory structure for the required domains and sub-domain. Also create a blank index.html for each domain:

$ cd /var/www

$ sudo mkdir -p example1.com/public_html

$ sudo touch example1.com/public_html

$ sudo cp -R example1.com example2.com

$ sudo cp -R example1.com dev.example1.com

Change the directory ownership and file permissions on the newly created directories:

$ sudo chown -R ubuntu:www-data example*

$ sudo chown -R ubuntu:www-data dev.example1.com

$ chmod 750 -R example*

$ chmod 750 -R dev.example1.com

Note the use of the wildcard syntax (chmod 750 -R example*).

You can use a similar syntax with various other commands in Linux

and save some repeated typing or copy and paste work.

Edit the index.html file for each domain with the respective text:

Next, we need to create virtual host configuration for each domain. Change the directory to /etc/apache2/sites-available and copy the default virtual host file 000-default.conf:

$ cd /etc/apache2/sites-available

$ sudo cp 000-default.conf example1.com.conf

Edit the new virtual host file and set ServerName, DocumentRoot, and other variables to match your environment. The final file should look something like this:

ServerName example1.com

ServerAlias www.example1.com

DocumentRoot /var/www/example1.com/public_html

...

Now copy this virtual host file to create example2.com.conf and dev.example1.com.conf and modify the respective settings in each of them. You need to update the serverName, serverAlias, and DocumentRoot parameters.

Here, we are done with the setup and configuration part. Now enable the virtual hosts and reload the Apache server for the settings to take effect:

$ sudo a2ensite example*

$ sudo a2ensite dev.example1.com.conf

$ sudo service apache2 reload

You can check all enabled virtual hosts with the following command:

$ sudo a2query -s

Next, to test our setup, we need to configure the hosts' setup on the local system. Open and edit the /etc/hosts file and add host entries. If you have Windows as your local system, you can find the hosts file under %systemroot%\System32\drivers\etc:

Finally, try to access domains by their names. You should see text entered in the respective index.html files for each domain:

How it works…

Multiple domain hosting works with the concept of NamedVirtualHost. We have configured virtual hosts with ServerName and ServerAlias. When a client sends a request with a domain name, it sends a host name in the request headers. This host name is used by Apache to determine the actual virtual host to serve this request. If none of the available virtual hosts match the requested host header, then the default virtual host or the first virtual host will be used to serve the request.

In this example, we have used hosts file to map test domain names with local IP. With the actual domain name, you need to point DNS servers to the IP address of your web server. Generally, all popular hosting providers host their own DNS servers. You need to add these DNS servers to your domain setting with domain registrar. Then, on your hosting side, you need to set respective A records and CNAME records. An A record points to an IP address and the CNAME record is an alias for the A record used for pointing a subdomain to an A record. Your hosting provider should give you details on how to configure domains and subdomains.

In previous versions of Apache server, you might need to enable NameVirtualHost under the configuration file. Find a line similar to #NameVirtualHost 172.20.30.40 and uncomment it by removing the # symbol at the start.

You can also set up IP-based virtual hosts. If you have multiple IP addresses available on your server, you can set the virtual host to listen on a particular IP address. Use the following steps to set up an IP-based virtual host:

Get a list of the available IP addresses:

$ ifconfig | grep "inet addr"

ubuntu@ubuntu:~$ ifconfig | grep "inet addr"

inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0

inet addr:192.168.56.102 Bcast:192.168.56.255 Mask:255.255.255.0

inet addr:127.0.0.1 Mask:255.0.0.0

Edit the virtual host configuration and set it to match the following:

Listen 80

DocumentRoot /var/www/example1.com/public_html

ServerName example1.com

See also

Apache documentation at https://httpd.apache.org/docs/2.2/vhosts/examples.html

Refer to the Installing and configuring the Apache web server recipe for the installation and configuration of the Apache web server.

Installing Git on Ubuntu server

This recipe covers the installation of Git binaries on the Ubuntu server. As always, we will install the latest available Git package.

Getting ready

You will need access to a root account or an account with sudo privileges.

How to do it…

Git maintains a separate repository of the latest binaries on Launchpad. We will use PPA for this repository,to install the latest Git version:

Add PPA to the Ubuntu installation source:

$ sudo add-apt-repository ppa:git-core/ppa

Update the apt repository cache:

$ sudo apt-get update

Now, install Git with a simple apt-get install git command:

$ sudo apt-get install git -y

Once installation completes, you can check the Git version with the following command. You can cross check the version with the official Git download page:

$ git version

Now introduce yourself to Git by providing your name and email address. Git will add this information to every commit message made by you:

$ git config --global user.name "Your Name"

$ git config --global user.email "email@domain.com"

You can cross-check the configuration by using the --list parameter to git config:

$ git config --list

Use git help to get a list of the basic daily use commands:

$ git help

How it works…

Here, we have the installed the latest Git version from the repository maintained by Git developers. The Ubuntu default package repository contains the Git package, but often it is not updated. Ubuntu 14.04 still provides Git version 1.9.1.

Once the Git packages are installed, you need to identify yourself to Git. This information is used to tag the commits created by you. We have globally set the username and email with the git config command. Now, whenever you create a new commit in any repository on this system, the commit will get tagged with your username and email. This helps in tracking who did what, especially when you are working in a large group. You can get a list of configuration settings with the command git config --list, and the output should look something like the following:

$ git config --list

user.name=yourname

user.email=youremail@example.com

If you execute the same command from within a repository directory, the list will show some extra settings specific to that repository:

~/sample-repo$ git config --list

user.name=yourname

user.email=youremail@example.com

core.repositoryformatversion=0

core.filemode=true

core.bare=false

core.logallrefupdates=true

Now, if you are not already familiar with Git, you can make use of the git help command to get documentation and manual pages. The default help menu lists commonly used commands with a short description. You can get a list of all available commands with the same git help command and a flag, -a.

$ git help -a

Additionally, the installation contains some guides or manual pages to help you get started with Git. To get a list of the available guides, use:

$ git help -g

The common Git guides are as follows:

attributes: Defines attributes per path

glossary: A Git glossary

ignore: Specifies intentionally untracked files to ignore

To open a particular guide, use the git help guidename or the man git[guidename] command:

$ git help everyday # or man giteveryday

There's more…

Git has become a mainstream version control system, especially after the rise of the social coding site GitHub. There are other well-known version control systems available, such as Subversion and Mercurial. Facebook uses a modified version of Mercurial for their internal code hosting. Bazaar is another distributed version control system sponsored and developed by Canonical, the force behind Ubuntu. Bazaar provides tight integration with Launchpad, a collaborative development platform by Canonical.

You can get more details about Bazaar on their official page at http://bazaar.canonical.com/en/ .

See also

You can read more by following these links:

Git basics: https://git-scm.com/book/en/v2/Getting-Started-Git-Basics

Git book: https://git-scm.com/book/en/v2

Check out the Git interactive tutorial at: https://try.github.io and http://git.rocks/

Launchpad: https://launchpad.net/

Introduction of Ubuntu Networking

When we are talking about server systems, networking is the first and most important factor. If you are using an Ubuntu server in a cloud or virtual machine, you generally don't notice the network settings, as they are already configured with various network protocols. However, as your infrastructure grows, managing and securing the network becomes the priority.

Networking can be thought of as an umbrella term for various activities that include network configurations, file sharing and network time management, firewall settings and network proxies, and many others. In this article, we will take a closer look at the various networking services that help us set up and effectively manage our networks, be it in the cloud or a local network in your office.