최신글

외부 smtp 설정, gmail naver 개인 사용자 메일

※ 개요; - 외부 이메일 서버를 통해 메일을 송신하는 환경을 구성 - 메일 클라이언트나 애플리케이션에서 외부 SMTP 서버로 메일을 발송 - SMTP 서버의 도메인 이름 - 포트 25, 587(STARTTLS), 465(SSL) 등을 사용 - SSL/TLS 암호화를 적용할지 여부 - SPF, DKIM, DMARC 레코드 추가 - 메일 서버들은 각기 보안 요구 사항이 다름 > SMTP 설정과 인증 정보, SSL/TLS 암호화 방식을 맞춰야 함. > 587, (STARTTLS 암호화) 설정 ※ 사용중인 계정/DNS(IP)의 사용 제한. - Hacking - 기존에 25 port를 사용했다면; - 보안상 막았을 가능성 있으나, 희박함. > ISP ( KT, SK브로드밴드, LG유플러스 등등 )에 확인 > 클라우드 서비스 제공업체 ( 호스팅 중이면 )에 확인 > PHP 에러 로그를 활성화(php.ini) 후, 에러에 따른 점진적인 ※ 사용 중인 DNS(IP)가 블랙리스트에 등록/제한 - 보안이 뚤려서 '오픈 릴레이'로 사용 되면 등록 됬을 수 있음. > https://mxtoolbox.com에서 "blacklist:(서버 DNS)" 를 입력 > 블랙리스트 확인 > 헤제 요청 ※ 개인 사용자 메일' 사용 하기 - 지멜이나 네이버 등의 받는 서버에 사용 중인 DNS 신뢰도 높이기 - DNS 업체 > 관리 페이지 접속 - DKIM, SPF, DMARC 레코드 추가 ■ 무료 웹메일(gmail.com, naver.com 등)을 사용한 외부 발송 서버; - '개인 사용자 메일' 대비, 신뢰도가 상대적으로 약함 - 대량/다수 발송, '외부 발송 서버' 사용 등에는 제한 있음 - 그리고 뱓는 서버에게 신뢰를 주는 데는 무료 웹메일의 한계가 있음. ■ 제한된 후, 해결을 못하셨나요? - 포트 25는 메일 서버 간 통신을 위한 표준 포트여서, "외부 발신 서버" 사용시, 인증 없이(smtp.gmail.com) 메일 전송이 가능하도록 허용됨. = 쉽게 사용 가능, 추천하지 않음.= - 반면, 포트 587과 465는 SMTP 인증과 암호화를 요구하여 보안을 강화한 포트로, 일부 발신 서버에서는 제약을 받을 수 있습니다. ■ 여러모로 시도함에도 제한이 해결이 안되고 '외부 발신 서버'가 꼭 필요 하면, - port 25 사용은 가능 하지만 ??? - 단, 서버 보안이 뚤릴 경우, '외부 발신 서버' 사용자나 비번 없이도 ~ '오픈 릴레이 될 수 있음. - 불법적인 스팸 메일 발송 경로(오픈 릴레이)로 서버가 악용될 수 있음을 유념하세요. ★ 사용 하다가 제한된 경우, 보내는 쪽의 smtp가 막혔을 수 있음 사용하는 서버의 보안 정책 변경이나 인증 설정 오류로 인해 SMTP 서버가 발신을 거부하는 경우가 있다. > 특히 인증 방식(SSL, TLS)이나 포트 설정(587번, 465번 등)에 문제가 없는지 확인.. > 프로젝트 설정에 문제가 없다면, 위에 설명드린, '개인 사용자 메일'을 사용하여 님의 DNS에 3개(DKIM, SPF, DMARC)의 레코드를 추가하여 DNS(도메인)에 맞춘 메일 발송 인증과 보안을 강화. 그러면 모든 서버에 신뢰를 주는 "DNS로 인증된 메일"을 보낼 수 있게 되여, 모든 문제가 해결 됨. > 대형 웹메일 서비스는 인증과 보안을 강화하는데 한계가 있고 사용자의 DNS로 인증하는 방식이 아니(메일계정으로 인증)기에, DNS(IP)에 걸린 제한을 풀기가 쉽지 않음 사용자도 모르는 사이 '오픈 릴레이'로 사용( port 25를 사용하셨다면 )되었을 수 있음 이럴 경우, 모든 서버에서 차단 당함. 경품으로 "블랙리스트"를 받음 ㅠ ㅠ ♥ 또한, PHP 기본 메일 함수(mail())는 SSL/TLS를 기본적으로 지원하지 않음. > 그누보드5 등의 php에서는 포트 465가 작동하지 않습니다. 587+TLS(STARTTLS) 사용. - 모든 DATA를 암호화하려면, 465(SSL/TLS)을 사용 해야 함 - 서버의 php.ini와 프로제트(그누보드5)의 /lib/mailer.lib.php를 수정하면 465(SSL/TLS) 가능 함 > 그누보드6(python)은 587 / 465 사용 가능

