Tim's Web Home

Gentoo WWW server on the T website

Gentoo WWW server, LAMP:

安装配置 WWW 服务, LAMP : Linux + Apache + Mariadb + PHP

  • 安装相关组件
      #安装三大组件,注意设置相关 USE
      root # emerge -av apache mariadb php
      #编辑相关配置文档
      # /etc/apache2/httpd.conf (可保持默认不配置)
      # /etc/conf.d/apache2  需配置  "APACHE2_OPTS"	增加 "-D PHP -D STATUS"
      # /etc/apache2/modules.d/00_default_settings.conf (可保持默认不配置)
      # /etc/apache2/vhosts.d/default_vhost.include (可保持默认不配置), 可配置  "DocumentRoot",  "Options  Indexes"  可查看目录
      # /etc/apache2/vhosts.d/00_default_vhost.conf (可保持默认不配置), 可配置  "Listen 80"
      # /etc/apache2/modules.d/70_mod_php.conf (可保持默认不配置)
      # /etc/mysql/my.cnf (可保持默认不配置)
      # /etc/php/apache2-php7.x/php.ini  (可保持默认不配置), 可配置  "ignore_repeated_errors",  "ignore_repeated_source",  "default_charset",  "date.timezone"等
      #测试配置档语法
      root # /etc/init.d/apache2 configtest
      #systemd:
      root # apache2ctl configtest
      #启动httpd/apache2服务
      root # /etc/init.d/apache2 start
      #systemd:
      root # systemctl start apache2
      #设置服务开机启动
      root # rc-update add apache2 default
      #systemd:
      root # systemctl enable apache2
    
  • 配置mariadb
      #创建数据库,设置适当的权限,并创建根密码,输入命令后根据提示输入密码即可
      root # emerge --config dev-db/mariadb
      #启动 mariadb 服务
      root # /etc/init.d/mysql start
      #systemd:
      root # systemctl start mariadb.service
      #设置服务开机启动,平时使用WWW服务用不上数据库时,可不设置开机启动
      root # rc-update add mysql default
      #systemd:
      root # systemctl enable mariadb.service
      #进入数据库管理
      root # mysql -u root -p
      #新建用户
      MariaDB [(none)]> CREATE USER 'xxx'@'localhost' IDENTIFIED BY 'xxx';
      #赋予 xxxx的 完全操作权限
      MariaDB [(none)]> GRANT ALL PRIVILEGES ON xxx.* TO 'xxx'@'localhost';
      MariaDB [(none)]> FLUSH PRIVILEGES;
      #创建数据库
      MariaDB [(none)]> CREATE DATABASE xxxxxxx;
      #创建UFT8编码的数据库
      MariaDB [(none)]> CREATE DATABASE xxxxxx CHARACTER SET = utf8 COLLATE = utf8_general_ci;
      #查看数据库
      MariaDB [(none)]> show databases;
      #删除数据库
      MariaDB [(none)]> drop database xxxxxx;
      #查看sql_mode
      MariaDB [(none)]> select @@global.sql_mode;
      MariaDB [(none)]> SELECT @@SESSION.sql_mode;
      #设置sql_mode
      MariaDB [(none)]> SET GLOBAL sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    
  • 需设置防火墙和SElinux
      #gentoo 中我没使用SElinux, 以下操作是在redhet系中的操作
      #判断是否是SElinux问题,先用 getenforce 查看,再用 setenforce 0 先关闭 SElinux, 测试问题是否已经解决
      root # sestatus
      root # getenforce
      root # setenforce 0
      root # setenforce 1
      #如果是SElinux问题,查看/var/log/messages中的信息查找解决方案,如果SElinux错误信息没有写入 /var/log/messages,请先安装setroubleshoot
      root # grep -r sealert /var/log/messages*
      root # sealert -l xxxxxxx-xxxxxx-xxxxxxx-xxxxxx-xxxxxx
      #在SElinux 打开的情况下,php无法写文件,解决:
      root # semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/count.txt"
      #或者
      root # semanage fcontext -a -t public_content_rw_t "/var/www/html/count.txt"
      root # restorecon -v /var/www/html/count.txt
      root # ls -Z /var/www/html/count.txt
      root # setsebool -P allow_httpd_anon_write 1
      root # systemctl restart httpd.service
    
  • 自制凭证 https
      #建立一把给 Apache 使用的私钥档案,输入4位以上密码
      root # cd /etc/ssl/apache2
      root # openssl genrsa -aes128 2048 > tim.key
      #将刚刚建立的档案里面的密码取消掉
      root # mv tim.key tim.key.raw
      root # openssl rsa -in tim.key.raw -out tim.key
      root # rm tim.key.raw
      root # chmod 400 tim.key
      #建立所需要的最终凭证档,注意多加一個序号 (SERIAL) 的参数,避免多次制作密钥产生错误,以下命令建立凭证档时会询问配置相关信息,例如: CA, ONTARIO, TORONTO, TIM GROUP, TIM Science Technology, tiimmm.com, tim@tiimmm.com
      root # openssl req -utf8 -new -key tim.key -x509 -days 3650 -out tim.crt -set_serial 20180101
      #修改00_default_ssl_vhost.conf的內容,使用自制凭证
      root # vim /etc/apache2/vhosts.d/00_default_ssl_vhost.conf
      root # /etc/init.d/apache2 restart
      #systemd:
      root # systemctl restart apache2
    
     file     /etc/apache2/vhosts.d/00_default_ssl_vhost.conf
      #使用自制凭证
      SSLCertificateFile /etc/ssl/apache2/tim.crt
      SSLCertificateKeyFile /etc/ssl/apache2/tim.key
    
  • 申请 Let's Encrypt SSL 证书, Let's Encrypt 的官方网站 https://letsencrypt.org , 使用 acme.sh
      #此操作在oraclelinux7中测试, 安装 acme.sh
      root # curl  https://get.acme.sh | sh -s email=my@example.com
      # 生成证书
      root # acme.sh  --issue  -d  example.com  --apache
      # 安装证书
      root # mkdir /etc/httpd/sslcert
      root # acme.sh --install-cert -d example.com --cert-file /etc/httpd/sslcert/cert.pem --key-file /etc/httpd/sslcert/key.pem --fullchain-file /etc/httpd/sslcert/fullchain.pem --reloadcmd "service httpd force-reload"
    
  • 配置网站,由 HTTP 转成 HTTPS
      #此操作在oraclelinux7中测试, 安装 SSL 模块
      root # yum install mod_ssl
      #确保/etc/httpd/conf/httpd.conf 有引入SSL相关配置文件: Include conf.modules.d/*.conf,  IncludeOptional conf.d/*.conf
      #确保有打开 SSL 模块, /etc/httpd/conf.modules.d/00-ssl.conf: LoadModule ssl_module modules/mod_ssl.so
      #修改 SSL 配置文件
      root # vim /etc/httpd/conf.d/ssl.conf
      #重启服务
      root # systemctl restart httpd.service
    
     file     /etc/httpd/conf.d/ssl.conf
      #监听端口
      Listen 443 https
      #网站目录
      DocumentRoot "/var/www/html"
      #域名地址
      ServerName https://tiimmm.com
      #SSL证书配置
      SSLCertificateFile /etc/httpd/sslcert/cert.pem
      SSLCertificateKeyFile /etc/httpd/sslcert/key.pem
      SSLCertificateChainFile /etc/httpd/sslcert/fullchain.pem
    
  • 配置 apache 使 HTTP 强制跳转 HTTPS
      # 此操作在oraclelinux7中测试
      # 方法1: Virtual Hosts 方式
      # 创建 /etc/httpd/conf.d/non-ssl.conf 配置 VirtualHost *:80
      root # vim /etc/httpd/conf.d/non-ssl.conf
    
      # 方法2: mod_rewrite/.htaccess 方式
      # 确保有打开 rewrite 模块,/etc/httpd/conf.modules.d/00-base.conf: LoadModule rewrite_module modules/mod_rewrite.so
      # 修改 /etc/httpd/conf/httpd.conf 文件里的 <Directory "/var/www/html"> 下的 "AllowOverride None" 为 "AllowOverride All"
      # 创建文件.htaccess
      root # vim /var/www/html/.htaccess
    
      #重启服务
      root # systemctl restart httpd.service
    
     file     /etc/httpd/conf.d/non-ssl.conf
      #配置 VirtualHost *:80
      <VirtualHost *:80>
        ServerName tiimmm.com
        Redirect / https://tiimmm.com/
      </VirtualHost>
    
     file     /var/www/html/.htaccess
      #配置强制跳转
      RewriteEngine On 
      RewriteCond %{HTTPS} !=on 
      RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
    

版权声明

本文作者是一位开源理念的坚定支持者,所以本文内容遵照开源的精神发布。
无担保:本文作者不保证此文内容准确无误,亦不承担任何由于使用此文档所导致的损失。
自由使用:任何人都可以自由的阅读/链接/打印此文档,无需任何附加条件。
名誉权:任何人都可以自由的转载/引用/再创作此文档,但必须保留作者署名并注明出处。
其他作品
本文作者十分愿意与他人分享劳动成果,如果你对我的其他作品有兴趣,可以在如下位置查看现有的作品集:
Tim 作品集 [ https://tiimmm.com/ ]
联系方式
由于作者水平有限,因此不能保证此文内容准确无误。如果你发现了此文中的错误(哪怕是错别字也好),请来信指出,任何提高此文质量的建议我都将虚心接纳。
Email: tiimmm dot chen at gmail dot com



网站制作者:Author:tiimmm dot chen at gmail dot com, Welcome to email for discussion!



T站勉强运行530天7时56分27秒
多伦多时间:2024-11-25 Monday 05:29:42 AM