前言
之前一直使用的搬瓦工(2018网络星期一)年付$27配置,2核 1G RAM + 40G SSD + 1000G/月 Bindwidth + 洛杉矶DC2机房,从2018年开始一共续费了6年。
最初的目的很简单,为了加速访问一些网站,比如Github等等。
随着对Linux的熟悉,陆续搭建了一些服务,其中也有重装过几次系统,然后学习了容器化,这简直是一把非常好用的工具。虽然docker已经逐渐式微,被K8S移除支持,但对于个人项目使用是完全够用的。
虽然Podman等也很优秀,解决了一些问题,但有一些项目支持的并不太友好,为了节约时间少走弯路,还是选择使用Docker。
2024年黑五看到RN的促销活动,加量还降价,果断入手了一台RackNerd的黑五套餐二,年付$18,配置:2核 2.5G RAM + 40G SSD + 3000G/月 Bindwidth。
配置
比较喜欢Debian系,下单时会让选择安装什么系统,我喜欢Debian系,就选了Debian12系统,非常稳定。
付款后,服务商会提供root密码,或者让你上传ssh key,然后通过ssh访问服务器。
基本配置
- ssh使用root账户+密码登录;
- 创建新用户,设置密码,把用户添加到sudoer;
1
| useradd -m -G sudo -s /bin/bash 用户名
|
- 修改ssh端口为高位端口,禁止root用户密码登录,禁止用户密码登录,重启sshd服务;
- 尝试使用新用户+密钥登录,若无法登录则去检测上一步配置;
- 安装常用软件/配置UFW防火墙:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| sudo apt update sudo apt-get install -y curl vim ufw
sudo ufw default allow outgoing # 默认允许所有数据出站 sudo ufw default deny incoming # 默认禁止所有数据入站
sudo ufw allow 80,443/tcp # 开启80,443端口的tcp出/入站 sudo ufw allow 443/udp # 开启443端口的udp出/入站
# 开启刚才设置的ssh高位端口,例如54311 sudo ufw allow 54321
# 开启UFW防火墙 sudo ufw enable
# 把 Cloudflare的ip加入白名单 RULES=$(sudo ufw status numbered | grep 'Cloudflare IP' | awk -F"[][]" '{print $2}' | sort -nr) for RULE in $RULES; do echo "Deleting rule $RULE" echo "y" | sudo ufw delete $RULE done
for cfip in `curl -sw '\n' https://www.cloudflare.com/ips-v{4,6}`; do ufw allow proto tcp from $cfip to any port 443 comment 'Cloudflare IP'; done
ufw reload > /dev/null
|
- 开启BBR内核加速
编辑/etc/sysctl.conf
文件,添加以下两行以启用BBR:
1 2
| net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr
|
应用更改,然后检测是否生效
1 2
| sudo sysctl -p sysctl net.ipv4.tcp_congestion_control
|
- 参考Docker官网文档,安装Docker:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources: echo \ "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" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
|
- 切换到刚创建的用户,给用户docker权限,并创建两个文件夹用来放容器数据:
1 2 3 4 5 6 7 8
| # Add user to docker group groupadd docker usermod -aG docker $USER newgrp docker
# Create 2 folder for docker mkdir ~/docker mkdir ~/compose
|
- 创建一个docker子网,例如创建名为
npm_default
的子网,并指定网段为172.20.0.0/24
:
1 2 3 4 5
| docker network create \ --driver=bridge \ --subnet=172.20.0.0/24 \ --gateway=172.20.0.1 \ npm_default
|
- 在Cloudflare中使用A记录方式绑定一个子域名,例如
host.yourdomain.com
,不开云朵。后续所有新记录均使用CNAME
方式添加,并开启云朵;
- 安装的第一个容器为
Nginx Proxy Manager
(下称npm),先用 http://ip:81
的方式登录npm的管理界面,修改用户名+密码,同时在CF中使用CNAME方式绑定子域名,例如npm.yourdomain.com
,然后把81端口反代到这这个域名上。尝试通过 npm.yourdomain.com
访问npm,成功后进行下一步;
compose.yml文件示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| networks: default: external: true name: ${DOCKER_MY_NETWORK} services: app: image: jc21/nginx-proxy-manager:latest container_name: npm restart: unless-stopped ports: - 80:80 - 443:443 - 81:81 environment: DISABLE_IPV6: "true" volumes: - ${DOCKER_HOME}/npm/data:/data - ${DOCKER_HOME}/npm/letsencrypt:/etc/letsencrypt - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro networks: default: ipv4_address: 172.20.0.2 deploy: resources: limits: cpus: "0.5" memory: 300M
|
compose.yml同目录下的.env文件:
1 2
| DOCKER_HOME=/home/username/docker DOCKER_MY_NETWORK=npm_default
|
如果已经可以通过域名访问npm,则可以把81端口也注释掉,然后docker compose up -d
重新部署npm:
1 2 3 4
| ports: - 80:80 - 443:443 # - 81:81
|
补充
用户home目录结构,也就是 /home/username
目录:
其中 ~/docker
用来存放容器运行产生的需要持久化的数据。个人不喜欢用volumn的方式,感觉管理不方便,所以采用目录方式来管理数据。
~/compose
顾名思义,用来存放docker compose
文件,可以很方便的统一化管理compose.yml
,对每个容器的配置可以做到固定,方便更新,重启,迁移。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| ~ │ │─ docker │ ├── npm │ │ ├──data │ │ └──letsencrypt │ └─── nexterm │ └───data ├── compose │ ├── npm │ │ ├─compose.yml │ │ └─.env │ ├── nexterm │ │ ├─compose.yml │ │ └─.env │ ├── ... │ ├── ...
|
总结
上述步骤已经完成了VPS基本配置,所有服务皆通过Nginx
反向代理,通过https
在443
端口访问,开启Cloudflare的云朵,开启一切皆容器之旅吧。