0%

服务器纪念

Ubuntu 22.04.4 LTS (GNU/Linux 6.5.0-21-generic x86_64)

服务搭建记录

apt

1
2
3
4
5
# 首先配置源,此部分各个系统版本不同,且随时有可能更新,如果有GUI可以直接使用键鼠在系统设置中操作,如果没有就要上网搜一下。
# 另外如果在安装ubuntu的时候位置选的对,ubuntu可能会在进入系统后自动就配置到清华的软件源。
sudo apt update
sudo apt list --upgradable
sudo apt upgrade -y

Vim

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo apt install vim -y
sudo vim /etc/vim/vimrc

set number
set autoindent
set cursorline
set ruler
set tabstop=4

# 显示行号;
# 自动缩进;
# 突出显示当前行;
# 打开状态栏标尺;
# tab键为4个单位。

vim ~/.bashrc
force_color_prompt=yes

GPG

1
2
# 很有可能在安装其他依赖的时候就已经安装好了,其实很多通用包不需要安装,一些大型项目会在安装本身的时候安装很多通用包。比如lsb-release gnupg curl wget transport-https net-tools rsync lzrz nodejs等,一些重要的也会单独列出来。
sudo apt install gnupg

SSH

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo apt install net-tools -y
ifconfig

sudo apt-get install openssh-server -y
sudo passwd root
ssh-keygen
cd ~/.ssh

sudo vim /etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication yes
PermitRootLogin yes
PermitEmptyPasswords no
MaxAuthTries 4

sudo systemctl restart ssh

RzSz

1
sudo apt install lrzsz -y

静态IP

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
# 可以直接通过路由器的DHCP分配设置中把ubuntu机器现有的IP地址固定下来。首推通过路由器配置,且软硬路由器都可以简单实现。
# 如果不能,以下是仅通过ubuntu系统内部操作更改静态IP,中文位置都是需要改的。

# 查看网卡名
ip addr
# 找到有ipv4地址的网卡,序号后面紧跟着的就是网卡名,如enp3s0f2,wlp4s0等

# sudo vim /etc/netplan/01-network-manager-all.yaml

# 复制下面的内容
network:
version: 2
renderer: NetworkManager
wifis:
这里写网卡名:
dhcp4: no
dhcp6: yes
addresses: [这里写静态ip/24]
optional: true
routes:
- to: default
via: 这里写网关,一般是路由器的内网地址,如192.168.1.1
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
access-points:
无线网名:
password: 无线网密码

# 修改权限,并更新网卡
sudo chmod 600 /etc/netplan/01-network-manager-all.yaml
sudo netplan apply

# 查看当前文件夹下的文件的权限情况
ls -l

安全

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
# 合盖不休眠
vim /etc/systemd/logind.conf
HandleLidSwitch=lock
#lock是锁屏,或ignore,无视

# 禁ping
# sudo vim /etc/sysctl.conf
# net.ipv4.icmp_echo_ignore_all = 1

# 开启地址空间布局随机化 | 入侵防范
sysctl -w kernel.randomize_va_space=2
sysctl -p
# 禁用邮件服务
systemctl disable postfix

# 防火墙相关命令,开启防火墙之后安全性大大增加。如果要暴露在外网,防火墙是必须的。
# sudo ufw status
# sudo ufw status numbered
# sudo ufw enable
# sudo ufw reload
# sudo ufw disable
# sudo ufw allow 8000/tcp
# sudo ufw allow 8000/udp
# sudo ufw allow 8000
# sudo ufw delete 3
# sudo ufw deny 22/tcp
# sudo ufw allow 192.168.1.0/24 to any

Java

1
sudo apt install openjdk-17-jdk -y

Scala

1
sudo apt install scala -y

Python

1
2
3
4
5
6
sudo apt install python3 -y
sudo apt install python3-pip -y
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
pip install numpy pandas matplotlib pyspark jupyter tensorflow pyarrow torch scikit-learn
sudo apt install python-is-python3 -y

PostgreSQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sudo apt install -y libpq-dev postgresql postgresql-contrib

# sudo su postgres
# psql
# CREATE USER hxy WITH PASSWORD 'xxxxxxxxx';
# ALTER USER hxy WITH SUPERUSER;


# sudo vim /etc/postgresql/14/main/pg_hba.conf
# local all all md5
# host all all 0.0.0.0/0 md5

# sudo vim /etc/postgresql/14/main/postgresql.conf
# listen_addresses = '*'

