服务器装机
📌Tip
折腾死我了,服务器资源利用的差不多了,踩好多坑。
Linux装机
技术选择的原则是便于小团体日常开发,可维护,开箱即用的开发测试生产环境。如果需要带个桌面建议先安装英文版时区选择新加坡,装完之后自己需要中文的地方调回来。
发行版选择Debian最新的LTS,非LTS支持3年LTS支持5年
换源更新,常见源 debian镜像-阿里开源镜像站 Debian-腾讯镜像源 debian 清华开源软件镜像站
source /etc/os-release && echo $VERSION_CODENAME # 查看自己Debian发行版代号,也可以直接看*-release文件
vim /etc/apt/sources.list # 换源,可以先备份
# 更新源
apt-get update
apt-get upgrade
# 安装基本的开发编译工具环境
apt-get install -y wget vim chsh sudo tree net-tools gcc curl htop btop lsof iotop iproute2 dnsutils tcpdump traceroute mtr iputils-ping nmap socat telnet tmux rsync sshpass lvm2 zip unzip p7zip-full perl cpio asciidoc xmlto build-essential libpcre3-dev libssl-dev sqlite3
# Arch系不是很常用
# sudo pacman -S --needed wget vim tree net-tools gcc curl htop btop lsof iotop iproute2 bind tcpdump traceroute mtr iputils nmap socat inetutils tmux rsync sshpass lvm2 zip unzip p7zip unrar fastfetch perl cpio asciidoc xmlto base-devel pcre openssl sqlite
wget https://github.com/fastfetch-cli/fastfetch/releases/latest/download/fastfetch-linux-amd64.deb # fastfetch没有提供deb源
sudo apt install ./fastfetch-linux-amd64.deb
git最好安装最新版
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 格式)
# 语言本地化
sudo apt install -y locales # 安装 locales 基础包
sudo locale-gen zh_CN.UTF-8 # 生成 zh_CN.UTF-8 语言环境
sudo update-locale LANG=zh_CN.UTF-8 # 设置系统默认语言
source /etc/default/locale # 立即生效当前 shell
使用zimfw
安装zsh切换默认,所有的设置都存放在~/.zshrc文件里
apt-get install -y zsh
chsh -s /bin/zsh
# 如果之前安装过omz需要先删除,记得先备份zshrc
uninstall_oh_my_zsh
rm -rf ~/.oh-my-zsh
没卸载omz的先找GPT卸载掉omz的东西和插件,autojupm可以保留,注意备份一下.zshrc卸载的时候给你删除很多内容。有些残留也需要清掉
然后安装Zim Framework,先安装主题.zimrc中添加 zmodule romkatv/powerlevel10k,然后zimfw install && zimfw update,使用p10k configure可重复配置
关注文件.zshrc .p10k.zsh,在p10k的配置文件中配置
自定义p10k
# 自定义shell头
...
function prompt_my_at_user() {
p10k segment -f yellow -t "${USER}@MacOS" # 想放什么都可以,什么变量能用用到的时候去查查
}
# The list of segments shown on the left. Fill it with the most important segments.
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
my_at_user # os identifier
# os_icon # os identifier
dir # current directory
vcs # git status
# prompt_char # prompt symbol
)
...
# 防止路径自动折叠
# 搜索 POWERLEVEL9K_SHORTEN 改和添加
typeset -g POWERLEVEL9K_SHORTEN_DIR=none
typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=none
typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=999
...
安装autojump,支持j直接跳转(zim目前还没有原生支持
git clone https://github.com/joelthelion/autojump.git
cd autojump
./install.py
# 如果已经用了zimfw,那么第二句auto compinit 可以删除不加
把提示的东西添加到~/.zshrc文件尾。
可以给命令行加代理(⚠️注意docker真正运行的进程是docker deamon,所以不会走shell的代理)
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890
nvm一定要安完zsh之后搞,这样就不用手动加了curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bashnvm ls-remote 记得安个最新的LTS conda可以使用MiniForge作为上位替代,安装完之后按照提示conda init
在zshrc里面把conda和nvm初始化替换为懒加载,启动shell的时候就可以瞬间加载
让你的shell飞起来
# ---环境注入---
# 避免没有初次执行的时候没有node和python用(如果使用的miniforge则替换路径即可)
export PATH="/opt/anaconda3/bin:$PATH"
export PATH="$HOME/.nvm/versions/node/v22.16.0/bin:$PATH"
# !! Contents within this block are managed by 'conda init' !!
# {
# __conda_setup="$('/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
# if [ $? -eq 0 ]; then
# eval "$__conda_setup"
# else
# if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
# # . "/opt/anaconda3/etc/profile.d/conda.sh" # commented out by conda initialize
# else
# # export PATH="/opt/anaconda3/bin:$PATH" # commented out by conda initialize
# fi
# fi
# unset __conda_setup
# }
# Lazy-load conda
conda() {
unset -f conda
if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
source "/opt/anaconda3/etc/profile.d/conda.sh"
elif [ -f "$HOME/miniconda3/etc/profile.d/conda.sh" ]; then
source "$HOME/miniconda3/etc/profile.d/conda.sh"
else
echo "Error: conda.sh not found!" >&2
return 127
fi
conda "$@"
}
# export PATH="/opt/anaconda3/bin:$PATH" # commented out by conda initialize
# >>> conda initialize >>>
# NVM setting
# {
# export NVM_DIR="$HOME/.nvm"
# [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
# [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
# }
export NVM_DIR="$HOME/.nvm"
nvm() {
unset -f nvm # 删除这个函数自身
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
nvm "$@" # 正常执行真正的 nvm 命令
}
其他的东西用起来和omz没区别,运行速度飞快。
SSH&Vscode相关
生成的时候使用 ssh-keygen -t ed25519 -C jacksAir密钥会短,但是在一些过老和安全要求的系统里会不认ed25519,不能用的时候使用-v调试一下。
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快捷键,即可快速选取所有匹配的文本创建多行光标
ssh目录权限
为了安全,如果sshd对属主的目录和文件权限不对,则ssh的免密码登陆不生效。
所属用户的.ssh目录权限应为 755 或者 700,不能是77x、777,需要保障other用户不能有w权限。
rsa_id.pub及authorized_keys known_hosts的权限一般为644, rsa_id的权限必须为600
docker
安装docker和Portainer docker-compose 在安装CE和Desktop的时候,会把compose自动带上,docker v2默认带着compose命令,standalone的方式在2023.7不再更新。 docker
域名配置
nginxWebUI里面直接添加。
几个资源,自动生成配置文件,申请证书。
申请SSL,cloudflare->个人配置->API key -> Global API Key -> view API key 邮箱+key填进去
ssl 接收到一个超出最大准许长度的记录。 错误代码 ssl_error_rx_record_too_long 谷歌搜索443 ssl
加了ssl之后不能自动跳转https,纯域名访问就可以,原理我也没深究
头部添加特殊的header自动跳转https
防火墙
用户防火墙,配置完nginx之后,依然可以通过http+域名:端口访问,配置user fire wall禁止端口特定放行。
配合http跳转https,就可以强制只能通过域名访问了。
记得配置nginx的转发要用127.0.0.1。
Warning
开了个 Docker 容器,绑定了 -p 3306:3306 并开启了 ufw 。发现竟然外网可以直接访问!!
原来 Docker 会默认直接加规则到 iptables,所以 UFW 防火墙对 docker 无效。
基本上可以找到的解决办法就是首先禁用 docker 的 iptables 功能,但这也意味着放弃了 docker 的网络管理功能
github有个答案
无法解决,就这样了,丑陋
因为docker是添加iptables管理网络,ufw直接没用,如果手动更改它的iptables那就相当于docker的网络管理没用了,没办法,正式生产环境肯 定会有网关和内部服务器,就可以完美避免了。丑陋。
Last Edit: 2025-12-04 23:59:00
