N多安装
大约 8 分钟ubuntu
git
sudo apt install git -y
jami
正常在局域网环境下 jami 可以不借助服务器,自我发现,也能达到互联的效果。不过在局域网中安装 bootstrap 节点则会让终端之间的互联更稳定,发现新硬件的速度也会更快。下面介绍在 ubuntu22server 中安装该节点服务器的方法
# 以 docker 的方式安装
sudo docker run -d \
--name jami-bootstrap \
-p 4222:4222/udp \
--restart unless-stopped \
ghcr.io/savoirfairelinux/opendht/opendht-alpine \
dhtnode -p 4222 -s
# 即使有梯子,通过上面命令也会安装失败,在询问 Grok 后它给出使用国内的代理/镜像站,将上面的 ghcr.io 替换为 ghcr.nju.edu.cn 后下载成功
sudo docker run -d \
--name jami-bootstrap \
-p 4222:4222/udp \
--restart unless-stopped \
ghcr.nju.edu.cn/savoirfairelinux/opendht/opendht-alpine \
dhtnode -p 4222 -s
# 如果服务器打开了 ufw,则需要放行端口号
sudo ufw allow 4222/udp
sudo ufw reload
redis
apt安装系统服务
通过下面方法安装 redis 后
- 服务端、客户端可执行文件是
/usr/bin/redis-server,/usr/bin/redis-cli - 配置文件是
/etc/redis/redis.conf - 数据目录是
/var/lib/redis
sudo apt install redis-server -y
# 启动命令
sudo systemctl start redis-server
sudo systemctl status redis-server
安装后默认只能本机连接服务端,要修改配置文件
sudo vim /etc/redis/redis.conf
# 将其中的 bind 127.0.0.1 ::1 修改如下
bind 0.0.0.0 ::1
# 然后重启服务
sudo systemctl restart redis-server.service
编译源码安装 - 失败
sudo wget http://download.redis.io/releases/redis-5.0.5.tar.gz
sudo tar -xzvf redis-5.0.5.tar.gz
cd redis-5.0.5/
sudo make
# 如果提示没有 make 命令,说明没有安装 gcc 编译环境
# 下面方法是 deepseek 提供的方法
sudo apt install build-essential
# 安装编译环境后再次运行 make 编译源码
# 启动服务端
cd src
sudo chmod +x redis-server
sudo ./redis-server
# 启动客户端
cd src
sudo ./redis-server ../redis.conf
docker
# 安装 docker
sudo apt install docker.io docker-compose
# 检查安装版本
docker -v
nginx
# 先通过 sudo apt upgrade -y 更新软件包(注意先做好禁止内核升级,见系统管理 > 更新软件包)
sudo apt install nginx -y
# 安装到目录 /etc/nginx 下
# 安装成功后会自动启动,通过下面命令确定已正常启动
ps -aux|grep nginx
# 或者下面命令确认已启动
sudo systemctl status nginx
配置文件
主配置文件 /etc/nginx/nginx.conf 最后倒入了如下的目录作为配置文件
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
可以看到第二个目录下的所有文件都会被当做配置文件导入
# 80端口配置案例如下:
server {
listen 80;
server_name ldwg.xdfznh.club; # 你的域名
# 新增的 location 块,用于匹配 /wg 路径
location /wg/ {
# 确保 proxy_pass 地址末尾的斜杠非常重要
proxy_pass http://127.0.0.1:1281/; # 注意最后的斜杠
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;
proxy_set_header X-Script-Name /wg; # 可选,某些应用需要此头部来生成正确的链接
# 以下是一些可选配置,用于调整超时等行为
proxy_connect_timeout 75s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
# 如果管理页面有 WebSocket 连接,可能需要添加以下行
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
}
# ... 你原有的其他配置(如果有的话) ...
# 日志设置(可选,但建议保留以便排查问题)
access_log /var/log/nginx/ld.xdfznh.club.access.log;
error_log /var/log/nginx/ld.xdfznh.club.error.log;
}
# 443端口配置案例如下:
# This part configures, where your Trilium server is running
upstream trilium {
zone trilium 64k;
server 127.0.0.1:11808; # change it to a different hostname and port if non-default is used
keepalive 2;
}
server {
listen 443 ssl;
server_name trilium.xdfznh.club; #change trilium.example.net to your domain without HTTPS or HTTP.
ssl_certificate /etc/nginx/ssl/trilium.xdfznh.club_bundle.crt; #change /etc/ssl/note/example.crt to your path of crt file.
ssl_certificate_key /etc/nginx/ssl/trilium.xdfznh.club.key; #change /etc/ssl/note/example.net.key to your path of key file.
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log; #check the path of access.log, if it doesn't fit your file, change it
location / {
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://trilium;
proxy_read_timeout 90;
}
}
# This part is for HTTPS forced
server {
listen 80;
server_name trilium.xdfznh.club; # change to your domain
return 301 https://$server_name$request_uri;
}
java
从 oracle 下载要求登录,可以在 华为镜像站 下载,或者在 xdf350 的路径 \\192.168.0.250\alist\安装程序\cc\java\ 下也有
实际不需要自己去别处下载再部署,在 ubuntu24 中查看 java 版本 java -version 时,如果没有安装会提示安装各个版本的命令,执行命令即可。如果考虑从外网下载的速度问题,可以自己下载上传后手动设置环境变量来安装。
下面是 2025年10月16日 在腾讯云服务器 ubuntu22server 上验证过的方法
下面的方法让 deepseek 检查说不安全,建议使用 ubuntu24server 自己的 apt 安装 sudo apt install openjdk-8-jre-headless -y 或者安装17版本 sudo apt install openjdk-17-jre-headless -y
自动配置-不安全
将文件 java8linux.zip 拷贝到目录 /usr/lib/jvm/ 下,将下面命令保存为 setup_java8.sh 然后执行 sudo ./setup_java8.sh
#!/bin/bash
# setup_java8.sh - JDK8 自动安装和环境变量配置脚本
echo "=============================================="
echo " JDK8 自动安装和环境变量配置脚本"
echo "=============================================="
# 定义变量
ZIP_FILE="/usr/lib/jvm/java8linux.zip"
EXTRACT_DIR="/usr/lib/jvm/java8"
JAVA_HOME_DIR="$EXTRACT_DIR"
BACKUP_DIR="/usr/lib/jvm/backup_$(date +%Y%m%d_%H%M%S)"
# 检查是否以root权限运行
if [ "$EUID" -ne 0 ]; then
echo "❌ 请使用 sudo 运行此脚本: sudo ./setup_java8.sh"
exit 1
fi
# 步骤1: 检查压缩包是否存在
echo "📦 步骤1: 检查JDK8压缩包..."
if [ ! -f "$ZIP_FILE" ]; then
echo "❌ 错误: 找不到压缩包 $ZIP_FILE"
echo "请确保 java8linux.zip 文件已上传到 /usr/lib/jvm/ 目录"
exit 1
fi
echo "✅ 找到压缩包: $ZIP_FILE"
# 步骤2: 备份已存在的java8目录
echo "📁 步骤2: 检查并备份现有目录..."
if [ -d "$EXTRACT_DIR" ]; then
echo "⚠️ 发现已存在的 java8 目录,正在备份..."
mkdir -p "$BACKUP_DIR"
mv "$EXTRACT_DIR" "$BACKUP_DIR/"
echo "✅ 已备份到: $BACKUP_DIR"
fi
# 步骤3: 解压压缩包
echo "📂 步骤3: 解压JDK8压缩包..."
cd /usr/lib/jvm
# 检查是否安装了unzip
if ! command -v unzip &> /dev/null; then
echo "📥 安装unzip工具..."
apt-get update && apt-get install -y unzip
fi
# 解压文件
echo "正在解压 $ZIP_FILE ..."
if unzip -q "$ZIP_FILE" -d "temp_java8_extract"; then
# 查找解压后的目录
EXTRACTED_DIR=$(find "temp_java8_extract" -type d -name "jdk1.8*" -o -name "jdk8*" -o -name "java*" | head -n 1)
if [ -n "$EXTRACTED_DIR" ] && [ -d "$EXTRACTED_DIR" ]; then
mv "$EXTRACTED_DIR" "$EXTRACT_DIR"
echo "✅ JDK8 解压成功到: $EXTRACT_DIR"
else
# 如果没有找到特定的JDK目录,直接使用整个解压内容
mv "temp_java8_extract" "$EXTRACT_DIR"
echo "✅ JDK8 解压成功到: $EXTRACT_DIR"
fi
# 清理临时文件
rm -rf temp_java8_extract
else
echo "❌ 解压失败,请检查压缩包是否完整"
exit 1
fi
# 步骤4: 安全的环境变量配置
echo "⚙️ 步骤4: 安全配置环境变量..."
# 方法1: 使用 /etc/profile.d/ 目录(推荐)
JAVA_PROFILE_FILE="/etc/profile.d/java8.sh"
cat > "$JAVA_PROFILE_FILE" << 'EOF'
#!/bin/bash
export JAVA_HOME="/usr/lib/jvm/java8"
export PATH="$JAVA_HOME/bin:$PATH"
EOF
chmod +x "$JAVA_PROFILE_FILE"
echo "✅ Java环境变量已安全配置到: $JAVA_PROFILE_FILE"
# 方法2: 为当前用户配置(备选方案)
# 只在用户主目录的 .bashrc 中设置,不影响系统全局
USER_BASHRC="$HOME/.bashrc"
if [ -f "$USER_BASHRC" ]; then
# 移除可能存在的旧配置
sed -i '/JAVA_HOME=/d' "$USER_BASHRC"
sed -i '/export PATH.*JAVA_HOME/d' "$USER_BASHRC"
# 添加新配置
cat >> "$USER_BASHRC" << EOF
# Java 8 Environment Variables
export JAVA_HOME="/usr/lib/jvm/java8"
export PATH="\$JAVA_HOME/bin:\$PATH"
EOF
echo "✅ 用户环境变量已配置到: $USER_BASHRC"
fi
# 步骤5: 创建符号链接
echo "🔗 步骤5: 创建系统符号链接..."
update-alternatives --remove-all java 2>/dev/null || true
update-alternatives --remove-all javac 2>/dev/null || true
if [ -f "$JAVA_HOME_DIR/bin/java" ]; then
update-alternatives --install /usr/bin/java java "$JAVA_HOME_DIR/bin/java" 1
echo "✅ java 符号链接已创建"
fi
if [ -f "$JAVA_HOME_DIR/bin/javac" ]; then
update-alternatives --install /usr/bin/javac javac "$JAVA_HOME_DIR/bin/javac" 1
echo "✅ javac 符号链接已创建"
fi
# 步骤6: 重新加载环境变量
echo "🔄 步骤6: 重新加载环境变量..."
# 加载 /etc/profile.d/ 中的配置
source "$JAVA_PROFILE_FILE" 2>/dev/null || true
# 步骤7: 验证安装
echo "✅ 步骤7: 验证JDK安装..."
echo "--- Java版本信息 ---"
java -version 2>/dev/null && echo "✅ Java 命令测试成功" || echo "❌ Java 命令测试失败"
echo "--- Javac版本信息 ---"
javac -version 2>/dev/null && echo "✅ Javac 命令测试成功" || echo "❌ Javac 命令测试失败"
echo "--- JAVA_HOME环境变量 ---"
echo "JAVA_HOME=$JAVA_HOME"
echo "--- 系统PATH检查 ---"
echo "PATH=$PATH" | head -c 100
echo "..."
echo "--- 关键命令测试 ---"
command -v ls && echo "✅ ls 命令正常" || echo "❌ ls 命令异常"
command -v ll && echo "✅ ll 命令正常" || echo "⚠️ ll 命令未找到(可能是别名)"
echo "--- 安装摘要 ---"
echo "📁 JDK安装目录: $EXTRACT_DIR"
echo "🔧 JAVA_HOME: $JAVA_HOME"
echo "📝 环境变量文件: $JAVA_PROFILE_FILE"
echo ""
echo "=============================================="
echo "✅ JDK8 安装和环境变量配置完成!"
echo "⚠️ 注意: 需要重新登录或执行 'source /etc/profile' 使环境变量生效"
echo "=============================================="
mysql5.7
安装步骤
切换路径到家目录创建目录
# 创建目录并切换路径
cd ~
sudo mkdir mysql5.7
sudo chmod 777 -R mysql5.7
cd mysql5.7
# 安装
sudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.36-1ubuntu18.04_amd64.deb-bundle.tar
# 解压tar包
tar xvf mysql-server_5.7.36-1ubuntu18.04_amd64.deb-bundle.tar
# 安装依赖库
# sudo apt-get update 之前执行过这里就不需要执行了
# 执行下面安装过程中留意有设置密码的步骤
sudo apt-get install ./libmysql* -y
sudo apt-get install libtinfo5 -y
sudo apt-get install ./mysql-community-client_5.7.36-1ubuntu18.04_amd64.deb -y
sudo apt-get install ./mysql-client_5.7.36-1ubuntu18.04_amd64.deb -y
sudo apt-get install ./mysql-community-server_5.7.36-1ubuntu18.04_amd64.deb -y
sudo apt-get install ./mysql-server_5.7.36-1ubuntu18.04_amd64.deb -y
# 如果安装过程中没有仔细看导致没有设置密码,可通过下面的方法重置密码
sudo mysql_secure_installation
# 运行后会有多个提问步骤,要仔细查看问询的内容,其中第二步是设置密码的
# 设置远程访问
mysql -u root -p
# 输入密码后登录,下面都是在mysql环境执行的命令
# 切记最后要有分号再回车执行
USE mysql;
UPDATE user SET host='%' WHERE user='root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '!BARRELserver20221220@';
FLUSH PRIVILEGES;
# 输入 exit 回车退出 mysql 环境。执行下面命令修改配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 修改选项绑定IP,允许所有外部链接进来
bind-address = 0.0.0.0
# 修改使用内存
# 通过命令查看配置文件所在路径
sudo find / -name "my.cnf"
# 配置文件 /etc/mysql/my.cnf 中会指定引用的配置文件路径
# 一般是 /etc/mysql/mysql.conf.d/mysqld.cnf
# 修改之前先备份配置文件
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup
# 修改文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 打开后没有相关参数的配置,自己手动添加
# 总内存8G,服务器同时要作为java后端服务的话,推荐使用下面配置
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 2
key_buffer_size = 128M
max_heap_table_size = 64M
query_cache_size = 0
innodb_log_buffer_size = 64M
# 重启mysql服务,使上面的配置生效
sudo systemctl restart mysql
