mirror of
https://github.com/tomasriveral/vps-config.git
synced 2026-08-11 18:18:38 +02:00
rewrote init and readme into bootstrap
This commit is contained in:
@@ -15,7 +15,7 @@ The server uses:
|
||||
|
||||
---
|
||||
|
||||
# 1. Create the VPS
|
||||
# 1. Setup the VPS
|
||||
|
||||
Recommended:
|
||||
|
||||
@@ -26,112 +26,15 @@ Recommended:
|
||||
|
||||
After creation:
|
||||
|
||||
```bash
|
||||
ssh root@SERVER_IP
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 2. Bootstrap the server
|
||||
|
||||
Copy the bootstrap script to the server:
|
||||
|
||||
```bash
|
||||
scp bootstrap.sh root@SERVER_IP:
|
||||
```
|
||||
|
||||
Connect:
|
||||
|
||||
```bash
|
||||
ssh root@SERVER_IP
|
||||
```
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
chmod +x bootstrap.sh
|
||||
read IP_ADDRESS
|
||||
scp bootstrap.sh root@$IP_ADDRESS:
|
||||
ssh root@$IP_ADDRESS
|
||||
./bootstrap.sh
|
||||
```
|
||||
|
||||
This installs:
|
||||
|
||||
* 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
|
||||
# 2. Deploy
|
||||
```
|
||||
./scripts/deploy.sh
|
||||
```
|
||||
|
||||
+136
-30
@@ -1,77 +1,183 @@
|
||||
#!/usr/bin/env bash
|
||||
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 upgrade -y
|
||||
|
||||
echo "== Installing base packages =="
|
||||
################################################################################
|
||||
# Base packages
|
||||
################################################################################
|
||||
|
||||
step "Installing base packages"
|
||||
|
||||
apt install -y \
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg \
|
||||
git \
|
||||
vim \
|
||||
gnupg \
|
||||
htop \
|
||||
unzip \
|
||||
rsync \
|
||||
rclone \
|
||||
jq \
|
||||
fail2ban \
|
||||
unattended-upgrades \
|
||||
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
|
||||
|
||||
chmod a+r /etc/apt/keyrings/docker.asc
|
||||
|
||||
echo "== Adding Docker repository =="
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
|
||||
cat >/etc/apt/sources.list.d/docker.list <<EOF
|
||||
deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
|
||||
https://download.docker.com/linux/debian \
|
||||
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
|
||||
> /etc/apt/sources.list.d/docker.list
|
||||
$(. /etc/os-release && echo "$VERSION_CODENAME") stable
|
||||
EOF
|
||||
|
||||
apt update
|
||||
|
||||
echo "== Installing Docker =="
|
||||
step "Installing Docker"
|
||||
|
||||
apt install -y \
|
||||
docker-ce \
|
||||
docker-ce-cli \
|
||||
containerd.io \
|
||||
docker-buildx-plugin \
|
||||
docker-ce \
|
||||
docker-ce-cli \
|
||||
docker-compose-plugin
|
||||
|
||||
systemctl enable docker
|
||||
systemctl start docker
|
||||
systemctl enable --now docker
|
||||
|
||||
################################################################################
|
||||
# Security
|
||||
################################################################################
|
||||
|
||||
step "Configuring firewall"
|
||||
|
||||
echo "== Configuring firewall =="
|
||||
ufw default deny incoming
|
||||
ufw default allow outgoing
|
||||
|
||||
# SSH
|
||||
ufw allow 22/tcp
|
||||
|
||||
# Web
|
||||
ufw allow 80/tcp
|
||||
ufw allow 443/tcp
|
||||
|
||||
ufw --force enable
|
||||
|
||||
echo "== Enabling useful services =="
|
||||
step "Enabling services"
|
||||
|
||||
systemctl enable --now ssh
|
||||
systemctl enable --now fail2ban
|
||||
|
||||
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 "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 compose version
|
||||
echo "================================"
|
||||
|
||||
echo
|
||||
echo "You can now login as:"
|
||||
echo
|
||||
echo " ssh $USERNAME@<server>"
|
||||
echo
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user