No Image

리디렉션한 횟수가 너무 많습니다. httpd.conf, .htaccess, n...

# 웹서버 설정파일 에러 리디렉션한 횟수가 너무 많습니다. httpd.conf, .htaccess, nginx.conf, 웹서버 설정파일 에러 발생. # 리디렉션 설정이 잘못되어, 클라이언트가 동일한 URL로 계속 리디렉션되는 루프가 발생한 것임. - HTTP에서 HTTPS로, 또는 그 반대 방향으로의 리디렉션이 잘못 설정된 경우 (Apache) RewriteEngine On # example.com에서 www.example.com으로 리디렉션 RewriteCond %{HTTP_HOST} ^example.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] # www.example.com에서는 리디렉션하지 않음 (조건 추가) RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] (Nginx) server { listen 80; server_name example.com; # example.com에서 www.example.com으로 리디렉션 return 301 http://www.example.com$request_uri; } server { listen 80; server_name www.example.com; # www.example.com에서는 리디렉션하지 않음 location / { # 리디렉션 없이 그대로 처리 try_files $uri $uri/ =404; } } - A URL에서 B URL로 리디렉션을 설정했는데, B URL에서 다시 A URL로 리디렉션하는 규칙이 있을 경우 - www 접두어와 non-www 버전 간의 상호 리디렉션 설정이 잘못될 경우 (Apache) <VirtualHost *:80> ServerName example.com Redirect permanent / http://www.example.com/ </VirtualHost> <VirtualHost *:80> ServerName www.example.com DocumentRoot /var/www/html # 여기에 추가적인 설정 </VirtualHost> (Nginx) server { listen 80; server_name example.com; return 301 http://www.example.com$request_uri; } server { listen 80; server_name www.example.com; root /var/www/html; # 여기에 추가적인 설정 } server { listen 80; server_name www.example.com; return 301 http://example.com$request_uri; } server { listen 80; server_name example.com; root /var/www/html; # 여기에 추가적인 설정 } - 프록시 설정에서 리디렉션 관련 헤더(X-Forwarded-Proto 등)가 제대로 처리되지 않은 경우 (Apache) <VirtualHost *:80> ServerName example.com # 프록시 패스 설정 ProxyPreserveHost On ProxyPass / http://backend_server/ ProxyPassReverse / http://backend_server/ # 리디렉션 처리용 헤더 설정 RequestHeader set X-Forwarded-Proto "http" </VirtualHost> <VirtualHost *:443> ServerName example.com SSLEngine on SSLCertificateFile /path/to/cert.pem SSLCertificateKeyFile /path/to/key.pem # 프록시 패스 설정 ProxyPreserveHost On ProxyPass / http://backend_server/ ProxyPassReverse / http://backend_server/ # 리디렉션 처리용 헤더 설정 RequestHeader set X-Forwarded-Proto "https" </VirtualHost> (Nginx) server { listen 80; server_name example.com; location / { # 리디렉션 처리용 헤더 설정 proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://backend_server; } } - 브라우저 또는 프록시 서버의 캐시가 잘못된 리디렉션 정보를 유지하고 있는 경우. (캐시 비활성화) (Apache) <Directory "/your/directory"> Header set Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0" Header set Pragma "no-cache" Header unset ETag FileETag None </Directory> (Nginx) proxy_cache_bypass $http_cache_control; proxy_no_cache $http_pragma; add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Pragma "no-cache"; add_header Expires "0"; - 브라우저에서 직접 캐시를 삭제할 수도 있음.

