活动公告

系统通知
06-22 18:10
系统通知
06-14 00:00
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

使用轻量级Alpine Linux搭建高效稳定服务器的完全指南 从基础配置到安全优化一步步教你打造高性能服务器环境

SunJu_FaceMall

3万

主题

3079

科技点

3万

积分

执行版主

碾压王

积分
32876

塔罗立华奏

执行版主 发表于 2025-9-22 19:50:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. Alpine Linux简介

Alpine Linux是一个基于musl libc和BusyBox的轻量级Linux发行版,以其安全性、简洁性和高效性而闻名。与传统的Linux发行版相比,Alpine Linux具有以下显著优势:

• 极小的体积:基础Docker镜像仅约5MB,完整安装也只需几百MB空间
• 高安全性:默认使用musl libc而非glibc,并采用PaX和grsecurity补丁增强安全性
• 简单高效:包管理系统简单,启动速度快,资源占用少
• 适合容器化:是Docker官方推荐的默认基础镜像之一

这些特性使Alpine Linux成为构建高效稳定服务器的理想选择,特别是在资源受限环境或需要高安全性的场景中。

2. 安装Alpine Linux

2.1 准备工作

在开始安装之前,需要准备以下内容:

• 一台符合最低硬件要求的服务器(建议至少512MB RAM,2GB存储空间)
• Alpine Linux的ISO镜像文件(可从官方网站下载)
• 可通过网络访问的终端或控制台

2.2 安装步骤

1. 下载并创建启动介质

从Alpine Linux官网下载适合您服务器架构的ISO镜像(标准版或扩展版)。使用以下命令创建USB启动设备(以Linux系统为例):
  1. # 检查USB设备名称(如/dev/sdb)
  2.    lsblk
  3.    
  4.    # 卸载USB设备(如果已挂载)
  5.    sudo umount /dev/sdb*
  6.    
  7.    # 将ISO写入USB设备
  8.    sudo dd if=alpine-standard-3.18.0-x86_64.iso of=/dev/sdb bs=4M status=progress
复制代码

1. 启动安装程序

将USB设备插入服务器,从USB启动。在启动菜单中选择”Boot Alpine Linux”进入临时系统。

1. 运行安装脚本

登录后(默认用户root,无密码),运行安装向导:
  1. setup-alpine
复制代码

1. 回答安装问题

安装程序会询问一系列问题,下面是典型配置:
  1. Keyboard layout: us
  2.    Hostname: alpine-server
  3.    Network interface: eth0
  4.    IP address: dhcp
  5.    NTP client: chrony
  6.    DNS domain: (留空)
  7.    DNS nameservers: 8.8.8.8 8.8.4.4
  8.    Root password: (设置安全的root密码)
  9.    Timezone: UTC
  10.    Proxy URL: (留空)
  11.    Mirror URL: http://dl-cdn.alpinelinux.org/alpine/
  12.    SSH server: openssh
  13.    Disk: sda
  14.    How to use disk: sys
复制代码

注意:选择”sys”模式会将Alpine Linux安装到磁盘并使其可启动,而不是”数据模式”(data)或”磁盘模式”(disk)。

1. 完成安装

安装完成后,重启系统:
  1. reboot
复制代码

系统将从硬盘启动,您可以使用设置的root密码登录。

3. 基础系统配置

3.1 更新系统

安装完成后,首先更新系统到最新版本:
  1. # 更新可用包列表
  2. apk update
  3. # 升级已安装的包
  4. apk upgrade
  5. # 如果有内核更新,需要重启系统
  6. reboot
复制代码

3.2 添加用户

出于安全考虑,不建议直接使用root账户进行日常操作。创建一个新用户并授予sudo权限:
  1. # 创建新用户(例如:admin)
  2. adduser admin
  3. # 安装sudo包
  4. apk add sudo
  5. # 配置sudoers文件,允许admin用户使用sudo
  6. echo "admin ALL=(ALL) ALL" >> /etc/sudoers
复制代码

3.3 配置网络

Alpine Linux使用/etc/network/interfaces文件来配置网络接口。编辑此文件以设置静态IP地址(如果之前选择了DHCP,现在可以更改为静态IP):
  1. # 编辑网络配置文件
  2. vi /etc/network/interfaces
复制代码

添加以下内容(根据您的网络环境调整):
  1. auto lo
  2. iface lo inet loopback
  3. auto eth0
  4. iface eth0 inet static
  5.     address 192.168.1.100
  6.     netmask 255.255.255.0
  7.     gateway 192.168.1.1
复制代码

重启网络服务以应用更改:
  1. # 重启网络服务
  2. /etc/init.d/networking restart
  3. # 或者重启整个系统
  4. reboot
复制代码

3.4 配置SSH服务

