initial commit
This commit is contained in:
19
README.md
Normal file
19
README.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
## ec2-build-docker-host
|
||||||
|
|
||||||
|
This script sets up a Docker test system based on NixOS. For configuration options consult:
|
||||||
|
|
||||||
|
https://search.nixos.org/options
|
||||||
|
|
||||||
|
To change the resulting system, edit the *configuration.nix* and re-run the script.
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
```
|
||||||
|
git clone https://github.com/mrckndt/ec2-build-docker-host
|
||||||
|
cd ec2-build-docker-host
|
||||||
|
|
||||||
|
bash ec2-build-docker-host -i <PATH-TO-IDENTITY-FILE>
|
||||||
|
or
|
||||||
|
./ec2-build-docker-host -i <PATH-TO-IDENTITY-FILE>
|
||||||
|
```
|
||||||
|
|
||||||
|
Follow the shown instructions and wait...
|
||||||
165
configuration.nix
Normal file
165
configuration.nix
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
{ config, lib, modulesPath, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
allowedTCPPorts = [ 80 443 8065 ];
|
||||||
|
allowedUDPPorts = [ ];
|
||||||
|
autoUpdateContainers = true;
|
||||||
|
hostName = "nixos-docker-test";
|
||||||
|
systemPackages = with pkgs; [
|
||||||
|
bind
|
||||||
|
bmon
|
||||||
|
docker-compose
|
||||||
|
file
|
||||||
|
htop
|
||||||
|
iotop
|
||||||
|
ncdu
|
||||||
|
netcat-gnu
|
||||||
|
nmap
|
||||||
|
nmon
|
||||||
|
psmisc
|
||||||
|
ranger
|
||||||
|
rsync
|
||||||
|
];
|
||||||
|
stateVersion = "23.05";
|
||||||
|
timeZone = "Europe/Berlin";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ "${modulesPath}/virtualisation/amazon-image.nix" ];
|
||||||
|
|
||||||
|
boot.tmp = {
|
||||||
|
cleanOnBoot = true;
|
||||||
|
useTmpfs = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
documentation = {
|
||||||
|
info.enable = false;
|
||||||
|
man.generateCaches = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
systemPackages = systemPackages;
|
||||||
|
variables = {
|
||||||
|
LESS = mkDefault "-FRSMKI";
|
||||||
|
SYSTEMD_LESS = mkDefault "FRSMKI";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fonts.fontconfig.enable = false;
|
||||||
|
|
||||||
|
i18n.supportedLocales = [
|
||||||
|
"en_US.UTF-8/UTF-8"
|
||||||
|
"de_DE.UTF-8/UTF-8"
|
||||||
|
];
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
hostName = hostName;
|
||||||
|
firewall = {
|
||||||
|
allowedTCPPorts = allowedTCPPorts;
|
||||||
|
allowedUDPPorts = allowedUDPPorts;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nix = {
|
||||||
|
gc = {
|
||||||
|
automatic = true;
|
||||||
|
options = "--delete-older-than 30d";
|
||||||
|
};
|
||||||
|
settings.auto-optimise-store = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
neovim = {
|
||||||
|
enable = true;
|
||||||
|
vimAlias = true;
|
||||||
|
viAlias = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
configure = {
|
||||||
|
customRC = ''
|
||||||
|
filetype plugin indent on
|
||||||
|
|
||||||
|
set autowrite
|
||||||
|
set expandtab
|
||||||
|
set ignorecase
|
||||||
|
set laststatus=2
|
||||||
|
set linebreak
|
||||||
|
set list listchars=tab:▸\ ,trail:·
|
||||||
|
set mouse=a
|
||||||
|
set nofoldenable
|
||||||
|
set nojoinspaces
|
||||||
|
set nowrap
|
||||||
|
set number
|
||||||
|
set shiftwidth=2
|
||||||
|
set showbreak=↪\
|
||||||
|
set splitbelow
|
||||||
|
set splitright
|
||||||
|
set statusline=\(%n\)\ %<%.99f\ %y\ %w%m%r%=%-14.(%l,%c%V%)\ %P
|
||||||
|
set textwidth=120
|
||||||
|
set wrapscan
|
||||||
|
|
||||||
|
nnoremap <silent> <C-b> :buffers<CR>:buffer<Space>
|
||||||
|
|
||||||
|
unmap Y
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
tmux = {
|
||||||
|
enable = true;
|
||||||
|
aggressiveResize = true;
|
||||||
|
baseIndex = 1;
|
||||||
|
clock24 = true;
|
||||||
|
escapeTime = 0;
|
||||||
|
extraConfig = ''
|
||||||
|
set -g mouse on
|
||||||
|
set -g renumber-windows on
|
||||||
|
set -g set-titles on
|
||||||
|
set -g status-interval 10
|
||||||
|
set -g status-right "#(whoami)@#(hostname) | #(cut -f1 -d \" \" < /proc/loadavg) | %H:%M "
|
||||||
|
set -ga terminal-overrides ",xterm-256color:Tc"
|
||||||
|
|
||||||
|
unbind C-b
|
||||||
|
set -g prefix C-x
|
||||||
|
bind C-x send-prefix
|
||||||
|
'';
|
||||||
|
historyLimit = 10000;
|
||||||
|
terminal = "xterm-256color";
|
||||||
|
};
|
||||||
|
zsh = {
|
||||||
|
enable = true;
|
||||||
|
enableBashCompletion = true;
|
||||||
|
ohMyZsh = {
|
||||||
|
enable = true;
|
||||||
|
theme = "gentoo";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# needed for rootless containers (e.g. with podman)
|
||||||
|
security.unprivilegedUsernsClone = config.virtualisation.containers.enable;
|
||||||
|
|
||||||
|
system = {
|
||||||
|
autoUpgrade.enable = true;
|
||||||
|
stateVersion = stateVersion;
|
||||||
|
};
|
||||||
|
|
||||||
|
time.timeZone = timeZone;
|
||||||
|
|
||||||
|
users.defaultUserShell = mkIf config.programs.zsh.enable pkgs.zsh;
|
||||||
|
|
||||||
|
virtualisation = {
|
||||||
|
docker.enable = true;
|
||||||
|
oci-containers.backend = "docker";
|
||||||
|
|
||||||
|
oci-containers.containers.watchtower = mkIf autoUpdateContainers {
|
||||||
|
image = "containrrr/watchtower:latest";
|
||||||
|
volumes = [ "/var/run/docker.sock:/var/run/docker.sock" ];
|
||||||
|
extraOptions = [
|
||||||
|
"--security-opt=no-new-privileges:true"
|
||||||
|
"--pids-limit=100"
|
||||||
|
"--read-only"
|
||||||
|
"--tmpfs=/tmp"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
57
ec2-build-docker-host
Executable file
57
ec2-build-docker-host
Executable file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<EOF
|
||||||
|
Usage:
|
||||||
|
$(basename "$0") [OPTION...]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h Print this help
|
||||||
|
-i Path to SSH identity file
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
while getopts i:h opt; do
|
||||||
|
case "$opt" in
|
||||||
|
i)
|
||||||
|
identityFile="${OPTARG}"
|
||||||
|
;;
|
||||||
|
h)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
usage >&2
|
||||||
|
exit 64
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
shift $((OPTIND - 1))
|
||||||
|
|
||||||
|
if [ -z ${identityFile} ]; then
|
||||||
|
echo "missing option: -i is required" >&2
|
||||||
|
usage >&2
|
||||||
|
exit 64
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $(type -P "scp") ] || [ -z $(type -P "ssh") ]; then
|
||||||
|
echo "SSH needs to be installed" >&2
|
||||||
|
exit 64
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Please open $(tput bold)https://nixos.org/download#nixos-amazon$(tput sgr0) and follow the
|
||||||
|
instructions to launch an EC2 instance.
|
||||||
|
|
||||||
|
$(tput bold)Note: it's recommended to use a disk size of >=20GB.$(tput sgr0)"
|
||||||
|
echo
|
||||||
|
|
||||||
|
read -p "Domain or IP of launched EC2 instance: " host
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "$(tput bold)Copying configuration to ${host}...$(tput sgr0)"
|
||||||
|
scp -i "${identityFile}" ./configuration.nix root@"${host}":/etc/nixos/configuration.nix
|
||||||
|
|
||||||
|
echo "$(tput bold)Building system...$(tput sgr0)"
|
||||||
|
ssh -i "${identityFile}" root@"${host}" "nixos-rebuild switch --upgrade"
|
||||||
Reference in New Issue
Block a user