在 Debian 上使用 MariaDB 搭建 Web 开发环境的实操指南
一 环境准备与 MariaDB 安装
sudo apt update && sudo apt install mariadb-server mariadb-client -ysudo systemctl status mariadbsudo mysql_secure_installation(设置 root 密码、移除匿名用户、禁止 root 远程登录、删除测试库等)。sudo mysql 可登录;如需兼容工具(如 phpMyAdmin)或远程管理,可改为密码认证:
sudo mysqlALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password;ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongRootPass!';FLUSH PRIVILEGES;mysql -u root -p 登录。二 选择栈与快速部署
sudo apt install nginx php-fpm php-mysql/etc/php/8.2/fpm/pool.d/www.conf 中设置 listen = /run/php/php8.2-fpm.sockserver {
listen 80;
root /var/www/html;
index index.php index.html;
location / { try_files $uri $uri/ =404; }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
sudo systemctl restart php8.2-fpm && sudo systemctl reload nginxsudo ufw allow 'Nginx Full'sudo apt install certbot python3-certbot-nginx && sudo certbot --nginx -d your_domain.comsudo apt install apache2 libapache2-mod-php php-mysqlsudo a2enmod rewrite<VirtualHost *:80>
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
sudo systemctl restart apache2sudo apt install php8.2 php8.2-fpm php8.2-mysql ...。三 数据库与权限配置
mysql -u root -pCREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongAppPass!';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
CREATE USER 'appuser'@'10.0.0.%' IDENTIFIED BY 'StrongAppPass!';GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'10.0.0.%';FLUSH PRIVILEGES;sudo sed -i 's/^bind-address=.*/bind-address=0.0.0.0/' /etc/mysql/mariadb.conf.d/50-server.cnfsudo ufw allow 3306/tcp(仅对可信网段开放)四 应用接入与连接示例
<?php
$host = '127.0.0.1';
$db = 'appdb';
$user = 'appuser';
$pass = 'StrongAppPass!';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
echo "Connected successfully";
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring.datasource.url=jdbc:mariadb://localhost:3306/appdb
spring.datasource.username=appuser
spring.datasource.password=StrongAppPass!
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
jdbc:mariadb://。五 开发最佳实践与安全加固
mysqldump -u appuser -p appdb > appdb.sql),重要变更前先备份。public/ 为 Web 根),避免将 .env 等敏感文件纳入版本控制。