Featured image of post Vps配置记录

Vps配置记录

云服务Vps配置整理

  最开始是为了有个公网IP,可以让我宿舍的主机通过自建的zerotier-moon节点进行串流,好在空闲时刻摸鱼,(嘿嘿`・ω・´),后来又购买了域名,增加了越来越多的服务,加上移动端的zerotier很难完整打洞成功,逐渐发现自己的很多生活组件可以部署在云上,简单的4核服务器其实就可以满足很多日常的基础功能了,后悔当时腾讯云客服给我打电话问我要不要一次买3年,没买啊∑🍺👊😩!,遂开一条帖子记录,以便后续迁移云的时候可以有个参考。

基础配置

  底层操作系统是Linux,一般选择是Ubuntu的LTS版本,这里是22.04LTS,下一次迁移云可以考虑换一下底层系统。安装好系统后,添加运维面板和neovim,这里选择的是1Panel。

1
2
bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"
sudo snap install nvim --classic

安全性配置

  首先需要更改SSH连接的端口,禁用密码登陆,同时增加SSH密钥。

  下面是增加SSH密钥的步骤,先生成对应的密钥文件,生成完毕后再复制公钥内容到Vps中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Generate key
ssh-keygen -t ed25519

# Get public key
cat ~/.ssh/keyname.pub

# Copy public key to Vps
ssh root@vps
cd ~/.ssh
nvim authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

  这边测试能使用密钥登陆后,修改登陆配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# copy for the backup
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# modify ssh config
sudo nvim /etc/ssh/sshd_config
Port xxx
PermitRootLogin no
PasswordAuthentication no
PubkeyAcceptedKeyTypes +ssh-rsa
PermitEmptyPasswords no

# reload ssh service
sudo systemctl restart ssh

服务配置

  云服务常用的组件有这几个:zerotier、bitwarden、ezbookkeeping、memos和fast note sync,这些服务通过nginx和通配符域名进行端口转发实现访问。

zerotier

  安装zerotier服务

1
curl -s https://install.zerotier.com | sudo bash

  加入虚拟局域网并配置moon节点。

1
2
3
4
5
6
7
8
9
cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon identity.public >>moon.json
nvim moon.json
# add ipv4/9993 copy id value
sudo zerotier-idtool genmoon moon.json
mkdir -p moons.d
mv 000000id.moon moons.d/
sudo systemctl restart zerotier-one
sudo systemctl enable zerotier-one.service

  至此服务端配置完毕,虚拟局域网内的设备需要添加moon可执行以下命令。

1
zerotier-cli orbit <moon-id> <moon-id>

bitwarden、memos & ezbookkeeping

  为了后续迁移,这边直接在1Panel的应用商店进行一键安装配置,在防火墙中分别放行对应的端口即可。

fast note sync

  为了多端同步obsidian的笔记信息,利用docker部署。

1
2
3
cd docker
mkdir -p fastnotesync && cd fastnotesync
nvim docker-compose.yaml

其中docker-compose.yaml的内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
version: '3'
services:
  fast-note-sync-service:
    image: haierkeys/fast-note-sync-service:latest
    container_name: fast-note-sync-service
    restart: always
    ports:
      - "9000:9000"  # RESTful API & WebSocket port, where /api/user/sync is the WebSocket endpoint
    volumes:
      - ./storage:/fast-note-sync/storage  # Data storage
      - ./config:/fast-note-sync/config    # Configuration files

PS:镜像源可以换成docker.cnb.cool/haierkeys/fast-note-sync-service:latest

nginx

  重装底层系统后一般不会预装nginx,后面需要利用nginx反向代理云服务组件。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
sudo apt update
sudo apt install nginx -y

# 设为开机自启
sudo systemctl enable nginx

# 启动服务
sudo systemctl start nginx

# 检查状态
sudo systemctl status nginx

除此之外需要配置防火墙放行 80/443 端。

nginx反向代理

  这边通过1Panel自带的证书管理工具申请通配符的证书文件,挂载到nginx的目录下面/etc/nginx/,自动续签时执行脚本nginx -s reload。   在nginx中通过域名进行反向代理并开启https。以Fast Note Sync为例

 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 # ================================================================
 # Fast Note Sync — sync.example.com
 # ================================================================
 server {
  listen 443 ssl;
  listen [::]:443 ssl;
  server_name sync.example.com;

  # 文件同步场景 body 可能很大
  client_max_body_size 50m;
  proxy_max_temp_file_size 0;
  proxy_buffering off;

  ssl_certificate     /etc/nginx/fullchain.pem;
  ssl_certificate_key /etc/nginx/privkey.pem;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_prefer_server_ciphers on;

  # 主入口 — 普通 HTTP 请求
  location / {
   # TODO: 按实际情况改端口
   #   - 宿主机暴露端口:http://127.0.0.1:9000
   #   - nginx 也在同一 Docker 网络:http://fast-note-sync-service:9000
   proxy_pass http://127.0.0.1:9000;

   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
  }

  # WebSocket 同步端点 — 长连接必须升级协议
  location /api/user/sync {
   proxy_pass http://127.0.0.1:9000/api/user/sync;

   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
  }
 }

 # Fast Note Sync HTTP → HTTPS 重定向
 server {
  listen 80;
  listen [::]:80;
  server_name sync.example.com;
  return 301 https://$host$request_uri;
 }
Licensed under CC BY-NC-SA 4.0