FAQ.md 9.9 KB
Newer Older
A
Anmol Sethi 已提交
1 2
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
A
Anmol Sethi 已提交
3 4
# FAQ

A
Anmol Sethi 已提交
5 6 7 8 9 10 11 12
- [Questions?](#questions)
- [What's the deal with extensions?](#whats-the-deal-with-extensions)
- [Where are extensions stored?](#where-are-extensions-stored)
- [How is this different from VS Code Codespaces?](#how-is-this-different-from-vs-code-codespaces)
- [How should I expose code-server to the internet?](#how-should-i-expose-code-server-to-the-internet)
- [How do I securely access web services?](#how-do-i-securely-access-web-services)
  - [Sub-domains](#sub-domains)
  - [Sub-paths](#sub-paths)
13
- [Multi-tenancy](#multi-tenancy)
A
Anmol Sethi 已提交
14 15 16 17 18
- [Docker in code-server docker container?](#docker-in-code-server-docker-container)
- [Collaboration](#collaboration)
- [How can I disable telemetry?](#how-can-i-disable-telemetry)
- [How does code-server decide what workspace or folder to open?](#how-does-code-server-decide-what-workspace-or-folder-to-open)
- [How do I debug issues with code-server?](#how-do-i-debug-issues-with-code-server)
A
Anmol Sethi 已提交
19
- [Heartbeat File](#heartbeat-file)
A
Anmol Sethi 已提交
20
- [How does the config file work?](#how-does-the-config-file-work)
21
- [Blank screen on iPad?](#blank-screen-on-ipad)
A
Anmol Sethi 已提交
22 23 24 25
- [Enterprise](#enterprise)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

A
Anmol Sethi 已提交
26 27
## Questions?

A
Anmol Sethi 已提交
28 29 30
Please file all questions and support requests at https://www.reddit.com/r/codeserver/.

The issue tracker is **only** for bugs.
A
Anmol Sethi 已提交
31

A
Anmol Sethi 已提交
32 33
## What's the deal with extensions?

A
Anmol Sethi 已提交
34 35 36 37 38 39 40 41 42 43 44 45
Unfortunately, the Microsoft VS Code Marketplace license prohibits use with any non Microsoft
product.

See https://cdn.vsassets.io/v/M146_20190123.39/_content/Microsoft-Visual-Studio-Marketplace-Terms-of-Use.pdf

> Marketplace Offerings are intended for use only with Visual Studio Products and Services
> and you may only install and use Marketplace Offerings with Visual Studio Products and Services.

As a result, Coder has created its own marketplace for open source extensions. It works by scraping
GitHub for VS Code extensions and building them. It's not perfect but getting better by the day with
more and more extensions.

A
Abin Simon 已提交
46
Issue [#1299](https://github.com/cdr/code-server/issues/1299) is a big one in making the experience here
A
Anmol Sethi 已提交
47 48 49
better by allowing the community to submit extensions and repos to avoid waiting until the scraper finds
an extension.

A
Anmol Sethi 已提交
50
If an extension is not available or does not work, you can grab its VSIX from its Github releases or
A
Anmol Sethi 已提交
51 52 53 54
build it yourself. Then run the `Extensions: Install from VSIX` command in the Command Palette and
point to the .vsix file.

See below for installing an extension from the cli.
A
Anmol Sethi 已提交
55

A
Anmol Sethi 已提交
56
Feel free to file an issue to add a missing extension to the marketplace.
A
Anmol Sethi 已提交
57

A
Anmol Sethi 已提交
58 59 60
If you have your own custom marketplace, it is possible to point code-server to it by setting
`$SERVICE_URL` and `$ITEM_URL` to point to it.

A
Anmol Sethi 已提交
61
## Where are extensions stored?
A
Anmol Sethi 已提交
62

A
Anmol Sethi 已提交
63
Defaults to `~/.local/share/code-server/extensions`.
A
Anmol Sethi 已提交
64

A
Anmol Sethi 已提交
65
If the `XDG_DATA_HOME` environment variable is set the data directory will be
A
Anmol Sethi 已提交
66
`$XDG_DATA_HOME/code-server/extensions`. In general we try to follow the XDG directory spec.
A
Anmol Sethi 已提交
67 68

You can install an extension on the CLI with:
A
Anmol Sethi 已提交
69

A
Anmol Sethi 已提交
70 71 72
```bash
# From the Coder extension marketplace
code-server --install-extension ms-python.python
A
Anmol Sethi 已提交
73

A
Anmol Sethi 已提交
74 75 76 77 78 79 80 81
# From a downloaded VSIX on the file system
code-server --install-extension downloaded-ms-python.python.vsix
```

## How is this different from VS Code Codespaces?

VS Code Codespaces is a closed source and paid service by Microsoft. It also allows you to access
VS Code via the browser.
82

A
Anmol Sethi 已提交
83
However, code-server is free, open source and can be ran on any machine without any limitations.
84

A
Anmol Sethi 已提交
85 86 87 88 89
While you can self host environments with VS Code Codespaces, you still need to an Azure billing
account and you access VS Code via the Codespaces web dashboard instead of directly connecting to
your instance.

## How should I expose code-server to the internet?
A
Anmol Sethi 已提交
90

A
Anmol Sethi 已提交
91
Please follow [./guide.md](./guide.md) for our recommendations on setting up and using code-server.
A
Anmol Sethi 已提交
92 93

code-server only supports password authentication natively.
A
Anmol Sethi 已提交
94

95 96
**note**: code-server will rate limit password authentication attempts at 2 a minute and 12 an hour.

A
Anmol Sethi 已提交
97 98
If you want to use external authentication (i.e sign in with Google) you should handle this
with a reverse proxy using something like [oauth2_proxy](https://github.com/pusher/oauth2_proxy).
A
Asher 已提交
99

A
Anmol Sethi 已提交
100 101 102
For HTTPS, you can use a self signed certificate by passing in just `--cert` or
pass in an existing certificate by providing the path to `--cert` and the path to
its key with `--cert-key`.
A
Anmol Sethi 已提交
103 104 105 106 107 108 109 110

If `code-server` has been passed a certificate it will also respond to HTTPS
requests and will redirect all HTTP requests to HTTPS. Otherwise it will respond
only to HTTP requests.

You can use [Let's Encrypt](https://letsencrypt.org/) to get an SSL certificate
for free.

A
Anmol Sethi 已提交
111
Again, Please follow [./guide.md](./guide.md) for our recommendations on setting up and using code-server.
A
Anmol Sethi 已提交
112

A
Asher 已提交
113
## How do I securely access web services?
A
Asher 已提交
114

A
Asher 已提交
115
code-server is capable of proxying to any port using either a subdomain or a
A
Asher 已提交
116 117
subpath which means you can securely access these services using code-server's
built-in authentication.
A
Asher 已提交
118 119

### Sub-domains
A
Asher 已提交
120

A
Asher 已提交
121 122 123 124 125 126 127
You will need a DNS entry that points to your server for each port you want to
access. You can either set up a wildcard DNS entry for `*.<domain>` if your domain
name registrar supports it or you can create one for every port you want to
access (`3000.<domain>`, `8080.<domain>`, etc).

You should also set up TLS certificates for these subdomains, either using a
wildcard certificate for `*.<domain>` or individual certificates for each port.
A
Asher 已提交
128 129 130 131

Start code-server with the `--proxy-domain` flag set to your domain.

```
A
Asher 已提交
132
code-server --proxy-domain <domain>
A
Asher 已提交
133 134
```

A
Asher 已提交
135
Now you can browse to `<port>.<domain>`. Note that this uses the host header so
A
Asher 已提交
136 137 138
ensure your reverse proxy forwards that information if you are using one.

### Sub-paths
A
Asher 已提交
139

A
Asher 已提交
140
Just browse to `/proxy/<port>/`.
A
Asher 已提交
141

142
## Multi-tenancy
A
Anmol Sethi 已提交
143

A
Anmol Sethi 已提交
144 145 146 147 148 149 150 151 152
If you want to run multiple code-server's on shared infrastructure, we recommend using virtual
machines with a VM per user. This will easily allow users to run a docker daemon. If you want
to use kubernetes, you'll definitely want to use [kubevirt](https://kubevirt.io) to give each
user a virtual machine instead of just a container. Docker in docker while supported requires
privileged containers which are a security risk in a multi tenant infrastructure.

## Docker in code-server docker container?

If you'd like to access docker inside of code-server, we'd recommend running a docker:dind container
153 154 155
and mounting in a directory to share between dind and the code-server container at /var/run. After, install
the docker CLI in the code-server container and you should be able to access the daemon as the socket
will be shared at /var/run/docker.sock.
A
Anmol Sethi 已提交
156 157 158 159 160 161 162 163

In order to make volume mounts work, mount the home directory in the code-server container and the
dind container at the same path. i.e you'd volume mount a directory from the host to `/home/coder`
on both. This will allow any volume mounts in the home directory to work. Similar process
to make volume mounts in any other directory work.

## Collaboration

A
Anmol Sethi 已提交
164 165 166
We understand the high demand but the team is swamped right now.

You can follow progress at [#33](https://github.com/cdr/code-server/issues/33).
A
Anmol Sethi 已提交
167 168 169 170 171

## How can I disable telemetry?

Use the `--disable-telemetry` flag to completely disable telemetry. We use the
data collected only to improve code-server.
A
Anmol Sethi 已提交
172

A
Asher 已提交
173 174 175 176 177 178
## How does code-server decide what workspace or folder to open?

code-server tries the following in order:

1. The `workspace` query parameter.
2. The `folder` query parameter.
179 180
3. The workspace or directory passed on the command line.
4. The last opened workspace or directory.
A
Asher 已提交
181

A
Asher 已提交
182 183 184 185 186 187 188 189 190 191 192 193 194
## How do I debug issues with code-server?

First run code-server with at least `debug` logging (or `trace` to be really
thorough) by setting the `--log` flag or the `LOG_LEVEL` environment variable.
`-vvv` and `--verbose` are aliases for `--log trace`.

```
code-server --log debug
```

Once this is done, replicate the issue you're having then collect logging
information from the following places:

A
Anmol Sethi 已提交
195
1. stdout
A
Anmol Sethi 已提交
196
2. The most recently created directory in the `~/.local/share/code-server/logs` directory.
A
Asher 已提交
197 198 199 200 201
3. The browser console and network tabs.

Additionally, collecting core dumps (you may need to enable them first) if
code-server crashes can be helpful.

A
Anmol Sethi 已提交
202
## Heartbeat File
A
Asher 已提交
203

A
Anmol Sethi 已提交
204 205 206 207
`code-server` touches `~/.local/share/code-server/heartbeat` once a minute as long
as there is an active browser connection.

If you want to shutdown `code-server` if there hasn't been an active connection in X minutes
A
Anmol Sethi 已提交
208
you can do so by continuously checking the last modified time on the heartbeat file and if it is
A
Anmol Sethi 已提交
209
older than X minutes, you should kill `code-server`.
210

A
Anmol Sethi 已提交
211
[#1636](https://github.com/cdr/code-server/issues/1636) will make the experience here better.
A
Asher 已提交
212

A
Anmol Sethi 已提交
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
## How does the config file work?

When `code-server` starts up, it creates a default config file in `~/.config/code-server/config.yaml` that looks
like this:

```yaml
bind-addr: 127.0.0.1:8080
auth: password
password: mewkmdasosafuio3422 # This is randomly generated for each config.yaml
cert: false
```

Each key in the file maps directly to a `code-server` flag. Run `code-server --help` to see
a listing of all the flags.

The default config here says to listen on the loopback IP port 8080, enable password authorization
and no TLS. Any flags passed to `code-server` will take priority over the config file.

The `--config` flag or `$CODE_SERVER_CONFIG` can be used to change the config file's location.

233 234
The default location also respects `$XDG_CONFIG_HOME`.

235 236 237 238 239 240 241 242 243
## Blank screen on iPad?

Unfortunately at the moment self signed certificates cause a blank screen on iPadOS

There does seem to a way to get it to work if you create your own CA and create a
certificate using the CA and then import the CA onto your iPad.

See [#1566](https://github.com/cdr/code-server/issues/1566#issuecomment-623159434).

A
Anmol Sethi 已提交
244 245 246 247
## Enterprise

Visit [our enterprise page](https://coder.com) for more information about our
enterprise offerings.