查看“︁建站/LAMP”︁的源代码
←
建站/LAMP
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
如果您不了解某个命令的具体作用,请按照本文提供的内容执行,都是实际验证过的;参考资料为写文章时的部分操作的依据,环境不同强行复刻参考资料的文章或导致出现问题。 命令中出现 <u>下划线</u> 样式的是需要根据你的具体情况修改的内容,包括但不限于用户名、密码、文件名、版本号。 截止2023-08,PHP版本为8.1.2、MySQL版本为8.0.34;非大版本更迭(如PHP7-->8、Mysql5-->8)操作基本通用,但请注意配置文件路径或受版本号影响。 == 我需要做什么? == <blockquote>执行[[#安装环境]]、[[#配置环境]]、[[#进阶配置]]流程(若不需要则跳过<code>多站点设置</code>),根据需要选择是否执行其他流程,然后安装:[[建站/框架|'''框架''']]</blockquote> == 安装环境 == === 更新软件包 === 先运行:<code>sudo apt-get update</code> 和 <code>sudo apt-get upgrade</code>更新软件包,以防遇到各种奇怪问题(包括但不限于缺少文件及依赖)。 * 若执行命令后短期内安装软件提示有进程锁,可能是后台还在更新,等几分钟就行。 === 安装Apache2 === 安装:<code>sudo apt-get install apache2 -y</code> 查看运行状态:<code>service apache2 status</code> 绿点就是运行中。 * <u>启动</u>/<u>停止</u>:<code>sudo service apache2 <u>start</u>/<u>stop</u></code> 在浏览器输入服务器ip/url,就能看到默认的欢迎页了。 * 如果访问失败,先看看实际访问的url,如果是https,则改为http; * 还是无法访问,在命令行运行: <code>apache2</code> ,提示“''/etc/apache2/apache2.conf 第 80 行出现语法错误……''”,则运行:<code>source /etc/apache2/envvars</code> 再访问ip地址[https://askubuntu.com/questions/927355/ubuntu-apache2-defaultruntimedir-must-be-a-valid-directory-absolute-or-relative <sup><nowiki>[参考]</nowiki></sup>]; * 还是看不到请尝试刷新页面、新建隐私窗口访问、换个浏览器访问。 === 安装MySQL === 安装:<code>sudo apt install mysql-server -y</code> 查看运行状态:<code>service mysql status</code> 绿点就是运行中。 * <u>启动</u>/<u>停止</u>:<code>service mysql <u>start</u>/<u>stop</u></code>; 新版mysql初始是没密码的,以root身份在终端输入:<code>mysql</code>,进入mysql命令行; 输入指令:<code>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<u>你要设置的密码</u>';</code> * 显示ok就是设置成功,注意保留末尾的英文分号,下同。 输入 <code>exit</code> 并回车退出。 以后再进入mysql命令行就需要输入:<code>mysql -u root -p</code>,回车并输入root密码。 创建数据库(在mysql命令行内运行):<code>CREATE DATABASE <u>数据库名</u>;</code> === 安装PHP === 安装(仅PHP与apache2和mysql组件):<code>sudo apt install php libapache2-mod-php php-mysql -y</code> * 如果你要使用mediawiki或typecho框架,可以用以下命令一次性安装所需拓展: * mediawiki框架:<code>sudo apt-get install php php-apcu php-common php-intl php-json php-mbstring php-xml libapache2-mod-php php-mysql php-curl -y</code> * typecho:<code>sudo apt install php libapache2-mod-php php-mysql php-mbstring -y</code> == 配置环境 == === 修改<code>index.php</code>为默认资源: === 编辑配置文件:<code>nano /etc/apache2/mods-enabled/dir.conf</code> * 将<code>index.php</code>设为最优先项(排在第一位即可,注意保留前后空格)。 重启apacha2服务激活设置:<code>sudo systemctl restart apache2</code> === 查看PHP信息/验证: === 在网页目录内新建php文件(<code>nano /var/www/html/info.php</code>),内容为以下三行:<syntaxhighlight lang="php" line="1"> <?php phpinfo (); ?> </syntaxhighlight>然后访问 <code>url或ip/info.php</code> ,能正常显示就说明PHP一切正常,也可以顺便查看php版本等系统信息。 done,到这里就完成了。如果单网站,直接把网站资源文件放web目录(<code>/var/www/html/</code>)内就行了。 * 如果网站强制跳转https,无法进行初始化设置,可能是默认的ssl文件的锅,可以参考[[#ssl证书]]进行设置。 == 进阶配置 == === 修改站点配置文件-多站点设置 === 如果只有一个网站请跳过本节 建议网站资源不要存放在<code>/html/</code>主目录下,为站点各自新建目录<sup>(文件操作命令:[[Linux&Win系统及浏览器使用笔记#文件处理|#文件处理]])</sup>。 以我三个站点为例,他们的网站资源文件分别存储在: * <code>mkdir <u>/var/www/html/mediawiki</u></code> * <code>mkdir <u>/var/www/html/typecho</u></code> * <code>mkdir <u>/var/www/html/</u><u>scio.icu</u></code> 复制配置文件: * 进入配置文件目录:<code>cd /etc/apache2/sites-available/</code> * 拷贝配置文件:<code>sudo cp 000-default.conf <u>mediawiki.conf</u></code> * 拷贝配置文件:<code>sudo cp 000-default.conf <u>typecho.conf</u></code> * 如果需要禁用某个默认配置文件:<code>a2dissite <u>xxxx</u></code> ** 我将默认配置文件用于主域,如果你不想的话可以禁用默认配置文件。 修改配置文件(在配置文件目录内): * <code>nano 000-default.conf</code> ** <code>DocumentRoot <u>/var/www/html/scio.icu/</u></code> ** <code># 网站资源位置</code> ** <code>ServerName <u>scio.icu</u></code> ** <code># 网站域名</code> ** <code>ServerAlias <u>www.scio.icu</u></code> ** <code># 域名别名、其他域名,没有可以不写。</code> * <code>nano <u>mediawiki.conf</u></code> ** <code>DocumentRoot <u>/var/www/html/mediawiki/</u></code> ** <code>ServerName <u>wiki.scio.icu</u></code> * <code>nano <u>typecho.conf</u></code> ** <code>DocumentRoot <u>/var/www/html/typecho/</u></code> ** <code>ServerName <u>blog.scio.icu</u></code> 激活配置文件: * <code>a2ensite 000-default.conf</code> * <code>a2ensite <u>mediawiki.conf</u></code> * <code>a2ensite <u>typecho.conf</u></code> 重新加载 apache2: * <code>systemctl reload apache2</code> 注意: * 如果在诸如mediawiki、typecho、wp等框架初始化设置时填写了ip/域名信息,但最后实际使用(解析)的域名与之不同,则找到框架对应的设置文件,将其修改成正确的信息即可<sup>(参考本系列文章对应框架的子文章或善用搜索引擎)</sup>; * 建议同步修改log文件存放位置,不然混在一起会较难分析,参考[[#日志文件log]]所示例的两行。 === ssl证书 === 由于阿里云政策更改,暂无法一直白嫖为期一年的免费证书,现采用 Let's Encrypt 作为替代方案: 通过[https://certbot.eff.org/ Certbot]客户端实现获取与自动更新证书,详细指南可进入其官网按照提示选择您的环境([https://certbot.eff.org/instructions?ws=apache&os=ubuntufocal 例如ubuntu+apache])并复制粘贴所提供的命令:<syntaxhighlight lang="shell" line="1"> # ubuntu默认附加了snap,但部分系统(如linuxmint)没有,可以参考官网按系统分的操作指南:https://snapcraft.io/docs/installing-snapd sudo snap install --classic certbot # 安装certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot # 使certbot指令可用 sudo certbot --apache # 获取证书,按照提示操作,最后生成证书时,如果提供了www开头的域名但你并未启用它,请通过数字选择需要生成证书的域名,不然会失败,数字间按照提示用英文逗号、空格分离即可。 </syntaxhighlight> * 安装好后若新增了站点就可以运行命令:<code>sudo certbot --apache</code> 重走一遍安装证书的流程。 * 记得开启自动更新证书(按照指南通过snap安装的默认即开启此功能,可按照其官网给出的测试命令下,或运行<code>systemctl list-timers</code>看是否有<code>snap.certbot.renew.service</code>条目即可; * 更新是实时的,没那么多延迟,浏览器刷新<sup>(<code>ctrl+shift+r</code> / <code>ctrl+f5</code>)</sup>一下页面缓存,点击域名左侧的小锁,不同浏览器操作不同,但都为详细信息处,可见证书颁发者为<code>Let's Encrypt</code>,即大功告成。 Cerbot会自动修改配置文件,下方引用的为原内容(通过链接证书文件的方式),现已弃用:<blockquote>用途:使站点支持https,在现代这是一个不可缺少的功能。 * 阿里云购买的域名,可以在阿里云搜索“'''数字证书管理服务'''”,进入证书控制台,在左侧选择“'''SSL证书'''”,点击“'''免费证书'''”,再点击“'''创建证书'''”,再点击“'''申请证书'''”,'''输入域名信息'''后提交审核,中间会自动创建一个dns解析记录(证书颁发后可删除),审核看脸一般1-15分钟,审核通过后点击“'''下载'''”,下载“'''Apache'''”栏。将下载一份压缩文件,里面是一个key和两个crt文件。 * cf购买或经过cf代理的域名默认就是https,不需要任何额外的设置。 * 其他情况可以用免费证书:[https://letsencrypt.org/ Let's Encrypt] 以阿里云为例,如果用的宝塔,设置页面直接上传证书就行了,这里说如何手动操作: * 新建ssl文件夹:<code>mkdir /etc/apache2/ssl</code> * 将证书文件(解压后的)上传到该目录(建议通过sFTP); * 启用ssl模块:<code>a2enmod ssl</code>,不报错就是成功。 * 进入配置文件所在目录: <code>cd /etc/apache2/sites-available/</code>; * 编辑配置文件(直接编辑[[#修改站点配置文件-多站点设置]]提到的文件即可): ** <code>nano 000-default.conf</code> ** 添加的内容见:[[#default-ssl.conf]] * 重启apache2:<code>systemctl reload apache2</code> * done,就可以用https访问网站了。 参考资料:[https://www.alibabacloud.com/help/en/ssl-certificate/user-guide/install-ssl-certificates-on-apache-2-servers-that-run-ubuntu install-ssl-certificates-on-apache-2-servers-that-run-ubuntu]、[https://www.digicert.com/kb/csr-ssl-installation/ubuntu-server-with-apache2-openssl.htm csr-ssl-installation/ubuntu-server-with-apache2-openssl]</blockquote> === 禁止访问目录 === 默认是可以访问目录的,这样就可以将文件一览无余,也会有很多安全与隐私隐患,可以在文件夹下放入index.php/html等会被web服务器软件解析的主页资源文件使目录不可见,但对于文件夹稍多点的未免太过麻烦,况且一看就不是很靠谱。可以通过修改apache配置文件限制: * <code>nano /etc/apache2/apache2.conf</code> ** ※ 善用ctrl+w搜索关键词。 * Directory标签内有一行是:<code>Options Indexes</code>(或<code>Options Indexes FollowSymLinks</code>),改为:<code>Options None</code> == ——到此已结束,此为分隔符—— == ※ 到目前为为止已经部署好了web服务,但为了您的体验,请至少开启SFTP以便于后续传输文件。 == 体验增强 == === 开启SFTP === 服务器端安装ssh:<code>sudo apt install ssh</code> 修改配置:<code>sudo nano /etc/ssh/sshd_config</code> 在末尾添加如下行:<syntaxhighlight lang="text" line="1"> Match group sftp ChrootDirectory /home X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp </syntaxhighlight>重启ssh服务:<code>sudo systemctl restart ssh</code> 查看运行状态:<code>sudo systemctl status ssh</code> 绿点就是运行中。 * 启动/停止: <code>sudo service ssh start/stop</code> ----客户端建议使用[https://www.wftpserver.com/ftprush.htm FTP Rush],跨平台、免费、易用。 * 文件--站点管理器--新建<sup>(加号)</sup> * 输入ip地址,端口默认的22,用户名root,密码输入root密码,链接即可。 * 文件传输还是有GUI方便。 ----参考资料(如果需要更详细的设置权限):https://linuxhint.com/setup-sftp-server-ubuntu/ FTP部分可以参考:[https://help.aliyun.com/zh/simple-application-server/use-cases/build-an-ftp-server 搭建FTP服务器 - 阿里云]、[https://ubuntu.com/server/docs/service-ftp FTP服务器 - Ubuntu],我使用的是SFTP,因为觉得方便。 === 远程访问数据库 === 默认只有本地设备可以访问数据库,不影响正常的web服务,但是如果有远程控制数据库的需求,则需要进行一些设置: 编辑配置文件: * <code>nano /etc/mysql/mysql.conf.d/mysqld.cnf</code> * 以下两行注释掉,或者改成(意思是所有ip都可以访问,127.0.0.1的意思是仅本地设备可访问): ** <code>bind-address = '''0.0.0.0'''</code> ** <code>mysqlx-bind-address = '''0.0.0.0'''</code> *“[mysqld]”下面添加一行(因为有些数据库管理客户端可能还不兼容这种加密方式): **<code>default_authentication_plugin=mysql_native_password</code> 重启mysql: * <code>systemctl restart mysql</code> 如果连接报错,则'''在mysql命令行内'''执行: * <code>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '<u>数据库root密码</u><nowiki/>' WITH GRANT OPTION;</code> 如果还是报错,则'''在mysql命令行内'''依次执行:<blockquote><code>USE mysql;</code> <code>CREATE USER 'root'@'%' IDENTIFIED BY '<u>你的数据库root密码</u>';</code> <code>GRANT ALL ON *.* TO 'root'@'%';</code> <code>FLUSH PRIVILEGES;</code></blockquote>如果还是报错,请检查服务器的防火墙设置,阿里云的可以参考:[[建站/服务器#防火墙设置]] ※ 每次更改设置后,都需要重启数据库才能确保生效。 ※ 也可以服务器安装phpMyAdmin,在web端通过这种工具管理数据库。 ----远程连接数据库: * 命令行:<code>mysql -u root -h <u>服务器IP地址</u> -p</code> * 跨平台开源客户端:[https://dbeaver.io/ DBeaver] === 备份/恢复数据库 === 可以通过DBeaver这类工具进行便捷的操作。 或命令行操作,并通过ftp传输文件: * 导出:<code>mysqldump -u root -p <u>Unraid</u> > <u>/var/www/html/typecho.sql</u></code> * 导入:<code>mysql -u root -p <u>Unraid</u> < <u>/home/anon/app/Unraid.sql</u></code> ** 导入前需要该数据库存在,按[[#安装MySQL]]创建数据库。 * 回车后输入数据库密码,从左到右<u>下划线部分</u>分别是:数据库名称、sql文件路径。 * 参考资料:[https://stackoverflow.com/questions/17666249/how-do-i-import-an-sql-file-using-the-command-line-in-mysql how-do-i-import-an-sql-file-using-the-command-line-in-mysql] === robots.txt === 由于我忘记设置robots.txt,有两天访问wiki异常的缓慢,刚开始的时候明明挺流畅,而且最近较大的编辑都是在本地,直接导入到线上的,数据库臃肿不可能这么快,还没一周。然后看阿里云服务器控制台带宽一直被占满,就系列站点的体量来说,绝对不可能。然后想到自己还没设置robots文件。 导出日志文件一看,2023-08-29 00:00 到 10:02:30 这十个小时,有36876个请求,其中Crawlers(没掩盖身份的爬虫)占了33319个,33,173个都是(自称)亚马逊bot,不屏蔽爬虫,正常用户根本无法访问网站(不过就这个请求量,1c2g的机子,带宽能到4Mbps也能轻松应对,爬虫大概只用了1.5-2Mbps(但是全程跑满),所以就普通个人博客的访问体量来说,这个配置完全足够,可惜那时我是1Mbps)。 设定也很简单,创建<code>robots.txt</code>文件放在网站根目录下即可,内容填写参考:<pre> User-agent: * Disallow: / User-agent: Googlebot Disallow: User-agent: BaiDuSpider Disallow: User-agent: Bingbot Disallow: User-agent: DuckDuckBot Disallow: User-agent: Slurp Disallow: User-agent: yandex Disallow: </pre>前两行是所有bot标识的都禁止访问,后面的是例外项<sup>(谷歌/百度/bing/ddg/yahoo/yandex搜索引擎)</sup>,指允许这些bot访问。可以根据需要进行增删[https://www.robotstxt.org/ <sup><nowiki>[参考]</nowiki></sup>]。但这只能阻止有规范的爬虫,因为很多恶意爬虫不会管规范文件。 === 日志文件log === 默认存储在 <code>/var/log/apache2/</code> 中,<code>access.log</code>是访问日志,可以使用[[Linuxmint安装的软件与工具的记录#GoAccess(web日志分析)|GoAccess]]分析日志,但默认的并不好用,如果需要计数,可以考虑使用第三方服务(注意隐私问题):[https://v6.51.la/ 51.LA]、[https://github.com/arp242/goatcounter goatcounter]、[https://www.atlassian.com/software/statuspage Statuspage]…… 如果是多站点,默认是所有log信息都存储在一起的<sup>(因为我们前面没修改此条目)</sup>,可以修改配置文件来进行分离:无特殊用途则http(80)、https(443)两栏的都改了就行 * <code>ErrorLog ${APACHE_LOG_DIR}/<u>error_scio.icu.log</u></code> * <code>CustomLog ${APACHE_LOG_DIR}/<u>access_scio.icu.log</u> combined</code> 以Mediawiki生成的日志为例,会有一些垃圾数据、数据冗余,可以在分析日志前将其尽数删除:(利用办公软件的自动筛选功能,可以输入关键词只陈列含关键词的行并将之删除;或写个脚本) * <code>old</code>、<code>limit</code>、<code>edit</code>、<code>day</code>、<code>ico</code>、<code>load</code>、<code>returnto</code>、<code>self</code>、<code>login</code>、<code>logo</code>、<code>resources</code>、<code>images</code>、<code>type</code>、<code>logid</code>、<code>history</code>、<code>action</code>、<code>diff</code> * <code>%E5%9C%A3%E7%8E%8BH%E7%9A%84%E7%A7%98%E5%AF%86%E5%9F%BA%E5%9C%B0%E5%AF%BC%E8%88%AA%E9%A1%B5</code>(“圣王H的秘密基地导航页”的urlcode) * <code>%E7%89%B9%E6%AE%8A:</code>(“特殊:”的urlcode) * <code>MediaWiki:</code> 其他通用的: * <code>bot</code>、<code>spider</code>、<code>301</code>、<code>302</code>、<code>403</code>、<code>404</code>、<code>408</code>、<code>500</code>、<code>Go-http-client</code>、<code>internetnl</code>、<code>curl</code>、<code>python</code>、<code>"-" "-"</code>、<code>OPTIONS</code>、<code>POST</code>、<code>admin</code>、<code>feed</code>、<code>usr/</code>、<code>Google-InspectionTool</code> == 后续维护 == ===卸载mysql=== 停止mysql:<code>service mysql stop</code> 卸载 mysql-common:<code>sudo apt remove mysql-common</code> 卸载 mysql-server:<code>sudo apt autoremove --purge mysql-server</code> 清理残留:<code>dpkg -l|grep ^rc|awk '{print$2}'|sudo xargs dpkg -P</code> 查看依赖项:<code>dpkg --list|grep mysql</code>(如果php安装了mysql的拓展应该还有两个,不过这个不影响,其他安装mysql附带的没了就行) 其他参资料:[https://www.fosslinux.com/96135/how-to-properly-uninstall-mysql-server-in-ubuntu.htm How to properly uninstall MySQL Server in Ubuntu for fosslinux]、[https://askubuntu.com/questions/172514/how-do-i-uninstall-mysql How do I uninstall MySQL? for askubuntu] === 无法重启apache2 === 修改配置(如ssl)导致的: * https://askubuntu.com/a/848962 * 输入:<code>apachectl stop</code>,查看报错内容,会说什么文件第几行有错误,修正了再输入该命令没有报错即可。 * 然后重启apache2:<code>systemctl reload apache2</code> 提示AH00558: * https://www.digitalocean.com/community/tutorials/apache-configuration-error-ah00558-could-not-reliably-determine-the-server-s-fully-qualified-domain-name * 一堆看不懂,我是:<code>nano /etc/apache2/apache2.conf</code> * 添加:<code>ServerName 127.0.0.1</code> 到文件末尾; * 验证是否报错:<code>apachectl configtest</code> * 重启apache2:<code>systemctl reload apache2</code> 实在不行可以重装系统,重新配置环境什么的,可能比研究更快。 === <s>default-ssl.conf</s> === 见[[#ssl证书]]章节,由于使用[https://certbot.eff.org/ Certbot]客户端自动更新Let's Encrypt签发的证书,本节已经作废。 很多教程让修改启用ssl模块后新增(或本就存在)的<code>default-ssl.conf</code>文件,比如阿里云的那个参考文章,但是遇到了很多问题,我就直接编辑了原配置文件,一点问题都没。以下内容,都摘自该ssl配置文件,然后进行了些修改: 添加/编辑: * <code>ServerName <u>scio.icu</u></code>:网站域名,要与证书绑定的域名一致(有别名的话也可以使用别名参数,前提是证书包括别名)。 * <code>DocumentRoot <u>/var/www/html/scio.icu/</u></code>:网站对应的路径。 * <code>SSLCertificateFile /etc/apache2/ssl/<u>scio.icu_public.crt</u></code>:对应的.crt证书文件。 * <code>SSLCertificateKeyFile /etc/apache2/ssl/<u>scio.icu.key</u></code> :对应的.key私钥文件。 * <code>SSLCertificateChainFile /etc/apache2/ssl/<u>scio.icu_chain.crt</u></code>:对应的.crt chain文件。 删除/注释掉(行头添加“#”): * <code># SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem</code> * <code># SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key</code> 其他内容大都留着。 最终成品示例(默认的是“<code><VirtualHost *:80></code>”,上述<u>下划线</u>部分修改成自己的信息后,在配置文件最后复制粘贴即可): <code>nano 000-default.conf</code>(我主站的配置文件): <pre><VirtualHost *:443> ServerAdmin webmaster@localhost ServerName scio.icu ServerAlias www.scio.icu DocumentRoot /var/www/html/scio.icu/ SSLCertificateFile /etc/apache2/ssl/scio.icu_public.crt SSLCertificateKeyFile /etc/apache2/ssl/scio.icu.key SSLCertificateChainFile /etc/apache2/ssl/scio.icu_chain.crt ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost></pre> [[Category:建站]]
返回
建站/LAMP
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
站点信息
更新日志
所有内容
三部曲
互联网
提问的艺术
策略与名词目录
建站
LAMP
WIKI功能
互联网
慢讯
OSINT项目
工具
链入页面
相关更改
特殊页面
页面信息