# sudo service postgresql restart

sudo ufw allow 5432/tcp

MySQL

1
sudo apt install mysql-server -y

Sqlite

1
sudo apt-get install sqlite3 -y

C++

1
sudo apt install build-essential gdb -y

Rust

1
2
3
4
sudo apt install curl -y
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
1
source "$HOME/.cargo/env"

Git

1
2
3
4
5
sudo apt install git -y

git config --list --show-origin
git config --global user.name "hexiaoyu"
git config --global user.email "hexi.aoyu@163.com"

功耗

1
2
sudo apt-get install gnome-power-manager -y
upower --monitor-detail

Jupyter Notebook Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
jupyter-notebook --generate-config

jupyter notebook password

vim ~/.jupyter/jupyter_notebook_config.py

c.ServerApp.allow_remote_access = True
c.ServerApp.ip='*'
c.ServerApp.open_browser = False
c.ServerApp.port = 8888

pip install jupyterlab-language-pack-zh-CN

# 后台启动
cd /root/code/jupyter
nohup jupyter notebook --allow-root >/dev/null 2>&1 &

vim /root/.jupyter/jupyter_notebook_config.py
# 找到c.NotebookApp.allow_origin = '''' 改为 '*'

# 精准找到jupyter,第二列是pid
# ps ux | grep jupyter
# 杀死PID
# kill -9

Zerotier

1
2
3
curl -s https://install.zerotier.com | sudo bash
zerotier-cli info
zerotier-cli join xxxxxxx

自写DDNS脚本

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
55
56
57
58
59
import os
import sys
import json,urllib

from typing import List

from alibabacloud_alidns20150109.client import Client as Alidns20150109Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_alidns20150109 import models as alidns_20150109_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient

# 阿里云的access
ID = '略略略'
SECRET = '略略略'

class Sample:
def __init__(self):
pass

@staticmethod
def create_client(
access_key_id: str,
access_key_secret: str,
) -> Alidns20150109Client:
config = open_api_models.Config(
access_key_id=access_key_id,
access_key_secret=access_key_secret
)
config.endpoint = f'alidns.cn-hangzhou.aliyuncs.com'
return Alidns20150109Client(config)

@staticmethod
def main(
args: List[str],
) -> None:
# client = Sample.create_client(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
client = Sample.create_client(ID, SECRET)
update_domain_record_request = alidns_20150109_models.UpdateDomainRecordRequest(
# 自己查record
record_id='略略略',
# 二级域名
rr='略略略',
# 网卡信息
value=os.popen("ip -6 addr show dev 略略略 | awk '/inet6/ {print $2}' | cut -d'/' -f1").readlines()[1][:-1],
type='AAAA'
)
runtime = util_models.RuntimeOptions()
try:
client.update_domain_record_with_options(update_domain_record_request, runtime)
except Exception as error:
print(error.message)
print(error.data.get("Recommend"))
UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
Sample.main(sys.argv[1:])

2024年1月12日注释,本部分待更新,该python脚本已经经过大幅优化,但这个版本也是有效的

Docker

1
2
3
4
5
6
7
8
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose

echo '{"registry-mirrors": ["http://hub-mirror.c.163.com"]}' >> /etc/docker/daemon.json
sudo service docker restart

Redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Redis 的默认端口为6379,运行完了之后会直接启动。
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list

sudo apt-get update
sudo apt-get install redis

# 查看redis运行状态
# `service redis-server status`

# 进入redis client
# `redis-cli`

# redis配置文件
# sudo vim /etc/redis/redis.conf

# 开机自启
# sudo systemctl enable redis-server

Jellyfin

1
2
3
curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash

ln -s /usr/share/jellyfin/web/ /usr/lib/jellyfin/bin/jellyfin-web

Syncthings

1
2
3
4
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -
sudo apt update
sudo apt install syncthing -y

NextCloud

TODO

定时任务

1
2
3
4
5
6
7
sudo apt install cron postfix -y
service cron status
# 开启cron日志 找到cron的注释并去掉注释
sudo vim /etc/rsyslog.d/50-default.conf
sudo service rsyslog restart
# 查看日志
# tail -f /var/log/cron.log

Airflow

1
2
3
4
5
6
7
8
9
pip install connexion[swagger-ui]
# 从airflow下载docker-compose.yaml和Dockerfile
# 进入要安装airflow的地方,运行
mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env
# 初始化
docker compose up airflow-init
# 运行
docker compose up

