CentOS 7 安装 LAMP 与 Mono

目录:

[TOC]

在 CentOS 7.7 64位系统中,安装 Apache + Mysql + PHP + Mono 以支持 ASP.NET Web 程序跨平台运行,其达到跨平台目的,只需配置 Apache + Mono 即可,其它配置为附加配置。

操作系统:CentOS 7.7 64位

安装wget + git文件下载工具:

  1. # for Amazon Linux/CentOS
  2. yum -y install wget git
  3. # for Debian/Ubuntu
  4. apt-get -y install wget git

安装net-tools查看进程占用端口情况:

  1. [root@node04 ~]# yum install net-tools
  2. [root@node04 ~]# netstat -tunpl
  3. # 查找占用 8080 端口的进程
  4. [root@node04 ~]# netstat -lnp | grep 8080

部署 LAMP

Linux + Apache + Mysql + PHP

使用《LAMP 一键安装包 》安装过程。

1、git clone 并赋予脚本执行权限

  1. [root@node04 ~]# git clone https://github.com/teddysun/lamp.git
  2. [root@node04 ~]# cd lamp
  3. [root@node04 lamp]# chmod 755 *.sh

2、开始安装

执行lamp.sh脚本。

  1. [root@node04 lamp]# ./lamp.sh

安装完毕,注意事项:

  • 防火墙服务(service)

    自动添加了 http 和 https 两项防火墙服务,分别对应 80/443 端口。可针对服务进行添加/删除。

    1. [root@node04 ~]# firewall-cmd --zone=public --list-all
    2. public (active)
    3. target: default
    4. icmp-block-inversion: no
    5. interfaces: ens33
    6. sources:
    7. services: dhcpv6-client http https ssh
    8. ports:
    9. protocols:
    10. masquerade: no
    11. forward-ports:
    12. source-ports:
    13. icmp-blocks:
    14. rich rules:
    15. [root@node04 ~]# firewall-cmd --permanent --zone=public --remove-service=http
    16. [root@node04 ~]# firewall-cmd --permanent --zone=public --add-service=http
    17. [root@node04 ~]# firewall-cmd --reload
  • lamp 根目录的 software

    software 目录,用于缓存安装过程中,需要下载的软件包。安装完毕后,会自动删除,不做提醒是否保留,可自己备份,再次时安装速度更快。

安装完毕后的配置情况:

  1. Congratulations, LAMP install completed!
  2. ------------------------ Installed Overview -------------------------
  3. Apache: httpd-2.4.46
  4. Default Website: http://192.168.1.195
  5. Apache Location: /usr/local/apache
  6. Apache Additional Modules: do_not_install
  7. Database: mysql-5.7.31
  8. MySQL Location: /usr/local/mysql
  9. MySQL Data Location: /usr/local/mysql/data
  10. MySQL Root Password: xxxxxx
  11. Database Management Modules: do_not_install
  12. PHP: php-5.6.40
  13. PHP Location: /usr/local/php
  14. PHP Additional Extensions: do_not_install
  15. KodExplorer: do_not_install
  16. ---------------------------------------------------------------------
  17. # 查看端口占用情况
  18. [root@node04 lamp]# netstat -tunpl

设置 Mysql 允许远程连接:

一开始报错如下:

  1. ERROR 1130: Host 192.168.3.100 is not allowed to connect to this MySQL server

问题原因是用户权限,把 mysql 数据库的 user 表里的 root 用户(或者其他任意用户)的 host 字段,变更为%

开始设置:

  1. # 用 root 用户登录,并输入密码
  2. [root@node04 ~]# mysql -u root -p
  3. Enter password:
  4. # 选择 mysql 数据库
  5. mysql> use mysql;
  6. # 查看 host 字段信息
  7. mysql> select 'host' from user where user='root';
  8. # 更新 host 为 %
  9. mysql> update user set host='%' where user='root';
  10. # 虽然报错了,但是不用理会
  11. ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
  12. # 刷新用户权限
  13. mysql> flush privileges;
  14. # 退出 mysql 命令行
  15. mysql> exit
  16. Bye

