# Changelog

## 2020-03-18

- Allow non-dynamic flag.

## 2020-02-18

- Refine front for ctfd newer version.(@frankli0324)

## 2019-11-21

- Add network prefix & timeout setting.
- Refine port and network range search
- Refine frp request
- Refine lock timeout

## 2019-11-08

- Add Lan Domain

## 2019-11-04

- Change backend to Docker Swarm.
- Support depoly different os image to different os node.

You should init docker swarm, and add your node to it. And name them with following command:

```
docker node update --label-add name=windows-1 ****
docker node update --label-add name=linux-1 ****
```

Name of them should begin with windows- or linux-.

And put them in the setting panel.

Then if you want to deploy a instance to windows node, You should tag your name with prefix "windows", like "glzjin/super_sql:windows".

And please modify the container network driver to 'Overlay'!

## 2019-10-30

- Optimize for multi worker.
- Try to fix concurrency request problem.

Now You should set the redis with REDIS_HOST environment varible.

## 2019-09-26

- Add frp http port setting.

You should config it at the settings for http redirect.

## 2019-09-15

- Add Container Network Setting and DNS Setting.

Now You can setup a DNS Server in your Container Network.
- For single-instance network, Just connect your dns server to it and input the ip address in the seeting panel.
- For multi-instance network, You should rename the dns server to a name include "dns", than add it to auto connect instance. It will be used as a dns server.

## 2019-09-14

- Refine plugin path.

## 2019-09-13

- Refine removal.

## 2019-08-29

- Add CPU usage limit.
- Allow the multi-image challenge.

Upgrade:
1. Execute this SQL in ctfd database.

```
alter table dynamic_docker_challenge add column cpu_limit float default 0.5 after memory_limit;
```  

2. Setting the containers you want to plugin to a single multi-image network. (In settings panel)

3. When you create a challenge you can set the docker image like this

```
{"socks": "serjs/go-socks5-proxy", "web": "blog_revenge_blog", "mysql": "blog_revenge_mysql", "oauth": "blog_revenge_oauth"}
```

The first one will be redirected the traffic.
