A guide to setting up an Apple Mac for DevOps and software development. This is current for macOS 10.14 (Mojave).
Jun 24, 2019 macOS Dev Setup. This document describes how I set up my developer environment on a new MacBook or iMac. We will set up popular programming languages (for example Node (JavaScript), Python, and Ruby).You may not need all of them for your projects, although I recommend having them set up as they always come in handy.
Log in once, run Software Update, and ensure that the operating system is at the latestpoint release. After all of the updates have been applied, restart the computer.
Log in again and create an Admin user account for your use. If other people will beusing the machine, create Standard accounts for them. Log out of the initial account,and log in to the Admin account that you have just created.
Always log in with this new Admin account. The benefit of leaving the initial accountuntouched is that it ensures that you always have a working account to login with.
Admin accounts have sudo privileges: All Admin accounts on a Mac may use sudo to runcommand-line utilities with administrative (root) privileges.
You should also find an external hard drive. Begin using Time Machine as soon aspossible, as it provides the most easy method for backing up your system.
Configuring The Trackpad
To make the trackpad behave correctly, ensure that these settings are enabled:
Creating a Private Applications Folder
Once you have logged into your account, create a folder called Applications withinyour home folder. Whenever you are prompted to drag a new applications into the globalApplications folder, put it in this private Applications folder instead. Someapplications have to be installed to global folders, but in most cases you can keep thesystem directories clean by storing third-party products in your private Applicationsfolder.
Securing the Safari Browser
Whether or not you regularly use Safari, you should open it once, and adjust thesettings in case that you use it later.
First, choose Safari > Preferences > General and deselect the option Open “safe” files after downloading.
Second, go to Safari > Preferences > Search. Decide which search engine that you want to use. Ensure that Safari Suggestions is not enabled.
Then, check the plug-in settings. Go to Safari > Preferences > Security > Plug-in Settings… and review the plug-ins and settings.
Apple provide quite secure operating systems, but unfortunately convenience has won outover security in a few places. These can easily be corrected by changing a few settings.If you are using a laptop then you should probably make all of these changes as soon aspossible.
Basic Settings
Select System Preferences > Security & Privacy, and set the following:
Disable Spotlight
By default, Spotlight sends queries to Apple. Unless you want this feature, turn it off.
Select System Preferences > Spotlight > Search Results, and ensure that Spotlight Suggestions is not enabled.
Enable File Vault NOW
Current versions of macOS include File Vault 2, a full-disk encryption system that haslittle in common with the much more limited File Vault 1. You should enable File VaultNOW, because it is the only protection against anyone with physical access to yourcomputer. All other security measures will be completely bypassed if someone withphysical access simply restarts the computer with a bootable pen drive.
File Vault really is secure, which means that you can permanently lose access to yourdata if you lose the passwords and the recovery key.
Set a Firmware Password
Set a password to stop access to theRecovery mode. Otherwise, any maliciousindividual can change the firmware settings to boot from a disc or device of theirchoosing. If you did not enable File Vault, then the attacker will have complete accessto all of the files on the system.
Apple Knowledge Base article HT204455provides full details.
Setting Up Time Machine Backups
Time Machine is simple to set up. Just take a suitably large external hard drive, plug itin to your Mac, and agree when prompted. The drive setup process will reformat the harddrive. The only settings that may need to change are the exclusions.
Choose System Preferences > Time Machine, and click Options. Add to the exclusionslist any folders that contain ISO disk images, virtual machines, or database files (suchas Entourage). If the external hard drive is short of space, exclude the Systemfolder.
The first step is to install a compiler. The easiest way to install one is with theXcode Command Line Tools package.
Once you have the compiler that is provided by Xcode, you can useHomebrew to install everything else that you need.
Getting Xcode
Apple now provide the Xcode suite as a free download from the App Store. To installXcode Command Line Tools, install Xcode from the App Store, then open a Terminal windowand enter the following command:
Setting Up Homebrew
Homebrew provides a package management system for macOS, enabling youto quickly install and update the tools and libraries that you need. Follow theinstructions on the site.
You should also amend your PATH, so that the versions of tools that are installed withHomebrew take precedence over others. To do this, edit the file .bashrc inyour home directory to include this line:
You need to close all terminal windows for this change to take effect.
To check that Homebrew is installed correctly, run this command in a terminal window:
To update the index of available packages, run this command in a terminal window:
Once you have set up Homebrew, use the brew install command to add command-line software to your Mac, and brew cask install to add graphical software. For example, this command installs the Slack app:
Installing the Git Version Control System
The Xcode Command Line Tools include a copy of Git, which isnow the standard for Open Source development, but this will be out of date.
To install a newer version of Git than Apple provide, use Homebrew. Enter this command in a terminal window:
If you do not use Homebrew, go to the Web site and follow thelink for Other Download Options to obtain a macOS disk image. Open your downloadedcopy of the disk image and run the enclosed installer in the usual way, then dismountthe disk image.
Always set your details before you create or clone repositories on a new system. Thisrequires two commands in a terminal window:
The global option means that the setting will apply to every repository that you workwith in the current user account.
To enable colors in the output, which can be very helpful, enter this command:
Text Editors
Installations of macOS include older command-line versions of bothEmacs and vim, as well asTextEdit, a desktop text editor. TextEdit is designed for light-weight word processing,and has no support for programming. Add the code editors or IDEs that you would prefer to use.
If you do not have a preferred editor, consider using a version of Visual Studio Code. Read the next section for more details.
To work with a modern Vim editor, install Neovim.
Visual Studio Code
Visual Studio Code is a powerful desktop editor for programming, with built-in support for version control and debugging. The large range of extensions for Visual Studio Code enable it to work with every popular programming language and framework. It is available free of charge.
The Microsoft releases of Visual Studio Code are proprietary software with telemetry enabled by default. To avoid these issues, use the packages that are provided by the vscodium project instead.
Once you have installed Visual Studio Code or VSCodium, read this article for more information about using the editor.
Neovim
If you would like a modern Vim editor with a good default configuration, set up Neovim.
Setting The EDITOR Environment Variable
Whichever text editor you choose, remember to set the EDITOR environment variable inyour ~/.bashrc file, so that this editor is automatically invoked by command-linetools like your version control system. For example, put this line in your profile tomake Neovim (nvim) the favored text editor:
Setting Up A Directory Structure for Projects
To keep your projects tidy, I would recommend following theGo developer conventions. These guidelines may seemslightly fussy, but they pay off when you have many projects, some of which are ondifferent version control hosts.
First create a top-level directory with a short, generic name like code. By default Gouses a directory called go, but you can change that when you set up a Go installation.
In this directory, create an src sub-directory. For each repository host, create asubdirectory in src that matches your username. Check out projects in the directory.The final directory structure looks like this:
Creating SSH Keys
You will frequently use SSH to access Git repositories or remote UNIX systems. macOSincludes the standard OpenSSH suite of tools.
OpenSSH stores your SSH keys in a .ssh directory. To create this directory, run these commands in a terminal window:
To create an SSH key, run the ssh-keygen command in a terminal window. For example:
Use 4096-bit RSA keys for all systems. The older DSA standard only supports 1024-bitkeys, which are now too small to be considered secure.
JavaScript Development: Node.js
Homebrew provides separate packages for each version of Node.js.To ensure that you are using the version of Node.js that you expect, specify the versionwhen you install it. For example, enter this command in a Terminal window to install theNode.js 12, the current LTS release:
Add the bin/ directory for this Node.js installation to your PATH:
If you need yarn, enter this command in a Terminal window toinstall it:
Go Development
Use Homebrew to install Go:
This provides the standard command-line tools for Go.
Open office compatible with catalina for mac. The current version of Go includes support for dependency management with modules. Use modules for new projects. Some existing projects still use dep, or an older tool.
Setting a GOPATH
Current versions of Go do not require a GOPATH environment variable, but you should set it to ensure that third-party tools and Terminal auto-completion work correctly.
Set a GOPATH environment variable in your ~/.bashrc file:
Then, add this to your PATH:
Close the Terminal and open it again for the changes to take effect.
Java Development: AdoptOpenJDKWhich Version of Java?
Many vendors provide a JDK. To avoid potential licensing and support issues, use the JDK that is provided by the AdoptOpenJDK project. The versions of Java on the OpenJDK Website are for testers, and the Oracle JDK is a proprietary product that requires license fees.
Use the LTS version of the OpenJDK, unless you need features that are in the latest releases.
Once you have installed a JDK, get the Apache Maven build tool. This is provided by the Maven project itself, and is not part of the OpenJDK.
Use jEnv if you need to run multiple JDKs, such as different versions of the same JDK.
Setting up Java with Homebrew
Run these commands in a terminal window:
This installs version 11 of the OpenJDK, from the AdoptOpenJDK project.
Run this command in a terminal window to install Maven:
Setting up jEnv
Run this command in a terminal window to install jEnv:
Next, add this to your PATH:
Add this to your ~/.bashrc file:
Open a new terminal window, and run this command:
This enables jEnv to manage the JAVA_HOME environment variable.
To avoid inconsistent behaviour, close all the terminal windows that you currently have open. The jEnv utility will work correctly in new terminal windows.
Lastly, run this command to register your current JDK with jEnv:
To see a list of the available commands, type jenv in a terminal window:
Manual Set up of AdoptOpenJDK
To manually install a copy of the JDK:
To manually install a copy of Apache Maven:
Replace MAVEN-DIRECTORY with the name of the directory that Maven uses, such as apache-maven-3.6.0.
Maven is written in Java, which means that the project provides one package, which works on any operating system that has a supported version of Java.
Python Development: pipenv
Unfortunately, macOS includes a copy of Python 2, so you will need to install Python 3 yourself.
To maintain current and clean Python environments, you should also use pipenv. This builds on two features of Python: the virtual environments and the pip utility.
Enter this command to install Python 3 and pipenv using Homebrew:
Use pipenv to manage your Python projects. The pipenv tool itself will automatically work with the copy of Python 3 from Homebrew.
To use the Python 3 interpreter outside of projects that are managed by pipenv, specify python3 on the command-line and inyour scripts, rather than python:
If you need to run the pip utility, rather than setting up a development environment with pipenv, always use the command pip3:
The Python Guide tutorialshows you how to work with pipenv.
Rust Development: rustup
The official rustup utility enables you to install the tools for building softwarewith the Rust programming language. Click on the Install button on the front page of theRust Website, and follow the instructions.
By default, the installer adds the correct directory to your path. If this does notwork, add this to your PATH manually:
This process installs all of the tools into your home directory, and does not add anyfiles into system directories.
Ruby Development: RVM
All macOS systems include a copy of Ruby, but it is outdated. To maintain current andclean Ruby environments, use the RVM system.
RVM relies on Git, so you must have a working installation of Git before you can set upRVM.
By default, RVM downloads copies of Ruby that have been compiled for your operatingsystem. If there is no compiled version, RVM then falls back to downloading the sourcecode and then compiling it on your computer. Enter this command to ensure that therequirements for compiling Ruby are on your system, using Homebrew:
Finally, you can speed up installation of gem packages by disabling the generation oflocal documentation. To do this, create a file in your home directory with the name.gemrc and put this line in it:
Minikube sets up and manages Kubernetes on a single system, so that you can develop and test without needing a set of servers.
To install Minikube with Homebrew, run these commands in a terminal window:
By default, Minikube uses a virtual machine manager. If you do not need VirtualBox, install hyperkit, which provides a minimal virtual machine manager.
To install Helm with Homebrew, run this command in a terminal window:
To install Skaffold with Homebrew, run this command in a terminal window:
This article explains Minikube in more detail.
Consider using containers to run the databases that you need. If you prefer to install servicesdirectly on to your workstation, Homebrew provides packages for PostgreSQL, MariaDB and MySQL.
Installing PostgreSQL
To install PostgreSQL using Homebrew, enter this command in a terminal window:
This command installs the server, the command-line tools, and the client libraries thatare needed to compile adapters for programming languages.
Homebrew also provides some commands for managing your PostgreSQL installation. Forexample, to start the server, follow the instructions that are displayed after theinstallation process is completed. If you upgrade your copy of PostgreSQL, you shoulduse the postgresql-upgrade-database command that Homebrew gives you.
Installing MariaDB or MySQL
To install MariaDB using Homebrew, enter this command in a terminal window:
To install MySQL using Homebrew, enter this command in a terminal window:
These commands install the server, the command-line tools, and the client libraries thatare needed to compile adapters for programming languages. To start the server, followthe instructions that are displayed after the installation process is completed.
For compatibility, MariaDB uses the same names for command-line tools as MySQL.
Remember to set a password for the root accounts. First, login with the mysqlcommand-line utility:
The -q Option Disables Command History: By default, the command-line client storesthe full text of every command in a history file. If you know that you are going torun statements that include passwords or other sensitive data, use the -q option.
Run these statements to change the password for root access:
You now need a password to login to the installation as root. To login with root again,use this command:
Enter the password when prompted.
You should also remove the anonymous accounts and test database that MySQL automaticallyincludes:
If you intend to duplicate a production environment for testing, create a configurationfile on your Mac. Production installations of MySQL should be configured withappropriate SQL modes to enable data integrity safeguards. By default, MySQL permitsvarious types of invalid data to be entered.
Database Management Tools
Apple offer overviews and task-orientated help on theirsupport Web site for new macOS users.
Every new user should probably readHow to switch to the Mac, by Rui Carmo.
The macOS Privacy and Security Guide by Dr Doh provides extensive information about those topics.
Get your Local Web Development Environment Up & Running on macOS Catalina 10.15
With Apples’ new macOS Catalina 10.15 available for download, here is how to get the AMP stack up and running on the new macOS. This tutorialwill go through the process of getting Apache, MySQL, PHP (or otherwise known as the ‘AMP’ stack)and phpMyAdmin running on the new mac OS Catalina.
This tutorial sets up the AMP stack in more of a traditional way using the loaded Apache and PHP and downloading MySQL and phpMyAdmin.
Setting Stuff UpApache/WebSharing
Web serving is built into Catalina with Apache app, it is installed ready to be fired up.
This needs to be done in the Terminal which is found in the OS filing system at /Applications/Utilities/Terminal
For those not familiar with the Terminal, it really isn’t as intimidating as you may think, once launched you are faced with a command prompt waiting for your commands – just type/paste in a command and hit enter, some commands give you no response – it just means the command is done, other commands give you feedback.
Using the prefix of sudo is required for commands that have their applications protected in specific folders – when using sudo you will need to confirm with your admin password or iCloud password if set up that way…. let’s get to it …
to start Apache web sharing
Make a bootable installer drive: The quick way. Connect your drive to your Mac. It’s OK if it’s not formatted as a Mac drive. The app will reformat it. Launch Install Disk Creator. In the main window, you’ll see a pop-up menu under “Select the volume to become the installer.”. Click on the menu. Sep 27, 2017 The simplest way to create a boot USB drive is to download DiskMaker X and use it to create your drive. Generally, the latest version supports only the latest version of macOS; if you want to install something older than macOS High Sierra, check the list of older versions and download one that’s compatible with your chosen operating system. Mar 12, 2020 How to create a bootable installer for macOS Download macOS. Installers for each of these macOS versions download directly to your Applications folder as an app. Use the 'createinstallmedia' command in Terminal. Connect the USB flash drive or other volume that you're using for the. Mac os x mavericks installer download.
to stop it
to restart it
To find the Apache version
The Apache version that comes in macOS Catalina is Apache/2.4.41
After starting Apache – test to see if the webserver is working in the browser – http://localhost – you should see the “It Works!” text.
If you don’t get the localhost test, you can try troubleshooting Apache to see if there is anything wrong in its config file by running
This will give you an indication of what might be wrong.
Document Root
Document root is the location where the files are shared from the file system and is similar to the traditional names of ‘public_html‘ and ‘htdocs‘, macOS has historically had 2 web roots one at a system level and one at a user level – you can set both up or just run with one, the user level one allows multiple accounts to have their own web root whilst the system one is global for all users. It seems there is less effort from Apple in continuing with the user level one but it still can be set up with a couple of extra tweaks in configuration files. It is easier to use the user level one as you don’t have to keep on authenticating as an admin user.
System Level Web Root
– the default system document root is still found at –
http://localhost/
The files are shared in the filing system at –
User Level Root
The other web root directory which is missing by default is the ‘~/Sites’ folder in the User account. This takes a bit longer to set up but some users are very accustomed to using it.
You need to make a “Sites” folder at the root level of your account and then it will work. Once you make the Sites folder you will notice that it has a unique icon which is a throwback from a few versions older. Make that folder before you set up the user configuration file described next.
You have to make a few additional tweaks to get the ~/Sites folder back up and running.
Setting Up Macos For Web Development Software
Add a “username.conf” filed under:
If you don’t already have one (very likely), then create one named by the short username of the account with the suffix .conf, its location and permissions/ownership is best tackled by using the Terminal, the text editor ‘nano‘ would be the best tool to deal with this.
If you would rather edit config files in a text editor as an app I would suggest text editor like the free BBEdit which allows you to open hidden system files.
Launch Terminal, (Applications/Utilities), and follow the commands below, first one gets you to the right spot, 2nd one opens the text editor on the command line (swap ‘username‘ with your account’s shortname, if you don’t know your account shortname type ‘whoami‘ the Terminal prompt):
Then add the content below swapping in your ‘username’ in the code below, there is a slightly different user directive for Catalina, make sure ‘Require host localhost’ is used:
Permissions on the file should be:
If not, you need to change it…
Open the main httpd.conf and allow some modules:
And make sure these modules are uncommented (the first 2 should already be on a clean install):
While you have this file open also to get php running, uncomment the below … (Mentioned also in the PHP part of the article).
And also uncomment this configuration file also in httpd.conf – which allows user home directories.
Save all your changes (Control + O in nano)
Then open another Apache config file and uncomment another file:
And uncomment:
Save all your changes (Control + O in nano)
Restart Apache for the new file to be read:
Then this user level document root will be viewable at:
http://localhost/~username/
You should only see a directory tree like structure if the folder is empty.
Override .htaccess and allow URL Rewrites
If you are going to use the web serving document root at /Library/WebServer/Documents it is a good idea to allow any .htaccess files used to override the default settings – this can be accomplished by editing the httpd.conf file at line 217 and setting the AllowOverride to All and then restart Apache. This is already taken care of at the Sites level webroot by following the previous step.
Also while here allow URL rewrites so your permalinks look clean, not ugly.
Uncomment in httpd.conf – should be uncommented on a clean install.
PHP
PHP 7.3.8 is loaded in this version of macOS Catalina and needs to be turned on by uncommenting a line in the httpd.conf file.
Use “control” + “w” to search within nano and search for ‘php’ this will land you on the right line then uncomment the line (remove the #):
Write out and Save using the nano shortcut keys at the bottom ‘control o’ and ‘control x’
Reload Apache to kick in
To see and test PHP, create a file name it “phpinfo.php” and file it in your document root with the contents below, then view it in a browser.
MySQL
MySQL doesn’t come pre-loaded with macOS Catalina and needs to be dowloaded from the MySQL site.
The latest version of MySQL 8.0.17 does work with the public release of macOS.
Use the macOS 10.14 (x86, 64-bit), DMG Archive version (works on macOS Catalina).
If you are upgrading from a previous macOS and have an older MySQL version you do not have to update it.
Also if you have a clean install and want the earlier MySQL version 5.7, you can still get this from the MySQL site – from the ‘Looking for previous GA versions’ link. (MySQL 8 is relatively new and not in many production set ups)
One thing with MySQL upgrades, always take a data dump of your database in case things go south and before you upgrade to macOS Catalina make sure your MySQL Server is not running.
When downloading you don’t have to sign up, look for » No thanks, just take me to the downloads! – go straight to the download mirrors and download the software from a mirror which is closest to you.
Once downloaded open the .dmg and run the installer.
During the MySQL process you are prompted to choose between strong and legacy password encryptions, since version 8 is entirely new, some software like phpMyAdmin can’t connect with the newer encryptions – so if you are going to use a GUI wrapper like phpMyadmin I suggest you stick to legacy.
Then add a password for the MySQL root user.
Add Mysql to your path
After installation, in order to use MySQL commands without typing the full path to the commands you need to add the mysql directory to your shell path, (optional step) this is done in your Zsh shell profile “.zsh” file in your home directory (previous shells were bash), if you don’t have that file just create it using vi or nano:
The first command brings you to your home directory and opens the .zsh file or creates a new one if it doesn’t exist, then add in the line above which adds the MySQL binary path to commands that you can run. Exit the file with type “control + x” and when prompted to save the change by typing “y”. The last thing to do here is to reload the shell for the above to work straight away.
Change the MySQL root password
(This section is left in for reference – in previous macOS MySQL packages the password set during the installation process would fail – hence the info below. This newer version, however, seems to work).
Note that this is not the same as the root or admin password of macOS – this is a unique password for the MySQL root user.
Stop MySQL
Start it in safe mode:
This will be an ongoing command until the process is finished so open another shell/terminal window, and log in without a password as root:
Change the lowercase ‘MyNewPass’ to what you want – and keep the single quotes.
Start MySQL
Starting MySQL
You can then start the MySQL server from the System Preferences or via the command line.
The new MySQL system preference also has the uninstall feature – useful if you’ve installed it with a security encryption that’s not working for you and want to try the other one. You can also see the paths to the config and data sources of MySQL in the configuration tab.
Or to Command line start MySQL.
To find the MySQL version from the terminal, type at the prompt:
This also puts you into a shell interactive dialogue with MySQL, type q to exit.
Fix the 2002 MySQL Socket error
Fix the looming 2002 socket error – which is linking where MySQL places the socket and where macOS thinks it should be, MySQL puts it in /tmp and macOS looks for it in /var/mysql the socket is a type of file that allows MySQL client/server communication.
phpMyAdmin
First fix the 2002 socket error if you haven’t done so from the MySQL section-
Download phpMyAdmin, the zip English package will suit a lot of users, then unzip it and move the folder with its contents into the document root level renaming folder to ‘phpmyadmin’.
Make the config folder
Change the permissions
Run the set up in the browser
http://localhost/~username/phpmyadmin/setup/ orhttp://localhost/phpmyadmin/setup/
You need to create a new localhost mysql server connection, click new server.
Switch to the Authentication tab and set the local MySQL root user and the password. Add in the username “root” (maybe already populated, add in the password that you set up earlier for the MySQL root user set up, click on save and you are returned to the previous screen. (This is not the macOS Admin or root password – it is the MySQL root user)
Now going to http://localhost/~username/phpmyadmin/ will now allow you to interact with your MySQL databases.
Permissions
To run a website with no permission issues it is best to set the web root and its contents to be writeable by all since it’s a local development it shouldn’t be a security issue.
Let’s say that you have a site in the User Sites folder at the following location ~/Sites/testsite you would set it to be writeable like so:
Setting Up Macos For Web Development Software
If you are concerned about security then instead of making it world writeable you can set the owner to be Apache _www but when working on files you would have to authenticate more as admin you are “not” the owner, you would do this like so:
This will set the contents recursively to be owned by the Apache user.
If you had the website stored at the System level Document root at say /Library/WebServer/Documents/testsite then it would have to be the latter:
Another more straightforward way to do this if you have a one user workstation is to change the Apache web user from _www to your account.
That’s it! You now have the native AMP stack running on top of macOS Catalina.
If you are a WordPress user and want a smooth lean local development environment – also worth checking out is Laravel Valet which runs on top of macOS – check out my Valet WordPress Guide on macOS.
Setting Up Macos For Web Development 10RelatedComments are closed.
|