Debian系统安装服务软件

linux编译安装指令

configure、make、make install 命令

configure:配置,是用来检测你的安装平台的目标特征的。比如它会检测你是不是有 CC 或 GCC,并不是需要 CC 或 GCC,它是个 shell 脚本。configure 脚本负责在使用的系统上准备好软件的构建环境。确保接下来的构建和安装过程所需要的依赖准备好,并且搞清楚使用这些依赖需要的东西。

make:构建,用来编译,它从 Makefile 中读取指令,然后编译。下载的源码包一般没有一个最终的 Makefile 文件,一般是一个模版文件,然后 configure 根据系统的参数生成一个定制化的 Makefile 文件。这个过程会执行在 Makefile 文件中定义的一系列任务将软件源代码编译成可执行文件。

make install:安装,它也从 Makefile 中读取指令,安装到指定的位置。make install 命令就是将可执行文件、第三方依赖包和文档复制到正确的路径。

清除 make 生成的文件:make clean

清除 make 和 configure 生成的文件,包括 Makefile:make distclean

apt 源安装 php

由于 debian 11 带的 php 版本是 7.4,有点老,所以我们可以使用 debian 开发者 Ondřej Surý 维护的 php 源 deb.sury.org 。

注意:以下方式还可以安装 php 5.6 版本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 首先,使用下面的命令安装所须的软件包:
apt install ca-certificates apt-transport-https software-properties-common -y

# 安装所须软件包后,使用以下命令将 Sury 存储库添加到 APT:
echo "deb [https://packages.sury.org/php/](https://packages.sury.org/php/) $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list

