{"id":18256900,"url":"https://github.com/mediacomem/comem-archidep","last_synced_at":"2025-07-02T07:03:06.623Z","repository":{"id":42101914,"uuid":"146902957","full_name":"MediaComem/comem-archidep","owner":"MediaComem","description":"Media engineering architecture \u0026 deployment course","archived":false,"fork":false,"pushed_at":"2025-01-24T14:59:02.000Z","size":100206,"stargazers_count":23,"open_issues_count":5,"forks_count":65,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-20T07:06:34.592Z","etag":null,"topics":["architecture","cloud","continuous-deployment","deployment","git","reverse-proxy","ssh"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MediaComem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-08-31T14:31:44.000Z","updated_at":"2025-01-24T14:59:05.000Z","dependencies_parsed_at":"2023-02-09T03:31:26.763Z","dependency_job_id":"297c7cfd-1194-461d-9007-c8bb73547e4c","html_url":"https://github.com/MediaComem/comem-archidep","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/MediaComem/comem-archidep","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MediaComem%2Fcomem-archidep","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MediaComem%2Fcomem-archidep/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MediaComem%2Fcomem-archidep/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MediaComem%2Fcomem-archidep/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MediaComem","download_url":"https://codeload.github.com/MediaComem/comem-archidep/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MediaComem%2Fcomem-archidep/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263091016,"owners_count":23412339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["architecture","cloud","continuous-deployment","deployment","git","reverse-proxy","ssh"],"created_at":"2024-11-05T10:24:03.890Z","updated_at":"2025-07-02T07:03:06.535Z","avatar_url":"https://github.com/MediaComem.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Media Engineering Architecture \u0026 Deployment course\n\n\nIn this course you will learn:\n\n- How to deploy applications on a Linux server on an IaaS platform ([Microsoft\n  Azure][azure]).\n- How to deploy applications on a PaaS platform ([Render][render]).\n\nIn pursuit of this goal, you will learn:\n\n- How to use the command line and version control.\n- The basics of Unix system administration and cloud computing architectures.\n- Good security practices related to system administration and web applications.\n\nThis course is a [Media Engineering][comem] web development course taught at\n[HEIG-VD][heig].\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n- [Legend](#legend)\n- [What you will need](#what-you-will-need)\n- [Plan](#plan)\n- [How to improve our basic deployment](#how-to-improve-our-basic-deployment)\n- [Our architecture so far](#our-architecture-so-far)\n- [More Practice](#more-practice)\n- [Extra](#extra)\n- [Frequently Asked Questions](#frequently-asked-questions)\n  - [What is the meaning of life?](#what-is-the-meaning-of-life)\n  - [How do I do *X* with the command line?](#how-do-i-do-x-with-the-command-line)\n  - [How do I do *Y* with Git?](#how-do-i-do-y-with-git)\n  - [How do I do *Z* with my server?](#how-do-i-do-z-with-my-server)\n  - [How do I choose a password?](#how-do-i-choose-a-password)\n- [References](#references)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Legend\n\nParts of this guide are annotated with the following icons:\n\n- :book: Slides or written documents pertaining to the various topics discussed during this course.\n- :hammer: An exercise aimed at practicing a topic discussed in class.\n- **:collision: This exercise is graded.**\n- :key: Solution(s) for an exercise.\n- :movie_camera: A video related to a subject.\n- :classical_building: The deployment architecture put in place during an\n  exercise.\n\nFor you to succeed in this course, it is highly recommended that you read and complete all the content that is not labeled \"_extra_\".\n\n## What you will need\n\n- A Unix CLI\n  - Linux/macOS users can use their standard Terminal\n  - Windows users should install [Git for Windows][git-for-windows] which\n    includes Git Bash (or the [WSL][wsl] for more advanced users)\n- [Git][git-downloads]\n  - macOS users should [install the command-line tools][macos-cli]\n  - Windows users should install [Git for Windows][git-for-windows]\n  - Linux users on Debian/Ubuntu-based systems can [install Git with the `sudo\n    apt install git` command][install-git-on-linux], or with their other\n    distributions' package managers.\n- A free [GitHub][github] account\n- [Google Chrome][chrome] (recommended, any browser with developer tools will do)\n  - [Firefox][firefox] (optional, required for one network exercise)\n- A free [Render][render] account\n\n## Plan\n\n- Introduction\n  - [:book: Command line](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/cli?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:book: Shell scripting](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/shell-scripting?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Hello Shell](ex/hello-shell.md)\n  - [:book: Secure Shell (SSH)](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/ssh?home=MediaComem%2Fcomem-archidep%23readme)\n    - [:book: The Birth (or Death) of an SSH Connection](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/ssh/images/ssh-connection.png) ([PDF Version](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/ssh/images/ssh-connection.pdf))\n  - [:hammer: Hello SSH](ex/hello-ssh.md)\n- Version control\n  - [:hammer: :book: Version control with Git](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/git?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: :book: Git branching](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/git-branching?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: :book: Collaborating with Git](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/git-collaborating?home=MediaComem%2Fcomem-archidep%23readme)\n  - **[:collision: :hammer: Collaborative exercise](https://github.com/MediaComem/comem-archidep-php-todo-exercise)**\n    - [:classical_building: Architecture](https://github.com/MediaComem/comem-archidep-php-todo-exercise#classical_building-architecture)\n- Security\n  - [:book: Open Web Application Security Project][owasp]\n  - [:book: OWASP Top 10 - The Ten Most Critical Web Application Security Risks][owasp-top10]\n  - [:book: The image gallery](./ex/security-gallery.md)\n  - [:book: The CSRF bank](https://github.com/MediaComem/csrf-bank)\n  - [:book: Phishing page](https://github.com/MediaComem/phishing)\n\n- Basic deployment\n  - [:book: Cloud computing](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/cloud?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Run your own virtual server on Microsoft Azure](ex/azure-setup.md)\n  - [:book: Linux](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/linux?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:book: Unix basics \u0026 administration](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/unix-admin?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Permissions](ex/unix-permissions.md)\n    - [:key: Solutions](ex/unix-permissions-solutions.md)\n  - [:book: Unix processes](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/unix-processes?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Pipeline](ex/unix-pipeline.md)\n    - [:key: Solutions](ex/unix-pipeline-solutions.md)\n  - [:book: Unix networking](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/unix-networking?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Transmission Control Protocol (TCP)](ex/tcp.md)\n    - [:classical_building: Architecture](ex/tcp.md#classical_building-architecture)\n  - [:hammer: Deploy a PHP application with SFTP](ex/sftp-deployment.md)\n    - [:classical_building: Architecture](ex/sftp-deployment.md#classical_building-architecture)\n  - [:book: How to improve our basic deployment](#how-to-improve-our-basic-deployment)\n\n- Advanced deployment\n  - [:hammer: Deploy a PHP application with Git](ex/git-clone-deployment.md)\n    - [:classical_building: Architecture](ex/git-clone-deployment.md#classical_building-architecture)\n  - [:book: Twelve-factor app][12factor]\n  - [:book: Unix environment variables](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/unix-env-vars?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Configure a PHP application through environment variables](ex/config-through-environment.md)\n    - [:key: Solution](ex/config-through-environment-solution.md)\n    - [:classical_building: Architecture](ex/config-through-environment.md#classical_building-architecture)\n  - [:book: Linux process management](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/linux-process-management?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Manage a PHP application with systemd as a Process Manager](ex/systemd-deployment.md)\n    - [:key: Solution](ex/systemd-deployment-solution.md)\n    - [:classical_building: Architecture](ex/systemd-deployment.md#classical_building-architecture)\n  - [:book: Domain Name System (DNS)](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/dns?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Configure a domain name](ex/dns-configuration.md)\n    - [:classical_building: Architecture](ex/dns-configuration.md#classical_building-architecture)\n  - [:book: Reverse proxying](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/reverse-proxy?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Deploy a static site with nginx](ex/nginx-static-deployment.md)\n    - [:key: Solution](ex/nginx-static-deployment-solution.md)\n    - [:classical_building: Architecture](ex/nginx-static-deployment.md#classical_building-architecture)\n  - [:hammer: Deploy a PHP application with nginx and the FastCGI process manager](ex/nginx-php-fpm-deployment.md)\n    - [:key: Solution](ex/nginx-php-fpm-deployment-solution.md)\n    - [:classical_building: Architecture](ex/nginx-php-fpm-deployment.md#classical_building-architecture)\n  - [:book: TLS/SSL certificates](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/ssl?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Provision a Let's Encrypt TLS certificate with Certbot](ex/certbot-deployment.md)\n    - [:classical_building: Architecture](ex/certbot-deployment.md#classical_building-architecture)\n  - [:hammer: Deploy a multi-component web application with nginx](./ex/revprod-deployment.md)\n    - [:key: Solution](ex/revprod-deployment-solution.md)\n    - [:classical_building: Architecture](ex/revprod-deployment.md#classical_building-architecture)\n  - [:hammer: Horizontally scale a web application with nginx as a load balancer](./ex/fibscale-deployment.md)\n    - [:classical_building: Architecture](ex/fibscale-deployment.md#classical_building-architecture)\n\n- Automated deployment\n  - [:book: Git hooks](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/git-hooks?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Set up an automated deployment with Git hooks](ex/git-automated-deployment.md)\n    - [:classical_building: Architecture](ex/git-automated-deployment.md#classical_building-architecture)\n\n- Graded deployment exercise\n  - [:collision: :hammer: Deploy Minesweeper, a Phoenix (Elixir) \u0026 Alpine.js application with a PostgreSQL database](./ex/minesweeper-deployment.md)\n    - [:classical_building: Architecture](ex/minesweeper-deployment.md#classical_building-architecture)\n\n- Managed deployments\n  - [:book: Platform-as-a-Service (PaaS)](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/paas?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Deploy a static site to GitHub Pages](./ex/github-pages-deployment.md)\n  - [:hammer: Deploy a static site to Netlify](./ex/netlify-static-deployment.md)\n  - [:hammer: Deploy web applications with a database to Render](./ex/render-database-deployment.md)\n  - [:book: Docker](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/docker?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Containerize a static site using Docker](./ex/docker-static.md)\n    - [:key: Solution](ex/docker-static-solution.md)\n  - [:book: Docker Compose](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/docker-compose?home=MediaComem%2Fcomem-archidep%23readme)\n  - [:hammer: Deploy a PHP application with Docker Compose](./ex/docker-compose-todolist.md)\n    - [:key: Solution](ex/docker-compose-todolist-solution.md)\n    - [:classical_building: Architecture](./ex/docker-compose-todolist.md#classical_building-architecture)\n\n## How to improve our basic deployment\n\nThe basic SFTP deployment of the PHP TodoList has several flaws which we will\nfix during the rest of the course:\n\n- Transfering files manually through SFTP is slow and error-prone. We will use\n  **Git** to reliably transfer files [from our central\n  codebase][12factor-codebase] and easily keep our deployment up-to-date over\n  time.\n- [Hardcoding configuration is a bad practice][12factor-config]. We will use\n  **environment variables** so that our application can be dynamically\n  configured and deployed in any environment without changing its source code.\n- Starting our application manually is not suitable for a production deployment.\n  We will use a **process manager** to manage the lifecycle of our application:\n  starting it automatically when the server boots, and restarting it\n  automatically if it crashes.\n- Accessing a web application through an IP address is not user-friendly. We\n  will obtain a domain and configure its DNS zone file so that our application\n  is accessible with a human-readable **domain name**.\n- Using a non-standard port is not user-friendly either. We will run the\n  application on **port 80 or 443** so that the end user does not have to\n  specify a port in the browser's address bar.\n- Running our application server directly on port 80 or 443 will cause a\n  problem: only one process can listen on a given port at the same time. We need\n  another tool to support **multiple production deployments on the same\n  server**. That will be the job of a reverse proxy like [Apache][apache] or\n  [nginx][nginx].\n- Our application is not secure as indicated by the browser, because it is\n  served over HTTP and not HTTPS. We will obtain a **TLS/SSL certificate**\n  signed by a trusted certificate authority so that our application can be\n  served over HTTPS and recognized as secure by browsers.\n- The [PHP Development Server][php-dev-server] is not meant to deploy\n  applications in production environments. We will use the [**FastCGI Process\n  Manager**][php-fpm] to perform a production-grade deployment, making our\n  application more resilient and able to serve more clients concurrently.\n\n## Our architecture so far\n\nThis is a simplified architecture of the main running processes and\ncommunication flow at the end of all the exercises we have done so far (up to\n[:hammer: Deploy a PHP application with nginx and the FastCGI process manager](ex/nginx-php-fpm-deployment.md) at this time):\n\n![Architecture](./ex/architecture-up-to-fibscale.png)\n\n\u003e [Architecture PDF version](./ex/architecture-up-to-fibscale.pdf).\n\n\u003e :books: Note that unless you stopped it yourself, the systemd service you set\n\u003e up during the exercise [:hammer: Manage a PHP application with systemd as a\n\u003e Process Manager](ex/systemd-deployment.md) is still running, and the PHP\n\u003e Todolist is still accessible on port 3000 as well as through nginx on port 80.\n\n## More Practice\n\n- [:hammer: Configure nginx as a load balancer](ex/load-balancing-deployment.md)\n\n**Complete deployments**\n\n- [:hammer: Deploy Flood It, a Spring Boot (Java) \u0026 Angular application with a PostgreSQL database](ex/floodit-deployment.md)\n- [:hammer: Deploy RPS, a Node.js \u0026 Svelte web application with a PostgreSQL database](ex/rps-deployment.md)\n- [:hammer: :hammer: Deploy WOPR, a Sinatra \u0026 Svelte application with a Redis database](ex/wopr-deployment.md)\n  - [:classical_building: Architecture](./ex/wopr-deployment.md#classical_building-architecture)\n- [:hammer: Deploy One Chat Room, an Express (Node.js) web application with a MongoDB database](ex/one-chat-room-deployment.md)\n  - [:classical_building: Architecture](ex/end-result.pdf)\n- [:hammer: Deploy Big Browser, a Nest.js (Node.js) application with a Redis database](ex/big-browser-deployment.md)\n\n## Extra\n\n- [:book: Docker: From Hello World to Swarm](https://github.com/mediacomem/docker-brownbag)\n- [:book: Continuous software development](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/continuous?home=MediaComem%2Fcomem-archidep%23readme)\n- [:book: Automated testing (2018)](https://mediacomem.github.io/comem-archidep/2024-2025/subjects/automated-testing?home=MediaComem%2Fcomem-archidep%23readme)\n- [:book: Automated testing (2020)](https://mediacomem.github.io/comem-archioweb/2024-2025/subjects/automated-testing/?home=MediaComem%2Fcomem-archioweb%23readme#1)\n  - [:movie_camera: YouTube: Expecting Profesionnalism – Robert C. Martin](https://youtu.be/BSaAMQVq01E)\n  - [:movie_camera: YouTube: GOTO 2017 – The Scribe's Oath – Robert C. Martin](https://youtu.be/Tng6Fox8EfI)\n  - [:movie_camera: YouTube: The Future of Programming – Robert C. Martin](https://youtu.be/ecIWPzGEbFc)\n\n\n## Frequently Asked Questions\n\n### What is the meaning of life?\n\n42\n\n### How do I do *X* with the command line?\n\n[Read the command line cheatsheet](CLI-CHEATSHEET.md)\n\n### How do I do *Y* with Git?\n\n[Read the Git cheatsheet](GIT-CHEATSHEET.md)\n\n### How do I do *Z* with my server?\n\n[Read the system administration cheatsheet](SYSADMIN-CHEATSHEET.md)\n\n### How do I choose a password?\n\n[Don't use something that is hard to remember](https://xkcd.com/936/). You're\nbetter off [using a passphrase](https://www.useapassphrase.com) (here's a\n[French version](https://passwordcreator.org/fr.html#good)).\n\n## References\n\nThese are the main references used throughout this course. More detailed and\nadditional links to various online articles and documentation can be found at\nthe end of each subject.\n\n- [The Linux Documentation Project](https://tldp.org)\n  - [Advanced Bash-Scripting Guide](https://tldp.org/LDP/abs/html/)\n- [Building the Future of the Command Line](https://github.com/readme/featured/future-of-the-command-line)\n- [SSH, The Secure Shell: The Definitive Guide - Daniel J. Barrett, Richard E. Silverman, Robert G. Byrnes](https://books.google.ch/books/about/SSH_The_Secure_Shell_The_Definitive_Guid.html?id=9FSaScltd-kC\u0026redir_esc=y)\n- [The Git Book](https://git-scm.com/book)\n  - [Chapter 1 - Getting Started](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control)\n  - [Chapter 2 - Git Basics](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository)\n  - [Chapter 3 - Git Branching](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell)\n  - [Chapter 5 - Distributed Git](https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows)\n  - [Chapter 8 - Customizing Git - Git Hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)\n- [Open Web Application Security Project](https://www.owasp.org)\n  - [OWASP Top Ten](https://owasp.org/www-project-top-ten/)\n- [Ops School Curriculum](https://www.opsschool.org)\n  - [Sysadmin 101](https://www.opsschool.org/sysadmin_101.html)\n  - [Unix Fundamentals 101](https://www.opsschool.org/unix_101.html)\n  - [Unix Fundamentals 201](https://www.opsschool.org/unix_201.html)\n  - [Networking 101](https://www.opsschool.org/networking_101.html)\n  - [Networking 201](https://www.opsschool.org/networking_201.html)\n- [The Internet Explained From First Principles](https://ef1p.com/internet)\n- [The Twelve-Factor App](https://12factor.net)\n- [Systemd Manual](https://www.freedesktop.org/software/systemd/man/)\n  - [Unit Configuration](https://www.freedesktop.org/software/systemd/man/systemd.unit.html)\n  - [Service Configuration](https://www.freedesktop.org/software/systemd/man/systemd.service.html)\n- [nginx documentation](http://nginx.org/en/docs/)\n  - [Beginner's Guide](http://nginx.org/en/docs/beginners_guide.html)\n  - [Configuring HTTPS Servers](http://nginx.org/en/docs/http/configuring_https_servers.html)\n- [Render Documentation](https://render.com/docs)\n\n[Wikipedia](https://www.wikipedia.org) is also often referenced, namely these\nand related articles:\n\n- [Secure Shell](https://en.wikipedia.org/wiki/Secure_Shell)\n- [Cloud Computing](https://en.wikipedia.org/wiki/Cloud_computing)\n- [Internet Protocol](https://en.wikipedia.org/wiki/Internet_Protocol)\n  - [IP Address](https://en.wikipedia.org/wiki/IP_address)\n  - [Port (Computer Networking)](\u003chttps://en.wikipedia.org/wiki/Port_(computer_networking)\u003e)\n- [Domain Name System](https://en.wikipedia.org/wiki/Domain_Name_System)\n- [Environment Variable](https://en.wikipedia.org/wiki/Environment_variable)\n- [Reverse Proxy](https://en.wikipedia.org/wiki/Reverse_proxy)\n- [Public Key Certificate](https://en.wikipedia.org/wiki/Public_key_certificate)\n\n[12factor]: https://12factor.net\n[12factor-codebase]: https://12factor.net/codebase\n[12factor-config]: https://12factor.net/config\n[apache]: https://httpd.apache.org\n[azure]: https://azure.microsoft.com\n[chrome]: https://www.google.com/chrome/\n[comem]: http://www.heig-vd.ch/comem\n[firefox]: https://www.mozilla.org/en-US/firefox/\n[git-downloads]: https://git-scm.com/downloads\n[git-for-windows]: https://gitforwindows.org\n[github]: https://github.com\n[heig]: http://www.heig-vd.ch\n[install-git-on-linux]: https://www.atlassian.com/git/tutorials/install-git#linux\n[macos-cli]: https://www.freecodecamp.org/news/install-xcode-command-line-tools/\n[nginx]: https://www.nginx.com\n[owasp]: https://www.owasp.org\n[owasp-top10]: https://owasp.org/www-project-top-ten/\n[php-dev-server]: https://www.php.net/manual/en/features.commandline.webserver.php\n[php-fpm]: https://www.php.net/manual/en/install.fpm.php\n[render]: https://render.com\n[wsl]: https://learn.microsoft.com/en-us/windows/wsl/about\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmediacomem%2Fcomem-archidep","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmediacomem%2Fcomem-archidep","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmediacomem%2Fcomem-archidep/lists"}