2023年12月22日Note

Airflow已经被我弃用了,现在使用DophinScheduler + crontab

DophinScheduler

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
wget https://dlcdn.apache.org/dolphinscheduler/3.2.1/apache-dolphinscheduler-3.2.1-bin.tar.gz

tar -xvzf apache-dolphinscheduler-3.2.1-bin.tar.gz
cd apache-dolphinscheduler-3.2.1-bin
bash ./bin/dolphinscheduler-daemon.sh start standalone-server
mv apache-dolphinscheduler-3.2.1-bin dolphinscheduler-3.2.1
rm apache-dolphinscheduler-3.2.1-bin.tar.gz

# 采用命令行工具登陆 PostgreSQL
psql
# 创建数据库
postgres=# CREATE DATABASE dolphinscheduler;
# 修改 {user} 和 {password} 为你希望的用户名和密码
postgres=# CREATE USER {user} PASSWORD {password};
postgres=# ALTER DATABASE dolphinscheduler OWNER TO {user};
# 退出 PostgreSQL
postgres=#\q
# 在终端执行如下命令,向配置文件新增登陆权限,并重载 PostgreSQL 配置,替换 {ip} 为对应的 DS 集群服务器 IP 地址段
echo "host dolphinscheduler dolphin 127.0.0.1/32 md5" >> /etc/postgresql/14/main/pg_hba.conf

service postgresql restart

vim ./bin/env/dolphinscheduler_env.sh
# for postgresql
export DATABASE=postgresql
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:postgresql://127.0.0.1:5432/dolphinscheduler"
export SPRING_DATASOURCE_USERNAME=dolphin
export SPRING_DATASOURCE_PASSWORD=dolphin

bash tools/bin/upgrade-schema.sh


# 启动 Standalone Server 服务
bash ./bin/dolphinscheduler-daemon.sh start standalone-server
# 停止 Standalone Server 服务
bash ./bin/dolphinscheduler-daemon.sh stop standalone-server

# http://ip:12345/dolphinscheduler/ui
# admin
# dolphinscheduler123

Hexo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 先安装nodejs
apt remove nodejs
apt remove npm
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
apt-get install -y nodejs
npm config set registry http://mirrors.cloud.tencent.com/npm/
npm install hexo-cli hexo-server -g

#https://github.com/next-theme/hexo-word-counter
npm install hexo-word-counter

#post-eof修改分割线格式

cd
hexo init ~/hxygmy

hexo new page tags

Samba

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
apt install samba

# 更改想要共享的文件夹权限
chmod 777 ./share/

# 备份原来的配置文件
cp /etc/samba/smb.conf /etc/samba/smb.bak

vim /etc/samba/smb.conf


[doc]
# path为共享文件夹的路径
path = /
available = yes
browseable = yes
public = yes
writable = yes


# 创建samba用户
touch /etc/samba/smbpasswd
smbpasswd -a hxy
# 密码123

service smbd restart
ufw allow 139/tcp
ufw allow 445/tcp
ufw allow 137/udp
ufw allow 138/udp

ufw reload

# 逆向访问
apt install cifs-utils
mount.cifs //192.168.31.189/downloads ~/data/smb -o username=gmy

Nginx

1
2
3
4
5
6
7
8
apt install nginx

vim /etc/nginx/nginx.conf
# 这个配置文件第一行改成
# user root;

# 不多写了,也可以单独建.conf文件
# 另外这里有个坑,ipv6端口转发的监听需要[::]:port这样的格式

Aria2

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# 安装Aria2。安装完并不能运行和使用,要进行第二步
apt install -y aria2
mkdir /etc/aria2

# 创建一个会话文件,用于断点续传
touch /etc/aria2/aria2.session
chmod 777 /etc/aria2/aria2.session

mkdir /root/data/download
chmod -R 777 /root/data/download

vim /etc/aria2/aria2.conf

# Aria2配置。手动配置文件后可以运行,但是仅限于命令行模式;所以需要第三步安装界面。
# Web端配置。web界面其实是一个独立的网站,然后通过aria2的端口连接来管理aria2的任务和参数。

## 文件保存相关 ##
# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=/root/data/download
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
disk-cache=16M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
file-allocation=prealloc
# 断点续传
continue=true

## 下载连接相关 ##