# 然后,使用以下命令下载并添加 GPG 密钥:
wget -qO - [https://packages.sury.org/php/apt.gpg](https://packages.sury.org/php/apt.gpg) | apt-key add -
# 上述添加 GPG 密钥的命令会提示 Warning: apt-key is deprecated,但是可以执行成功,如果不想要报 Warning 可以换成下面的命令:
wget -O /etc/apt/trusted.gpg.d/php.gpg [https://packages.sury.org/php/apt.gpg](https://packages.sury.org/php/apt.gpg)

# 完成后,使用以下命令更新存储库,到此,sury 源添加完成。
apt update

安装 php 指定版本

1
2
3
4
5
6
7
8
# 如果要安装 php 的最新版本,可以执行:
apt install php-fpm php-mysql php-mbstring php-curl php-dom php-imagick php-zip php-gd php-intl
# 如果要安装指定的版本,例如安装 php8.0,可以执行:
apt install php8.0-fpm php8.0-mysql php8.0-mbstring php8.0-curl php8.0-dom php8.0-imagick php8.0-zip php8.0-gd php8.0-intl
apt install php5.6-fpm php5.6-mysql php5.6-mbstring php5.6-curl php5.6-dom php5.6-imagick php5.6-zip php5.6-gd php5.6-intl

# 注意,使用命令 apt install php8.0 后,会一并安装Apache。
# php 指的应该是整套能运行 php 的环境,php 需要在 libapache2-mod-php5, libapache2-mod-php5filter, php5-cgi, or php5-fpm 以上环境之一运行,如果没有则默认选了第一种,所以会推荐安装 apache。参考回答: https://learnku.com/articles/55616](https://learnku.com/articles/55616

启动 php-fpm:systemctl status php8.0-fpm.service

源码编译安装 php

安装编译程序和相关依赖,可以运行 ./configure 命令检查。缺啥安装啥

1
apt-get install gcc make libxml2 libxml2-dev zlib1g-dev libcurl4-gnutls-dev libreadline-dev

创建安装目录

1
mkdir -p /usr/local/php/5.6

下载 php 5.6 的源码包,解压后进入源码文件夹下

生成配置文件

1
./configure --prefix=/usr/local/php/5.6 --with-config-file-path=/usr/local/php/5.6 --enable-fpm --enable-cli

出现问题:报错 Cannot find OpenSSL's libraries

运行命令:find / -name libssl.so,输出:/usr/lib/x86_64-linux-gnu/libssl.so

建立软连接:ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib

重新编译即可

编译、安装

1
make && make install

复制 php.ini

1
2
# php.ini-development(开发环境用)与php.ini-production(生产环境用)
cp php.ini-production /usr/local/php/5.6/php.ini

复制启动脚本

1
2
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php5.6-fpm
chmod +x /etc/init.d/php5.6-fpm

复制生成 php-fpm.conf 文件

1
cp /usr/local/php/5.6/etc/php-fpm.conf.default /usr/local/php/5.6/etc/php-fpm.conf

修改 php-fpm.conf

1
2
3
去掉 pid = run/php-fpm.pid 前面的分号
并在listen = 127.0.0.1:9000后面添加
listen.allowed_clients = 127.0.0.1

参考: https://blog.csdn.net/qq_43017750/article/details/105053831

安装 nginx

安装:apt install nginx

nginx 配置文件

root、alias 配置区分: https://zhuanlan.zhihu.com/p/131009164

php 相关配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
server {
		.....
        # pass PHP scripts to FastCGI server
        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}

        location ~ \.php$ {
		        fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
                fastcgi_pass unix:/run/php/php5.6-fpm.sock; # 使用unix sockets
                # fastcgi_pass 127.0.0.1:9000; # tcp sockets
        }
}

反向代理配置

 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
server {
    listen       80; # 代理服务器监听的端口
    server_name  192.168.10.1;# 代理服务器地址或绑定域名

	# 访问http://192.168.10.1/,到http://192.168.10.2上
    location / { # 访问80端口后的所有路径都转发到 proxy_pass 配置的ip中
   		proxy_pass http://192.168.10.2; # 配置真实网站的ip地址和端口号 【注:url地址需加上http:// 或 https://】   		
    }

	# 访问http://192.168.10.1/dvwa/这个路径,实际代理到http://127.0.0.1:49154/
    location /dvwa/ {
        proxy_pass http://127.0.0.1:49154/; # 加不加 / 的区别。绝对路径和相对路径的区别
        # 加反斜杠:访问http://192.168.10.1/dvwa/代理到http://127.0.0.1:49154/下
		# 不加反斜杠:访问http://192.168.10.1/dvwa/代理到http://127.0.0.1:49154/dvwa/下
        proxy_redirect  / /dvwa/; # 处理302跳转事件,将location的 / 路径,替换为/dvwa/,保证路径的正确。
    }

	# 访问http://192.168.10.1/pikachu/这个路径,实际代理到http://127.0.0.1:49156/
    location /pikachu/ {
        proxy_pass http://127.0.0.1:49156/;
    }

	# 访问http://192.168.10.1/sqli-lab/这个路径,实际代理到http://127.0.0.1:49158/
    location /sqli-lab/ {
        proxy_pass http://127.0.0.1:49158/;
    }

}

ssl 配置

 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
server {
	#监听443端口
    listen 443;
    #你的域名
    server_name lanhuli.top;
    
    ssl on;
    #ssl证书的pem文件路径
    ssl_certificate  /root/cert/www.lanhuli.top.pem;
    #ssl证书的key文件路径
    ssl_certificate_key /root/cert/www.lanhuli.top.key;

    location / {
	     root /var/www/html;
	     index index.php index.html;
    }

	location ~ \.php$ {
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
		fastcgi_pass unix:/run/php/php8.0-fpm.sock;
	}

}

server {
    listen 80;
    server_name lanhuli.top;
    #将请求转成https
    rewrite ^(.*)$ [https://$host$1](https://$host$1) permanent;
}

basic 认证配置

1)使用本机认证:auth_basic。还有另一种方式,这个比较简单,就用这个就行。

需要先安装 htpasswd 工具:yum install httpd-tools 或者 apt install apache2-utils

生成密码文件:htpasswd -c ./mypasswd 用户名,然后输入密码。这个存放的文件路径可以随意指定(这个文件的存放路径必须要让 Nginx 有权限访问到。可以放到 /usr/local/share/mypasswd)。

2)修改 Nginx 的配置文件

注意:不要修改 Nginx 自带的默认配置文件,一定要新建一个配置文件。

新建配置文件:touch /etc/nginx/conf.d/my-nginx.conf

写入内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
server {
    listen 26660; # 监听端口
    server_name 127.0.0.1;
    index index.html;
    
    # auth_basic 认证配置,就这两行
    auth_basic "User Authentication";
    auth_basic_user_file /usr/local/share/mypasswd; # 注意,这个文件的存放路径必须要让 Nginx 有权限访问到,不然报错

    # Nginx 代理转发
    location /  {
        proxy_pass http://127.0.0.1:80 ;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

如果使用 curl 和 wget 命令进行下载:

1
2
curl -u username:password URL
wget --http-user=username --http-passwd=passwd URL

上传文件限制大小问题

1)nginx 配置问题

nginx 服务器报错:413 Request Entity Too Large

打开配置文件 /etc/nginx/nginx.conf。在 http{}段中加入 client_max_body_size 100m; 100 m 为允许最大上传的大小。然后重启 nginx

/8e7beb29bf97/images/image-20240227165407786.png

2)php 配置问题

上传的文件大小超过 php.ini 文件中定义的 upload_max_filesize 值

打开 php.ini,把 upload_max_filesize 和 post_max_size 修改为 100 M,然后重启。

注意:

