# 分离部署UI和模型

有时候，将Ollama与UI分开托管是有益的，同时还要保留跨用户共享的RAG和RBAC支持功能：

# 宇光同行AI chat平台配置

## UI配置

对于UI配置，你可以按如下方式设置Apache VirtualHost：

```
# 假设你在"server.com"上托管此UI
<VirtualHost 192.168.1.100:80>
    ServerName server.com
    DocumentRoot /home/server/public_html

    ProxyPass / http://server.com:3000/ nocanon
    ProxyPassReverse / http://server.com:3000/
    # 0.5版本后需要
    ProxyPass / ws://server.com:3000/ nocanon
    ProxyPassReverse / ws://server.com:3000/

</VirtualHost>
```

在请求SSL之前需要先启用站点：

`a2ensite server.com.conf` # 这将启用站点。a2ensite是"Apache 2 Enable Site"的简写

```
# SSL配置
<VirtualHost 192.168.1.100:443>
    ServerName server.com
    DocumentRoot /home/server/public_html

    ProxyPass / http://server.com:3000/ nocanon
    ProxyPassReverse / http://server.com:3000/
    # 0.5版本后需要
    ProxyPass / ws://server.com:3000/ nocanon
    ProxyPassReverse / ws://server.com:3000/

    SSLEngine on
    SSLCertificateFile /etc/ssl/virtualmin/170514456861234/ssl.cert
    SSLCertificateKeyFile /etc/ssl/virtualmin/170514456861234/ssl.key
    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

    SSLProxyEngine on
    SSLCACertificateFile /etc/ssl/virtualmin/170514456865864/ssl.ca
</VirtualHost>
```

这里我使用virtualmin来管理SSL集群，但你也可以直接使用certbot或你喜欢的SSL方法。使用SSL需要：

### 前提条件

运行以下命令：

`snap install certbot --classic`
`snap apt install python3-certbot-apache` (这将安装apache插件)

导航到apache sites-available目录：

`cd /etc/apache2/sites-available/`

如果还没有创建server.com.conf，请创建它，包含上述`<virtualhost>`配置（应该与你的情况相匹配，根据需要修改）。使用不带SSL的版本：

创建完成后，运行`certbot --apache -d server.com`，这将为你请求并添加/创建SSL密钥，同时创建server.com.le-ssl.conf

# 配置Ollama服务器

在最新安装的Ollama上，确保你已经按照官方Ollama参考设置了api服务器：

[Ollama FAQ](https://github.com/jmorganca/ollama/blob/main/docs/faq.md)

### 简要说明

该指南似乎与Linux上当前更新的服务文件不匹配。所以，我们在这里说明：

除非你是从源代码编译Ollama，使用标准安装`curl https://ollama.com/install.sh | sh`会在/etc/systemd/system中创建一个名为`ollama.service`的文件。你可以使用nano编辑该文件：

```
sudo nano /etc/systemd/system/ollama.service
```

添加以下行：

```
Environment="OLLAMA_HOST=0.0.0.0:11434" # 这行是必需的。你也可以指定
```

例如：

```
[Unit]
Description=Ollama Service
After=network-online.target

[Service]
ExecStart=/usr/local/bin/ollama serve
Environment="OLLAMA_HOST=0.0.0.0:11434" # 这行是必需的。你也可以指定192.168.254.109:其他端口，格式
Environment="OLLAMA_ORIGINS=http://192.168.254.106:11434,https://models.server.city" # 这行是可选的
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/s>

[Install]
WantedBy=default.target
```

按CTRL+S保存文件，然后按CTRL+X

当你的计算机重启时，Ollama服务器将在你指定的IP:PORT上监听，在这种情况下是0.0.0.0:11434或192.168.254.106:11434（无论你的本地IP地址是什么）。确保你的路由器正确配置，通过将11434转发到你的本地IP服务器来提供页面服务。

# Ollama模型配置

## 对于Ollama模型配置，使用以下Apache VirtualHost设置：

导航到apache sites-available目录：

`cd /etc/apache2/sites-available/`

`nano models.server.city.conf` # 与你的ollama服务器域名匹配

添加以下包含此示例的virtualhost（根据需要修改）：

```
# 假设你在"models.server.city"上托管此UI
<IfModule mod_ssl.c>
    <VirtualHost 192.168.254.109:443>
        DocumentRoot "/var/www/html/"
        ServerName models.server.city
        <Directory "/var/www/html/">
            Options None
            Require all granted
        </Directory>

        ProxyRequests Off
        ProxyPreserveHost On
        ProxyAddHeaders On
        SSLProxyEngine on

        ProxyPass / http://server.city:1000/ nocanon # 或端口11434
        ProxyPassReverse / http://server.city:1000/ # 或端口11434

        SSLCertificateFile /etc/letsencrypt/live/models.server.city/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/models.server.city/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
    </VirtualHost>
</IfModule>
```

在请求SSL之前，你可能需要先启用站点（如果你还没有这样做）：

`a2ensite models.server.city.conf`

#### Ollama服务器的SSL部分

运行以下命令：

导航到apache sites-available目录：

`cd /etc/apache2/sites-available/`
`certbot --apache -d server.com`

```
<VirtualHost 192.168.254.109:80>
    DocumentRoot "/var/www/html/"
    ServerName models.server.city
    <Directory "/var/www/html/">
        Options None
        Require all granted
    </Directory>

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyAddHeaders On
    SSLProxyEngine on

    ProxyPass / http://server.city:1000/ nocanon # 或端口11434
    ProxyPassReverse / http://server.city:1000/ # 或端口11434

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =models.server.city
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
```

别忘了使用`systemctl reload apache2`重启/重载Apache

在https://server.com打开你的站点！

**恭喜**，你的_**类似ChatGPT风格的UI**_现在正在提供具有RAG、RBAC和多模态功能的AI服务！如果你还没有下载Ollama模型，请立即下载！

如果你遇到任何配置错误或问题，请提交issue或参与我们的讨论。这里有很多友好的开发者可以帮助你。

让我们一起让这个UI对每个人都更加友好！

感谢选择宇光同行AI chat平台作为你的AI界面！

本文档由来自菲律宾的**宇光同行AI chat平台**爱好者**Bob Reyes**编写。
