序
最开始是为了有个公网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;
}
|