为了远程管理服务器,需要配置SSH服务:
  1. # 安装OpenSSH服务器(如果安装时未选择)
  2. apk add openssh
  3. # 启用并启动SSH服务
  4. rc-update add sshd
  5. service sshd start
复制代码

为了增强SSH安全性,编辑SSH配置文件:
  1. vi /etc/ssh/sshd_config
复制代码

建议进行以下修改:
  1. # 禁用root登录
  2. PermitRootLogin no
  3. # 仅允许密钥认证
  4. PasswordAuthentication no
  5. # 更改默认端口
  6. Port 2222
  7. # 仅允许特定用户登录
  8. AllowUsers admin
复制代码

重启SSH服务以应用更改:
  1. service sshd restart
复制代码

3.5 设置防火墙

Alpine Linux使用iptables作为防火墙。安装并配置基本防火墙规则:
  1. # 安装iptables
  2. apk add iptables
  3. # 创建基本防火墙规则
  4. iptables -F
  5. iptables -P INPUT DROP
  6. iptables -P FORWARD DROP
  7. iptables -P OUTPUT ACCEPT
  8. # 允许本地回环
  9. iptables -A INPUT -i lo -j ACCEPT
  10. # 允许已建立的连接
  11. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  12. # 允许SSH连接(根据之前设置的端口)
  13. iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
  14. # 允许HTTP和HTTPS(如果需要)
  15. iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  16. iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  17. # 保存规则
  18. iptables-save > /etc/iptables/rules.v4
  19. # 创建启动脚本
  20. echo '#!/bin/sh' > /etc/local.d/iptables.start
  21. echo 'iptables-restore < /etc/iptables/rules.v4' >> /etc/local.d/iptables.start
  22. chmod +x /etc/local.d/iptables.start
  23. # 添加到启动项
  24. rc-update add local
复制代码

4. 服务器环境搭建

4.1 安装Web服务器

Nginx是一个高性能的Web服务器,适合在Alpine Linux上运行:
  1. # 安装Nginx
  2. apk add nginx
  3. # 创建网站目录
  4. mkdir -p /var/www/html
  5. # 创建简单的测试页面
  6. echo "<h1>Welcome to Alpine Linux Nginx Server</h1>" > /var/www/html/index.html
  7. # 配置Nginx
  8. vi /etc/nginx/nginx.conf
复制代码

基本的Nginx配置如下:
  1. user nginx;
  2. worker_processes auto;
  3. error_log /var/log/nginx/error.log;
  4. pid /var/run/nginx.pid;
  5. events {
  6.     worker_connections 1024;
  7. }
  8. http {
  9.     include /etc/nginx/mime.types;
  10.     default_type application/octet-stream;
  11.     log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12.                     '$status $body_bytes_sent "$http_referer" '
  13.                     '"$http_user_agent" "$http_x_forwarded_for"';
  14.     access_log /var/log/nginx/access.log main;
  15.     sendfile on;
  16.     tcp_nopush on;
  17.     tcp_nodelay on;
  18.     keepalive_timeout 65;
  19.     types_hash_max_size 2048;
  20.     server {
  21.         listen 80;
  22.         server_name localhost;
  23.         root /var/www/html;
  24.         index index.html index.htm;
  25.         location / {
  26.             try_files $uri $uri/ =404;
  27.         }
  28.         error_page 500 502 503 504 /50x.html;
  29.         location = /50x.html {
  30.             root /var/www/html;
  31.         }
  32.     }
  33. }
复制代码

启动Nginx并设置为开机自启:
  1. # 启动Nginx
  2. service nginx start
  3. # 设置为开机自启
  4. rc-update add nginx default
复制代码

如果您更喜欢使用Apache:
  1. # 安装Apache
  2. apk add apache2
  3. # 创建网站目录
  4. mkdir -p /var/www/localhost/htdocs
  5. # 创建简单的测试页面
  6. echo "<h1>Welcome to Alpine Linux Apache Server</h1>" > /var/www/localhost/htdocs/index.html
  7. # 启动Apache并设置为开机自启
  8. service apache2 start
  9. rc-update add apache2 default
复制代码

4.2 安装数据库服务器
  1. # 安装MariaDB
  2. apk add mariadb mariadb-client
  3. # 初始化数据库
  4. mysql_install_db --user=mysql --datadir=/var/lib/mysql
  5. # 启动MariaDB
  6. service mariadb start
  7. # 安全设置
  8. mysql_secure_installation
  9. # 设置为开机自启
  10. rc-update add mariadb default
复制代码
  1. # 安装PostgreSQL
  2. apk add postgresql postgresql-contrib
  3. # 初始化数据库
  4. /etc/init.d/postgresql setup
  5. # 启动PostgreSQL
  6. service postgresql start
  7. # 设置为开机自启
  8. rc-update add postgresql default
复制代码

