ZKEACMS Core 是基于 .net core 开发的,可以在 windows, linux, mac 上跨平台运行,接下来我们来看看如何在 CentOS 上运行 ZKEACMS。

快速部署

如果您使用的是一台全新的Centos7服务器,我们建议您直接使用以下方便直接部署。该脚本会自动安装  .Net Core,Nginx,ZKEACMS并做对应的配置。

curl http://cdn.zkeasoft.com/core/centos.7-zkeacms.sh|sh

安装完成,就可以直接使用服务器的IP,域名进行访问了。

看看如何一步一步手动部署

安装 .Net Core 2.0

运行以下命令,安装 .Net Core

sudo yum install libunwind libicu
curl -sSL -o dotnet.tar.gz https://www.zkea.net/dotnet-sdk-2.0.3
mkdir -p ~/dotnet && tar zxf dotnet.tar.gz -C ~/dotnet
export PATH=$PATH:$HOME/dotnet

或者也可以这样安装

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'
sudo yum update
sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.0.3

安装 Nginx

sudo yum install epel-release
sudo yum install nginx
sudo systemctl enable nginx

如果提示找不到 nginx 包,请参考 

https://www.liberiangeek.net/2014/07/enable-nginxs-repository-install-nginx-centos-7/

修改 Nginx 的配置

添加 Nginx 的配置,让它反向代理到 localhost:5000,修改全局配置文件 

vi /etc/nginx/nginx.conf 

修改 location 结点为以下内容

location / {
    proxy_pass http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection keep-alive;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

启动 Nginx

sudo systemctl start nginx

到这里,我们的环境就搭配好了,接下来,我们来发布 ZKEACMS

安装ZKEACMS

方式一:直接从CDN获取

从CDN获取下来的CMS数据库已经生成好,并且配置好了,解压后可直接运行

curl -o cms.zip http://cdn.zkeasoft.com/core/cms.zip

解压

unzip cms.zip -d cms

方式二:手动发布 ZKEACMS.Core

发布 ZKEACMS.Core 比较简单,双击 Publish.cmd 即可

数据库 SQLite

为了简单起起见,这里使用 SQLite 作为数据库,生成一个SQLite数据命名为 Database.sqlite。在发布好的程序文件夹下,创建 App_Data 文件夹,并将 Database.sqlite 放入 App_Data 目录下。关于如何生成 SQLite 数据,请查看这遍文章 《生成 ZKEACMS 的 SQLite 数据库》。

修改连接字符串

打开 appsettings.json,加入 SQLite 的数据库连接字符串,结果如下

{
  "Database": {
"DbType": "Sqlite",
"ConnectionString": "Data Source=App_Data/Database.sqlite"
}, "ApplicationInsights": { "InstrumentationKey": "" }, "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }, "Culture": "zh-CN" }

打包上传服务器

我们将发布好的程序打包为 cms.zip 并上传到 /root 目录下。并解压到 /root/cms 目录下,使用以下命令解压

unzip cms.zip -d cms

运行

定位到目录,然后使用 dotnet 命令运行

cd /root/cms
dotnet ZKEACMS.WebHost.dll

运行成功以后,就可以使用您服务器的IP或者域名访问了 :)

退出SSH远程连接客户端后,发现访问不了,这是因为 dotnet 也退出了。

以服务方式运行

创建一个服务,让 dotnet 在后台运行。

创建服务

vi /etc/systemd/system/zkeacms.service

输入以下内容保存

[Unit]
Description=ZKEACMS

[Service]
WorkingDirectory=/root/cms
ExecStart=/root/dotnet/dotnet /root/cms/ZKEACMS.WebHost.dll
Restart=always
RestartSec=10
SyslogIdentifier=zkeacms
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production 

[Install]
WantedBy=multi-user.target

启动服务

systemctl start zkeacms.service

这样就可以安心的退出SSH远程连接了。

开机自启动

systemctl enable zkeacms

常见问题

1. 无法访问,连接不上,先开放80端口

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

2. nginx 502 Bad Gateway

如果你的配置正确,确始终不能访问,使用 curl http://localhost:5000 可以正常访问的话,需要手动关闭 selinux 。

centos 7.1环境默认selinux是开启的,三种方案:

第一种暂时关闭selinux 做法:

setenforce 0

第二种是修改 /etc/selinux/config 
将 SELINUX=enforcing 改为 SELINUX=disabled 重启机器即可。

可以使用 nano 或者 vi 进行编辑

vi /etc/selinux/config

第三种比较推荐,将NGINX加到SELinux的允许名单:

yum install policycoreutils-python  
cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx  
semodule -i mynginx.pp