代理

1
export {http,https}_proxy="http://ip:port"
1
2
set http_proxy=http://ip:port
set https_proxy=http://ip:port

mariadb

install

debian

1
2
3
4
5
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
apt install mariadb-server
systemctl enable mariadb --now

mysql_secure_installation

alpine

1
2
3
4
5
apk add mariadb mariadb-client
/etc/init.d/mariadb setup
rc-service mariadb start
rc-update add mariadb default
mariadb-secure-installation

config

/etc/mysql/mariadb.conf.d/10-custom.cnf

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
[mysqld]
default-time-zone='+08:00'

query_cache_type=0
query_cache_size=0

open_files_limit=65536
thread_cache_size=100

innodb_buffer_pool_size=6G
innodb_buffer_pool_instances=4
innodb_log_file_size=256M
innodb_log_buffer_size=64M

sort_buffer_size=4M
join_buffer_size=4M
read_buffer_size=2M
read_rnd_buffer_size=2M

tmp_table_size=1024M
max_heap_table_size=1024M

skip-name-resolve=ON
max_connections=200

log-bin=/var/lib/mysql/bin
expire_logs_days=14

slow-query-log=1
slow-query-log-file=/var/log/mysql-slow.log
long_query_time=2

command

1
2
3
4
5
6
7
8
CREATE DATABASE `database`;

CREATE USER 'root'@'%' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON `database`.* TO 'user'@'%';

FLUSH PRIVILEGES;
1
2
show status like '%Qcache%';
show variables like "%query_cache%"
1
2
DROP TABLE IF EXISTS `database`.`users`;
RENAME TABLE database_old.user TO database_new.user;

bak

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash

BACKUP_DIR="/data/bak/mariadb"
RETENTION_DAYS=14

BACKUP_FILE="$BACKUP_DIR/$(date +%Y%m%d-%H%M%S).sql.gz"

docker exec mariadb-mariadb-1 mariadb-dump \
--databases database \
--ignore-table database.user_in_histories \
--single-transaction \
--quick \
--lock-tables=false \
-uroot -p"password." | gzip > "$BACKUP_FILE"

if [ $? -eq 0 ]; then
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
fi
1
2
zcat backup.sql.gz | mysql -u 用户名 -p
pv backup.tar.gz | gunzip | mysql -u 用户名 -p

redis

debian

1
2
3
4
5
6
7
8
apt-get install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
chmod 644 /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" | tee /etc/apt/sources.list.d/redis.list
apt-get update
apt-get install redis

systemctl enable redis-server --now

valkey

alpine

1
2
3
apk add valkey
rc-service valkey start
rc-update add valkey

caddy

debian

1
2
3
4
5
6
apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update
apt install caddy
systemctl enable caddy --now
1
caddy file-server --browse --listen :3000 --access-log

alpine

1
2
3
apk add caddy
rc-update add caddy
rc-service caddy restart
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
(cors) {
@cors_preflight method OPTIONS
@cors header Origin {args.0}

handle @cors_preflight {
header Access-Control-Allow-Origin "{args.0}"
header Access-Control-Allow-Methods *
header Access-Control-Allow-Headers *
header Access-Control-Max-Age "3600"
respond "" 204
}

handle @cors {
header Access-Control-Allow-Origin "{args.0}"
header Access-Control-Expose-Headers *
}
}

