如何在CentOS 7上安装dotCMS

・18 分钟阅读

使用不同的系统?

DOTCMS是一个用Java编写的开源企业级内容管理系统,它提供RESTful API以与CRM,移动应用程序等其他服务集成。它使用Elasticsearch来实时索引内容和Redis实现多层缓存。

本文是为DOTCMS 422编写的,但是提供的说明也适用于较新版本。

前提条件

  • 一个CentOS 7服务器实例,
  • 一个sudo用户
  • 指向服务器的域名,

对于本教程,我们将使用192.168.0.1作为公共IP地址和cms.example.com,作为该实例指向的域名,请确保将例子域名和公用IP地址全部替换为实际的。

使用向导更新基本系统(如何更新Centos 7) ,系统更新后,继续安装Java 。

安装Java

可以很容易地安装OpenJDK,因为包在默认的YUM存储库中可用。


sudo yum -y install java-1.8.0-openjdk-devel

如果Java安装正确,那么你就可以验证它的版本。

 
java -version

 

你会得到类似的输出。


[user@vultr ~]$ java -version
openjdk version"1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

我们还需要先设置JAVA_HOMEJRE_HOME环境变量,然后再进行进一步的操作,查找系统上Java可执行文件的绝对路径。


readlink -f $(which java)

你将看到类似的输出。


[user@vultr ~]$ readlink -f $(which java)
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre/bin/java

现在,根据Java目录的路径设置JAVA_HOMEJRE_HOME环境变量。


echo"export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64" >> ~/.bash_profile
echo"export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre" >> ~/.bash_profile

执行bash_profile文件。


source ~/.bash_profile

现在你可以运行echo $JAVA_HOME命令来确保设置了环境变量。


[user@vultr ~]$ echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64

安装postgresql

默认情况下,dotCMS配置为使用h2数据库引擎,H2数据库引擎是基于平面文件引擎的,不建议在生产中使用,在本教程中,我们将使用PostgreSQL服务器来存储dotCMS数据库。

PostgreSQL是一个对象关系数据库系统,它的稳定性和速度,将最新版本的PostgreSQL存储库添加到系统中。


sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-1.noarch.rpm

安装PostgreSQL数据库服务器。


sudo yum -y install postgresql10-server postgresql10-contrib postgresql10 

初始化数据库。


sudo /usr/pgsql-10/bin/postgresql-10-setup initdb

启动PostgreSQL服务器,并且使它在引导时自动启动。


sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10

更改默认PostgreSQL用户的密码。

 
sudo passwd postgres

 

以默认PostgreSQL用户身份登录。


sudo su - postgres

为dotCMS创建一个新的PostgreSQL用户。

createuser dotcms 

PostgreSQL提供psql shell来在数据库服务器上运行查询,切换到PostgreSQL shell 。

 
psql

 

为新创建的dotCMS数据库用户设置密码。


ALTER USER dotcms WITH ENCRYPTED password 'DBPassword';

将数据库用户密码DBPassword替换为安全密码,为dotCMS安装创建一个新数据库。


CREATE DATABASE dotcms OWNER dotcms;

psql shell退出。

 
q

 

切换到sudo用户。

 
exit

 

安装dotCMS

下载dotCMS存档。


wget https://dotcms.com/physical_downloads/release_builds/dotcms_4.2.2.tar.gz

你始终可以在dotCMS下载页 找到最新版本的链接。

创建一个新目录来存储dotCMS文件并将其提取到其中。


sudo mkdir /opt/dotcms
sudo tar -zxf dotcms*.tar.gz -C /opt/dotcms

打开数据库配置文件。


cd /opt/dotcms
sudo nano dotserver/tomcat-*/webapps/ROOT/META-INF/context.xml

查找H2块。


<!-- H2 -->
<Resource name="jdbc/dotCMSPool" auth="Container"
 ...

 validationQuery="SELECT 1" testOnBorrow="true" testWhileIdle="true" />

通过将注释分隔符-->从节的开头替换为节末尾,注释整个H2部分,它应该如下所示。


<!-- H2
<Resource name="jdbc/dotCMSPool" auth="Container"
 ...

 validationQuery="SELECT 1" testOnBorrow="true" testWhileIdle="true" />
-->

从节末尾删除注释分隔符-->并将它放置在顶部包装POSTGRESQL中,从而取消注释PostgreSQL部分,另外,查找username=password=,并用PostgreSQL数据库用户的用户名和密码替换现有值,如果使用了dotcms之外的数据库名称,则需要更改url=中的数据库名称,配置之后,文件中的PostgreSQL块应该如下所示。


<!-- POSTGRESQL -->
<Resource name="jdbc/dotCMSPool" auth="Container"
 type="javax.sql.DataSource"
 factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
 driverClassName="org.postgresql.Driver"
 url="jdbc:postgresql://localhost/dotcms"
 username="dotcms" password="DBPassword" maxTotal="60" maxIdle="10" maxWaitMillis="60000"
 removeAbandonedOnBorrow="true" removeAbandonedOnMaintenance="true" removeAbandonedTimeout="60" logAbandoned="true"
 timeBetweenEvictionRunsMillis="30000" validationQuery="SELECT 1" testOnBorrow="true" testWhileIdle="true" />

为所有可执行文件提供执行权限。


