GGUF 파일을 Llama.cpp 도구로 실행하는 방법

AI|2025. 4. 14. 16:25
반응형

Ubuntu 24.04 기준으로 작성하였습니다.

모델 다운로드 디렉토리(/data/Llama4/Q4_K_M/)는 임의로 정하였습니다.

 

 

1. 모델 다운로드

 

모델은 기본적으로 파일 사이즈가 크므로, 용량이 넉넉한 디렉토리를 선택해야 합니다.

 

# mkdir -p /data/Llama4/Q4_K_M

# cd /data/Llama4/Q4_K_M

# wget https://huggingface.co/unsloth/Llama-4-Scout-17B-16E-Instruct-GGUF/resolve/main/Q4_K_M/Llama-4-Scout-17B-16E-Instruct-Q4_K_M-0000{1..2}-of-00002.gguf

 

 

2. Llama.cpp 다운로드

 

Llama.cpp 는 모델을 간단히 가동, 병합, 양자화 등을 할 수 있는 도구 입니다.

 

# apt -y install cmake libopenblas-dev g++ libcurl4-openssl-dev
# git clone https://github.com/ggerganov/llama.cpp.git

# cd llama.cpp
# mkdir build
# cd build
# cmake ..

# cmake --build . --config Release

 

 

3. 분할된 파일 합치기

 

# cd bin

# ./llama-gguf-split --merge \

  /data/Llama4/Q4_K_M/Llama-4-Scout-17B-16E-Instruct-Q4_K_M-00001-of-00002.gguf \

  /data/Llama4/Q4_K_M/Llama-4-Scout-17B-16E-Instruct-Q4_K_M.gguf

 

 

4. LLM 실행

 

1) 로컬 질의

로컬에서 간단히 실행하고 질의합니다.

# ./llama-cli -m /data/Llama4/Q4_K_M/Llama-4-Scout-17B-16E-Instruct-Q4_K_M.gguf -p "오늘은 며칠이야?"

 

2) API 사용

API를 사용해 외부 네트워크에서도 접근 허용합니다.

# ./llama-server -m /data/Llama4/Q4_K_M/Llama-4-Scout-17B-16E-Instruct-Q4_K_M.gguf --host 0.0.0.0 --port 8080

 

다음과 같이 다른 터미널이나 외부 네트워크의 시스템에서 질의해 봅니다.

# apt -y install jq

# curl http://{서버IP}:8080/completion -H "Content-Type: application/json" -d '{
  "prompt": "오늘은 며칠이야?",
  "n_predict": 100
}' | jq

 

반응형

댓글()

Ubuntu 24.04 에서 RTX5080 드라이버 설치하기

리눅스/OS 일반|2025. 4. 11. 12:42
반응형

Ubuntu 24.04 에서 여러 AMD, NVIDIA 제품을 설치해 보았지만, RTX5080 은 설치 방식이 조금 달라서 내용을 기록해 둡니다.

 

 

1. nouveau 드라이버 차단

 

nouveau 드라이버를 블랙리스트에 추가합니다.

# cat <<EOF | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
EOF

 

initramfs 이미지를 업데이트하여 블랙리스트 설정을 반영합니다.

# update-initramfs -u

 

시스템을 재시작 합니다.

# reboot

 

 

2. NVIDIA Driver 설치

 

리포지토리를 추가합니다.
# add-apt-repository ppa:graphics-drivers/ppa

# apt update
 
설치 가능한 드라이버 버전을 확인합니다.
# ubuntu-drivers devices
udevadm hwdb is deprecated. Use systemd-hwdb instead.
udevadm hwdb is deprecated. Use systemd-hwdb instead.
== /sys/devices/pci0000:97/0000:97:01.0/0000:98:00.0 ==
modalias : pci:v000010DEd00002C02sv00001458sd00004196bc03sc00i00
vendor   : NVIDIA Corporation
driver   : nvidia-driver-570-open - third-party non-free recommended
driver   : nvidia-driver-570 - third-party non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

여기에서 위와 같이 recommended(추천) 라고 되어진 버전을 설치하면 됩니다.

# apt -y install nvidia-driver-570-open

 

설치 후 시스템을 재부팅 하면 관련 명령 사용이 가능해 집니다.

# reboot

 

