服务器规格说明书

ooowlAbout 7 min

📌Tip

折腾死我了,服务器资源利用的差不多了,踩好多坑。

安装基础的软件

记录一下主服务器的常驻服务,比如什么nginx,博客,docker,gitea之类的。
使用的是centos8

Warning

service ssh status
Redirecting to /bin/systemctl status ssh.service
Failed to get properties: Access denied

一直出现这个错误,最后在stackoverflow找到了一个偏门的方法,我都不知道他在干嘛,不知道有什么隐患 kill -TERM 1

直接换系统了,好像是CentOS的问题直接换大便系统

Ubuntu记得装LTS软件源支持五年
加个源

deb http://security.ubuntu.com/ubuntu focal-security main restricted
deb http://security.ubuntu.com/ubuntu focal-security universe
deb http://security.ubuntu.com/ubuntu focal-security multiverse
deb http://archive.canonical.com/ubuntu focal partner

更新

apt-get update
apt-get upgrade
  • Ubuntu基本的软件和依赖:apt-get install -y wget vim tree net-tools gcc sl curl neofetch perl cpio asciidoc xmlto build-essential libpcre3-dev libssl-dev sqlite3
  • Centos基本的软件和依赖:yum install -y yum-utils wget vim tree net-tools crontabs gcc sl neofetch curl openssl htop zlib-devel openssl-devel perl cpio expat-devel gettext-devel asciidoc xmlto util-linux-user

git安装最新版[1]

sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt install git
git config --global user.email "xxxxxx@gmail.com"
git config --global user.name "remoteServer"
  • 调整时间和本地化
sudo timedatectl set-ntp true # 启用 NTP 服务  
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 将时区设为“亚洲/上海”  
sudo hwclock --systohc # 将硬件时钟调整到与当前系统时间一致  
date -R # 以 RFC 5322 格式输出日期和时间。例如 Mon, 18 Jan 2021 11:04:16 +0800
#语言本地化 避免以后字符集问题
sudo apt-get install  -y language-pack-zh-hans
sudo ./install-language-pack zh_CN # dpkg 可以忽略
sudo vim /etc/environment # 修改这个文件 LANG="zh_CN.UTF-8"
source /etc/environment # 启用

改一下ssh端口,root下有个snap作者一直不修复[2]

装OhMyZSH

这个重组搬过来了
安装zsh切换默认

# yum install -y zsh
apt-get install -y zsh
chsh -s /bin/zsh

脚本安装Ohmyzsh

sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

所有的设置都存放在~/.zshrc文件里
主题

git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k

文件改变ZSH_THEME="powerlevel9k/powerlevel9k"

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions

安装autojump,支持j直接跳转

git clone https://github.com/joelthelion/autojump.git
cd autojump
./install.py

把提示的东西添加到~/.zshrc文件尾。
修改插件

plugins=(git extract python pip npm node scala docker ant gradle golang redis-cli colored-man-pages zsh-syntax-highlighting zsh-autosuggestions)

需要添加的:

  • ZSH_THEME="powerlevel9k/powerlevel9k"
  • export DEFAULT_USER="whoami"
  • export TERM="xterm-256color"
  • POWERLEVEL9K_CONTEXT_TEMPLATE="%n" 最后这个是用来去掉阿里云前面又臭又长的主机名的,留下了用户名

nvm [3]一定要安完zsh之后搞,这样就不用手动加了
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
nvm ls-remote 记得安个最新的LTS

为了安全,如果sshd对属主的目录和文件权限不对,则ssh的免密码登陆不生效。 所属用户的.ssh目录权限应为 755 或者 700,不能是77x、777,需要保障other用户不能有w权限。
**rsa_id.pub及authorized_keys known_hosts的权限一般为644, rsa_id的权限必须为600 **

ssh 隧道,直接ssh B 就可以直接代理过去,不用别的配置,有时候在docker里面的ssh会连接失败但是大部分场景都够用。

Host A
  HostName 192.168.1.2
  User root
  Port 22

Host B
  HostName 192.168.1.3
  User root
  Port 8890
  ProxyJump root@192.168.1.2

vscode搜索完之后按下Alt+Enter快捷键,即可快速选取所有匹配的文本创建多行光标 Rime> build>luna_pinyin.schema.yaml>punctuator>half_shape里面修改"/": ["/", " // ", " /* */", ÷]

起docker各种服务

compose文件都起好了,安装然后就行了
安装docker[4]和docker-compose[5]命令行去文档找

📌Tip

我都写了docker-compose.yml里了

启动服务