sudo chmod 755 ./bin/*.sh
sudo chmod 755 dotserver/tomcat-*/bin/*.sh

dotCMS现在安装在你的服务器上,若要立即运行该应用程序,请执行下列操作。


cd /opt/dotcms
sudo bin/startup.sh

服务器成功启动后,你将看到以下输出。


[user@vultr dotcms]$ sudo bin/startup.sh
Using DOTCMS_HOME = /opt/dotcms/dotserver/tomcat-8.0.18/webapps/ROOT
Using DOTSERVER = dotcms
Using CATALINA_PID = /tmp/dotcms.pid
Using JAVA_OPTS = -Djava.awt.headless=true -Xverify:none -Dfile.encoding=UTF8 -server -XX:+DisableExplicitGC -XX:MaxMetaspaceSize=512m -Xmx1G -XX:+UseG1GC -javaagent:/opt/dotcms/dotserver/tomcat-8.0.18/webapps/ROOT/WEB-INF/lib/byte-buddy-agent-1.6.12.jar -Ddotserver=dotcms
Using CATALINA_BASE: /opt/dotcms/dotserver/tomcat-8.0.18
Using CATALINA_HOME: /opt/dotcms/dotserver/tomcat-8.0.18
Using CATALINA_TMPDIR: /opt/dotcms/dotserver/tomcat-8.0.18/temp
Using JRE_HOME: /
Using CLASSPATH: /opt/dotcms/dotserver/tomcat-8.0.18/bin/bootstrap.jar:/opt/dotcms/dotserver/tomcat-8.0.18/bin/tomcat-juli.jar
Using CATALINA_PID: /tmp/dotcms.pid
Tomcat started.

上面的命令将启动Tomcat Web服务器,以便在端口8080上提供服务。要检查dotCMS网站是否正常工作,请通过系统防火墙允许所需的端口8080


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

打开你喜爱的浏览器,并且浏览到http://192.168.0.1:8080 ,你应该会看到应用程序正在运行一个演示网站,如果你没有看到你的网站,请等待,因为dotCMS服务器的首次启动需要几分钟时间,因为它将数据写入PostgreSQL数据库,并且构建缓存,你还可以检查启动日志。


tail -n 1000 -f /opt/dotcms/dotserver/tomcat-*/webapps/ROOT/dotsecure/logs/dotcms.log

配置Systemd服务

可以使用安装程序包中提供的启动脚本直接启动dotCMS服务器,为方便起见,你应该为dotCMS服务器设置Systemd单元文件,这将确保在系统重启和失败时自动启动应用服务器。

使用关机脚本停止正在运行的dotCMS服务器。

 
sudo bin/shutdown.sh

 

出于安全原因,创建一个非权限用户来运行dotCMS服务器。


sudo adduser -d /opt/dotcms -s /sbin/nologin dotcms

向dotCMS用户提供文件的所有权。


sudo chown -R dotcms:dotcms /opt/dotcms

创建一个新的Systemd服务。


sudo nano /etc/systemd/system/dotcms.service

填充文件。


[Unit]
Description=dotCMS service
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/opt/dotcms/bin/startup.sh
ExecStop=/opt/dotcms/bin/shutdown.sh
User=dotcms
Group=dotcms
Restart=always

[Install]
WantedBy=multi-user.target

启动应用程序,并且使它在引导时自动启动。


sudo systemctl start dotcms
sudo systemctl enable dotcms

确保服务正在运行。


sudo systemctl status dotcms

配置反向代理

默认情况下,dotCMS服务器侦听端口8080 ,为了通过标准的HTTPHTTPS端口访问应用程序,我们将Nginx配置为反向代理,我们还将配置Nginx以便使用let's Encrypt免费SSL生成的SSL 。

安装Nginx web服务器。


sudo yum -y install nginx

启动web服务器,并且使它在引导时自动启动。


sudo systemctl start nginx
sudo systemctl enable nginx

安装Certbot,它是用于Let's Encrypt CA的客户端应用程序。


sudo yum -y install certbot

在请求证书之前,需要允许通过防火墙使端口80443或标准HTTPHTTPS服务,另外,从防火墙例外列表中删除端口8080,因为它不再需要。


sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload

注:要从let's Encrypt CA获取证书,必须将要生成证书的域名指向服务器,如果不是,必须对域名的DNS记录进行必要的更改,然后等待DNS再次传播以再次进行证书请求,Certbot在提供证书之前检查域颁发机构。

生成SSL证书。


sudo certbot certonly --webroot -w /usr/share/nginx/html -d cms.example.com

生成的证书存储在 /etc/letsencrypt/live/cms.example.com/ ,Let's Encrypt证书在90天内到期,因此建议使用Cron作业设置证书的自动续订。

打开cron作业文件。

 
sudo crontab -e

 

在文件的末尾添加以下行。


30 5 * * * /usr/bin/certbot renew --quiet

上面的cron工作将每天早上5:30运行。如果证书到期到期,将自动续订该证书。

为dotCMS站点创建新的服务器块文件。


sudo nano /etc/nginx/conf.d/cms.example.com.conf

填充文件。


server {
 listen 80;
 server_name cms.example.com;
 return 301 https://$host$request_uri;
}

server {
 listen 443;
 server_name cms.example.com;

 ssl_certificate /etc/letsencrypt/live/cms.example.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/cms.example.com/privkey.pem;

 ssl on;
 ssl_session_cache builtin:1000 shared:SSL:10m;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
 ssl_prefer_server_ciphers on;

 access_log /var/log/nginx/dotcms.access.log;

 location / {

 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;

 proxy_pass http://localhost:8080;
 proxy_read_timeout 90;

 proxy_redirect http://localhost:8080 https://cms.example.com;
 }
 }

重新启动Nginx web服务器,以便更改生效。


sudo systemctl restart nginx

访问下列地址的管理仪表板。


https://cms.example.com/dotAdmin

使用初始管理员帐户admin@dotcms.comadmin登录,登录后立即更改默认密码。

恭喜你,DOTCMS内容管理系统现已安装在你的服务器上,你可以修改演示站点,也可以从头开始构建你的网站。

月月 profile image