4.3 安装PHP
  1. # 安装PHP及常用扩展
  2. apk add php8 php8-fpm php8-mysqli php8-pgsql php8-gd php8-curl php8-session php8-opcache
  3. # 配置PHP-FPM
  4. vi /etc/php8/php-fpm.d/www.conf
复制代码

修改以下配置:
  1. listen = /run/php/php8-fpm.sock
  2. listen.owner = nginx
  3. listen.group = nginx
  4. listen.mode = 0660
  5. user = nginx
  6. group = nginx
复制代码

启动PHP-FPM并设置为开机自启:
  1. # 启动PHP-FPM
  2. service php-fpm8 start
  3. # 设置为开机自启
  4. rc-update add php-fpm8 default
复制代码

4.4 配置Nginx支持PHP

编辑Nginx配置文件以支持PHP:
  1. vi /etc/nginx/nginx.conf
复制代码

在server块中添加以下配置:
  1. location ~ \.php$ {
  2.     fastcgi_pass unix:/run/php/php8-fpm.sock;
  3.     fastcgi_index index.php;
  4.     include fastcgi.conf;
  5. }
复制代码

创建PHP测试文件:
  1. echo "<?php phpinfo(); ?>" > /var/www/html/info.php
复制代码

重启Nginx以应用更改:
  1. service nginx restart
复制代码

5. 性能优化

5.1 系统级优化

编辑/etc/sysctl.conf文件以优化内核参数:
  1. vi /etc/sysctl.conf
复制代码

添加以下内容:
  1. # 增加文件描述符限制
  2. fs.file-max = 100000
  3. # 网络优化
  4. net.core.rmem_max = 16777216
  5. net.core.wmem_max = 16777216
  6. net.ipv4.tcp_rmem = 4096 87380 16777216
  7. net.ipv4.tcp_wmem = 4096 65536 16777216
  8. net.ipv4.tcp_fin_timeout = 30
  9. net.ipv4.tcp_keepalive_time = 1200
  10. net.ipv4.tcp_max_syn_backlog = 8192
  11. net.ipv4.tcp_max_tw_buckets = 5000
  12. net.ipv4.tcp_tw_reuse = 1
  13. net.ipv4.tcp_tw_recycle = 1
  14. net.ipv4.ip_local_port_range = 1024 65000
  15. # 虚拟内存优化
  16. vm.swappiness = 10
  17. vm.dirty_ratio = 60
  18. vm.dirty_background_ratio = 2
复制代码

应用更改:
  1. sysctl -p
复制代码

如果使用ext4文件系统,可以在/etc/fstab中添加挂载选项以优化性能:
  1. vi /etc/fstab
复制代码

修改根分区的挂载选项,添加noatime,nodiratime,data=writeback:
  1. /dev/sda1 / ext4 defaults,noatime,nodiratime,data=writeback 0 1
复制代码

5.2 服务优化

编辑Nginx配置文件进行性能优化:
  1. vi /etc/nginx/nginx.conf
复制代码

在http块中添加以下优化配置:
  1. # worker进程数,通常设置为CPU核心数
  2. worker_processes auto;
  3. # 每个worker进程的最大连接数
  4. worker_connections 2048;
  5. # 开启gzip压缩
  6. gzip on;
  7. gzip_vary on;
  8. gzip_min_length 1024;
  9. gzip_comp_level 6;
  10. gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
  11. # 开启高效文件传输模式
  12. sendfile on;
  13. tcp_nopush on;
  14. tcp_nodelay on;
  15. # 保持连接超时时间
  16. keepalive_timeout 30;
  17. # 客户端请求头缓冲区大小
  18. client_header_buffer_size 4k;
  19. large_client_header_buffers 8 8k;
  20. # 开启文件缓存
  21. open_file_cache max=2048 inactive=20s;
  22. open_file_cache_valid 30s;
  23. open_file_cache_min_uses 2;
  24. open_file_cache_errors on;
复制代码

编辑PHP-FPM配置文件:
  1. vi /etc/php8/php-fpm.d/www.conf
复制代码

进行以下优化:
  1. # 进程管理器类型
  2. pm = dynamic
  3. # 最大子进程数
  4. pm.max_children = 50
  5. # 启动时创建的子进程数
  6. pm.start_servers = 5
  7. # 空闲时的最小子进程数
  8. pm.min_spare_servers = 5
  9. # 空闲时的最大子进程数
  10. pm.max_spare_servers = 35
  11. # 每个进程的最大请求数
  12. pm.max_requests = 500
  13. # PHP内存限制
  14. php_admin_value[memory_limit] = 128M
复制代码

对于MariaDB/MySQL,编辑配置文件:
  1. vi /etc/my.cnf.d/mariadb-server.cnf
复制代码