No Image

favicon 설정 구글 검색 색인 - 구글 검색시 파비콘 적용

※ favicon 설정 후, 구글 검색 색인 Google Search Console ♣ 48x48 픽셀의 favicon.ico를 서비스하는 호스트의 DocumentRoot에 생성 하는 것이 일반적 임. - 96x96px, 144x144px, 192x192px 등 48의 배수 (구글의 경우, 이 규칙은 필수) ♣ 웹페이지의 <head> 태그 안에 파비콘을 지정하는 링크를 추가 <link rel="icon" href="favicon.ico" type="image/x-icon"> ♣ 벡터 그래픽(SVG)이나 PNG도 사용 가능 <link rel="icon" href="favicon.svg" type="image/svg+xml"> <link rel="icon" href="favicon.png" type="image/png"> ♣ 크라이언트의 브라우저나 플랫폼에서 웹사이트의 파비콘이 최적화되어 표시되게 하려면 (예시) <link rel="icon" href="/img/favicon/favicon.ico" type="image/x-icon"> <link rel="icon" href="/img/favicon/favicon-32x32.png" sizes="32x32" type="image/png"> <link rel="icon" href="/img/favicon/favicon-16x16.png" sizes="16x16" type="image/png"> <link rel="icon" href="/img/favicon/favicon-192x192.png" sizes="192x192" type="image/png"> <link rel="icon" href="/img/favicon/favicon-512x512.png" sizes="512x512" type="image/png"> <link rel="icon" href="/img/favicon/favicon.svg" type="image/svg+xml"> <link rel="apple-touch-icon" sizes="180x180" href="/img/favicon/apple-touch-icon.png"> <link rel="manifest" href="/img/favicon/site.webmanifest"> <meta name="msapplication-TileColor" content="#ffffff"> <meta name="msapplication-TileImage" content="/img/favicon/mstile-150x150.png"> ★ DocumentRoot의 하위 폴더(/img/favicon)에 다양한 favicon을 만들어 사용할 것을 추전. ♣ 향후 추세를 볼때, 벡터 그래픽(SVG)을 추천 하며, 아래는 보펀적인 설정. <link rel="icon" href="/img/favicon/favicon.svg" type="image/svg+xml"> <!-- SVG 우선 적용 --> <link rel="icon" href="/img/favicon/favicon-16x16.png" sizes="16x16" type="image/png"> <link rel="icon" href="/img/favicon/favicon-32x32.png" sizes="32x32" type="image/png"> <link rel="icon" href="/img/favicon/favicon-48x48.png" sizes="48x48" type="image/png"> <link rel="icon" href="/img/favicon/favicon-192x192.png" sizes="192x192" type="image/png"> <link rel="icon" href="/img/favicon/favicon-512x512.png" sizes="512x512" type="image/png"> <link rel="icon" href="/img/favicon/favicon.ico" sizes="any" type="image/x-icon"> ★ 벡터 그래픽(SVG)은 512x512 해상도를 추천 함 ~ ♣ 필자의 개인 웹페이지에 실사용 중인 favicon 설정. (여러 브라우저나 플랫폼에 맞춤) <link rel="icon" type="image/svg+xml" href="<?php echo GP_FAV_URL ?>/glitter_circle-512.svg" /> <link rel="icon" type="image/png" sizes="512x512" href="<?php echo GP_FAV_URL ?>/favicon-512.png" /> <link rel="icon" type="image/png" sizes="300x300" href="<?php echo GP_FAV_URL ?>/favicon-300.png" /> <link rel="icon" type="image/png" sizes="192x192" href="<?php echo GP_FAV_URL ?>/favicon-192.png" /> <link rel="icon" type="image/png" sizes="180x180" href="<?php echo GP_FAV_URL ?>/favicon-180.png" /> <link rel="icon" type="image/png" sizes="144x144" href="<?php echo GP_FAV_URL ?>/favicon-144.png" /> <link rel="icon" type="image/png" sizes="96x96" href="<?php echo GP_FAV_URL ?>/favicon-96.png" /> <link rel="icon" type="image/png" sizes="48x48" href="<?php echo GP_FAV_URL ?>/favicon-48.png" /> <link rel="icon" type="image/png" sizes="32x32" href="<?php echo GP_FAV_URL ?>/favicon-32.png" /> <link rel="icon" type="image/png" sizes="16x16" href="<?php echo GP_FAV_URL ?>/favicon-16.png" /> <link rel="apple-touch-icon" sizes="58x58" href="<?php echo GP_FAV_URL ?>/favicon-58.png" /> <link rel="apple-touch-icon" sizes="60x60" href="<?php echo GP_FAV_URL ?>/favicon-60.png" /> <link rel="apple-touch-icon" sizes="72x72" href="<?php echo GP_FAV_URL ?>/favicon-72.png" /> <link rel="apple-touch-icon" sizes="76x76" href="<?php echo GP_FAV_URL ?>/favicon-76.png" /> <link rel="apple-touch-icon" sizes="120x120" href="<?php echo GP_FAV_URL ?>/favicon-120.png" /> <link rel="apple-touch-icon" sizes="144x144" href="<?php echo GP_FAV_URL ?>/favicon-144.png" /> <link rel="apple-touch-icon" sizes="152x152" href="<?php echo GP_FAV_URL ?>/favicon-152.png" /> <link rel="apple-touch-icon" sizes="180x180" href="<?php echo GP_FAV_URL ?>/favicon-180.png" /> <link rel="mask-icon" type="image/svg+xml" href="<?php echo GP_FAV_URL ?>/glitter_circle-512.svg" /> <link rel="icon" type="image/x-icon" sizes="any" href="<?php echo GP_FAV_URL ?>/favicon-any.ico" /> ★ favicon-any.ico는 16x16, 32x32, 48x48, 256x256, 215x512 ; 5개 이미지를 포함하는 멀티 해상도 이미지 ♥ favicon 등록 후, 구글 색인 등록 확인 (SEO에 적합한 변경이 발생한 경우면, 자동 재크롤링 됨) - 사이트의 초기 색인에서 완벽한 SEO를 유지하는 것이 중요. ♥ 수동 색인 생성 요청 하기 ; - robots.txt의 설정 확인 ( '/ '크롤링 개방. favicon의 'User-agent'는 'Googlebot-Image' ) - 48x48 픽셀의 favicon.ico를 DocumentRoot에 생성. - '구글서치콘솔(Google Search Console) login - 도메인 속성 추가 (기존 사용 중이면, 속성 선택) - URL 검사 - 실제 URL 테스트 - 색인 생성 요청 > 몇 시간 지나면 색인 될 수 있으나, 7일 정도 소요 됨. - 브라우저 캐시를 지우고, 검색하면 도메인 앞에 favicon이 색인 되였을 것임. ■ SEO와 구조를 최적화혀 크롤러가 재크롤링하게 하는 것이 최상의 방법임. - 48x48px 규칙(배수)은 꼭 지켜야 함 (구글의 경우) - 크롤러, 'Googlebot-Image'의 크롤링이 되여질 때까지 favicon의 URL이 안정된 상태를 유지하여야 함 > '색인이 안되었다' 하여, 자꾸 수정하지 말 것. > 'Googlebot-Image' 크롤러는 택스트-크롤러에 비해, 방문 빈도가 적음. ♠ 위와 같은 설정을 하였는데도, 색인이 안되였다면; 크롤러가 "품질, 메타데이터, 저작권" 등에서 상태 불량 처리한 것 임. - 저작권 문제가 있는 이미지의 경우 - 원본 이미지의 출처가 우선하지 않은 경우 - 품질 및 메타데이터 불량인 경우 > favicon은 고유하고 적법하며, 품질과 메타데이터가 적절한 이미지이여야 함.