# 最大同时下载任务数, 运行时可修改, 默认:5
#max-concurrent-downloads=5
# 同一服务器连接数, 添加时可指定, 默认:1
#max-connection-per-server=5
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
#min-split-size=10M
# 单个任务最大线程数, 添加时可指定, 默认:5
#split=5
# 整体下载速度限制, 运行时可修改, 默认:0
max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0
max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0
max-overall-upload-limit=0
# 单个任务上传速度限制, 默认:0
max-upload-limit=0
# 禁用IPv6, 默认:false
#disable-ipv6=true
# 连接超时时间, 默认:60
#timeout=60
# 最大重试次数, 设置为0表示不限制重试次数, 默认:5
#max-tries=5
# 设置重试等待的秒数, 默认:0
#retry-wait=0

## 进度保存相关 ##

# 从会话文件中读取下载任务
input-file=/etc/aria2/aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=/etc/aria2/aria2.session
# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
save-session-interval=60

## RPC相关设置 ##

# 启用RPC, 默认:false
enable-rpc=true
# 允许所有来源, 默认:false
rpc-allow-origin-all=true
# 允许非外部访问, 默认:false
rpc-listen-all=true
# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
event-poll=select
# RPC监听端口, 端口被占用时可以修改, 默认:6800
rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
#rpc-secret=<TOKEN>
# 是否启用 RPC 服务的 SSL/TLS 加密,
# 启用加密后 RPC 服务需要使用 https 或者 wss 协议连接
#rpc-secure=true
# 在 RPC 服务中启用 SSL/TLS 加密时的证书文件,
# 使用 PEM 格式时,您必须通过 --rpc-private-key 指定私钥,这里可以是CRT或者其他格式,标准内都支持。
#rpc-certificate=/path/to/certificate.pem
# 在 RPC 服务中启用 SSL/TLS 加密时的私钥文件
#rpc-private-key=/path/to/certificate.key

## BT/PT下载相关 ##

# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51413
# 单个种子最大连接数, 默认:55
bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=false
# 打开IPv6 DHT功能, PT需要禁用
enable-dht6=false
# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
bt-enable-lpd=false
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=false
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
peer-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=2.0
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
force-save=false
# BT校验相关, 默认:true
bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
bt-save-metadata=true

#aria2c --conf-path=/etc/aria2/aria2.conf
#vim /etc/init.d/aria2c

cd /root/app
wget https://github.com/mayswind/AriaNg/releases/download/1.3.7/AriaNg-1.3.7.zip
unzip -d /root/app/ariang/ AriaNg-1.3.7.zip

#配置nginx
vim /etc/nginx/conf.d/aria2.conf

server {
listen 1112;
listen [::]:1112;

location / {
root /root/app/ariang;
try_files $uri $uri/ =404;
index index.html;
}
}

nginx -s reload

aria2c --conf-path=/etc/aria2/aria2.conf -D

Anaconda

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
#去清华站下载最新的
#https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

# 运行shell脚本
bash Anaconda3-2024.02-1-Linux-x86_64.sh
# 回车,看协议,同意协议,选择路径,初始化anaconda,完成退出

eval "$(/root/app/anaconda3/bin/conda shell.bash hook)"
conda init

# 建立一个jupyter环境
conda create -n jupyter
conda activate jupyter
conda install -c conda-forge mamba -y
mamba install xeus-cling -c conda-forge -y
mamba install jupyterlab -y

conda config --set auto_activate_base false
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --show channels

# 配置新的位置到which jupyter
jupyter kernelspec install /root/app/anaconda3/envs/jupyter/share/jupyter/xcpp11 --sys-prefix
jupyter kernelspec install /root/app/anaconda3/envs/jupyter/share/jupyter/xcpp14 --sys-prefix
jupyter kernelspec install /root/app/anaconda3/envs/jupyter/share/jupyter/xcpp17 --sys-prefix

python -m ipykernel install --name [环境名]

OneDrive

1
2
3
4
sudo apt install onedrive
onedrive
onedrive --synchronize --single-directory 'code/posts'
systemctl disable --now --user onedrive

Overall

1
2
3
4
sudo timedatectl set-timezone Asia/Shanghai && sudo timedatectl set-ntp on && sudo apt update && sudo apt install git python3 cmake python3-pip openjdk-17-jdk sqlite3 build-essential gdb linux-tools-common linux-tools-generic ninja-build curl wget lrzsz zip -y && sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo init 6

# 下面因为在不同版本的ubuntu中可能会报错,所以单独拉出来。
sudo apt install python-is-python3 -y && pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple && pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U && pip install pandas matplotlib jupyter