在[mysqld]部分添加以下优化配置:
  1. # 缓冲池大小,通常设置为系统内存的50-70%
  2. innodb_buffer_pool_size = 1G
  3. # 日志缓冲区大小
  4. innodb_log_buffer_size = 16M
  5. # 日志文件大小
  6. innodb_log_file_size = 256M
  7. # 刷新日志策略
  8. innodb_flush_log_at_trx_commit = 2
  9. # 查询缓存
  10. query_cache_type = 1
  11. query_cache_size = 128M
  12. query_cache_limit = 2M
  13. # 连接数
  14. max_connections = 200
  15. # 表缓存
  16. table_open_cache = 2000
  17. # 临时表
  18. tmp_table_size = 64M
  19. max_heap_table_size = 64M
  20. # 线程缓存
  21. thread_cache_size = 8
  22. # 慢查询日志
  23. slow_query_log = 1
  24. slow_query_log_file = /var/log/mysql/slow.log
  25. long_query_time = 2
复制代码

对于PostgreSQL,编辑配置文件:
  1. vi /etc/postgresql/postgresql.conf
复制代码

进行以下优化:
  1. # 连接数
  2. max_connections = 100
  3. # 共享缓冲区,通常设置为系统内存的25%
  4. shared_buffers = 512MB
  5. # 有效缓存大小,通常设置为系统内存的50%
  6. effective_cache_size = 1GB
  7. # 维护工作内存
  8. maintenance_work_mem = 128MB
  9. # 工作内存
  10. work_mem = 16MB
  11. # 检查点设置
  12. checkpoint_segments = 32
  13. checkpoint_completion_target = 0.9
  14. # 随机页面成本
  15. random_page_cost = 2.0
  16. # 统计信息收集
  17. stats_target = 100
  18. # 日志设置
  19. log_destination = 'stderr'
  20. logging_collector = on
  21. log_directory = 'pg_log'
  22. log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
  23. log_statement = 'mod'
  24. log_min_duration_statement = 1000
复制代码

5.3 使用缓存服务
  1. # 安装Redis
  2. apk add redis
  3. # 配置Redis
  4. vi /etc/redis.conf
复制代码

进行以下优化:
  1. # 绑定地址
  2. bind 127.0.0.1
  3. # 端口
  4. port 6379
  5. # 最大内存使用量
  6. maxmemory 256mb
  7. # 内存淘汰策略
  8. maxmemory-policy allkeys-lru
  9. # 持久化
  10. save 900 1
  11. save 300 10
  12. save 60 10000
  13. # 启用AOF持久化
  14. appendonly yes
  15. appendfsync everysec
复制代码

启动Redis并设置为开机自启:
  1. # 启动Redis
  2. service redis start
  3. # 设置为开机自启
  4. rc-update add redis default
复制代码
  1. # 安装Memcached
  2. apk add memcached
  3. # 配置Memcached
  4. vi /etc/conf.d/memcached
复制代码

修改以下配置:
  1. MEMCACHED_OPTS="-m 256 -c 1024 -l 127.0.0.1"
复制代码

启动Memcached并设置为开机自启:
  1. # 启动Memcached
  2. service memcached start
  3. # 设置为开机自启
  4. rc-update add memcached default
复制代码

6. 安全优化

6.1 系统安全加固

除了之前的基本SSH配置外,还可以进行以下安全增强:
  1. # 编辑SSH配置文件
  2. vi /etc/ssh/sshd_config
复制代码

添加或修改以下配置:
  1. # 禁用空密码登录
  2. PermitEmptyPasswords no
  3. # 限制最大认证尝试次数
  4. MaxAuthTries 3
  5. # 禁用X11转发
  6. X11Forwarding no
  7. # 设置空闲超时时间
  8. ClientAliveInterval 300
  9. ClientAliveCountMax 2
  10. # 仅允许特定协议
  11. Protocol 2
  12. # 使用特定加密算法
  13. Ciphers chacha20-poly1305@openssl.com,aes256-gcm@openssl.com,aes128-gcm@openssl.com,aes256-ctr,aes192-ctr,aes128-ctr
  14. MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
  15. KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
  16. # 使用特定密钥类型
  17. HostKey /etc/ssh/ssh_host_ed25519_key
  18. HostKey /etc/ssh/ssh_host_rsa_key
复制代码

重启SSH服务以应用更改:
  1. service sshd restart
复制代码
  1. # 安装fail2ban
  2. apk add fail2ban
  3. # 创建配置文件
  4. cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  5. # 编辑配置文件
  6. vi /etc/fail2ban/jail.local
复制代码

配置SSH保护:
  1. [sshd]
  2. enabled = true
  3. port = 2222
  4. filter = sshd
  5. logpath = /var/log/messages
  6. maxretry = 3
  7. bantime = 3600
  8. findtime = 600
复制代码

