|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
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系统为例):
- # 检查USB设备名称(如/dev/sdb)
- lsblk
-
- # 卸载USB设备(如果已挂载)
- sudo umount /dev/sdb*
-
- # 将ISO写入USB设备
- 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. 回答安装问题
安装程序会询问一系列问题,下面是典型配置:
- Keyboard layout: us
- Hostname: alpine-server
- Network interface: eth0
- IP address: dhcp
- NTP client: chrony
- DNS domain: (留空)
- DNS nameservers: 8.8.8.8 8.8.4.4
- Root password: (设置安全的root密码)
- Timezone: UTC
- Proxy URL: (留空)
- Mirror URL: http://dl-cdn.alpinelinux.org/alpine/
- SSH server: openssh
- Disk: sda
- How to use disk: sys
复制代码
注意:选择”sys”模式会将Alpine Linux安装到磁盘并使其可启动,而不是”数据模式”(data)或”磁盘模式”(disk)。
1. 完成安装
安装完成后,重启系统:
系统将从硬盘启动,您可以使用设置的root密码登录。
3. 基础系统配置
3.1 更新系统
安装完成后,首先更新系统到最新版本:
- # 更新可用包列表
- apk update
- # 升级已安装的包
- apk upgrade
- # 如果有内核更新,需要重启系统
- reboot
复制代码
3.2 添加用户
出于安全考虑,不建议直接使用root账户进行日常操作。创建一个新用户并授予sudo权限:
- # 创建新用户(例如:admin)
- adduser admin
- # 安装sudo包
- apk add sudo
- # 配置sudoers文件,允许admin用户使用sudo
- echo "admin ALL=(ALL) ALL" >> /etc/sudoers
复制代码
3.3 配置网络
Alpine Linux使用/etc/network/interfaces文件来配置网络接口。编辑此文件以设置静态IP地址(如果之前选择了DHCP,现在可以更改为静态IP):
- # 编辑网络配置文件
- vi /etc/network/interfaces
复制代码
添加以下内容(根据您的网络环境调整):
- auto lo
- iface lo inet loopback
- auto eth0
- iface eth0 inet static
- address 192.168.1.100
- netmask 255.255.255.0
- gateway 192.168.1.1
复制代码
重启网络服务以应用更改:
- # 重启网络服务
- /etc/init.d/networking restart
- # 或者重启整个系统
- reboot
复制代码
3.4 配置SSH服务
为了远程管理服务器,需要配置SSH服务:
- # 安装OpenSSH服务器(如果安装时未选择)
- apk add openssh
- # 启用并启动SSH服务
- rc-update add sshd
- service sshd start
复制代码
为了增强SSH安全性,编辑SSH配置文件:
建议进行以下修改:
- # 禁用root登录
- PermitRootLogin no
- # 仅允许密钥认证
- PasswordAuthentication no
- # 更改默认端口
- Port 2222
- # 仅允许特定用户登录
- AllowUsers admin
复制代码
重启SSH服务以应用更改:
3.5 设置防火墙
Alpine Linux使用iptables作为防火墙。安装并配置基本防火墙规则:
- # 安装iptables
- apk add iptables
- # 创建基本防火墙规则
- iptables -F
- iptables -P INPUT DROP
- iptables -P FORWARD DROP
- iptables -P OUTPUT ACCEPT
- # 允许本地回环
- iptables -A INPUT -i lo -j ACCEPT
- # 允许已建立的连接
- iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- # 允许SSH连接(根据之前设置的端口)
- iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
- # 允许HTTP和HTTPS(如果需要)
- iptables -A INPUT -p tcp --dport 80 -j ACCEPT
- iptables -A INPUT -p tcp --dport 443 -j ACCEPT
- # 保存规则
- iptables-save > /etc/iptables/rules.v4
- # 创建启动脚本
- echo '#!/bin/sh' > /etc/local.d/iptables.start
- echo 'iptables-restore < /etc/iptables/rules.v4' >> /etc/local.d/iptables.start
- chmod +x /etc/local.d/iptables.start
- # 添加到启动项
- rc-update add local
复制代码
4. 服务器环境搭建
4.1 安装Web服务器
Nginx是一个高性能的Web服务器,适合在Alpine Linux上运行:
- # 安装Nginx
- apk add nginx
- # 创建网站目录
- mkdir -p /var/www/html
- # 创建简单的测试页面
- echo "<h1>Welcome to Alpine Linux Nginx Server</h1>" > /var/www/html/index.html
- # 配置Nginx
- vi /etc/nginx/nginx.conf
复制代码
基本的Nginx配置如下:
- user nginx;
- worker_processes auto;
- error_log /var/log/nginx/error.log;
- pid /var/run/nginx.pid;
- events {
- worker_connections 1024;
- }
- http {
- include /etc/nginx/mime.types;
- default_type application/octet-stream;
- log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- '$status $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for"';
- access_log /var/log/nginx/access.log main;
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 65;
- types_hash_max_size 2048;
- server {
- listen 80;
- server_name localhost;
- root /var/www/html;
- index index.html index.htm;
- location / {
- try_files $uri $uri/ =404;
- }
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root /var/www/html;
- }
- }
- }
复制代码
启动Nginx并设置为开机自启:
- # 启动Nginx
- service nginx start
- # 设置为开机自启
- rc-update add nginx default
复制代码
如果您更喜欢使用Apache:
- # 安装Apache
- apk add apache2
- # 创建网站目录
- mkdir -p /var/www/localhost/htdocs
- # 创建简单的测试页面
- echo "<h1>Welcome to Alpine Linux Apache Server</h1>" > /var/www/localhost/htdocs/index.html
- # 启动Apache并设置为开机自启
- service apache2 start
- rc-update add apache2 default
复制代码
4.2 安装数据库服务器
- # 安装MariaDB
- apk add mariadb mariadb-client
- # 初始化数据库
- mysql_install_db --user=mysql --datadir=/var/lib/mysql
- # 启动MariaDB
- service mariadb start
- # 安全设置
- mysql_secure_installation
- # 设置为开机自启
- rc-update add mariadb default
复制代码- # 安装PostgreSQL
- apk add postgresql postgresql-contrib
- # 初始化数据库
- /etc/init.d/postgresql setup
- # 启动PostgreSQL
- service postgresql start
- # 设置为开机自启
- rc-update add postgresql default
复制代码
4.3 安装PHP
- # 安装PHP及常用扩展
- apk add php8 php8-fpm php8-mysqli php8-pgsql php8-gd php8-curl php8-session php8-opcache
- # 配置PHP-FPM
- vi /etc/php8/php-fpm.d/www.conf
复制代码
修改以下配置:
- listen = /run/php/php8-fpm.sock
- listen.owner = nginx
- listen.group = nginx
- listen.mode = 0660
- user = nginx
- group = nginx
复制代码
启动PHP-FPM并设置为开机自启:
- # 启动PHP-FPM
- service php-fpm8 start
- # 设置为开机自启
- rc-update add php-fpm8 default
复制代码
4.4 配置Nginx支持PHP
编辑Nginx配置文件以支持PHP:
在server块中添加以下配置:
- location ~ \.php$ {
- fastcgi_pass unix:/run/php/php8-fpm.sock;
- fastcgi_index index.php;
- include fastcgi.conf;
- }
复制代码
创建PHP测试文件:
- echo "<?php phpinfo(); ?>" > /var/www/html/info.php
复制代码
重启Nginx以应用更改:
5. 性能优化
5.1 系统级优化
编辑/etc/sysctl.conf文件以优化内核参数:
添加以下内容:
- # 增加文件描述符限制
- fs.file-max = 100000
- # 网络优化
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- net.ipv4.tcp_rmem = 4096 87380 16777216
- net.ipv4.tcp_wmem = 4096 65536 16777216
- net.ipv4.tcp_fin_timeout = 30
- net.ipv4.tcp_keepalive_time = 1200
- net.ipv4.tcp_max_syn_backlog = 8192
- net.ipv4.tcp_max_tw_buckets = 5000
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_tw_recycle = 1
- net.ipv4.ip_local_port_range = 1024 65000
- # 虚拟内存优化
- vm.swappiness = 10
- vm.dirty_ratio = 60
- vm.dirty_background_ratio = 2
复制代码
应用更改:
如果使用ext4文件系统,可以在/etc/fstab中添加挂载选项以优化性能:
修改根分区的挂载选项,添加noatime,nodiratime,data=writeback:
- /dev/sda1 / ext4 defaults,noatime,nodiratime,data=writeback 0 1
复制代码
5.2 服务优化
编辑Nginx配置文件进行性能优化:
在http块中添加以下优化配置:
- # worker进程数,通常设置为CPU核心数
- worker_processes auto;
- # 每个worker进程的最大连接数
- worker_connections 2048;
- # 开启gzip压缩
- gzip on;
- gzip_vary on;
- gzip_min_length 1024;
- gzip_comp_level 6;
- gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
- # 开启高效文件传输模式
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- # 保持连接超时时间
- keepalive_timeout 30;
- # 客户端请求头缓冲区大小
- client_header_buffer_size 4k;
- large_client_header_buffers 8 8k;
- # 开启文件缓存
- open_file_cache max=2048 inactive=20s;
- open_file_cache_valid 30s;
- open_file_cache_min_uses 2;
- open_file_cache_errors on;
复制代码
编辑PHP-FPM配置文件:
- vi /etc/php8/php-fpm.d/www.conf
复制代码
进行以下优化:
- # 进程管理器类型
- pm = dynamic
- # 最大子进程数
- pm.max_children = 50
- # 启动时创建的子进程数
- pm.start_servers = 5
- # 空闲时的最小子进程数
- pm.min_spare_servers = 5
- # 空闲时的最大子进程数
- pm.max_spare_servers = 35
- # 每个进程的最大请求数
- pm.max_requests = 500
- # PHP内存限制
- php_admin_value[memory_limit] = 128M
复制代码
对于MariaDB/MySQL,编辑配置文件:
- vi /etc/my.cnf.d/mariadb-server.cnf
复制代码
在[mysqld]部分添加以下优化配置:
- # 缓冲池大小,通常设置为系统内存的50-70%
- innodb_buffer_pool_size = 1G
- # 日志缓冲区大小
- innodb_log_buffer_size = 16M
- # 日志文件大小
- innodb_log_file_size = 256M
- # 刷新日志策略
- innodb_flush_log_at_trx_commit = 2
- # 查询缓存
- query_cache_type = 1
- query_cache_size = 128M
- query_cache_limit = 2M
- # 连接数
- max_connections = 200
- # 表缓存
- table_open_cache = 2000
- # 临时表
- tmp_table_size = 64M
- max_heap_table_size = 64M
- # 线程缓存
- thread_cache_size = 8
- # 慢查询日志
- slow_query_log = 1
- slow_query_log_file = /var/log/mysql/slow.log
- long_query_time = 2
复制代码
对于PostgreSQL,编辑配置文件:
- vi /etc/postgresql/postgresql.conf
复制代码
进行以下优化:
- # 连接数
- max_connections = 100
- # 共享缓冲区,通常设置为系统内存的25%
- shared_buffers = 512MB
- # 有效缓存大小,通常设置为系统内存的50%
- effective_cache_size = 1GB
- # 维护工作内存
- maintenance_work_mem = 128MB
- # 工作内存
- work_mem = 16MB
- # 检查点设置
- checkpoint_segments = 32
- checkpoint_completion_target = 0.9
- # 随机页面成本
- random_page_cost = 2.0
- # 统计信息收集
- stats_target = 100
- # 日志设置
- log_destination = 'stderr'
- logging_collector = on
- log_directory = 'pg_log'
- log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
- log_statement = 'mod'
- log_min_duration_statement = 1000
复制代码
5.3 使用缓存服务
- # 安装Redis
- apk add redis
- # 配置Redis
- vi /etc/redis.conf
复制代码
进行以下优化:
- # 绑定地址
- bind 127.0.0.1
- # 端口
- port 6379
- # 最大内存使用量
- maxmemory 256mb
- # 内存淘汰策略
- maxmemory-policy allkeys-lru
- # 持久化
- save 900 1
- save 300 10
- save 60 10000
- # 启用AOF持久化
- appendonly yes
- appendfsync everysec
复制代码
启动Redis并设置为开机自启:
- # 启动Redis
- service redis start
- # 设置为开机自启
- rc-update add redis default
复制代码- # 安装Memcached
- apk add memcached
- # 配置Memcached
- vi /etc/conf.d/memcached
复制代码
修改以下配置:
- MEMCACHED_OPTS="-m 256 -c 1024 -l 127.0.0.1"
复制代码
启动Memcached并设置为开机自启:
- # 启动Memcached
- service memcached start
- # 设置为开机自启
- rc-update add memcached default
复制代码
6. 安全优化
6.1 系统安全加固
除了之前的基本SSH配置外,还可以进行以下安全增强:
- # 编辑SSH配置文件
- vi /etc/ssh/sshd_config
复制代码
添加或修改以下配置:
- # 禁用空密码登录
- PermitEmptyPasswords no
- # 限制最大认证尝试次数
- MaxAuthTries 3
- # 禁用X11转发
- X11Forwarding no
- # 设置空闲超时时间
- ClientAliveInterval 300
- ClientAliveCountMax 2
- # 仅允许特定协议
- Protocol 2
- # 使用特定加密算法
- Ciphers chacha20-poly1305@openssl.com,aes256-gcm@openssl.com,aes128-gcm@openssl.com,aes256-ctr,aes192-ctr,aes128-ctr
- 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
- KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
- # 使用特定密钥类型
- HostKey /etc/ssh/ssh_host_ed25519_key
- HostKey /etc/ssh/ssh_host_rsa_key
复制代码
重启SSH服务以应用更改:
- # 安装fail2ban
- apk add fail2ban
- # 创建配置文件
- cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- # 编辑配置文件
- vi /etc/fail2ban/jail.local
复制代码
配置SSH保护:
- [sshd]
- enabled = true
- port = 2222
- filter = sshd
- logpath = /var/log/messages
- maxretry = 3
- bantime = 3600
- findtime = 600
复制代码
启动fail2ban并设置为开机自启:
- # 启动fail2ban
- service fail2ban start
- # 设置为开机自启
- rc-update add fail2ban default
复制代码
6.2 网络安全
除了基本的防火墙规则外,还可以添加更严格的规则:
- # 创建防火墙脚本
- vi /etc/local.d/firewall.start
复制代码
添加以下内容:
- #!/bin/sh
- # 清除现有规则
- iptables -F
- iptables -X
- iptables -t nat -F
- iptables -t nat -X
- iptables -t mangle -F
- iptables -t mangle -X
- # 设置默认策略
- iptables -P INPUT DROP
- iptables -P FORWARD DROP
- iptables -P OUTPUT ACCEPT
- # 允许本地回环
- iptables -A INPUT -i lo -j ACCEPT
- # 允许已建立的连接
- iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- # 允许ICMP(有限制)
- iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 5 -j ACCEPT
- # 允许SSH连接
- iptables -A INPUT -p tcp --dport 2222 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- # 允许HTTP和HTTPS
- iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- # 防止DDoS攻击
- iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
- # 防止端口扫描
- iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
- iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
- iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
- iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
- iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
- iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
- # 防止Ping洪水攻击
- iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
- iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
- # 保存规则
- iptables-save > /etc/iptables/rules.v4
复制代码
使脚本可执行:
- chmod +x /etc/local.d/firewall.start
复制代码
运行脚本:
- /etc/local.d/firewall.start
复制代码
TCP Wrappers提供了一层额外的安全保护,通过/etc/hosts.allow和/etc/hosts.deny文件控制对网络服务的访问:
- # 编辑hosts.allow
- vi /etc/hosts.allow
复制代码
添加以下内容:
- # 允许特定IP访问SSH
- sshd: 192.168.1.0/24, 10.0.0.1
- # 允许特定IP访问所有服务
- ALL: 192.168.1.100
复制代码- # 编辑hosts.deny
- vi /etc/hosts.deny
复制代码
添加以下内容:
6.3 应用安全
编辑Nginx配置文件以增强安全性:
在http块中添加以下安全配置:
- # 隐藏Nginx版本
- server_tokens off;
- # 添加安全头
- add_header X-Frame-Options "SAMEORIGIN" always;
- add_header X-Content-Type-Options "nosniff" always;
- add_header X-XSS-Protection "1; mode=block" always;
- add_header Referrer-Policy "strict-origin-when-cross-origin" always;
- 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;
- # SSL/TLS优化
- ssl_protocols TLSv1.2 TLSv1.3;
- ssl_prefer_server_ciphers on;
- 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';
- ssl_session_timeout 1d;
- ssl_session_cache shared:SSL:50m;
- ssl_session_tickets off;
- ssl_stapling on;
- ssl_stapling_verify on;
- # 限制请求大小
- client_max_body_size 1M;
- # 禁止访问隐藏文件
- location ~ /\. {
- deny all;
- access_log off;
- log_not_found off;
- }
- # 禁止访问备份文件
- location ~ ~$ {
- deny all;
- access_log off;
- log_not_found off;
- }
- # 禁止访问特定文件类型
- location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ {
- deny all;
- access_log off;
- log_not_found off;
- }
复制代码
编辑PHP配置文件以增强安全性:
进行以下安全配置:
- # 禁用危险函数
- disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
- # 隐藏PHP版本
- expose_php = Off
- # 限制文件上传
- file_uploads = On
- upload_tmp_dir = /var/tmp
- upload_max_filesize = 2M
- max_file_uploads = 20
- # 限制内存使用
- memory_limit = 128M
- # 限制执行时间
- max_execution_time = 30
- max_input_time = 60
- # 会话安全
- session.cookie_httponly = 1
- session.cookie_secure = 1
- session.use_only_cookies = 1
- session.cookie_samesite = Strict
- # 错误报告
- display_errors = Off
- log_errors = On
- error_log = /var/log/php/error.log
- # 全局变量
- register_globals = Off
- # SQL安全
- magic_quotes_gpc = Off
- # 允许访问URL文件
- allow_url_fopen = Off
- allow_url_include = Off
- # 启用OPcache
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- opcache.revalidate_freq=60
- opcache.fast_shutdown=1
- opcache.enable_file_override=0
- opcache.validate_timestamps=0
复制代码
创建PHP错误日志目录:
- mkdir -p /var/log/php
- touch /var/log/php/error.log
- chown nginx:nginx /var/log/php/error.log
复制代码
对于MariaDB/MySQL,执行以下安全操作:
- -- 删除匿名用户
- DELETE FROM mysql.user WHERE User='';
- -- 禁止root远程登录
- DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
- -- 删除测试数据库
- DROP DATABASE IF EXISTS test;
- DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
- -- 刷新权限
- FLUSH PRIVILEGES;
复制代码
对于PostgreSQL,执行以下安全操作:
- -- 修改postgres用户密码
- ALTER USER postgres WITH PASSWORD 'strong_password';
- -- 创建具有有限权限的应用用户
- CREATE USER app_user WITH PASSWORD 'app_password';
- CREATE DATABASE app_db;
- GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user;
复制代码
6.4 系统监控与日志
- # 安装logrotate
- apk add logrotate
- # 创建Nginx日志轮转配置
- vi /etc/logrotate.d/nginx
复制代码
添加以下内容:
- /var/log/nginx/*.log {
- daily
- missingok
- rotate 52
- compress
- delaycompress
- notifempty
- create 640 nginx adm
- sharedscripts
- postrotate
- if [ -f /var/run/nginx.pid ]; then
- kill -USR1 `cat /var/run/nginx.pid`
- fi
- endscript
- }
复制代码
创建PHP日志轮转配置:
添加以下内容:
- /var/log/php/*.log {
- daily
- missingok
- rotate 52
- compress
- delaycompress
- notifempty
- create 640 nginx adm
- }
复制代码- # 安装监控工具
- apk add htop iotop vmstat
- # 安装和配置Monit
- apk add monit
- # 配置Monit
- vi /etc/monit/monitrc
复制代码
添加以下基本配置:
- set daemon 60
- set logfile syslog facility log_daemon
- set mailserver localhost
- set mail-format { from: monit@$HOST }
- set alert admin@example.com
- include /etc/monit/conf.d/*
复制代码
创建Nginx监控配置:
- mkdir -p /etc/monit/conf.d
- vi /etc/monit/conf.d/nginx
复制代码
添加以下内容:
- check process nginx with pidfile /var/run/nginx.pid
- start program = "/etc/init.d/nginx start"
- stop program = "/etc/init.d/nginx stop"
- if failed port 80 protocol http then restart
- if 3 restarts within 5 cycles then alert
复制代码
创建PHP-FPM监控配置:
- vi /etc/monit/conf.d/php-fpm
复制代码
添加以下内容:
- check process php-fpm with pidfile /var/run/php/php8-fpm.pid
- start program = "/etc/init.d/php-fpm8 start"
- stop program = "/etc/init.d/php-fpm8 stop"
- if failed unixsocket /run/php/php8-fpm.sock then restart
- if 3 restarts within 5 cycles then alert
复制代码
创建MariaDB监控配置:
- vi /etc/monit/conf.d/mariadb
复制代码
添加以下内容:
- check process mariadb with pidfile /var/run/mysqld/mysqld.pid
- start program = "/etc/init.d/mariadb start"
- stop program = "/etc/init.d/mariadb stop"
- if failed host 127.0.0.1 port 3306 protocol mysql then restart
- if 3 restarts within 5 cycles then alert
复制代码
启动Monit并设置为开机自启:
- # 启动Monit
- service monit start
- # 设置为开机自启
- rc-update add monit default
复制代码
7. 维护和备份
7.1 系统更新和维护
创建自动更新脚本:
- vi /usr/local/bin/update-system
复制代码
添加以下内容:
- #!/bin/sh
- # 更新包列表
- apk update
- # 升级所有包
- apk upgrade
- # 清理缓存
- apk cache clean
- # 记录更新日志
- logger -t update "System updated on $(date)"
复制代码
使脚本可执行:
- chmod +x /usr/local/bin/update-system
复制代码
创建每周自动更新任务:
- # 安装cron
- apk add cron
- # 启动cron服务
- service cron start
- rc-update add cron default
- # 添加每周更新任务
- echo "0 3 * * 0 /usr/local/bin/update-system" > /etc/crontabs/root
复制代码
创建磁盘空间监控脚本:
- vi /usr/local/bin/check-disk-space
复制代码
添加以下内容:
- #!/bin/sh
- # 设置警告阈值(百分比)
- WARNING_THRESHOLD=80
- CRITICAL_THRESHOLD=90
- # 获取根分区使用率
- DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
- # 检查是否超过阈值
- if [ "$DISK_USAGE" -ge "$CRITICAL_THRESHOLD" ]; then
- echo "CRITICAL: Disk space is critically low at ${DISK_USAGE}% on $(hostname)" | logger -t disk-check
- # 可以添加发送邮件或其他通知的代码
- elif [ "$DISK_USAGE" -ge "$WARNING_THRESHOLD" ]; then
- echo "WARNING: Disk space is low at ${DISK_USAGE}% on $(hostname)" | logger -t disk-check
- # 可以添加发送邮件或其他通知的代码
- fi
复制代码
使脚本可执行:
- chmod +x /usr/local/bin/check-disk-space
复制代码
添加到每日任务:
- echo "0 2 * * * /usr/local/bin/check-disk-space" >> /etc/crontabs/root
复制代码
7.2 备份策略
创建备份脚本:
- vi /usr/local/bin/backup-files
复制代码
添加以下内容:
- #!/bin/sh
- # 设置变量
- BACKUP_DIR="/var/backups"
- RETENTION_DAYS=30
- DATE=$(date +%Y%m%d)
- # 创建备份目录
- mkdir -p $BACKUP_DIR
- # 备份网站文件
- tar -czf $BACKUP_DIR/www-$DATE.tar.gz -C /var/www .
- # 备份系统配置
- tar -czf $BACKUP_DIR/config-$DATE.tar.gz \
- /etc/nginx \
- /etc/php8 \
- /etc/postgresql \
- /etc/my.cnf.d \
- /etc/ssh \
- /etc/iptables
- # 删除旧备份
- find $BACKUP_DIR -name "*.tar.gz" -type f -mtime +$RETENTION_DAYS -delete
- # 记录备份日志
- logger -t backup "File backup completed on $(date)"
复制代码
使脚本可执行:
- chmod +x /usr/local/bin/backup-files
复制代码
创建数据库备份脚本:
- vi /usr/local/bin/backup-databases
复制代码
添加以下内容:
- #!/bin/sh
- # 设置变量
- BACKUP_DIR="/var/backups"
- RETENTION_DAYS=30
- DATE=$(date +%Y%m%d)
- # 创建备份目录
- mkdir -p $BACKUP_DIR
- # 备份MariaDB/MySQL数据库
- mysqldump --all-databases --single-transaction --routines --triggers | gzip > $BACKUP_DIR/mysql-all-$DATE.sql.gz
- # 备份PostgreSQL数据库
- pg_dumpall -U postgres | gzip > $BACKUP_DIR/postgresql-all-$DATE.sql.gz
- # 删除旧备份
- find $BACKUP_DIR -name "*.sql.gz" -type f -mtime +$RETENTION_DAYS -delete
- # 记录备份日志
- logger -t backup "Database backup completed on $(date)"
复制代码
使脚本可执行:
- chmod +x /usr/local/bin/backup-databases
复制代码
添加到每日任务:
- echo "0 1 * * * /usr/local/bin/backup-files" >> /etc/crontabs/root
- echo "30 1 * * * /usr/local/bin/backup-databases" >> /etc/crontabs/root
复制代码
7.3 远程备份
- # 生成SSH密钥
- ssh-keygen -t rsa -b 4096 -f ~/.ssh/backup_key
- # 将公钥复制到远程服务器
- ssh-copy-id -i ~/.ssh/backup_key.pub user@remote-backup-server
复制代码- vi /usr/local/bin/backup-remote
复制代码
添加以下内容:
- #!/bin/sh
- # 设置变量
- BACKUP_DIR="/var/backups"
- REMOTE_USER="backup"
- REMOTE_SERVER="backup.example.com"
- REMOTE_DIR="/backups/$(hostname)"
- SSH_KEY="$HOME/.ssh/backup_key"
- DATE=$(date +%Y%m%d)
- # 在远程服务器上创建目录
- ssh -i $SSH_KEY $REMOTE_USER@$REMOTE_SERVER "mkdir -p $REMOTE_DIR"
- # 同步备份文件到远程服务器
- rsync -avz -e "ssh -i $SSH_KEY" $BACKUP_DIR/ $REMOTE_USER@$REMOTE_SERVER:$REMOTE_DIR/
- # 记录备份日志
- logger -t backup "Remote backup completed on $(date)"
复制代码
使脚本可执行:
- chmod +x /usr/local/bin/backup-remote
复制代码
添加到每周任务:
- 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. 修复引导加载程序
- # 安装syslinux
- apk add syslinux
- # 安装引导加载程序
- extlinux --install /boot
- # 更新配置
- update-extlinux
复制代码
如果遇到网络连接问题,可以尝试以下方法:
1. 检查网络接口状态
1. 检查网络服务状态
- service networking status
复制代码
1. 重启网络服务
- service networking restart
复制代码
1. 检查DNS配置
1. 测试网络连接
- ping -c 4 8.8.8.8
- ping -c 4 example.com
复制代码
如果服务无法启动,可以尝试以下方法:
1. 检查服务状态
1. 查看服务日志
- tail -f /var/log/nginx/error.log
复制代码
1. 手动启动服务并查看错误
1. 检查配置文件
如果服务器性能下降,可以尝试以下方法:
1. 检查系统资源使用情况
1. 检查磁盘I/O
1. 检查内存使用
1. 检查网络连接
1. 检查进程状态
8.2 日志分析
查看系统日志:
- # 查看系统日志
- cat /var/log/messages
- # 查看特定服务的日志
- grep "nginx" /var/log/messages
- # 实时查看日志
- tail -f /var/log/messages
复制代码
查看Nginx访问日志:
- # 查看访问日志
- cat /var/log/nginx/access.log
- # 查看错误日志
- cat /var/log/nginx/error.log
- # 分析访问日志,找出访问量最高的IP
- awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
- # 分析访问日志,找出访问量最高的页面
- awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
复制代码
查看PHP错误日志:
- # 查看PHP错误日志
- cat /var/log/php/error.log
- # 实时查看PHP错误日志
- tail -f /var/log/php/error.log
复制代码
查看数据库日志:
- # 查看MariaDB/MySQL错误日志
- cat /var/log/mysql/mysql.err
- # 查看PostgreSQL日志
- cat /var/log/postgresql/postgresql.log
复制代码
9. 结论
通过本指南,您已经学习了如何使用轻量级Alpine Linux搭建高效稳定的服务器环境。从基础安装到安全优化,我们详细介绍了每个步骤,并提供了实用的配置示例和代码。
Alpine Linux作为一个轻量级、安全且高效的Linux发行版,特别适合资源受限环境或需要高安全性的服务器场景。通过适当的配置和优化,您可以打造一个高性能、高可靠性的服务器环境。
请记住,服务器管理是一个持续的过程,需要定期更新、监控和维护。通过实施本指南中介绍的备份策略和监控措施,您可以确保服务器的长期稳定运行。
希望本指南能够帮助您成功搭建和管理您的Alpine Linux服务器。如果您有任何问题或需要进一步的帮助,请参考Alpine Linux官方文档或社区资源。 |
|