vapor-docs/docs/deploy/systemd.zh.md

70 lines
1.8 KiB
Markdown

# Systemd
Systemd 是大多数 Linux 发行版中默认的系统和服务管理器。它通常是默认安装的,所以在支持 Swift 的发行版上无需安装。
## 配置
服务器上的每个 Vapor 应用程序都应该有自己的服务文件。对于 `Hello` 示例项目,配置文件位于 `/etc/systemd/system/hello.service`. 该文件如下所示:
```sh
[Unit]
Description=Hello
Requires=network.target
After=network.target
[Service]
Type=simple
User=vapor
Group=vapor
Restart=always
RestartSec=3
WorkingDirectory=/home/vapor/hello
ExecStart=/home/vapor/hello/.build/release/App serve --env production
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=vapor-hello
[Install]
WantedBy=multi-user.target
```
正如我们的配置文件中所指定的,`Hello` 项目位于用户 `vapor` 的主文件夹中。确保 `WorkingDirectory` 指向 `Package.swift` 文件所在项目的根目录。
`--env production` 标志将禁用详细日志记录。
### 环境
此外,以下部分是可选配置,但建议使用。
你可以通过 systemd 以下面其中一种方式导出变量,或通过创建一个包含所有环境变量的文件:
```sh
EnvironmentFile=/path/to/environment/file1
EnvironmentFile=/path/to/environment/file2
```
或者你可以直接将它们添加到服务文件 `[service]` 下:
```sh
Environment="PORT=8123"
Environment="ANOTHERVALUE=/something/else"
```
在 Vapor 中可以用使用 `Environment.get` 导出变量。
```swift
let port = Environment.get("PORT")
```
## 启动
你现在可以通过 `root` 身份运行以下命令来加载、启用、启动、停止和重启你的应用程序了。
```sh
systemctl daemon-reload
systemctl enable hello
systemctl start hello
systemctl stop hello
systemctl restart hello
```