Code-server üçüncü parti bir hizmet kullanmadan, kendi sunucunuz üzerinde uzaktan geliştirme imkanı sunan çevrimiçi IDE çözümüdür. Temel olarak uzak sunucunuzda çalışan, tarayıcınızla ulaşabileceğiniz bir Microsoft Visual Studio Code ortamı. İlk başta bu ne ya dedirtip, biraz kurcalayıp anladıktan sora “oha bu süper” dedirten şeylerden. 🙂

Neden Uzaktan (Remote) Geliştirme?

Özellikle hizmet olarak sunulan remote geliştirme ortamlarının takım çalışması da dahil bir çok avantajı var, fakat kendi sunucunuzda tek başınıza çalışacağınız bir code-server ortamı bile (böyle olmak zorunda değil tabii) bir çok avantajı beraberinde getiriyor.

CodeServer ile

  • Bilgisayar bağımsız geliştirme yapabilirsiniz, herhangi bir yerde, herhangi bir bilgisayarı kullanarak geliştirmeye devam edebilirsiniz
  • Her projeniz için ayrı bir bilgisayar kullanmanız mümkün değil, ama her projeniz için basit bir VPS sunucu ayağa kaldırarak tamamen bağımsız bir ortam oluşturabilirsiniz.
  • Göreceli olarak sınırsız sistem kaynağınız olur. Sunucu yazılımları yerel makinenizdeki gibi Chrome’la hafıza veya CPU savaşı yapmak zorunda kalmaz. Kodunuz mu yavaş çalışıyor, bilgisayarınız mı çuvalladı ayırt etmeniz daha kolay olur. 🙂
  • Eğer biraz daha uğraşmayı göze alırsanız çok kullanıcılı bir ortam ve ekip arkadaşlarınızla birlikte çalışma imkanına kavuşursunuz.

CodeServer kurulumu nasıl yapılır?

Standart bir linux dağıtımına kendiniz kurabileceğiniz gibi kolay çözüm olarak Docker konteyneri içinde çalıştırabilirsiniz. CodeServer’ın kendisi hazır ayarlarla bile sorunsuz olarak çalışacaktır.

Ben kurulum için LinuxServer.io tarafından sağlanan docker kalıbını herhangi bir özelleştirme yapmadan doğrudan kullandım.

Aşağıdakine benzer bir docker-compose dosyası oluşturup docker-compose up komutu ile kurulumu tamamlayabilirsiniz.

---
version: "2.1"
services:
  code-server:
    image: ghcr.io/linuxserver/code-server
    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
    volumes:
       - /path/to/appdata/config:/config
     ports:
      - 8443:8443
    restart: unless-stopped

konteyneri docker-compose up komutu ile ayağa kaldırmadan önce şifre, alan adında isteğinize göre düzenleme yapmanız ve sisteminizdeki uygun dizinle :/config klasörünü eşleştirerek bir volume tanımını yapmanız gerekiyor. (Ben kolaylık açısından config /workspace dizinini de /workspace olarak mount ettim)

Örnekte 8443 portuun dışarıya açıldığı görülüyor ama codeserver’a doğrudan bağlantı yapmadan, reverse-proxy arkasında kullanacaksanız bu portu açmanız gerekmez. (Reverse proxy’inizin aynı docker ağına dahil olduğunu varsayarsak)

CodeServer Reverse-Proxy arkasında çalıştırmak

Nginx veya Litespeed gibi bir sunucuyu reverse-proxy (ters vekil sunucu) olarak kullanıp güvenlik sertifikası işini kolayca halledebilirsiniz. (Ya da bunu CodeServer konteyneri içinden halletmeniz gerekir ki bence hiç gerek yok). Ek olarak proxy arkasına almanız güvenlik seçenekleri açısından da daha faydalı olacaktır.

Reverse proxy ayarlanırken CodeServer arayüzünün sunucu ile web socket protokolü üzerinden bağlandığını da dikkate almak gerekiyor. Litespeed Web Server’ı socket protokolünde proxy olarak kullanmak beni saatlerce uğraştırdı ve en sonunda çok basit bir hata yaptığımı farkettim. Litespeed reverse proxy olarak ayarlanırken yönlendirmeyi sunucu adına (hostname) yapabiliyorsunuz, fakat Web Socket proxy ayarını yaparken mutlaka IP adresi ile belirtmeniz gerekiyor, benim gibi buna dikkat etmeyenler de saatlerce uğraşmak zorunda kalıyorlar. 🙂

CodeServer dezavantajları

Ben CodeServer’ı güvenlik açısından yeterli bulmuyorum. Sadece bir parola ile giriş yapılıyor ve saldırılara karşı korumasız. Belki güvenliği artırılmış başka dağıtımlar veya kalıplar vardır bilmiyorum ama benim kullandığım haliyle hiç güvenilir gelmedi. Code-sever portunu portunu dışarıya kapatıp sadece kendi ip’inizden gelen bağlantılara veya bir VPN sunucu kurarak sadece VPN ağından gelen bağlantılara açabilir, veya reverse-proxy arkasında 80/443 portlarında kullanacaksanız .htaccess ile IP tabanlı bir tanımlama yapabilirsiniz.

Kutudan çıkan haliyle çoklu kullanıcı desteği yok ve bırakın ekip olarak aynı proje-dosya üzerinde çalışmayı, birden fazla kullanıcının bağımsız hesapları olması bile mümkün değil. GitHub’da bu durumu çözdüğünü iddia eden çeşitli üçüncü parti dağıtımlar var (mesela birisi bu) ama codeserver orijinal olarak böyle bir destek sağlamıyor.

Ben CodeServer’ı nasıl kullanıyorum?

İşte böyle

Klasör Yapısı

CodeServer konteyneri içerisinde workspace (çalışma alanı) olarak belirlediğim alanı, Litespeed web sunucusunun konteynerine de tanımlayarak ortak bir alan oluşturdum. İlgili adrese 8080 ve 4430 portları üzerinden bağlandığımda Litespeed doğrudan workspace içerisindeki betikleri çalıştırdığı için geliştirme yapmak çok kolay oluyor.

80 ve 443 portları staging ortamı için kullanabilirsiniz, development ortamınız sadece size, staging ortamınız ise dünyaya açık olabilir.

Production ve Development’ı bu şekilde birlikte çalıştırmak gereksiz risk olacaktır. Tavsiye etmiyorum.

Sunucu Portları ve Reverse Proxy

Ben CodeServer’ı reverse proxy arkasına aldım fakat aktif olarak kullanmıyorum. Firewall’dan belirli portların erişimini kendi IP’ime açmak, .htaccess sunucuyu IP’ime bağlamaktan daha güvende hissettiriyor. Bu nedenle doğrudan erişim portunu, Firewall’dan sadece kendi IP’im ile sınırlandırarak kullanıyorum.

Terminal, PHP ve Composer

CodeServer’dan terminal kullanmak gayet pratik, fakat benim gibi konteyner içerisinde çalıştırdığınızda kullandığınız terminalde konteyner’in içindeki terminal oluyor. Ana sunucunuzdaki uygulamaları, dosyaları ve/veya php-composer gibi araçları kullanamıyorsunuz ve konteyner içerisinde kurmanız gerekiyor. Fakat ortamınızı bir kere hazır hale getirdikten sonra tadından yenmediğini de söyleyebilirim.

Sorularınız varsa veya fikir alışverişi yapmak isterseniz yorumlardan, Twitter , LinkedIn veya Instagram üzerinden ulaşabilirsiniz. Sevgiler…

Bu Yazıda Yapılan Değişiklikler
  • 11.05.2022: Yazı özeti düzenlendi.