CentOS 7 安装 LAMP 与 Mono
目录:
在 CentOS 7.7 64位系统中,安装 Apache + Mysql + PHP + Mono 以支持 ASP.NET Web 程序跨平台运行,其达到跨平台目的,只需配置 Apache + Mono 即可,其它配置为附加配置。
操作系统:CentOS 7.7 64位
安装wget + git
文件下载工具:
# for Amazon Linux/CentOS
yum -y install wget git
# for Debian/Ubuntu
apt-get -y install wget git
安装net-tools
查看进程占用端口情况:
[root@node04 ~]# yum install net-tools
[root@node04 ~]# netstat -tunpl
# 查找占用 8080 端口的进程
[root@node04 ~]# netstat -lnp | grep 8080
部署 LAMP
Linux + Apache + Mysql + PHP
使用《LAMP 一键安装包 》安装过程。
1、git clone 并赋予脚本执行权限
[root@node04 ~]# git clone https://github.com/teddysun/lamp.git
[root@node04 ~]# cd lamp
[root@node04 lamp]# chmod 755 *.sh
2、开始安装
执行lamp.sh
脚本。
[root@node04 lamp]# ./lamp.sh
安装完毕,注意事项:
防火墙服务(service)
自动添加了 http 和 https 两项防火墙服务,分别对应 80/443 端口。可针对服务进行添加/删除。
[root@node04 ~]# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@node04 ~]# firewall-cmd --permanent --zone=public --remove-service=http
[root@node04 ~]# firewall-cmd --permanent --zone=public --add-service=http
[root@node04 ~]# firewall-cmd --reload
lamp 根目录的 software
software 目录,用于缓存安装过程中,需要下载的软件包。安装完毕后,会自动删除,不做提醒是否保留,可自己备份,再次时安装速度更快。
安装完毕后的配置情况:
Congratulations, LAMP install completed!
------------------------ Installed Overview -------------------------
Apache: httpd-2.4.46
Default Website: http://192.168.1.195
Apache Location: /usr/local/apache
Apache Additional Modules: do_not_install
Database: mysql-5.7.31
MySQL Location: /usr/local/mysql
MySQL Data Location: /usr/local/mysql/data
MySQL Root Password: xxxxxx
Database Management Modules: do_not_install
PHP: php-5.6.40
PHP Location: /usr/local/php
PHP Additional Extensions: do_not_install
KodExplorer: do_not_install
---------------------------------------------------------------------
# 查看端口占用情况
[root@node04 lamp]# netstat -tunpl
设置 Mysql 允许远程连接:
一开始报错如下:
ERROR 1130: Host 192.168.3.100 is not allowed to connect to this MySQL server
问题原因是用户权限,把 mysql 数据库的 user 表里的 root 用户(或者其他任意用户)的 host 字段,变更为%
。
开始设置:
# 用 root 用户登录,并输入密码
[root@node04 ~]# mysql -u root -p
Enter password:
# 选择 mysql 数据库
mysql> use mysql;
# 查看 host 字段信息
mysql> select 'host' from user where user='root';
# 更新 host 为 %
mysql> update user set host='%' where user='root';
# 虽然报错了,但是不用理会
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
# 刷新用户权限
mysql> flush privileges;
# 退出 mysql 命令行
mysql> exit
Bye
程序目录:
MySQL 安装目录: /usr/local/mysql
MySQL 数据库目录: /usr/local/mysql/data(默认路径,安装时可更改)
MariaDB 安装目录: /usr/local/mariadb
MariaDB 数据库目录: /usr/local/mariadb/data(默认路径,安装时可更改)
PHP 安装目录: /usr/local/php
Apache 安装目录: /usr/local/apache
phpMyAdmin 安装目录: /data/www/default/phpmyadmin
Adminer 安装路径: /data/www/default/adminer.php
KodExplorer 安装目录: /data/www/default/kod
网站目录:
默认的网站根目录: /data/www/default
默认页位置: /data/www/default/index.html
新建网站默认目录: /data/www/网站域名
phpmyadmin 后台地址: http://网站域名或IP/phpmyadmin/
phpmyadmin 默认用户名:root 默认密码:lamp.sh
(注:此密码为 MySQL 的 root 密码。在安装时会要求输入,如不输入则为默认密码 lamp.sh)
XCache 后台地址: http://域名或IP/xcache/
XCache 默认用户名:admin 默认密码:123456
(注:用户名和密码在配置文件 /usr/local/php/php.d/xcache.ini 中定义)
配置文件:
Apache 日志目录: /usr/local/apache/logs
新建网站日志目录: /data/wwwlog/网站域名
Apache 默认 SSL 配置文件: /usr/local/apache/conf/extra/httpd-ssl.conf
新建网站配置文件: /usr/local/apache/conf/vhost/网站域名.conf
PHP 配置文件: /usr/local/php/etc/php.ini
PHP 所有扩展配置文件目录: /usr/local/php/php.d/
MySQL 配置文件: /etc/my.cnf
命令一览:
MySQL/MariaDB 命令:
/etc/init.d/mysqld (start|stop|restart|status)
Apache 命令:
/etc/init.d/httpd (start|stop|restart|status)
Memcached 命令(可选安装)
/etc/init.d/memcached (start|stop|restart|status)
Redis 命令(可选安装)
/etc/init.d/redis-server (start|stop|restart|status)
安装 LAMP 及建站简单流程:
- 安装 LAMP 环境
- 添加虚拟主机。运行命令:
lamp add
(如果只建一个站,则可以直接将网站程序上传至/data/www/default
目录下即可) - 上传并解压网站程序到网站目录,默认位置为:
/data/www/网站域名/
- 更改网站目录权限。以 root 用户登录,运行:
chown -R apache.apache /data/www/网站域名/
- 运行网站安装程序完成网站安装
注意:在安装过程的交互中,当发现输错选项需要更正时,可以按下 Ctrl 键,同时再按退格(Backspace)键,即可消除。或者同时按下Ctrl + u
即可全部清除,重新输入。
使用提示:
lamp add 创建虚拟主机
lamp del 删除虚拟主机
lamp list 列出虚拟主机
如何升级
注意:双斜杠//后的内容不要复制输入
cd ~/lamp
git reset --hard // Resets the index and working tree
git pull // Get latest version first
chmod 755 *.sh
./upgrade.sh // Select one to upgrade
./upgrade.sh apache // Upgrade Apache
./upgrade.sh db // Upgrade MySQL or MariaDB
./upgrade.sh php // Upgrade PHP
./upgrade.sh phpmyadmin // Upgrade phpMyAdmin
./upgrade.sh adminer // Upgrade Adminer
如何卸载
./uninstall.sh
部署 Mono
Mono 是一个跨平台,且开源的 .NET 框架。
- Mono 官网
- Mono Github
- Mono 官方文档关于 Web
其中包含 ASP.NET / mod_mono / FastCGI - Mono 官方文档关于 GUI
其中包含 System.Drawing / libgdiplus
安装 libgdiplus
Libgdiplus 是 Mono 项目的一部分,用于实现 GDI+ API 。在跨平台时,在 Linux 系统中,支持 System.Drawing 服务器端图片的处理。
# 安装依赖
[root@node04 ~]# yum install autoconf automake libtool
[root@node04 ~]# yum install freetype-devel fontconfig libXft-devel
[root@node04 ~]# yum install libjpeg-turbo-devel libpng-devel giflib-devel libtiff-devel libexif-devel
[root@node04 ~]# yum install glib2-devel cairo-devel
[root@node04 ~]# git clone https://github.com/mono/libgdiplus
[root@node04 ~]# cd libgdiplus/
# 进行编译
[root@node04 libgdiplus]# ./autogen.sh --prefix=/usr/local
# 编译最后,输出:
---
Configuration summary
* Installation prefix = /usr/local
* Cairo = 1.15.12 (system)
* Text = cairo
* EXIF tags = yes
* X11 = yes
* Codecs supported:
- TIFF: yes
- JPEG: yes
- GIF: yes
- PNG: yes
NOTE: if any of the above say‘no’you may install the
corresponding development packages for them, rerun
autogen.sh to include them in the build.
---
Now type‘make’to compile
# 安装
[root@node04 libgdiplus]# make
[root@node04 libgdiplus]# make install
安装 mono 和 xsp
将 Mono 存储库添加到系统
CentOS / RHEL 7 :
rpmkeys --import "http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x3fa7e0328081bff6a14da29aa6a19b38d3d831ef"
su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'
注意:Mono 源库支持CentOS / RHEL 8
、CentOS / RHEL 7
、CentOS / RHEL 6
,注意你所使用的操作系统。更多查看:https://www.mono-project.com/download/stable/
# 安装 mono
[root@node04 ~]# yum install mono
# 查看 mono 版本
[root@node04 ~]# mono --version
# 安装 xsp
[root@node04 ~]# yum install xsp
# 启动 xsp 示例,通过浏览器查看 http://localhost:9000
[root@node04 ~]# cd /usr/lib/xsp/test
[root@node04 test]# xsp
xsp4
Listening on address: 0.0.0.0
Root directory: /usr/lib/xsp/test
Listening on port: 9000 (non-secure)
Hit Return to stop the server.
安装 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 模块,过程如下:
[root@node04 ~]# git clone https://github.com/mono/mod_mono
[root@node04 ~]# cd mod_mono/
[root@node04 mod_mono]# ./autogen.sh
[root@node04 mod_mono]# make
[root@node04 mod_mono]# make install
执行make install
安装完成后,有警告信息:libtool: warning: remember to run 'libtool --finish /usr/local/lib'
继续执行,警告信息中提示的命令:
[root@node04 mod_mono]# libtool --finish /usr/local/lib
安装完成后,设置如下:
在 Apache 配置文件(httpd.conf)添加设置,引入 mod_mono 模块配置文件。
# mod_mono config
Include /usr/local/apache/conf/mod_mono.conf
剩下的,就是配置 Apache 虚拟主机,重启 Apache 就可以了,关于 mod_mono 模块更多配置,请看官网说明。
对于 mod_mono 模块,配置支持 ASP.NET MVC4 需要注意的几点:
# 指定支持 .NET 版本,默认支持 1.1,可指定 2.0/3.0/4.0
MonoServerPath "/usr/bin/mod-mono-server4"
# 兼容模式 asp.net 程序不做任何修改,兼容运行在 Unix 系统,但会减低性能。
MonoSetEnv xxx MONO_IOMAP=all
# 开启 Mono 服务端调试
MonoDebug true
# 支持 ASP.NET MVC 无后缀 URL 文件扩展名
ForceType application/x-asp-net
# 应用程序根目录
MonoApplications "/:/data/www/xxx"
如果在站点配置中,指定了开启MonoDebug true
调试,则站点发布时发布->设置->配置
选项为 Debug ,不能选择 Release 。
在 Web.config 文件中配置:
<configuration>
<system.web>
<customErrors mode="Off" />
</system.web>
</configuration>
设置示例 1:
<VirtualHost *:80>
ServerName you.domain.com
ServerAdmin web-admin@you.domain.com
DocumentRoot /srv/www/you.domain.com
# MonoServerPath can be changed to specify which version of ASP.NET is hosted
# mod-mono-server1 = ASP.NET 1.1 / mod-mono-server2 = ASP.NET 2.0
# For SUSE Linux Enterprise Mono Extension, uncomment the line below:
# MonoServerPath you.domain.com "/opt/novell/mono/bin/mod-mono-server2"
# For Mono on openSUSE, uncomment the line below instead:
MonoServerPath you.domain.com "/usr/bin/mod-mono-server2"
# To obtain line numbers in stack traces you need to do two things:
# 1) Enable Debug code generation in your page by using the Debug="true"
# page directive, or by setting <compilation debug="true" /> in the
# application's Web.config
# 2) Uncomment the MonoDebug true directive below to enable mod_mono debugging
MonoDebug you.domain.com true
# The MONO_IOMAP environment variable can be configured to provide platform abstraction
# for file access in Linux. Valid values for MONO_IOMAP are:
# case
# drive
# all
# Uncomment the line below to alter file access behavior for the configured application
MonoSetEnv you.domain.com MONO_IOMAP=all
#
# Additional environtment variables can be set for this server instance using
# the MonoSetEnv directive. MonoSetEnv takes a string of 'name=value' pairs
# separated by semicolons. For instance, to enable platform abstraction *and*
# use Mono's old regular expression interpreter (which is slower, but has a
# shorter setup time), uncomment the line below instead:
# MonoSetEnv you.domain.com MONO_IOMAP=all;MONO_OLD_RX=1
MonoApplications you.domain.com "/:/srv/www/you.domain.com"
<Location "/">
Allow from all
Order allow,deny
MonoSetServerAlias you.domain.com
SetHandler mono
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
</Location>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript
</IfModule>
</VirtualHost>
设置示例 2:
Alias /MonoTest "/usr/local/lib/xsp/test"
MonoServerPath MonoTest "/usr/bin/mod-mono-server2"
MonoDebug MonoTest true
MonoSetEnv MonoTest MONO_IOMAP=all
MonoApplications MonoTest "/MonoTest:/usr/local/lib/xsp/test"
<Location "/MonoTest">
Allow from all
Order allow,deny
MonoSetServerAlias MonoTest
SetHandler mono
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
</Location>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript
</IfModule>
参考文献:
- 在 Ubuntu Server 上安装配置 Mono 生产环境
- Part 1: Installing the Software
- Part 2: Setting up and Configuring MySQL
- Part 3: Walk through porting the ASP.NET MVC website.
(完)