mirror of
https://github.com/tomasriveral/vps-config.git
synced 2026-08-12 02:28: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:
|
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
|
||||||
```
|
```
|
||||||
|
|||||||
+137
-31
@@ -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" \
|
EOF
|
||||||
> /etc/apt/sources.list.d/docker.list
|
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -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