추천 버전을 설치하고 리부팅해도 nvidia-smi 명령이 없다고 출력될 경우에는, 설치했던 버전을 다시 지우고 nvidia-driver-570-open 을 설치해보세요.

 

아래 명령으로 드라이버가 잘 설치된 것을 확인할 수 있습니다.

# nvidia-smi

 

 

3. CUDA 설치

 

설치 방법을 따라 설치를 하면 됩니다. (Install Type 을 runfile 로 선택하면 설치가 간단해 집니다)

# wget https://developer.download.nvidia.com/compute/cuda/12.8.1/local_installers/cuda_12.8.1_570.124.06_linux.run

# sh cuda_12.8.1_570.124.06_linux.run

 

처음 설치 화면이 뜨기까지 시간이 어느정도 소요됩니다.

설치 과정은 Continue 선택 > accept 입력 > (미리 설치했으므로) 'Driver' 제외 및 나머지 기본값으로 Install 입니다.

파일 사이즈가 크기 때문에 여기에서도 시간이 다소 소요됩니다.

 

CUDA 설치가 완료되면, ~/.bashrc 파일에 경로를 추가하여 CUDA 바이너리에 접근할 수 있도록 합니다.

# echo 'export PATH=/usr/local/cuda-12.8/bin:$PATH' >> ~/.bashrc

# echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc

# source ~/.bashrc

 

설치된 CUDA 버전을 확인합니다.

# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Fri_Feb_21_20:23:50_PST_2025
Cuda compilation tools, release 12.8, V12.8.93
Build cuda_12.8.r12.8/compiler.35583870_0

 

반응형

댓글()

Tomcat9에서 사용하던 war파일 Tomcat10에서 배포하기 (Gaucamole 1.6.0)

리눅스/OS 일반|2025. 3. 17. 16:58
반응형

Java EE가 Eclipse 재단으로 이관되면서 Tomcat 10.0 버전부터 패키지 네임스페이스가 javax.* → jakarta.* 로 바뀌었습니다.

Guacamole 1.6.0은 javax.* 기반이라 Tomcat10(Jakarta)와 바로 호환되지 않습니다.

이럴때 두가지 해결책이 있습니다.

- Tomcat 9 사용하기

- 변환 도구를 이용해 war파일 패키지를 변환하기

 

여기에서는 변환 도구를 이용한 방법으로 Guacamole-1.6.0 파일을 변환해보겠습니다.

* jakartaee-migration-1.0.9-shaded.jar : 의존성까지 포함된 단일 실행 jar

 

 

1. 변환 받기

예시로 Guacamole-1.6.0.war 파일과 변환 도구를 다운로드 합니다.

# wget -O guacamole-1.6.0.war https://apache.org/dyn/closer.lua/guacamole/1.6.0/binary/guacamole-1.6.0.war?action=download

# curl -OL https://repo1.maven.org/maven2/org/apache/tomcat/jakartaee-migration/1.0.9/jakartaee-migration-1.0.9-shaded.jar

 

2. war 변환

형식) java -jar {변환 도구} {입력 파일} {출력 파일}

# java -jar jakartaee-migration-1.0.9-shaded.jar guacamole-1.6.0.war guacamole.war

 

3. 배포

# systemctl stop tomcat10

# rm -rf /var/lib/tomcat10/webapps/guacamole*     # 동일한 패키지명을 사용중이라면 삭제 (필요시 백업하세요)

# cp -arp guacamole.war /var/lib/tomcat10/webapps/

# systemctl start tomcat10

 

4. 확인

# curl -I http://{서버IP}:8080/guacamole/

 

* 참고

변환 도구는 javax.* → jakarta.* 치환을 해주지만, 서드파티 라이브러리 호환성 때문에 100% 보장되진 않습니다.

Guacamole 1.6.0은 공식적으로 Tomcat 9(서블릿 4/javax.*)을 권장합니다. 가능하면 Tomcat 9 사용이 가장 안정적입니다.

서명 검증이 필요하면 .asc로 PGP 검증을 하거나, 최소한 sha1/md5 해시를 확인하세요.

 

반응형

댓글()

RockyLinux 9 에서 root 원격접속 허용하기

리눅스/OS 일반|2025. 3. 14. 09:29
반응형

