{"id":1551,"date":"2025-06-21T14:26:08","date_gmt":"2025-06-21T14:26:08","guid":{"rendered":"https:\/\/zahiralam.com\/blog\/?p=1551"},"modified":"2025-06-23T09:18:08","modified_gmt":"2025-06-23T09:18:08","slug":"access-vs-code-from-any-device-install-code-server-on-ubuntu-24-04","status":"publish","type":"post","link":"https:\/\/zahiralam.com\/blog\/access-vs-code-from-any-device-install-code-server-on-ubuntu-24-04\/","title":{"rendered":"Access VS Code from Any Device: Install code-server on Ubuntu 24.04"},"content":{"rendered":"\n<p>Do you want to access Visual Studio Code from your tablet, iPad, Android, iPhone, or any browser-enabled device? With&nbsp;<code>code-server<\/code>, you can run VS Code on a remote Ubuntu server and access it from anywhere in the world using a browser.\n\n\n\n<p>This guide shows you how to set up code-server using Docker on&nbsp;<strong>Ubuntu 24.04 LTS<\/strong>.\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2728 Prerequisites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>An Ubuntu 24.04 server (cloud VPS or local machine)<\/li>\n\n\n\n<li>Root or sudo access<\/li>\n\n\n\n<li>Domain name pointed to your server (optional but recommended)<\/li>\n<\/ul>\n\n\n\n<p>Before starting, make sure Docker is installed. Follow this step-by-step guide to install Docker:\n\n\n\n<p>\ud83d\udc49&nbsp;<a href=\"https:\/\/zahiralam.com\/blog\/quickly-install-docker-on-your-ubuntu-24-04-system\/\">Quickly Install Docker on Your Ubuntu 24.04 System<\/a>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Step 1: Create a Project Directory<\/h2>\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-1\">mkdir -p \/root\/code-projects\ncd \/root\/code-projects<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#mkdir%20-p%20%2Froot%2Fcode-projects%0Acd%20%2Froot%2Fcode-projects\">\n                            <button class=\"copy-button\" data-label=\"mkdir -p \/root\/code-projects\ncd \/root\/code-projects\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<p>You can later clone your Git repos here:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-2\">git clone https:\/\/github.com\/yourusername\/your-repo.git<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#git%20clone%20https%3A%2F%2Fgithub.com%2Fyourusername%2Fyour-repo.git\">\n                            <button class=\"copy-button\" data-label=\"git clone https:\/\/github.com\/yourusername\/your-repo.git\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Step 2: Run code-server in Docker<\/h2>\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-3\">docker run -d \\\n  -p 9000:8080 \\\n  -v &quot;\/root\/code-projects:\/home\/coder\/projects&quot; \\\n  -v &quot;\/root\/code-extensions:\/home\/coder\/.vscode&quot; \\\n  -e PASSWORD=&quot;yourpassword&quot; \\\n  --name code-server \\\n  codercom\/code-server:latest<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#docker%20run%20-d%20%5C%0A%20%20-p%209000%3A8080%20%5C%0A%20%20-v%20%22%2Froot%2Fcode-projects%3A%2Fhome%2Fcoder%2Fprojects%22%20%5C%0A%20%20-v%20%22%2Froot%2Fcode-extensions%3A%2Fhome%2Fcoder%2F.vscode%22%20%5C%0A%20%20-e%20PASSWORD%3D%22yourpassword%22%20%5C%0A%20%20--name%20code-server%20%5C%0A%20%20codercom%2Fcode-server%3Alatest\">\n                            <button class=\"copy-button\" data-label=\"docker run -d \\\n  -p 9000:8080 \\\n  -v &quot;\/root\/code-projects:\/home\/coder\/projects&quot; \\\n  -v &quot;\/root\/code-extensions:\/home\/coder\/.vscode&quot; \\\n  -e PASSWORD=&quot;yourpassword&quot; \\\n  --name code-server \\\n  codercom\/code-server:latest\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<p>This will:\n\n\n\n<ul class=\"wp-block-list\">\n<li>Run code-server in background<\/li>\n\n\n\n<li>Expose it on port 9000<\/li>\n\n\n\n<li>Secure it with a password<\/li>\n\n\n\n<li>Mount your Git project folder<\/li>\n\n\n\n<li>Persist extensions across container restarts<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Step 3: Install SSL Certificate with Certbot<\/h2>\n\n\n\n<p>If you have a domain like&nbsp;<code>vs-code.yourdomain.com<\/code>&nbsp;pointed to your server, install an SSL certificate with Let&#8217;s Encrypt:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-4\">sudo apt install certbot python3-certbot-apache\nsudo certbot --apache -d vs-code.yourdomain.com<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#sudo%20apt%20install%20certbot%20python3-certbot-apache%0Asudo%20certbot%20--apache%20-d%20vs-code.yourdomain.com\">\n                            <button class=\"copy-button\" data-label=\"sudo apt install certbot python3-certbot-apache\nsudo certbot --apache -d vs-code.yourdomain.com\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<p>This will automatically configure Apache with HTTPS and generate a valid SSL certificate.\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Step 4: Configure Apache for Public Access (with WebSocket Support)<\/h2>\n\n\n\n<p>Create or update your Apache SSL virtual host config at:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-5\">sudo nano \/etc\/apache2\/sites-available\/vs-code.yourdomain.com-le-ssl.conf<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#sudo%20nano%20%2Fetc%2Fapache2%2Fsites-available%2Fvs-code.yourdomain.com-le-ssl.conf\">\n                            <button class=\"copy-button\" data-label=\"sudo nano \/etc\/apache2\/sites-available\/vs-code.yourdomain.com-le-ssl.conf\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<p>Paste this config:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-6\">&lt;IfModule mod_ssl.c&gt;\n&lt;VirtualHost *:443&gt;\n    ServerName vs-code.yourdomain.com\n\n    SSLEngine on\n    SSLCertificateFile \/etc\/letsencrypt\/live\/vs-code.yourdomain.com\/fullchain.pem\n    SSLCertificateKeyFile \/etc\/letsencrypt\/live\/vs-code.yourdomain.com\/privkey.pem\n    Include \/etc\/letsencrypt\/options-ssl-apache.conf\n\n    ProxyPreserveHost On\n    ProxyRequests Off\n    ProxyPass \/ http:\/\/localhost:9000\/ nocanon\n    ProxyPassReverse \/ http:\/\/localhost:9000\/\n\n    RewriteEngine on\n    RewriteCond %{HTTP:Upgrade} =websocket [NC]\n    RewriteRule \/(.*) ws:\/\/localhost:9000\/$1 [P,L]\n\n    ErrorLog ${APACHE_LOG_DIR}\/vs-code-error.log\n    CustomLog ${APACHE_LOG_DIR}\/vs-code-access.log combined\n&lt;\/VirtualHost&gt;\n&lt;\/IfModule&gt;\n<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#%3CIfModule%20mod_ssl.c%3E%0A%3CVirtualHost%20%2A%3A443%3E%0A%20%20%20%20ServerName%20vs-code.yourdomain.com%0A%0A%20%20%20%20SSLEngine%20on%0A%20%20%20%20SSLCertificateFile%20%2Fetc%2Fletsencrypt%2Flive%2Fvs-code.yourdomain.com%2Ffullchain.pem%0A%20%20%20%20SSLCertificateKeyFile%20%2Fetc%2Fletsencrypt%2Flive%2Fvs-code.yourdomain.com%2Fprivkey.pem%0A%20%20%20%20Include%20%2Fetc%2Fletsencrypt%2Foptions-ssl-apache.conf%0A%0A%20%20%20%20ProxyPreserveHost%20On%0A%20%20%20%20ProxyRequests%20Off%0A%20%20%20%20ProxyPass%20%2F%20http%3A%2F%2Flocalhost%3A9000%2F%20nocanon%0A%20%20%20%20ProxyPassReverse%20%2F%20http%3A%2F%2Flocalhost%3A9000%2F%0A%0A%20%20%20%20RewriteEngine%20on%0A%20%20%20%20RewriteCond%20%25%7BHTTP%3AUpgrade%7D%20%3Dwebsocket%20%5BNC%5D%0A%20%20%20%20RewriteRule%20%2F%28.%2A%29%20ws%3A%2F%2Flocalhost%3A9000%2F%241%20%5BP%2CL%5D%0A%0A%20%20%20%20ErrorLog%20%24%7BAPACHE_LOG_DIR%7D%2Fvs-code-error.log%0A%20%20%20%20CustomLog%20%24%7BAPACHE_LOG_DIR%7D%2Fvs-code-access.log%20combined%0A%3C%2FVirtualHost%3E%0A%3C%2FIfModule%3E%0A\">\n                            <button class=\"copy-button\" data-label=\"&lt;IfModule mod_ssl.c&gt;\n&lt;VirtualHost *:443&gt;\n    ServerName vs-code.yourdomain.com\n\n    SSLEngine on\n    SSLCertificateFile \/etc\/letsencrypt\/live\/vs-code.yourdomain.com\/fullchain.pem\n    SSLCertificateKeyFile \/etc\/letsencrypt\/live\/vs-code.yourdomain.com\/privkey.pem\n    Include \/etc\/letsencrypt\/options-ssl-apache.conf\n\n    ProxyPreserveHost On\n    ProxyRequests Off\n    ProxyPass \/ http:\/\/localhost:9000\/ nocanon\n    ProxyPassReverse \/ http:\/\/localhost:9000\/\n\n    RewriteEngine on\n    RewriteCond %{HTTP:Upgrade} =websocket [NC]\n    RewriteRule \/(.*) ws:\/\/localhost:9000\/$1 [P,L]\n\n    ErrorLog ${APACHE_LOG_DIR}\/vs-code-error.log\n    CustomLog ${APACHE_LOG_DIR}\/vs-code-access.log combined\n&lt;\/VirtualHost&gt;\n&lt;\/IfModule&gt;\n\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<p>Enable necessary Apache modules:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-7\">sudo a2enmod proxy proxy_http proxy_wstunnel rewrite\nsudo systemctl restart apache2<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#sudo%20a2enmod%20proxy%20proxy_http%20proxy_wstunnel%20rewrite%0Asudo%20systemctl%20restart%20apache2\">\n                            <button class=\"copy-button\" data-label=\"sudo a2enmod proxy proxy_http proxy_wstunnel rewrite\nsudo systemctl restart apache2\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Step 5: Fix File Permission Errors (if needed)<\/h2>\n\n\n\n<p>If you face a permission error like:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-8\">Failed to save &#039;.env&#039;: Unable to write file ... (NoPermissions (FileSystemError): Error: EACCES: permission denied, open ...)<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#Failed%20to%20save%20%27.env%27%3A%20Unable%20to%20write%20file%20...%20%28NoPermissions%20%28FileSystemError%29%3A%20Error%3A%20EACCES%3A%20permission%20denied%2C%20open%20...%29\">\n                            <button class=\"copy-button\" data-label=\"Failed to save &#039;.env&#039;: Unable to write file ... (NoPermissions (FileSystemError): Error: EACCES: permission denied, open ...)\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<p>This is likely because the files are owned by&nbsp;<code>root<\/code>&nbsp;on the host, but&nbsp;<code>code-server<\/code>&nbsp;runs as the&nbsp;<code>coder<\/code>&nbsp;user inside the container. To fix this, run:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-9\">sudo chown -R 1000:1000 \/root\/code-projects<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#sudo%20chown%20-R%201000%3A1000%20%2Froot%2Fcode-projects\">\n                            <button class=\"copy-button\" data-label=\"sudo chown -R 1000:1000 \/root\/code-projects\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<p>This changes the ownership of your project folder to match the internal\u00a0<code>coder<\/code>\u00a0user (UID 1000), allowing full read\/write access from within code-server.\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfa8 Step 6: Install GitHub Copilot and Copilot Chat Extensions<\/h2>\n\n\n\n<p>You can install GitHub Copilot and GitHub Copilot Chat manually using&nbsp;<code>.vsix<\/code>&nbsp;files in code-server.\n\n\n\n<h3 class=\"wp-block-heading\">1. Download Extensions:<\/h3>\n\n\n\n<p>From your local desktop VS Code (where you see the extensions):\n\n\n\n<ol class=\"wp-block-list\" start=\"1\">\n<li>Open the Extensions panel<\/li>\n\n\n\n<li>Search for&nbsp;<strong>GitHub Copilot<\/strong>&nbsp;and&nbsp;<strong>GitHub Copilot Chat<\/strong><\/li>\n\n\n\n<li>Click the gear icon \u2699\ufe0f &gt;&nbsp;<strong>Download VSIX<\/strong><\/li>\n\n\n\n<li>For&nbsp;<strong>GitHub Copilot<\/strong>, choose&nbsp;<strong>Web<\/strong>&nbsp;platform when prompted<\/li>\n<\/ol>\n\n\n\n<p>Or download via terminal:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-10\">wget https:\/\/marketplace.visualstudio.com\/_apis\/public\/gallery\/publishers\/GitHub\/vsextensions\/copilot\/1.336.0\/vspackage -O github-copilot.vsix<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#wget%20https%3A%2F%2Fmarketplace.visualstudio.com%2F_apis%2Fpublic%2Fgallery%2Fpublishers%2FGitHub%2Fvsextensions%2Fcopilot%2F1.336.0%2Fvspackage%20-O%20github-copilot.vsix\">\n                            <button class=\"copy-button\" data-label=\"wget https:\/\/marketplace.visualstudio.com\/_apis\/public\/gallery\/publishers\/GitHub\/vsextensions\/copilot\/1.336.0\/vspackage -O github-copilot.vsix\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-11\">wget https:\/\/marketplace.visualstudio.com\/_apis\/public\/gallery\/publishers\/GitHub\/vsextensions\/copilot-chat\/0.28.1\/vspackage -O github-copilot-chat.vsix<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#wget%20https%3A%2F%2Fmarketplace.visualstudio.com%2F_apis%2Fpublic%2Fgallery%2Fpublishers%2FGitHub%2Fvsextensions%2Fcopilot-chat%2F0.28.1%2Fvspackage%20-O%20github-copilot-chat.vsix\">\n                            <button class=\"copy-button\" data-label=\"wget https:\/\/marketplace.visualstudio.com\/_apis\/public\/gallery\/publishers\/GitHub\/vsextensions\/copilot-chat\/0.28.1\/vspackage -O github-copilot-chat.vsix\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Note: Versions&nbsp;<code>1.336.0<\/code>&nbsp;and&nbsp;<code>0.28.1<\/code>&nbsp;are current at the time of writing this article. Check for newer versions if needed.\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">2. Upload and Install in code-server:<\/h3>\n\n\n\n<p>In code-server browser UI:\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to&nbsp;<strong>Extensions &gt; &#8230; &gt; Install from VSIX<\/strong><\/li>\n\n\n\n<li>Click&nbsp;<strong>Show Local<\/strong>, then choose the&nbsp;<code>.vsix<\/code>&nbsp;file from your machine<\/li>\n\n\n\n<li>Click&nbsp;<strong>Install<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Or use terminal:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-12\">code-server --install-extension \/home\/coder\/projects\/github-copilot.vsix\ncode-server --install-extension \/home\/coder\/projects\/github-copilot-chat.vsix<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#code-server%20--install-extension%20%2Fhome%2Fcoder%2Fprojects%2Fgithub-copilot.vsix%0Acode-server%20--install-extension%20%2Fhome%2Fcoder%2Fprojects%2Fgithub-copilot-chat.vsix\">\n                            <button class=\"copy-button\" data-label=\"code-server --install-extension \/home\/coder\/projects\/github-copilot.vsix\ncode-server --install-extension \/home\/coder\/projects\/github-copilot-chat.vsix\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<p>If you see compatibility errors for Copilot Chat, upgrade to the latest version of code-server as shown in Step 2.\n\n\n\n<p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd10 Step 7: Access from Any Device<\/h2>\n\n\n\n<p>Open your browser and visit:\n\n\n\n<div class=\"code-block-container\">\n                        <pre class=\"wp-block-code\"><code id=\"code-13\">http:\/\/your-server-ip:9000     (if no domain)\nhttps:\/\/vs-code.yourdomain.com (if domain is configured)<\/code><\/pre>\n                        <amp-iframe sandbox=\"allow-scripts\" width=\"94\" height=\"72\" frameborder=\"0\" \n                                    src=\"https:\/\/zahiralam.com\/blog\/wp-content\/plugins\/amp-copy-code-button\/copier.html#http%3A%2F%2Fyour-server-ip%3A9000%20%20%20%20%20%28if%20no%20domain%29%0Ahttps%3A%2F%2Fvs-code.yourdomain.com%20%28if%20domain%20is%20configured%29\">\n                            <button class=\"copy-button\" data-label=\"http:\/\/your-server-ip:9000     (if no domain)\nhttps:\/\/vs-code.yourdomain.com (if domain is configured)\"  placeholder disabled>Copy<\/button>\n                        <\/amp-iframe>\n                    <\/div>\n\n\n\n<p>Enter the password you set (<code>yourpassword<\/code>), and you\u2019ll have full access to VS Code \u2014 from mobile, tablet, or any device!\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2728 Bonus Tips<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use Git: Open the terminal inside code-server and use Git as usual.<\/li>\n\n\n\n<li>Clone multiple repos inside&nbsp;<code>\/home\/coder\/projects<\/code><\/li>\n\n\n\n<li>Install extensions directly from the web interface<\/li>\n\n\n\n<li>Add Docker volumes for persistence<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Conclusion<\/h2>\n\n\n\n<p>You now have a fully functional, browser-based VS Code editor accessible from&nbsp;<strong>any device<\/strong>&nbsp;\u2014 powered by&nbsp;<code>code-server<\/code>and Docker on Ubuntu 24.04.\n\n\n\n<p>You\u2019ve also learned how to install GitHub Copilot and Copilot Chat for a powerful AI-assisted development workflow.\n","protected":false},"excerpt":{"rendered":"<p>Do you want to access Visual Studio Code from your tablet, iPad, Android, iPhone, or any browser-enabled device? With&nbsp;code-server, you can run VS Code on [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":1555,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[267],"tags":[271,270,268,269],"class_list":["post-1551","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-remote-development","tag-access-vs-code-on-android-tablet","tag-access-vs-code-on-ipad","tag-code-server","tag-vs-code-in-browser"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/posts\/1551","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/comments?post=1551"}],"version-history":[{"count":6,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/posts\/1551\/revisions"}],"predecessor-version":[{"id":1560,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/posts\/1551\/revisions\/1560"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/media\/1555"}],"wp:attachment":[{"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/media?parent=1551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/categories?post=1551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zahiralam.com\/blog\/wp-json\/wp\/v2\/tags?post=1551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}