RHAIA 01 UB24.04 LTS KD 06
RHAIA 01 UB24.04 LTS KD 06
Nginx + Maria DB + Php + WordPress
[설치 프롬프트]
Virtual box 7.1.6 에 우분투 VM을 설치 하려고 하는데
초보자 입장에서 쉽고 정확하게 설치과정을 매뉴얼화 해서 가이드 만들어줘
설치 목적은 우분투 데스탑을 GUI LNMP서버를 구축하고
워드프레스를 설치하여 그곳에 블로그를 운영하고
도커를 셋팅하여
Portainer를 설치하여 GUI로 관리 할것이고
n8n을 설치하여
설치된 워드프레스에 자동으로 포스팅을 할수 있는 시스템을 구축하려고해
아래는 세팅을 해주어야 할 부분은 셋팅 순서에 맞게 우분투 명령어로 제시해주고
각 과정별로 셋팅시 유의할 점을 체크해가며 알려주고
과정별 상세한 설명도 부탁해
우분투 24.04 LTS 데스크탑 버전을 한국어로 설치
관리자 root 암호 생성 명령어
필요한 업데이트
아이피 주소를 192.168.10.201로 고정정 아이피 셋팅
원격 접속 가능하도록 ssh 서버설치
관련 방화벽
절전 모드 안들어 가게
개인적으로 root 권한으로 로그인 없이 사용할수 있게
한글 입력이 가능하게 언어세팅
아파치 서버 살치
워드프레스를 돌리기 위한 php 설치 및 모든 셋팅
MariaDB 셋팅
재부팅시 서비스 데몬이 항상 자동으로 실행 되도록
Webmin 설치
docker 설치
Portainer CE 설치
n8n 설치
기타 주의사항
안녕 꼮꼬마! 🙂
요청하신 VirtualBox + Ubuntu 24.04 데스크탑 기반의 LNMP(=Nginx + MariaDB + PHP) 환경 구축 + 워드프레스 운영 + 도커(Portainer, n8n) 구성 매뉴얼을 초보자도 따라하기 쉽도록 단계별로 명령어, 주의점, 상세 설명까지 정리했어. (한 가지 확인: 요청에는 “아파치 설치”도 적혀있었는데, 맨 처음에는 LNMP / Nginx라고 하셔서 기본 가이드는 Nginx 기준으로 작성했어. 아파치로 갈아탈 필요 있으면 알려줘!)
전체 순서 개요
- VirtualBox에 Ubuntu 24.04 데스크탑 설치(한국어) — GUI 설치 과정(요약)
- 첫 부팅 후 초기 설정(업데이트, root 비밀번호, 한글 입력 등)
- 고정 IP 설정 (netplan)
- SSH 서버 설치 및 원격 접속 설정
- 전원/절전 설정 (절전 모드 해제)
- root 관련: root 암호 생성 & 로컬 자동 로그인 / 비밀번호 없는 sudo 설정(안전 권장 방식)
- 방화벽 설정(ufw)
- Nginx + PHP-FPM + MariaDB 설치 및 WP용 설정
- 워드프레스 설치 및 퍼미션/데이터베이스 세팅
- 서비스 자동시작 설정(재부팅 시 데몬 자동 실행)
- Webmin 설치(옵션)
- Docker 설치 + Portainer CE 설치(컨테이너 관리 GUI)
- n8n 설치(도커 컴포즈) + 워드프레스 자동 포스팅 연동 방식 안내
- 기타 주의사항 및 점검 체크리스트
각 단계별로 꼭 실행할 명령어, 설명, 유의점 표시했어. 터미널 명령은 모두 sudo로 실행한다고 가정했어(혹시 root로 작업하려면 sudo 생략 가능).
1) VirtualBox에 Ubuntu 24.04 데스크탑 설치 (간단 요약)
- VirtualBox 7.1.6에서 새 VM 생성
- 타입: Linux, 버전: Ubuntu (64-bit)
- 메모리: 최소 2048MB 권장, 4096MB 이상이면 편함
- 가상 디스크: 40GB 권장 (SSD 여유 있으면 더)
- 네트워크: 브리지(또는 호스트 전용 + 포트 포워딩) — 고정 IP를 쓰려면 브리지 추천
- Ubuntu 24.04 데스크탑 ISO로 부팅하여 설치. 설치 시 한국어 선택, 키보드 한국어, 사용자 계정 생성(예: username = ubuntuuser)
주의: 브리지 모드 사용 시 호스트 네트워크에서 IP 할당을 받으므로 라우터 설정(같은 서브넷) 확인 필요.
2) 초기 로그인 후 업데이트, root 비밀번호 생성, 한국어 입력기 설정
터미널 열고:
1) 전체 업데이트
sudo apt update && sudo apt upgrade -y
2) root 비밀번호 생성(관리자 암호)
sudo passwd root
(프롬프트가 나오면 새 root 암호 입력)
설명: 이 명령은 root 계정의 비밀번호를 설정. 보안상 SSH로 root 직접 로그인은 권장하지 않음(아래에서 권장 설정 제시).
3) 한글 입력기(ibus-hangul) 설치 및 로케일
sudo apt install -y ibus-hangul language-pack-ko
sudo locale-gen ko_KR.UTF-8
(설치 후 로그아웃/로그인 또는 재부팅 권장)
유의: GUI에서 Settings → Region & Language에서 한국어 입력 활성화 확인.
3) 고정 IP 설정 (Netplan)
Ubuntu 24.04는 netplan 사용. 예시: 네트워크 인터페이스명이 enp0s3 같은데 환경에 따라 다르니 먼저 확인:
ip a
예시 설정 파일 생성/수정: /etc/netplan/01-netcfg.yaml
sudo nano /etc/netplan/01-netcfg.yaml
내용 (예: 브리지/유선, IP 192.168.10.201, 게이트웨이 192.168.10.1, DNS 1.1.1.1):
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses:
– 192.168.10.201/24
gateway4: 192.168.10.1
nameservers:
addresses: [1.1.1.1,8.8.8.8]
적용:
sudo netplan apply
유의:
- 인터페이스명은 반드시 ip a로 확인 후 반영.
- VirtualBox에서 브리지 모드가 아니라면 고정 IP가 작동하지 않을 수 있으니 네트워크 모드 확인.
4) SSH 서버 설치 및 설정
원격 접속용:
sudo apt install -y openssh-server
sudo systemctl enable –now ssh
SSH로 접속 테스트(호스트에서):
ssh ubuntuuser@192.168.10.201
유의:
- 기본 포트(22) 외 포트 변경 권장(ex. 2222) 및 공개키 인증 권장.
- SSH root 로그인 비활성화 권장. 만약 허용하려면 /etc/ssh/sshd_config 수정:
sudo nano /etc/ssh/sshd_config
PermitRootLogin no ← 기본 권장
(변경 시 systemctl restart ssh)
5) 방화벽 설정 (UFW)
기본적으로 허용할 포트: SSH(22), HTTP(80), HTTPS(443), Portainer(9000/9443) 및 n8n(5678) — 필요 시만 열기.
기본 방화벽:
sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
Portainer http/https (필요시)
sudo ufw allow 9000/tcp
sudo ufw allow 9443/tcp
n8n (필요시)
sudo ufw allow 5678/tcp
sudo ufw enable
sudo ufw status verbose
유의:
- Portainer, n8n은 도커에서 포트 매핑을 통해 제공하므로 컨테이너 설정에 맞게 방화벽 열어야 함.
- 외부에 노출할 경우 IP 제한 또는 리버스 프록시 + 인증을 권장.
6) 절전 모드 해제 (절전/잠자기 방지)
시스템이 절전으로 들어가지 않게:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
또는 GUI에서 전원 설정에서 “자동 절전” 끄기.
유의: 절전을 막으면 노트북 배터리 소모 우려 있으니 데스크탑/서버 환경에서 권장.
7) root 권한으로 로그인 없이 사용하기 (안전한 권장 방식)
요청하신 “root 권한으로 로그인 없이 사용할 수 있게”는 보안 위험이 큼. 대신 더 안전한 방법 두 가지 추천:
옵션 A (권장): 특정 사용자에게 비밀번호 없이 sudo 허용
sudo visudo
파일에 다음 줄 추가 (ubuntuuser를 실제 사용자명으로 변경):
ubuntuuser ALL=(ALL) NOPASSWD:ALL
이제 해당 사용자는 sudo 명령 실행 시 비밀번호 묻지 않음.
옵션 B (GUI 자동 로그인 + 관리자 권한 유지)
- GDM 자동 로그인 설정 또는 Settings → Users → Automatic Login 켜기.
- GUI 자동로그인 후에도 터미널에서 sudo는 기본적으로 비밀번호 요구. 위 NOPASSWD로 해결 가능.
유의:
- 보안상 공용 네트워크나 외부에 노출된 머신에서는 절대 권장하지 않아.
- 가능하면 공개키 SSH, 방화벽, 계정 분리 사용 권장.
8) Nginx + PHP-FPM + MariaDB 설치 (LNMP)
1) 리포지터리 업데이트 및 기본 패키지
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx curl git unzip
2) MariaDB 설치
sudo apt install -y mariadb-server mariadb-client
sudo systemctl enable –now mariadb
3) MariaDB 보안 설정 (mysql_secure_installation)
sudo mysql_secure_installation
대화형으로:
- root 암호 설정(원하면)
- 익명 사용자 제거
- 원격 root 로그인 비활성화 권장
- 테스트 DB 삭제
- 권한 테이블 다시 로드
4) PHP 및 확장 설치 (워드프레스 권장 확장 포함)
Ubuntu 24.04 기준 PHP 8.2/8.3 사용 가능. 예시 PHP 8.2:
sudo apt install -y php8.2-fpm php8.2-mysql php8.2-xml php8.2-mbstring php8.2-curl php8.2-gd php8.2-zip php8.2-intl php8.2-imagick
확인:
php -v
sudo systemctl enable –now php8.2-fpm
5) Nginx 사이트 설정 (워드프레스용 예시)
사이트 루트: /var/www/makerskorean (변경 가능)
sudo mkdir -p /var/www/makerskorean
sudo chown -R ubuntuuser:www-data /var/www/makerskorean
sudo chmod -R 755 /var/www/makerskorean
Nginx 서버블록 예시: /etc/nginx/sites-available/makerskorean
server {
listen 80;
server_name makerskorean.kr www.makerskorean.kr 192.168.10.201;
root /var/www/makerskorean;
index index.php index.html index.htm;
client_max_body_size 50M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
적용:
sudo ln -s /etc/nginx/sites-available/makerskorean /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
유의:
- fastcgi_pass 경로는 설치한 PHP 버전에 맞춰 확인.
- 파일 업로드 제한은 client_max_body_size로 조정.
- SSL은 Let’s Encrypt(권장)로 추가 설정 가능 (certbot 사용).
9) 워드프레스 설치
1) 데이터베이스 생성
sudo mariadb
MariaDB 콘솔에서:
CREATE DATABASE wp_makerskorean DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER ‘wpuser’@’localhost’ IDENTIFIED BY ‘강력한비밀번호’;
GRANT ALL PRIVILEGES ON wp_makerskorean.* TO ‘wpuser’@’localhost’;
FLUSH PRIVILEGES;
EXIT;
2) 워드프레스 파일 다운로드 및 권한 설정
cd /tmp
curl -O https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
sudo rsync -avP wordpress/ /var/www/makerskorean/
sudo chown -R www-data:www-data /var/www/makerskorean
sudo find /var/www/makerskorean -type d -exec chmod 755 {} \;
sudo find /var/www/makerskorean -type f -exec chmod 644 {} \;
3) wp-config.php 설정 (DB 정보 입력)
cd /var/www/makerskorean
sudo cp wp-config-sample.php wp-config.php
sudo nano wp-config.php
DB_NAME, DB_USER, DB_PASSWORD, DB_HOST 등 수정. 그리고 보안키는 https://api.wordpress.org/secret-key/1.1/salt/ 에서 복사해서 넣기.
4) 브라우저로 접속하여 설치 마무리 (도메인 또는 IP)
유의:
- 퍼미션은 꼭 www-data 소유로 설정.
- SELinux는 Ubuntu에선 기본 비활성이라 문제 없음.
- 파일 업로드 문제 발생 시 PHP 설정(upload_max_filesize, post_max_size) 확인.
10) 서비스 자동 시작(재부팅 시 데몬 자동 실행)
기본적으로 systemd로 설치된 서비스는 enable하면 자동 시작됨:
sudo systemctl enable nginx
sudo systemctl enable php8.2-fpm
sudo systemctl enable mariadb
sudo systemctl enable ssh
확인:
systemctl is-enabled nginx
유의:
- 도커 컨테이너는 Docker 서비스가 자동 시작되면 재부팅 시 자동으로 컨테이너가 올라오도록 docker-compose restart 정책 설정 필요.
11) Webmin 설치 (옵션)
Webmin은 웹기반 서버관리 도구. 포트는 기본 10000.
설치:
sudo apt install -y software-properties-common apt-transport-https wget
wget -qO- http://www.webmin.com/jcameron-key.asc | sudo gpg –dearmor -o /usr/share/keyrings/webmin.gpg
echo “deb [signed-by=/usr/share/keyrings/webmin.gpg] http://download.webmin.com/download/repository sarge contrib” | sudo tee /etc/apt/sources.list.d/webmin.list
sudo apt update
sudo apt install -y webmin
접속: https://192.168.10.201:10000 (브라우저에서 경고 뜰 수 있음 — 자체 인증서)
유의:
- Webmin은 강력하니 외부 공개 시 접속 제한(IP) 또는 인증서 설정 필요.
12) Docker 설치
공식 권장 방법:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg
echo \
“deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
Docker 그룹에 사용자 추가:
sudo usermod -aG docker ubuntuuser
로그아웃/로그인 후 적용
유의:
- docker 명령을 sudo 없이 쓰려면 usermod 후 재로그인 필요.
- systemctl enable docker 자동 시작 확인.
13) Portainer CE 설치 (Docker)
간단한 docker compose 예시:
sudo mkdir -p /opt/portainer
cat > /opt/portainer/docker-compose.yml <<‘EOF’
version: “3.3”
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
– “9000:9000”
– “9443:9443”
volumes:
– /var/run/docker.sock:/var/run/docker.sock
– portainer_data:/data
volumes:
portainer_data:
EOF
실행:
sudo docker compose -f /opt/portainer/docker-compose.yml up -d
접속: http://192.168.10.201:9000 (초기 admin 계정 설정)
유의:
- Portainer는 도커 소켓을 사용하므로 호스트에 강력한 권한이 있음. 외부에 공개하면 보안 위험.
14) n8n 설치 (Docker Compose) 및 워드프레스 자동 포스팅 구조
n8n은 노코드 워크플로우 툴. 워드프레스 자동 포스팅은 n8n에서 WordPress 노드(REST API 이용)로 가능. 워드프레스에서 Application Passwords 활성화해 비밀번호형 토큰을 만들어 사용.
예시 docker-compose (간단):
sudo mkdir -p /opt/n8n
cat > /opt/n8n/docker-compose.yml <<‘EOF’
version: “3.8”
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: always
ports:
– “5678:5678”
environment:
– N8N_BASIC_AUTH_ACTIVE=true
– N8N_BASIC_AUTH_USER=admin
– N8N_BASIC_AUTH_PASSWORD=strongpassword
– N8N_HOST=192.168.10.201
– N8N_PROTOCOL=http
– NODE_ENV=production
volumes:
– n8n_data:/home/node/.n8n
volumes:
n8n_data:
EOF
실행:
sudo docker compose -f /opt/n8n/docker-compose.yml up -d
n8n에서 워드프레스 연동:
- 워드프레스에 관리자 → 사용자 → 프로필 → 애플리케이션 비밀번호 생성 → 토큰 복사.
- n8n에서 WordPress 노드 사용하여 POST /wp-json/wp/v2/posts 엔드포인트로 포스트 생성(Authorization: Basic base64(user:application_password) 또는 Bearer 토큰 플러그인 사용하는 방법).
간단 예:
- Trigger: Cron 또는 Webhook
- Action: HTTP Request/WordPress node → POST to /wp-json/wp/v2/posts with title/content/status
유의:
- 워드프레스에서 REST API가 CORS 또는 인증 문제 없도록 설정.
- n8n을 외부에 공개할 경우 추가 인증(여기선 기본 auth 활성화) 및 HTTPS 적용 권장.
15) SSL(HTTPS) 설정 (Let’s Encrypt) — 간단 안내
Certbot 설치:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot –nginx -d makerskorean.kr -d www.makerskorean.kr
자동 갱신:
sudo systemctl enable –now certbot.timer
sudo certbot renew –dry-run
유의:
- 도메인이 public DNS에 올바르게 연결되어 있어야 발급 가능.
- 내부 네트워크, 사설도메인인 경우 DNS 레코드 또는 DNS-01 챌린지 필요.
16) Webmin / Portainer / n8n 등 보안 팁(중요)
- 외부 접근은 방화벽 + IP 제한 + HTTPS 인증서 적용 권장.
- SSH는 공개키 인증 사용, 비밀번호 인증 비활성화 권장.
- Docker 컨테이너는 최소 권한으로 설정, 민감한 볼륨 노출 주의.
- 정기적인 백업(워드프레스 파일 + DB) 자동화 스크립트 제작 권장.
- 관리자 페이지(Webmin, Portainer 등)는 복수 인증/2FA 지원하면 적용.
17) 재부팅 후 점검 체크리스트
- nginx, php-fpm, mariadb, docker, ssh 서비스 상태 확인:
sudo systemctl status nginx php8.2-fpm mariadb docker - Portainer, n8n 컨테이너가 올라오는지:
sudo docker ps - 웹사이트(워드프레스) 열기: http://192.168.10.201 또는 도메인
- 로그 확인: /var/log/nginx/error.log, /var/log/syslog, docker logs
18) 추가 유의사항 & 팁
- PHP 버전: Ubuntu 24.04에 따라 php 버전이 8.2/8.3일 수 있으니 fastcgi_pass 소켓 경로 확인 필수(/run/php/phpX.Y-fpm.sock).
- SELinux 없음(우분투), AppArmor는 활성화돼 있으니 이상 동작 시 확인.
- VirtualBox 게스트 추가(guest additions) 설치로 화면 해상도, 클립보드 편의 개선 가능.
- 백업: mysqldump 자동화(예: cron) + 파일 스냅샷 (NAS 연동 권장).
- 모니터링: 간단히 netdata 같은 도구로 성능/리소스 모니터링 추천.
- 만약 Apache를 원하면 LEMP 대신 LAMP로 바꾸고 apache2, libapache2-mod-php 설치.
꼮꼬마, 원하면 내가 다음을 바로 도와줄게:
- 네 VM의 실제 인터페이스 이름 확인하고 netplan 파일 맞춤으로 작성해주기
- nginx 서버블록, php 설정값(upload_max_filesize 등)을 너 사이트 트래픽/파일 사이즈 기준으로 세부 튜닝
- 도커-컴포즈 파일을 네 도메인/환경변수에 맞춰 완성해주기
- 워드프레스 → n8n 연동용 워크플로우 예시(스텝별 스크린샷 포함) 만들어주기
어떤 거부터 같이 해볼까? ㅎㅎ
좋아 꼮꼬마, Code Server 추가해줄게! 😊
네 환경(우분투 24.04 데스크탑, 이미 Docker/Portainer/Nginx/WordPress 등 세팅 예정)을 고려해서 초보자에게 쉽고 안전한 설치 방법 두 가지(1. Docker 방식 — 권장, 2. 바이너리/패키지 방식)를 단계별로 정리할게. 각 방법마다 Nginx 리버스 프록시 + HTTPS 구성 예시와 보안/유의사항도 함께 줄게. 필요한 건 네가 어느 방식으로 할지 정하면 바로 맞춤 구성 파일(도커 컴포즈, nginx 서버블록, 환경변수 등)을 만들어줄게.
선택 가이드(간단)
- Docker 방식(권장): 설치/업데이트/백업이 쉽고 Portainer로 관리 가능. 컨테이너 격리로 안전.
- 직접 설치(패키지/스크립트): 호스트에 직접 설치되므로 약간 더 복잡하지만 리소스 오버헤드 낮음. 보안 설정을 더 신경써야 함.
아래는 두 방식 모두에 대한 단계별 명령어와 설정, 주의점이야.
공통 전제 확인 (먼저 확인할 것)
- 호스트 사용자명(예: ubuntuuser)과 홈 경로 확인: whoami, echo $HOME
- Nginx가 이미 포트 80/443을 쓰는지 확인: sudo ss -tlnp | grep -E ‘:(80|443)’
- 방화벽 규칙(UFW) 확인: sudo ufw status
- 도메인 사용 여부: 도메인으로 접근할 건지(예: makerskorean.kr) 아니면 LAN IP(192.168.10.201)로 사용할 건지 알려줘.
A. 권장 — Docker 방식 (간단, 안정적)
1) 디렉터리 생성
sudo mkdir -p /opt/code-server
sudo chown -R ubuntuuser:ubuntuuser /opt/code-server
2) 도커 컴포즈 파일 생성 (/opt/code-server/docker-compose.yml)
아래 구성은 Portainer로 관리하기 편하고 데이터는 호스트 볼륨에 보관. 기본 인증은 환경변수로 설정(권장: 강력한 비밀번호 또는 리버스 프록시 뒤에 auth 사용).
cat > /opt/code-server/docker-compose.yml <<‘EOF’
version: “3.8”
services:
code-server:
image: linuxserver/code-server:latest
container_name: code-server
restart: always
environment:
– PUID=1000
– PGID=1000
– TZ=Asia/Seoul
– PASSWORD=StrongPasswordHere # 또는 CODE_SERVER_AUTH=none(리버스프록시+기본 auth 사용 시)
ports:
– “127.0.0.1:8080:8443” # 호스트 로컬 바인딩(직접 외부 노출 금지). 리버스프록시로 접근 권장.
volumes:
– /opt/code-server/config:/config
– /home/ubuntuuser/projects:/home/coder/project
EOF
유의:
- ports 항목을 127.0.0.1로 바인딩해 직접 외부 노출을 막고 Nginx 리버스 프록시로만 접근하게 하는 것이 보안상 좋음.
- PUID/PGID는 실제 사용자 uid/gid로 변경하면 파일 퍼미션 깔끔.
3) 컨테이너 기동
cd /opt/code-server
sudo docker compose up -d
4) Nginx 리버스 프록시 설정 (예: 도메인 makerskorean.kr)
/etc/nginx/sites-available/code-server:
server {
listen 80;
server_name code.makerskorean.kr;
location / {
proxy_pass https://127.0.0.1:8080;
proxy_set_header Host $host;
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 $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_ssl_verify off;
}
}
- 설정 적용 후 nginx -t && sudo systemctl reload nginx
- Let’s Encrypt로 TLS 발급 권장: sudo certbot –nginx -d code.makerskorean.kr
유의:
- code-server는 기본적으로 HTTPS 내부 포트(8443)를 사용함. nginx -> docker의 경우 nginx가 HTTPS 끝단(종단)으로 설정되어 있으면 내부는 HTTP로 바꿔도 되지만, docker 이미지는 기본이 https라 위 예시처럼 https로 포워딩한다(또는 container 설정에 따라 http로 바인딩 가능). 현재 예시는 안전하게 nginx가 인증서 관리.
5) 접근 및 초기 설정
- 브라우저로 https://code.makerskorean.kr 접속 → 비밀번호 입력 → VS Code 환경 사용 가능
- 프로젝트 볼륨(/home/ubuntuuser/projects)에 있는 파일을 편집 가능
6) 자동 시작/백업
- docker compose 파일이 있으면 재부팅 시 자동 기동됨(docker service enabled).
- 정기 백업: /opt/code-server/config 및 프로젝트 디렉터리 백업(cron + rsync 또는 NAS).
보안 팁:
- code-server를 외부 공개할 경우 Nginx에서 Basic Auth 또는 OAuth(제3자 인증) 적용 권장.
- Docker 소켓(/var/run/docker.sock) 절대 노출 금지.
- Portainer에서 컨테이너 관리는 편하지만 Portainer 자체도 MFA/HTTPS 적용.
B. 직접 설치(패키지/스크립트 방식)
1) 설치 스크립트 방식(간단)
curl -fsSL https://code-server.dev/install.sh | sh
2) systemd 서비스 활성화(스크립트가 자동 설정함, 수동 예시)
sudo systemctl enable –now code-server@$USER
3) 기본 설정 파일 위치: ~/.config/code-server/config.yaml
예시 변경 (포트/비밀번호 등):
bind-addr: 127.0.0.1:8080
auth: password
password: StrongPasswordHere
cert: false
4) 리버스 프록시(Nginx) 설정은 Docker 방식의 nginx 예시와 동일. 내부 바인딩 127.0.0.1:8080로 두고 nginx가 TLS 관리.
유의:
- 직접 설치 시 업데이트는 수동(스크립트 재실행 또는 패키지 업데이트) 필요.
- 서비스는 호스트 사용자 권한으로 동작하므로 퍼미션/보안 설정 중요.
C. 세부 보안 및 운영 팁 (꼭 읽어줘)
- 인증: CODE_SERVER_PASSWORD는 안전한 비밀번호로 설정. 가능하면 리버스 프록시(Nginx)에서 추가로 HTTP 기본 인증(Basic Auth) 적용.
- HTTPS: 공개 서비스면 반드시 TLS(Let’s Encrypt) 적용. 내부에서 Caddy를 쓰고 싶으면 Caddy가 자동으로 인증서 관리해줘서 아주 편함(네가 Caddy 추가하고 싶다고 했지? 그럼 Caddy 리버스 프록시 예시도 만들어줄게).
- 포트 노출 줄이기: 컨테이너/서비스는 127.0.0.1 바인딩 → Nginx에서만 접근 허용.
- 사용자 권한: 프로젝트 디렉터리를 code-server 프로세스 소유자와 맞추면 퍼미션 문제 적음. (Docker에서는 PUID/PGID 사용)
- 백업: 설정(/opt/code-server/config 또는 ~/.config/code-server)과 프로젝트 파일 정기 백업.
- 리소스: VSCode 확장, LSP 등은 메모리/CPU 사용하므로 VM 메모리(4GB 이상 권장) 체크.
- 업그레이드: docker image 업데이트 시 docker compose pull && docker compose up -d로 간단. 직접 설치는 스크립트 재실행 권장.
D. 네트워크/방화벽 설정 요약
- UFW: sudo ufw allow ‘Nginx Full’ (80,443 허용), SSH 허용 등. code-server는 내부 바인딩이라 별도 포트 개방 불필요.
- 내부 접근만 허용할 경우 Nginx에서 IP 제한: allow 192.168.10.0/24; deny all; 처럼 설정 가능.
꼮꼬마, 어느 방식으로 진행할래?
- 바로 Docker 방식으로 도커컴포즈 파일 수정해 네 환경(uid/gid, 도메인, 비밀번호)에 맞춰 만들어줄게.
- 아니면 Caddy로 자동 HTTPS + OAuth/HTTPS 설정 포함한 구성으로 해줄까?
원하면 지금 네 사용자명과 원하는 서브도메인(code.makerskorean.kr 같은 것), PUID/PGID(확인 방법: id ubuntuuser), 그리고 비밀번호 방식으로 쓸지(환경변수) 리버스프록시에서 추가 인증을 넣을지 알려줘. 그러면 바로 맞춤 파일과 명령어 한 줄씩 정리해서 줘! ㅎㅎ
