94 lines
4.4 KiB
Markdown
94 lines
4.4 KiB
Markdown
|
---
|
||
|
date: 2025-03-13
|
||
|
title: Code Server
|
||
|
tags:
|
||
|
- homelab
|
||
|
- development
|
||
|
- software
|
||
|
- code-assistant
|
||
|
---
|
||
|
|
||
|
I recently started using [Forgejo](https://forgejo.org/) for managing my personal projects (including this blog content).
|
||
|
Prior to this, I was using self-hosted [GitLab](https://about.gitlab.com/); maybe I'll write a full post about this
|
||
|
in the future, but basically I made the change because GitLab in Docker was a real memory hog and I much prefer
|
||
|
open source solutions where available. One thing I missed from GitLab (and GitHub) is the built-in web IDE for
|
||
|
making changes without having to clone the project locally. I found [Coder](https://coder.com/docs/code-server)
|
||
|
which provides a containerized VSCode PWA that I plan to use as an alternative to GitHub Codespaces and GitLab
|
||
|
workspaces.
|
||
|
|
||
|
## What is Code Server
|
||
|
Code Server is an open source container distribution of VSCodium. VSCodium is the open source release of VSCode (think
|
||
|
Chromium and Google Chrome). I personally have more experience with PyCharm and other JetBrains IDEs, but VSCode
|
||
|
is another popular option and I've been making the transition at work from PyCharm to VSCode after comparing the
|
||
|
LLM integration between them. Long story short, VSCode is miles ahead of JetBrains IDEs for code writing and
|
||
|
LLM context management as of sometime last week when I tested them both.
|
||
|
|
||
|
I haven't fully evaluated the differences between VSCode and Code Server yet, but in the context of a replacement for
|
||
|
what I had with GitLab and GitHub I am satisfied with what I see in Code Server.
|
||
|
|
||
|
|
||
|
## Deployment
|
||
|
Deployment is as simple as starting a Docker container. In addition to the documented setup process, I also mounted
|
||
|
a directory with my SSH configuration and keys so that I can easily connect to GitHub and my private Forgejo via SSH.
|
||
|
|
||
|
I configured nginx ingress (for access from my LAN only). For most deployments, its probably easier to just use IP
|
||
|
addresses but I like using nginx so that its a little easier to move deployments around and just update Nginx to point at
|
||
|
the appropriate IP address. I've included my site config below in case anyone reading this wants to achieve something
|
||
|
similar. I don't know that this is optimal, but it is working.
|
||
|
|
||
|
```
|
||
|
server {
|
||
|
listen 80;
|
||
|
listen 443 ssl;
|
||
|
server_name code.*;
|
||
|
|
||
|
include /config/nginx/ssl.conf;
|
||
|
add_header Front-End-Https on;
|
||
|
|
||
|
|
||
|
location / {
|
||
|
include /config/nginx/local_only.conf;
|
||
|
include /config/nginx/resolver.conf;
|
||
|
|
||
|
# Advanced Proxy Config
|
||
|
send_timeout 5m;
|
||
|
proxy_read_timeout 240;
|
||
|
proxy_send_timeout 240;
|
||
|
proxy_connect_timeout 240;
|
||
|
|
||
|
# Basic Proxy Config
|
||
|
proxy_set_header Host $host:$server_port;
|
||
|
proxy_set_header X-Client-IP $http_x_forwarded_for;
|
||
|
proxy_set_header X-Real-IP $remote_addr;
|
||
|
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
|
proxy_set_header X-Forwarded-Proto https;
|
||
|
proxy_redirect http:// $scheme://;
|
||
|
proxy_http_version 1.1;
|
||
|
proxy_set_header Upgrade $http_upgrade;
|
||
|
proxy_set_header Connection upgrade;
|
||
|
proxy_set_header Accept-Encoding gzip;
|
||
|
proxy_cache_bypass $cookie_session;
|
||
|
proxy_no_cache $cookie_session;
|
||
|
proxy_buffers 32 4k;
|
||
|
proxy_max_temp_file_size 2048m;
|
||
|
|
||
|
proxy_set_header X-Forwarded-Host code.mcknight.tech;
|
||
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||
|
proxy_set_header X-Forwarded-Ssl on;
|
||
|
proxy_pass http://coder:8080/;
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Future Plans
|
||
|
I still have some work to do before I decide whether or not Code Server can be my regular IDE, but so far it is a
|
||
|
solid option for when I'm on my laptop doing things like writing this post. Compared to a VM, I appreciate being
|
||
|
able to just copy/paste from my local clipboard. I might check out Coder as a more complete reproducible workspace
|
||
|
in lieu of Code Server, or I might give in and go with VSCode in a VM so that I get Copilot integration.
|
||
|
|
||
|
On a related node, I did try Cursor at work and was impressed with the LLM integration which does seem to outdo
|
||
|
what VSCode offers. I decided against adopting it for regular use since you do have to commit to a monthly
|
||
|
subscription and I'm not a big fan of the UI changes they applied on top of VSCode. My hope is that eventually
|
||
|
VSCode or some fork of it will enable local LLM integration, but then I would also want an open source LLM that
|
||
|
performs comparably to GPT-4o and Claude 3.7.
|