import /data/conf/*.caddy

:80 {
root * /usr/share/caddy
file_server
}

domain.com {
encode zstd gzip
tls domain@email

import cors http://domain.com
reverse_proxy 127.0.0.1:6001

log {
output file /data/logs/domain.log
}
}

domain.com:80 {
encode zstd gzip

root * /data/www//dist
try_files {path} /index.html
file_server
}

domain.com {
encode zstd gzip
tls certificate.pem private.key
tls internal

@match_cors {
method OPTIONS
}
handle @match_cors {
header {
Access-Control-Allow-Origin *
Access-Control-Allow-Methods *
Access-Control-Allow-Headers *
Access-Control-Max-Age 3600
}
respond 204
}

reverse_proxy 127.0.0.1:8000
}

reverse_proxy 127.0.0.1:4050 {
header_up X-Real-IP {remote}
handle_response {
header Access-Control-Allow-Origin *
header Access-Control-Allow-Methods *
header Access-Control-Allow-Headers *
header Access-Control-Max-Age 3600
copy_response
}
}

log {
output file /data/logs/log.log

format console {
time_format wall
time_local
}
}

handle_path /logs/* {
root * /data/www/logs/
file_server browse {
precompressed zstd br gzip
hide ".gitignore" "*.json" "supervisord*"
}
}

supervisor

debian

1
2
apt install supervisor
systemctl enable supervisor --now

alpine

1
2
3
4
apk add supervisor
rc-update add supervisord
rc-service supervisord restart
mkdir -p /etc/supervisor.d/

nodejs

1
2
3
4
5
6
curl -sS https://deb.nodesource.com/setup_lts.x | bash
apt install nodejs

npm config set registry https://registry.npmmirror.com

npm install -g pnpm

pnpm

~/.profile

1
2
3
4
5
6
7
# pnpm
export PNPM_HOME="/root/.local/share/pnpm"
case ":$PATH:" in
*":$PNPM_HOME:"*) ;;
*) export PATH="$PNPM_HOME:$PATH" ;;
esac
# pnpm end

pm2

1
2
3
pm2 start ecosystem.config.js
pm2 startup
pm2 save

git

1
2
3
4
5
6
git config core.filemode false

git daemon --verbose --export-all --base-path=.
git clone git://127.0.0.1/file file

git clone ../base/file file

alpine

1
apk add openssh-client-default openssh-keygen git

pake

1
2
pake http://domain.test --name domain --icon favicon_128.ico --fullscreen --always-on-top --installer-language zh-CN
pake http://domain-dev.test --name domain-dev --icon favicon_128.ico --installer-language zh-CN --debug

php

frankenphp

1
2
3
wget https://github.com/dunglas/frankenphp/releases/download/v1.3.1/frankenphp-linux-x86_64
chmod +x frankenphp-linux-x86_64
mv frankenphp-linux-x86_64 /usr/local/bin

/usr/local/bin/php

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env bash
args=("$@")
index=0
for i in "$@"
do
if [ "$i" == "-d" ]; then
unset 'args[$index]'
unset 'args[$index+1]'
fi
index=$((index+1))
done

/usr/local/bin/frankenphp php-cli ${args[@]}
1
frankenphp php-cli /usr/local/bin/composer  install --no-dev -vvv

composer

1
2
3
4
wget https://mirrors.tencent.com/composer/composer.phar
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer
composer config -g repos.packagist composer https://mirrors.tencent.com/composer/
1
composer install --no-dev -vvv

laravel

1
php artisan key:generate

win

1
irm https://massgrave.dev/get | iex

alpine

1
RUN apk add name --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing/

ssh

1
2
3
apk add openssh
rc-service sshd start
rc-update add sshd

dropbear

1
2
3
apk add dropbear openssh-sftp-server
rc-service dropbear start
rc-update add dropbear
1
DROPBEAR_OPTS=" -p 0.0.0.0:22"

docker

install

debian

1
2
3
4
5
6
7
8
9
10
11
12
13
apt-get update
apt-get install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update

apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

alpine

1
2
3
apk add docker docker-compose
rc-service docker start
rc-update add docker

config

/etc/docker/daemon.json

1
2
3
4
5
6
7
8
9
{
"iptables": true,
"default-address-pools": [
{
"base": "172.18.0.0/16",
"size": 24
}
]
}

image

1
2
3
4
# save image
docker save puzzle9/image:latest | gzip > puzzle9_image-latest.tar.gz
# load image
gunzip -c puzzle9_image-latest.tar.gz | docker load

role

1
sudo usermod -aG docker $USER

run

1
2
3
docker run -e HTTP_PROXY=http://127.0.0.1:3128 -e HTTPS_PROXY=http://127.0.0.1:3128 -it --rm --name build_web -v ./web:/app -w /app node:20-alpine npm install

docker run --net=host -it --rm --name build_web -v "$PWD":/app -w /app node:20-alpine npm install --proxy http://127.0.0.1:3128/

firewall

记得要加进去

1
firewall-cmd --permanent --zone=trusted --add-source=172.19.0.1/16

tar

1
2
3
4
5
6
# 解压
tar -xvf file

# 打包
tar -cvf file.tar files
tar -czvf file.tar.gz files

静态路由

1
2
ip route add 192.168.21.0/24 via 192.168.2.9
ip route del 192.168.21.0/24 via 192.168.2.9

ssh key

1
ssh-keygen -t ed25519

清空网卡已获取到的ip并重新获取

1
ip addr flush eth0 && dhclient

lvm

1
2
lvextend -l +100%FREE /dev/mapper/debian--vg-root
lvremove /dev/debian-vg/tmp

ncat

1
ncat -l -k 31280 -c  'ncat 127.0.0.1 3128'
1
2
nc -l -v 9999 > file.zip
nc -v ip 9999 < file.zip

log

1
tail -f manager/`date +%Y%m%d`/* service/`date +%Y%m%d`/*

timedatectl

1
2
3
4
5
6
7
date -s "2024-05-11 10:12:20"

timedatectl set-time "2024-05-30 12:23:20"

timedatectl set-ntp no

timedatectl set-timezone Asia/Hong_Kong

lvm 分区调整

1
2
3
4
lvdisplay
lvremove /dev/debian-vg/home
lvextend -rl +100%FREE /dev/debian-vg/root
resize2fs /dev/debian-vg/root

win 端口转发

1
2
3
netsh interface portproxy add v4tov4 listenport=1234 listenaddress=0.0.0.0 connectport=1234 connectaddress=192.168.3.30

netsh interface portproxy show all

ufw 防火墙

1
2
3
4
5
6
7
8
9
10
11
apt install ufw
ufw status
ufw status numbered
ufw allow 22/tcp
ufw allow from 192.168.1.1 to any port 3306 proto tcp
ufw allow in on eth0
ufw route allow in on eth0
ufw default reject
ufw enable
ufw disable
ufw delete

/etc/ufw/before.rules

1
2
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

/etc/default/ufw

1
2
DEFAULT_FORWARD_POLICY="DROP"
DEFAULT_FORWARD_POLICY="ACCEPT"

samba

1
apt install samba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[global]
security = user
log file = /var/log/samba/log.%m
max log size = 100
logging = file
map to guest = bad user
guest account = root
server min protocol = SMB2
client min protocol = SMB2
# interfaces = 192.168.0.0/16
# bind interfaces only = yes

[hdd]
comment = hdd
path = /hdd
public = yes
browseable = yes
writable = yes
guest ok = yes
force user = root
force group = root
create mode = 0660
directory mode = 2770

win11

以管理员模式运行

1
2
Set-SmbClientConfiguration -RequireSecuritySignature $false
Set-SmbClientConfiguration -EnableInsecureGuestLogons $true

nfs

服务端

1
2
3
apt install nfs-kernel-server
systemctl restart nfs-kernel-server
exportfs -v

/etc/exports

1
/share 192.168.0.0/16(rw,async,no_root_squash,no_subtree_check)

/etc/nfs.conf

1
2
3
[nfsd]
# port=20450
# host=192.168.1.100

客户端

1
apt install nfs-common
1
mount -t nfs [ip]:/share /share

/etc/fstab

1
[ip]:/share  /share  nfs  defaults,_netdev  0  0

iptables

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 将 本机的 8080 转发到 1.2.3.4:80 端口
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 1.2.3.4:80
iptables -t nat -A POSTROUTING -p tcp -d 1.2.3.4 --dport 80 -j MASQUERADE

# 查看规则
iptables -L
iptables -P FORWARD ACCEPT
iptables -t nat -L -n -v --line-numbers

# 删除规则
iptables -t nat -D PREROUTING [number]

# 保存规则
/etc/init.d/iptables save

rsync

1
2
rsync -P -rzv -e "ssh -p 2222" root@ip:/data/mariadb/database /bak/
rsync -P -n -av /data/old /data/new

openssl

1
openssl req -x509 -nodes -newkey rsa:2048 -keyout server.key -out server.crt -days 365