일반계정이 아닌 root 로 바로 접근을 허용하려는 경우 아래와 같은 SSH 설정 옵션으로 셋팅 후 데몬을 재시작 해 줍니다.


# vi /etc/ssh/sshd_config

...
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication yes
...

 

# systemctl restart sshd

 

반응형

댓글()

AMD Radeon w6800 + Ollama + DeepSeek-R1:70B 사용하기

AI|2025. 2. 21. 11:51
반응형

[ 테스트 환경 ]

- OS : Ubuntu 24.04 LTS

- GPU : AMD Radeon w6800 * 4EA

- Memory : 64GB * 12EA = 768GB

- Disk : 1TB * 2EA

 

미리 결론부터 말하자면, 이 환경으로 DeepSeek-R1:70B 모델은 동작하지만 (2 GPU 가 사용됨), DeepSeek-R1:671B 모델은 실행되지 않습니다.

따라서 아래 내용은 DeepSeek-R1:70B 모델 사용을 예로 들었습니다.

 

 

1. AMD Radeon 드라이버 설치

 

GPU 카드 활용을 위해 우선 드라이버를 설치해야 합니다.

테스트 환경은 AMD Radeon w6800 이므로 AMD Radeon 드라이버 설치하는 방법을 설명드립니다.

 

[ 공식 Documents ] Ubuntu 24.04 환경에서 설치하기

https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/quick-start.html

 

# apt update && apt -y upgrade

# apt -y install "linux-headers-$(uname -r)" "linux-modules-extra-$(uname -r)"

# apt -y install python3-setuptools python3-wheel

# usermod -a -G render,video $LOGNAME

# wget https://repo.radeon.com/amdgpu-install/6.3.2/ubuntu/noble/amdgpu-install_6.3.60302-1_all.deb

# apt -y install ./amdgpu-install_6.3.60302-1_all.deb

# apt update

# apt -y install amdgpu-dkms rocm

 

모든 설정을 적용하려면 시스템을 재부팅해야 합니다.

# reboot

 

리부팅 후 아래 명령으로 설치 상태를 확인할 수 있습니다.

장치명이 출력되면 드라이버 설치가 잘 된 것으로 판단할 수 있습니다.

lspci 등으로 장치가 인식되었으나 아래 명령으로 장치명이 출력되지 않는다면, 드라이버 설치가 제대로 되지않은 것입니다.

# clinfo |grep 'Board name'

# rocminfo |grep 'Marketing Name'

# rocm-smi

 

 

2. Ollama 설치

 

Ollama 는 Llama 를 기반으로 개발자와 사용자들이 Llama 모델을 쉽게 사용하고 확장할 수 있도록 지원하는 도구입니다.

설치 스크립트를 다운로드 받아 실행하면 자동 설치됩니다.

# curl https://ollama.ai/install.sh | sh

 

데몬에서 서비스 대역을 모두 허용하고, 실제 제한은 iptables 로 하는 것이 편리합니다.

Ollama 서비스 환경을 아래와 같이 변경할 수 있습니다.

[Service] 섹션에 접근 HOST 를 정할 수 있으므로, 필요시 활용해 보세요.

또한, LLM 저장 디렉토리를 변경하려는 경우 디렉토리 생성 및 퍼미션 조정 후 Systemd 서비스 유닛 파일에 등록하면 됩니다.

# mkdir /data/models

# chown ollama:ollama /data/models

# vi /etc/systemd/system/ollama.service

...

[Service]

Environment="PATH=/usr/local/cuda-12.4/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
Environment="OLLAMA_HOST=0.0.0.0"

Environment="OLLAMA_MODELS=/data/models"

...

 

변경된 환경을 적용해주고, 부팅 설정과 동시에 데몬을 구동합니다.

# systemctl daemon-reload

# systemctl enable --now ollama

 

열려진 Ollama 포트를 확인합니다.

# apt -y install net-tools

# netstat -nltp |grep ollama

 

Ollama 에서 손쉽게 다운로드하고 사용 가능한 모델은 아래 URL 을 참고해주세요.

https://github.com/ollama/ollama#model-library

 

원하는 모델을 다운로드 합니다.

여기에서는 DeepSeek-R1:70B 모델로 다운로드 하겠습니다.