启动fail2ban并设置为开机自启:
  1. # 启动fail2ban
  2. service fail2ban start
  3. # 设置为开机自启
  4. rc-update add fail2ban default
复制代码

6.2 网络安全

除了基本的防火墙规则外,还可以添加更严格的规则:
  1. # 创建防火墙脚本
  2. vi /etc/local.d/firewall.start
复制代码

添加以下内容:
  1. #!/bin/sh
  2. # 清除现有规则
  3. iptables -F
  4. iptables -X
  5. iptables -t nat -F
  6. iptables -t nat -X
  7. iptables -t mangle -F
  8. iptables -t mangle -X
  9. # 设置默认策略
  10. iptables -P INPUT DROP
  11. iptables -P FORWARD DROP
  12. iptables -P OUTPUT ACCEPT
  13. # 允许本地回环
  14. iptables -A INPUT -i lo -j ACCEPT
  15. # 允许已建立的连接
  16. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  17. # 允许ICMP(有限制)
  18. iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 5 -j ACCEPT
  19. # 允许SSH连接
  20. iptables -A INPUT -p tcp --dport 2222 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  21. # 允许HTTP和HTTPS
  22. iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  23. iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
  24. # 防止DDoS攻击
  25. iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
  26. # 防止端口扫描
  27. iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
  28. iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
  29. iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
  30. iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
  31. iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
  32. iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
  33. # 防止Ping洪水攻击
  34. iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
  35. iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
  36. # 保存规则
  37. iptables-save > /etc/iptables/rules.v4
复制代码

使脚本可执行:
  1. chmod +x /etc/local.d/firewall.start
复制代码

运行脚本:
  1. /etc/local.d/firewall.start
复制代码

TCP Wrappers提供了一层额外的安全保护,通过/etc/hosts.allow和/etc/hosts.deny文件控制对网络服务的访问:
  1. # 编辑hosts.allow
  2. vi /etc/hosts.allow
复制代码

添加以下内容:
  1. # 允许特定IP访问SSH
  2. sshd: 192.168.1.0/24, 10.0.0.1
  3. # 允许特定IP访问所有服务
  4. ALL: 192.168.1.100
复制代码
  1. # 编辑hosts.deny
  2. vi /etc/hosts.deny
复制代码

添加以下内容:
  1. # 拒绝所有其他访问
  2. ALL: ALL
复制代码

6.3 应用安全

编辑Nginx配置文件以增强安全性:
  1. vi /etc/nginx/nginx.conf
复制代码

在http块中添加以下安全配置:
  1. # 隐藏Nginx版本
  2. server_tokens off;
  3. # 添加安全头
  4. add_header X-Frame-Options "SAMEORIGIN" always;
  5. add_header X-Content-Type-Options "nosniff" always;
  6. add_header X-XSS-Protection "1; mode=block" always;
  7. add_header Referrer-Policy "strict-origin-when-cross-origin" always;
  8. add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; img-src 'self' data: https:; style-src 'self' 'unsafe-inline' https:; font-src 'self' data: https:" always;
  9. # SSL/TLS优化
  10. ssl_protocols TLSv1.2 TLSv1.3;
  11. ssl_prefer_server_ciphers on;
  12. ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
  13. ssl_session_timeout 1d;
  14. ssl_session_cache shared:SSL:50m;
  15. ssl_session_tickets off;
  16. ssl_stapling on;
  17. ssl_stapling_verify on;
  18. # 限制请求大小
  19. client_max_body_size 1M;
  20. # 禁止访问隐藏文件
  21. location ~ /\. {
  22.     deny all;
  23.     access_log off;
  24.     log_not_found off;
  25. }
  26. # 禁止访问备份文件
  27. location ~ ~$ {
  28.     deny all;
  29.     access_log off;
  30.     log_not_found off;
  31. }
  32. # 禁止访问特定文件类型
  33. location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ {
  34.     deny all;
  35.     access_log off;
  36.     log_not_found off;
  37. }
复制代码

编辑PHP配置文件以增强安全性:
  1. vi /etc/php8/php.ini
复制代码

进行以下安全配置:
  1. # 禁用危险函数
  2. disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
  3. # 隐藏PHP版本
  4. expose_php = Off
  5. # 限制文件上传
  6. file_uploads = On
  7. upload_tmp_dir = /var/tmp
  8. upload_max_filesize = 2M
  9. max_file_uploads = 20
  10. # 限制内存使用
  11. memory_limit = 128M
  12. # 限制执行时间
  13. max_execution_time = 30
  14. max_input_time = 60
  15. # 会话安全
  16. session.cookie_httponly = 1
  17. session.cookie_secure = 1
  18. session.use_only_cookies = 1
  19. session.cookie_samesite = Strict
  20. # 错误报告
  21. display_errors = Off
  22. log_errors = On
  23. error_log = /var/log/php/error.log
  24. # 全局变量
  25. register_globals = Off
  26. # SQL安全
  27. magic_quotes_gpc = Off
  28. # 允许访问URL文件
  29. allow_url_fopen = Off
  30. allow_url_include = Off
  31. # 启用OPcache
  32. opcache.enable=1
  33. opcache.memory_consumption=128
  34. opcache.interned_strings_buffer=8
  35. opcache.max_accelerated_files=4000
  36. opcache.revalidate_freq=60
  37. opcache.fast_shutdown=1
  38. opcache.enable_file_override=0
  39. opcache.validate_timestamps=0
