rewrote init and readme into bootstrap

This commit is contained in:
2026-07-23 22:12:51 +02:00
parent fe0de5cd1d
commit 82d13c6a12
3 changed files with 153 additions and 163 deletions
+5 -102
View File
@@ -15,7 +15,7 @@ The server uses:
--- ---
# 1. Create the VPS # 1. Setup the VPS
Recommended: Recommended:
@@ -26,112 +26,15 @@ Recommended:
After creation: After creation:
```bash
ssh root@SERVER_IP
```
---
# 2. Bootstrap the server
Copy the bootstrap script to the server:
```bash ```bash
scp bootstrap.sh root@SERVER_IP: read IP_ADDRESS
``` scp bootstrap.sh root@$IP_ADDRESS:
ssh root@$IP_ADDRESS
Connect:
```bash
ssh root@SERVER_IP
```
Run:
```bash
chmod +x bootstrap.sh
./bootstrap.sh ./bootstrap.sh
``` ```
This installs: # 2. Deploy
* Docker CE
* Docker Compose
* Git
* Basic administration tools
* Firewall rules
Verify:
```bash
docker --version
docker compose version
```
---
# 3. Create an administrator user
Do not run everything as root.
Create a user:
```bash
adduser USERNAME
```
Add permissions:
```bash
usermod -aG sudo,docker USERNAME
```
Copy SSH keys:
```bash
mkdir -p /home/USERNAME/.ssh
cp /root/.ssh/authorized_keys /home/USERNAME/.ssh/
chown -R USERNAME:USERNAME /home/USERNAME/.ssh
chmod 700 /home/USERNAME/.ssh
chmod 600 /home/USERNAME/.ssh/authorized_keys
```
Test:
```bash
ssh USERNAME@SERVER_IP
```
---
# 4. Clone the server configuration
Clone the configuration repository:
```bash
git clone https://github.com/tomasriveral/vps-config
cd vps-config
```
---
# 5. Configure secrets
Never store passwords or tokens in Git.
Create:
```bash
nano .env
```
See `.env.example`
# 6. Init the system
```
./scripts/init.sh
```
# 7. Deploy
``` ```
./scripts/deploy.sh ./scripts/deploy.sh
``` ```
+136 -30
View File
@@ -1,77 +1,183 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
echo "== Updating system ==" ################################################################################
# Configuration
################################################################################
REPO="https://github.com/tomasriveral/vps-config"
REPO_DIR="vps-config"
################################################################################
# Helpers
################################################################################
step() {
echo
echo "=============================================================================="
echo "$1"
echo "=============================================================================="
}
################################################################################
# System update
################################################################################
step "Updating system"
apt update apt update
apt upgrade -y apt upgrade -y
echo "== Installing base packages ==" ################################################################################
# Base packages
################################################################################
step "Installing base packages"
apt install -y \ apt install -y \
ca-certificates \ ca-certificates \
curl \ curl \
gnupg \
git \ git \
vim \ gnupg \
htop \ htop \
unzip \
rsync \
rclone \
jq \ jq \
fail2ban \ fail2ban \
unattended-upgrades \
ripgrep \ ripgrep \
ufw rclone \
rsync \
ufw \
unattended-upgrades \
unzip \
vim
echo "== Installing Docker repository key ==" ################################################################################
install -m 0755 -d /etc/apt/keyrings # Repository
################################################################################
curl -fsSL https://download.docker.com/linux/debian/gpg \ step "Cloning configuration repository"
git clone "$REPO"
cd "$REPO_DIR"
################################################################################
# Docker
################################################################################
step "Installing Docker repository"
install -d -m 0755 /etc/apt/keyrings
curl -fsSL \
https://download.docker.com/linux/debian/gpg \
-o /etc/apt/keyrings/docker.asc -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc
echo "== Adding Docker repository ==" cat >/etc/apt/sources.list.d/docker.list <<EOF
echo \ deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/debian \ https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable
> /etc/apt/sources.list.d/docker.list EOF
apt update apt update
echo "== Installing Docker ==" step "Installing Docker"
apt install -y \ apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \ containerd.io \
docker-buildx-plugin \ docker-buildx-plugin \
docker-ce \
docker-ce-cli \
docker-compose-plugin docker-compose-plugin
systemctl enable docker systemctl enable --now docker
systemctl start docker
################################################################################
# Security
################################################################################
step "Configuring firewall"
echo "== Configuring firewall =="
ufw default deny incoming ufw default deny incoming
ufw default allow outgoing ufw default allow outgoing
# SSH
ufw allow 22/tcp ufw allow 22/tcp
# Web
ufw allow 80/tcp ufw allow 80/tcp
ufw allow 443/tcp ufw allow 443/tcp
ufw --force enable ufw --force enable
echo "== Enabling useful services ==" step "Enabling services"
systemctl enable --now ssh systemctl enable --now ssh
systemctl enable --now fail2ban systemctl enable --now fail2ban
dpkg-reconfigure unattended-upgrades dpkg-reconfigure unattended-upgrades
################################################################################
# User
################################################################################
step "Creating administrator"
read -rp "Username: " USERNAME
adduser "$USERNAME"
usermod -aG sudo,docker "$USERNAME"
mkdir -p "/home/$USERNAME/.ssh"
cp /root/.ssh/authorized_keys \
"/home/$USERNAME/.ssh/authorized_keys"
chown -R "$USERNAME:$USERNAME" "/home/$USERNAME/.ssh"
chmod 700 "/home/$USERNAME/.ssh"
chmod 600 "/home/$USERNAME/.ssh/authorized_keys"
################################################################################
# Storage
################################################################################
step "Preparing storage"
mkdir -p \
/mnt/kdrive \
/opt/server/archivebox/archivebox-data
echo "================================"
echo "Bootstrap finished!"
echo echo
echo "Configure rclone now."
rclone config
cp systemd/kdrive-rclone.service \
/etc/systemd/system/
systemctl daemon-reload
systemctl enable --now kdrive-rclone
mountpoint /mnt/kdrive
ls /mnt/kdrive
################################################################################
# ArchiveBox
################################################################################
step "Initializing ArchiveBox"
docker compose run --rm archivebox init --setup
################################################################################
# Done
################################################################################
step "Bootstrap completed"
docker --version docker --version
docker compose version docker compose version
echo "================================"
echo
echo "You can now login as:"
echo
echo " ssh $USERNAME@<server>"
echo
-19
View File
@@ -1,19 +0,0 @@
#!/usr/bin/env bash
set -e
echo "== installing systemd systems"
mkdir -p /opt/server/archivebox/archivebox-data
mkdir -p /mnt/kdrive/
rclone config
cp systemd/kdrive-rclone.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable kdrive-rclone
systemctl start kdrive-rclone
mountpoint /mnt/kdrive
ls /mnt/kdrive
echo
echo "== initializing archivebox"
docker compose run --rm archivebox init --setup