Clash (Not-fix)
Clash is a Service

ClashT as a Service

While ClashT is meant to be run in the background, there's currently no elegant way to implement daemons with Golang, hence we recommend you to daemonize ClashT with third-party tools.

systemd

Copy ClashT binary to /usr/local/bin and configuration files to /etc/clash:

cp clash /usr/local/bin
cp config.yaml /etc/clash/
cp Country.mmdb /etc/clash/

Create the systemd configuration file at /etc/systemd/system/clash.service:

[Unit]
Description=ClashT daemon, A rule-based proxy in Go.
After=network-online.target
 
[Service]
Type=simple
Restart=always
ExecStart=/usr/local/bin/clash -d /etc/clash
 
[Install]
WantedBy=multi-user.target

After that you're supposed to reload systemd:

systemctl daemon-reload

Launch clashd on system startup with:

systemctl enable clash

Launch clashd immediately with:

systemctl start clash

Check the health and logs of ClashT with:

systemctl status clash
journalctl -xe

Credits to ktechmidas (opens in a new tab) for this guide. (#754 (opens in a new tab))

Docker

We provide pre-built images of ClashT and ClashT Premium. Therefore you can deploy ClashT with Docker Compose (opens in a new tab) if you're on Linux. However, you should be advised that it's not recommended (opens in a new tab) to run ClashT Premium in a container.

::: warning This setup will not work on macOS systems due to the lack of host networking and TUN support (opens in a new tab) in Docker for Mac. :::

::: code-group

services:
  clash:
    image: ghcr.io/dreamacro/clash
    restart: always
    volumes:
      - ./config.yaml:/root/.config/clash/config.yaml:ro
      # - ./ui:/ui:ro # dashboard volume
    ports:
      - "7890:7890"
      - "7891:7891"
      # - "8080:8080" # The External Controller (RESTful API)
    network_mode: "bridge"
services:
  clash:
    image: ghcr.io/dreamacro/clash-premium
    restart: always
    volumes:
      - ./config.yaml:/root/.config/clash/config.yaml:ro
      # - ./ui:/ui:ro # dashboard volume
    ports:
      - "7890:7890"
      - "7891:7891"
      # - "8080:8080" # The External Controller (RESTful API)
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun
    network_mode: "host"

:::

Save as docker-compose.yaml and place your config.yaml in the same directory.

::: tip Before proceeding, refer to your platform documentations about time synchronisation - things will break if time is not in sync. :::

When you're ready, run the following commands to bring up ClashT:

docker-compose up -d

You can view the logs with:

docker-compose logs

Stop ClashT with:

docker-compose stop

FreeBSD rc

install clash with ports(7) or pkg(8)

copy the required files to /usr/local/etc/clash

cp config.yaml /usr/local/etc/clash/
cp Country.mmdb /usr/local/etc/clash/

Create the rc configuration file at /usr/local/etc/rc.d/clash:

#!/bin/sh
 
# PROVIDE: clash
# REQUIRE: NETWORKING DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown
 
. /etc/rc.subr
 
name=clash
rcvar=clash_enable
 
: ${clash_enable="NO"}
: ${clash_config_dir="/usr/local/etc/clash"}
 
required_dirs="${clash_config_dir}"
required_files="${clash_config_dir}/config.yaml ${clash_config_dir}/Country.mmdb"
 
command="/usr/sbin/daemon"
procname="/usr/local/bin/${name}"
pidfile="/var/run/${name}.pid"
start_precmd="${name}_prestart"
 
clash_prestart()
{
	rc_flags="-T ${name} -p ${pidfile} ${procname} -d ${clash_config_dir} ${rc_flags}"
}
 
load_rc_config $name
run_rc_command "$1"

make the script executable:

chmod +x /usr/local/etc/rc.d/clash

Launch clashd on system startup with:

service clash enable

Launch clashd immediately with:

service clash onestart

Check the status of ClashT with:

service clash status

You can check log in file /var/log/daemon.log

::: tip If you want to change the default config directory add the following lines to /etc/rc.conf :

clash_enable (bool):        Set it to YES to run clash on startup.
                            Default: NO
clash_config_dir (string):   clash config directory.
                            Default: /usr/loca/etc/clash

:::