阿里云服务器安装almaLinux8系统从零开始配置Web环境配置防火墙MySQL常见问题排查完整教程
刚买了阿里云服务器的小伙伴,是不是对着那个黑漆漆的终端界面有点懵?别慌,我当年刚上手的时候也是一头雾水,但现在回头看,其实就那些步骤,理顺了特别简单。今天就把我踩过的坑都给你摊开说,照着做准没问题。
先说点前话,咱们得先把服务器”认识”清楚
你拿到手的新服务器,第一件事不是急着装这装那,得先确认几件事:系统版本对不对,能不能连得上,用户权限够不够。AlmaLinux 8是个RHEL系的发行版,跟CentOS 8那个”被弃用”的兄弟长得很像,但更靠谱,社区支持挺稳的。
先连上去:
ssh root@你的服务器IP
密码是你在阿里云控制台重置或者短信发送的那个。第一次登录会问 You are sure you want to continue connecting,打 yes 回车就行。
连上之后先别急着干活,先更新一下系统,这步不能省:
yum update -y
有的老铁嫌慢,跳过去了,后面出问题还找不到原因,真没必要省这一步。
装Web环境, LNMP 还是 LAMP?看你需求
AlmaLinux 8 自带 AppStream 仓库,装 Nginx + PHP + MySQL(现在叫 MariaDB)都挺方便。
第一步,装Nginx
yum install nginx -y
装完启动并设置开机自启:
systemctl start nginx
systemctl enable nginx
浏览器直接访问你的服务器IP,看到 “Welcome to nginx on AlmaLinux” 的页面,说明Nginx没问题。
但注意,阿里云默认安全组没开80端口,你得去控制台手动放行。去阿里云控制台 → ECS实例 → 安全组 → 配置规则 → 添加规则,端口范围填 80/80,授权对象 0.0.0.0/0,描述写 “HTTP”。
第二步,装PHP
AlmaLinux 8 的 AppStream 里自带 PHP 7.2,但我们通常想要更新的版本,比如 PHP 8.1:
yum install epel-release -y
yum install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y
yum-config-manager --enable remi-php81
yum install php php-fpm php-mysqlnd php-json php-mbstring php-xml php-curl php-gd php-zip -y
装完启动 PHP-FPM:
systemctl start php-fpm
systemctl enable php-fpm
然后配Nginx支持PHP,编辑配置文件:
vi /etc/nginx/conf.d/default.conf
找到 location ~ \.php$ 这段,把注释去掉,改成这样:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
注意 fastcgi_param 那行,SCRIPT_FILENAME 的路径要跟你的网站根目录对应,默认Nginx的根目录是 /usr/share/nginx/html。
改完重启Nginx:
systemctl restart nginx
测试一下PHP好不好用,在网站根目录建个文件:
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php
浏览器访问 http://你的IP/info.php,能看到PHP信息页面就OK。记得测完删掉这个文件,别留着泄露信息。
防火墙怎么配,别让安全组忘了
这一步很多人搞混,阿里云有两层”防火墙”:一层是阿里云控制台的安全组,一层是服务器里面的 firewalld。两个都得开,不然要么连不上,要么不安全。
阿里云安全组
刚才已经说了80端口,如果要用MySQL远程连接,记得也开3306端口(但强烈不建议直接开放,后面说)。
服务器内部 firewalld
AlmaLinux 8 默认用 firewalld:
systemctl status firewalld
如果没启动,先启动:
systemctl start firewalld
systemctl enable firewalld
开放常用端口:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
加完验证一下:
firewall-cmd --list-all
看到 ports: 80/tcp 443/tcp 和服务 http https 都在,就齐了。
千万别开3306让全世界访问,我后面会说怎么安全地远程连MySQL。
MySQL(MariaDB)安装和基本配置
AlmaLinux 8 自带的是 MariaDB 10.5,虽然不是最新版,但稳定够用。
yum install mariadb-server mariadb -y
systemctl start mariadb
systemctl enable mariadb
初始化安全设置:
mysql_secure_installation
会问你一系列问题:
- 设root密码:选 Y,设一个强密码
- 移除匿名账号:Y
- 禁止root远程登录:Y(安全起见)
- 移除test数据库:Y
- 重新加载权限表:Y
完事后登录看看:
mysql -u root -p
输入密码进去,看到 MariaDB [(none)]> 就说明成了。
建个数据库和用户
CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY '你的强密码';
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
注意用户 host 填 localhost,不是 %,这样别人就没法从外面连你的数据库了。
常见问题排查,我踩过的坑都给你列出来
问题一:Nginx 报 403 Forbidden
最常见的两个原因:
- 网站目录权限不对
- SELinux 拦了
先检查权限:
ls -la /usr/share/nginx/html/
确保 nginx 用户(nobody 或 nginx)能读。可以这样改:
chown -R nginx:nginx /usr/share/nginx/html
chmod -R 755 /usr/share/nginx/html
如果是 SELinux 的问题,看日志:
ausearch -m avc -ts recent
临时关掉 SELinux 测试(不推荐长期关):
setenforce 0
如果关掉后能访问了,那就是 SELinux 的锅,正确做法是给目录加标签:
semanage fcontext -a -t nginx_httpd_content_t "/usr/share/nginx/html(/.*)?"
restorecon -Rv /usr/share/nginx/html
再 setenforce 1 恢复。
问题二:PHP 页面显示空白或者 500 错误
先看错误日志:
tail -f /var/log/php-fpm/www-error.log
还有 Nginx 的错误日志:
tail -f /var/log/nginx/error.log
常见原因:
- PHP-FPM 没启动:
systemctl status php-fpm - 配置文件写错了:
nginx -t检查语法 - 文件权限问题:跟上面一样
问题三:MySQL 连不上,1045 或者 2003 错误
先看本地能不能连:
mysql -u root -p
能连上说明服务没问题。如果远程连不上,先看 firewalld 和阿里云安全组。
如果确定要远程连接(不推荐,但如果非要做),正确的做法是:
- 在 MySQL 里给 root 或者新建用户开远程权限(前面说了,最好别这样,用专用用户)
CREATE USER 'remote_user'@'%' IDENTIFIED BY '你的密码';
GRANT SELECT, INSERT, UPDATE ON myapp.* TO 'remote_user'@'%';
FLUSH PRIVILEGES;
- 修改 MariaDB 配置,监听所有接口:
vi /etc/my.cnf.d/server.cnf
在 [mysqld] 下面加:
bind-address = 0.0.0.0
- 重启 MariaDB:
systemctl restart mariadb
- 防火墙开3306(只对你自己的IP开放,别开 0.0.0.0/0):
firewall-cmd --permanent --add-rich-rule="rule family=\"ipv4\" source address=\"你的IP/32\" port port=\"3306\" protocol=\"tcp\" accept"
firewall-cmd --reload
- 阿里云安全组也对应开放3306端口,授权对象填你的IP。
这样即使被扫到,也只有你的IP能连。
问题四:系统空间不够用
新手很容易忽略这步,买完服务器啥都不管,跑几天磁盘就满了。
先看看哪里占空间:
df -h
du -sh /var/log/*
du -sh /var/lib/mysql/*
常见”吃”空间的:
- MySQL 的 binlog 日志,可以设置过期自动清理
- Nginx 和 PHP-FPM 的错误日志,别开太多详细日志
- 旧的内核包,yum 留了一堆没删
清理旧内核:
package-cleanup --oldkernels --count=1
只保留一个旧内核就行。
问题五:重启服务器后服务没自动起来
检查服务状态:
systemctl is-enabled nginx
systemctl is-enabled php-fpm
systemctl is-enabled mariadb
如果显示 disabled,就手动开启:
systemctl enable nginx php-fpm mariadb
最后说几点实用的建议
- 备份备份备份,重要数据别只放一台机器上,用阿里云的快照功能定期备份系统盘
- 别用 root 干所有事,搞个普通用户 sudo 操作,root 只用来装软件
- 定期更新系统,
yum update -y设个 cron 任务每月跑一次 - 别开太多端口,安全组规则越简洁越好,用不到的端口一律关着
- 日志要看,出问题先看日志,别瞎猜
折腾服务器就是这样,一开始觉得复杂,真动手跑一遍就熟了。我当年也花了一整天才把环境搭好,现在回头看也就是那么回事。有啥具体问题,去翻翻官方文档或者日志,大多数问题都能找到答案。
祝你部署顺利,服务器跑得稳当!
