從零開始安裝¶
服務器系統選擇Debian12
Nginx¶
安装依赖,打开终端并安装必要的依赖:
apt update && apt install -y build-essential libjemalloc-dev zlib1g-dev libpcre3 libpcre3-dev libssl-dev tar unzip git wget screen curl rsync apache2-utils
# Debian13
apt update && apt install -y build-essential libjemalloc-dev zlib1g-dev libpcre2-dev libssl-dev tar unzip git wget screen curl rsync apache2-utils
#如果网路出现中断,可以执行命令`screen -R develop`重新连接安装窗口
screen -S dev
下载 Nginx 和必要的库: 下载 Nginx 的源码,apt安裝的openssl、PCRE以及 quiche(用于 HTTP/3 和 QUIC 支持):
# 替换为最新版本
wget http://nginx.org/download/nginx-1.29.3.tar.gz && tar -zxvf nginx-1.29.3.tar.gz && cd nginx-1.29.3
编译 Nginx: 使用提供的 configure 参数编译 Nginx,并包含 QUIC 和 HTTP/3 的支持:
# 添加组
groupadd www
# 添加用户
useradd -g www -s /sbin/nologin www
#查看新增用户
id www
./configure --prefix=/usr/local/nginx --user=www --group=www --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-pcre --with-pcre-jit --with-ld-opt=-ljemalloc --with-http_v3_module
make -j $(nproc) && make install
配置环境变量
nano ~/.bashrc
# 在文件末尾添加以下行,将Nginx的可执行文件路径添加到PATH环境变量中。确保替换/usr/local/nginx/sbin为您Nginx的实际可执行文件路径:
export PATH=$PATH:/usr/local/nginx/sbin
# 保存并关闭文件。
# 更新~/.bashrc文件,使更改生效:
source ~/.bashrc
# 验证
nginx -v
配置 Nginx: 编辑 /usr/local/nginx/conf/nginx.conf 文件,添加或修改配置以启用 HTTP/3 和 QUIC。
设置开机自启
创建 Systemd 服务文件:
使用您喜欢的文本编辑器创建一个名为 nginx.service 的文件。您可以使用 nano /etc/systemd/system/nginx.service 命令来创建这个文件。
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注意:原先nginx的PIDFile目錄是/var/run/,現在已經調整為/run/
重新加载 Systemd 配置: 保存文件后,执行以下命令使 Systemd 重新加载配置文件,识别新的服务:
systemctl daemon-reload
# 启用 Nginx 服务:
systemctl enable nginx
# 启动 Nginx 服务:
systemctl start nginx
# 检查服务状态:
systemctl status nginx
# 重啓 Nginx 服务:
systemctl restart nginx
nginx日志每日备份,并清除旧日志¶
tee /etc/logrotate.d/nginx > /dev/null <<EOF
/data/wwwlogs/*nginx.log {
daily
rotate 5
missingok
dateext
compress
notifempty
sharedscripts
postrotate
[ -e /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
endscript
}
EOF
nano /data/wwwlogs/delete_old_logs.sh
#!/bin/bash
# 定義要清理的目錄
LOG_DIR="/data/wwwlogs"
# 使用 find 命令查找符合條件的文件並刪除
find "$LOG_DIR" -name "*_nginx.log-*" -type f -mtime +7 -exec rm -f {} \;
# 打印清理完成的訊息
echo "已刪除 7 天之前的日誌文件: $(date)"
遇到的问题¶
通过
systemctl status nginx看到systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
这个错误通常是由于systemd在Nginx启动时尝试读取pid文件,但Nginx尚未完全启动而导致的。解决这个问题的方法是创建一个新的目录并添加一个配置文件。以下是解决这个问题的步骤:
# 创建一个新目录
mkdir /etc/systemd/system/nginx.service.d
# 使用nano文本编辑器创建并添加内容到文件
nano /etc/systemd/system/nginx.service.d/override.conf
在新打开的文件中添加以下内容:
[Service]
ExecStartPost=/bin/sleep 0.1
保存文件后,运行以下命令刷新并启动NGINX服务:
systemctl daemon-reload
systemctl restart nginx.service
PHP¶
安装必要的依赖项
apt update && apt install -y build-essential autoconf bison re2c libxml2-dev libldap2-dev libedit-dev libcurl4-openssl-dev libpng-dev libonig-dev libsqlite3-dev libssl-dev libpspell-dev aspell aspell-en libzip-dev libicu-dev libreadline-dev libfreetype6-dev libgmp-dev libgd-dev libexif-dev libgettextpo-dev libffi-dev libpq-dev libmemcached-dev libmagickwand-dev libxslt-dev libzip-dev
下载PHP源代码
wget https://www.php.net/distributions/php-8.3.28.tar.gz && tar -xzf php-8.3.28.tar.gz && cd php-8.3.28
配置PHP
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-config-file-scan-dir=/usr/local/php/etc/php.d \
--enable-mbstring \
--enable-bcmath \
--enable-pcntl \
--enable-ftp \
--enable-exif \
--enable-calendar \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-curl \
--with-iconv \
--with-gmp \
--enable-gd \
--with-webp \
--with-jpeg \
--with-xpm \
--with-freetype \
--with-openssl \
--with-pdo-mysql \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-gettext=/usr \
--with-xsl \
--enable-intl \
--with-ldap \
--with-ldap-sasl \
--with-mysql-sock=/var/run/mysqld/mysqld.sock \
--with-libdir=/lib/x86_64-linux-gnu \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-libedit \
--with-readline \
--enable-sockets \
--enable-soap \
--enable-opcache \
--with-sqlite3 \
--with-pdo-sqlite \
--with-zip \
--with-zlib
编译
# make -j 1 && make install
make -j $(nproc) && make install
安装其他组件
# 安装PECL
wget https://pear.php.net/go-pear.phar
php go-pear.phar
#升级
pecl channel-update pecl.php.net
pecl list-upgrades
pecl upgrade 扩展名
pecl upgrade-all
#安装 ImageMagick:首先安装 ImageMagick 库。这可以通过以下命令完成:
apt-get install imagemagick -y
#安装 ImageMagick 的 PHP 扩展依赖:您需要安装 PHP 的 ImageMagick 扩展(即 imagick)的依赖项:
#apt-get install php-imagick libmagickwand-dev
#使用 PECL 安装 imagick 扩展:
pecl install imagick
#配置 PHP 以使用 imagick 扩展:安装完成后,在您的 php.ini 文件中添加以下行以启用扩展:
extension=imagick.so
#安装 Memcached 服务器:首先,安装 Memcached:
apt-get install memcached -y
#安装 Memcached 的 PHP 扩展依赖:然后安装 PHP 的 Memcached 扩展的依赖项:
#apt-get install php-memcached libmemcached-dev
#使用 PECL 安装 Memcached 扩展:
pecl install memcached
#配置 PHP 以使用 Memcached 扩展:在 php.ini 文件中添加以下行来启用 Memcached 扩展:
extension=memcached.so
apt install redis-server -y
pecl install redis
pecl install zip
pecl install imagick
pecl install fileinfo
配置环境变量
nano ~/.bashrc
# 在文件末尾添加以下行
export PATH=$PATH:/usr/local/php/bin
# 保存并关闭文件。
# 更新~/.bashrc文件,使更改生效:
source ~/.bashrc
# 验证
php -v
nano /etc/systemd/system/php-fpm.service
# php-fpm.service内容
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/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
[Install]
WantedBy=multi-user.target
# 配置php-fpm.service
systemctl daemon-reload
systemctl start php-fpm.service
systemctl stop php-fpm.service
systemctl restart php-fpm.service
systemctl enable php-fpm.service
systemctl status php-fpm.service
php-fpm[16492]: [22-Jun-2024 13:41:46] NOTICE: PHP message: PHP Warning: PHP Startup: Invalid library (maybe not a PHP library) 'fileinfo.so' in Unknown on line 0 make clean重新启动 phpize && ./configure && make && make install
连接mysql数据库¶
需要修改php.ini
[Pdo_mysql]
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
pdo_mysql.default_socket=/tmp/mysql.sock
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
; https://php.net/mysqli.default-socket
mysqli.default_socket = /tmp/mysql.sock
phpMyAdmin¶
下载安装¶
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.3/phpMyAdmin-5.2.3-all-languages.zip
unzip phpMyAdmin-5.2.3-all-languages.zip && mv phpMyAdmin-5.2.3-all-languages phpMyAdmin && cd phpMyAdmin
mkdir -p /xxx/phpMyAdmin/tmp/
chmod -R 777 /xxx/phpMyAdmin/tmp/