참고로 70B 는 "70 billion parameters" 라는 표현으로, 모델이 700억 개의 학습 가능한 파라미터를 가지고 있다는 것을 의미합니다.
# ollama pull deepseek-r1:70b

 

참고로 다운로드 명령 없이 바로 실행 (ollama run deepseek-r1:70b) 하게 되면, 다운로드 먼저하고 실행됩니다.

 

 

3. 테스트

 

1) 로컬에서 실행하기

설치했던 모델로 실행을 하고 간단한 질문을 해봅니다.

본 모델은 한글을 지원하지 않으므로 잘 동작하는지 테스트만 진행해 보겠습니다.

# ollama run deepseek-r1:70b
>>> Hello? Who are you?
<think>

</think>

Hello! I'm DeepSeek-R1, an artificial intelligence assistant created by DeepSeek. I'm at your service and would be delighted to assist you with any inquiries or tasks you may have.

>>> /bye

 

모델과 질문을 붙여서 실행하면 명령 대기 프롬프트 없이 간단히 사용할 수 있습니다.

# ollama run deepseek-r1:70b "How old are you?"
<think>

</think>

I'm an AI assistant created by DeepSeek, so I don't have an age. I'm here to help you with information and tasks! Let me know how I can assist you.

 

또는, 긴 내용의 텍스트를 직접 복사, 붙여넣지 않고 파일로 되어있는 상태 그대로 LLM 에게 작업을 요청할 수 있습니다.

# ollama run deepseek-r1:70b "Summarize the content of this file in 50 words." < input.txt

 

출력 결과를 파일로 저장할 수도 있습니다.

# ollama run deepseek-r1:70b "Tell me about renewable energy." > output.txt


2) 외부에서 API 로 실행하기

다른 PC 또는 서버에서 아래와 같이 API 로 접근하여 서비스 이용이 가능합니다. 

예제를 실행하는 김에 json 형식으로 예쁘게 출력하기 위해 jq 패키지를 미리 설치합니다.

# apt -y install jq

# curl http://localhost:11434/api/chat -d '{
  "model": "deepseek-r1:70b",
  "stream": false,
  "messages": [
    { "role": "user", "content": "Hello? Who are you?" }
  ]
}' | jq

 

(결과)

{
  "model": "deepseek-r1:70b",
  "created_at": "2025-02-27T00:00:46.737167483Z",
  "message": {
    "role": "assistant",
    "content": "<think>\n\n</think>\n\nHello! I'm DeepSeek-R1, an artificial intelligence assistant created by DeepSeek. I'm at your service and would be delighted to assist you with any inquiries or tasks you may have."
  },
  "done_reason": "stop",
  "done": true,
  "total_duration": 7971527920,
  "load_duration": 63402422,
  "prompt_eval_count": 9,
  "prompt_eval_duration": 140000000,
  "eval_count": 44,
  "eval_duration": 7766000000
}

 

위 출력된 내용을 기반으로 토큰 출력 속도를 계산해봅니다.

"eval_count": 44
"eval_duration": 7742000000  # (단위: 나노초)

 

tokens_per_sec = 44 / 7.742 = 5.68 tokens/sec

 

GPU 연산 속도도 확인할 수 있습니다.

이는 동일한 질문으로 GPU 간의 성능 비교에 사용할 수 있습니다.

"eval_duration": 7742000000  # (단위: 나노초)

 

eval_time_sec = 7742000000 / 1000000000 = 7.742 sec

 

 

==================== 참고 ====================

※ 토큰 속도 및 소요시간만 출력

질문, 답변에 상관없이 출력토큰을 테스트 해보기 위해서는 아래와 같이 실행하면 토큰 속도만 출력됩니다.

(다른 모델로 테스트 해보았으나 방법이 다르지 않습니다)

# apt -y install jq

# curl -s http://localhost:11434/api/chat -d '{
  "model": "gemma3:27b",
  "stream": false,
  "messages": [
    { "role": "user", "content": "대한민국의 수도는?" }
  ]
}' | tee /tmp/api_response.json | jq '{
  tokens_per_sec: (.eval_count / (.eval_duration / 1000000000)),
  eval_time_sec: (.eval_duration / 1000000000)
}'

 

(결과)
{
  "tokens_per_sec": 42.55319148936171,
  "eval_time_sec": 0.282
}

 