端口:容器端口功能
22:22gitea的ssh顶替本机的ssh
8001:25轻量SMTP
8002:9443域名blogupdate
8003:8000RSSHub
8004:80zfile页面
8005:hostnginxwebui页面
22233ssh

群辉的端口(约定优于配置)

端口功能->服务器穿透端口
5000nas面板
8096jellyfin
  • 博客 主NginxwebUI
    • 端口 8005管理
    • 域名 admin.nginx
  • zfile图床
    • 端口 8004
    • 域名 static
    • 4.1.5
  • rsshub
    • 端口8003
    • 域名rss
  • webhook
    • 域名blogupdate
    • 端口 8002
    • 目前用来自动拉取博客,以后可能会有更大作用
    • url列表
      • /BlogUpdate 自动拉取并部署博客
    • 部署fastapi[6],测试完毕后就上线,使用MQTT通信,做好备份。进入receiveWebHooks直接nohup python receiveHook.py > flask.log 2>&1 &。不会有人闲着没事攻击我的webhook吧,就算是攻击反正也是返回字符串,应该顶得住。
    • 顶不住了,小身板编译都费劲,以后移到群辉[7]
  • 自建邮件docker[8],不安全
    • 域名smtp
    • 端口8001:25
    • 只有一个SMTP功能,没有任何安全校验,注意发出去大概率会被认为是垃圾邮件,反正我自己用,添加白名单就行.
  • 群辉以后可能要有的
    • Yapi
    • 邮件服务器-穿
    • jellyfin
    • moment照片
    • 苹果时间机器
    • Surveillance Station监控
    • Calibre web
    • 导航页
    • 博客webhook-穿
    • HomeAssistant智能家居
    • filerun网盘
    • 群辉chat私人聊天
    • drive 想办法融合onedrive
    • cloudsync统筹一下网盘
    • rsshub -可以穿
    • Docker装Aria2 With WebUI
    • smb

域名配置

nginxWebUI里面直接添加。
几个资源,自动生成配置文件申请证书open in new window
申请SSL,cloudflare->个人配置->API key -> Global API Key -> view API key 邮箱+key填进去

ssl 接收到一个超出最大准许长度的记录。 错误代码 ssl_error_rx_record_too_long 谷歌搜索443 ssl[9]
加了ssl之后不能自动跳转https,纯域名访问就可以,原理我也没深究[10]
头部添加特殊的header自动跳转https

ufw

用户防火墙,配置完nginx之后,依然可以通过http+域名:端口访问,配置user fire wall禁止端口特定放行。
配合http跳转https,就可以强制只能通过域名访问了。
记得配置nginx的转发要用127.0.0.1。
[11]

Warning

开了个 Docker 容器,绑定了 -p 3306:3306 并开启了 ufw 。发现竟然外网可以直接访问!!
原来 Docker 会默认直接加规则到 iptables,所以 UFW 防火墙对 docker 无效。
基本上可以找到的解决办法就是首先禁用 docker 的 iptables 功能,但这也意味着放弃了 docker 的网络管理功能
github有个答案

无法解决,就这样了,丑陋
因为docker是直接添加iptables管理网络,ufw直接没用,如果手动更改它的iptables那就相当于docker的网络管理没用了,没办法,正式生产环境肯 定会有网关和内部服务器,就可以完美避免了。丑陋。


  1. 如何在 Ubuntu 上安装最新版本的 Git - 知乎open in new window ↩︎

  2. Bug #1575053 “Please move the “$HOME/snap” directory to a less o...” : Bugs : snapd package : Ubuntuopen in new window ↩︎

  3. GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versionsopen in new window ↩︎

  4. Install Docker Engine on Ubuntu | Docker Documentationopen in new window ↩︎

  5. Install Docker Compose | Docker Documentationopen in new window ↩︎

  6. supervisord 部署 Flaskopen in new window ↩︎

  7. 升级到umi 3.1.0 打包项目卡死,不知道为什么,哪位大佬给看下 · Issue #4423 · umijs/umi · GitHubopen in new window ↩︎

  8. 使用Docker搭建SMTP服务器 - Jeff.Chen的技术博客open in new window ↩︎

  9. SSL 接收到一个超出最大准许长度的记录。 错误代码:SSL_ERROR_RX_RECORD_TOO_LONGopen in new window ↩︎

  10. 当虚拟目录不是在80端口且打开ssl时出错 ssl_error_rx_record_too_long _ikmb的博客-CSDN博客open in new window ↩︎

  11. GitHub - chaifeng/ufw-docker: To fix the Docker and UFW security flaw without disabling iptablesopen in new window ↩︎