If you want to set up the
Best environment for software development in Linux Mint (or Ubuntu and other Debian based distros), this is the right article for this.
Every software developer organizes their development environment for programming using a mix of technologies and tools to use to program, improve productivity and that has their personal preferences.
In this post I’ll show you how I organize my development environment, starting telling you that there is no best but the most appropriate development environment.Here I show
the my best operating system configuration, programming and other tools according to my context, but it can help you in yours.
First we will establish the context of the development environment you want to assemble.
My most common need is web software development. It does not mean that this environment after configured cannot be used to develop desktop or mobile applications, but that in these context it may be that the environment needs some adjustments for your context.
To develop desktop for Microsoft Windows, Apple Mac iOS or iPhone, it is possible that the operating system itself, the basis of the entire environment, needs to be exclusive to the platform.
This is why this technical contextualization is important, in my case the list of technologies that I use in my applications:
- Applications Model: Web Softwares
- Backend: PHP, Laravel, Eloquent, NodeJS, NPM, Express.js, Asp.NET Core, C#
- Databases: Mysql, PostgreSQL, Sqlite, MongoDB, Redis
- Versioning: Git
Starting at the beginning, choosing the operating system to run as web development tools is crucial. For me, since 2005, developing software has required the use of a Linux distro.
A little of my story with Linux: I made the first attempts to use it in the late 1990s, but focusing on developing software and not working like Sysadmin, I found it very painful to configure hardware and resolve several small conflicts. I used the Brazilian distro called Connective which later became Mandriva.
A few years later, in 2005, developing corporate web applications using Eclipse to develop in Java, JSF and run JBoss application server, on Windows (ME or XP), the frustration with performance was constant. Several minutes to up the server and application with each small code change and test.
I decided to give Linux a new chance and chose the distro sensation of the time: Linux Ubuntu.
I was very pleased to be able to install a dual boot much faster and easier than my first experiments with Linux, and I was much more than satisfied, in ecstasy, when I ran the first tests with the Eclipse/Java/Jboss stack, and performance (start up speed mainly) exceed 70% compared to Windows.
I had no doubt, 2 months later I no longer used dual-boot between Windows and Linux and had decided to adopt Linux as my primary operating system for my web software development environment, and other professional or personal activities.
Around 2012 when Ubuntu decided to adopt a new window manager, Unity, several problems began to displease me in the user experience, as well as the performance that degrade too much. At this time a new change, and after testing a few distros, I decided adopting Linux Mint - and I’m using it till today, initially using Mate Window Manager (GNOME version 2 fork) and more recently I started use Cinammon Manager (fork of the Gnome version 3).
These are the steps I use to install Linux Mint on my computers (soon I write a detailed tutorial):
- Download the latest ISO image at Mint web site
- Then build a bootable USB using one of the following applications (in order of my preference):
- In my computer run the boot by USB port, then I execute the installation by the USB Live version of Linux Mint
- When you reach to the point of deciding on the formatting or advanced installation, I choose advanced and define the partitions of the disc as follows:
- Bootable area for EFI - 540 MB
- Mounting point of Boot,
/boot- 50 MB
/swap- twice the amount of RAM memory
- General mounting point (root),
/- at least 120 GB
- Home mounting point,
/home- the rest of the free space
After installing the Linux Mint operating system my the development environment is ready to be configured and personalized.
Snaps are Linux app packages for desktop, cloud and IoT that are simple to install, secure, cross-platform, and dependency-free, that means, you don’t get stuck with distro repositories.
They update automatically and typically run within a confined and transaction-based environment. This brings security and robustness as key features, alongside being easy to install, easy to maintain and easy to upgrade.
Snaps help users in a very easy way to install and run apps like Spotify, Slack, Postman or Hugo. They help sysadmins run servers like NextCloud, developers to package and distribute their work to the global Snap Store, and they help everyone build and deploy IoT devices running Ubuntu Core.
So I install Snap to help me configure several services and apps that are not frequently updated in Debian, Ubuntu or Mint apt repositories.
Before start the installation of my development tools, I configure a new SSH key on my Github profile, so I can ASAP clone any script I need to setup my new development environment.
That’s right, the next step is to install a virtualization tool to make flexible the different environments that need to run different projects. I do this even before installing my programming IDE.
I am talking basically about installing Docker, perhaps Virtualbox, and other tools in this context that allow me to contain my environment, run up and stop services according to the project.
Read the tutorial which explains how to install Docker on Linux Mint, Ubuntu and Debian based distros.
After installing Docker and Docker-Compose, we are ready to install the basis of our programming languages, databases and other tools in Docker containers without “polluting” the installation of the host operating system, as well as having the advantage of start and stop services when necessary and use different versions of programming languages for each project.
For example, you can read de Laradock series to know how to use different PHP versions for each Laravel project you have.
To work with Laravel PHP on my projects, I install PHP and various tools with Docker. I like to be productivity in the local environment without having to worry about extreme configurations for containers, so I use a set of setting files for
Docker-Compose called Laradock Project.
In addition to these containers bringing the installation of PHP language, I also use databases in Docker, the Docker-Compose Setting Laradock for MySQL, Mariadb, PostgreSQL, Mongodb, Redis, Elastic Search, Memcached.
I have also containers for other tools such as Phpmyadmin, Pgadmin, Rabbitmq, Beanstalkd, Selenium, Graph, among others.
Information about what is the Laradock and how to install or solve problems you find in these posts on my site: Laradock Tutoriais
Visual Studio Code is a greate source code editor that provides comprehensive support and easy understanding for editing, navigation and code debug.
You can easily install extensions to add new interface languages, programming languages, themes, debugers and to connect to additional services such as databases or APIs.
To install VScode on Linux Mint, Ubuntu and Debian, click here to read the tutorial on the blog.
PhpStorm is perfect to work with Symfony, Laravel, Drupal, WordPress, Zend Framework, Magento, Joomla!, CakePHP, Yii e other PHP frameworks.
FTP - File Transfer Protocol, is protocol, which even not being the ideal tool for deploying web applications, it is a greate tool to have installed when you need any quick access to servers to download or send files in a contextual situation.
Of course there are extreme use for FTP transfer, but in software development context, its use to me is secondary.
In addition to FTP it is very useful to keep synchronized data, such as backup, and cloud sync. I am not talking about maintaining “backup” from your source code files, your versioning management should be performed with
Git or another source code versioning system. But to keep your work files as documents from text editors, spreadsheets, images and other media, synchronized and safe.
For this I also use keep a signing from Google Drive - $9.99 to 200 MB, and synchronize the data using Insync.
Insync license is very accessible and lifetime, click here to get yours.
Filezilla is my favorite FTP client for over 2 decades.
For my passwords and other sensitive data I use an Open Source password management application from one of the oldest projects in this segment: Keepassxc.
Essential for any computer user, essential work tool for developers.
As I use Linux Mint, I only maintain two internet browsers installed: Firefox and Chrome. In the past I even kept Chromium but gave up its use despite the chrome privacy invasion abuses. But this is a topic for another article.
How to work with software development without a tool that allows the management of databases, both for SQL commands for relational databases, such as navigation of their structures and [Reverse Engineering](/Engineering-Reverse-Systems-e-dated-migration-softwares-legged banks/) for visualization in diagrams.
My favorite software for decades for this purpose is DBeaver Database Client.
Any modern software performs integrations or exposes its functions through APIs (Application Programming Interface), on HTTP Protocol.
To develop APIs, documentin and testing it, I use Postman.
The easiest way of installing Postman on Linux Ubuntu or Linux Mint, is to install the snap package.
snap install postman
Read above abou snap manager.
They were already essential to software development teams, now that remote work has been consolidated (finally) even more teams should use effective tools for communication and collaboration.
The ones I generally use are “online” in the browser, such as Google Suite (Google Workspace), email customer (usually Gmail), teams collaboration as Slack.
But some find it more productive locally installed, which is the case with Microsoft Teams.
Many tools are useful for increasing everyday productivity for software development professionals in various areas: web, desktop, mobile, UX, design, etc.
One of the recurring tasks in software development is the capture of desktop screens. For various reasons it is necessary to perform a screenshot: facilitate conversation with a user person, write software manuals, demonstrate code blocks.
For many years I used Shutter as my official Linx Mint and Ubuntu screenshot tool. But as its development is in a slow pace, although it’s still an excellent application, I have currently using and adopted as my official scrrenshot software Flameshot.
Diagramming and design softwares can significantly improve productivity and quality for software development. These tools help developers visualize complex systems, map out relationships, and communicate ideas effectively.
Some ways these tools can help software development:
- Visualizing complex systems
- Simplifying communication
- Designing user interfaces (UI)
- Documenting processes
- Identifying potential issues
Diagrams.net is a powerful, free, and user-friendly diagramming tool that supports various diagram types, including flowcharts, UML diagrams, and entity-relationship diagrams. It also provides real-time collaboration, version control, and seamless integration with popular platforms like Google Drive, Dropbox, and Microsoft OneDrive.
Well, part of my job is to mantain a tech blog, this one you are reading at mazer.dev, so I need to install some tools that help me to write and publish. As for writing I do use Markdown files on VSCode, but for publishing it I work with Hugo.
For this it is also necessary to install Go.