※ 답변과 토큰 속도 및 소요시간 출력

이번에는 답변과 토큰속도, 소요시간을 같이 출력해 봅니다.

jq 에 . + 만 포함하였습니다.

# curl -s http://localhost:11434/api/chat -d '{
  "model": "gemma3:27b",
  "stream": false,
  "messages": [
    { "role": "user", "content": "대한민국의 수도는?" }
  ]
}' | tee /tmp/api_response.json | jq '. + {
  tokens_per_sec: (.eval_count / (.eval_duration / 1000000000)),
  eval_time_sec: (.eval_duration / 1000000000)
}'

 

(결과)
{
  "model": "gemma3:27b",
  "created_at": "2025-03-18T01:24:13.520260831Z",
  "message": {
    "role": "assistant",
    "content": "대한민국의 수도는 **서울특별시**입니다.\n"
  },
  "done_reason": "stop",
  "done": true,
  "total_duration": 423673487,
  "load_duration": 106440511,
  "prompt_eval_count": 15,
  "prompt_eval_duration": 38000000,
  "eval_count": 12,
  "eval_duration": 276000000,
  "tokens_per_sec": 43.47826086956521,
  "eval_time_sec": 0.276
}

============================================

 

 

4. 웹 UI 도구 설치하기

 

시스템에 원격접속하여 사용이 가능하지만, 좀더 편리하게 웹 UI 도구를 이용할 수 있습니다.

현재 나와있는 Ollama 웹 UI 는 여러개지만, 여기에서는 제일 인기있는 도구 Open WebUI 를 사용해 보겠습니다.

 

Open WebUI 는 가장 인기가 많은 chatGPT 스타일의 웹 인터페이스이며, 한글 인터페이스도 지원하는 오픈소스 입니다.

- URL : https://github.com/open-webui/open-webui

 

패키지 관리도구 pip 와 가상환경 기능을 사용하기 위해 venv 를 설치합니다.

# apt -y install python3-pip python3.12-venv

 

가상환경 myenv 를 생성하고 활성화 합니다.

# python3 -m venv myenv

# source myenv/bin/activate

 

가상환경에서 Open WebUI 를 설치하고 가동합니다.

(myenv) root@sysdocu:~# pip install open-webui

(myenv) root@sysdocu:~# open-webui serve

 

설치 및 가동이 완료되면 로컬에 8080 포트가 열려집니다.

작업자 PC 또는 서버의 브라우저에서 아래와 같이 접속이 가능합니다.

http://{서버 IP}:8080

 

Open WebUI 에서는 ChatGPT 와 유사한 인터페이스를 보여줍니다.

여기에서 모델은 선택 후, 간단한 질의를 하여 답변을 얻을 수 있습니다.

여기에서는 워크 스페이스 메뉴를 통해 챗봇을 만들어 보겠습니다.
순서는 지식 파일 생성 > 지식 생성 > 모델 (챗봇) 생성 순 입니다.

 

(메모장으로 지식 파일 만들기)
파일명 : nickname.txt
내용 : Donghoon Cha's nickname is Chacha.

 

(지식 추가)
워크 스페이스 > 지식 기반 > (화면 우측 + 버튼)
이름 : nickname
설명 : test
컬렉션 검색 : (파일 업로드) nickname.txt
[지식 생성] 버튼

(모델 추가)

워크 스페이스 > 모델 > (화면 우측 + 버튼)
이름 : testbot
기본 모델 : deepseek-r1:70b
모델 파라미터 : When I enter a number, multiply it by 10 and output it.
지식 기반 : (위에서 만든) nickname
[저장 및 생성] 버튼

만들어지면, 바로 보이는 봇을 선택하여 대화를 시작할 수 있습니다.

테스트1) 10
테스트2) What is Donghoon Cha's nickname?

 

반응형

댓글()

vLLM 설치 및 모델들 사용하기 (NVIDIA GPU 전용)

AI|2025. 2. 20. 08:19
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Ubuntu 24.04 APT 저장소 및 키 초기화 하기

리눅스/OS 일반|2025. 2. 19. 10:31
반응형

모든 추가 저장소 삭제
# rm -f /etc/apt/sources.list.d/*.list

모든 GPG 키 삭제
# rm -f /etc/apt/keyrings/*.gpg

