LAMP环境搭建心得

LAMP环境搭建

LAMP(linux + apache2 + mysql + php)环境是网站部署常用环境,本文介绍lamp环境搭建流程以及常见问题的解决方案。

文章目录

  • LAMP环境搭建
  • Ubuntu
    • 安装与启动
    • apache2配置
      • http虚拟主机
      • https虚拟主机
      • http重定向到https
      • WebDav网络驱动器
      • 启用代理
      • 禁止使用ip访问
    • mysql配置
      • 更改数据目录
      • 允许远程访问
      • 创建用户与数据库
    • 搭建wordpress
    • 搭建mediawiki
    • 搭建nextcloud
  • Mac
    • mac_apache2
    • mac_php
    • mac_mysql
  • Termux
  • 常见问题
    • 权限
    • wordpress相对路径错误
    • ERROR 2002: Can't connect to local MySQL server through socket
    • dpkg: warning: files list file for package missing, assuming package has no files currently installed
    • ERROR: unable to bind listening socket for address
    • Invalid command SSLEngine

Ubuntu

安装与启动

安装apache2mysqlphp

apt install apache2
apt install mysql-server
apt install software-properties-common && add-apt-repository ppa:ondrej/php && apt update
apt install php php-fpm php-mysql

一般服务都具有[start|stop|restart|status]这几种使用方法,如

service apache2 start
service mysql start
service php8.0-fpm start

apache2配置

主配置文件为/etc/apache2/apache2.conf,可以在主配置中修改全局配置。如果在虚拟主机中没有重写某项配置,则采用全局配置项。/etc/apache2/apache2.conf 中说明了配置文件的目录结构:

/etc/apache2/
|-- apache2.conf
| `-- ports.conf
|-- mods-enabled
| |-- *.load
| `-- *.conf
|-- conf-enabled
| `-- *.conf
`-- sites-enabled
`-- *.conf

apache2.conf包含了其他所有conf文件,为了方便可以只修改/etc/apache2/site-available/000-default.conf

http虚拟主机

虚拟主机可以在/000-default.conf文件中进行编辑。


ServerName [Your Domain]
DocumentRoot /var/www/html/
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

Require all granted


https虚拟主机

需要开启ssl模组 a2enmod ssl,虚拟主机可以在default-ssl.conf文件中进行编辑,并做软连接到sites-enable文件夹下,注意使用ll命令检查软连接是否成功建立。


ServerName [Your Domain]
DocumentRoot /var/www/html/

Require all granted

SSLEngine on
SSLCertificateFile .../m_public.crt
SSLCertificateKeyFile .../m.key
SSLCertificateChainFile .../m_chain.crt

https服务需要ssl证书支持,阿里云提供了相关说明
申请免费DV试用证书
Ubuntu系统Apache 2部署SSL证书
ssl证书控制台

http重定向到https

使对80端口的访问重定向到443端口,需要开启rewrite模组 a2enmod rewrite
/etc/apache2/site-available/000-default.conf设置配置80端口的虚拟主机。


ServerName [Your Domain]
    RewriteEngine on
    RewriteCond   %{HTTPS} !=on
    RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]

如果所有80端口的虚拟主机都想进行https重定向,那么可以只保留一个80端口虚拟主机,不写ServerName这一行。

WebDav网络驱动器

打开模组a2enmod dav dav_fs
创建WevDav访问用户数据库和用户pi htpasswd -c /var/www/validate/passwd.dav pi
修改访问用户数据库权限 chown root:www-data passwd.dav && chmod 640 passwd.dav
000-default.conf中添加配置项


# Alias命令用于起别名,将/var/www/文件夹映射为/webdav
        Alias /webdav /var/www/        
        
                Dav on
                AuthType Basic
                AuthName "webdav"
                AuthUserFile /var/www/validate/passwd.dav
                Require valid-user
        

重启apache2后,可以在windows客户机资源管理器中打开“此电脑“,在”计算机“选项卡下单击”映射网络驱动器“按钮。选择盘符,”文件夹“一栏输入\[Your Domain]\webdav,勾选”登陆时重新连接“(开机自动映射该驱动器),勾选”使用其他凭据连接“(如果用户名或密码有更改)。
注意: 使用webdav映射的网络驱动器无法访问包含index.html的目录。

启用代理

先开启相关模组 a2enmod rewrite proxy proxy_http,再在虚拟主机中添加代理配置。


ServerName [Your Domain]
SSLProxyEngine on
ProxyPass / https://[Your Domain]:7002/
ProxyPassReverse / https://[Your Domain]:7002/
SSLEngine on
SSLCertificateFile /var/www/validate/[Your Prefix]_public.crt
SSLCertificateKeyFile /var/www/validate/[Your Prefix].key
SSLCertificateChainFile /var/www/validate/[Your Prefix]_chain.crt

禁止使用ip访问

为什么要禁止ip访问页面呢?这样做是为了避免其他人把未备案的域名解析到自己的服务器IP,而导致ip被运营商封禁。
修改配置,原理是根目录在全局设置中已经被禁止访问。


# 禁止使用ip访问
ServerName [Your IP Address]
DocumentRoot /

mysql配置

mysql的配置项为/etc/mysql/mysql.conf.d/mysqld.cnf

更改数据目录

默认数据保存目录为/var/lib/mysql,可以自定义目录/www/mysql,授予mysql用户rwx权限,将默认目录下所有文件复制到新目录下,再修改mysqld.cnf中的datadir项,重启服务生效。

允许远程访问

mysqld.cnf中修改bind-address=0.0.0.0,重启服务生效。

创建用户与数据库

mysql服务启动后,可以通过mysql -uroot 命令在本机免密登录mysql的root账户进行数据库配置。

show databases; # 查看当前数据库列表
create user wp; # 创建用户wp
create database wordpress; # 创建数据库wordpress
grant all privileges on wordpress.* to 'wp'@'%'; # 设置访问权限
alter user 'wp'@'%' identified with mysql_native_password by 'newpasswd'; # 修改密码
flush privileges; # 生效配置

搭建wordpress

wget https://cn.wordpress.org/latest-zh_CN.tar.gz 下载最新版wordpress
tar zxvf latest-zh_CN.tar.gz 解压
将解压后的wordpress目录复制到虚拟主机目录下,赋予www-data用户rwx权限。
通过web访问该虚拟主机,按照网页提示开始配置wordpress。

搭建mediawiki

#下载mediawiki
wget https://gitee.com/mirrors/mediawiki/repository/archive/master.zip
#安装mediawiki依赖包
apt install php-curl php-intl php-xml php-mbstring php-apcu php-gd
apt install libicu-dev
#安装composer
php -r "copy('https://getcomposer.org/installer','composer-setup.php');";
php composer-setup.php --install-dir=/usr/bin --filename=composer;
composer self-update
#进入mediawiki目录
cd /var/www/html/mediawiki
composer install --no-dev
#重启apache2服务
systemctl restart apache2

默认在mediawiki目录下无LocalSettings.php文件,通过web访问虚拟主机将会根据向导创建该文件。创建完成后,手动下载并放置于mediawiki目录下。
如果想要随时检查运行环境是否满足,只需将LocalSettings.php改名就可以再看到向导。
下载皮肤如Tweeki,复制到skins目录下,然后在LocalSettings.php的末尾处添加以下两行。
wfLoadSkin( 'Tweeki' );
$wgDefaultSkin = "tweeki";

搭建nextcloud

下载地址:https://download.nextcloud.com/server/releases/nextcloud-22.1.0.zip

  1. 将nextcloud压缩包解压到虚拟主机目录下
  2. 在mysql创建用户nc及数据库nextcloud,赋予访问权限,修改密码
  3. 修改mysqld.cnf,添加一行sort_buffer_size = 16M,重启mysql服务
  4. chown -R www-data:www-data nextcloud && chmod -R 770 nextcloud
  5. 登录web主页进行配置即可

Mac

mac自带apache2和php,不用自己安装

mac_apache2

httpd -k start/stop/restart 开启/关闭/重启apache2服务
httpd -M 检查当前模组开启情况
apache2默认配置文件为/etc/apache2/httpd.conf,默认部署路径为/Library/WebServer/Documents
httpd.conf中搜索httpd-vhosts,取消该Include的注释,然后可以在/private/etc/apache2/extra/ httpd-vhosts.conf中编辑虚拟主机。

mac_php

开启php组件,需要修改httpd.conf,搜索php,取消注释加载php模组的行。
LoadModule php7_module libexec/apache2/libphp7.so

mac_mysql

通过homebrew安装mysql

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
brew install mysql

mysql.server start/stop 启动/停止mysql服务
默认配置文件为/usr/local/etc/my.cnf,默认data位置为/usr/local/var/mysql
想要修改数据目录,需要在my.cnf中修改datadir=...
想要开启远程访问,需要在my.cnf中修改bind-address=0.0.0.0
注意: 第一次远程登录mysql时需要在mac中确认“允许mysqld通过防火墙”!

Termux

搭建LNMP(linux+nginx+mariadb+php)环境

pkg install nginx mariadb php php-fpm

可选apache2替代nginx,apach2默认端口8080,配置文件/data/data/com.termux/files/usr/etc/apache2/httpd.conf
apache2重启方法为httpd -k restart
nginx重启方法为nginx -s reload
php-fpm重启方法为pkill php-fpm&&php-fpm
为了测试php是否可用,可以在虚拟主机目录下新建info.php作为测试,内容为,然后访问info.php

常见问题

权限

apache2用户组为www-data,请确认网站目录对www-datarwx权限。
mysql用户组为mysql,请确认data目录有rwx权限。
注意:
从根目录到达网站目录的所有目录对www-data都要有x权限。
从根目录到mysql数据目录的所有目录都要对mysqlx权限。

wordpress相对路径错误

需要安装相对路径插件,并按照插件说明在wp-config.php中添加四行语句。

define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_CONTENT_URL', '/wp-content');
define('DOMAIN_CURRENT_SITE', $_SERVER['HTTP_HOST']);

ERROR 2002: Can’t connect to local MySQL server through socket

如果mysql启动失败记录/var/log/mysql/error.log中提到无法创建socket,则是因为 Android使用了一个激活的特殊内核补丁CONFIG_ANDROID_PARANOID_NETWORK。此修补程序允许网络访问属于具有硬编码ID的特定特殊组的系统用户。可以通过将mysql用户添加到aid_inet和aid_net_raw组来修复它。
usermod -a -G aid_inet,aid_net_raw mysql # 解决安卓系统创建socket权限问题

dpkg: warning: files list file for package missing, assuming package has no files currently installed

解决方法:复制这些到一个txt文件里,批量替换内容,最终全部得到
apt install --reinstall ***
然后vim fix.sh,将修改后的内容复制到fix.sh中,chmod +x fix.sh,由于耗时较长,所以开启一个screen执行该脚本

ERROR: unable to bind listening socket for address

经查询,该目录未被创建,所以手动创建该目录并修改权限,然后再启动php-fpm8.0。
mkdir -p /run/php
chmod 777 /run/php
php-fpm8.0 # 启动fpm
pkill php-fpm # 关闭fpm

Invalid command SSLEngine

因为未开启ssl模组,执行a2enmod ssl开启。

你可能感兴趣的