No Image

그누보드 글쓰기 6.0.10 으로 업그레이드 설치 후, 게시판 에러. {"de...

{"detail":[{"type":"int_parsing","loc":["body","parent_id"],"msg":"Input should be a valid integer, unable to parse string as an integer","input":""}]} {"detail":[{"type":"int_parsing","loc":["body","comment_id"],"msg":"Input should be a valid integer, unable to parse string as an integer","input":""}]} ♠♠♠ 사용 중이던 그누보드를 6.0.10 으로 업그레이드 후, 에러가 발생하여, >>> 기존 data 수정은 되나 새로운 게시글 저장이 안되는 문제가 있다. >>> DB에는 문제가 없었다. ♠♠♠ 에러의 원인은 ; ※ "g6의 FastAPI 애플리케이션에서 DB의 parent_id 필드(테이블)에 숫자가 아닌 빈 문자열의 입력을 요청 하여서 발생한 것이다." >>> 이 문제는 주로 클라이언트(그누6 사용자)에서 데이터를 잘못 전송했거나, 해당 필드가 필수인데 누락된 경우에 발생할 수 있다. >>> 누락된 경우 란 ; "FastAPI 쪽(g6-FastAPI 애플리케이션)에서 parent_id 필드에 기본값을 설정(초기 설치시)하거나 데이터가 들어오지 않으면 기본값을 넣어주는 로직이 있어야 한다"는데, ~~~ 없다는 것~~~ ♠♠♠ g6-FastAPI 애플리케이션, 원본의 로직 문제로, - 필자는 임의로 수정하여 사용하고 있다. . . . "그누보드6의 계발을 멈춘 것인가?" 싶다 !!! ※ ※ ※ 그누보드6의 소스를 수정하여 해결; 글쓰기 테스트 하기 https://test.glitter.my 그누보드6의 소스: .zip .tar.gz 아래의 다운로드 < < < 다운로드 회원 가입 : https://m.glitter.kr/bbs/register

도커 그누보드 ipTIME NAS200 Web server, Docker re...

ipTIME NAS200을 Web server로 사용하기. 리눅스 SSH를 이용한다. Docker review - +++ 시작에 앞서 내 서버의 Docker가 192.168.0.***의 호스트에 설치된 상황에서, Docker 컨테이너가 172.20.0.0/16 대역의 IP 주소를 사용하는 이유는 Docker의 네트워크 구조 때문이다. Docker는 기본적으로 각 컨테이너에 별도의 가상 네트워크를 할당하여 격리된 환경을 제공하기에 localhost의 DB_server를 같은 네트워크 세그먼트로 인식하지 않기에, 컨테이너가 별도의 IP 주소를 가지면서도 로컬호스트와 같은 네트워크에 있는 것처럼 동작하게 하기 위한 설정을 하기위해 많은 시행착오를 하였기에 이 리뷰를 작성한다. Docker 네트워크 개념 Bridge 네트워크: 기본적으로 Docker는 'bridge' 네트워크를 사용하여 컨테이너를 격리합니다. 이는 호스트의 네트워크와는 별개로 동작하며, 기본적으로 172.17.0.0/16, 172.18.0.0/16, 172.19.0.0/16, 172.20.0.0/16 등의 IP 대역을 사용합니다. 이 때문에 컨테이너 내부에서 확인되는 IP 주소는 호스트의 IP 주소와 다릅니다. Host 네트워크: --network host 옵션을 사용하면 컨테이너가 호스트의 네트워크와 동일한 네트워크 스택을 공유합니다. 이 경우 컨테이너는 호스트의 IP 주소를 직접 사용하게 됩니다. Custom 네트워크: 사용자가 직접 네트워크를 정의할 수도 있습니다. 이를 통해 특정 IP 대역을 지정하여 사용하거나, 필요한 네트워크 설정을 커스터마이징할 수 있습니다. Docker 네트워크 동작 원리 Bridge 네트워크 사용 시: 컨테이너는 각기 다른 IP 주소를 부여받고, 172.20.0.0/16과 같은 대역을 사용합니다. 호스트와는 NAT(Network Address Translation)를 통해 통신합니다. 따라서 외부에서 호스트의 IP 주소로 접근할 때는 포트 포워딩 설정이 필요합니다. 컨테이너 내부 통신: 컨테이너끼리는 Docker 네트워크를 통해 통신할 수 있으며, 컨테이너 이름을 통해 서로를 참조할 수 있습니다. 이는 Docker의 내부 DNS 서비스를 통해 가능합니다. 외부 통신: 컨테이너에서 외부 네트워크로 통신할 때는 호스트의 IP 주소를 통해 NAT를 거쳐 나가게 됩니다. 이는 마치 가정용 라우터에서 내부 네트워크 기기들이 외부로 나갈 때 라우터의 공인 IP를 통해 나가는 것과 비슷합니다. !, 이 링크에 따라 설정을 한다. !. /mnt/VOL1/usr/docker 디렉터리를 먼저 생성한 후 이동- sudo mkdir -p /mnt/VOL1/usr/docker !.Docker 데몬 설정 파일(/etc/docker/daemon.json)을 수정하여 새로운 데이터 디렉터리를 지정합니다. sudo vi /etc/docker/daemon.json 아래 내용을 추가합니다 { "data-root": "/mnt/VOL1/docker" } root 사용자의 home 폴더의 .bashrc 파일에 - export PATH=$PATH:/mnt/VOL1/Docker - 를 추가합니다. Docker 서비스 재시작 sudo systemctl start docker 다음은 도커 컨테이너 3개를 만들어 브라우저에서 phpmyadmin를 실행하여 mariaDB를 관리하는 폴더 구조 예시입니다.(glitter_home 커테이너는 그누보드6 설치) 그누보드6 소스 파일은 glitter_home에 압축을 풀어줍니다. /mnt/VOL1/Docker/ │ ├── db_tools/ ( phpmyadmin 5.2.1 ) │ ├── docker-compose.yml │ └── config/ │ └── config.inc.php │ ├── maria_db/ ( MariaDB 10.6.4 ) │ ├── docker-compose.yml │ └── data/ (데이터베이스 데이터 볼륨) │ └── w_glitter/ (FastAPI 애플리케이션:그누보드6.0.7 실행) ├── .env (환경설정 파일) ├── api/ │ ├── v1 │ │ ├── models (API용 Pydantic 모델 정의) │ │ └── routers (라우터 파일 경로) │ └── settings.py (설정 파일) ├── docker-compose.yml ├── core/ │ ├── models.Py │ ├── routers.py │ └── database.py ├── Dockerfile ├── example.env ├── main.py ├── plugin/ │ └── __init__.py ├── requirements.txt ├── service └── templates/ └── basic/ ├── base.html ├── base_sub.html └── index.html !. db_tools/config/config.inc.php의 내용 - === <?php $cfg['blowfish_secret'] = 'supersecret'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ $i = 0; $i++; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['host'] = 'db'; $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['AllowNoPassword'] = false; ?> !. db_tools/docker-compose.yml의 내용 - === version: '3.8' services: phpmyadmin: image: phpmyadmin/phpmyadmin:5.2.1 container_name: phpmyadmin environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: ******** ports: - "8080:80" #사용자가 자신의 서버상황에 맞추어 설정, localhost:docker networks: - glitter_network restart: unless-stopped volumes: - /mnt/VOL1/Docker/db_tools/config:/var/www/html/config networks: glitter_network: external: true !. maria_db/docker-compose.yml의 내용 - === version: '3.8' services: db: image: mariadb:10.6.4 container_name: mariadb environment: MYSQL_ROOT_PASSWORD: ******** root 사용자 비번 MYSQL_DATABASE: 최초생성 db MYSQL_USER: 최초생성 db 사용자 MYSQL_PASSWORD: 최초생성 사용자 비번 ports: - "3307:3306" #사용자가 자신의 서버상황에 맞추어 설정, localhost:docker volumes: - /mnt/VOL1/Docker/maria_db/data:/var/lib/mysql networks: - glitter_network restart: unless-stopped networks: glitter_network: external: true !. ../w_glitter/alembic 폴더를 만든다. === sudo mkdir alembic !. w_glitter/alembic.ini 의 내용 - === [alembic] script_location = alembic sqlalchemy.url = mysql+pymysql://db사용자:비번@mariadb:3306/사용자 db [loggers] keys = root,sqlalchemy,alembic [handlers] keys = console [formatters] keys = generic [logger_root] level = WARN handlers = console qualname = [logger_sqlalchemy] level = WARN handlers = console qualname = sqlalchemy.engine [logger_alembic] level = INFO handlers = console qualname = alembic [handler_console] class = StreamHandler args = (sys.stderr,) level = NOTSET formatter = generic [formatter_generic] format = %(asctime)s %(levelname)-5.5s [%(name)s] %(message)s [post_run] command = export PYTHONPATH=. [pre_run] command = export PYTHONPATH=. !. w_glitter/docker-compose.yml의 내용 - === version: '3.8' services: w_glitter: container_name: con_w_glitter build: context: . environment: - DATABASE_URL=mysql+pymysql://glitterkr:glitterkr@localhost:3306/glitterkr network_mode: host # 호스트 네트워크 모드 사용 volumes: - /mnt/VOL1/Docker/w_glitter:/var/w_glitter !. w_glitter/Dockerfile 의내용 - === # Use Python base image FROM python:3.12.4 # Set the working directory WORKDIR /var/w_glitter # Copy the requirements file into the container COPY requirements.txt . # Install dependencies RUN apt-get update && \ apt-get install -y gcc build-essential libpython3-dev libssl-dev && \ pip install --no-cache-dir -r requirements.txt && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # Copy the rest of the application code into the container COPY . . # Expose the port the app runs on EXPOSE 8000 # Command to run the application CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] !. 다음의 명령을 각각의 폴더에서 수행 - === cd ../Docker/db_tools docker-compose up -d cd ../Docker/maria_db docker-compose up -d cd ../Docker/w_glitter docker-compose up -d !!!!! . ===== 서비스 테스트를 합니다. 각 서비스가 올바르게 실행되는지 테스트합니다. phpMyAdmin: 웹 브라우저에서 http://<서버 공인 IP 주소>:8080으로 접속하여 phpMyAdmin이 올바르게 실행되는지 확인합니다. MySQL 호스트 정보와 로그인 정보를 입력하여 데이터베이스에 접근합니다. MariaDB: phpMyAdmin을 통해 MariaDB 데이터베이스에 접근하여 데이터베이스 및 테이블이 올바르게 생성되고 접근 가능한지 확인합니다. FastAPI 애플리케이션: 웹 브라우저에서 http://<서버 공인 IP 주소>:8000으로 접속하여 FastAPI 애플리케이션이 올바르게 실행되는지 확인합니다. (그누보드6 초기설치) !. 저는 DNS를 사용했습니다. == apache 리버스 프록시 사용 - <VirtualHost *:80> ServerAdmin humanpc@kakao.com ServerName pma.glitter.kr CustomLog "|/usr/sbin/rotatelogs _logs/pma.glitter.kr_access_log.%Y%m%d 86400 +540" common ErrorLog "|/usr/sbin/rotatelogs _logs/pma.glitter.kr_error_log.%Y%m%d 86400 +540" ProxyRequests Off ProxyPreserveHost On ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/ RequestHeader set X-Real-IP expr=%{REMOTE_ADDR} RequestHeader set X-Forwarded-For expr=%{REMOTE_ADDR} RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME} </VirtualHost> <VirtualHost *:80> ServerAdmin humanpc@kakao.com ServerName w.glitter.kr CustomLog "|/usr/sbin/rotatelogs _logs/w.glitter.kr_access_log.%Y%m%d 86400 +540" common ErrorLog "|/usr/sbin/rotatelogs _logs/w.glitter.kr_error_log.%Y%m%d 86400 +540" ProxyRequests Off ProxyPreserveHost On ProxyPass / http://127.0.0.1:8000/ ProxyPassReverse / http://127.0.0.1:8000/ RequestHeader set X-Real-IP expr=%{REMOTE_ADDR} RequestHeader set X-Forwarded-For expr=%{REMOTE_ADDR} RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME} </VirtualHost> !. 다음은 phpmyadmin과 그누보드6의 컨테이너에 DNS를 이용한 링크입니다. >> phpmyadmin5.2.1 ( http://pma.glitter.kr/ ) >> 그누보드6.0.7 ( http://w.glitter.kr/ ) !!!!!!. 추가로 - Docker 시스템에서 사용하지 않는 모든 이미지, 컨테이너, 네트워크, 볼륨을 삭제합니다. docker system prune -a -f 오래된 로그 파일 삭제 sudo find /var/log -type f -name "*.log" -delete --- !. 추가 팁 . MariaDB 접근 확인 먼저 MariaDB 컨테이너 내부에 접속하여 MySQL 클라이언트를 사용하여 직접 MariaDB에 접근해 봅니다. 이를 통해 MariaDB가 정상적으로 작동하는지 확인할 수 있습니다. sudo docker exec -it mariadb mysql -u root -p . phpMyAdmin 환경 변수 확인 phpMyAdmin 컨테이너의 환경 변수가 올바르게 설정되어 있는지 확인합니다. 특히 PMA_HOST와 MYSQL_ROOT_PASSWORD 값이 MariaDB 설정과 일치해야 합니다. sudo docker exec -it phpmyadmin env - ※※※ 도커 상태 확인 ※※※ - 사용자: root ; - 컨테이너: con_p_glitter !. 작동 -- systemctl daemon-reload systemctl status docker !. log -- docker logs con_p_glitter !. port -- docker inspect con_p_glitter !. used source -- docker stats

김광휘 앱(웹뷰) by glitter gim on Google Play

This is a page introducing 김광휘(Glitter Gim)’s vlog. Glitter's vlog has been approved by IARC for a global rating and registered on the Google Play Store.

during exercise

While riding a bicycle around Naju Lake

while traveling

Prince Philip Park, In Kota Kinabalu, Sabah, Malaysia

while traveling

With friends at a pension in Wando

during exercise

A friend's work while playing a round at a country club.

Still Cut

Still Cut더보기

Glitter Still

Glitter Still더보기

Gallery

Gallery더보기

방문자 집계

  • 오늘 53
  • 어제 60
  • 최대 방문자 수 7,596
  • 금월 방문자 수 80,139

회원로 그 인

로그인 회원가입