程序部署方案
为了标准化程序部署,便于后续维护,每个待部署的程序需要准备以下几个文件
- systemd 服务配置文件
- firewalld 防火墙服务配置文件
Systemd 配置
创建 Systemd 服务
通常情况下,systemd 服务保存在/usr/lib/systemd/system/路径下。
创建并编辑文件/usr/lib/systemd/system/<服务名>.service:
bash
sudo nano /usr/lib/systemd/system/<服务名>.service编写以下内容:
ini
[Unit]
Description=服务描述
# 断言路径存在,不存在则启动失败
AssertPathExists=/path/to/file
[Service]
# 运行服务时使用的账户
User=user
# 运行服务的方式
# simple 主进程启动就算启动完成
# notify 启动后能与 systemd 建立联系就算启动完成
Type=simple
# 服务运行时使用的命令
ExecStart=/path/to/executable
# 服务运行时的工作目录
WorkingDirectory=/path/to/
[Install]
WantedBy=multi-user.target在服务创建完成后,需要通过以下命令重载配置文件:
bash
systemctl daemon-reload启动服务
在服务创建完成后,我们需要启动服务。 服务需要通过以下命令启动:
bash
systemctl start <服务名>NOTE
如果服务无法启动,且在 systemctl status <服务名> 中存在以下信息:
plain
Unable to locate executable '/path/to/executable': Permission denied则可以尝试临时关闭 SELinux:
bash
setenforce 0如果恢复正常,则问题出自 SELinux,可以尝试恢复 SELinux 安全上下文:
bash
restorecon -v /path/to/executable可以设置服务为开机启动:
bash
systemctl enable <服务名>Firewalld 配置
创建 Firewalld 服务
通常情况下,firewalld 服务保存在/etc/firewalld/services/路径下。
创建并编辑文件/etc/firewalld/services/<服务名>.xml:
IMPORTANT
服务名中不能包含.等不合法的符号。
bash
sudo nano /etc/firewalld/services/<服务名>.xml编写以下内容:
xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>服务名</short>
<description>服务描述</description>
<!-- 开放的端口 -->
<port protocol="tcp" port="8080"/>
</service>重新加载防火墙配置:
bash
firewall-cmd --complete-reload可以通过以下命令查看服务是否配置成功:
bash
firewall-cmd --get-services | grep <服务名>TIP
如果发现就连原有的自定义服务都消失了的话,可能是配置存在错误。 若要验证配置是否正确,可以使用此命令:
bash
firewall-offline-cmd --check-config配置防火墙规则
在配置完服务后,需要在激活的区域配置中启用服务。
查看当前活动的区域配置的方法是:
bash
firewall-cmd --get-active-zones可能返回以下内容
plain
public (default)
interfaces: eth0此时,这里的public就是活动区域。
在确认了活动区域后,通过以下命令来激活配置:
bash
firewall-cmd --zone=<活动区域> --add-service=<服务名> --permanent重新加载防火墙配置:
bash
firewall-cmd --complete-reload