程序目录:

  1. MySQL 安装目录: /usr/local/mysql
  2. MySQL 数据库目录: /usr/local/mysql/data(默认路径,安装时可更改)
  3. MariaDB 安装目录: /usr/local/mariadb
  4. MariaDB 数据库目录: /usr/local/mariadb/data(默认路径,安装时可更改)
  5. PHP 安装目录: /usr/local/php
  6. Apache 安装目录: /usr/local/apache
  7. phpMyAdmin 安装目录: /data/www/default/phpmyadmin
  8. Adminer 安装路径: /data/www/default/adminer.php
  9. KodExplorer 安装目录: /data/www/default/kod

网站目录:

  1. 默认的网站根目录: /data/www/default
  2. 默认页位置: /data/www/default/index.html
  3. 新建网站默认目录: /data/www/网站域名
  4. phpmyadmin 后台地址: http://网站域名或IP/phpmyadmin/
  5. phpmyadmin 默认用户名:root 默认密码:lamp.sh
  6. (注:此密码为 MySQL root 密码。在安装时会要求输入,如不输入则为默认密码 lamp.sh
  7. XCache 后台地址: http://域名或IP/xcache/
  8. XCache 默认用户名:admin 默认密码:123456
  9. (注:用户名和密码在配置文件 /usr/local/php/php.d/xcache.ini 中定义)

配置文件:

  1. Apache 日志目录: /usr/local/apache/logs
  2. 新建网站日志目录: /data/wwwlog/网站域名
  3. Apache 默认 SSL 配置文件: /usr/local/apache/conf/extra/httpd-ssl.conf
  4. 新建网站配置文件: /usr/local/apache/conf/vhost/网站域名.conf
  5. PHP 配置文件: /usr/local/php/etc/php.ini
  6. PHP 所有扩展配置文件目录: /usr/local/php/php.d/
  7. MySQL 配置文件: /etc/my.cnf

命令一览:

  1. MySQL/MariaDB 命令:
  2. /etc/init.d/mysqld (start|stop|restart|status)
  3. Apache 命令:
  4. /etc/init.d/httpd (start|stop|restart|status)
  5. Memcached 命令(可选安装)
  6. /etc/init.d/memcached (start|stop|restart|status)
  7. Redis 命令(可选安装)
  8. /etc/init.d/redis-server (start|stop|restart|status)

安装 LAMP 及建站简单流程:

  1. 安装 LAMP 环境
  2. 添加虚拟主机。运行命令:lamp add
    (如果只建一个站,则可以直接将网站程序上传至 /data/www/default 目录下即可)
  3. 上传并解压网站程序到网站目录,默认位置为:/data/www/网站域名/
  4. 更改网站目录权限。以 root 用户登录,运行:chown -R apache.apache /data/www/网站域名/
  5. 运行网站安装程序完成网站安装

注意:在安装过程的交互中,当发现输错选项需要更正时,可以按下 Ctrl 键,同时再按退格(Backspace)键,即可消除。或者同时按下Ctrl + u即可全部清除,重新输入。

使用提示:

  1. lamp add 创建虚拟主机
  2. lamp del 删除虚拟主机
  3. lamp list 列出虚拟主机

如何升级

注意:双斜杠//后的内容不要复制输入

  1. cd ~/lamp
  2. git reset --hard // Resets the index and working tree
  3. git pull // Get latest version first
  4. chmod 755 *.sh
  5. ./upgrade.sh // Select one to upgrade
  6. ./upgrade.sh apache // Upgrade Apache
  7. ./upgrade.sh db // Upgrade MySQL or MariaDB
  8. ./upgrade.sh php // Upgrade PHP
  9. ./upgrade.sh phpmyadmin // Upgrade phpMyAdmin
  10. ./upgrade.sh adminer // Upgrade Adminer

如何卸载

  1. ./uninstall.sh

部署 Mono

Mono 是一个跨平台,且开源的 .NET 框架。

安装 libgdiplus

Libgdiplus 是 Mono 项目的一部分,用于实现 GDI+ API 。在跨平台时,在 Linux 系统中,支持 System.Drawing 服务器端图片的处理。

  1. # 安装依赖
  2. [root@node04 ~]# yum install autoconf automake libtool
  3. [root@node04 ~]# yum install freetype-devel fontconfig libXft-devel
  4. [root@node04 ~]# yum install libjpeg-turbo-devel libpng-devel giflib-devel libtiff-devel libexif-devel
  5. [root@node04 ~]# yum install glib2-devel cairo-devel
  6. [root@node04 ~]# git clone https://github.com/mono/libgdiplus
  7. [root@node04 ~]# cd libgdiplus/
  8. # 进行编译
  9. [root@node04 libgdiplus]# ./autogen.sh --prefix=/usr/local
  10. # 编译最后,输出:
  11. ---
  12. Configuration summary
  13. * Installation prefix = /usr/local
  14. * Cairo = 1.15.12 (system)
  15. * Text = cairo
  16. * EXIF tags = yes
  17. * X11 = yes
  18. * Codecs supported:
  19. - TIFF: yes
  20. - JPEG: yes
  21. - GIF: yes
  22. - PNG: yes
  23. NOTE: if any of the above saynoyou may install the
  24. corresponding development packages for them, rerun
  25. autogen.sh to include them in the build.
  26. ---
  27. Now typemaketo compile
  28. # 安装
  29. [root@node04 libgdiplus]# make
  30. [root@node04 libgdiplus]# make install

安装 mono 和 xsp

将 Mono 存储库添加到系统

CentOS / RHEL 7 :

  1. rpmkeys --import "http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x3fa7e0328081bff6a14da29aa6a19b38d3d831ef"
  2. su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'

注意:Mono 源库支持CentOS / RHEL 8CentOS / RHEL 7CentOS / RHEL 6,注意你所使用的操作系统。更多查看:https://www.mono-project.com/download/stable/

  1. # 安装 mono
  2. [root@node04 ~]# yum install mono
  3. # 查看 mono 版本
  4. [root@node04 ~]# mono --version
  5. # 安装 xsp
  6. [root@node04 ~]# yum install xsp
  7. # 启动 xsp 示例,通过浏览器查看 http://localhost:9000
  8. [root@node04 ~]# cd /usr/lib/xsp/test
  9. [root@node04 test]# xsp
  10. xsp4
  11. Listening on address: 0.0.0.0
  12. Root directory: /usr/lib/xsp/test
  13. Listening on port: 9000 (non-secure)
  14. Hit Return to stop the server.

更多查看:ASP.NET hosting with XSP

安装 mod_mono

mod_mono 是 Apache 2.0/2.2/2.4.3 的一个模块,提供 Apache 对 ASP.NET 的支持。

更多查看:

mod_mono 安装分两种:

第一种,是 yum 安装已经发布好的安装包,需要注意的是,此安装包内已经内置 Apache 等其他必须的依赖。

第二种,编译安装,编译安装灵活性大,只安装 mod_mono 模块,需要你自己处理依赖关系,提前安装好 mod_mono 需要的依赖。其中,在编译安装过程中,会自动识别出 Apache 是否存在,和配置相关目录设置。

由于,之前已经安装过 Apache,那么就采用编译安装 mod_mono 模块,过程如下:

  1. [root@node04 ~]# git clone https://github.com/mono/mod_mono
  2. [root@node04 ~]# cd mod_mono/
  3. [root@node04 mod_mono]# ./autogen.sh
  4. [root@node04 mod_mono]# make
  5. [root@node04 mod_mono]# make install

执行make install安装完成后,有警告信息:libtool: warning: remember to run 'libtool --finish /usr/local/lib'

继续执行,警告信息中提示的命令:

  1. [root@node04 mod_mono]# libtool --finish /usr/local/lib

安装完成后,设置如下:

在 Apache 配置文件(httpd.conf)添加设置,引入 mod_mono 模块配置文件。

  1. # mod_mono config
  2. Include /usr/local/apache/conf/mod_mono.conf

剩下的,就是配置 Apache 虚拟主机,重启 Apache 就可以了,关于 mod_mono 模块更多配置,请看官网说明。

对于 mod_mono 模块,配置支持 ASP.NET MVC4 需要注意的几点:

  1. # 指定支持 .NET 版本,默认支持 1.1,可指定 2.0/3.0/4.0
  2. MonoServerPath "/usr/bin/mod-mono-server4"
  3. # 兼容模式 asp.net 程序不做任何修改,兼容运行在 Unix 系统,但会减低性能。
  4. MonoSetEnv xxx MONO_IOMAP=all
  5. # 开启 Mono 服务端调试
  6. MonoDebug true
  7. # 支持 ASP.NET MVC 无后缀 URL 文件扩展名
  8. ForceType application/x-asp-net
  9. # 应用程序根目录
  10. MonoApplications "/:/data/www/xxx"

如果在站点配置中,指定了开启MonoDebug true调试,则站点发布时发布->设置->配置选项为 Debug ,不能选择 Release 。

在 Web.config 文件中配置:

  1. <configuration>
  2. <system.web>
  3. <customErrors mode="Off" />
  4. </system.web>
  5. </configuration>

设置示例 1:

  1. <VirtualHost *:80>
  2. ServerName you.domain.com
  3. ServerAdmin web-admin@you.domain.com
  4. DocumentRoot /srv/www/you.domain.com
  5. # MonoServerPath can be changed to specify which version of ASP.NET is hosted
  6. # mod-mono-server1 = ASP.NET 1.1 / mod-mono-server2 = ASP.NET 2.0
  7. # For SUSE Linux Enterprise Mono Extension, uncomment the line below:
  8. # MonoServerPath you.domain.com "/opt/novell/mono/bin/mod-mono-server2"
  9. # For Mono on openSUSE, uncomment the line below instead:
  10. MonoServerPath you.domain.com "/usr/bin/mod-mono-server2"
  11. # To obtain line numbers in stack traces you need to do two things:
  12. # 1) Enable Debug code generation in your page by using the Debug="true"
  13. # page directive, or by setting <compilation debug="true" /> in the
  14. # application's Web.config
  15. # 2) Uncomment the MonoDebug true directive below to enable mod_mono debugging
  16. MonoDebug you.domain.com true
  17. # The MONO_IOMAP environment variable can be configured to provide platform abstraction
  18. # for file access in Linux. Valid values for MONO_IOMAP are:
  19. # case
  20. # drive
  21. # all
  22. # Uncomment the line below to alter file access behavior for the configured application
  23. MonoSetEnv you.domain.com MONO_IOMAP=all
  24. #
  25. # Additional environtment variables can be set for this server instance using
  26. # the MonoSetEnv directive. MonoSetEnv takes a string of 'name=value' pairs
  27. # separated by semicolons. For instance, to enable platform abstraction *and*
  28. # use Mono's old regular expression interpreter (which is slower, but has a
  29. # shorter setup time), uncomment the line below instead:
  30. # MonoSetEnv you.domain.com MONO_IOMAP=all;MONO_OLD_RX=1
  31. MonoApplications you.domain.com "/:/srv/www/you.domain.com"
  32. <Location "/">
  33. Allow from all
  34. Order allow,deny
  35. MonoSetServerAlias you.domain.com
  36. SetHandler mono
  37. SetOutputFilter DEFLATE
  38. SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
  39. </Location>
  40. <IfModule mod_deflate.c>
  41. AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript
  42. </IfModule>
  43. </VirtualHost>

设置示例 2:

  1. Alias /MonoTest "/usr/local/lib/xsp/test"
  2. MonoServerPath MonoTest "/usr/bin/mod-mono-server2"
  3. MonoDebug MonoTest true
  4. MonoSetEnv MonoTest MONO_IOMAP=all
  5. MonoApplications MonoTest "/MonoTest:/usr/local/lib/xsp/test"
  6. <Location "/MonoTest">
  7. Allow from all
  8. Order allow,deny
  9. MonoSetServerAlias MonoTest
  10. SetHandler mono
  11. SetOutputFilter DEFLATE
  12. SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
  13. </Location>
  14. <IfModule mod_deflate.c>
  15. AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript
  16. </IfModule>

参考文献:

(完)