通过 find 命令查找发现有两个 php.ini 文件

/8e7beb29bf97/images/image-20240227165556853.png

查看 phpinfo,发现使用的是 fpm 下的文件

/8e7beb29bf97/images/image-20240227165612950.png

安装 mysql

安装

1)配置 MySQL 存储库

MySQL 全球最流行的开源关系型数据库管理系统,它在默认的 Debian 存储库中不可用。 MariaDB 是 Debian 10 中的默认数据库系统。MySQL 已经为我们提供了一个 Debian 的 Deb 包,通常是十几 K。我们选择 download。使用 wget 进行下载

1
2
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb

2)安装 MySQL

1
2
sudo apt update
sudo apt install mysql-server

安装完成后,MySQL 服务会默认自动运行。

重置密码(注意版本)

1、知道旧密码,登陆 MySQL

MySQL 8.0 之前:set password for root@localhost = password ('root 123');

MySQL 8.0 之后:ALTER user root@localhost IDENTIFIED BY 'root 0123';

问题:

简单密码不符合策略

/8e7beb29bf97/images/image-20230402181441477.png

这个与验证密码策略 validate_password_policy 的值有关。默认是 1,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。如果不想设置 8 位,或者想设置简单点,可以选择 Policy 0.

/8e7beb29bf97/images/image-20230402181544842.png

在修改策略之前它需要你先改密码

/8e7beb29bf97/images/image-20230402181609027.png

这是其它的一些密码设置

SHOW VARIABLES LIKE 'validate_password%';

/8e7beb29bf97/images/image-20230402181638042.png

1
2
3
set global validate_password_policy=0;
set global validate_password_length=6;
set password for root@localhost = password ('root 123');

2、忘记密码

第一步:在命令行输入 net stop mysql 命令关闭 mysql 服务

第二步:使用–skip-grant-tables 选项启动 mysql 服务(服务器将不加载权限判断,任何用户都能访问数据库)

在命令行输入 mysqld –skip-grant-tables

命令运行之后,用户无法再输入指令,此时如果在任务管理器中可以看到名称为 mysqld 的进程,则表示可以用 root 用户登录服务器了

第三步:打开另一个命令行窗口,输入不加密码的登录命令

mysql -u root

登录成功后可以使用 update 语句修改密码

修改完成后,必须使用 flush privileges 语句刷新权限表,这样新的密码才能生效

第四步:将输入 mysqld –skip-grant-tables 命令的命令行窗口关闭,接下来就可以使用新密码登录 mysql 服务器了

3、root 用户自带了一个随机密码

一般来说 mysql 安装完之后默认是没有密码的,但是在执行 mysqld –initialize 之后会初始化密码 (默认密码为随机的高强度密码)这个密码会储存在错误日志中。

找到日志:find / -name "mysqld.log"

打开查找:cat /var/log/mysqld.log|grep password

/8e7beb29bf97/images/image-20230402181827219.png

安装 Samba

安装:

1
2
3
4
apt install smaba smbclient samba-common # 安装 smaba 即可
# 用于实现 SMB/CIFS(Server Message Block/Common Internet File System)协议。samba 服务器提供了文件共享和打印服务,允许 Windows 客户端通过网络与 Linux/UNIX 服务器交互
# samba 软件包的公共文件和库。它包含一些共享的配置文件、脚本、语言文件和其他公共资源,这些资源被 samba 服务器和客户端程序所共享和使用。
# samba 软件包的客户端组件。它提供了一些用于与 samba 服务器进行交互的命令行工具,例如 smbclient、smbget 和 smbtree 等。这些工具允许用户在 Linux/UNIX 系统上访问和管理远程的 samba 共享文件夹。

指定账户访问

1
2
3
4
5
6
7
8
# 创建一个用来共享的目录
sudo mkdir -p /home/work/sharedir
# 创建一个账户,用来登录
sudo useradd smbuser -s /usr/sbin/nologin
# 修改文件权限使得 smbuser 用户能够访问共享路径
sudo chown smbuser: smbuser /home/work/sharedir
# 将用户 smbuser 添加到 samba 的 smbpasswd file 中(即在 samba 服务中注册该账户)
sudo smbpasswd -a smbuser