기본 APT 저장소 복구 (Ubuntu 24.04 Noble 기준)
# tee /etc/apt/sources.list <<EOF
deb http://archive.ubuntu.com/ubuntu noble main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu noble-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu noble-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu noble-security main restricted universe multiverse
EOF

APT 캐시 및 설정 초기화
# apt clean
# apt autoclean
# apt -y autoremove --purge
r# m -rf /var/lib/apt/lists/*

저장소 업데이트 및 확인
# apt -y update && apt -y upgrade

 

반응형

댓글()

RockyLinux 9 기본 방화벽 변경하기 (firewalld -> iptables)

리눅스/Security|2025. 1. 10. 14:35
반응형

Rocky Linux 9는 기본적으로 firewalld를 사용하지만, iptables를 설치하고 사용할 수도 있습니다.

아래는 iptables 설치 및 활성화 방법입니다.

 

1. firewalld 비활성화

우선 사용하지 않을 firewalld 를 비활성화 합니다.

# systemctl disable --now firewalld

 

2. iptables 설치

iptables 패키지를 설치합니다.

# dnf -y install iptables iptables-services

 

3. iptables 룰 작성

방화벽을 가동하기 전에 룰셋을 정합니다.

# vi /etc/sysconfig/iptables

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT

-A INPUT -s 192.168.10.2/32 -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

COMMIT

 

 

4. iptables 방화벽 가동 

# systemctl enable --now iptables

 

5. iptables 상태 확인

# systemctl status iptables

# iptables -nL

 

반응형

댓글()

RTX 4090 + Ubuntu 24.04 + (Llama 3.2-3B & 한국어 언어 모델) 설치하기

AI|2024. 12. 27. 13:31
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Nginx 에서 Proxy 구성시 Arguments 사용하기

리눅스/APACHE|2024. 12. 12. 12:35
반응형

Nginx 를 프록시 서버로 만들건데, Backend 서버를 내가 원하는 IP 로 접속하는 예제 입니다.

Client 에서는 Backend 서버에 직접 접속이 안되기 때문에, 프록시 서버를 이용하는 것입니다.

 

- 접속예 : http://www.sysdocu.kr/?url=192.168.10.2

- 192.168.10.2 사설 IP 를 가진 서버에 www.sysdocu.kr  이라는 프록시 서버를 이용해 접근합니다. (통신, 트래픽 흐름)

 

nginx.conf 파일에서 서버 구성내용을 아래와 같이 수정합니다.

아래 예시에서는 upstream 없이 구성하였습니다.

url 값은 arg_url 로 받아야 합니다.

 

# vi /etcc/nginx/nginx.conf

...

    ###################################
    server {
        listen 80;
        server_name www.sysdocu.kr;

        # 404 에러 페이지 (선택, 404 출력 파일의경로와 파일명 입력)

        location = /custom_404.html {

            root /etc/nginx;

            internal;

        }

 

        location / {
            set $backend "http://$arg_url";
            proxy_pass $backend;
            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 Connection "";
        }
    }
    ###################################

...

 

# systemctl restart nginx

 

반응형

댓글()

안드로이드 java 에서 웹페이지 출력 내용을 String 에 넣기

프로그래밍/Android (Java)|2024. 11. 30. 22:39
반응형

(onCreate 안에서)

 

        // 웹페이지의 내용을 가져오기
        new Thread(() -> {
            // AtomicReference 사용
            AtomicReference<String> webContent = new AtomicReference<>("");

            // fetchWebPage 결과를 AtomicReference에 저장
            webContent.set(fetchWebPage("https://sysdocu.tistory.com/list.html"));

            runOnUiThread(() -> {
                // UI 스레드에서 Toast 실행
                Toast.makeText(MainActivity.this, webContent.get(), Toast.LENGTH_SHORT).show();
            });
        }).start();

 

 

(onCreate 밖에 같은 레벨에서)


    // 웹페이지 json 코드 가져오기
    private String fetchWebPage(String urlString) {
        String result = "";
        OkHttpClient client = new OkHttpClient();
        // 요청 객체 생성
        Request request = new Request.Builder()
                .url(urlString)
                .build();
        try {
            // 요청 실행 및 응답 받기
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                result = response.body().string(); // 응답 내용을 String으로 변환
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

반응형

댓글()