如何在CentOS 7上安装Mailtrain新闻通讯应用程序
使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。
Buildbot是一个基于Python的开源持续集成工具,可自动进行软件构建,测试和部署。Buildbot由一个或多个Buildbot母版以及许多工人组成。Buildbot master或Buildmaster具有系统的中央命令。它负责管理构建环境,工作人员,并做出有关向工作人员发送工作的所有决策。Buildmaster检测代码存储库中的更改,并将命令或作业发送给工作人员以执行。工人执行作业并将结果返回给Buildmaster。然后,Buildmaster通过多个受支持的渠道通知开发人员。在本教程中,我们将在CentOS 7上安装Buildbot master和worker。我们还将身份验证和Nginx配置为安全的反向代理。
在本教程中,我们将使用192.168.1.1公共IP地址和ci.example.com指向Vultr实例的域名。请确保将所有示例域名和IP地址替换为实际的域名和IP地址。
使用指南如何更新CentOS 7更新基本系统。系统更新后,继续安装PostgreSQL。
安装Pip,它是Python的软件包管理器。
sudo yum -y install epel-release
sudo yum -y install python-pip gcc python-devel git
sudo pip install --upgrade pip
Buildbot支持多种类型的数据库服务器,例如MySQL,PostgreSQL和SQLite。在本教程中,我们将使用PostgreSQL托管Buildbot数据库服务器。
PostgreSQL是一个对象关系数据库系统,以其稳定性和速度而闻名。默认yum存储库包含旧版本的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
为Buildbot创建一个新的PostgreSQL用户。
createuser bb_user
bb_user如果愿意,可以使用任何用户名代替。PostgreSQL提供了psql在数据库上运行查询的外壳。切换到PostgreSQL shell。
psql
为新创建的用户设置密码。
ALTER USER bb_user WITH ENCRYPTED password 'DBPassword';
替换DBPassword为安全密码。
为Buildbot安装创建一个新数据库。
CREATE DATABASE buildbot OWNER bb_user;
从psql外壳退出。
\q
切换到sudo用户。
exit
编辑pg_hba.conf文件以启用基于MD5的身份验证。
sudo nano /var/lib/pgsql/10/data/pg_hba.conf
找到以下行并改变值peer和ident,在METHOD列中,向trust和md5分别。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
更新后,配置将类似于以下文本。
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
保存文件并退出编辑器。为Python安装PostgreSQL数据库适配器。
sudo pip install psycopg2
重新启动PostgreSQL,以使更改生效。
sudo systemctl restart postgresql-10
使用Pip安装Buildbot。
sudo pip install 'buildbot[bundle]' pyopenssl service_identity
上面的命令将安装Buildbot沿buildbot-www,buildbot-worker和几个网络作为这样的插件buildbot-waterfall-view。
要确保已成功安装Buildbot,可以通过检查Buildbot的版本进行验证。
buildbot --version
输出应类似于以下文本。
[user@vultr ~]$ buildbot --version
Buildbot version: 0.9.15.post1
Twisted version: 17.9.0
修改防火墙规则以允许端口8010。Buildbot使用此端口侦听Web请求。
sudo firewall-cmd --zone=public --add-port=8010/tcp --permanent
sudo firewall-cmd --reload
创建一个新的非特权用户以运行Buildbot主进程和工作进程。不建议以root用户身份运行Buildbot主服务。
sudo adduser buildbot
sudo passwd buildbot
以新创建的buildbot用户身份登录。
sudo su - buildbot
在/home/buildbot/master目录中设置Buildbot主目录。该目录将包含每个构建的配置,状态和日志文件。
buildbot create-master --db 'postgresql://bb_user:DBPassword@localhost/buildbot' ~/master
确保在上述命令中替换数据库用户的凭据。
注意: 如果您希望使用SQLite数据库而不是PostgreSQL,只需忽略该--db 'postgresql://bb_user:DBpassword@localhost/buildbot'选项。SQLite数据库将在同一目录中创建。
上面的命令将创建~/master用于存储Buildmaster文件的目录。它还会将数据写入PostgreSQL数据库。您将获得以下输出。
[buildbot@vultr ~]$ buildbot create-master --db 'postgresql://bb_user:DBPassword@localhost/buildbot' ~/master
mkdir /home/buildbot/master
creating /home/buildbot/master/master.cfg.sample
creating database (postgresql://bb_user:DBPassword@localhost/buildbot)
buildmaster configured in /home/buildbot/master
将样本配置文件复制到实时配置文件。
cp ~/master/master.cfg.sample ~/master/master.cfg
编辑配置文件。
nano ~/master/master.cfg
找到以下几行。
c['workers'] = [worker.Worker("example-worker", "pass")]
...
c['builders'].append(
util.BuilderConfig(name="runtests",
workernames=["example-worker"],
factory=factory))
...
c['title'] = "Hello World CI"
c['titleURL'] = "https://buildbot.github.io/hello-world/"
...
c['buildbotURL'] = "http://localhost:8010/"
...
c['db'] = {
'db_url' : "postgresql://bb_user:DBpassword@localhost/buildbot",
}
上面的配置中有一个样本工作者条目。我们将为将要运行的工作程序修改示例条目localhost。将其更改example-worker为适合该localhost工作人员的名称,然后将其更改pass为其他密码。记下工作人员的名称和密码,因为在本教程的后面部分将需要使用该名称和密码。在构建器列表中更改工作人员的名称。根据需要更改应用程序名称和项目URL。
将Buildbot URL从更改localhost为您的实际域名或公共IP地址。另外,请验证配置文件中的数据库信息是否与您的实际数据库凭据匹配。
在文件末尾,添加c['buildbotNetUsageData'] = None。此参数将禁用将软件版本信息和插件使用详细信息发送给开发人员。但是,要启用发送使用信息的功能,请将选项更改为Full。
该配置应类似于以下文本。
c['workers'] = [worker.Worker("localhost-worker", "Password123")]
...
c['builders'].append(
util.BuilderConfig(name="runtests",
workernames=["localhost-worker"],
factory=factory))
...
c['title'] = "My Application CI"
c['titleURL'] = "https://example.com/my-app"
...
c['buildbotURL'] = "http://192.168.1.1:8010/"
...
c['db'] = {
'db_url' : "postgresql://bb_user:DBpassword@localhost/buildbot",
}
...
c['buildbotNetUsageData'] = None
保存文件并退出编辑器。检查配置文件中是否有错误。
buildbot checkconfig ~/master
如果配置文件没有错误,您将看到以下输出。
[buildbot@vultr ~]$ buildbot checkconfig ~/master
Config file is good!
现在,一切都已正确配置,您可以启动Buildbot主站了。
buildbot start ~/master
您将看到以下输出。
[buildbot@vultr ~]$ buildbot start ~/master
Following twistd.log until startup finished..
The buildmaster appears to have (re)started correctly.
既然Buildbot主服务器已正确启动,则可以通过访问Web用户界面http://192.168.1.1:8010。您应该看到以下Buildbot界面。

由于我们已经在中修改了工作程序配置~/master/master.cfg,因此我们可以继续创建新的工作程序。
buildbot-worker create-worker ~/worker localhost localhost-worker Password123
确保使用与~/master/master.cfg文件中提到的完全相同的工作人员名称和密码。如果工作人员名称或密码不匹配,则工作人员将无法连接到Buildbot主计算机。成功执行后,您将看到以下输出。
[buildbot@vultr ~]$ buildbot-worker create-worker ~/worker localhost example-worker pass
mkdir /home/buildbot/worker
mkdir /home/buildbot/worker/info
Creating info/admin, you need to edit it appropriately.
Creating info/host, you need to edit it appropriately.
Not creating info/access_uri - add it if you wish
Please edit the files in /home/buildbot/worker/info appropriately.
worker configured in /home/buildbot/worker
有关工作程序的信息存储在/info目录中。编辑有关开发人员的管理信息。
nano ~/worker/info/admin
将示例名称替换为您的真实姓名和电子邮件。
Your Name <[email protected]>
现在,打开包含有关主机信息的文件。
nano ~/worker/info/host
将示例指令替换为有关主机系统的实际信息。
Localhost, CentOS 7
worker admin和host信息仅用于告知用户有关系统的信息。您还可以添加有关系统的其他信息,例如Buildbot版本和Twisted版本。
启动工人。
buildbot-worker start ~/worker
输出将类似于以下文本。
[buildbot@vultr ~]$ buildbot-worker start ~/worker
Following twistd.log until startup finished..
The buildbot-worker appears to have (re)started correctly.
要检查工作人员是否已注册,请转到Buildbot的Web界面,然后Builds >> Workers从左侧导航至。您应该看到该工作人员已经准备就绪,可以开始工作了。

要运行示例构建,要检查Buildbot worker是否成功运行,请导航至Builds >> Builders。单击runtests构建器名称以打开构建器界面,然后单击Force按钮以强制构建。提供您的姓名,然后单击Start Build按钮以开始构建。由于这是检查Buildbot环境的示例构建测试,因此将在几秒钟内完成。您将获得成功消息和构建结果。

尽管可以使用上面的命令轻松启动Buildbot主和工作程序,但建议使用Systemd单元来运行和管理Buildbot服务。这将确保它们在系统重新启动和出现故障时自动启动。
注意: 通过运行或再次切换到sudo用户。从现在开始,所有命令都需要由用户执行。exitsu <username>sudo
停止正在运行的Buildbot工作程序和主服务。
sudo su buildbot -c "buildbot stop /home/buildbot/master"
sudo su buildbot -c "buildbot-worker stop ~/worker"
为Buildbot主文件创建一个新的Systemd单元文件。
sudo nano /etc/systemd/system/buildbot.service
填充文件。
[Unit]
Description=BuildBot master service
After=network.target
[Service]
Type=forking
User=buildbot
Group=buildbot
WorkingDirectory=/home/buildbot/master
ExecStart=/usr/bin/buildbot start
ExecStop=/usr/bin/buildbot stop
ExecReload=/usr/bin/buildbot restart
[Install]
WantedBy=multi-user.target
启动Buildbot主站,并使其在启动时自动启动。
sudo systemctl start buildbot
sudo systemctl enable buildbot
为Buildbot工作程序创建一个新的Systemd单元文件。
sudo nano /etc/systemd/system/buildbot-worker.service
填充文件。
[Unit]
Description=BuildBot worker service
After=network.target
[Service]
Type=forking
User=buildbot
Group=buildbot
WorkingDirectory=/home/buildbot/worker
ExecStart=/usr/bin/buildbot-worker start
ExecStop=/usr/bin/buildbot-worker stop
ExecReload=/usr/bin/buildbot-worker restart
[Install]
WantedBy=multi-user.target
启动Buildbot worker,并使它能够在启动时自动启动。
sudo systemctl start buildbot-worker
sudo systemctl enable buildbot-worker
您可以检查服务的状态。
sudo systemctl status buildbot buildbot-worker
如果服务运行顺利,您将在输出中看到。
[user@vultr ~]$ sudo systemctl status buildbot buildbot-worker
● buildbot.service - BuildBot master service
...
Active: active (running) since Fri 2018-01-12 16:00:59 UTC; 1min 25s ago
...
Jan 12 16:00:59 vultr.guest systemd[1]: Started BuildBot master service.
● buildbot-worker.service - BuildBot worker service
...
Active: active (running) since Fri 2018-01-12 16:02:00 UTC; 24s ago
...
Jan 12 16:02:00 vultr.guest systemd[1]: Started BuildBot worker service.
默认情况下,Buildbot Web界面中未启用身份验证。对于面向Internet的站点,强烈建议设置身份验证,以便只有授权用户才能执行管理任务。要设置身份验证,请重新打开Buildbot主配置文件。
sudo su buildbot -c "nano /home/buildbot/master/master.cfg"
将以下行添加到文件末尾。
c['www']['authz'] = util.Authz(
allowRules = [
util.AnyEndpointMatcher(role="admins")
],
roleMatchers = [
util.RolesFromUsername(roles=['admins'], usernames=['admin_user'])
]
)
c['www']['auth'] = util.UserPasswordAuth({'admin_user': 'AdminPassword'})
用admin_user您要使用的实际用户名和AdminPassword一个强密码替换两次出现的。
检查配置文件中的错误。
sudo su buildbot -c "buildbot checkconfig /home/buildbot/master"
重新启动Buildbot主服务,以使更改生效。
sudo systemctl restart buildbot
再次浏览Web界面以查看匿名用户只能查看有关构建服务器的基本详细信息。现在,使用master.cfg文件中设置的凭据登录,您将看到所有其他管理功能仅对登录的admin用户可用。
默认情况下,Buildbot侦听8010不安全连接上的端口。HTTPS建议使用来保护Web界面的安全,以确保在从浏览器到服务器的传输过程中数据是安全的。在本教程的这一部分中,我们将使用“让我们加密免费的SSL证书”来安装和保护Nginx。Nginx Web服务器将充当反向代理,以将传入的请求转发到Buildbot的HTTP端点。
安装Nginx。
sudo yum -y install nginx
启动Nginx并使它能够在启动时自动启动。
sudo systemctl start nginx
sudo systemctl enable nginx
安装Certbot,这是Let's Encrypt CA的客户端应用程序。
sudo yum -y install certbot
在可以请求证书之前,您将需要允许端口80和/ 443或标准HTTP和HTTPS服务通过防火墙。另外,删除port 8010,侦听不安全的连接。
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --zone=public --remove-port=8010/tcp --permanent
sudo firewall-cmd --reload
注意: 要从Let's Encrypt CA获得证书,必须为其生成证书的域指向服务器。如果不是,请对域的DNS记录进行必要的更改,并在再次发出证书请求之前,等待DNS传播。Certbot在提供证书之前会检查域权限。
生成SSL证书。
sudo certbot certonly --webroot -w /usr/share/nginx/html -d ci.example.com
生成的证书很可能存储在/etc/letsencrypt/live/ci.example.com/目录中。SSL证书将存储为fullchain.pem,私钥将存储为privkey.pem。
让我们加密证书的有效期限为90天,因此建议您使用Cron作业设置证书的自动续订。
打开用户的cron作业文件root。
sudo crontab -e
在文件末尾添加以下行。
30 5 * * * /usr/bin/certbot renew --quiet
上面的cron作业每天凌晨5:30运行。如果证书到期,它将自动更新它们。
现在,更改Nginx默认配置文件以删除该default_server行。
sudo sed -i 's/default_server//g' /etc/nginx/nginx.conf
为Buildbot Web界面创建一个新的配置文件。
sudo nano /etc/nginx/conf.d/buildbot.conf
填充文件。
upstream buildbot {
server 127.0.0.1:8010;
}
server {
listen 80 default_server;
server_name ci.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2 default_server;
server_name ci.example.com;
root html;
index index.html index.htm;
ssl on;
ssl_certificate /etc/letsencrypt/live/ci.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ci.example.com/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
access_log /var/log/nginx/buildbot.access.log;
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_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Host $host;
location / {
proxy_pass http://buildbot;
}
location /sse/ {
proxy_buffering off;
proxy_pass http://buildbot/sse/;
}
location /ws {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://buildbot/ws;
proxy_read_timeout 6000s;
}
}
检查新配置文件中的错误。
sudo nginx -t
如果看到以下输出,则说明配置没有错误。
[user@vultr ~]$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果收到某种错误,请确保仔细检查SSL证书的路径。重新启动Nginx Web服务器以实现配置更改。
sudo systemctl restart nginx
打开Buildmaster配置文件。
sudo su buildbot -c "nano /home/buildbot/master/master.cfg"
找到以下行。
c['buildbotURL'] = "http://192.168.1.1:8010/"
根据您使用的域名更改URL。
c['buildbotURL'] = "https://ci.example.com/"
重新启动Buildbot主服务。
sudo systemctl restart buildbot
现在,您可以通过访问Buildbot仪表板https://ci.example.com。您将看到与Buildbot的连接现在已通过SSL保护。

使用管理员凭据登录并添加您的第一个管道以开始构建应用程序。
使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。
Oxwall是一个开源社交网络软件平台,可用于免费构建自定义社交网站(SNS)。在这篇文章中,
FTP是用于通过Internet传输文件的有用协议,本指南将向您展示如何设置vsFTPd(非常安全的文件传输协议守护程序)o
在本教程中,我们将介绍在CentOS 6x x64上安装和使用nethogs的过程。nethogs是一种网络监视工具,它允许Networ
使用其他系统?简介BoltWire是一个用PHP编写的免费,轻量级的内容管理系统。与大多数其他内容管理人员相比
欢迎来到另一个Vultr教程。在这里,您将学习如何安装和运行SAMP服务器。本指南是为CentOS 6编写的。先决条件
简介/ etc /目录在Linux系统运行中起着至关重要的作用。其原因是因为几乎每个系统配置
使用其他系统?Microweber是一个开放源代码的拖放式CMS和在线商店。Microweber源代码托管在GitHub上。本指南将向您展示
使用其他系统?SonarQube是用于质量系统开发的开源工具。它是用Java编写的,并且支持多个数据库。它提供
使用其他系统?Mosh是Mobile Shell的缩写,是一种新兴的远程终端应用程序,旨在提供更好的连接和使用
MoinMoin是一个使用Python编写的基于文件系统的开源Wiki引擎。如今,MoinMoin已广泛用于开源社区。许多供应商
H2O是新一代HTTP服务器,它对所有当前使用的Web服务器都具有出色的,功能齐全的HTTP / 2实现。使用H2O作为您的Web服务器
在Linux和Unix系统管理员中,使用sudo用户访问服务器并在root级执行命令是一种非常普遍的做法。使用泡沫
使用其他系统?Countly是一个开源Web /移动分析和营销平台。它具有许多用于从Web收集数据的功能
MODX是一个用PHP编写的免费开放源内容管理系统。它使用MySQL或MariaDB来存储其数据库。MODX专为满足以下条件的企业而设计:
使用其他系统?Lychee 3.1相册是一种简单,灵活,免费和开源的照片管理工具,可在VPS服务器上运行。安装
使用其他系统?ERP或企业资源计划是用于管理核心业务流程的企业应用程序套件。ERPNext是免费的
使用其他系统?Paste 2.1是一个简单,灵活,免费和开源的pastebin应用程序,用于存储代码,文本等。最初是
使用其他系统?Seafile(社区版本)是一个免费和开源的文件同步和共享解决方案,类似于ownCloud。机智
使用其他系统?Kolab Groupware是一个免费的基于Web的开源组件软件。它的功能包括电子邮件通信,事件
在Arch Linux上使用Makepkg可以避免系统污染,确保仅安装必要的依赖关系。
快速学习如何在Ubuntu 16.04上安装OpenSIPS控制面板,为VoIP提供商提供支持的功能。
学习如何在Fedora 28上安装Akaunting,一款适合小型企业和自由职业者的开源会计软件。
使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。
了解導致Minecraft延遲的原因和解決方案,包括優化伺服器性能和減少滯後的步驟。
勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根
ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。
Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+
閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。
最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息