--- layout: docs page_title: Install Vault manually description: >- Manually install a Vault binary. --- # Manually install a Vault binary Install Vault using a compiled binary. ## Before you start - **You must have a valid Vault binary**. You can [download and unzip a precompiled binary](/vault/install) or [build a local instance of Vault from source code](/vault/docs/install/build-from-code). ## Step 1: Configure the environment 1. Set the `VAULT_DATA` environment variable to your preferred Vault data directory. For example, `/opt/vault/data`: ```shell-session export VAULT_DATA=/opt/vault/data ``` 1. Set the `VAULT_CONFIG` environment variable to your preferred Vault configuration directory. For example, `/etc/vault.d`: ```shell-session export VAULT_CONFIG=/etc/vault.d ``` 1. Move the Vault binary to `/usr/bin`: ```shell-session $ sudo mv PATH/TO/VAULT/BINARY /usr/bin/ ``` 1. Ensure the Vault binary can use `mlock()` to run as a non-root user: ```shell-session $ sudo setcap cap_ipc_lock=+ep $(readlink -f $(which vault)) ``` See the support article [Vault and mlock()](https://support.hashicorp.com/hc/en-us/articles/115012787688-Vault-and-mlock) for more information. 1. Create your Vault data directory: ```shell-session $ sudo mkdir -p ${VAULT_DATA} ``` 1. Create your Vault configuration directory: ```shell-session $ sudo mkdir -p ${VAULT_CONFIG} ``` We recommend storing Vault data and Vault logs on different volumes than the operating system. 1. Run Powershell as Administrator. 1. Set a `VAULT_HOME` environment variable to your preferred Vault home directory. For example, `c:\Program Files\Vault`: ```powershell $env:VAULT_HOME = "${env:ProgramFiles}\Vault" ``` 1. Create the Vault home directory: ```powershell New-Item -ItemType Directory -Path "${env:VAULT_HOME}" ``` 1. Create the Vault data directory. For example, `c:\Program Files\Vault\Data`: ```powershell New-Item -ItemType Directory -Path "${env:VAULT_HOME}/Data" ``` 1. Create the Vault configuration directory. For example, `c:\Program Files\Vault\Config`: ```powershell New-Item -ItemType Directory -Path "${env:VAULT_HOME}/Config" ``` 1. Create the Vault logs directory. For example, `c:\Program Files\Vault\Logs`: ```powershell New-Item -ItemType Directory -Path "${env:VAULT_HOME}/Logs" ``` 1. Move the Vault binary to your Vault directory: ```powershell Move-Item ` -Path ` -Destination ${env:VAULT_HOME}\vault.exe ``` 1. Add the Vault home directory to the system `Path` variable. [![System PATH editor in Windows OS GUI](/img/install/windows-system-path.png)](/img/install/windows-system-path.png) ## Step 2: Configure user permissions 1. Create a system user called `vault` to run Vault when your Vault data directory as `home` and `nologin` as the shell: ```shell-session $ sudo useradd --system --home ${VAULT_DATA} --shell /sbin/nologin vault ``` 1. Change directory ownership of your data directory to the `vault` user: ```shell-session $ sudo chown vault:vault ${VAULT_DATA} ``` 1. Grant the `vault` user full permission on the data directory, search permission for the group, and deny access to others: ```shell-session $ sudo chmod -R 750 ${VAULT_DATA} ``` 1. Create an access rule to grant the `Local System` user access to the Vault directory and related files: ```powershell $SystemAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule( "SYSTEM", "FullControl", "ContainerInherit,Objectinherit", "none", "Allow" ) ``` 1. Create an access rule to grant yourself access to the Vault directory and related files so you can test your Vault installation: ```powershell $myUsername = Get-CimInstance -Class Win32_Computersystem | ` Select-Object UserName | foreach {$_.UserName} ; ` $AdminAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule( "$myUsername", "FullControl", "ContainerInherit,Objectinherit", "none", "Allow" ) ``` If you expect other accounts to start and run the Vault server, you must create and apply access rules for those users as well. While users can run the Vault CLI without explicit access, if they try to start the Vault server, the process will fail with a permission denied error. 1. Update permissions on the `env:VAULT_HOME` directory: ```powershell $ACLObject = Get-ACL ${env:VAULT_HOME} ; ` $ACLObject.AddAccessRule($AdminAccessRule) ; ` $ACLObject.AddAccessRule($SystemAccessRule) ; ` Set-Acl ${env:VAULT_HOME} $ACLObject ``` ## Step 3: Create a basic configuration file Create a basic Vault configuration file for testing and development. The sample configuration below disables TLS for simplicity and is not appropriate for production use. Refer to the [configuration documentation](/vault/docs/configuration) for a full list of supported parameters. 1. Create a file called `vault.hcl` under your configuration directory: ```shell-session $ sudo tee ${VAULT_CONFIG}/vault.hcl < Create a file called `vault.hcl` under your configuration directory: ```powershell @" ui = true cluster_addr = "http://127.0.0.1:8201" api_addr = "https://127.0.0.1:8200" disable_mlock = true storage "raft" { path = "$(${env:VAULT_HOME}.Replace('\','\\'))\\Data" node_id = "127.0.0.1" } listener "tcp" { address = "0.0.0.0:8200" cluster_address = "0.0.0.0:8201" tls_disable = 1 } "@ | Out-File -FilePath ${env:VAULT_HOME}/Config/vault.hcl -Encoding ascii ``` You **must** escape the Windows path character in your Vault configuration file or the Vault server will fail with an error claiming the file contains invalid characters. ## Step 4: Verify your installation To confirm your Vault installation, use the help option with the Vault CLI to confirm the CLI is accessible and bring up the server in development mode to confirm you can run the binary. 1. Bring up the help menu in the Vault CLI: ```shell-session $ vault -h ``` 1. Use the Vault CLI to bring up a Vault server in development mode: ```shell-session $ vault server -dev -config ${VAULT_CONFIG}/vault.hcl ``` 1. Start a new Powershell session without Administrator permission. 1. Bring up the help menu in the Vault CLI: ```powershell vault -h ``` 1. Use the Vault CLI to bring up a Vault server in development mode: ```powershell vault server -dev -config ${env:VAULT_HOME}\Config\vault.hcl ``` ## Related tutorials The following tutorials provide additional guidance for installing Vault and production cluster deployment: - [Get started: Install Vault](/vault/tutorials/getting-started/getting-started-install) - [Day One Preparation](/vault/tutorials/day-one-raft) - [Recommended Patterns](/vault/tutorials/recommended-patterns) - [Start the server in dev mode](/vault/tutorials/getting-started/getting-started-dev-server)