文章使用的是 Debian 12
和CentOS-Stream 8
系统。
注:Debian 12
和CentOS-Stream 8
安装的依赖不同,其他安装的方法是一样的。
本人为新手,如有错误或不足之处,欢迎指正。
准备工作
Debian 12:
先安装一个叫aptitude
的管理软件包工具,这个工具可以对依赖关系的更好的处理能力,就是安装依赖包更方便。
1 | apt-get update && apt-get upgrade |
安装依赖
1 | aptitude install gcc make libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev libaio1 libaio-dev pkg-config libxml2 libxml2-dev sqlite3 libsqlite3-dev libonig-dev libjemalloc-dev build-essential |
CentOS-Stream 8:
1 | dnf update && dnf upgrade |
注意:要先把
epel-release
安装了后,才能安装jemalloc
和jemalloc-devel
安装oniguruma
和oniguruma-devel
1 | wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz |
nginx
创建
nginx
用户1
useradd nginx -M -s /sbin/nologin
下载
nginx
、pcre
、openssl
1
2
3wget https://nginx.org/download/nginx-1.24.0.tar.gz
wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
wget https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1v/openssl-1.1.1v.tar.gz解压
nginx
、pcre
、openssl
并进入目录1
2
3tar -zxvf pcre-8.45.tar.gz
tar -zxvf openssl-1.1.1v.tar.gz
tar -zxvf nginx-1.24.0.tar.gz && cd nginx-1.24.0使用
./configure
配置编译选项1
./configure --prefix=/usr/local/nginx --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_ssl_module --with-stream --with-stream_ssl_preread_module --with-stream_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.1.1v --with-pcre=../pcre-8.45 --with-pcre-jit --with-ld-opt=-ljemalloc
--prefix
:指定安装的目录。--with-http_ssl_module
:启用 HTTP SSL 模块。更多查询
:Nginx 中文文档
编译和编译安装
1
make && make install
配置
nginx
环境变量1
2
3
4
5
6vim ~/.bashrc
export PATH=/usr/local/nginx/sbin:$PATH
# 👆添加到文件的最后一行
source ~/.bashrc # 重载添加 Systemd 配置
1
2vim /etc/systemd/system/nginx.service
# 创建 nginx 服务文件nginx.service 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStartPost=/bin/sleep 0.1
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
TimeoutStartSec=120
[Install]
WantedBy=multi-user.target重载配置并启动
nginx
1
2systemctl daemon-reload
systemctl start nginx.service设置
nginx
开机自启1
systemctl enable nginx.service
mysql
创建
mysql
用户1
useradd mysql -M -s /sbin/nologin
下载
mysql
1
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-linux-glibc2.28-x86_64.tar.xz
解压并重命名
1
2tar -xvf mysql-8.0.35-linux-glibc2.28-x86_64.tar.xz
mv mysql-8.0.35-linux-glibc2.28-x86_64 mysql移动
mysql目录
并在mysql
下创建data
文件夹1
2
3mv mysql /usr/local
cd /usr/local/mysql
mkdir data赋予
mysql
所有权1
2chown -R mysql:mysql /usr/local/mysql && cd bin
# 将目录以下所有权赋予了 mysql 用户和 mysql 组mysql
数据库的初始化1
2./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
# 会在最后一行末位生成随机的密码--initialize
:表示进行数据库的初始化操作,MySQL 会生成系统表数据和密码,并将其存储在数据目录中。--user
:指定用户运行 MySQL。--basedir
:MySQL 的安装根目录。--datadir
:MySQL 的数据库目录。
配置
mysql
环境变量1
2
3
4
5
6vim ~/.bashrc
export PATH=/usr/local/mysql/bin:/usr/local/nginx/sbin:$PATH
# 追加路径
source ~/.bashrc # 重载添加
my.cnf
配置文件这是我的模板
PS:这个文件我找了很久都没有找到,只好自己配置了1
vim /etc/my.cnf
my.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
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[client]
port = 3306 # 客户端连接MySQL服务器的端口
socket = /tmp/mysql.sock # 客户端通过socket连接MySQL服务器的路径
default-character-set = utf8mb4 # 客户端的默认字符集
[mysql]
prompt="MySQL [\d]> " # MySQL命令行提示符的格式
no-auto-rehash # 禁用自动补全功能
[mysqld]
port = 3306 # 服务器监听的端口
socket = /tmp/mysql.sock # 服务器的socket文件路径
default_authentication_plugin = mysql_native_password # 服务器的默认认证插件
basedir = /usr/local/mysql # MySQL的基础目录,通常是MySQL的安装目录
datadir = /usr/local/mysql/data # MySQL的数据目录,用于存储数据库文件
pid-file = /usr/local/mysql/data/mysql.pid # MySQL进程ID文件的路径
user = mysql # 运行MySQL服务器的用户
bind-address = 0.0.0.0 # MySQL服务器绑定的IP地址
server-id = 1 # 服务器ID,用于复制
init-connect = 'SET NAMES utf8mb4' # 连接初始化时执行的命令
character-set-server = utf8mb4 # 服务器的默认字符集
collation-server = utf8mb4_0900_ai_ci # 服务器的默认排序规则
skip-name-resolve # 禁用主机名解析
#skip-networking # 禁用网络连接
back_log = 300 # 服务器在开始拒绝连接之前的最大连接请求数量
max_connections = 321 # 服务器允许的最大并发连接数
max_connect_errors = 6000 # 服务器在开始拒绝来自某个主机的连接之前的最大连接错误数
open_files_limit = 65535 # 服务器可以打开的最大文件数
table_open_cache = 128 # 服务器可以缓存的打开表的数量
max_allowed_packet = 500M # 服务器允许的最大数据包大小
binlog_cache_size = 1M # 二进制日志缓存的大小
max_heap_table_size = 8M # 内存表的最大大小
tmp_table_size = 16M # 临时表的最大大小
read_buffer_size = 2M # 读取缓冲区的大小
read_rnd_buffer_size = 8M # 随机读取缓冲区的大小
sort_buffer_size = 8M # 排序缓冲区的大小
join_buffer_size = 8M # 连接缓冲区的大小
key_buffer_size = 4M # 键缓冲区的大小
thread_cache_size = 8 # 线程缓存的大小
ft_min_word_len = 4 # 全文索引中的最小词长度
log_bin = mysql-bin # 启用二进制日志,并设置日志文件的前缀
binlog_format = mixed # 二进制日志的格式
binlog_expire_logs_seconds = 604800 # 二进制日志的过期时间
log_error = /usr/local/mysql/data/mysql-error.log # 错误日志文件的路径
slow_query_log = 1 # 启用慢查询日志
long_query_time = 1 # 慢查询的阈值
slow_query_log_file = /usr/local/mysql/data/mysql-slow.log # 慢查询日志文件的路径
performance_schema = 0 # 禁用性能模式
explicit_defaults_for_timestamp # 显式设置TIMESTAMP列的默认值
#lower_case_table_names = 1 # 表名和数据库名的大小写敏感性
skip-external-locking # 禁用外部锁定
default_storage_engine = InnoDB # 默认的存储引擎
#default-storage-engine = MyISAM # 默认的存储引擎
innodb_file_per_table = 1 # 为每个InnoDB表使用单独的表空间文件
innodb_open_files = 500 # InnoDB可以打开的最大文件数
innodb_buffer_pool_size = 64M # InnoDB缓冲池的大小
innodb_write_io_threads = 4 # InnoDB的写入I/O线程数
innodb_read_io_threads = 4 # InnoDB的读取I/O线程数
innodb_thread_concurrency = 0 # InnoDB的并发线程数
innodb_purge_threads = 1 # InnoDB的清理线程数
innodb_flush_log_at_trx_commit = 2 # InnoDB事务提交时的日志刷新策略
innodb_log_buffer_size = 2M # InnoDB日志缓冲区的大小
innodb_log_file_size = 32M # InnoDB日志文件的大小
innodb_log_files_in_group = 3 # InnoDB日志文件组中的文件数
innodb_max_dirty_pages_pct = 90 # InnoDB缓冲池中脏页的最大比例
innodb_lock_wait_timeout = 120 # InnoDB锁等待的超时时间
bulk_insert_buffer_size = 8M # 批量插入缓冲区的大小
myisam_sort_buffer_size = 8M # MyISAM排序缓冲区的大小
myisam_max_sort_file_size = 10G # MyISAM排序文件的最大大小
interactive_timeout = 28800 # 交互式连接的超时时间
wait_timeout = 28800 # 非交互式连接的超时时间
[mysqldump]
quick # 使用快速导出模式
max_allowed_packet = 500M # mysqldump允许的最大数据包大小
[myisamchk]
key_buffer_size = 8M # myisamchk的键缓冲区大小
sort_buffer_size = 8M # myisamchk的排序缓冲区大小
read_buffer = 4M # myisamchk的读取缓冲区大小
write_buffer = 4M # myisamchk的写入缓冲区大小添加系统服务
这里提供两种方法。
init 脚本
:
复制脚本并赋予权限
1
2cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d # 复制脚本
chmod a+x /etc/init.d/mysql.server # 赋予权限重载配置并启动
mysql
1
2
3
4
5
6
7systemctl daemon-reload
service mysql.server start # 启动
# 其他常用命令
service mysql.server stop # 停止
service mysql.server restart # 重启
service mysql.server status # 查看状态配置
mysql
开机自启1
2
3
4update-rc.d mysql.server defaults
# 其他常用命令
update-rc.d mysql.server remove # 这是禁止开机自启
Systemd 单元文件
:
添加服务文件
1
vim /etc/systemd/system/mysqld.service
mysqld.service 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21[Unit]
Description=MySQL Server
After=network-online.target
Wants=network-online.target
After=syslog.target
[Service]
User=mysql
Group=mysql
Type=forking
TimeoutSec=0
PermissionsStartOnly=true
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --daemonize
LimitNOFILE=5000
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=1
PrivateTmp=false
[Install]
WantedBy=multi-user.target--defaults-file
:指定配置文件。--daemonize
:守护进程(后台运行)。
注意:确保User
和Group
有指定的用户和用户组。
重载配置并启动
mysql
1
2
3
4
5
6
7systemctl daemon-reload # 重新载入配置
systemctl restart mysqld.service # 启动mysql
# 其他命令
systemctl stop mysqld.service # 停止
systemctl restart mysqld.service # 重启
systemctl status mysqld.service # 查看状态配置
mysql
开机自启1
2systemctl enable mysqld.service # 开启自启
systemctl disable mysqld.service # 关闭自启
修改初始化
mysql
密码1
mysql -u root -p # 输入初始化生成的密码
更改密码
修改密码是必须的。
1
alter user 'root'@'localhost' identified by "new-pwd";
new-pwd
替换为你想要使用的新密码。重载
1
flush privileges; # 重新加载缓存,使密码生效
按
Ctrl+D
退出
php
下载
php
1
wget https://www.php.net/distributions/php-8.2.12.tar.gz
解压
php
1
tar -zxvf php-8.2.12.tar.gz && cd php-8.2.12
使用
./configure
配置编译选项1
2./configure --prefix=/usr/local/php --enable-mbstring --enable-fpm
# 可能会提示缺少依赖包,它缺少什么就安装什么。--prefix
:指定安装的目录。--enable-mbstring
:启用 mbstring 模块。--enable-fpm
:启用 PHP-FPM 模块。
显示以下就 ok 了
1
2
3
4
5
6
7
8
9
10+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+
Thank you for using PHP.编译和编译安装
1
make && make install
复制配置文件和脚本文件
1
2
3
4
5
6
7#当前路径在 ~/lnmp/php-8.2.12 解压目录里
cp php.ini-development /usr/local/php/lib/php.ini # 配置文件
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm # 脚本文件
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf # php-fpm.conf 配置文件
cp php-fpm.d/www.conf.default php-fpm.d/www.conf # www.conf 配置文件修改
www.conf
配置文件CentOS-Stream 8
跳过这一步,因为用户和用户组是一样的。1
2
3
4
5
6id nobody # 查看是否有 nobody用户
# Debian 12:
╭─root at Debian in /usr/local/php/etc
╰─○ id nobody
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)1
vim /usr/local/php/etc/php-fpm.d/www.conf
找到
user
和group
修改为以下用户和用户组。1
2user = nobody
group = nogroup添加系统服务
init 脚本
:
脚本赋权并重载
1
2chmod 755 /etc/init.d/php-fpm # 赋予权限
systemctl daemon-reload启动并自启
1
2service php-fpm start
update-rc.d php-fpm defaults
Systemd 单元文件
:
1
vim /etc/systemd/system/php-fpm.service
php-fpm.service 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[Unit]
Description=The PHP FastCGI Process Manager
Documentation=http://php.net/docs.php
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
LimitNOFILE=1000000
LimitNPROC=1000000
LimitCORE=1000000
[Install]
WantedBy=multi-user.target重装启动并自启
1
2
3systemctl daemon-reload
systemctl start php-fpm.service
systemctl enable php-fpm.service