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
安装apache2
、mysql
、php
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
主配置文件为/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
。
虚拟主机可以在/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
需要开启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证书控制台
使对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
这一行。
打开模组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访问
ServerName [Your IP Address]
DocumentRoot /
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; # 生效配置
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
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";
下载地址:https://download.nextcloud.com/server/releases/nextcloud-22.1.0.zip
sort_buffer_size = 16M
,重启mysql服务chown -R www-data:www-data nextcloud && chmod -R 770 nextcloud
mac自带apache2和php,不用自己安装
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
中编辑虚拟主机。
开启php组件,需要修改httpd.conf
,搜索php,取消注释加载php模组的行。
LoadModule php7_module libexec/apache2/libphp7.so
通过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通过防火墙”!
搭建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-data
有rwx
权限。
mysql用户组为mysql
,请确认data目录有rwx
权限。
注意:
从根目录到达网站目录的所有目录对www-data
都要有x
权限。
从根目录到mysql数据目录的所有目录都要对mysql
有x
权限。
需要安装相对路径插件,并按照插件说明在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']);
如果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权限问题
解决方法:复制这些到一个txt文件里,批量替换内容,最终全部得到
apt install --reinstall ***
然后vim fix.sh,将修改后的内容复制到fix.sh中,chmod +x fix.sh,由于耗时较长,所以开启一个screen执行该脚本
经查询,该目录未被创建,所以手动创建该目录并修改权限,然后再启动php-fpm8.0。
mkdir -p /run/php
chmod 777 /run/php
php-fpm8.0 # 启动fpm
pkill php-fpm # 关闭fpm
因为未开启ssl模组,执行a2enmod ssl
开启。