# Getting Started

## 🚧 Prerequisites

### ⚙️ Container Runtime

You need any host with either

- Docker CE / EE running
- or Docker-CE and configured 'swarm' mode.

### 📦 Get the image

You can download the image from the gitea embedded container registry: `gitea.ocram85.com/codeserver/arkanum` with these tags:

- `latest` - Is based on the lasted master branch commit.
- `next` - Is a test build based on the pull request
- `1`, `0.1`, `0.1.0`, `1.0.0` - tag based version.

> **💡 NOTE: See the [packages page](https://gitea.ocram85.com/CodeServer/-/packages/container/arkanum/latest) for latest version and all other available tags.**

The container images are also published to these registries:

- [Docker Hub](https://hub.docker.com/r/ocram85/arkanum)
  - Pull Endpoint: `ocram85/arkanum`
- [GitHub Container Registry](https://github.com/OCram85/arkanum/pkgs/container/arkanum)
  - Pull Endpoint: `ghcr.io/ocram85/arkanum`
- [Codeberg Packages](https://codeberg.org/codeserver/-/packages/container/arkanum/next)
- Pull Endpoint: `codeberg.org/codeserver/arkanum`

## 🏗️ Installation

### Run as Docker Swarm Stack

This example shows how to run arkanum as an additional swarm stack.

Therefore you need

- an already running docker swarm cluster,
- a running traefik instance handling the http and https routes,
- configured to expose services in the a ingress overlay network called `traefik-public`.

> ❗ **Warning:** Make sure to secure the access to arkanum with proper **authentication method** and use
> a trusted + **secure https connection**.

```yaml
version: "3.8"
services:
  arkanum:
    image: gitea.ocram85.com/codeserver/arkanum:1.0.0
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Berlin
      - PASSWORD=foo #optional
      #- HASHED_PASSWORD= #optional
      - SUDO_PASSWORD=foobar #optional
      #- SUDO_PASSWORD_HASH= #optional
      #- PROXY_DOMAIN=code-server.my.domain #optional
      - DEFAULT_WORKSPACE=/config/workspace
    deploy:
      replicas: 1
      labels:
       - "traefik.enable=true"
       - "traefik.docker.network=traefik-public"
       - "traefik.http.routers.arkanum.rule=Host(`vscode.mydomain.com`)"
       - "traefik.http.routers.arkanum.tls.certresolver=myresolver"
       - "traefik.http.services.arkanum-srv.loadbalancer.server.port=8443"
    volumes:
      # store workspace and use config in volume.
      - codedata:/config
      # mount docker socket to manage host docker
      - /var/run/docker.sock:/var/run/docker.sock
    # no need to expose the port. traefik acts as reverse proxy and handles the https access.
    #ports:
    #  - 8443:8443
    networks:
      - arkanum-sphere
      - traefik-public

volumes:
  codedata:

networks:
  arkanum-sphere:
  traefik-public:
    external: true
```

> 💡 NOTE: For advanced config with additional environment variables see [linuxserver/docker-code-server](https://github.com/linuxserver/docker-code-server) help.

### Use Docker-Compose

This is a basic example for a `docker-compose` file from the [linuxserver/docker-code-server](https://github.com/linuxserver/docker-code-server) project.

See their [docs](https://github.com/linuxserver/docker-code-server#parameters) about a detailed help for advanced config parameters.

```yaml
---
version: "3.8"
services:
  arkanum:
    image: gitea.ocram85.com/codeserver/arkanum:1.0.0
    container_name: code-server
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/London
      - PASSWORD=password #optional
      - HASHED_PASSWORD= #optional
      - SUDO_PASSWORD=password #optional
      - SUDO_PASSWORD_HASH= #optional
      - PROXY_DOMAIN=code-server.my.domain #optional
      - DEFAULT_WORKSPACE=/config/workspace #optional
    volumes:
      - /path/to/appdata/config:/config
    ports:
      - 8443:8443
    restart: unless-stopped
```

## 🦶 First Steps

After summon Arkanum your first steps should be to set your username and email in the git config:

```bash
arkanum git setup "my-name" "my-email"
```

And that's it. Now you're ready use arkanum as your daily remote code editor. 😄

## 📖 Content

<p align="center">
  <a href="https://gitea.ocram85.com/CodeServer/arkanum/">
    <img
      src="https://gitea.ocram85.com/CodeServer/arkanum/raw/branch/master/assets/screen1.png"
      alt="Screenshot1"
    >
  </a>
</p>
