如何使用 docker-compose、systemd 和 nginx 设置 OnlyOffice

在此设置中,我们展示如何使用 nginx 作为反向代理设置 OnlyOffice,使用 docker-compose 运行和配置 OnlyOffice 镜像,使用 systemd 自动启动和重启 OnlyOffice 实例。在反向代理配置中运行它允许你在同一 IP 地址上监听其他域并集中管理 Let’s Encrypt SSL 证书。

我们将在 /opt/onlyoffice 端口 2291 上设置实例。

将此文件保存为 /opt/onlyoffice/docker-compose.yml 不要忘记将 JWT_SECRET 更改为随机密码!

docker-compose.yml
services:
  onlyoffice-documentserver:
    image: onlyoffice/documentserver:latest
    restart: always
    environment:
      - JWT_ENABLED=true
      - JWT_SECRET=Shei9AifuZ4ze7udahG2seb3aa6ool
    ports:
      - 2291:80
    volumes:
      - ./onlyoffice/data:/var/www/onlyoffice/Data
      - ./onlyoffice/lib:/var/lib/onlyoffice
      - ./onlyoffice/logs:/var/log/onlyoffice
      - ./onlyoffice/db:/var/lib/postgresql

现在我们可以创建 systemd 服务。我使用 TechOverflow 的 docker-compose systemd .service 生成器创建它。将其保存在 /etc/systemd/system/OnlyOffice.service

OnlyOffice.service
[Unit]
Description=OnlyOffice
Requires=docker.service
After=docker.service

[Service]
Restart=always
User=root
Group=docker
# 当单元停止时关闭容器(如果正在运行)
ExecStartPre=/usr/local/bin/docker-compose -f /opt/onlyoffice/docker-compose.yml down
# 当单元启动时启动容器
ExecStart=/usr/local/bin/docker-compose -f /opt/onlyoffice/docker-compose.yml up
# 当单元停止时停止容器
ExecStop=/usr/local/bin/docker-compose -f /opt/onlyoffice/docker-compose.yml down

[Install]
WantedBy=multi-user.target

现在我们可以使用以下命令启用并启动服务

onlyoffice_systemd_enable.sh
sudo systemctl enable OnlyOffice.service
sudo systemctl start OnlyOffice.service

现在让我们在 /etc/nginx/sites-enabled/OnlyOffice.conf 中创建 nginx 配置。显然,你至少需要修改

OnlyOffice.conf
server {
    server_name onlyoffice.mydomain.com;

    access_log /var/log/nginx/onlyoffice.access_log;
    error_log /var/log/nginx/onlyoffice.error_log info;

    location / {
        proxy_pass http://127.0.0.1:2291;
        proxy_http_version 1.1;
        proxy_read_timeout 3600s;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        add_header X-Frontend-Host $host;
    }

    listen 80;
}

使用以下命令检查 nginx 配置的有效性

nginx_test_reload.sh
sudo nginx -t

除非失败,否则使用以下命令重新加载 nginx

nginx_reload.sh
sudo service nginx reload

现在我建议使用 certbot 在你的域上启用 TLS 加密。你应该已经熟悉这些步骤;我的方法是 sudo apt -y install python-certbot-nginx,然后 certbot --nginx --staging 首先获取临时证书以避免在有任何问题时被阻止,获取临时证书后使用 certbot --nginxRenew & replace cert。之后,运行 sudo service nginx reload 并检查你的域是否使用 HTTPS 工作。如果 certbot 询问你,你应该始终选择重定向到 HTTPS。


Check out similar posts by category: Docker, Nginx