修改 samba 配置文件(/etc/samba/smb.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 用户访问时看到的名字
[myshare]
    # 共享文件夹的注释说明
    comment = 锐捷小主机共享
    # 需要填写实际的共享文件夹的路径
    path = /srv/samba/share
    # 设置为可写入
    writable = yes
    #设置可访问的用户 ,此处为前面添加的用户 smbuser(注意 users 不要拼写错误)
    valid users = xujiajun
    #是否允许访客 ,否
    guest ok = no
    #可浏览 ,是
    browsable = yes
    # 新建文件的权限
    create mask = 0777
    # 新建目录即文件夹的权限
    directory mask = 0777

配置含义

[共享名称]: 共享中看到的共享目录名  
comment = 共享的描述.  
path = 共享目录路径 (可以用%u、%m 这样的宏来代替路径如:/home/share/%u)   
browseable = yes/no 指定该共享是否在“网上邻居”中可见。  
writable = yes/no 指定该共享路径是否可写。  
read only = yes/no 设置共享目录为只读 (注意设置不要与 writable 有冲突)   
available = yes/no 指定该共享资源是否可用。  
admin users = bobyuan,jane 指定该共享的管理员, 用户验证方式为“security=share”时,此项无效。   
valid users = bobyuan,jane 允许访问该共享的用户或组-“@+组名”   
invalid users = 禁止访问该共享的用户与组 (同上)   
write list = 允许写入该共享的用户  
public = yes/no 共享是否允许 guest 账户访问。   
guest ok = yes/no 意义同“public”。  
create mask = 0700 指定用户通过 Samba 在该共享目录中创建文件的默认权限。0600 代表创建文件的权限为 rw-------  
directory mask = 0700 指定用户通过 Samba 在该共享目录中创建目录的默认权限。0600 代表创建目录的权限为 rwx------

安装 frp

frp 项目地址: https://github.com/fatedier/frp

官方文档: https://gofrp.org/zh-cn/

ssh 转发: https://gofrp.org/zh-cn/docs/examples/ssh/

服务端配置,修改 frps.toml。新版 frp 配置和旧版的字段名不太一样。注意:新版字符串要加双引号。参考:新版参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[common]
# 服务端监听地址,用于接收 frpc 的连接,默认监听 0.0.0.0。
bindAddr = "0.0.0.0"
# 10000 为服务端 frp 与客户端 frp 相互通信的端口。服务端监听端口,默认值为 7000。
bindPort = 10000
# HTTP 请求的监听端口为 8080
vhostHTTPPort = 8080
# 设置连接密钥
token="qwer1234"
# 设置 frp 后台端口
dashboard_port=8000
# 设置后台帐号和密码
dashboard_user="admin"
dashboard_pwd = "××××××××××"

客户端配置,修改 frpc.toml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[common]
# 服务器的公网地址
serverAddr = "103.246.244.137"
# 10000 为服务端 frp 与客户端 frp 相互通信的端口
serverPort = 10000
# 设置连接密钥
token = "qwer1234"

[[proxies]]
name = "web" # name 值唯一
type = "http"
localPort = 80
customDomains = ["omv.lanhuli.top"]


[smb]
# 文件共享 smb 协议通过 tcp 通信
type = tcp
local_ip = 127.0.0.1
# smb 协议的本地端口
local_port = 445
# remotePort 表示在 frp 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。
# 设定远程端口,当访问服务器的 8090 端口时,数据会被转发到本地 445 端口
remote_port = 8089

服务端运行 frp 命令:./frps -c frps.toml

客户端运行 frp 命令:./frpc -c frpc.toml

我的配置

1
2
3
4
5
6
7
8
bindPort = 16669
auth.token = "123456"

# 服务端面板
webServer.addr = "0.0.0.0"
webServer.port = 16668
webServer.user = "123456789"
webServer.password = "123456789"

客户端

 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
serverAddr = "x.x.x.x"
serverPort = 16669
auth.token = "123456"

# 客户端面板
webServer.addr = "0.0.0.0"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"

[[proxies]]
name = "omv"
type = "tcp"
localIP = "127.0.0.1"
localPort = 26660
remotePort = 16660

# docker 版的 qbittorrent 服务
[[proxies]]
name = "qbit"
type = "tcp"
localIP = "127.0.0.1"
localPort = 16661
remotePort = 16661

# docker 版的 jellyfin 服务
[[proxies]]
name = "jellyfin"
type = "tcp"
localIP = "127.0.0.1"
localPort = 26662
remotePort = 16662

2、后台运行 frp 程序

参考官网: https://gofrp.org/zh-cn/docs/setup/systemd/

创建 frps.service 文件

1
sudo vim /etc/systemd/system/frps.service

写入内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动 frps 的命令,需修改为您的 frps 的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml

[Install]
WantedBy = multi-user.target

使用 systemd 命令管理 frps 服务

1
2
3
4
5
6
7
8
# 启动 frp
sudo systemctl start frps
# 停止 frp
sudo systemctl stop frps
# 重启 frp
sudo systemctl restart frps
# 查看 frp 状态
sudo systemctl status frps

设置 frps 开机自启动

1
sudo systemctl enable frps

客户端方法同上

安装 dnsmasq

安装:apt install dnsmasq

0%