├── README.md
└── tasks
├── 01-devops-research.md
├── 02-linux-tasks.md
└── 03-web-server-tasks.md
/README.md:
--------------------------------------------------------------------------------
1 | A practical DevOps roadmap with detailed tasks to Learn the essential skills, tools, and practices that are crucial in the DevOps industry
2 |
3 | ## 🚀 How To Use This DevOps Roadmap
4 |
5 | > "Tell me and I forget, teach me and I may remember, involve me and I learn." - Benjamin Franklin
6 |
7 | Here's how you can use this repo for maximum learning and knowledge retention:
8 |
9 | - **Practical Application:** In this roadmap, there are tasks associated under each category. Apply what you learn practically to enhance your understanding.
10 | - **Publish Learnings as Blogs:** Write blog posts on your preferred platform to solidify your knowledge on each task.
11 | - **Share with the Community:** Publish your blog posts and Share your blog posts in relevant forums, social media, and online communities.
12 | - **Engage in Feedback:** Receive feedback on your posts and provide constructive input to others.
13 | - **Reflect and Review:** Regularly reflect on your progress and review the concepts you have learned. Identify any areas that need further practice or understanding.
14 | - **Contribute to the Learning Ecosystem**: Motivate and encourage others, work together collaboratively, and help everyone grow and succeed as a team.
15 |
16 | > Note: When doing research, focus on using official documentation and trustworthy sources like authoritative blogs and videos. Be careful with content that lacks credibility or comes from platforms like YouTube and other sources.
17 | ## 🔄 Understand DevOps Philosophy
18 |
19 | To become a DevOps engineer, the first and most important thing is to understand the DevOps Philosophy. It's all about different teams working together towards a common goal. In other words, there shouldn't be any blaming between different IT teams.
20 |
21 | This picture by [Sandra Martin](https://www.ein-bild.com) sums it up.
22 |
23 |
24 |
25 |
26 |
27 | **➡ Tasks:** [Understanding DevOps and Its Real-world Implication](https://github.com/techiescamp/devops-roadmap/blob/main/tasks/01-devops-research.md)
28 |
29 | In the following sections, we will look at each tool and technology and the associated tasks to master them.
30 |
31 | ## 🤖 Learn to use AI Tools
32 |
33 | Generative AI tools like ChatGPT & Google Bard can engage in interactive conversations, allowing you to ask questions, seek clarification, and get immediate responses related to DevOps tools and technologies. You can use these tools for Explanation and Conceptual Understanding, Real-World Examples, Troubleshooting and Problem-solving.
34 |
35 | With [ChatGPT plugins](https://devopscube.com/chatgpt-plugins/), you can chat with PDF content, summarize videos, and extract content from URLs, among many other features. Instead of perceiving AI tools as a threat, embrace them. By leveraging these powerful tools, you can accelerate your learning process and accomplish tasks more efficiently.
36 |
37 | ### Will AI tools replace DevOps Engineers?
38 |
39 | I asked this question of the tool itself, and here is what ChatGPT had to say about it.
40 |
41 | >AI tools and automation have not replaced DevOps engineers, but rather have become an integral part of their toolkit. AI can help automate certain repetitive tasks and improve efficiency, but it doesn't remove the need for DevOps professionals. However, AI and automation tools have significantly changed the role of a DevOps engineer, reducing the time spent on routine tasks and increasing the focus on strategic, high-value work. It's important for DevOps professionals to stay current with AI and machine learning technologies as they continue to evolve.
42 |
43 | Here is what Google bard had to say about it.
44 |
45 | >No, AI tools will not replace DevOps engineers. AI tools can automate some of the tasks that DevOps engineers perform, but they cannot replace the human expertise and judgment that is essential for successful DevOps implementations.
46 |
47 | ## 🐧 Learn Linux
48 |
49 | Lnux is #1 essential skill for any aspiring DevOps engineer.
50 |
51 | In DevOps engineer interviews, Linux questions are often asked because Linux is the most popular operating system in the public cloud. To increase your chances of success, it's important to have a good understanding and practical experience with Linux . The commonly used Linux distributions by organizations are RHEL, Ubuntu, Cloud Specific Linux Distributions (eg: Amazon Linux). Having knowledge of these distributions shows your expertise in Linux and your ability to work effectively in the DevOps field.
52 |
53 | **➡️ Tasks:** [Mastering Linux for DevOps](https://github.com/techiescamp/devops-roadmap/blob/main/tasks/02-linux-tasks.md)
54 |
55 | ## Learn about IT Infrastructure Components
56 |
57 | To excel in a DevOps environment, it is essential to grasp the fundamental components of an organization's infrastructure, whether it resides in a cloud or an on-premise data center. Acquiring this knowledge enables effective collaboration and communication, especially when engaging with network and security teams.
58 |
59 | Having a solid understanding of infrastructure empowers you to ask relevant questions, comprehend their responses, and enhance collaboration. Instead of simply stating, "It's not working, can you fix it?" you can contribute more effectively by saying, "I've conducted initial troubleshooting and identified some findings. Could you investigate further and help us determine the root cause of the issue?"
60 |
61 |
62 |
--------------------------------------------------------------------------------
/tasks/01-devops-research.md:
--------------------------------------------------------------------------------
1 | ### Task 1: Research and Define
2 | ---
3 | - Research and explore additional resources to understand DevOps.
4 | - Define the basic concept of DevOps and its philosophy.
5 | - Identify the roles involved in DevOps and their significance.
6 | - Take notes of key points and findings.
7 |
8 | > **To Do:** Write a blog post summarizing your research and understanding of DevOps.
9 |
10 | ### Task 2: DevOps Misconceptions
11 | ---
12 | - Identify common misconceptions about DevOps.
13 | - Write down these misconceptions.
14 | - Provide corrections or clarifications for each misconception.
15 | - Support your corrections with evidence or examples.
16 |
17 | > **To Do:** Create a blog post addressing these misconceptions and educating readers about DevOps.
18 |
19 | ### Task 3: Discuss DevOps Impact
20 | ---
21 | - Reflect on the impact of DevOps on software development and IT operations.
22 | - Consider how DevOps improves efficiency, collaboration, and communication.
23 | - Find examples or case studies to illustrate the positive outcomes.
24 |
25 | > **To Do:** Write a paragraph or two discussing the transformative power of DevOps in a blog post.
26 |
27 | ### Task 4: DevOps Trend Analysis
28 | ---
29 | - Research current trends in DevOps adoption.
30 | - Look for industry reports and studies.
31 | - Summarize the key trends and patterns.
32 | - Explain why DevOps adoption is important and prevalent.
33 |
34 | > **To Do:** Craft a blog post discussing the changing landscape of DevOps and its future significance.
35 |
36 | ### Task 5: Reflect on the Role of a DevOps Engineer
37 | ---
38 | - Reflect on the responsibilities of a DevOps Engineer.
39 | - Consider the skills, tools, and mindset required for the role.
40 | - Explore the tasks typically handled by a DevOps Engineer.
41 |
42 | > **To Do:** Write a blog post sharing your thoughts and insights on the role.
43 |
44 | ### Task 6: Debate Participation
45 | ---
46 | - Engage in a class debate or discussion about the "DevOps Engineer" title.
47 | - Present arguments both for and against its validity.
48 | - Explore alternative titles that better align with DevOps ethos.
49 |
50 | > **To Do:** Compose a blog post reflecting on the debate and sharing your own opinions on the matter.
51 |
--------------------------------------------------------------------------------
/tasks/02-linux-tasks.md:
--------------------------------------------------------------------------------
1 | ## **Research Linux Distributions**
2 |
3 | ---
4 |
5 | - [ ] Compare and contrast features of RHEL, Fedora and Ubuntu.
6 | - [ ] Compare the package managers used by RHEL, Fedora and Ubuntu.
7 | - [ ] Discuss how system administration varies across different Linux distributions.
8 | - [ ] Investigate the security features inherent to RHEL.
9 |
10 | ## **Setup Linux Environment**
11 |
12 | ---
13 |
14 | **Task 1: Installing a Linux Distribution**
15 |
16 | - [ ] Download a popular Linux distribution (like Ubuntu, Fedora, or CentOS) and install it in a virtual machine or a spare computer.
17 | - [ ] Set up the root user and create a new non-root user for daily tasks.
18 | - [ ] Update the system packages to their latest versions using the package manager (like **`apt`**, **`dnf`**, or **`yum`**).
19 |
20 | **Task 2: Configuring the Shell Environment**
21 |
22 | - [ ] Familiarize yourself with the command line interface.
23 | - [ ] Customize the shell prompt to your liking using PS1 environment variable.
24 | - [ ] Learn about environment variables and set some of your own.
25 | - [ ] Learn about shell aliases and create some useful ones.
26 |
27 | **Task 3: Installing Additional Software**
28 |
29 | - [ ] Install software from the distribution's repositories using the package manager.
30 | - [ ] Add a third-party repository and install software from it.
31 | - [ ] Install software manually from a .deb or .rpm file.
32 | - [ ] Install software manually from source code.
33 |
34 | **Task 4: Configuring Networking**
35 |
36 | - [ ] Configure the network settings using the command line (IP address, DNS servers, etc.).
37 | - [ ] Test the network connectivity with commands like **`ping`** and **`traceroute`**.
38 | - [ ] Set up SSH and connect to your machine remotely.
39 |
40 | **Task 5: Setting Up a Development Environment**
41 |
42 | - [ ] Install a text editor or IDE, like Vim, Emacs, Visual Studio Code, or JetBrains IDEs.
43 | - [ ] Install build tools like **`gcc`** for C/C++, **`openjdk`** for Java, **`python`** for Python, etc.
44 | - [ ] Write a small program and compile/run it.
45 | - [ ] Install Git, clone a repository, and make some changes to it.
46 |
47 | ## **Understanding Linux Terminal**
48 |
49 | ---
50 |
51 | **Task 1: Navigating the Filesystem**
52 |
53 | - [ ] Use **`cd`** to change directories.
54 | - [ ] Use **`ls`** to list directory contents.
55 | - [ ] Use **`pwd`** to print the current working directory.
56 | - [ ] Practice with absolute and relative paths.
57 |
58 | **Task 2: Managing Files and Directories**
59 |
60 | - [ ] Use **`cp`** to copy files and directories.
61 | - [ ] Use **`mv`** to move or rename files and directories.
62 | - [ ] Use **`rm`** to remove files and directories.
63 | - [ ] Use **`touch`** to create new empty files.
64 |
65 | **Task 3: Working with File Content**
66 |
67 | - [ ] Use **`cat`** to display the content of files.
68 | - [ ] Use **`less`** and **`more`** for paging through text files.
69 | - [ ] Use **`head`** and **`tail`** to display the beginning or end of files.
70 |
71 | **Task 4: Redirection and Pipes**
72 |
73 | - [ ] Learn about standard input, standard output, and standard error.
74 | - [ ] Use **`>`** and **`>>`** to redirect output to a file.
75 | - [ ] Use **`<`** to redirect input from a file.
76 | - [ ] Use **`|`** to pipe output from one command to another.
77 |
78 | **Task 5: Searching and Regular Expressions**
79 |
80 | - [ ] Use **`grep`** to search within text.
81 | - [ ] Use **`find`** to search for files in the file system.
82 | - [ ] Use **`|`** and **`grep`** together to filter command output.
83 | - [ ] Learn about basic regular expressions and use them with **`grep`**.
84 |
85 | ## **Linux Storage**
86 |
87 | ---
88 |
89 | **Task 1: Exploring File Systems**
90 |
91 | - [ ] Use **`df`** to display file system disk space usage.
92 | - [ ] Use **`du`** to estimate file and directory space usage.
93 | - [ ] Understand the difference between hard and soft links (**`ln`** command).
94 | - [ ] Explore different file systems (ext4, XFS, Btrfs etc).
95 |
96 | **Task 2: Disk Partitioning and Management**
97 |
98 | - [ ] Use **`fdisk`** to view and manage disk partitions.
99 | - [ ] Format a partition with a file system of your choice.
100 | - [ ] Mount and unmount file systems manually and by using **`/etc/fstab`**.
101 |
102 | **Task 3: Logical Volume Management**
103 |
104 | - [ ] Install and set up Logical Volume Manager (LVM).
105 | - [ ] Create a logical volume, format it, and mount it.
106 | - [ ] Extend a logical volume and resize the file system.
107 | - [ ] Reduce a logical volume and resize the file system.
108 |
109 | **Task 4: Network File System**
110 |
111 | - [ ] Set up a NFS server.
112 | - [ ] Configure a NFS client and mount a remote file system.
113 | - [ ] Understand NFS permissions and squash options.
114 |
115 | **Task 5: Backup and Restore**
116 |
117 | - [ ] Use **`tar`** and **`gzip`** to create a backup of your files.
118 | - [ ] Use **`rsync`** to sync files between different directories or systems.
119 | - [ ] Restore your files from the **`tar`** backup.
120 | - [ ] Explore other backup solutions like **`dd`**, **`dump`**, **`cpio`**, etc.
121 |
122 | ## Linux File Permissions
123 |
124 | ---
125 |
126 | **Task 1: Basic File Permissions**
127 |
128 | - [ ] Create a file and use the **`ls -l`** command to list the permissions.
129 | - [ ] Change the permissions of the file using **`chmod`** command with symbolic (e.g., **`chmod u+x filename`**) and numerical (e.g., **`chmod 644 filename`**) modes.
130 | - [ ] Explain the different permissions (read, write, execute) for user, group, and others.
131 |
132 | **Task 2: Understanding Directory Permissions**
133 |
134 | - [ ] Create a directory and list its permissions.
135 | - [ ] Change the permissions of the directory and explain the impact on the files within.
136 | - [ ] Explain the significance of execute permission on a directory.
137 |
138 | **Task 3: User and Group Management**
139 |
140 | - [ ] Create a new user and group using **`useradd`** and **`groupadd`** commands.
141 | - [ ] Add the user to the group with **`usermod`** or **`gpasswd`**.
142 | - [ ] Change the ownership of a file/directory with **`chown`** and **`chgrp`**.
143 |
144 | **Task 4: Setuid, Setgid, and Sticky Bit**
145 |
146 | - [ ] Create a file and set the Setuid and Setgid permissions.
147 | - [ ] Run the file as a different user and observe the result.
148 | - [ ] Create a directory and set the Sticky Bit. Explain its purpose.
149 |
150 | **Task 5: Access Control Lists (ACLs)**
151 |
152 | - [ ] Use the **`getfacl`** and **`setfacl`** commands to view and modify ACLs on a file/directory.
153 | - [ ] Discuss when and why you would want to use ACLs instead of traditional permissions.
154 |
155 | ## **Linux Security**
156 |
157 | ---
158 |
159 | **Task 1: Configuring Firewalls**
160 |
161 | - [ ] Install and enable a firewall tool like UFW or Firewalld.
162 | - [ ] Create and apply rules to allow and deny certain types of traffic.
163 | - [ ] Test the firewall's efficacy using tools like **`nmap`** or **`telnet`**.
164 |
165 | **Task 2: Understanding SELinux**
166 |
167 | - [ ] Learn about SELinux modes (Enforcing, Permissive, Disabled) and contexts.
168 | - [ ] Use commands such as **`sestatus`**, **`getenforce`**, and **`setenforce`**.
169 | - [ ] Practice changing the SELinux context for a file or process.
170 |
171 | **Task 3: User Rights Management**
172 |
173 | - [ ] Learn about sudo and the **`/etc/sudoers`** file.
174 | - [ ] Add and remove users from the sudo group.
175 | - [ ] Test the effect of these changes.
176 |
177 | T**ask 4: Understanding SSH Key-Based Authentication**
178 |
179 | - [ ] Generate a pair of SSH keys and copy your public key to another machine.
180 | - [ ] Attempt to SSH into the machine using key-based authentication.
181 | - [ ] Disable password-based SSH authentication and attempt to SSH into the machine.
182 |
183 | **Task 5: System Hardening**
184 |
185 | - [ ] Explore system hardening guides and select measures applicable to your environment.
186 | - [ ] Implement chosen hardening measures.
187 | - [ ] Use a tool like Lynis or OpenSCAP to audit the security of your system.
188 |
189 | ## Linux Networking
190 |
191 | ---
192 |
193 | **Task 1: Hostname and Network Configuration**
194 |
195 | - [ ] Use commands such as **`ip`**, **`ip`**, **`ss`**, **`hostname`** and **`nslookup`** to view network configuration and system hostname.
196 | - [ ] Change the IP address and hostname of your machine.
197 | - [ ] Test the changes using **`ping`**, **`nslookup`** or **`hostname -f`**.
198 |
199 | **Task 2: Understanding Network Services**
200 |
201 | - [ ] Install and configure a network service, such as a web server or FTP server.
202 | - [ ] Connect to the service from another machine.
203 | - [ ] Troubleshoot any connection issues that arise.
204 |
205 | **Task 3: Using `iptables`**
206 |
207 | - [ ] Learn about the structure of **`iptables`** rules.
208 | - [ ] Create **`iptables`** rules to allow, deny, or redirect traffic.
209 | - [ ] Use **`iptables -L`** to list your current rules.
210 |
211 | **Task 4: Using `netcat`**
212 |
213 | - [ ] Use **`netcat`** to create a simple server and client on different machines.
214 | - [ ] Send a message from the client to the server.
215 | - [ ] Reverse the roles and send a message from the server to the client.
216 |
217 | **Task 5: Understanding DNS**
218 |
219 | - [ ] Use **`nslookup`** or **`dig`** to query the DNS records for a domain.
220 | - [ ] Change your machine's DNS servers and test the effect.
221 | - [ ] If possible, set up a local DNS server and configure another machine to use it.
222 |
223 | **Task 6: Managing Hostname**
224 |
225 | - [ ] Understand the role and importance of the system hostname.
226 | - [ ] Learn the difference between static and transient hostnames.
227 | - [ ] Change the system hostname using the **`hostnamectl`** command.
228 | - [ ] Verify the changes by displaying the system hostname.
229 | - [ ] Understand how changing the hostname can impact the applications and services running on the system.
230 |
231 | ## **Web Servers and Databases**
232 |
233 | ---
234 |
235 | **Task 1: Install and Configure a Web Server**
236 |
237 | - [ ] Install Apache or Nginx using package management tools like **`apt`** or **`yum`**.
238 | - [ ] Understand and modify the main configuration files.
239 | - [ ] Create a virtual host/domain.
240 |
241 | **Task 2: Host a Website**
242 |
243 | - [ ] Create a simple HTML webpage.
244 | - [ ] Serve the webpage through the web server.
245 | - [ ] Access the webpage from a different machine.
246 |
247 | **Task 3: Secure the Web Server**
248 |
249 | - [ ] Configure firewall rules to allow/deny traffic to the web server.
250 | - [ ] Enable HTTPS using Let's Encrypt.
251 |
252 | **Task 4: Analyzing Server Logs**
253 |
254 | - [ ] Understand the structure and contents of server logs.
255 | - [ ] Use **`grep`**, **`awk`**, and **`cut`** to analyze logs and find specific entries.
256 |
257 | **Database Tasks**
258 |
259 | **Task 5: Install and Configure a Database**
260 |
261 | - [ ] Install MySQL or PostgreSQL using package management tools.
262 | - [ ] Understand and modify the main configuration files.
263 | - [ ] Secure the database installation.
264 |
265 | **Task 6: Create and Manage a Database**
266 |
267 | - [ ] Create a database and a table.
268 | - [ ] Insert, update, and delete data.
269 | - [ ] Perform basic SQL queries to retrieve data.
270 |
271 | **Task 7: Backup and Restore a Database**
272 |
273 | - [ ] Create a backup of the database using **`mysqldump`** or **`pg_dump`**.
274 | - [ ] Restore the database from a backup.
275 |
276 | **Task 8: Monitor Database Performance**
277 |
278 | - [ ] Understand the basic performance metrics for databases.
279 | - [ ] Use tools like **`top`**, **`iostat`**, and **`vmstat`** to monitor system resources utilized by the database.
280 | - [ ] Use database-specific tools (like **`EXPLAIN`** in SQL) to analyze query performance.
281 |
282 | ## **Load Balancers and Reverse Proxy**
283 |
284 | ---
285 |
286 | **Task 1: Understand Load Balancing Concepts**
287 |
288 | - [ ] Learn about the purpose and benefits of load balancing.
289 | - [ ] Understand different load balancing algorithms (Round Robin, Least Connections, etc.).
290 |
291 | **Task 2: Set Up a Load Balancer**
292 |
293 | - [ ] Install and configure HAProxy or Nginx as a load balancer.
294 | - [ ] Create a couple of web servers and configure the load balancer to distribute traffic between them.
295 |
296 | **Task 3: Monitor and Troubleshoot the Load Balancer**
297 |
298 | - [ ] Learn to interpret the stats page in HAProxy or the **`nginx -s`** command output in Nginx.
299 | - [ ] Troubleshoot common issues (e.g., backend server down, high latency).
300 |
301 | **Task 4: Understand Reverse Proxy Concepts**
302 |
303 | - [ ] Understand the purpose of a reverse proxy and how it differs from a forward proxy.
304 |
305 | **Task 5: Set Up a Reverse Proxy**
306 |
307 | - [ ] Configure Nginx or Apache as a reverse proxy server for a web application.
308 | - [ ] Test access to the web application through the reverse proxy.
309 |
310 | **Task 6: Secure the Reverse Proxy**
311 |
312 | - [ ] Enable HTTPS on the reverse proxy.
313 | - [ ] Understand and configure basic access controls (e.g., IP whitelisting).
314 |
315 | **Task 7: Troubleshoot the Reverse Proxy**
316 |
317 | - [ ] Understand common issues (e.g., 502 Bad Gateway errors) and how to resolve them.
318 | - [ ] Learn to read and interpret the reverse proxy logs.
319 |
320 | ## **Systemd Management**
321 |
322 | ---
323 |
324 | **Task 1: Understanding Systemd**
325 |
326 | - [ ] Understand the role of **`systemd`** in the Linux system.
327 | - [ ] Explore the basic concepts related to **`systemd`** (units, targets, services, etc.).
328 |
329 | **Task 2: Working with Services**
330 |
331 | - [ ] Use **`systemctl`** to start, stop, restart, and check the status of services.
332 | - [ ] Identify failed services and understand the reasons using **`systemctl`** and **`journalctl`**.
333 |
334 | **Task 3: Managing Systemd Units**
335 |
336 | - [ ] Understand the structure of a **`systemd`** unit file.
337 | - [ ] Create a simple **`systemd`** service unit from scratch.
338 | - [ ] Enable and disable **`systemd`** services to start at boot.
339 |
340 | **Task 4: Systemd Logs and Troubleshooting**
341 |
342 | - [ ] Use **`journalctl`** to read and filter **`systemd`** logs.
343 | - [ ] Analyze log messages to troubleshoot **`systemd`** service issues.
344 |
345 | **Task 5: Advanced Systemd Management**
346 |
347 | - [ ] Learn about and use **`systemd`** timers as cron replacements.
348 | - [ ] Understand and apply **`systemd`** resource controls and sandboxing features.
349 | - [ ] Create a complex **`systemd`** service unit that manages a real-world application (like a web server or database).
350 |
351 | ## Linux **Troubleshooting**
352 |
353 | ---
354 |
355 | **Task 1: Investigating High Load**
356 |
357 | - [ ] Identify a high load on a system using tools like **`top`**, **`htop`**, or **`uptime`**.
358 | - [ ] Determine which processes are causing the high load.
359 | - [ ] Analyze the system logs (**`/var/log/syslog`**, **`/var/log/messages`**) to look for any error messages related to the problematic processes.
360 |
361 | **Task 2: Resolving Disk Space Issues**
362 |
363 | - [ ] Determine which directories are consuming the most disk space using the **`du`** command.
364 | - [ ] Identify large, unnecessary files for deletion.
365 | - [ ] Monitor disk usage over time to understand usage patterns.
366 |
367 | **Task 3: Troubleshooting Network Issues**
368 |
369 | - [ ] Use **`ping`** and **`traceroute`** to identify network connectivity issues.
370 | - [ ] Use **`netstat`** or **`ss`** to identify which services are listening on which ports.
371 | - [ ] Use **`tcpdump`** to capture and analyze network traffic.
372 | - [ ] Troubleshoot DNS issues using tools like **`dig`** or **`nslookup`**.
373 |
374 | **Task 4: Investigating Memory Usage**
375 |
376 | - [ ] Identify high memory usage processes with **`top`** or **`htop`**.
377 | - [ ] Understand the difference between virtual, shared, and resident memory.
378 | - [ ] Monitor memory usage over time to spot leaks or excessive usage.
379 |
380 | **Task 5: Resolving Permission Issues**
381 |
382 | - [ ] Identify files with incorrect permissions using the **`find`** command.
383 | - [ ] Correctly set file permissions and ownership with **`chmod`** and **`chown`**.
384 | - [ ] Understand and apply the principle of least privilege.
385 |
386 | **Task 6: Analyzing System Performance**
387 |
388 | - [ ] Use **`sar`** to monitor system performance over time.
389 | - [ ] Identify and analyze CPU, memory, and I/O bottlenecks.
390 | - [ ] Troubleshoot slow boot time issues using **`systemd-analyze`**.
391 |
392 | **Task 7: Dealing with Failed Services**
393 |
394 | - [ ] Use **`systemctl`** to check the status of a failed service.
395 | - [ ] Analyze logs of the failed service using **`journalctl`**.
396 | - [ ] Identify and resolve common service failure issues (e.g., configuration errors, missing dependencies).
397 |
398 | ## Control Groups & Namespaces Tasks
399 |
400 | ---
401 |
402 | **Task 1: Exploring Control Groups (cgroups)**
403 |
404 | - [ ] Install **`cgroup`** utilities.
405 | - [ ] Create a new **`cgroup`** and assign a process to it.
406 | - [ ] Limit the CPU and memory usage of your **`cgroup`**.
407 | - [ ] Monitor the resource usage of your **`cgroup`**.
408 |
409 | **Task 2: Playing with Namespaces**
410 |
411 | - [ ] Use **`unshare`** to create new namespaces and run processes inside them.
412 | - [ ] Explore different types of namespaces (PID, NET, UTS, IPC, USER, MNT).
413 | - [ ] Use **`nsenter`** to enter an existing namespace.
414 |
415 | **Task 3: Combining `cgroups` and `namespaces`**
416 |
417 | - [ ] Create a new **`cgroup`** and a new namespace.
418 | - [ ] Run a process inside the new namespace and **`cgroup`**.
419 | - [ ] Limit and monitor the resource usage of the process.
420 |
421 | **Task 4: Troubleshooting with cgroups and namespaces**
422 |
423 | - [ ] Diagnose a system performance issue using cgroup statistics.
424 | - [ ] Use namespaces to isolate a problematic process and diagnose it.
425 | - [ ] Understand how to use cgroups and namespaces for resource management and isolation.
426 |
427 | ## eBPF Tasks
428 |
429 | ---
430 |
431 | **Task 1: Learning Basics of eBPF**
432 |
433 | - [ ] Read up on the basics and understand the concept of eBPF.
434 | - [ ] Explore the purpose and uses of eBPF.
435 |
436 | **Task 2: Setting Up eBPF**
437 |
438 | - [ ] Set up an environment that supports eBPF.
439 | - [ ] Install BCC (BPF Compiler Collection).
440 |
441 | **Task 3: Exploring eBPF Tools**
442 |
443 | - [ ] Use different tools provided by BCC for system analysis.
444 | - [ ] Understand how each tool works and what information it provides.
445 |
446 | **Task 4: Writing eBPF Programs**
447 |
448 | - [ ] Write a basic eBPF program that performs a simple task.
449 | - [ ] Compile and load your eBPF program using BCC.
450 | - [ ] Analyze the effect of your eBPF program on the system.
451 |
452 | **Task 5: Advanced eBPF**
453 |
454 | - [ ] Use eBPF to monitor network traffic.
455 | - [ ] Use eBPF to trace system calls and kernel functions.
456 | - [ ] Implement a complex use case using eBPF. For example, implementing a basic firewall.
457 |
--------------------------------------------------------------------------------
/tasks/03-web-server-tasks.md:
--------------------------------------------------------------------------------
1 | # NGINX Learning Roadmap
2 |
3 | A hands-on guide to learning NGINX fundamentals. This roadmap helps you build a strong foundation before diving into system design, cloud, and Kubernetes.
4 |
5 | ---
6 |
7 | ## 🧠 NGINX Architecture
8 |
9 | - **Deploy NGINX**
10 | Install NGINX and start the service.
11 |
12 | - **Run NGINX in foreground vs background**
13 | Learn the difference between daemonized and foreground mode.
14 |
15 | - **Run NGINX as non-root**
16 | Understand user permissions and improve security.
17 |
18 | - **Understand master vs worker process usage**
19 | Learn how NGINX uses master and worker processes for performance.
20 |
21 | - **CPU/Memory consumed**
22 | Monitor resource usage using tools like `top`, `htop`, or `ps aux`.
23 |
24 | - **How files are managed**
25 | Explore NGINX’s directory structure: configs, logs, web root.
26 |
27 | - **How privileged ports are assigned**
28 | Understand how NGINX binds to ports below 1024 and drops root privileges.
29 |
30 | - **Understand port binding**
31 | Learn how services bind to specific ports.
32 |
33 | - **Bind to specific IP or interface**
34 | Control which IP addresses NGINX listens on.
35 |
36 | - **File permissions set by NGINX**
37 | Check ownership and permissions of NGINX-related files and folders.
38 |
39 | - **Key config files**
40 | Work with `nginx.conf`, `sites-available/`, and `sites-enabled/`.
41 |
42 | - **Reload vs Restart**
43 | Understand signal handling like `SIGHUP`, `SIGTERM`, and how graceful reload works.
44 |
45 | - **Limit access by IP / method**
46 | Use config to restrict access based on IP or HTTP methods.
47 |
48 | ---
49 |
50 | ## 🌐 Serving Websites
51 |
52 | - **Serve static files from a custom location**
53 | Host HTML, CSS, JS, or image files using NGINX.
54 |
55 | ---
56 |
57 | ## 📜 Logging
58 |
59 | - **Check logs and understand its format**
60 | Explore `access.log` and `error.log`. Learn how to read log fields.
61 |
62 | ---
63 |
64 | ## 🌍 DNS and Domain Concepts
65 |
66 | - **Virtual hosts concept**
67 | Use server blocks to host multiple websites on a single server.
68 |
69 | - **Map the server to a domain name**
70 | Use `/etc/hosts` for local mapping or set up DNS A records.
71 |
72 | - **Learn subdomain concepts**
73 | Serve `sub.domain.com` from separate config or web root.
74 |
75 | ---
76 |
77 | ## 🔁 Reverse Proxy and Load Balancing
78 |
79 | - **Reverse proxy setup**
80 | Forward requests to a backend service like Node.js, Python, or Go.
81 |
82 | - **Upstream and load balancing**
83 | Load balance requests across multiple backend servers using round-robin or failover.
84 |
85 | - **Health checks**
86 | Configure passive health checks to manage upstream availability.
87 |
88 | ---
89 |
90 | ## 🔀 URL Rewriting and Routing
91 |
92 | - **URL rewriting with regex**
93 | Use `rewrite` and `location` blocks with regular expressions to redirect or modify URLs.
94 |
95 | - **Redirect HTTP to HTTPS**
96 | Force HTTPS redirection with a simple rule.
97 |
98 | - **Custom 404 pages**
99 | Show friendly error pages for invalid routes.
100 |
101 | ---
102 |
103 | ## 🔒 SSL and Security
104 |
105 | - **Enable HTTPS with self-signed cert**
106 | Practice setting up SSL manually.
107 |
108 | - **Use Let's Encrypt for free SSL**
109 | Automate certificate provisioning using `certbot`.
110 |
111 | - **Add security headers**
112 | Improve browser security by adding headers like `X-Frame-Options`, `X-Content-Type-Options`, and `Content-Security-Policy`.
113 |
114 | - **Rate limiting and request throttling**
115 | Protect your server with rules like `limit_req` and `limit_conn`.
116 |
117 | - **Basic authentication**
118 | Add simple username/password protection using `.htpasswd` and `auth_basic`.
119 |
120 | ---
121 |
122 | ## 🧩 Modular Configuration
123 |
124 | - **Include reusable config snippets**
125 | Break down configs using `include` for cleaner management.
126 |
127 | ---
128 |
129 | ## 🛠 Debugging and Tools
130 |
131 | - **Test config without restarting**
132 | Use `nginx -t` to validate syntax.
133 |
134 | - **Live tail logs**
135 | Use `tail -f /var/log/nginx/access.log` to see real-time requests.
136 |
137 | - **Check open ports and sockets**
138 | Use `netstat -tulpn` or `ss -tuln` to list listening services.
139 |
140 | ---
141 |
142 | ## ✅ Final Tip
143 |
144 | Use each section as a hands-on task. Practice each config on a test server or VM. Once you're confident with these topics, you’ll have a strong base to move into Docker and Kubernetes with clarity and confidence.
145 |
--------------------------------------------------------------------------------