复制代码

创建PHP错误日志目录:
  1. mkdir -p /var/log/php
  2. touch /var/log/php/error.log
  3. chown nginx:nginx /var/log/php/error.log
复制代码

对于MariaDB/MySQL,执行以下安全操作:
  1. -- 删除匿名用户
  2. DELETE FROM mysql.user WHERE User='';
  3. -- 禁止root远程登录
  4. DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
  5. -- 删除测试数据库
  6. DROP DATABASE IF EXISTS test;
  7. DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
  8. -- 刷新权限
  9. FLUSH PRIVILEGES;
复制代码

对于PostgreSQL,执行以下安全操作:
  1. -- 修改postgres用户密码
  2. ALTER USER postgres WITH PASSWORD 'strong_password';
  3. -- 创建具有有限权限的应用用户
  4. CREATE USER app_user WITH PASSWORD 'app_password';
  5. CREATE DATABASE app_db;
  6. GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
复制代码

6.4 系统监控与日志
  1. # 安装logrotate
  2. apk add logrotate
  3. # 创建Nginx日志轮转配置
  4. vi /etc/logrotate.d/nginx
复制代码

添加以下内容:
  1. /var/log/nginx/*.log {
  2.     daily
  3.     missingok
  4.     rotate 52
  5.     compress
  6.     delaycompress
  7.     notifempty
  8.     create 640 nginx adm
  9.     sharedscripts
  10.     postrotate
  11.         if [ -f /var/run/nginx.pid ]; then
  12.             kill -USR1 `cat /var/run/nginx.pid`
  13.         fi
  14.     endscript
  15. }
复制代码

创建PHP日志轮转配置:
  1. vi /etc/logrotate.d/php
复制代码

添加以下内容:
  1. /var/log/php/*.log {
  2.     daily
  3.     missingok
  4.     rotate 52
  5.     compress
  6.     delaycompress
  7.     notifempty
  8.     create 640 nginx adm
  9. }
复制代码
  1. # 安装监控工具
  2. apk add htop iotop vmstat
  3. # 安装和配置Monit
  4. apk add monit
  5. # 配置Monit
  6. vi /etc/monit/monitrc
复制代码

添加以下基本配置:
  1. set daemon 60
  2. set logfile syslog facility log_daemon
  3. set mailserver localhost
  4. set mail-format { from: monit@$HOST }
  5. set alert admin@example.com
  6. include /etc/monit/conf.d/*
复制代码

创建Nginx监控配置:
  1. mkdir -p /etc/monit/conf.d
  2. vi /etc/monit/conf.d/nginx
复制代码

添加以下内容:
  1. check process nginx with pidfile /var/run/nginx.pid
  2.     start program = "/etc/init.d/nginx start"
  3.     stop program = "/etc/init.d/nginx stop"
  4.     if failed port 80 protocol http then restart
  5.     if 3 restarts within 5 cycles then alert
复制代码

创建PHP-FPM监控配置:
  1. vi /etc/monit/conf.d/php-fpm
复制代码

添加以下内容:
  1. check process php-fpm with pidfile /var/run/php/php8-fpm.pid
  2.     start program = "/etc/init.d/php-fpm8 start"
  3.     stop program = "/etc/init.d/php-fpm8 stop"
  4.     if failed unixsocket /run/php/php8-fpm.sock then restart
  5.     if 3 restarts within 5 cycles then alert
复制代码

创建MariaDB监控配置:
  1. vi /etc/monit/conf.d/mariadb
复制代码

添加以下内容:
  1. check process mariadb with pidfile /var/run/mysqld/mysqld.pid
  2.     start program = "/etc/init.d/mariadb start"
  3.     stop program = "/etc/init.d/mariadb stop"
  4.     if failed host 127.0.0.1 port 3306 protocol mysql then restart
  5.     if 3 restarts within 5 cycles then alert
复制代码

启动Monit并设置为开机自启:
  1. # 启动Monit
  2. service monit start
  3. # 设置为开机自启
  4. rc-update add monit default
复制代码

7. 维护和备份

7.1 系统更新和维护

创建自动更新脚本:
  1. vi /usr/local/bin/update-system
复制代码

添加以下内容:
  1. #!/bin/sh
  2. # 更新包列表
  3. apk update
  4. # 升级所有包
  5. apk upgrade
  6. # 清理缓存
  7. apk cache clean
  8. # 记录更新日志
  9. logger -t update "System updated on $(date)"
复制代码

使脚本可执行:
  1. chmod +x /usr/local/bin/update-system
复制代码

创建每周自动更新任务:
  1. # 安装cron
  2. apk add cron
  3. # 启动cron服务
  4. service cron start
  5. rc-update add cron default
  6. # 添加每周更新任务
  7. echo "0 3 * * 0 /usr/local/bin/update-system" > /etc/crontabs/root
复制代码

创建磁盘空间监控脚本:
  1. vi /usr/local/bin/check-disk-space
复制代码

添加以下内容:
  1. #!/bin/sh
  2. # 设置警告阈值(百分比)
  3. WARNING_THRESHOLD=80
  4. CRITICAL_THRESHOLD=90
  5. # 获取根分区使用率
  6. DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
  7. # 检查是否超过阈值
  8. if [ "$DISK_USAGE" -ge "$CRITICAL_THRESHOLD" ]; then
  9.     echo "CRITICAL: Disk space is critically low at ${DISK_USAGE}% on $(hostname)" | logger -t disk-check
  10.     # 可以添加发送邮件或其他通知的代码
  11. elif [ "$DISK_USAGE" -ge "$WARNING_THRESHOLD" ]; then
  12.     echo "WARNING: Disk space is low at ${DISK_USAGE}% on $(hostname)" | logger -t disk-check
  13.     # 可以添加发送邮件或其他通知的代码
  14. fi
复制代码

使脚本可执行:
  1. chmod +x /usr/local/bin/check-disk-space
复制代码

添加到每日任务:
  1. echo "0 2 * * * /usr/local/bin/check-disk-space" >> /etc/crontabs/root
复制代码

7.2 备份策略

创建备份脚本:
  1. vi /usr/local/bin/backup-files
复制代码

添加以下内容:
  1. #!/bin/sh
  2. # 设置变量
  3. BACKUP_DIR="/var/backups"
  4. RETENTION_DAYS=30
  5. DATE=$(date +%Y%m%d)
  6. # 创建备份目录
  7. mkdir -p $BACKUP_DIR
  8. # 备份网站文件
  9. tar -czf $BACKUP_DIR/www-$DATE.tar.gz -C /var/www .
  10. # 备份系统配置
  11. tar -czf $BACKUP_DIR/config-$DATE.tar.gz \
  12.     /etc/nginx \
  13.     /etc/php8 \
  14.     /etc/postgresql \
  15.     /etc/my.cnf.d \
  16.     /etc/ssh \
  17.     /etc/iptables
  18. # 删除旧备份
  19. find $BACKUP_DIR -name "*.tar.gz" -type f -mtime +$RETENTION_DAYS -delete
  20. # 记录备份日志
  21. logger -t backup "File backup completed on $(date)"
复制代码

使脚本可执行:
  1. chmod +x /usr/local/bin/backup-files
复制代码

创建数据库备份脚本:
  1. vi /usr/local/bin/backup-databases
复制代码

添加以下内容:
  1. #!/bin/sh
  2. # 设置变量
  3. BACKUP_DIR="/var/backups"
  4. RETENTION_DAYS=30
  5. DATE=$(date +%Y%m%d)
  6. # 创建备份目录
  7. mkdir -p $BACKUP_DIR
  8. # 备份MariaDB/MySQL数据库
  9. mysqldump --all-databases --single-transaction --routines --triggers | gzip > $BACKUP_DIR/mysql-all-$DATE.sql.gz
  10. # 备份PostgreSQL数据库
  11. pg_dumpall -U postgres | gzip > $BACKUP_DIR/postgresql-all-$DATE.sql.gz
  12. # 删除旧备份
  13. find $BACKUP_DIR -name "*.sql.gz" -type f -mtime +$RETENTION_DAYS -delete
  14. # 记录备份日志
  15. logger -t backup "Database backup completed on $(date)"
复制代码

使脚本可执行:
  1. chmod +x /usr/local/bin/backup-databases
复制代码

添加到每日任务:
  1. echo "0 1 * * * /usr/local/bin/backup-files" >> /etc/crontabs/root
  2. echo "30 1 * * * /usr/local/bin/backup-databases" >> /etc/crontabs/root
复制代码

7.3 远程备份
  1. # 生成SSH密钥
  2. ssh-keygen -t rsa -b 4096 -f ~/.ssh/backup_key
  3. # 将公钥复制到远程服务器
  4. ssh-copy-id -i ~/.ssh/backup_key.pub user@remote-backup-server
复制代码
  1. vi /usr/local/bin/backup-remote
复制代码

添加以下内容:
  1. #!/bin/sh
  2. # 设置变量
  3. BACKUP_DIR="/var/backups"
  4. REMOTE_USER="backup"
  5. REMOTE_SERVER="backup.example.com"
  6. REMOTE_DIR="/backups/$(hostname)"
  7. SSH_KEY="$HOME/.ssh/backup_key"
  8. DATE=$(date +%Y%m%d)
  9. # 在远程服务器上创建目录
  10. ssh -i $SSH_KEY $REMOTE_USER@$REMOTE_SERVER "mkdir -p $REMOTE_DIR"
  11. # 同步备份文件到远程服务器
  12. rsync -avz -e "ssh -i $SSH_KEY" $BACKUP_DIR/ $REMOTE_USER@$REMOTE_SERVER:$REMOTE_DIR/
  13. # 记录备份日志
  14. logger -t backup "Remote backup completed on $(date)"
复制代码

使脚本可执行:
  1. chmod +x /usr/local/bin/backup-remote
复制代码

添加到每周任务:
  1. echo "0 4 * * 0 /usr/local/bin/backup-remote" >> /etc/crontabs/root
复制代码

8. 故障排除

8.1 常见问题及解决方案

如果系统无法启动,可以尝试以下方法:

1. 进入恢复模式

在启动过程中,在引导菜单选择”Boot Alpine Linux”后,按”e”键编辑启动参数,添加init=/bin/sh到内核行,然后按Ctrl+X或F10启动。

1. 检查文件系统
  1. fsck -y /dev/sda1
复制代码

1. 修复引导加载程序
  1. # 安装syslinux
  2.    apk add syslinux
  3.    # 安装引导加载程序
  4.    extlinux --install /boot
  5.    # 更新配置
  6.    update-extlinux
复制代码

如果遇到网络连接问题,可以尝试以下方法:

1. 检查网络接口状态
  1. ip a
复制代码

1. 检查网络服务状态
  1. service networking status
复制代码

1. 重启网络服务
  1. service networking restart
复制代码

1. 检查DNS配置
  1. cat /etc/resolv.conf
复制代码

1. 测试网络连接
  1. ping -c 4 8.8.8.8
  2.    ping -c 4 example.com
复制代码

如果服务无法启动,可以尝试以下方法:

1. 检查服务状态
  1. service nginx status
复制代码

1. 查看服务日志
  1. tail -f /var/log/nginx/error.log
复制代码

1. 手动启动服务并查看错误
  1. nginx -t
  2.    nginx
复制代码

1. 检查配置文件
  1. nginx -t
复制代码

如果服务器性能下降,可以尝试以下方法:

1. 检查系统资源使用情况
  1. htop
复制代码

1. 检查磁盘I/O
  1. iotop
复制代码

1. 检查内存使用
  1. free -h
  2.    vmstat
复制代码

1. 检查网络连接
  1. netstat -tuln
  2.    ss -tuln
复制代码

1. 检查进程状态
  1. ps aux
复制代码

8.2 日志分析

查看系统日志:
  1. # 查看系统日志
  2. cat /var/log/messages
  3. # 查看特定服务的日志
  4. grep "nginx" /var/log/messages
  5. # 实时查看日志
  6. tail -f /var/log/messages
复制代码

查看Nginx访问日志:
  1. # 查看访问日志
  2. cat /var/log/nginx/access.log
  3. # 查看错误日志
  4. cat /var/log/nginx/error.log
  5. # 分析访问日志,找出访问量最高的IP
  6. awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
  7. # 分析访问日志,找出访问量最高的页面
  8. awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
复制代码

查看PHP错误日志:
  1. # 查看PHP错误日志
  2. cat /var/log/php/error.log
  3. # 实时查看PHP错误日志
  4. tail -f /var/log/php/error.log
复制代码

查看数据库日志:
  1. # 查看MariaDB/MySQL错误日志
  2. cat /var/log/mysql/mysql.err
  3. # 查看PostgreSQL日志
  4. cat /var/log/postgresql/postgresql.log
复制代码

9. 结论

通过本指南,您已经学习了如何使用轻量级Alpine Linux搭建高效稳定的服务器环境。从基础安装到安全优化,我们详细介绍了每个步骤,并提供了实用的配置示例和代码。

Alpine Linux作为一个轻量级、安全且高效的Linux发行版,特别适合资源受限环境或需要高安全性的服务器场景。通过适当的配置和优化,您可以打造一个高性能、高可靠性的服务器环境。

请记住,服务器管理是一个持续的过程,需要定期更新、监控和维护。通过实施本指南中介绍的备份策略和监控措施,您可以确保服务器的长期稳定运行。

希望本指南能够帮助您成功搭建和管理您的Alpine Linux服务器。如果您有任何问题或需要进一步的帮助,请参考Alpine Linux官方文档或社区资源。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则